Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR implements support for goroutines (
GoStatement
) with a naive time-quanta based scheduler. Every goroutine is given a randomised quanta of time to run, and once it runs out it is scheduled out for other goroutines. Additionally, the scheduler also looks for themain
goroutine, once themain
goroutine terminates, the entire program is terminated.Implementation Details
Goroutines exist in the same address space, hence a new goroutine does not reinitialise its own
Heap
,AstMap
orBuiltins
. However, it does set up its ownControl
,Stash
andEnvironment
go-slang/src/go-slang/goroutine.ts
Lines 283 to 290 in f3a4b5a
I've also added parser support for strings (
StringLit
) just so i can print string tostdout
to differentiate between goroutines. Note that there is still no string pools and strings do not yet get allocated on the heap! This is purely a convenience feature for debuggingScreen.Recording.2024-04-02.at.11.52.54.AM.mov