The research project doesn’t mean “Microsoft is no longer using C++/C#/Rust”. See under C.
The project is meant to be learned from, to integrate the ideas into other languages. I’m not sure if it’s possible to add to Julia their “new concurrency model that seamlessly integrates ownership.” Still, it seems we could reuse their new allocator for a performance benefit.
The allocator is intriguing “enables 1000s of remote deallocations to be performed with only a single atomic operation enabling great scaling with core count. […] The fast paths are highly optimised with just two branches on the fast path for malloc […] Deallocations occur in large batches”; runs on exactly all the platforms Julia supports (and ARM, including Android and iOS), “running in both the FreeBSD kernel and userspace”. It’s “a header-only C++ library, it can be
LD_PRELOAD ed on Elf platforms (e.g. Linux, BSD), and there is a crate to use it from Rust.”
From the paper on the allocator: “[Such asymmetric scenarios] also occur in some GC implementations.” A problem they solve, for at least non-GC languages, I’m not yet sure if the solution also applies to Julia (or other GC languages).
Note, the paper is a bit outdated, and the difference.md doc has “[2-4] Are changes that are directly inspired by (mimalloc)” (another Microsoft allocator, probably older, and at least that one is a drop-in replacement).
Section 2.6 of the paper was intriguing, describing how SuperMalloc uses floating-point for size classes, “2-bit mantissa, m, and 6-bit exponent, e”, with their allocator doing “similar calculation” also using 8-bit number for size, while ensuring “16-byte aligned” allocations.
Also intriguing in the paper is section 2.9 Portability with e.g. “lazy commit”, and how Windows doesn’t support that, and how they do things differently.
And “WarmupTime” [for SuperMalloc]
mimalloc (pronounced “me-malloc”) is a general purpose allocator with excellent performance characteristics. Initially developed by Daan Leijen for the run-time systems of the Koka and Lean languages. Latest release:
It is a drop-in replacement for
We are providing a new concurrency model that seamlessly integrates ownership.
And from the FAQ:
There are several areas we are investigating in Project Verona. A few of the high-level questions are here:
- If we design a language without concurrent mutation, can we build scalable memory management?
- Can linear regions be used to remove the restrictions of per-object linearity without sacrificing memory management?
- Can language level regions be used to support compartmentalisations?