Comments (4)
Talking with @plietar; the trace visits iso fields before the finaliser runs, so the field is found to have no more references and gets GC'd too early.
from verona.
When an object is collected, three things
need to happen:
- run the user-defined finaliser
- find all iso fields
- delete VMObject’s
std::unique_ptr<FieldValue[]>
2 must run before 3, and in order to support the “extract and send subregions” pattern in finalisers, 1 must run before 2.
However, currently from the runtime’s point of view, 1 and 3 are both part of VMObject’s finaliser and run together, before 2 does.
Possible solutions:
- expose a new hook in the runtime for step 3, distinguishing between an object’s finaliser and its destructor.
- let the finaliser trace the iso fields, allowing the VM to do all steps in the order it wants
- get rid of step 3, by storing the fields inline with the VMObject storage. This could be done with a C99 “flexible array member”, but it’s not very friendly to do in C++. In particular computing the size of the VMObject becomes tricky.
Before we had a VM, the runtime actually did trace the iso fields before running the finaliser, but I swapped those when introducing the fields array.
from verona.
Note that when storing a string in a field, FieldValue’s destructor will also call std::string’s destructor. If we get rid of step 3 then we’d have to do this elsewhere (possibly in the finaliser).
from verona.
@mjp41 has pointed out that we can’t destroy the fields array until all the finalisers in the region have run, as they could be traversing fields of other objects. Similarly we can’t be deallocating strings in the finaliser either (the strings should really be implemented as their own Verona object though).
If we want to keep the unique_ptr for the fields, what we really need is a second pass through the ring to run the destructors.
from verona.
Related Issues (20)
- check for failure in Library.alloc
- Problem about iso type class field HOT 1
- Why not use a more C/C++ like syntax? HOT 2
- verona develop progress , any compare with google carbon language. HOT 2
- Is this project dead? HOT 2
- Move to later version of Mac OS HOT 1
- so it has eventualy dead? HOT 1
- Fuzzing failure
- Shadowing of Self type name leads to looping in structure pass
- Looping in validtypeargs pass HOT 1
- Write language specification
- Write Lexical Elements section of Language Spec
- Write Program Structure section of Language Spec
- Write Expression Structure section of Language Spec
- Write Region Model section of Language Spec
- Write Types section of Language Spec
- Write Type Inference and Checking section of Language Spec
- Write Region section of Language Spec
- Write Concurrency section of Language Spec
- Default args do not correctly report error HOT 1
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 verona.