feat: replace fiber run() with transfer() and suspend() for scheduler-friendly semantics

Remove the run() method from fibers and introduce transfer() for non-stack-based fiber switching, along with suspend() to pause the interpreter and return control to the host application. Update Timer.sleep() to use runNextScheduled_() instead of Fiber.yield(), and add Timer.schedule() for creating independently scheduled fibers. Refactor the core fiber runtime to support transfer semantics, including proper error handling for aborted fibers and self-transfer edge cases. Fix a missing quote in test.py's runtime error validation string.
This commit is contained in:
Bob Nystrom
2015-08-31 05:15:37 +00:00
parent ca8e97521a
commit 7e111d19da
49 changed files with 469 additions and 350 deletions
+3 -3
View File
@@ -6,9 +6,9 @@ var fiber = Fiber.new {
IO.print("fiber 3")
}
var result = fiber.call() // expect: fiber 1
fiber.call() // expect: fiber 1
IO.print("main 1") // expect: main 1
result = fiber.call() // expect: fiber 2
fiber.call() // expect: fiber 2
IO.print("main 2") // expect: main 2
result = fiber.call() // expect: fiber 3
fiber.call() // expect: fiber 3
IO.print("main 3") // expect: main 3