A scripting language written in Dart meant for embedding into Dart programs with a simple, clean API
Arrow
A scripting language written in Dart meant for embedding into Dart programs with a simple, clean API
Syntax
The syntax is heavily influenced by languages such as JavaScript.
// Line breaks are significant!
// They tell the parser its a new instruction!
// If you want multiple instructions on one line, seperate them with a ;
// Define a local
let name = 5
// This makes name have its value exported into the Exports table of the VM.
// This isn't like a global, the VM doesn't read its exports. Only the embedder is meant to read exports via helper functions.
export name as "name";
// Define a local function
function test() {
  return name
}
// Globalize a variable
global test;
// Set a variable (global or local)
set name = name + 2
// Define a global (set also defines if the global doesnt exist, but this one forcefully uses the global)
global name = "Test"
// This makes the VM itself return some value
return [5, 123, 789]
Embedding
Arrow is really easy to embed into Dart applications.
import "package:arrow_lang/arrow_lang.dart";
void main() {
  // Create a VM instance
  final vm = ArrowVM();
  // Load built-in libraries
  vm.loadLibs();
  // Run a file
  final result = vm.runFile(File("code.arrow"));
  // Read a global from the VM
  print(vm.globals.get("Some global"));
  // Modify a global inside of the VM
  vm.globals.set("Some global", ArrowNumber(42));
  // Get an export
  final someExportedValue = vm.exports.get("Some export");
}
You can look in the examples folder for more examples.