Ritchie language: power of C and convenience of a high-level language
github.com
github.com
My advice to the authors is to take care on the little things. For example, the compiler segfaults if there is no input and there is no message if RITCHIE_HOME isn't set. Fixing those things early will increase the feeling of polish and will probably help keep quality high to the very end.
Why is this a principle? What advantage does it confer? My initial reaction is that this will result in nightmarish code.
I'm not sure it's the choice I would've made, but I can see it being very attractive for someone whose primary experience with programming is designing a programming language. Back when I was interested in PL design in college, I was a big fan of this property in languages as well.
Most languages have an arbitrary rule for distinguishing between an identifier (it begins with letter, except for 30 to 80 special cases) and keyword (30 to 80 special cases) which is hard to remember. When the rule is that the first character of an alphanumeric sequence determines whether it references a number (it begins with digit) or identifier (it begins with letter), that's easy to remember. Golang extends that idea by also distinguishing between public (beginning with uppercase) and private variables in this way, but it still falls short on its rule for recognizing the 50-odd keywords and special identifiers.
Languages that have simple lexical-semantic matches enable people to program in it without IDE's or other crud.
Thanks
People are also more familar with C, it works on more platforms, and doesn't require any familiarity with SSA.
I think you only really need llvm when you want to get into debug symbols.
It's not hard to use fewer characters than Python if you add superfluous parentheses and don't use any of its higher-level features. Rewriting the Python code to be roughly idiomatic shaves off a good 100 characters, even without noticeably changing the algorithm, and that's even with adding some newlines and the indentation cost that entails.
And, IMHO, saving bytes by not having a #! or by using "1" over "True", or even "->" over "return, doesn't impress me much.
Seems they want to be SVO just for the sake of it, and not because it's actually a good idea.
For something that wants type safety like Scala, they don't seem to have put much thought into their type system which is pretty fundamental.
Statements like point = Point x, y is confusing. Is it the same as Point (x), y?
Respect either way however, not many people even get to this point with their own language.
So, where is the power of C? Where is my void*?
> if, while and for in Ritchie are all such verbs. They are not keywords, as you can redefine them, although this is probably not a good idea.
This is the worst idea. Have you heard of C++? Are you really going to read someone else's code ever?
> Ritchie is whitespace sensitive
I am mixed on this. I think it works great with Python and Haskell, but is terrible with Ruby…
The beauty of Python meets the power of C.
I do hope this project lives long and is not abandoned beyond the students final years at college.
I will keep an eye on it and wish it the best, but I feel like Nim is still my go to (pun not intended) for "C speeds but not C level"
BTW -- speaking as someone who first learned to program in a dynamically typed language and only later saw the beauty of static typing, I would strongly debate the idea that type inference everywhere is a good thing. The benefit of strict static typing is not so much that it allows a compiler to produce fast code -- there are lots of ways to achieve that. The benefit is that by forcing the programmer to type out the type signatures of functions in advance, you force a level of thought clarity and appreciation for the way that different pieces of code have to pass off data or state to other parts. I find it leads to better software not because of the compiler (although a compiler catching your mistakes is great for productivity), but because it makes you think much more clearly.
It's sort of like the habit of writing down your moves in chess. The benefit is that it creates a ritual of thought and reflection, and potentially makes you more careful.
These days, I see code with enforced type declarations and typed signatures as so much more elegant than similar code that, while having fewer characters, conveys significantly less about the programming intention. Those extra characters for type info are not clutter, not by a long shot.
> Ritchie is whitespace sensitive
As I thought. No thanks.
+ Python + Haskell + Javascript + Go + Ruby + Bash
Anything else I'm missing? Whitespace is useful. Figure out how to view it in your editor and move on already. This is so far beyond bike-shedding it's just a depressing comment on how much programmers obsess on syntax.
Also C++, C99, and Java if you count // comments.
Put me in the "if that makes a difference in your code, you're doing it wrong" camp (and yes, I recognize that not everyone agrees, and that argument has already been had too many times).
Have you never looked at a diff? Massive whitespace changes hide real changes. Next someone will say "Git has a -w option". To which I say "A diff without whitespace changes in those languages would be useless". I can't test it, apply it, or otherwise use it without re-indenting the source myself.
Language design decisions do matter. "Figure out how to view it in your editor" doesn't do one lick to address the problems of semantic indentation.