AFAIK, they are the only folks doing concurrent marking (marking happening concurrently with the mutator) and parallel marking (more than one marking thread). SpiderMonkey does much of sweeping concurrently with the mutator, and compaction is done in parallel but not concurrent with the mutator. We don’t do parallel or concurrent marking; we’re looking into concurrent marking as the next big architectural change for the collector.
I found “Constant Function Argument: If the inlinee candidate has a constant argument and that argument is used for branching, then the inline threshold is ConstantArgumentInlineThreshold” interesting. I haven’t seen it in other engines.
Interesting tidbits I’ve found (or others have found and shared with me) so far:
They incorporate some of our asm.js code, not sure how much altogether. Looks like their asm.js frontend may be based on ours. https://github.com/Microsoft/ChakraCore/blob/master/lib/Runtime/Language/AsmJSUtils.h#L8
AFAIK, they are the only folks doing concurrent marking (marking happening concurrently with the mutator) and parallel marking (more than one marking thread). SpiderMonkey does much of sweeping concurrently with the mutator, and compaction is done in parallel but not concurrent with the mutator. We don’t do parallel or concurrent marking; we’re looking into concurrent marking as the next big architectural change for the collector.
They use card marking-style write barriers. Each card is page-sized, so they are probably using write protection tricks to dirty cards. https://github.com/Microsoft/ChakraCore/blob/9229c3387b695b2e2fb247681b26d6e6514bc6d1/lib/common/Memory/RecyclerWriteBarrierManager.cpp#L31
There is a pull request open to add an initial wasm prototype. https://github.com/Microsoft/ChakraCore/pull/63
I looked at inlining heuristics: https://github.com/Microsoft/ChakraCore/blob/5d8406741f8c60e7bf0a06e4fb71a5cf7a6458dc/lib/Backend/InliningHeuristics.cpp#L138-L141
I found “Constant Function Argument: If the inlinee candidate has a constant argument and that argument is used for branching, then the inline threshold is ConstantArgumentInlineThreshold” interesting. I haven’t seen it in other engines.