Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Zig, Hare, Odin, Vale, V, Jai
5 points by orangetuba on May 31, 2022 | hide | past | favorite | 18 comments
There are a lot of new languages that try to be "a better C" or "less complicated C++". Are there people here who are familiar with some of these languages that would be willing to share their opinion about what they think these languages are trying to solve? I mean, how they are different from C or C++.


My opinion is that these languages are an utter waste of time and will not see mainstream adoption (notwithstanding that members of these languages' communities derive a lot of pleasure from writing software in their respective language, hence why you see lots of "X rewritten in Y" posts on HN). 99.99% of all software should not be written in anything resembling either C or C++. The future of software development is not "a more user-friendly C" - it is a "more user-friendly Python" (or some other high-level language).


Drivers, operating systems, databases, browsers and games written in garbage collected languages? How will they manage to be competitive? C is currently one of the most used languages in the world.

I don't think that they are trying to replace Java or Python, but C, for the areas where C is used today.


I see a lot of misplaced hate thrown at garbage collection without warrant. Some things don't make sense to use GC for (for example, allocators or garbage collectors themselves), but modern GC is as fast if not faster than manual memory management at scale. The performance issues often attributed to GC often come from more obvious issues, like dynamic dispatch, boxing/unboxing of values, and dynamic typing.

It's just somewhat rare to see statically typed languages with modern concurrent GC. Go is one example, and Go is remarkably fast. Meanwhile Java has been running on more resource constrained systems for 30 years than Rust can target today, for example.


Do you predict a future where drivers, operating systems, databases, browsers and games etc. will be written in a language such as Go?


Why try to predict the future and forget the past? John McCarthy proposed GC in the 60s, and we had operating systems in the early 80s implemented in GCed languages. See, for example, Symbolics Genera (lisp) or Smalltalk-80. Xerox Cedar/Mesa based OSes too. Pretty sure Perq POS was GCed (heavily enhanced Pascal) but don't remember for sure.

So, yes, if it makes sense, you can write drivers, operating systems, databases, browsers and games etc.


Why have all modern operating systems (that have more than 100 users) moved away from GCed languages?


I won't speak to 'all modern operating systems', nor 'more than 100 users', because who really knows how to enumerate either of those. But given the OSes that the vast if not overwhelming majority of people use, 'because C' seems like the easy answer.


There are already drivers, databases, and games written in GC'd environments. Operating systems are not monolithic enough to say anything, some portions can and probably should be gc'd and others require explicit control over memory operations that don't make sense to a GC. Browsers already have a significant amount of work that they do using garbage collection.

So not so much future as present.


I have looked at some benchmarks, and in nearly every benchmark I can find, Go takes 2-4 times as long as C to perform the majority of tasks (except when it is much, much slower).

I believe the original Minecraft is written in Java(?), but it's not really competitive with something like Unreal Engine.

Out of curiosity, which databases are written in GCed environments?


C is significantly slower at concurrency when implemented naively. It's as fast as languages like Go when implemented using the same techniques, which is not obvious and trivial to use like in a higher level GC'd language. GC actually helps out a ton there, for example look at the complexity of async/await in Rust which requires the notion of pinning.

Unreal packs its own garbage collection. This is a pattern you see quite often, GC is discarded because it's slow/the specific implementations don't fit the task, so an alternative GC is written to be used in a lower level language that doesn't require it natively. Contrast to Unity which uses C#. As for Minecraft, like I said originally you don't want to look at just GC for performance problems - that's a naive understanding of why languages perform poorly. Java is actually extremely fast and used in environments with tighter constraints than a game like MC.

https://github.com/gostor/awesome-go-storage#database

https://java-source.net/open-source/database-engines

Not a database but honorable mention, LMAX disrupter: https://lmax-exchange.github.io/disruptor/


"C is slower at concurrency when implemented naively"

That's a bit like saying that a Formula 1 car is slower than a Toyota Yaris when operated by a poor driver? What are you implying here?

So you're saying that with languages without GC, you can tailor your own GC that is a good fit to the problem you're trying to solve? Or that when the problem you are trying to solve is a good fit for the GC in your language of choice, you get good performance with less effort?

That's a huge list of databases that I've never heard of. In a sample of the categories, I looked for the most performant one, such as "NoSQL" where the one that comes out as best on benchmarks was Mongo DB which is written in C++. Why are all the number on spots on benchmarks written in C or C++ when the potential of GC languages is higher? Or maybe I'm misunderstanding.


One view from the geospatial, data science, and machine learning world: Python is the most commonly used language, among my peers. However all the heavy lifting is done by C/C++ libraries which Python binds with. NumPy, GDAL, GEOS, Tensorflow, Torch, are all C/C++ libs.

Zig's C-interoperability is actually pretty huge in this context. Not familiar with the other 5 languages the OP listed.


Someone asked pretty much the same question on reddit, apparently:

https://www.reddit.com/r/C_Programming/comments/nqkn93/what_...


I'm only familiar with Zig, but it's trying to be a more orthogonal (more consistent, symmetric) system programming language, which makes it easier to read, write and reason about.

Zig is aiming to be a C-compatible alternative with less cruft and footguns.


Plus: Zig brings a great Build System for (cross-)compiling. It’s very adaptable, so you can even build C, rust, go or whatever language…


All of these languages are currently in the toys stage except for probably Zig.

If I would have to take a guess, Zig and possibly V would most likely be used and the others are just experiments.


I'm most interested in Zig personally, but your broad characterization is extremely inaccurate. Odin is being used for a very sophisticated shipping commercial product (EmberGen), and Jai, while not publicly available, is objectively way beyond the level of a "toy".


Good to know. I will keep that in mind and maybe have a look at Zig.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: