Scala Native

Version: 0.5.5

Scala Native is an optimizing ahead-of-time compiler and lightweight managed runtime designed specifically for Scala. It features:

  • Low-level primitives.

    import scala.scalanative.unsafe._
    
    type Vec = CStruct3[Double, Double, Double]
    
    val vec = stackalloc[Vec]() // allocate c struct on stack
    
    def sum(vec: Ptr[Vec]): Double =
      return vec._1 + vec._2 + vec._3
    
    @main def main(): Unit =
      vec._1 = 10.0             // initialize fields
      vec._2 = 20.0
      vec._3 = 30.0
      println(sum(vec))         // pass by reference
    

    Pointers, structs, you name it. Low-level primitives let you hand-tune your application to make it work exactly as you want it to. You’re in control.

  • Seamless interop with native code.

    import scala.scalanative.unsafe._
    import scala.scalanative.unsigned._
    
    @extern object stdlib {
      def malloc(size: CSize): Ptr[Byte] = extern
    }
    
    val ptr = stdlib.malloc(32.toCSize)
    

    Calling C code has never been easier. With the help of extern objects you can seamlessly call native code without any runtime overhead.

  • Instant startup time.

    > time hello-native
    hello, native!
    
    real    0m0.005s
    user    0m0.002s
    sys     0m0.002s
    

    Scala Native is compiled ahead-of-time via LLVM. This means that there is no sluggish warm-up phase that’s common for just-in-time compilers. Your code is immediately fast and ready for action.

Community

Documentation

This documentation is divided into different parts. It’s recommended to go through the User’s Guide to get familiar with Scala Native. Libraries will walk you through all the known libraries that are currently available. Contributor’s Guide contains valuable information for people who want to either contribute to the project or learn more about the internals and the development process behind the project.

Document built at : 2024-08-18