better readme
This commit is contained in:
		
							parent
							
								
									f338c54632
								
							
						
					
					
						commit
						370d8cf605
					
				
							
								
								
									
										43
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								README.md
									
									
									
									
									
								
							@ -1,14 +1,32 @@
 | 
			
		||||
# Lyng: scripting lang for kotlin multiplatform
 | 
			
		||||
# Lyng: modern scripting for kotlin multiplatform
 | 
			
		||||
 | 
			
		||||
in the form of multiplatform library. Key benefits:
 | 
			
		||||
A KMP library and a standalone interpreter
 | 
			
		||||
 | 
			
		||||
- async and multithreaded (on JVM and native) out of the box
 | 
			
		||||
- easy and efficient kotlin integration
 | 
			
		||||
- dynamic types yet with good checks
 | 
			
		||||
- simple, compact, intuitive and elegant modern code style:
 | 
			
		||||
 | 
			
		||||
__current state of implementation and docs__: 
 | 
			
		||||
```
 | 
			
		||||
class Point(x,y) {
 | 
			
		||||
   fun dist() { sqrt(x*x + y*y) } 
 | 
			
		||||
}
 | 
			
		||||
Point(3,4).dist() //< 5
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- [introduction and tutorial](docs/tutorial.md)
 | 
			
		||||
- extremely simple Kotlin integration on any platform
 | 
			
		||||
- 100% secure: no access to any API you didn't explicitly provide
 | 
			
		||||
- 100% coroutines! Every function/script is a coroutine, it does not block the thread, no async/await/suspend keyword garbage:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
    delay(1.5) // coroutine is delayed for 1.5s, thread is not blocked!
 | 
			
		||||
```
 | 
			
		||||
and it is multithreaded on platforms supporting it (automatically, no code changes required, just
 | 
			
		||||
`launch` more coroutines and they will be executed concurrently if possible)/
 | 
			
		||||
 | 
			
		||||
- functional style and OOP together, multiple inheritance, implementing interfaces for existing classes, writing extensions.
 | 
			
		||||
- Any unicode letters can be used as identifiers: `assert( sin(π/2) == 1 )`.
 | 
			
		||||
 | 
			
		||||
 ## Resources: 
 | 
			
		||||
 | 
			
		||||
- [introduction and tutorial](docs/tutorial.md) - start here please
 | 
			
		||||
- [Samples directory](docs/samples)
 | 
			
		||||
 | 
			
		||||
## Integration in Kotlin multiplatform
 | 
			
		||||
@ -31,6 +49,7 @@ Script is executed over some `Context`. Create instance of the context,
 | 
			
		||||
add your specific vars and functions to it, an call over it:
 | 
			
		||||
 | 
			
		||||
```kotlin
 | 
			
		||||
// simple function
 | 
			
		||||
val context = Context().apply {
 | 
			
		||||
    addFn("addArgs") {
 | 
			
		||||
        var sum = 0.0
 | 
			
		||||
@ -38,8 +57,16 @@ val context = Context().apply {
 | 
			
		||||
        ObjReal(sum)
 | 
			
		||||
    }
 | 
			
		||||
    addConst("LIGHT_SPEED", ObjReal(299_792_458.0))
 | 
			
		||||
    
 | 
			
		||||
    // callback back to kotlin to some suspend fn, for example::
 | 
			
		||||
    // suspend fun doSomeWork(text: String): Int
 | 
			
		||||
    addFn("doSomeWork") {
 | 
			
		||||
        // this _is_ a suspend lambda, we can call suspend function,
 | 
			
		||||
        // and it won't consume the thread:
 | 
			
		||||
        doSomeWork(args[0].toString()).toObj()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// adding constant:
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user