下载 SML { ❄ }
所有下载项均基于 MulanPSL-2.0 许可发布,源码见 仓库。
各语言绑定统一经 C-ABI(c/sml_rs.h v3)调 Rust cdylib sml/libsml;读路径直接遍历值树、不经 JSON;
源码包内含 LICENSE 与 README,可直接嵌入你的工程。
下载
| 项目 | 版本 | 说明 | 下载 |
|---|---|---|---|
| VS Code 扩展 | 0.4.3 |
编辑器插件:高亮 / 诊断 / 补全 / 跳转 / 格式化 + SML 专属编辑能力 | 下载 |
| Python | 0.1.0 |
ctypes 调 cdylib,零三方依赖;值树直访 | 下载 |
| Ruby | 0.1.0 |
fiddle 调 cdylib,零 gem 依赖;值树直访 | 下载 |
| Java | 0.1.0 |
JDK Panama FFM 调 cdylib;值树直访 | 下载 |
| Go | 0.1.0 |
cgo 调 cdylib;值树直访 | 下载 |
| C# | 0.1.0 |
P/Invoke 调 cdylib(本机未验证) | 下载 |
| C | 0.6.3 |
纯 C99 自包含实现 或 Rust 桥接头 二选一 | 下载 |
| C++ | 0.6.3 |
C++17 零依赖实现 或 Rust 桥接头 二选一 | 下载 |
| JavaScript | 0.6.3 |
零依赖 ESM,与 playground 同解析器 | 下载 |
| Lua | 0.6.3 |
Lua 绑定,随仓库参考实现 | 下载 |
Debian / Ubuntu 包(libswsml · amd64)
Rust cdylib 后端的系统集成包(swsml 0.6.3,SONAME libswsml.so.0)。装好即用:共享库进 ldconfig,头文件进 /usr/include/sml,pkg-config 一并就位。按后端拆成四个包,按需取用:
| 包 | 版本 | 说明 | 下载 |
|---|---|---|---|
| libswsml0 | 0.6.3 | 运行时:Rust cdylib C-ABI(libswsml.so.0),v1..v4 全集能力 | 下载 |
| libswsml-dev | 0.6.3 | C 开发:sml_rs.h + libswsml.so + pkg-config swsml | 下载 |
| libswsml-cpp0 | 0.6.3 | C++ 运行时:RAII 封装(libswsml_cpp.so.0) | 下载 |
| libswsml-cpp-dev | 0.6.3 | C++ 开发:sml_rs.hpp + pkg-config swsml_cpp | 下载 |
# 运行时
sudo dpkg -i libswsml0_0.6.3_amd64.deb libswsml-cpp0_0.6.3_amd64.deb
# 开发(含头文件 + pkg-config)
sudo dpkg -i libswsml-dev_0.6.3_amd64.deb libswsml-cpp-dev_0.6.3_amd64.deb
# 之后即可:gcc app.c $(pkg-config --cflags --libs swsml) -o app
# g++ -std=c++17 app.cpp $(pkg-config --cflags --libs swsml_cpp) -o app
目前仅 amd64;其他架构可用仓库内
packaging/build_deb.sh --arch <arch>自建。 命名刻意用libswsml,避开 Debian 官方libSML/libsml-dev(智能电表生态)冲突。 依赖:libc6、libgcc-s1(C++ 包另需libstdc++6)。
校验和(SHA256)
下载后请核对哈希。下面即为 sha256sum -c 兼容格式——整段存为 SHA256SUMS,与下载文件放同一目录后运行 sha256sum -c SHA256SUMS 即可一次校验全部:
4a325ac778f6c666d47430fd394ad390f74b722440c2563f811ab240ce27375d sml-lang-0.4.3.vsix
928c37067c834865afd88ee06149587ac1bcdbdab552775ca1c15cbf97ed9af6 sml-python-0.1.0.zip
85250c426e5724ed26371ed7f8690cb7695c40e7e157379d1ab62827ad23a81c sml-ruby-0.1.0.zip
12a224512fbdb2e60b4fd82ae6912f801990eec50108ae14aad21e7d50ecf1a8 sml-java-0.1.0.zip
4099808da508f1fd8cf4e15948c54aec84690b035255a12a131fe451287a70b2 sml-go-0.1.0.zip
1e9a7b1ca0e87ba7d6554cfee9f709c6acb3723c203cb088f53b0f3921fc02dd sml-csharp-0.1.0.zip
09ee5772007c106a684cd7b97ac01821863ff8aa371f8a01e71bda38c6621cd1 sml-c-0.6.3.zip
02ef4a95542a6fd6af9443cef58a494cdf3695441ab5a553b9ce916ff109e774 sml-cpp-0.6.3.zip
584d05e7be2958333e09cb20d21f25ebc0e7fecf8ad3da8d733161e4ebb6dd30 sml-javascript-0.6.3.zip
9e6688d1e4326cb3bf63bbf62347f49607b62a0ca7b35ffa0d1ed55ad37c27e9 sml-lua-0.6.3.zip
c5ded19ba858252c4b06ef1d783dba3f70c4d67451c89a98c5063623170f4c74 libswsml0_0.6.3_amd64.deb
06cbb1ed4f255ad8c23b1aba62792dc29b01e345cf74a3a401a4eada9d8c79ba libswsml-dev_0.6.3_amd64.deb
b51d0fa9e738c3206d32c84745a1a8687f861b74debcd6be0557ffcb7bb3277e libswsml-cpp0_0.6.3_amd64.deb
e174fa652aff0755d19ad99779ce1b3a1b516d8c6c62422f96f1e7e41aa6dd1b libswsml-cpp-dev_0.6.3_amd64.deb
各实现说明(点击展开)
VS Code 扩展 · 0.4.3
为 VSCode 提供 SML 的语法高亮、错误提示、补全、悬浮说明、跳转与格式化,以及一批 「只在 SML 里说得通」的编辑期能力:
-
悬浮:契约名(
@is Server)显示契约声明 + 解析器按契约填充默认值后的实际结构; 块名(primary {)显示路径(database.primary)、它应用的契约与填充后的结构 -
跳转到定义:
@is Server→@contract Server,&base→@base { } -
include / 命名空间导航:路径上 F12 跳到被包含文件、悬停给「该文件的顶层键」; 命名空间别名(
as db)悬停给「这个命名空间里实际有哪些键」,F12 跳到被包含文件; 引用(db.host)悬停告诉你它来自哪个文件的什么定义,F12 直接跳过去 -
特殊颜色:选中一个词 → 右键「应用特殊颜色」,写进工作区的
HL-cfg.sml(随仓库走、可直接手写编辑);默认只对语法单元生效(契约 / 片段 / 类型 / 键 / 指令), 不会把注释与字符串里的同名文字一起染掉;也认命名空间前缀(@is ui.base.Service这类引用处照样着色)。写 DSL / 做分析时这套东西的用法见扩展 README 的同名小节 -
特别高亮:把某个词在整个工作区里点亮(状态栏显示 N 处 / M 文件)
-
自检:右键「SML: 自检」把「为什么没反应」逐条摊开写进「输出 → SML」 (扩展版本、包内解析器指纹、命令注册、语言模式、文档校验结果、能不能跳转)
-
安装:VSCode → 扩展 →
...→ 从 VSIX 安装,选择下载的文件 -
说明:扩展目录内含
README.md(中英双语)与README.en.md(英文)
本版为重新打包:修掉了「在 VS Code 1.13x 上扩展根本无法激活」的致命问题。若你装过 更早的 0.4.2,请重新安装本文件。装完可用右键「SML: 自检」核对包内解析器指纹 (应为
96110 B / c7a5054d…)。扩展未上架 Marketplace,仅提供 VSIX 手动安装(Zed 用户请看仓库里的
editors/zed/README.md)。 契约(@contract/@is)在 Rust、JS、C、C++、Lua 上都已支持,因此编辑器内的语义错误也会报。
多语言宿主绑定 · 0.1.0(Python / Ruby / Java / Go / C#)
- 文本 / 文件加载(含 include 展开)
- 值树遍历(类型保真:int / float / bool / str / array / object)
- 富错误(code_str / line / column / position / source / text)
- 序列化 dumps(对象 → SML 文本)
- 特性门禁 flags(沙箱)
- 版本 / 特性查询(Version / Features)
- 路径取值(get_in)
- 内存纪律(free 正确释放)
五门宿主绑定经 C-ABI 调 Rust cdylib;读路径直接遍历值树(类型保真、富错误直取),不经 JSON; 仅
dumps走官方桥对象 → JSON → sml_dump。C# 本机无 .NET SDK 尚未实地验证,逻辑与其余四门 严格对齐,待装 SDK 后dotnet run --project bindings/csharp即可验证。
参考实现 · 0.6.3(C / C++ / JavaScript / Lua)
- 文本 / 文件加载(含 include 展开)
- 值树遍历(类型保真:int / float / bool / str / array / object)
- 富错误(code_str / line / column / position / source / text)
- 序列化 dumps(对象 → SML 文本)
- 特性门禁 flags(沙箱)
- 版本 / 特性查询(Version / Features)
- 路径取值(get_in)
- 内存纪律(free 正确释放)
C / C++ 为仓库内零依赖自包含实现(亦可选 Rust 桥接头
sml_rs.*);JavaScript 为零依赖 ESM, 与官网 playground 同解析器;Lua 为随仓库提供的参考绑定。四者与宿主绑定共享同一套能力面。
Rust 库与命令行工具(swsml 0.6.3 · smltools 0.2.2)
- Rust 库:
swsml0.6.3 ——cargo add swsml - 命令行工具:
smltools0.2.2 ——cargo install smltools(版本号与库互相独立;smltools由smlconv改名而来,旧的smlconv不再更新)
0.6.3 的要点:契约叠加(一个块应用多份契约,三写法等价);契约映射 API;契约推断
smltools --infer-contract;错误带位置[第 N 行第 M 列];修复模式量词与编译规模无上限等五处。 完整清单见 CHANGELOG.md (English)。