hetu script

Hetu Script

A lightweight scripting language written in Dart for embedding in Flutter apps.

简体中文页面

Introduction

Hetu is a lightweight scripting language purely written in Dart for embedding in Flutter apps. Our goal is to enable Flutter app & game to have hotfix and scripting ability.

Documentation 中文文档

Features

  • Modern programming language syntax likes typescript/kotlin/swift, need very little time to get familiar with.
  • Full scripting language abilities: class OOP, prototype OOP, FP, module, errors, etc.
  • Runs on all platforms that flutter supports, including web browsers and desktop.
  • Extremely easy on binding, call Dart functions in script or call script functions in Dart with just one line.

Test Hetu script in the online playground.

Quick start

To eval a string literal of Hetu code in Dart.

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init();
  hetu.eval(r'''
    var ht = {
      name: 'Hetu',
      greeting: () {
        print('Greetings from ${this.name}!')
      }
    }
    ht.greeting()
  ''');
}

To pass a Map to script, modify it in script and get it back:

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init(externalFunctions: {
    'hello': () => {'greetings': 'greetings from Dart!'},
  });
  var hetuValue = hetu.eval(r'''
      external fun hello
      var dartValue = hello()
      dartValue['reply'] = 'Hi, this is Hetu.'
      dartValue // the script will return the value of it's last expression
      ''');

  print('hetu value: $hetuValue');
}

You can check the documentation for more information on the grammar and binding.

IDE extension

If you are using VS Code, you can download this extension to get basic highlight and dart snippets on bindings.

Command line tool

We have a command line REPL tool for quick testing. You can activate by the following command:

dart pub global activate hetu_script_dev_tools

Then you can use command line tool 'hetu' in any directory on your computer.

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
null // repl print
>>>a
42 // repl print
>>>fun meaning {\
return a }
null // repl print
>>>meaning
meaning() -> any // repl print
>>>hello()
42 // repl print

You can check this official document for more information on 'pub global activate'.

Discussion group

Discord: https://discord.gg/aJedwcRPr8

中文交流可以加 QQ 群:812529118

Support

You can support my project by simply giving it a star on GitHub.

Or you can buy me a coffee:

Buy me a coffee

Libraries

analyzer
analyzer/analysis_error
analyzer/analysis_manager
analyzer/analysis_result
analyzer/analyzer
analyzer/analyzer_impl
analyzer/diagnostic
analyzer/type_checker
ast/ast
ast/visitor/recursive_ast_visitor
binding
binding/class_binding
binding/hetu_binding
binding/instance_binding
bundler/bundler
bytecode/bytecode_module
bytecode/bytecode_reader
bytecode/compiler
bytecode/disassembler
bytecode/goto_info
constant/constant_interpreter
constant/global_constant_table
declaration/class/class_declaration
declaration/declaration
declaration/function/abstract_parameter
declaration/function/function_declaration
declaration/function/parameter_declaration
declaration/generic/generic_type_parameter
declaration/namespace/declaration_namespace
declaration/type/abstract_type_declaration
declaration/type/type_alias_declaration
declaration/variable/variable_declaration
declarations
error/error
error/error_handler
error/error_severity
errors
external/external_class
external/external_function
external/external_instance
formatter/formatter
grammar/constant
grammar/element
grammar/grammar
hetu/hetu
hetu_script
Hetu Script A lightweight scripting language for embedding in Flutter apps.
interpreter/interpreter
lexer/lexer
lexer/lexicon
lexer/lexicon_default_impl
locale/locale
parser
parser/parser
parser/parser_default_impl
parser/token
parser/token_reader
preincludes/preinclude_functions
preincludes/preinclude_module
resource/overlay/overlay_context
resource/overlay/overlay_manager
resource/resource
resource/resource_context
resource/resource_manager
shared/constants
shared/crc32b
shared/gaussian_noise
shared/jsonify
shared/math
shared/uid
shared/util
source/computer
source/line_info
source/source
source/source_range
type/external
type/function
type/literal
type/nominal
type/structural
type/type
type/union
type/unresolved
types
util
value/class/class
value/class/class_namespace
value/constant
value/entity
value/external_enum/external_enum
value/function/function
value/function/parameter
value/instance/cast
value/instance/instance
value/instance/instance_namespace
value/namespace/namespace
value/struct/named_struct
value/struct/struct
value/unresolved_import_statement
value/variable/variable
values
version