Hetu is early WIP! We are focusing on making Hetu stable and feature complete right now.
Discussion group:
Discord: https://discord.gg/Q8JWQYEw
(I'm sorry, the previous Discord link is invalid, I changed it now for a new one.)
QQ 群: 812529118
Hetu is a lightweight script language purely written in Dart for embedding in Flutter apps. The main goal is to enable Flutter apps to have hotfix and scripting ability.
We did not choose to use another existing language to achieve the goal. Because we want to keep the language simple, and keep it away from interference of other language's complex implementation and their irrelative-to-Flutter eco-system, and make the debug process pain-free and remain in Dart realms.
It takes very little time to bind almost anything in Dart/Flutter into Hetu, makes communicating with your existing Dart code very easy.
Hetu's grammar is close to typescript/kotlin/swift and other modern languages, need very little time to get familar with.
- Optional semicolon.
- Function is declared with 'fun, get, set, construct'.
- Optional type annotation. Variable declared will infer its type from its initializer expression.
In your Dart code, you can interpret a script file:
import 'package:hetu_script/hetu_script.dart';
void main() {
var hetu = Hetu();
hetu.init();
hetu.evalFile('hello.ht', invokeFunc: 'main');
}
While [hello.ht] is the script file written in Hetu, here is an example:
// Define a class.
class Person {
var name: str
construct (name: str) {
this.name = name
}
fun greeting {
print('Hi! I\'m', name)
}
}
// This is where the script starts executing.
fun main {
var ht = Person('Hetu')
ht.greeting()
}
Hetu script is purely written in Dart, so passing object to and from script is extremely easy.
Check this page for more information about how to bind external classes, functions, enums and how to passing object and functions between Dart and script.
import 'package:hetu_script/hetu_script.dart';
void main() {
var hetu = Hetu();
hetu.init(externalFunctions: {
'hello': () => {'greeting': 'hello'},
});
hetu.eval(r'''
external fun hello
fun main {
var dartValue = hello()
print('dart value:', dartValue)
dartValue['foo'] = 'bar'
return dartValue
}''');
var hetuValue = hetu.invoke('main');
print('hetu value: $hetuValue');
}
Hetu has a command line REPL tool for testing. You can activate by the following command:
dart pub global activate hetu_script
// or you can use a git url or local path:
// dart pub global activate --source git https://github.com/hetu-script/hetu-script.git
// dart pub global activate --source path G:\_dev\hetu-script
Then you can use command line tool 'hetu' in any directory on your computer. (If you are facing any problems, please check this official document about pub global activate)
More information about the command line tool can be found by enter [hetu -h].
If no arguments is provided, enter REPL mode.
In REPL mode, every exrepssion you entered will be evaluated and print out immediately.
If you want to write multiple line in REPL mode, use '\' to end a line.
>>>var a = 42
>>>a
42
>>>fun hello {\
return a }
>>>hello
function hello() -> any // repl print
>>>hello()
42 // repl print
>>>
Name | Author | Description | Download | Source |
---|---|---|---|---|
Monster Hunter Otomo: Rise | rockingdice | A unofficial game companion app for Capcom's Monster Hunter: Rise | iOS | Closed Source |