LOOKALIVE is a minimalist approach to software development where programs transform themselves into their resulting data structures.
Standard JSON syntax is used to arrange text, numbers, lists and dictionaries. Substitutions are made wherever one of the following symbols occur:
#='Label' attaches a name to any data structure for referencing later in the program
#&'Lookup' replaces itself with the data previously given a label
#!'Solve' becomes the result of a function call
#?'Switch' performs pattern matching and conditional branching
LOOKALIVE can call out to any other programs so long as input and output are handled as valid JSON. When run serverside, any executable in the current PATH can be called by name. When run in a web context, it expects the function to be defined in the window. In the following example, the join program takes a list of strings and returns its greeting as a single string.
On the left is the original program in JSON format, and on the right is a visual step-by-step expansion of the program execution. Being able to step through each transformation of the complete data structure is LOOKALIVE's essential feature for beginners just learning to code as well as experts trying to understand complex transformations.
The next example uses a shorthand for passing arguments to multiply, which takes a list of numbers and returns their product. If the program is executed with a single argument of '12', the program becomes '#!multiply 12 12', which replaces itself with the number 144, which on its own is still a valid JSON document.
In larger programs, stepping through the transformations shows what operations can be done in parallel and what functions are waiting for others to complete. Parallel and Asynchronous programming in other languages can be difficult to plan and debug, but with LOOKALIVE, everything that has the data it needs to compute will be executed in paralell, and anything that is waiting on a value (whether its a computationally intensive task or a slow network request) will be completed as soon as the value becomes available.
Here, the references to the side and base variables are resolved simultaneously, and the sentence "A triangle with side of 3 and base of 4 has a hypotenuse of 5" is joined after all steps of the math are completed in order.
LOOKALIVE is in development. A first release will use functions written in NodeJS, but WebAssembly will allow the JSON file to refer to functions written in a variety of langauges, such as C, Rust, Go, and Java. LOOKALIVE doesn't need to know what happens inside the function calls, it merely keeps track of what variables to pass to the function and what the function returns. In this way, it can be used to build sophisticated tools out of simple machines.
BONUS: Because there are no keywords in the LOOKALIVE language, all function and reference names are user-defined, so programs can be written in a programmers native language. Right-To-Left and Top-To-Bottom scripts will be supported, as seen in this mockup of the above program in google-translated-japanese: