Skip to content

picasso250/EasyScript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EasyScript 脚本语言:设计与哲学

简介

EasyScript 是一种为追求极致简洁易学结构清晰而设计的脚本语言。在新版本中,它完全采纳了 “一切皆表达式” (Everything is an Expression) 的设计哲学,具备现代编程所需的所有核心功能,但通过消除“语句”和“表达式”之间的概念鸿沟,将语言的语义统一性提升到极致。

EasyScript 的目标是成为初学者的完美基石语言,让学习者能专注于算法逻辑和数据流,而非记忆复杂的语法和优先级规则。

CLI 使用

EasyScript 解释器现在支持从命令行直接执行脚本文件。

用法:

cargo run <文件路径>

示例:

运行 examples/hello.es 脚本:

cargo run examples/hello.es

运行结果将打印到控制台。如果文件不存在或包含语法错误/运行时错误,解释器将输出相应的错误信息。

核心设计哲学

EasyScript 的设计围绕两大核心原则:“一切皆表达式”“清晰、可预测、不意外” 的运行时。

这种设计通过消除“语句”和“表达式”之间的概念鸿沟,将语言的语义统一性提升到极致,同时通过强类型和明确的真值规则来避免其他动态语言中常见的“魔法”和陷阱。

-> 点击这里,深入了解 EasyScript 的设计哲学

语言核心特性速览

-> 点击这里,查看完整的内置函数参考手册

控制流 (全部是 Expression)

特性 示例 (Expression-Style) 描述
函数定义 myFunc = fun(x) { x * x } fun 定义的表达式返回一个可执行的函数对象。函数体的最后一个表达式作为返回值。
声明 (let) let myVar = 10; let 是一个表达式,用于在当前作用域声明并初始化一个新变量(实现遮蔽)。它返回被赋的值
重新赋值 myVar = 20;myDict["key"] = 1; 重新赋值是一个表达式,返回 nil。仅能对已存在的变量进行操作,若变量不存在则抛出运行时错误。常以分号 ; 结尾以表示其主要目的是副作用。
属性访问/赋值 myObj.prop = 1;value = myObj.prop; . 是字典/Map 访问的语法糖。myObj.prop 等价于 myObj["prop"]
方法调用 myObj.method(arg1, arg2) 像 Lua 一样,. 方法调用会自动将 myObj(即 self)作为第一个参数传入函数。
条件分支 result = if a > 10 { 1 } else { 0 }; if 是表达式,返回分支代码块的值。如果无 else 且条件不满足,返回 nil
列表转换循环 b = for x in a { x + 1 }; For Expression 专用于集合转换(即 map 操作)。它遍历集合,收集循环体内最后一个表达式的值,返回一个新的列表
副作用循环 for item in range(0, 10) { sum = sum + item; }; 如果 for 循环的返回值被忽略或赋值给一个变量,它主要用于执行副作用。
Block 表达式 let res = { let x = 10; x * 2 }; 独立的 Block 表达式是创建局部作用域和封装复杂逻辑的强大工具。它返回其内部最后一个表达式的值。

数据结构

特性 实现方式
空值 唯一的 nil 值,用于表示空值和无意义的返回值 (Unit/Void)。
列表 (List) 支持使用字面量 [1, a+b, true] 构造。
字典 (Dict/Map) 支持使用键值对字面量 {"key": 1, 2: "b"} 构造。 对象即 Map。
高优先级访问 列表/字典的索引操作 [ ] 和属性的点访问 . 具有最高的优先级。

总结

EasyScript 的新设计证明了极简功能强大语义优雅可以完美共存。通过将整个语言统一到“表达式”的概念下(包括灵活的 Block 表达式),并引入高效的语法糖,我们创建了一个语法更简洁、语义更统一、且完全具备执行任何算法能力的脚本语言。它是学习函数式编程思想和语言设计理念的理想选择。

开发者 / 调试选项

EasyScript 提供了一些环境变量,帮助开发者调试运行时行为:

  • DEBUG_GC: 设置为 1 以启用垃圾回收器(GC)的详细分配和回收日志。例如:DEBUG_GC=1 cargo run

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published