Cognate: Readable and concise concatenative programming
cognate-lang.github.io
cognate-lang.github.io
Yes, give simple examples demonstrating the language!
Yes, explain the syntax and structure from these!
There are many languages posted HN. Many of them sound interesting but the linked page often gives no example code at all, weirdly enough. Or it gives the code for fibonacci sequence with no explanation (nth fibonacci number code is embarrassing just cause if you ever wrote a naive routine for the nth fibonacci number in production, you would be doing it way wrong).
Rather, it makes cute remarks about how little it cares for how math works…well if it doesn’t care, why reinvent basic mathematical syntax? It goes out of its way to be confusing, and then flips you off for asking why. I must be missing the larger point of this project.
Cognate is a project aiming to create a human readable programming language with as little syntax as possible. Where natural language programming usually uses many complex syntax rules, instead Cognate takes them away. What it adds is simple, a way to embed comments into statements.
…Cognate ignores words starting with lowercase letters, allowing them to be used to describe functionality and enhance readability. This makes Cognate codebases intuitive and maintainable.
Cognate is a stack-oriented programming language similar to Forth or Factor, except expressions are evaluated right to left. This gives the expressiveness of concatenative programming as well as the readability of prefix notation. Expressions can be delimited at arbitrary points, allowing them to read as sentences would in English.
Cognate borrows from other concatenative languages, but also adds unique features of its own.
To compare readability, you must first get used to the thing.
You say you make no conversion when doing `a + b`, but that's exactly equivalent to `+ a b` or `a b +`, you're simply used to a particular order. In English, adjectives normally come in front of the subject, but in many other languages, it comes after. Same thing: the order is not really very relevant and either order "works".
But where concatenative languages (and s-expression languages, e.g. Lisp) are superior is with complex expressions.
In "usual" languages, you need to convert this:
2 * 3 + 4 - 6
to ((2 * 3) + 4) - 6
To clearly determine the order of operations.In concatenative languages, you simply don't have to do anything, just apply the operators.
* 2 3; + 4; - 6
No conversion required, just do `* 2 3`, then `+ 4 <result>`, then `- 6 <result>`.Hence, if you really don't want to do conversions in your head, this is the way to go, not the conventional math notation!
Notice how if the expression was instead:
2 + 3 * 4 - 6
Math notation would dictate you need to convert it to: (2 + (3 * 4)) - 6
That is , the order of the operations is not even the one you read it (it's not just left to right, like normal English prose, and not right-to-left either, like Arabic prose would be).But in Cognate you MUST represent it pretty much the way you read:
* 3 4; + 2; - 6Familiarity is when you say “look, this is like that other thing that I already do, neat”.
In a postfix language, I first learn about how the values are constructed, then afterward I learn what I am going to do with them. This has the advantage that I am reading through things in the same order in which they happen. It helps me to think from bottom up.
> Print the Square of 8;
At first sight I really disliked this. I thought it'd become repetitive. But... no more repetitive than just writing prose I guess?
Show HN: Cognate – Stack oriented programming in English prose - https://news.ycombinator.com/item?id=31312815 - May 2022 (6 comments)
Source: https://en.m.wikipedia.org/wiki/Concatenative_programming_la...
Id probably take it further and use a marker to better distinguish code from ignored comments eg
_my_variable is #equal to 3
Something to tell variables apart from functions. Let user use whatever casing they desire