moonbit-eval

MoonBit Eval Package

moonbit
eval
moon add oboard/moonbit-eval@0.8.26
Download zip
Author
Version
0.8.26
License
Apache-2.0
Last updated
4 months ago
Downloads
149

Dependencies

README

#MoonBit Eval

Version GitHub Workflow Status (with event) License

#Demo

🚀 REPL Demo

#Introduction

MoonBit Eval is an interpreter for the MoonBit language.

Built on top of the @moonbitlang/parser library, it provides comprehensive and accurate MoonBit syntax support, capable of correctly parsing and executing complex MoonBit code structures including functions, structs, lambdas, loops, and more.

#Quick Start

let vm = MoonBitVM::new()

// Basic expressions
inspect(vm.eval("1 + 2 * 3"), content="7")
inspect(vm.eval("\"hello\" + \" world\""), content="hello world")

// Variables and functions
inspect(vm.eval("let x = 42"), content="()")
inspect(vm.eval("fn double(n: Int) -> Int { n * 2 }"), content="(n: Int) -> Int")
inspect(vm.eval("double(x)"), content="84")

// Control flow
inspect(vm.eval("if x > 40 { \"big\" } else { \"small\" }"), content="big")

// Pattern matching
inspect(vm.eval("match (1, 2) { (a, b) => a + b }"), content="3")

// Using aliases (new parser style)
inspect(vm.eval("using @int {abs}", top=true), content="()")
inspect(vm.eval("abs(-5)"), content="5")

#Parser Notes

  • parse_code_to_expr now uses the same path as moonbitlang/parser handrolled parser tests: lexer.tokens_from_string(...).tokens -> handrolled_parser.parse_expr(...).
  • This removes the old wrapper trick (fn init { ... }) and keeps expression parsing behavior aligned with upstream.
  • Diagnostics from parser reports are preserved and returned in Err(...) when parse fails.

#✨ Features

  • ✅ đŸĨŽ Mooncakes Loader: Load Mooncakes packages at runtime
  • ✅ Builtin FileSystem Library: Provides basic file system operations.
  • ✅ Eval Function: Allows dynamic evaluation of MoonBit code strings.

#MoonBit Language Support

