跳到主要内容

MiraScript

表达式优先、不可变数据为核心的现代脚本语言。
简洁、安全、易于嵌入。

语言特性

专为嵌入场景打造的表达式语言

🧮

表达式优先

几乎所有语法结构都是表达式,都有返回值。if、match、loop 均可直接赋值,编写更简洁自然。

🔒

不可变数据

默认数据不可变,消除意外副作用。需要可变时使用 mut 显式声明,安全且清晰。

🛡️

空安全

访问不存在的属性返回 nil 而非报错,配合 ?? 空合并和 ! 断言,轻松处理缺失值。

🔗

扩展调用

使用 :: 语法链式组合函数,value::fn(arg) 等价于 fn(value, arg),数据流一目了然。

🎯

模式匹配

强大的 match 表达式支持字面量、范围、解构、守卫等多种模式,替代冗长的 if-else 链。

📐

字符串插值

"hello, $name" 和 "$(expr)" 语法让字符串拼接直观优雅,还支持模板模式。

代码示例

直观感受 MiraScript 的表达力

表达式 & 模式匹配
// 表达式优先:if/match 都有返回值
let status = if score > 60 { "pass" } else { "fail" };
// 模式匹配
let msg = match score {
  case 90..100 { "优秀" }
  case 60..<90 { "及格" }
  case _       { "不及格" }
};

(status, msg) 
函数 & 扩展调用
// 函数声明 & 单参数简写
fn double { it * 2 }

// 扩展调用链
let result = [5, 2, 8, 1, 9, 3, 7, 4, 6]
  ::map(double)
  ::filter(fn { it > 3 })
  ::sort();
  
result 
字符串插值
// 字符串插值
let name = "MiraScript";
debug_print("Hello, $name!");

// 表达式插值
let items = [1, 2, 3];
debug_print("count: $(items::len())"); 
空安全
// 空安全访问
let user = (name: "Alice");
debug_print(user.address.city);  // => nil

// 空合并与默认值
let city = user.address.city ?? "未知";
debug_print(user.name!, city);         // 断言非空 

为什么选择 MiraScript

与传统脚本语言相比的优势

  • 高性能

    Rust 编写的解释器内核,支持编译到 WebAssembly,在浏览器和服务端均可高效运行。

  • 🧩
    易于嵌入

    提供 Node.js、Python、WASM 等多平台绑定,轻松集成到你的应用中。

  • 🎨
    开发者体验

    内建 VS Code 扩展、Monaco 编辑器集成,提供语法高亮和智能提示。

  • 📖
    完善文档

    交互式教程、可运行的代码示例、完整的语言参考,快速上手不迷路。

准备好开始了吗?

跟随教程,几分钟内上手 MiraScript。