咱们现在明道的语法能固定下来吗是个好问题。让我先看看当前明道语言的语法状态包括关键字、语法文档和示例代码的情况。toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\docs\关键字设计.md让我看看当前实际实现的语法和关键字情况toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\core\keywords.rkt让我看看不同风格的示例代码和设计规范toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\docs\中文编程语言设计规范.md这是个很关键的问题。让我先看看当前实际实现了哪些语法风格然后给你一个客观的分析。toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\hanoi-nospace.mingdaotoolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\advanced-algorithms.mingdao让我再看看 C 风格的示例和解析器的核心实现了解当前实际支持的语法toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\c-style-test.mingdao让我快速了解一下当前解析器实际支持哪些语法toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\lang\parser.rkt好我来给你客观分析一下当前明道语法的状态以及能不能固定下来。当前状态设计 vs 实现设计文档[中文编程语言设计规范.md](file:///G:/dumategithub/langbyracket/docs/中文编程语言设计规范.md)描述的是言律风格双字关键字为主相加、相减、相乘、相除主谓宾结构 管道式调用缩进分块句号可选谓宾语序函数名在前参数在后实际实现是混合风格关键字大部分是双字定义、如果、那么、函数等但运算符是单字加、减、乘、除不是设计文档里的双字同时支持多种调用风格前缀逗号式打印, helloC 风格打印(hello)SVO 风格定义 x 就是 5代码块同时支持大括号和缩进能不能现在就固定我的建议是暂时不要急着完全固定可以先冻结核心语法外围逐步收敛。可以先固定的部分已经稳定核心关键字集定义、如果、那么、否则、函数、返回、对于、从、到、跳出、继续 等变量定义语法定义 x 就是 .../赋值 x 为 ...函数定义语法函数 名(参数) { ... }和定义 名 就是函 参数...两种风格条件/循环语法如果 ... 那么 { ... }/对于 ... 从 ... 到 ... { ... }还需要斟酌的部分运算符命名单字加、减、乘、除还是双字相加、相减单字更简洁符合数学直觉双字更无歧义符合设计规范函数调用风格要不要统一成一种现在支持三种灵活性高但学习者困惑代码块风格大括号还是缩进缩进更中文大括号更传统逗号的作用前缀逗号打印, x是特色但也有争议我的建议路径先定一个官方推荐风格比如 C 风格 中文关键字作为文档和示例的标准其他风格作为兼容模式不推荐但继续支持用 2-3 个月的时间写足够多的示例代码比如 50 个验证语法的表达力和舒适度根据实际使用体验再微调然后正式冻结 v1.0 语法你觉得这个思路怎么样还是说你有更明确的方向想要现在就定下来非常赞同你的思路现在有哪些官方推荐风格呢列举出来咱们一起讨论下。好问题让我先系统梳理一下当前实际支持的语法风格然后咱们讨论哪个作为官方推荐。让我先看看现有的各种示例文件确认实际支持的风格toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\hello.mingdaotoolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\debug-demo.mingdao让我再看看几种不同风格的示例toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\turing-mingdao.rkt让我再看看飞机射击游戏的示例了解更复杂的代码风格toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\plane-shooter.mingdao好让我系统梳理一下当前实际存在的几种语法风格咱们一起讨论选哪个作为官方推荐。候选风格 1Lisp 前缀风格当前最主流特点函数名在前逗号分隔参数缩进分块定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 圆周率 乘 半径 乘 半径 打印, 结果是 计算面积, 5, 打印代表文件[advanced-algorithms.mingdao](file:///G:/dumategithub/langbyracket/mingdao/examples/advanced-algorithms.mingdao)、[plane-shooter.mingdao](file:///G:/dumategithub/langbyracket/mingdao/examples/plane-shooter.mingdao)优点缺点实现最简单最稳定前缀表达式不符合数学直觉a 乘 b还行但复杂表达式就绕了宏系统天然支持代码即数据初学者需要适应动词在前无空格分词最容易做逗号太多看起来有点乱候选风格 2C 风格最贴近传统编程特点大括号分块函数名(参数)中缀运算符函数 计算面积(半径) { 定义 圆周率 3.14159 返回 圆周率 * 半径 * 半径 } 打印(结果是) 打印(计算面积(5))代表文件之前的 hanoi-c-style.mingdao优点缺点学习成本最低有编程基础的人上手就会大括号 中文感觉有点混搭中缀表达式符合数学习惯关键字函数、如果和 C 语法混在一起风格不统一嵌套调用直观f(g(x))无空格分词难度大括号和运算符会干扰候选风格 3SVO 主谓宾风格设计文档里的言律风格特点主谓宾结构管道式调用缩进分块双字运算符定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 半径 相乘 半径 相乘 圆周率 结果是 然后 打印 5 然后 计算面积 然后 打印代表文件[中文编程语言设计规范.md](file:///G:/dumategithub/langbyracket/docs/中文编程语言设计规范.md) 里的设计优点缺点最符合中文表达习惯读起来像说话管道式调用嵌套深了反而不直观双字关键字无歧义双字运算符相乘、相加写起来有点啰嗦代码即数据宏系统天然支持当前实现还不完整很多语法需要补候选风格 4混合实用风格当前实际状态特点什么好用用什么多种风格混合变量定义用 SVO定义 x 就是 5函数调用看心情简单的用前缀打印, hello嵌套多的用 C 风格f(g(x))运算符用单字中缀a 加 b 乘 c代码块用缩进优点缺点灵活怎么顺手怎么写没有统一标准不同人写出来的代码风格差异大现有代码都能跑学习者困惑“我到底该学哪种写法”迁移成本低不利于生态建设库和示例风格不统一我的初步想法我个人比较倾向于**“以 SVO 风格为骨架吸收 C 风格的优点”**的路线变量/函数定义保留定义 x 就是 .../定义 f 就是函 ...很有中文特色也好懂函数调用主推 C 风格f(x, y)但也支持前缀f, x, y和管道x 然后 f运算符用单字中缀加 减 乘 除同时支持 - * /符号毕竟数学直觉太强了代码块缩进为主大括号也支持单行代码块方便你觉得哪种方向比较对味或者你有其他想法山东倒装特色哈哈这个问题有意思山东倒装句梗用在编程语言设计上其实戳中了中文编程的核心问题我们到底要在多大程度上贴合自然语言让我认真聊聊这个话题。先说结论倒装可以有但不能真倒装自然语言的倒装是灵活的、随意的“吃了吗你”“干啥呢这是”但编程语言必须有确定的语法规则。不过倒装思维确实可以转化为编程语言的特色——而且咱们明道其实已经有了中文里的倒装编程里叫管道你看这几句山东话倒装编程里的对应“饭吃了吗你”饭 然后 吃了吗 然后 你管道调用“作业写完了都”作业 然后 写完了 然后 都“喝杯水先”水 然后 喝一杯 先发现没宾语前置的倒装本质上就是管道式调用先讲话题宾语再讲对它做什么操作。我提议的中文特色语法设计既然要做中文编程语言不如把中文的语言特点真正融进去而不只是把关键字翻译成中文。给你设计几套1. 主题优先最有中文特色中文是主题优先的语言不是主语优先。比如今天天气不错——今天是主题不是主语。对应到编程里可以支持# 先讲主题再讲操作 就 列表 1,2,3 来说 打印 长度 打印 求和 打印 排序这比先创建变量再操作更符合中文思维。2. 把字句语法糖中文的把字句其实就是强调宾语普通“我吃完了饭”把字句“我把饭吃完了”强调饭对应到编程里# 普通写法 赋值 列表 为 追加, 列表, 元素 # 把字句写法 把 列表 追加 元素是不是很顺而且语义明确没有歧义。3. 被字句语法糖和把字句相对强调被动# 普通写法 定义 结果 就是 排序, 数据 # 被字句写法 定义 结果 就是 数据 被 排序这其实就是管道调用的另一种说法。4. 连动式动词连用中文可以连续用几个动词“他走过去开门”对应到编程里就是方法链# 连动式 数据 过滤 排序 打印 # 等价于 打印(排序(过滤(数据)))这个咱们现在其实已经有雏形了就是然后管道。回到倒装的问题你说山东人加一点倒装句我觉得可以从这几个角度落地✅ 可以有的倒装有明确语法规则宾语前置 管道调用# 正装 打印(数据) # 倒装管道 数据 然后 打印 数据 | 打印主题前置 with 语句就 用户对象 来说 打印 姓名 打印 年龄把字句 强调操作对象把 列表 追加 元素❌ 不能有的倒装会产生歧义随意倒装吃了吗你→ 哪个是函数哪个是参数省略成分今天吃了→ 谁吃了吃了什么语序完全自由那解析器复杂度会爆炸具体到明道的官方语法我建议这么定核心风格SVO 主谓宾 管道倒装基础写法正装谓宾结构定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 半径 乘 半径 乘 圆周率 打印(结果) 打印(计算面积(5))增强写法倒装管道风格5 然后 计算面积 然后 拼接 结果, _ 然后 打印特色写法把字句把 列表 追加 元素 把 字典 设置 键, 值为什么这么设计正装保底C 风格 中文关键字有编程基础的人一上来就能写倒装增强管道式调用符合中文先讲话题再讲操作的思维特色点缀把字句、主题句这些作为语法糖不用也行用了更顺你觉得这个方向怎么样要不要我基于这个思路写一份更详细的明道语法 v1.0 建议稿出来写一份更详细的明道语法 v1.0 建议稿出来写出来了你看根据 明道语法v1.0建议稿.md 能否进行语法的修改和固化 条件成熟了吗一句话总结建议稿的设计意图与实际实现之间存在多处关键字命名和语法风格差异且实际实现已远超建议稿范围。直接固化条件尚不成熟。建议采用**别名兼容策略**——保留现有语法不变同时增加建议稿中的关键字作为别名让多种写法共存在实际使用中验证后再正式固化。如果你同意这个方案我可以开始动手实现第一步和第二步增加关键字别名这是低风险、不破坏现有代码的改动。开始动手实现第一步和第二步增加关键字别名
咱们现在明道的语法能固定下来吗? 6.20日@Trae
发布时间:2026/6/20 21:07:58
咱们现在明道的语法能固定下来吗是个好问题。让我先看看当前明道语言的语法状态包括关键字、语法文档和示例代码的情况。toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\docs\关键字设计.md让我看看当前实际实现的语法和关键字情况toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\core\keywords.rkt让我看看不同风格的示例代码和设计规范toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\docs\中文编程语言设计规范.md这是个很关键的问题。让我先看看当前实际实现了哪些语法风格然后给你一个客观的分析。toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\hanoi-nospace.mingdaotoolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\advanced-algorithms.mingdao让我再看看 C 风格的示例和解析器的核心实现了解当前实际支持的语法toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\c-style-test.mingdao让我快速了解一下当前解析器实际支持哪些语法toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\lang\parser.rkt好我来给你客观分析一下当前明道语法的状态以及能不能固定下来。当前状态设计 vs 实现设计文档[中文编程语言设计规范.md](file:///G:/dumategithub/langbyracket/docs/中文编程语言设计规范.md)描述的是言律风格双字关键字为主相加、相减、相乘、相除主谓宾结构 管道式调用缩进分块句号可选谓宾语序函数名在前参数在后实际实现是混合风格关键字大部分是双字定义、如果、那么、函数等但运算符是单字加、减、乘、除不是设计文档里的双字同时支持多种调用风格前缀逗号式打印, helloC 风格打印(hello)SVO 风格定义 x 就是 5代码块同时支持大括号和缩进能不能现在就固定我的建议是暂时不要急着完全固定可以先冻结核心语法外围逐步收敛。可以先固定的部分已经稳定核心关键字集定义、如果、那么、否则、函数、返回、对于、从、到、跳出、继续 等变量定义语法定义 x 就是 .../赋值 x 为 ...函数定义语法函数 名(参数) { ... }和定义 名 就是函 参数...两种风格条件/循环语法如果 ... 那么 { ... }/对于 ... 从 ... 到 ... { ... }还需要斟酌的部分运算符命名单字加、减、乘、除还是双字相加、相减单字更简洁符合数学直觉双字更无歧义符合设计规范函数调用风格要不要统一成一种现在支持三种灵活性高但学习者困惑代码块风格大括号还是缩进缩进更中文大括号更传统逗号的作用前缀逗号打印, x是特色但也有争议我的建议路径先定一个官方推荐风格比如 C 风格 中文关键字作为文档和示例的标准其他风格作为兼容模式不推荐但继续支持用 2-3 个月的时间写足够多的示例代码比如 50 个验证语法的表达力和舒适度根据实际使用体验再微调然后正式冻结 v1.0 语法你觉得这个思路怎么样还是说你有更明确的方向想要现在就定下来非常赞同你的思路现在有哪些官方推荐风格呢列举出来咱们一起讨论下。好问题让我先系统梳理一下当前实际支持的语法风格然后咱们讨论哪个作为官方推荐。让我先看看现有的各种示例文件确认实际支持的风格toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\hello.mingdaotoolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\debug-demo.mingdao让我再看看几种不同风格的示例toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\turing-mingdao.rkt让我再看看飞机射击游戏的示例了解更复杂的代码风格toolName: view_filesstatus: successfilePath: G:\dumategithub\langbyracket\mingdao\examples\plane-shooter.mingdao好让我系统梳理一下当前实际存在的几种语法风格咱们一起讨论选哪个作为官方推荐。候选风格 1Lisp 前缀风格当前最主流特点函数名在前逗号分隔参数缩进分块定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 圆周率 乘 半径 乘 半径 打印, 结果是 计算面积, 5, 打印代表文件[advanced-algorithms.mingdao](file:///G:/dumategithub/langbyracket/mingdao/examples/advanced-algorithms.mingdao)、[plane-shooter.mingdao](file:///G:/dumategithub/langbyracket/mingdao/examples/plane-shooter.mingdao)优点缺点实现最简单最稳定前缀表达式不符合数学直觉a 乘 b还行但复杂表达式就绕了宏系统天然支持代码即数据初学者需要适应动词在前无空格分词最容易做逗号太多看起来有点乱候选风格 2C 风格最贴近传统编程特点大括号分块函数名(参数)中缀运算符函数 计算面积(半径) { 定义 圆周率 3.14159 返回 圆周率 * 半径 * 半径 } 打印(结果是) 打印(计算面积(5))代表文件之前的 hanoi-c-style.mingdao优点缺点学习成本最低有编程基础的人上手就会大括号 中文感觉有点混搭中缀表达式符合数学习惯关键字函数、如果和 C 语法混在一起风格不统一嵌套调用直观f(g(x))无空格分词难度大括号和运算符会干扰候选风格 3SVO 主谓宾风格设计文档里的言律风格特点主谓宾结构管道式调用缩进分块双字运算符定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 半径 相乘 半径 相乘 圆周率 结果是 然后 打印 5 然后 计算面积 然后 打印代表文件[中文编程语言设计规范.md](file:///G:/dumategithub/langbyracket/docs/中文编程语言设计规范.md) 里的设计优点缺点最符合中文表达习惯读起来像说话管道式调用嵌套深了反而不直观双字关键字无歧义双字运算符相乘、相加写起来有点啰嗦代码即数据宏系统天然支持当前实现还不完整很多语法需要补候选风格 4混合实用风格当前实际状态特点什么好用用什么多种风格混合变量定义用 SVO定义 x 就是 5函数调用看心情简单的用前缀打印, hello嵌套多的用 C 风格f(g(x))运算符用单字中缀a 加 b 乘 c代码块用缩进优点缺点灵活怎么顺手怎么写没有统一标准不同人写出来的代码风格差异大现有代码都能跑学习者困惑“我到底该学哪种写法”迁移成本低不利于生态建设库和示例风格不统一我的初步想法我个人比较倾向于**“以 SVO 风格为骨架吸收 C 风格的优点”**的路线变量/函数定义保留定义 x 就是 .../定义 f 就是函 ...很有中文特色也好懂函数调用主推 C 风格f(x, y)但也支持前缀f, x, y和管道x 然后 f运算符用单字中缀加 减 乘 除同时支持 - * /符号毕竟数学直觉太强了代码块缩进为主大括号也支持单行代码块方便你觉得哪种方向比较对味或者你有其他想法山东倒装特色哈哈这个问题有意思山东倒装句梗用在编程语言设计上其实戳中了中文编程的核心问题我们到底要在多大程度上贴合自然语言让我认真聊聊这个话题。先说结论倒装可以有但不能真倒装自然语言的倒装是灵活的、随意的“吃了吗你”“干啥呢这是”但编程语言必须有确定的语法规则。不过倒装思维确实可以转化为编程语言的特色——而且咱们明道其实已经有了中文里的倒装编程里叫管道你看这几句山东话倒装编程里的对应“饭吃了吗你”饭 然后 吃了吗 然后 你管道调用“作业写完了都”作业 然后 写完了 然后 都“喝杯水先”水 然后 喝一杯 先发现没宾语前置的倒装本质上就是管道式调用先讲话题宾语再讲对它做什么操作。我提议的中文特色语法设计既然要做中文编程语言不如把中文的语言特点真正融进去而不只是把关键字翻译成中文。给你设计几套1. 主题优先最有中文特色中文是主题优先的语言不是主语优先。比如今天天气不错——今天是主题不是主语。对应到编程里可以支持# 先讲主题再讲操作 就 列表 1,2,3 来说 打印 长度 打印 求和 打印 排序这比先创建变量再操作更符合中文思维。2. 把字句语法糖中文的把字句其实就是强调宾语普通“我吃完了饭”把字句“我把饭吃完了”强调饭对应到编程里# 普通写法 赋值 列表 为 追加, 列表, 元素 # 把字句写法 把 列表 追加 元素是不是很顺而且语义明确没有歧义。3. 被字句语法糖和把字句相对强调被动# 普通写法 定义 结果 就是 排序, 数据 # 被字句写法 定义 结果 就是 数据 被 排序这其实就是管道调用的另一种说法。4. 连动式动词连用中文可以连续用几个动词“他走过去开门”对应到编程里就是方法链# 连动式 数据 过滤 排序 打印 # 等价于 打印(排序(过滤(数据)))这个咱们现在其实已经有雏形了就是然后管道。回到倒装的问题你说山东人加一点倒装句我觉得可以从这几个角度落地✅ 可以有的倒装有明确语法规则宾语前置 管道调用# 正装 打印(数据) # 倒装管道 数据 然后 打印 数据 | 打印主题前置 with 语句就 用户对象 来说 打印 姓名 打印 年龄把字句 强调操作对象把 列表 追加 元素❌ 不能有的倒装会产生歧义随意倒装吃了吗你→ 哪个是函数哪个是参数省略成分今天吃了→ 谁吃了吃了什么语序完全自由那解析器复杂度会爆炸具体到明道的官方语法我建议这么定核心风格SVO 主谓宾 管道倒装基础写法正装谓宾结构定义 计算面积 就是函 半径 定义 圆周率 就是 3.14159 返回 半径 乘 半径 乘 圆周率 打印(结果) 打印(计算面积(5))增强写法倒装管道风格5 然后 计算面积 然后 拼接 结果, _ 然后 打印特色写法把字句把 列表 追加 元素 把 字典 设置 键, 值为什么这么设计正装保底C 风格 中文关键字有编程基础的人一上来就能写倒装增强管道式调用符合中文先讲话题再讲操作的思维特色点缀把字句、主题句这些作为语法糖不用也行用了更顺你觉得这个方向怎么样要不要我基于这个思路写一份更详细的明道语法 v1.0 建议稿出来写一份更详细的明道语法 v1.0 建议稿出来写出来了你看根据 明道语法v1.0建议稿.md 能否进行语法的修改和固化 条件成熟了吗一句话总结建议稿的设计意图与实际实现之间存在多处关键字命名和语法风格差异且实际实现已远超建议稿范围。直接固化条件尚不成熟。建议采用**别名兼容策略**——保留现有语法不变同时增加建议稿中的关键字作为别名让多种写法共存在实际使用中验证后再正式固化。如果你同意这个方案我可以开始动手实现第一步和第二步增加关键字别名这是低风险、不破坏现有代码的改动。开始动手实现第一步和第二步增加关键字别名