Thanks for advices, I've read some papers on this topic and will take a deep searching into different scheme/lisp groups in following days.
For now I decide to refactor carc to an byte-code one and use the new gc mechanism from the scratch :P
If you'd like, something that would be helpful to us for you to keep an eye out for while you're looking is that we'd like to find a runtime (or learn how make a runtime) which:
- runs on multiple cores, AND
- supports full call-with-current-continuation, tail call optimization, and mutable lists
Our current options include:
- Racket, which can run on multiple cores, but only supports mutating lists within a single core, and
- the JVM, which does support mutating data structures by multiple cores, but doesn't natively support full continuations or tail call optimization.
This project starts with the purpose of making an S-expression language which can be easily embedded into another project.
Since I really like arc's sugar-syntax, I would like to implement all language specification which arc has, and make it extensible and easy to embed.for above reasons, I would rather do not take any kernel-level threading techniques, but with some user mode thread and in-background dispatcher to support async socket io. Currently, it have tail recursion optimization, continuation, macro and a mark&sweep garbage collector.
Overall, you're right, it's primarily a project of learning how to make a language.
Just so I understand your terminology, by "user mode thread" do you mean that you will have threads at the Arc language level, and that they will be implemented by your runtime by having your C code itself switch between threads? (And thus the Arc language level threads will all run inside of one operating system thread?)
One thought that occurs to me is that the next thing that might be most useful is to have a way to easily see the performance of the garbage collector in a program you're running. Then when you notice "oh look, Arc is allocating a large number of short lived small objects" or whatever you can tune your garbage collector (or look for a gc algorithm) that works well with the pattern you're seeing.
It's right since the header files are all created in Xcode 4 with the default template. I will make it under an open source license after reading both licenses. Thank you for the advices!