Surprisingly, the most irritating nitpick for me is the choice of the file extension — surely that should've been ".cu", not ".co"? If I were developing an e.g. Iron programming language (hypothetically — although perhaps so named a language already exists), I'd pick ".fe" in a heartbeat.
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...
It’s nice they tried with a more fleshed out exemplar. Polymorphism (“generics”) and interfaces (“OOP”) would have been even better to see, especially across any kind of visibility boundary enforced by the language (packages, and the like.)
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.
I need to put a disclaimer to say that I hate when people hijack a post about foo to talk about bar, but:
> 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!
Re "c)": No, self-hosting is the biggest temptation, and the worst mistake, for any programming language. It's death to bootstrapping. However, if you do succumb to the temptation to self-host, having a C backend, as Copper does, is probably the best way to handle it.
Self-hosting is a trivial matter if you can roughly map a subset of features of an existing language to your language. Write bootstrap compiler in that language and translator in parallel (as long as you have good AST/LST), run conformance tests on both.
> 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.
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.
> 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.
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 think it needs more negatives. "I don't think it's incorrect to say [it does not have] any more OOP than general purpose languages like Lua or JavaScript in that sense".
I had retyped it a few times trying not to come off as overly negative or a jerk.
Lampshading that you're doing something wrong doesn't make doing the thing less wrong. Hijacking a language post, of all things, to tell people some other completely unrelated project is better is ridiculously uncouth.
Not mine, but I found this to be really interesting as a language created by one person for their own use.
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.
How does it free memory? I don't get it. I browsed the docs a bit but didn't find a single reference to deallocation. There's alloc for heap allocation but no free?
In the standard library, there are some allocators with free, so it looks like you’re expected to call those. It is strange that none of the examples seem to cover this, though.
I wish the author has written about the motives behind the language and why someone should choose Copper. We have in fact more programming languages than we actually can use.
I thought it would be because it looks so Python/Ruby-like, but in the source I don't see anything related to a GC at a glance and it has an allocator interface: https://tibleiz.net/browser.html?path=std&title=Standard%20L... (click on "memory" then "memory-allocator.co")
It seems pretty tasteful, but I don't see anything about character sets. How does it support Unicode? What does a string of 16-bit characters represent?
There do seem to be some Unicode constants in the standard library:
The end syntax is definitely Ruby-style, but I guess I felt that way just from looking at syntax like var, func, and for x in. It does seem like a mix of the two, but maybe it’s because I’m so used to Python that I noticed the Python-like syntax first. Thanks for pointing that out.
This seems to have a lot of potential, but there are important details missing. Hopefully the feedback from this thread will result in those questions getting answered by the author soon.
I think the days of releasing new programming languages is gone, it's like releasing a new punch card format. Humans don't code anymore and so programming language is really a choice LLM's make for you.
What leads you to think that? All the engineers I know always choose the language depending on the project details, scope, their own or team preferences, etc.
They ask Claude or some other model, this is the correct thing to do though, given it has the whole internet of software engineering history trained into its model and can read thousands of articles docs in seconds.
Quite the contrary: the barrier to rolling your own <anything> was never lower.
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.
Why? Did mathematics end when pocket calculators became popular? As today, the world initially overreacted (as usual): calculator opponents did warn about dependence, loss of arithmetic skills, and erosion of mathematical understanding. Making an existing exercise easier does not establish that the underlying discipline is in jeopardy.
I can supply anecdotal evidence - of all the people I stay in touch with only one person occasionally opens IDE to write code. This transcends from interactive client apps through novel database engines.
AI is undergoing cosmic inflation, we get further apart faster.
This feels like a photographer telling a painter that they're at a massive disadvantage and that no human paints by hand anymore. Meanwhile painters still exist and are probably not particularly upset by how many pictures per second a DSLR can do.
> 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.
Surprisingly, the most irritating nitpick for me is the choice of the file extension — surely that should've been ".cu", not ".co"? If I were developing an e.g. Iron programming language (hypothetically — although perhaps so named a language already exists), I'd pick ".fe" in a heartbeat.
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...
Unfortunately for Copper in particular, .cu is associated with CUDA (so perhaps that’s why).
You're appreciated
I like the way you think.
It’s nice they tried with a more fleshed out exemplar. Polymorphism (“generics”) and interfaces (“OOP”) would have been even better to see, especially across any kind of visibility boundary enforced by the language (packages, and the like.)
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”.
> Polymorphism (“generics”) and interfaces (“OOP”) would have been even better to see
Yep. Interface-based (true) delegation between objects would be my go-to if it existed.
Yes,
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.
Hmm... Copper, I guess it must be great for representing lists. :-)
I need to put a disclaimer to say that I hate when people hijack a post about foo to talk about bar, but:
> 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!
[1]: https://www.ponylang.io/
Re "c)": No, self-hosting is the biggest temptation, and the worst mistake, for any programming language. It's death to bootstrapping. However, if you do succumb to the temptation to self-host, having a C backend, as Copper does, is probably the best way to handle it.
I've never really understood the opposition to self-hosting.
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?
Self-hosting is a trivial matter if you can roughly map a subset of features of an existing language to your language. Write bootstrap compiler in that language and translator in parallel (as long as you have good AST/LST), run conformance tests on both.
As long as one of the backends is something widely available, I don't see a problem. C is a decent option. LLVM IR is another.
What's the problem with self-hosting? I do imagine it's easier to write a compiler in something like Haskell.
The problems with bootstrapping a self hosted compiler are often greatly overstated.
Since we’re nitpicking: you used a double negative, which is a confusing way of communicating an idea.
The bike shedders have entered the chat.
There's a difference between nitpicking the topic of the article and nitpicking someone's grammar.
To be fair, it really is a confusing way of communicating, and it’s useful feedback when taken to heart.
It's not confusing.
> 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.
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.
> 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.
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 think it needs more negatives. "I don't think it's incorrect to say [it does not have] any more OOP than general purpose languages like Lua or JavaScript in that sense".
I had retyped it a few times trying not to come off as overly negative or a jerk.
It was also to me. I also prefer simple clear language, so much for my feedback. Can we now move on?
Lampshading that you're doing something wrong doesn't make doing the thing less wrong. Hijacking a language post, of all things, to tell people some other completely unrelated project is better is ridiculously uncouth.
As a Crystal fan, really nice syntax. The documentation leaves open several questions:
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?
Not mine, but I found this to be really interesting as a language created by one person for their own use.
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.
https://tibleiz.net/
https://tibleiz.net/copper/changes.html
How does it free memory? I don't get it. I browsed the docs a bit but didn't find a single reference to deallocation. There's alloc for heap allocation but no free?
In the standard library, there are some allocators with free, so it looks like you’re expected to call those. It is strange that none of the examples seem to cover this, though.
What about binding to external C ABI? I can haz Vulkan?
I wish the author has written about the motives behind the language and why someone should choose Copper. We have in fact more programming languages than we actually can use.
It is a personal project, which the author uses for some other personal projects.
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
Garbage collected? Couldn’t tell from the docs.
I thought it would be because it looks so Python/Ruby-like, but in the source I don't see anything related to a GC at a glance and it has an allocator interface: https://tibleiz.net/browser.html?path=std&title=Standard%20L... (click on "memory" then "memory-allocator.co")
It seems pretty tasteful, but I don't see anything about character sets. How does it support Unicode? What does a string of 16-bit characters represent?
There do seem to be some Unicode constants in the standard library:
https://tibleiz.net/browser.html?path=std&title=Standard%20L...
"Copper is a programming language that I use as a replacement to C."
That's used... to make what?
Seems for the other public project they've https://tibleiz.net/clade/ and its predecessor https://tibleiz.net/code-browser/.
Seems like Dart with indentation instead of braces.
It doesn’t look like it cares about indentation. It’s more like Basic or Ruby.
Looks like Crystal to me. But with stronger typing.
https://crystal-lang.org
Neat little language...
Stronger how?
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.
Looks nice and small. Too bad it doesn't quite actually build (on Linux). Also, no string interpolation (AFAIC) and no kebab-case.
Here's my current stab at a small compiled language: <https://codeberg.org/stevefolta/lx-2025>.
Seems really interesting
Really hard to make opinion based on few small examples but I can say I like what I see, Ruby like syntax definitely doesn't hurt language.
Multiple return values are kind of weird, but maybe it is just me. Overall this is something I will give a try.
The simplicity is appreciated.
This might be my new favorite language. Deeply sane.
Exactly
It’s similar to Python syntax.
From the website itself:
> Ruby-style syntax
Also, Python has significant whitespace, which this language does not appear to have.
Glad they chose the more sane way of Ruby, regarding whitespace.
The end syntax is definitely Ruby-style, but I guess I felt that way just from looking at syntax like var, func, and for x in. It does seem like a mix of the two, but maybe it’s because I’m so used to Python that I noticed the Python-like syntax first. Thanks for pointing that out.
This seems to have a lot of potential, but there are important details missing. Hopefully the feedback from this thread will result in those questions getting answered by the author soon.
I think the days of releasing new programming languages is gone, it's like releasing a new punch card format. Humans don't code anymore and so programming language is really a choice LLM's make for you.
What leads you to think that? All the engineers I know always choose the language depending on the project details, scope, their own or team preferences, etc.
They ask Claude or some other model, this is the correct thing to do though, given it has the whole internet of software engineering history trained into its model and can read thousands of articles docs in seconds.
Quite the contrary: the barrier to rolling your own <anything> was never lower.
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.
Why? Did mathematics end when pocket calculators became popular? As today, the world initially overreacted (as usual): calculator opponents did warn about dependence, loss of arithmetic skills, and erosion of mathematical understanding. Making an existing exercise easier does not establish that the underlying discipline is in jeopardy.
> Humans don't code anymore
I find that difficult to believe. Is there some objective evidence?
I can supply anecdotal evidence - of all the people I stay in touch with only one person occasionally opens IDE to write code. This transcends from interactive client apps through novel database engines.
AI is undergoing cosmic inflation, we get further apart faster.
I guess I’m not human
The ones that do are at a massive disadvantage, like someone writing out machine code by hand vs using a compiler back in the day.
This feels like a photographer telling a painter that they're at a massive disadvantage and that no human paints by hand anymore. Meanwhile painters still exist and are probably not particularly upset by how many pictures per second a DSLR can do.
> 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.
Someone who can write assembly will always be at an advantage over someone who can’t. Yes even in the agentic era.