5 ms·
Well, this is just targeting a different VM, LLVM instead of the JVM. You get easy interop with all LLVM languages with this, including C.
by dillonb 10y ago
Well, this is just targeting a different VM, LLVM instead of the JVM. You get easy interop with all LLVM languages with this, including C.
- krona 10y agoEasy interop with C++ or Rust? I'll believe it when I see it.
- dillonb 10y agoIt looks like it can! http://www.scala-native.org/en/latest/user/interop.html http://www.scala-native.org/en/latest/user/interop.html >Scala Native provides an interop layer that makes it easy to interact with foreign native code. This includes C and other languages that can expose APIs via C ABI (e.g. C++, D, Rust etc.)
- krona 10y ago> languages that can expose APIs via C ABI That's what I thought.. another C-based FFI. Better than nothing, I suppose.
- username223 10y agoFrom that page, it looks like Scala-C interop is decent, but that's a far cry from C++/Rust interop. For C++ at least, you more or less need to write a pure-C wrapper API to call from Scala, since it doesn't handle C++ types.
- steveklabnik 10y agoYou would need the same for Rust as well.
- spullara 10y agoRust's FFI is the same as C.
- steveklabnik 10y agoI'm not sure what exactly you mean by that, but what I was trying to say is that you can't expose Rust directly, you need to expose a C ABI. Which is totally doable, but is not just "drop in Rust code and it works."
- dillonb 10y agoInteresting, I guess I understood that wrong. Looks like no "easy" interop, but it's there if you really need it and don't mind the extra work. I've been playing with this and trying to convert a ~20 line helper script that I use at work (and would really like to benefit from no JVM warmup time), and I've already run into missing core library functions like parallel collections and regexes. This thing will be really great when it's ready, but it's not even close yet.
- andreaferretti 10y agoNim has pretty decent interop with C++. In general, though, you are right that C is much much easier to interop with
- steveklabnik 10y agoLLVM is not a VM in the same sense as the JVM is.
- dillonb 10y agoYup.
- the_duke 10y agoYou should really check your facts before posting a statement like this. While the VM in LLVM historically was short for Virtual Machine, it really has nothing to do with that. It's a compiler backend used by Clang (C++ compiler) and Rust.
- acjohnson55 10y agoMy understanding is that IR is designed as though there were a VM to run it, but in practice, IR is immediately used to generate code for a target architecture.
- dbaupp 10y agoThat might have been true originally, but I don't think anyone uses LLVM like a JVM/CLR-esque VM any more. As the parent states, the original Low-Level Virtual Machine initialism was even retracted, meaning the project's name is just the "arbitrary" sequence of letters LLVM, with no particular meaning assigned to them.
- acjohnson55 10y agoMy understanding is that IR is designed as though there were a VM to run it, but in practice, IR is immediately used to generate code for a target architecture.
- Hongxu 10y agoLLVM IR apparently is not restricted to C/C++/Objc/Swift etc, it is a generally purposed IR; and LLVM itself is an infrastructure that contains many facilities to deal with compilation backends (mostly, analyses and transformations).
- deleted 10y ago[deleted]