这个项目能做什么
kanso (簡素) 是一种围绕“源文件应仅包含决策”这一理念构建的编程语言。任何通常由风格指南、linter 或代码审查通过约定强制执行的内容,现在都由编译器强制执行:非规范的空格、缩进或空行放置均被视为语法错误;名称使用 snake_case;声明和记录字段按字母顺序排列;重载函数相邻放置且最具体者在前。由于每个程序有且仅有一种规范的呈现方式,因此不存在格式化工具。
README 中强调的语义包括纯度和将副作用视为描述:print 和 >> 顺序运算符产生运行时执行的工作描述,而使用 --plan 的 check 命令会显示该描述而非运行它。失败被视为一个值而非异常:err reason 和 none 会持续传播,直到有重载函数对其进行分发,因此除以零和索引越界会返回结果而非崩溃。分发作用于字面量、具体类型和泛型,且最具体者优先。该语言支持具有类型字段的单构造函数记录类型、位置构造以及位置和键子集形式的解构;无需逗号的扁平并列应用;任意精度整数;字符串插值;从 1 开始索引的列表;其管道值成为第一个参数的点管道(dot pipe);以及 lambda 表达式。额外的编译时检查会拒绝未使用的绑定、未使用的表达式、在使用前重新绑定,以及对已声明函数、类型或内置函数的遮蔽。使用 xs[i] 或 m[k] 的索引是严格的,而 at xs 则表达预期的缺失。
模块即目录:一个模块跨越共享同一个命名空间的任意数量的文件,以下划线开头的名称为模块私有,且未使用的私有声明会导致错误。README 强调,tests/golden 中的错误语料库与成功语料库同样重要。
v0 章节列出了已知的近似实现和开放点:端点规则在运行时而非编译时检查;泛型参数永远不会绑定 err 或 none;规范的声明顺序是一种解释;管道目标解析为一个应用,且不可调用目标在运行时失败;if 形式是临时的;原生 int 为 int64,且溢出在编译二进制文件中被视为缺陷而触发 trap,这与解释器的 bigint 不同。尚未实现的功能包括 typesets、记录更新、构建区域、进程、副作用多态和 LSP。
编辑器支持为单个 TextMate bundle,可用于 JetBrains IDE 和 VS Code 处理 .kso 文件。开发使用 cargo test,涵盖单元测试和 golden-file 语料库;项目采用 MIT 许可。文档、规范和编译器注释发布在 GitHub Pages 站点上。
评论
0 评分人数达到10人后显示
登录后参与讨论。