Hi,
Rust has emerged as Linux’s second official language [0]. It's a clear win, and all the response from the big companies in the industry have been positive, e.g. [1].
D is trying to catch up, and Walter started the work on borrow checker ~3 years ago [2], but shall the D community wait for it? And even if it get into D, how much more man power are needed to build all these libraries [3]: 85,142 crates, 16,783,226,701 downloads? and how long you think it will take? Right now D has 2185 packages [4], by this rough estimate, the Rust community is ~40x time bigger than D's. (There is no total downloads stats on [4], so we do not know the actual D libraries usage).
While Walter is trying to join them, shall we D users ... use them ... now? :-) I think we should.
Rust has f.f.i to C, and there is a utility cbindgen
[5] which can create C/C++11 headers for Rust libraries which expose a public C API; and on the D side, we have dpp [6] and dstep [7] to make D talks to C very easily. And of course, we also have -betterC :-)
So I just created this wrapper library to make those high performant, memory safe Rust library available to D users:
https://code.dlang.org/packages/rust_interop_d
and started with these 2 containers:
- DashMap: is an implementation of a concurrent associative array/hashmap in Rust. dashmap-5.3.4 Blazing fast concurrent HashMap for Rust. [8]
- SegQueue: An unbounded multi-producer multi-consumer queue. [9]
Since I'm new to Rust, I want to call for help / contributions if you know Rust and want to use some of their high quality libraries from D. Esp. since Rust does not have GC, those of you who want nogc D libraries now clearly have an alternative.
So, let's start D-Rusting :-)
[0] https://www.techzine.eu/news/devops/69453/rust-emerges-as-linuxs-second-official-language/
[1] https://msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming/
[2] https://dlang.org/blog/2019/07/15/ownership-and-borrowing-in-d/
[3] https://crates.io/
[4] https://code.dlang.org/
[5] https://github.com/eqrion/cbindgen
[6] https://code.dlang.org/packages/dpp
[7] https://code.dlang.org/packages/dstep
[8] https://docs.rs/dashmap/5.3.4/dashmap/struct.DashMap.html
[9] https://docs.rs/crossbeam-queue/0.3.5/crossbeam_queue/struct.SegQueue.html