before reading the article, i have to say that odin won't make it unless it will invest serious time into networking. graphics, which is where odin shines, is very niche market and i bet that once JB's Jai comes to public, it might crush odin in this field by sheer persona behind the language in this specific niche. what makes or breaks language is the ecosystem and abilities to use it in various domains. today, the internet/networking moves mountains. it's where the most engineering and money is. if you cannot write fast http/rest/grpc servers with most used databases, your language will fade away into obsolescence, because it might bring nice new features, but if it cannot be used in the most popular fields, it will not make it. and odin is suffering in this aspect tremendously. it has the simple go-inspired syntax going on, but it has no oop/methods, so right there you have an obstacle for new users - it is too different from the norm. it might have great integration with various graphics libraries but it if is too different and lacks the ecosystem of libraries, package manager... there is no reason for it to exist. it also requires GIGABYTES of crap you need to download on windows in order to be able to compile a program. it also needs IDE support, mostly jetbrains, visual studio and vs code, which are the dominant IDEs today. in short, if it lacks convenience of Go or Zig, or even Rust, there really is no point in investing time into it.
PS: this is just off the cuff comment, not too thought out. also, Odin has a chance to beat Zig, due to better syntax and being essentially complete, beside having official spec. Which is not the case of Zig. Zig has traction but lacks in areas where Odin does not. So I would focus on Zig as the competitor, Rust as second. The simplified go-like syntax is one of the main selling points. But there must be more to the language.
PPS: I think the choice of ^ to handle pointers is one of the worst decision in the syntax. The * and & are the norm and should not be messed with.
I can't think of any language where networking (or graphics for that matter) is built into the language.
At best you get support in the standard lib, but whether things like this should go into the stdlib or 3rd party libs is a decision that isn't set in stone forever, and probably doesn't even matter if it is easy to integrate 3rd party libs into Odin projects. AFAIK Odin has the concept of vendor libraries, which live somewhere between stdlib and 3rd party - so networking could go there).
Compared to Zig specifically, Odin has a couple of language features that might make it less pure from an academic language designers pov, but more convenient from the user's pov and only the last one matters for getting shit done. I wouldn't dismiss Odin only because it doesn't have features XYZ, because it does some other things very right compared to other languages.
Re IDE integration, google for "Odin language server".
the networking does not necessarily has to be in standard library, but there has to be some "official" package/library that handles these things on a superb level and is ready to go in an instant. for odin, there is one http server in the works, and according to bil it will be the "official" package but when you look at it, it is VERY lacking in many aspects. it's more like a guy made a library that kinda works, but it's nowhere near the expected standard and performance one expects.
That's probably relative to the few contributors on the project. Until recently, was even worse, as was mainly a one-man show. This can be seen by checking the contribution history.
the main problem is keyboard layout and lack of easy access to ^ in most of them. not everyone uses US layout, it's actually minority of computer users. plus, the notion of whether the ^ goes before or after variable can cause a lot of programming and code reviewing issues. but it's just a personal opinion, obviously.
Odin uses curly braces which (in QWERTY) are shifted and typed with your pinky—the worst possible combination. Are there layouts where ^ is worse than that?
this could result in endless thread so all i will say is that you have * physically available as stand-alone key on the numerical side of every keyboard ever made(unless you are a weirdo(=micro minority) and use the variously mutilated physical keyboard layouts) and & is physically available as stand-alone key on iso 105 layout, for example, but most importantly it is a character widely used in most languages as actual character, whereas ^ is really not.
If you think it's ergonomic to move your entire hand away from the letters to press a frequently used key, well... I guess now I understand why Odin's creator disagrees with you about keyboard layouts! ^_^
it also requires GIGABYTES of crap you need to download on windows
I was surprised by this since all I need on Linux is llvm and clang, but looking at the official getting started page, it does indeed say "MSVC compiler and windows SDK" are required. Is that really the only way to run it on windows, or is that just the path most familiar to a typical windows developer?
I personally disagree with saying it requires IDE support. I want to write a ctags parser for it, but that's all I would ever use; as a die-hard vim user, I never liked all the language server stuff people are so reliant on these days. But if that's what people want to use, it's available for Odin as well: https://odin-lang.org/showcase/ols/ -or- https://github.com/DanielGavin/ols
And not being dependent on the platform linker was a massive undertaking in Zig... I don't think many languages actually implemented their own cross-platform linker.
But anyway, if you're in the Odin target audience on Windows you most likely have Visual Studio installed anyway. Also IIRC even Clang and Rust depend on the MSVC linker on Windows, Zig is really an "outlier" (in a good way) in that regard.
iirc it is about 6 or 7 GB on windows that you need to install. Zig can do it in 75MB, Go i think around the same. Rust has the same problem though.
As for IDE, people who use plain editors like vim, emacs... exist but their numbers are merely a statistical error compared to people that use IDEs(i am counting VS code into this category even though it's just electron). Of course we could debate what is and what is not IDE, but the point here is that we need syntax highlighting, refactoring, jumping to definitions, finding usages and other functionality that IDEs provide.
* for pointers was a stupid choice and there's no reason to keep it solely because people are used to it. Why not keep prefix dereference too? The syntax is attrocious but hey, C does it, so everyone else must.
Ritchie's paper on the history of C discusses that prefix dereference thing: another Bell Labs researcher pointed out that C's notorious issues with declaration syntax, etc., would work much better if pointer deref were postfix instead. Ritchie said it was already too late by then to fix it in C, but didn't contradict the point.
Odin had no such block to improvement. Props to them.
Not the OP, but the '*' is already the common symbol for multiplication.
Not much of a problem for people who are used to C syntax of course, but may be confusing to anybody else, especially in expressions which have both pointer dereference and multiplication, for instance this is entirely valid C:
int a = 3 ** int_ptr;
The '^' is the pointer symbol in Pascal, so it's not a new thing either, it just fell a bit out of fashion.
edit: The parent's code does a dereference and then a multiplcation. This is because of (imho) bizarre parsing rules for a dereference asterisk. I'm saying that's so horrifying that I would be less horrified if it really was an exponent (as it might seem by mixing languages).
3 ** int_ptr multiplies the vakue pointed at by int_ptr by 3. It is exactly the same code as 3 * (*int_ptr) which is the point the parent was making.
powl(3, int_ptr) would be (int)int_ptr * (int)int_ptr * (int)int_ptr which is also unlikely what you wanted. You probably wanted to say powl(3, *int_ptr)
EDIT: actually even my last paragraph is wrong because the first arg is base... I'm not going to write it out but you get the point...
It was a confusion between ** used as the rise to power operator in languages like Fortran or Python which just validated the grandparent point of confusing syntax for people not used with C that come from other programming languages.
Will Jai be public? From the outside, it seems like the creator is using it to build his own software, but doesn't have that much interest in making it public? (which is fine, but I was surprised to hear talk of its impending release)
It's already been a decade. Maybe someday it will happen but no sense in holding your breath. From an intellectual curiosity standpoint I don't think it actually helps to discuss Jai because it's not something we can form falsifiable theories about. For anyone not already bought in, not already in Jon's ingroup, it may as well not exist.
JB had a stream couple of weeks ago where he summarized that three things prevent the language to go public and he is working on them. hopefully next year should all be done.
That may not be a bad idea by itself. With Zig they told people to not use it in production as it's still unstable, but of course people proceeded to use it in production, and now there's an incentive for the developers to avoid too many breaking changes. I don't know if that actually matters, but from what I've seen Jon Blow doesn't seem like the kind of person who wants half the internet to tell him how to do things or listen to complaints about a change he made.
Comments
before reading the article, i have to say that odin won't make it unless it will invest serious time into networking. graphics, which is where odin shines, is very niche market and i bet that once JB's Jai comes to public, it might crush odin in this field by sheer persona behind the language in this specific niche. what makes or breaks language is the ecosystem and abilities to use it in various domains. today, the internet/networking moves mountains. it's where the most engineering and money is. if you cannot write fast http/rest/grpc servers with most used databases, your language will fade away into obsolescence, because it might bring nice new features, but if it cannot be used in the most popular fields, it will not make it. and odin is suffering in this aspect tremendously. it has the simple go-inspired syntax going on, but it has no oop/methods, so right there you have an obstacle for new users - it is too different from the norm. it might have great integration with various graphics libraries but it if is too different and lacks the ecosystem of libraries, package manager... there is no reason for it to exist. it also requires GIGABYTES of crap you need to download on windows in order to be able to compile a program. it also needs IDE support, mostly jetbrains, visual studio and vs code, which are the dominant IDEs today. in short, if it lacks convenience of Go or Zig, or even Rust, there really is no point in investing time into it.
PS: this is just off the cuff comment, not too thought out. also, Odin has a chance to beat Zig, due to better syntax and being essentially complete, beside having official spec. Which is not the case of Zig. Zig has traction but lacks in areas where Odin does not. So I would focus on Zig as the competitor, Rust as second. The simplified go-like syntax is one of the main selling points. But there must be more to the language.
PPS: I think the choice of ^ to handle pointers is one of the worst decision in the syntax. The * and & are the norm and should not be messed with.
I can't think of any language where networking (or graphics for that matter) is built into the language.
At best you get support in the standard lib, but whether things like this should go into the stdlib or 3rd party libs is a decision that isn't set in stone forever, and probably doesn't even matter if it is easy to integrate 3rd party libs into Odin projects. AFAIK Odin has the concept of vendor libraries, which live somewhere between stdlib and 3rd party - so networking could go there).
Compared to Zig specifically, Odin has a couple of language features that might make it less pure from an academic language designers pov, but more convenient from the user's pov and only the last one matters for getting shit done. I wouldn't dismiss Odin only because it doesn't have features XYZ, because it does some other things very right compared to other languages.
Re IDE integration, google for "Odin language server".
Erlang has cluster aware message passing built in as a fundamental aspect of the language.
the networking does not necessarily has to be in standard library, but there has to be some "official" package/library that handles these things on a superb level and is ready to go in an instant. for odin, there is one http server in the works, and according to bil it will be the "official" package but when you look at it, it is VERY lacking in many aspects. it's more like a guy made a library that kinda works, but it's nowhere near the expected standard and performance one expects.
That's probably relative to the few contributors on the project. Until recently, was even worse, as was mainly a one-man show. This can be seen by checking the contribution history.
.NET languages, Python, Java.
C++ before the days of C++98, when each C++ compiler vendor provided a nice C++ framework alongside their compiler.
go has both in the stdlib
Funny that's my favourite aspect of Odin's syntax.
Easy on the eyes.I also like the convention of the type on the left and its usage on the right:
Very similar to languages of the Pascal family, but less verbose.And with structs:
the main problem is keyboard layout and lack of easy access to ^ in most of them. not everyone uses US layout, it's actually minority of computer users. plus, the notion of whether the ^ goes before or after variable can cause a lot of programming and code reviewing issues. but it's just a personal opinion, obviously.
OTH accessing { and } on non US layouts is pretty much the worst case but people deal with it just fine.
What layout specifically is a problem?
Odin uses curly braces which (in QWERTY) are shifted and typed with your pinky—the worst possible combination. Are there layouts where ^ is worse than that?
this could result in endless thread so all i will say is that you have * physically available as stand-alone key on the numerical side of every keyboard ever made(unless you are a weirdo(=micro minority) and use the variously mutilated physical keyboard layouts) and & is physically available as stand-alone key on iso 105 layout, for example, but most importantly it is a character widely used in most languages as actual character, whereas ^ is really not.
Moving your whole hand off home row to hit numpad * is even worse than shift-pinky.
try using your right hand ʕ·͡ᴥ·ʔ
If you think it's ergonomic to move your entire hand away from the letters to press a frequently used key, well... I guess now I understand why Odin's creator disagrees with you about keyboard layouts! ^_^
I was surprised by this since all I need on Linux is llvm and clang, but looking at the official getting started page, it does indeed say "MSVC compiler and windows SDK" are required. Is that really the only way to run it on windows, or is that just the path most familiar to a typical windows developer?
I personally disagree with saying it requires IDE support. I want to write a ctags parser for it, but that's all I would ever use; as a die-hard vim user, I never liked all the language server stuff people are so reliant on these days. But if that's what people want to use, it's available for Odin as well: https://odin-lang.org/showcase/ols/ -or- https://github.com/DanielGavin/ols
It is the way to get the platform linker, and so if you’re using a Windows native toolchain, that’s what you have to do.
IIRC there are slimmer packages to get it but you’re still talking a gigabyte, not tens of megs.
And not being dependent on the platform linker was a massive undertaking in Zig... I don't think many languages actually implemented their own cross-platform linker.
But anyway, if you're in the Odin target audience on Windows you most likely have Visual Studio installed anyway. Also IIRC even Clang and Rust depend on the MSVC linker on Windows, Zig is really an "outlier" (in a good way) in that regard.
iirc it is about 6 or 7 GB on windows that you need to install. Zig can do it in 75MB, Go i think around the same. Rust has the same problem though.
As for IDE, people who use plain editors like vim, emacs... exist but their numbers are merely a statistical error compared to people that use IDEs(i am counting VS code into this category even though it's just electron). Of course we could debate what is and what is not IDE, but the point here is that we need syntax highlighting, refactoring, jumping to definitions, finding usages and other functionality that IDEs provide.
* for pointers was a stupid choice and there's no reason to keep it solely because people are used to it. Why not keep prefix dereference too? The syntax is attrocious but hey, C does it, so everyone else must.
Ritchie's paper on the history of C discusses that prefix dereference thing: another Bell Labs researcher pointed out that C's notorious issues with declaration syntax, etc., would work much better if pointer deref were postfix instead. Ritchie said it was already too late by then to fix it in C, but didn't contradict the point.
Odin had no such block to improvement. Props to them.
What’s the problem with *? Do you just want a different symbol or an entirely different syntax?
Not the OP, but the '*' is already the common symbol for multiplication.
Not much of a problem for people who are used to C syntax of course, but may be confusing to anybody else, especially in expressions which have both pointer dereference and multiplication, for instance this is entirely valid C:
The '^' is the pointer symbol in Pascal, so it's not a new thing either, it just fell a bit out of fashion.Related: I like the "down to" operator: https://stackoverflow.com/questions/1642028/what-is-the-oper...
(No, it's not a real operator, it's another case of weird but allowed spacing causing confusion)
That's horrifying, I think I would have preferred
edit: The parent's code does a dereference and then a multiplcation. This is because of (imho) bizarre parsing rules for a dereference asterisk. I'm saying that's so horrifying that I would be less horrified if it really was an exponent (as it might seem by mixing languages).That's not what the code does.
3 ** int_ptr multiplies the vakue pointed at by int_ptr by 3. It is exactly the same code as 3 * (*int_ptr) which is the point the parent was making.
powl(3, int_ptr) would be (int)int_ptr * (int)int_ptr * (int)int_ptr which is also unlikely what you wanted. You probably wanted to say powl(3, *int_ptr)
EDIT: actually even my last paragraph is wrong because the first arg is base... I'm not going to write it out but you get the point...
See, it is confusing, because the code doesn't compute a power.
It's a multiplication with the value pointed to by int_ptr, e.g. rewritten to make more sense:
...or in Odin it would look like this (I think, haven't used Odin all that much yet):I’m not sure I understand your comment, wasn’t the point that
Calculates 3 times (*int_ptr)?It was a confusion between ** used as the rise to power operator in languages like Fortran or Python which just validated the grandparent point of confusing syntax for people not used with C that come from other programming languages.
In Python and Fortran for example:
Will Jai be public? From the outside, it seems like the creator is using it to build his own software, but doesn't have that much interest in making it public? (which is fine, but I was surprised to hear talk of its impending release)
It's already been a decade. Maybe someday it will happen but no sense in holding your breath. From an intellectual curiosity standpoint I don't think it actually helps to discuss Jai because it's not something we can form falsifiable theories about. For anyone not already bought in, not already in Jon's ingroup, it may as well not exist.
JB had a stream couple of weeks ago where he summarized that three things prevent the language to go public and he is working on them. hopefully next year should all be done.
He wants to release it once it’s features and stdlib are stable; right now there’s a few things left to change so it’s not ready for release yet.
That may not be a bad idea by itself. With Zig they told people to not use it in production as it's still unstable, but of course people proceeded to use it in production, and now there's an incentive for the developers to avoid too many breaking changes. I don't know if that actually matters, but from what I've seen Jon Blow doesn't seem like the kind of person who wants half the internet to tell him how to do things or listen to complaints about a change he made.
"Persona oriented development" (POP) when?