News for hackers. Stuff that matters.
Re:Designing a programming language to speedrun Advent of Code by hnlmorg on Tuesday November 14, 2023 @03:41AM (#38260646)
No, what the author is discussing is a syntax thing.

Lets take a hypothetical C-like language:

    result = C(B(A()))
In this your result is on the left hand side. The first function to be executed is A and then B and lastly C, which also reads right to left. This is a pretty common way to write code, it's by no means unique to C-like languages. So you'd have gotten so good at reading code like this that you probably don't even realise you're reading right to left.

Now lets look at a POSIX-like shell language:

    result = $(A | B | C)
Here the result is still on the left hand side but now you're reading the functions from left to right (ie pipes)

I'm not the article author by my own programming language takes things a step further from conventional shells and you can do the following:

    A -> B -> C -> set result
Here it reads fully left to right. There is zero confusion about which order to read this.

----------------

Going back to the more general point about reading left to right, it's worth noting that even math operators can be extended this way. For example with polish notation (https://en.wikipedia.org/wiki/Polish_notation) your operators precede your values. Effectively turning those symbols into function names:

    + 2 5
...would return 7

Though personally I prefer the more traditional format of operators sitting between their values (2+5), but that's purely because that is what I'm used to.

Re:Designing a programming language to speedrun Advent of Code by xiaq on Tuesday November 14, 2023 @03:58AM (#38260767)
You can write A | B | C | result=$(cat) in shell.

Edit: this only works if the shell runs the last command in the current environment (as opposed to a subshell), and only ksh and zsh seem to do that...

Re:Designing a programming language to speedrun Advent of Code by _0ffh on Tuesday November 14, 2023 @05:22AM (#38261445)
Or with uniform function call syntax

result = A().B().C()