| ▲ | netbioserror 4 hours ago | ||||||||||||||||
Most of the performance penalty for the languages you mentioned is because they're dynamically typed and interpreted. The GC is a much smaller slice of the performance pie. In native-compiled languages (Nim, D, etc), the penalty for GC can be astoundingly low. With a reference counting GC, you're essentially emulating "perfect" use of C++ unique_ptr. Nim and D are very much performance-competitive with C++ in more data-oriented scenarios that don't have hard real-time constraints, and that's with D having a stop-the-world mark-and-sweep GC. The issue then becomes compatibility with other binary interfaces, especially C and C++ libraries. | |||||||||||||||||
| ▲ | elcritch 4 hours ago | parent | next [-] | ||||||||||||||||
Definitely true! Probably add Swift to that list as well. Apple has been pushing to use Swift in WebKit in addition to C++. Actually Nim2 and Swift both use automatic reference counting which is very similar to using C++’s SharedPointer or Rusts RC/ARC. If I couldn’t use Nim I’d go for Swift probably. Rust gives me a headache mostly. However Nim is fully open source and independent. Though Nim2 does default to RC + Cycle collector memory management mode. You can turn off the cycle collector with mm:arc or atomic reference counting with mm:atomicArc. Perfect for most system applications or embedded! IMHO, most large Rust project will likely use RC or ARC types or use lots of clone calls. So performance wise it’s not gonna be too different than Nim or Swift or even D really. | |||||||||||||||||
| |||||||||||||||||
| ▲ | zie 3 hours ago | parent | prev [-] | ||||||||||||||||
Agreed, but I didn't want to get to far into the details. Thanks for sharing some more details though! | |||||||||||||||||