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 开发工具

Download history 19/week @ 2024-04-26 24/week @ 2024-05-03 17/week @ 2024-05-10 21/week @ 2024-05-17 13/week @ 2024-05-24 11/week @ 2024-05-31 12/week @ 2024-06-07 17/week @ 2024-06-14 18/week @ 2024-06-21 5/week @ 2024-06-28 5/week @ 2024-07-05 16/week @ 2024-07-12 203/week @ 2024-07-19 33/week @ 2024-07-26 13/week @ 2024-08-02 8/week @ 2024-08-09

每月259次下载
7 个 软件包中使用

Apache-2.0 协议

735KB
17K SLoC

EndBASIC 编程语言 - 核心

Crates.io Docs.rs

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 GOTOON ERROR RESUME NEXT 处理错误。
  • 无处不在的 UTF-8(我认为)。

设计原则

关于 EndBASIC 实现的一些亮点是

  • 最小化核心。解释器知道如何执行语言的逻辑,但默认情况下,它不向脚本暴露任何内置函数——甚至不包括 INPUTPRINT。这使得 EndBASIC 成为嵌入其他程序的理想选择,因为可以执行外部代码而不产生副作用,或者精确控制代码如何与宿主程序交互。

  • 异步支持。解释器与异步兼容,这使得通过 WASM 将其嵌入到 JavaScript 中变得非常简单。

示例

examples 目录包含示例代码,展示如何将 EndBASIC 解释器嵌入到您自己的程序中。特别是

  • examples/config.rs:展示了如何实例化一个最小化的EndBASIC解释器,并使用它实现一个可能存在的配置文件解析器。

  • examples/dsl.rs:展示了如何实例化一个带有自定义函数和命令的EndBASIC解释器,以构建可能存在的领域特定语言。然后,使用此语言来控制一些假设的硬件灯光,并展示了如何连接Rust世界和EndBASIC世界。

依赖项

~0.7–1.2MB
~25K SLoC