FeatureStatusDescription
Core Language
Basic Types (Int, Bool, String, Double, Char)✅Full support for primitive types
Expressions (arithmetic, logical, comparison)✅Complete expression evaluation
Variables (let, let mut)✅Immutable and mutable variables
Assignment✅Variable reassignment and shadowing
Multiline strings✅#|syntax for multiline string literals
String interpolation✅{variable} syntax in string literals
Type constraints✅(value : Type) syntax for explicit typing
Control Flow
If-else✅Conditional expressions
For loops✅C-style for loops with continue/break
While loops✅While loop constructs with else clause
Loop control✅Continue and break statements
Guard expressions✅guard condition else { action } syntax
Is expressions✅Pattern matching with 'is' operator
Defer expressions✅defer statement for cleanup code
Return expressions✅Early return from functions
Raise expressions✅Exception throwing with raise
Try-catch expressions✅Exception handling with try-catch
Loop expressions✅loop pattern matching with break/continue
Functions
Function definitions✅Named functions with parameters
Named parameters✅Named and optional parameters
Lambda expressions✅Anonymous functions (x => x * 2)
Closures✅Proper closure environment capture
Recursive functions✅Self-referencing function calls
Currying✅Higher-order function composition
External functions✅Integration with external calls
Embedded functions✅Native function integration
Data Structures
Arrays✅Array creation, indexing, assignment
Array methods✅length, get, push, pop, contains, slice, concat, join
Array boolean methods✅any, all operations
Array spread syntax✅[..array1, ..array2] syntax
Array slice operations✅arr[start:end], arr[start:], arr[:end] syntax
Array augmented assignment✅arr[i] += value, arr[i] *= value syntax
Tuples✅Tuple creation, access, destructuring
Structs✅Custom data types with methods
Mutable struct fields✅Field mutation support
Nested struct references✅Reference semantics for nested structures
Record update syntax✅{ ..record, field: new_value } syntax
Map literals✅{ "key": value } syntax for map creation
Pattern Matching
Basic patterns✅Constants, variables, wildcards
Tuple patterns✅Destructuring tuples
Array patterns✅Array destructuring
Record patterns✅Struct field matching
Range patterns✅Range expressions (_..<x, 'a'..='z')
Constructor patterns✅Constant constructor matching
Or patterns✅Multiple pattern alternatives
Nested patterns✅Complex nested pattern matching
Enums and Generics
Basic enums✅Simple enumeration types
Enums with data✅Algebraic data types
Enum pattern matching✅Pattern matching on enum variants
Generic types✅Generic enums and functions
Generic functions✅Polymorphic function definitions
Option Type
Option basics✅Some/None construction
Option pattern matching✅Pattern matching on Option
Option methods✅unwrap, unwrap_or, is_empty, map, filter
Built-in Methods
Bool methods✅compare, default
Int methods✅Bitwise ops, comparisons, bit manipulation
String methods✅length, get, unsafe_get, to_string
Double methods✅compare, to_int64
Char methods✅compare, to_int
Advanced Features
Type system✅Basic type checking and inference
Static method calls✅Class::method() syntax
Pipe operator✅|> operator for function chaining
Function aliases✅using @pkg {name} alias support
Cross-package method calls✅Method calls across different packages
Error handling✅Result type error handling
Group expressions✅Parenthesized expressions for precedence
For-in loops✅Iterator-based loops
Iterator methods✅iter, map, filter, reduce, for_each
Nested iteration✅Complex nested loop structures
Iterator control flow✅break/continue in iterator contexts
Package System
Module imports✅@package.function syntax
Cross-package types✅Using types from other packages
Built-in packages✅@int, @math, @bigint, @cmp, @list support
Package method calling✅Method calls across package boundaries
IO and FFI
Print functions✅println and print support
Embedded functions✅Native function integration via FFI
External function binding✅Custom function registration
Sorting and Collections
List sorting✅Built-in sort methods for collections
Array sorting✅Sorting operations on arrays
Collection methods✅Comprehensive collection manipulation
Comparison Operations
Equality operators✅== and != operators
Relational operators✅, <=, >= operators
Type-aware comparison✅Proper type checking in comparisons
Constructor Patterns
Single argument matching✅Constructor pattern with single args
Named field matching✅Constructor patterns with named fields
Wildcard patterns✅_ patterns in constructor matching
Functional Programming
Higher-order functions✅Functions as first-class values
Function composition✅Combining functions effectively
Closure environments✅Proper variable capture in closures
Literal Overloading
Numeric literal overloading✅Automatic conversion between numeric types
Character literal overloading✅Char to Int conversion in pattern matching
String literal overloading✅String to Bytes conversion
Array literal overloading✅Array to various types (Bytes, String) conversion
Double literal overloading✅Double to Float precision conversion
Map literal overloading✅Map to Json object conversion
Complex overloading scenarios✅Multi-step type conversions
Traits🟡Interface definitions
Trait as expressions🟡(value as Trait) syntax for trait casting
Packages🟡Module system with @package.function syntax (no trait, trait derive, operator overloading)
Attribute
#alias✅Function alias
#external❌External function binding
#callsite❌Call site information
#skip❌Skipping compilation of a function
#cfg❌Conditional compilation based on configuration
Not Yet Supported
Async/await🟡Limited bridge support via %async.run / %async.suspend (no scheduler/event loop)

#Contributing

We welcome contributions to the MoonBit Eval project! Whether it's bug fixes, feature additions, or documentation improvements, your contributions are valuable.

#Community

Join our community for discussions and support:
  • QQ Group: 949886784

QQ įž¤

#
MoonBitVM

pub(all) struct MoonBitVM {
interpreter :
ClosureInterpreter

log : Bool
}

#
MoonBitVM::create

fn MoonBitVM::create(log? : Bool) -> MoonBitVM

#
MoonBitVM::eval

fn MoonBitVM::eval(self : MoonBitVM, code : String, log? : Bool, top? : Bool) -> EvalResult

#
MoonBitVM::new

fn MoonBitVM::new(log? : Bool) -> MoonBitVM

#
code_to_ast

fn code_to_ast(code : String) -> String

#
eval_result_to_string

fn eval_result_to_string(result : EvalResult) -> String

#
expr_to_string

fn expr_to_string(expr :
Expr
) -> String

#
value_to_json

#
value_to_string

Powered by MoonBit

Site sourceReport issuePackagesBuild queueSkillsStatistics

Š 2026 mooncakes.io