Also really interesting are the author's blog with articles on language design (for example his thoughts on exceptions, and how he added them to his language, then decided against them), and the change log for the language, showing its evolution.
> Ruby-style syntax
Also, Python has significant whitespace, which this language does not appear to have.
There do seem to be some Unicode constants in the standard library:
https://tibleiz.net/browser.html?path=std&title=Standard%20L...
Neat little language...
Definitely more explicit by default though.
But yes, very neat. I'd miss Enumerable though, if they manage to get that to play with manual allocation that would be even neater.
> The language is not object oriented but it provides some features to facilitate object oriented designs.
It has classes and implicit `self`. Not nothing, but I don't think it's incorrect to say has any more OOP than general purpose languages like Lua or JavaScript in that sense.
Something like Pony[1] is a more mature and feature rich entry and has a much better OOP story.
All that said: a) I'm sorry for doing the thing I hate when other people do
b) Creating a language is a big undertaking, and it's super cool that they did it
c) I see it seems to already be written in Copper too, which is also very neat!
There's a difference between nitpicking the topic of the article and nitpicking someone's grammar.
IMO, that text is confusing.
“Not nothing” is saying it has some OO features.
“I don't think it's incorrect to say has any more OOP than general purpose languages like Lua or JavaScript in that sense” = I think this language has more OOP than languages like Lua or JavaScript”
So, that more or less says “A, but A”. If so, what’s the “but” about?
I had retyped it a few times trying not to come off as overly negative or a jerk.
The comment is saying that the language has more OOP than Lua or JavaScript, but it seems like it might have been meant to say the opposite. That, and it appears to be missing a subject (which I assume to be ‘it’ or ‘the language in question’, based on context). So personally I do find it somewhat confusing.
The problem is not the double negative itself, though; it’s more how it’s being used in context here.
As long as:
* Your language is the kind of language that suits compiler development.
and
* You support compiling to C or something so that bootstrapping doesn't involve an opaque binary or compiling 30 different git commits in a row.
What are the downsides exactly?
Since the majority of programs are not compilers, it might make more sense to focus on interesting things that aren’t relevant to compilers.
Some ideas from the top of my head: async I/O, a great SIMD story, effect systems, robustness systems for long-running processes (I’m only aware of Erlang/Elixir), and many others.
Compilers do exercise some things, like error handling and memory management, but they’re not particularly difficult or interesting in general.
Bootstrapping is a one-time cost, but implementing the toolchain in C is a cost everyone has to pay every single time they touch the toolchain source.
I think most people today would say encapsulation and message passing are pretty core to the definition of OO and inheritance is largely seen as an anti-pattern.
One thing I really like about Elegant Objects is that it is very palatable to FP enjoyers. Objects must encapsulate state, but they must also be immutable. Good OOP is declarative like good FP. It looks a lot like lisp imo. You're encouraged to code against interfaces instead of using inheritance etc.
Here's my current stab at a small compiled language: <https://codeberg.org/stevefolta/lx-2025>.
What is the memory model here? What does it compile to? What makes it 'low level'? Is there a GC? Does it have ABI compatibility with C or a FFI?
Clade - a programming editor with elastic tabstobs and Smalltalk like navigation
Maybe, there is more. Looks to me like an illustration of the "It is a quiet life" meme
That's used... to make what?
I find that difficult to believe. Is there some objective evidence?
> like someone writing out machine code by hand vs using a compiler back in the day
Programming using a compiler is still the same kind of thing, just in a different language.
AI is undergoing cosmic inflation, we get further apart faster.
As others have proclaimed: what matters is taste. And (perhaps?) a deep understanding of the subject matter. Which may or may not be encoded in formal specifications. But may also include 'fuzzy' domain-specific knowledge that can't be scraped from the web.
> Humans don't code anymore
I do, and I'm far from alone. Whether 'product' gains traction, that's another matter. But you know what? It doesn't matter. If it works for [author], that's enough.
Uh, no.
Programming to an abstract interface — and in large codebases, enforced visibility controls — represent the middle ground everyone wants, in my experience, between “OOP” and “sir, this is C”.
The example definitely shines. Doing something barely non-trivial is great since it gives a feeling for the language. I wish other language introduction pages would take note.
It does feel like you need some shared understanding with the author about what the interesting parts of a programming language are and what can be left implicit.
Perhaps the author and I have similar intuitions? I guess I also like that isn't pure LLM output style. It was refreshing to see some human work.
Yep. Interface-based (true) delegation between objects would be my go-to if it existed.
Multiple return values are kind of weird, but maybe it is just me. Overall this is something I will give a try.
Then again, I'm the kind of person who've chosen $'.\U0001F9CC' (that is, $'.\xF0\x9F\xA7\x8C') for a file extension of my own toy language so...
For example, variable declarations use the pattern <colon> <type>, as in
var a: Int32
But literals follow the opposite syntax, as in a = Int32: 42
The return type of a function is introduced by : in func definitions, but by -> in imported func declarations: func foo(a:Int):Int
import func bar(a:Int) -> (Int)
Other construct that I find far from my habits: var w, h, d = 640, 480, 2
instead of the more obvious (for me): var w=640, h=480, d=2
Arguments are passed by ref, not by val. Good luck with recursion!Agreed on the rest, though I don't understand what the problem would be with recursion. Is it using reference passing also for primitives like integers?