Kotlin/Native is a LLVM backend for the Kotlin compiler. It consists of a machine code generation facility using the LLVM toolchain and a native runtime implementation.
Kotlin/Native is primarily designed to allow compilation for platforms where virtual machines are not desirable or possible (such as iOS or embedded targets), or where the developer needs to produce a reasonably-sized self-contained binary that doesn't require an additional execution runtime.
The Kotlin/Native compiler produces mostly portable (modulo pointer size and target triplet) LLVM bitcode, and as such can easily support any platform, as long as there's an LLVM code generator for the platform. However, as actualy producing native code requires a platform linker and some basic runtime shipped along with the translator, we only support a subset of all possible target platforms. Currently Kotlin/Native is being shipped and tested with support for the following platforms:
- Mac OS X 10.11 and later (x86-64)
- x86-64 Ubuntu Linux (14.04, 16.04 and later), other Linux flavours may work as well
- Apple iOS (arm64), cross-compiled on MacOS X host (
-target iphone
) - Raspberry Pi, cross-compiled on Linux host (
-target raspberrypi
)
Adding support for other target platforms shouldn't be too hard, if LLVM support is available.
To run Kotlin/Native JDK8 or later for the host platform has to be installed.
The language and library version supported by this EAP release mostly match Kotlin 1.1. However, there are certain limitations, see section Known Limitations.
Currently Kotlin/Native uses reference counting based memory management scheme with a cycle collection algorithm. Multiple threads could be used, but no objects shared between threads are allowed.
Kotlin/Native provides efficient interoperability with libraries written in C, and supports automatic generation of Kotlin bindings from a C header file. See the samples coming with the distribution.
Download Kotlin/Native distribution and unpack it. You can run command line compiler with
bin/kotlinc <some_file>.kt <dir_with_kt_files> -o <executable>.kexe
During the first run it will download all the external dependencies, such as LLVM.
To see the list of available flags, run kotlinc -h
.
For documentation on C interoperability stubs see INTEROP.md.
*** DO NOT USE THIS PREVIEW RELEASE FOR ANY PERFORMANCE ANALYSIS ***
This is purely a technology preview of Kotlin/Native technology, and is not yet tuned for benchmarking and competitive analysis of any kind.
The standard library in Kotlin/Native is known to be incomplete and doesn't include certain methods available in standard library of Kotlin.
Coroutines are not yet supported with this release.
Full reflection and class object references are not implemented. Notice that property delegation (including lazy properties) does work.
Due to significant differences in exception handling models on MS Windows and other LLVM targets, current Kotlin/Native may not produce executables working on MS Windows. This situation could be improved in upcoming releases.