77 lines
1.9 KiB
Markdown
77 lines
1.9 KiB
Markdown
# Lyng: scripting lang for kotlin multiplatform
|
|
|
|
in the form of multiplatform library. Key benefits:
|
|
|
|
- async and multithreaded (on JVM and native) out of the box
|
|
- easy and efficient kotlin integration
|
|
- dynamic types yet with good checks
|
|
|
|
__current state of implementation and docs__:
|
|
|
|
- [introduction and tutorial](docs/tutorial.md)
|
|
- [Samples directory](docs/samples)
|
|
|
|
## Integration in Kotlin multiplatform
|
|
|
|
### Add library
|
|
|
|
TBD
|
|
|
|
### Execute script:
|
|
|
|
```kotlin
|
|
assertEquals("hello, world", eval("""
|
|
"hello, " + "world"
|
|
""").toString())
|
|
```
|
|
|
|
### Exchanging information
|
|
|
|
Script is executed over some `Context`. Create instance of the context,
|
|
add your specific vars and functions to it, an call over it:
|
|
|
|
```kotlin
|
|
val context = Context().apply {
|
|
addFn("addArgs") {
|
|
var sum = 0.0
|
|
for( a in args) sum += a.toDouble()
|
|
ObjReal(sum)
|
|
}
|
|
addConst("LIGHT_SPEED", ObjReal(299_792_458.0))
|
|
}
|
|
|
|
context.eval("addArgs(1,2,3)") // <- 6
|
|
```
|
|
Note that the context stores all changes in it so you can make calls on a single context to preserve state between calls.
|
|
|
|
## Why?
|
|
|
|
Designed to add scripting to kotlin multiplatform application in easy and efficient way. This is attempt to achieve what Lua is for C/++.
|
|
|
|
- fast start (times and times faster than initializing v8/wasm)
|
|
- fast and simple kotlin interoperability
|
|
- coroutine-based, truly async. On platforms with multithreading, run multithreaded. No python/ruby/javascript threads hell.
|
|
- small footprint
|
|
- absolutely safe: no access to any dangerous or sensitive functions until you specifically provide it.
|
|
|
|
# Language
|
|
|
|
- dynamic
|
|
- async
|
|
- multithreaded (coroutines could be dispatched using threads on appropriate platforms, automatically)
|
|
|
|
## By-stage
|
|
|
|
Here are plans to develop it:
|
|
|
|
### First stage
|
|
|
|
Interpreted, precompiled into threaded code, actually. Dynamic types.
|
|
|
|
### Second stage
|
|
|
|
Will add:
|
|
|
|
- optimizations
|
|
- p-code serialization
|
|
- static typing |