Shiika is a programming language that makes me most productive.
- Easy to write like Ruby or Python
- Static type checking (Null safety!)
- Object-oriented but has enums and pattern-matching
- Written in Rust, compiles to single binary via LLVM IR
Most of the static typing languages, such as C++/Java/Scala/Go/Swift/Kotlin/Rust, etc. are designed for execution speed. However what I want a "lightweight" static typing language to make application faster.
- Easiness over performance
- Shiika is a glue language. Use Rust (or C, etc.) for performance-critical parts and load it as a library
- Easy to learn
- There may be more than one way to do it, but not too many.
Comparison to Crystal
Shiika has lots in common with Crystal. However:
- In Shiika, type annotation of method parameters are mandatory. This helps reading programs written by others
- Shiika has only one class
Int
for integers (cf.Int8
,Int16
,Int32
in Crystal) - Shiika does not have union types. The type system is more similar to languages such as Rust, Java or Swift (this isn't good or bad; just a difference)
class A
def fib(n: Int) -> Int
if n < 3
1
else
fib(n-1) + fib(n-2)
end
end
end
p A.new.fib(34)
See examples/*.sk
for more.
Early-alpha; capable of solving algorithmic problems like Advent of Code but a lot more stdlib is needed for practical application.
- Classes, Modules, Enums
- Basic Generics
- Basic pattern-matching
- Anonymous function
- Core classes - Object, Array, String, Bool, Int, Float, Dict, Maybe, Class, Metaclass
See tests/sk/ and examples/ for more.
- Something like Ruby's
require
- Type inference
- More stdlib like
Time
,File
, etc.
See Issues for more.
- v0.10.0~
- Type system: Upper and lower bound
- Type system: Variance specifier
- Syntax:
.try!
- Semantics: Non-local return
- Built-in: Bignum, Rational?
- Built-in: Dir, Process
- Built-in: Split Array and MutableArray?
- Simple package system (
shiika build
)
- After v1.0.0
- Some meta-programming feature (like Crystal?)
- Some mechanics for parallel computation
- Tested on Mac, Linux(Ubuntu) and Windows
- May not work on 32bit environment
See install.md
$ cargo test
Only integration tests (test/sk/*.sk):
$ cargo test --test integration_test
Specific file under test/sk/ (eg. string.sk):
$ FILTER=string cargo test --test integration_test
With logging enabled
$ RUST_LOG='trace' cargo test
MIT