I believe I understand where the designer is coming from. Traditional languages use a 1D syntax to express a structure that is really not 1D (the parse tree). However, I don't think it's really 2D either. If you think about how an interpreter would have to proceed to execute Recto code, it would still parse it into an internal representation and then execute that, and this internal representation no longer uses the 2D layout of the code.
I'm not implying that it's a bad idea or anything. To the contrary, I think Recto is a cool idea. I'm just skeptical that simply making a language syntax two-dimensional automatically makes it easier to understand, code in, collaborate in, or implement a parser/interpreter/compiler for.
Adding parallel execution will make it true 2D at execution time. Even though it's sequential code. More over it can be logically, architecturally 2D while being 1D from interpreter's standpoint. If it uses cooperative multitasking with 1 running task at a time. Or simply 1 core processor.
If there were any actual "in-game effect" of the rectangles — e.g. a "rotate rectangle" primitive that would change the order in which atoms were evaluated; or some meaning given to overlapping rectangles as in OgsyedIE's comment — then it would be much more interesting, because it would no longer be exactly isomorphic to Lisp/Scheme.
Anyone having a look at a musical score can conclude this is wrong.
Even when it comes to spoken language, intonation is conveying a lot, even in languages which are not classified as tonal.
All that said, that's nice to see an exploration of exotic expression form. It doesn't need to down other approach to make shine its own.
Recto, by contrast, makes two dimensions part of the syntax itself: elements and rects can expand horizontally or vertically, and they can nest recursively. That's the difference I wanted to highlight.
The reason why most people would more intuitively consider a music score as multidimensional has to do with parallelism or concurrency.
In theory, nothing is stopping you from creating a hyperarray language a la BQN++ (or dare I say QRP). Maybe I glossed over an example, but having proper pointwise application to hyperscalars feels like a must-have.
Second idea is to introduce process parallelism, which could actually make this form of syntax into an execution graph of sorts--could be quite promising!
sheet music isn't a language, it's a notation. it's just a concise way to represent a waveform (a song). and it's certainly one dimensional because you either play the song forwards or backwards.
of course not a language in the same way English or Spanish are languages, but certainly a language in the same way mathematical formula, Lisp, or Java are languages.
>certainly one dimensional
The X axis represent time and the Y axis represent pitch. Moreover, you can have multiple pitches at the same time. I'm not a musician nor a geometrician but it does seems 2D to me, in a way regular text is not.
It is mostly certainly not - the defining feature of all languages (human, formal, mathematical, programming) is that you can define new words/concepts/primitives. Sheet music is notation.
Yet they are languages according to formal language theory, a definition which I’d say is a bit more widespread than yours. Indeed what you propose roughly maps to (a subset of) context-sensitive languages in particular.
Defining new primitived isn’t really essential. What matters is what you can express with the existing primitives and grammar rules. And sheet music has been quite successful at expressing incredibly complex musical concepts just fine.
(Also there’s the fact that sheet music can contain arbitrarily complex instructions to the performer in natural language, and define new notations too. But composers usually refrain from doing that for the same reason that people don’t go around inventing new idiosynchratic words in English unless they’re SF authors.)
I love when people talk down to me as if I don't have a PhD in this shit lol. No actually what I'm talking about is Recursive languages.
> Then regex, HTML, YAML, and so on are not languages either according to your definition.
Do you see the M before the L there in both HTML and YAML? Do you know what it stands for? Markup. Markup is a funny word that colloquially means the same thing as annotate which bears a strong relationship to the word notation hmmmmmmmm.
Let me put it simply: if the force of the original comment is that context free languages can be 2d then I would say..... no duh.
written language isn't a language, it's a notation. it's just a concise way to represent a waveform (a spoken sentence). and it's certainly one dimensional because you either read forwards or backwards
My guy you realize that not all alphabets are phonetic lol
> it's certainly one dimensional because you either read forwards or backwards
Umm yes thank you for reiterating my point
Also I wonder if positional parameters would need to be replaced by named arguments.
The other meaning of "recto" is used only in medical literature or in mean jokes where you pretend to talk seriously.
I worked with teachers of other countries of Latam, sometimes in geometry problems for children. For example, it's usual "ángulo recto". I don't have it in my list of taboo or problematic words.
For example a kite-like cuadrilateral has a different names in each country, none in offensive, but you must be very cautios to ensure everyone understand the same meaning.
Also, ur kids dont understand am/pm that is usual in other countries. To avoid problems everything must be between 1:01 and 11:59.
When I look at Orca (https://100r.co/site/orca.html) I’m reminded of it, but it was definitely unique. Anyone happen to remember / have a link to a successor?
> 2003
> PATH is a programming language that is similar to Brainfuck. This intuitive language requires a simple grasp of two dimensional space, one requirement that almost no other programming languages have.
No languages captures time as a dimension, yet.
[1] https://esolangs.org/wiki/Esolang:Categorization#Dimensions
A time paradox from [2]:
create x = 10;
time point;
print x; //prints 10 in first timeline, and 20 in the next
create traveler = 20;
traveler warps point{
x = traveler;
traveler kills traveler;
};
[1] https://esolangs.org/wiki/EmiT, https://github.com/nimrag-b/emiT-C[2] https://www.reddit.com/r/ProgrammingLanguages/comments/1golf...
It's also worth checking out Extempore[1] by Andrew Sorensen and Ben Swift, which grants you have incredibly precise timing semantics at the sample level.
"Each extempore process has a scheduling engine built-in, allowing tasks to be scheduled for execution at a precise time in the future. Unlike threading constructs such as sleep() or wait(), which don’t provide strong guarantees about temporal accuracy (i.e. the time they’ll sleep/wait for), Extempore's scheduling engine is guaranteed to execute its tasks at the requested time (the number of audio samples since Extempore was started). This temporal guarantee is significant for time critical domains such as audio and graphic, and real-time systems programming."
What's cool about this is that you're able to modify the program while it's running, and only update sections of it at a time, using the editor as a scratchpad, and it supports networking so you can precisely synchronize a herd of non-local devices and do things you'd have an extremely hard time doing in other languages. The applications extend far beyond just audio and visual programming.
What both of these languages have in common is that they are designed for live coding, or as Sorensen says, cyberphysical programming. I am very interested in the marriage of these technologies and recent transformer models.
https://www.i-programmer.info/babbages-bag/325-mcculloch-pit...
It does so by creating instant connection between events across large distances.
Its inerrant parallalelism makes it also possible to do pretty complex evaluation on large canvases.
Maybe not exactly, but there was one task[1] in ICFPc 2024[2] where you create programs that are laid out in 2D, and there is a special operator that causes the control flow to travel back in time. It was super fun.
[1] https://github.com/icfpcontest2024/icfpc2024/blob/main/stati...
There are also experiments into going higher than that: https://esolangs.org/wiki/Category:Multi-dimensional_languag...
With the bandwidth left from parsing all that new information, all I can say is this is something. I know there's still a whole lot of figuring out to do.
(I imagine if there were peeps from other-than-earth, they'd probably communicate in a manner as this - depicted in the "Arrival" movie)
Thanks for sharing. I'll be donating a star on github and keeping watch-O