Runs on the Java platform, with no native code needed.
Programs run fast - roughly as fast as Java programs, and much faster than other “scripting languages”. This is due to a sophisticated compiler, compile-time transformations, type inference, and optional type declarations.
Full, convenient, and efficient access to the huge set of Java libraries means you can access objects, methods, fields, and classes without run-time overhead.
Start-up times are fast. You don’t have to wait for a lot of initialization. Even if you start with source code, the parser and compiler are fast.
Scripts are simple Kawa source files that can run as an application or command. These are simple to write, start, and run efficiently, since they’re automatically compiled before execution.
Alternatively, you can embed Kawa as a scripting language for Java applications.
Deployment is easy and flexible. You just need the Kawa jar file.
Kawa provides the usual read-eval-print loop, as well as batch modes.
Kawa has builtin pretty-printer support, and fancy formatting.
Kawa supports class-definition facilities, and separately-compiled modules.
You can allocate and initialize objects with a compact “builder” syntax. It works out-of-the-box (with no run-time overhead) on many classes and APIs, but can be customized if need be.
A library for functional composable pictures lets you create “picture” objects, display them, transform them, combine them, convert to SVG or images, and more. This can be “printed” directly in the Kawa console (either the DomTerm console or the Swing one).
JavaFX programming is simpler.
Flexible shell-like functionality, including process literals.
Arrays and sequences have a lot of flexibility: Arrays can be multi-dimensional; you can use an array as an index (which generalizes slices and permutations); you can define a lazy array using a function that maps indexes to values; you can re-map the indexes to yield a transformed array.
Many useful features for mathematics and numerics:
The full “numeric tower” includes infinite-precision rational numbers and complex numbers.
Compile-time optimization of arithmetic with the use of type declarations and inference.
A quantity is a real number with a unit,
Quaternions are a 4-dimensional generalization of complex numbers.
Unsigned primitive integer types (
ulong) are implemented efficiently without
A lazy value wraps an expression which is evaluated only when it is needed.