11 个版本 (重大更新)
0.11.0 | 2024年7月20日 |
---|---|
0.10.0 | 2022年12月27日 |
0.9.0 | 2022年6月6日 |
0.8.1 | 2022年1月29日 |
0.3.1 | 2020年11月29日 |
#2473 in 开发工具
每月259次下载
在 7 个 软件包中使用
735KB
17K SLoC
EndBASIC 编程语言 - 核心
EndBASIC 是一种类似BASIC的解释器,灵感来源于Amstrad的Locomotive BASIC 1.1和Microsoft的QuickBASIC 4.5。类似于前者,EndBASIC旨在提供一个无缝地将编码与即时视觉反馈结合的交互式环境。类似于后者,EndBASIC提供高级编程构造和强类型。
EndBASIC提供了一个简化和受限的环境来学习编程的基础,并专注于可以快速奖励程序员的特性。这些特性包括内置文本编辑器、渲染图形的命令以及与树莓派硬件交互的命令。实现这类特性比其他特性(如性能或更丰富的语言)具有更高的优先级。
EndBASIC是用Rust编写的,可以在各种操作系统和平台上本地运行,包括macOS、Windows和Linux。
EndBASIC是在Apache 2.0许可证下提供的免费软件。
这个软件包包含什么?
endbasic-core
提供语言解析器和解释器。按照设计,这个软件包提供零个命令和零个函数。
语言特性
EndBASIC的语言特性灵感来源于其他BASIC解释器,但该语言并不打算与它们完全兼容。目前该语言支持
- 变量类型:布尔型(
?
)、双精度型(#
)、整型(%
)和字符串型($
)。 - 通过
DIM name(1, 2, 3) AS type
实现数组。 - 具有可选变量类型注解的强类型。
- 使用
DATA
语句为字面值原始值。支持布尔型、数字和字符串,但字符串必须用双引号括起来。 - 带有可选的
UNTIL
/WHILE
预置和后置保护的DO
/LOOP
语句和可选的EXIT DO
提前终止。 - 用于全局变量的
DIM SHARED
。 FUNCTION 名称
/END FUNCTION
。IF ... THEN ... [ELSE ...]
单行语句。IF ... THEN
/ELSEIF ... THEN
/ELSE
/END IF
多行语句。FOR x = ... TO ... [STEP ...]
/NEXT
循环。GOSUB 行号
/GOSUB @标签
/RETURN
用于过程执行。GOTO 行号
/GOTO @标签
语句和@标签
注释。SELECT CASE
/CASE ...
/CASE IS ...
/CASE ... TO ...
/END SELECT
语句。SUB 名称
/END SUB
。WHILE ...
/WEND
循环。- 通过
ON ERROR GOTO
和ON ERROR RESUME NEXT
处理错误。 - 无处不在的 UTF-8(我认为)。
设计原则
关于 EndBASIC 实现的一些亮点是
-
最小化核心。解释器知道如何执行语言的逻辑,但默认情况下,它不向脚本暴露任何内置函数——甚至不包括
INPUT
或PRINT
。这使得 EndBASIC 成为嵌入其他程序的理想选择,因为可以执行外部代码而不产生副作用,或者精确控制代码如何与宿主程序交互。 -
异步支持。解释器与异步兼容,这使得通过 WASM 将其嵌入到 JavaScript 中变得非常简单。
示例
examples
目录包含示例代码,展示如何将 EndBASIC 解释器嵌入到您自己的程序中。特别是
-
examples/config.rs
:展示了如何实例化一个最小化的EndBASIC解释器,并使用它实现一个可能存在的配置文件解析器。 -
examples/dsl.rs
:展示了如何实例化一个带有自定义函数和命令的EndBASIC解释器,以构建可能存在的领域特定语言。然后,使用此语言来控制一些假设的硬件灯光,并展示了如何连接Rust世界和EndBASIC世界。
依赖项
~0.7–1.2MB
~25K SLoC