> Using Nim without the GC would be a very big benefit for the area of embedded 
> devices and microcontrollers, often with only a few 10 kB of ram and realtime 
> requirements.

I think we can all agree that the newruntime will have big benefits for this 
use case. But that is not what @RedFred was asking!

@RedFred was asking what benefit this has for him! He is not an embedded 
devices developer, he is an application developer. Those are very different use 
cases with very different kinds of developers!

That being said, I think the biggest benefit for someone like @RedFred is 
better multithreading.

Both Python and Node.js went down a very similar path to what @RedFred proposes:

They focused on a good single threaded GC. Both of those languages ended up 
having crazy hacks and ecosystem fractures once they started having to deal 
with multithreading. The GIL in Python is STILL a big problem, after years! 
They end up using hacks like `fork()` or farming threads out to C or Rust 
"native modules", with all the complexity that entails.

The languages that have succeeded in making multithreaded application level 
code work at scale are Java (the JVM technically) and Go.

Java spent years and gobs of money to make a GC that is thread safe, and is 
only recently really becoming any good at it, and the JVM still has many other 
issues. Much of this is due to other problems and legacy constraints, but 
still...

The Go GC is similar to Nim in several ways, but Go cheats when it comes to 
threads! Go channels do a lot of copies and hook into the GC to manually do 
refs and unrefs. This solution is actually pretty damn good for application 
level code, but channels are not without their own limitations and bugs.

I think @Dom96 is right. The newrutnime is a passion project for @Araq that a 
minority of us in the Nim community is very excited about. Though I have talked 
in other threads how I think the audience for this is bigger than people think 
it is (and is positioned to grow).

But @Araq has not suddenly forgotten about the community. He is not going to 
suddenly alienate everyone! Nim has a track record of being very conservative 
and conscious to making changes that don't break compatibility.

Nim has a history of doing experiments with memory management, and letting you 
choose what works best for you. What other language lets you choose between 6 
different memory management options? And don't tell me these other MM options 
are different because they are "all transparent" and require no code changes.

That is false. Look at Regions: Regions are very effective, but require code 
changes to work, and several projects actually use regions to great effect...

Reply via email to