Conservative garbage collection has serious problems on 32-bit. Stuck pointers happen quite often. The usual culprit is floats, which thankfully don't usually appear in embedded code, but by no means is the problem limited to floats.
Conservative garbage collection has serious problems on 32-bit. Stuck pointers happen quite often. The usual culprit is floats, which thankfully don't usually appear in embedded code, but by no means is the problem limited to floats.
https://justinclift.github.io/tinygo_canvas2/ (~19.5kB)
https://justinclift.github.io/tinygo-wasm-rotating-cube/ (WebGL, ~12kB)
I'll probably take a look later today!
Pros: you don't have to care about type information and precise stack/structure walking.
Cons: If you have range 0x8000-0x8010 allocated, and have a variable with integer value 0x8001 somewhere in the memory, it will keep that range allocated. It doesn't matter that it's an int, not a pointer. Floats and 32-bit pointers have quite a lot of accidental collisions that way.
Lack of careful programming and you run out of memory, but that's more a function of assuming you have a large memory space, not GC in general.
I say this watching 30+ years of alternate implementations of different languages and runtimes. Even those that failed (or maybe moreso) indirectly inspired positive changes in the survivors.
Although if that’s the case, I personally don’t get the draw. Typically these managed/higher-level/interpreted languages are harder to use than the embedded-friendly alternatives if you’re not using their automatic memory management. But a lot of times people just want to stick to (really weird and distant) versions of languages they already know/use (D is probably the only exception here for obvious reasons).
Or missile firmware: https://groups.google.com/forum/message/raw?msg=comp.lang.ad...