Comments (10)
A note re wasm target: since webassembly has no stack introspection, marksweep cannot be ported to it. Three possible (all imperfect strategies are: manual free (incl. optionally delegating alloc/free to host), reference counting, semi-manual allocation of objects into "permanent" and "temporary" heaps.
from tinygo.
The latter. All objects are allocated and never freed. However, there is a simple heap-to-stack pass that tries to allocate objects on the stack if possible so that the most obvious cases won't leak memory.
I'm planning to implement a real garbage collector at some point, probably a simple mark-sweep collector to start with. It just hasn't been done yet.
from tinygo.
Closing as this is a question, not an issue. You are of course free to open an issue for GC support.
from tinygo.
Until GC is implemented, what is the preferred approach to freeing memory, for a user? Is there a temporary API for that? I feel like region-based memory management would nicely work there. Until GC is implemented, at least.
from tinygo.
There is experimental GC support for ARM chips. You can enable it with -gc=marksweep
.
Other than that, there is no way to free memory. However, you can structure the program in such a way that it never allocates on the heap in the main loop, by making sure everything can get stack allocated. For details, see: https://tinygo.readthedocs.io/en/latest/microcontrollers.html#heap-allocation
from tinygo.
I think marksweep can be ported with some compiler work. LLVM has some support for it. It just needs to be done, and it isn't easy. See https://llvm.org/docs/GarbageCollection.html, the most likely candidate would be the shadow stack GC, at least initially.
from tinygo.
@aykevl is there any timeline/roadmap for implementing garbage collection?
from tinygo.
On WebAssembly I assume?
Not really, certainly after #130 (almost finished), maybe after #104 (partially done). It's also hard to say how long the feature itself is going to take as I'm not sure how difficult it is.
from tinygo.
does tinygo support GC in WASM now? Do I have to call GC in my code to get memory garbage collected?
from tinygo.
Yes, TinyGo supports GC in WebAssembly. And you don't need to call runtime.GC
for it, it happens automatically.
from tinygo.
Related Issues (20)
- Support for RV32IM HOT 4
- don't allocate closure variables if the closure doesn't escape
- Joystick axes reduced by 2 for values of >2 in range -32767..32767 on Windows HOT 1
- esp8266 wifi support HOT 1
- go install failing in go-llvm HOT 1
- Is there a way to unite exported functions under the same object path? HOT 2
- core: compile failures due to SSA race condition HOT 29
- No space between hexadecimal literal and identifier HOT 1
- feature: add support for esp32c3 supermini board HOT 3
- panic: interp: load out of bounds on unsafe.SliceData of zero cap slice
- Flash error on M2 Mac HOT 4
- memory overflow HOT 3
- tinygo can't compile GO app to wasm file HOT 1
- wasm and wasm-unknown: allocator always allocates 2 pages (2x64k) HOT 7
- tinygo source displeases linters HOT 1
- What happened to `-wasm-abi=generic`? HOT 1
- Enhancing TinyGo Build-Tags with Board-Specific Feature Tags
- latest versioning of compatible matrix of tinygo/go HOT 2
- TinyGo Program blocks forever with os.Pipe, go proc, and a sleep; same program returns as expected with go
- Error to find build id on OpenBSD
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tinygo.