木兰重生:$ 的妙用,更多编辑器高亮

吴烜2020
 吴烜2020
发布于 2020年09月26日
收藏 0

所有相关源码在码云

这几天复现了木兰编程语言中 $ 的功能(细节见第二部分)。编辑器的“代码段”类原本(左侧)有 12 处 self,改写后(右侧)看起来就简洁了一些:

后三个函数原本形参只有一个 self,现在变为没有形参,括号也可以省了。话说这种 $ 的用法也许 PHP 开发者会有特别的感觉?另外,是否要对 $ 打头的标识符进行高亮处理呢?

之前 @水木易安 (开源中国)指出了编辑器尚未对内置函数(如 map、print)、类型(如 str、list)进行高亮,于是作了些改进。配色比较随意,望 UX 大佬指点:

匿名函数中的“->”,感觉语义和函数定义的“func”相近,于是用了同样高亮风格。

$ 的两种语义

1. $ 打头的标识符

意为属于当前个体。如开头例程中的“$词性”等价于“self.词性”。

如果是函数,第一个形参自动设为 self。如例程中的

func $开始() {...} 

等价于

func 开始(self) {...} 

2. 单指 self

与“true/false/nil“类似,可如下使用:

type 人 {
  func $起名(名字) {
    $名字 = 名字; return $
  }
}
println(人().起名("木兰").名字)

代码统计

下面是几个主要部分的代码行数统计,格式为:上次->现在。

  • 木兰代码量
    • 编辑器,包括实现与测试都是木兰代码:163 -> 184
    • 木兰测试用例:1966 -> 2001

 

  • Python 代码量(包括测试部分):2321 -> 2338
    • 分析器/语法分析器.py:913 -> 925
    • 分析器/词法分析器.py:190 -> 195
    • 未变
      • 分析器/语法树.py:178
      • 测试/运行所有.py,检验所有木兰测试代码片段:181
      • 环境.py,加载木兰模块:150
      • 交互.py,交互环境(REPL):138
      • 分析器/语法成分.py,从语法分析器中提取出来的枚举常量:78
      • 功用/反馈信息.py:49
      • 中.py,主程序:40
      • 分析器/错误.py:17
      • 测试/unittest/语法树.py,确保生成的语法树与原始版本一致:67
      • 测试/unittest/交互.py,交互环境相关测试:28
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:木兰重生:$ 的妙用,更多编辑器高亮
加载中

精彩评论

O龙猫O
O龙猫O
能够在谩骂中坚持做自己喜欢的事,非常了不起。虽然我还不能明白你的应用场景,但是能够独立去搞一个语言就很了不起。单单是语法分析,没有硬实力就是搞不定的,喷子由他们去吧
码农小胖哥
码农小胖哥
这么玻璃心? 中英文混合编程啊 写个代码还要中英文切换 某种意义上 语言也算一款产品 如果你是为了炫技 我认为你很厉害 如果你是打造一款产品 不好意思 这款产品很垃圾
简单代码
简单代码
不愿意看到不同的声音,所以这个也就是你一个人的玩具而已。
码农小胖哥
码农小胖哥
要搞中文编程就用¥ 用$ 什么意思
d
dwcz
你这种说法太无礼了、太文人化了。现有书写方式,即使全是中文,也不会顺眼的,你不懂的依旧不懂。只会想当然的提出要求,而不去自己实践,盲目坚持自己的观点。

最新评论(61

d
dwcz
回复 @吴烜2020 :是的。
吴烜2020
吴烜2020
回复 @dwcz : 意思是 PHP 里$就是简单标志吗?
话说刚刚发现木兰里也可以在全局变量用$前缀, 这样就像 php 一样支持用关键词命名变量, 比如: $while = 3
d
dwcz
回复 @吴烜2020 : 这个,你可能搞错了。就例子看,这两个语言对$用法是完全不同的。一个是带语意的,一个就是简单标志。
吴烜2020
吴烜2020
同意全盘考虑。不过本项目是在原样复原木兰的语法,并无意掺杂个人的修改。相信原设计者是有他们的综合考虑,可惜现在只能凭个人揣测。水平有限,肯定无法参透原设计者的全部意图。
现在在把这个 $ 和 PHP 中的语义作一个更详细的对比,希望有更多感悟。
d
dwcz
回复 @开源中国首席看批官 : 你这媚的无语,你吃饭的语言是一个老外做的?一个老外做的也不能让你吃饭啊。这双标的也太无脑了,吃白食吃的。。
开源中国首席看批官
开源中国首席看批官
回复 @dwcz : 是啊,但是他的语言能让我们吃饭,这个行吗,
d
dwcz
回复 @开源中国首席看批官 : 这有点媚洋了。语言这东西老外做就不是博人眼球了!个个都是毫无问题?
临风笑笑
临风笑笑
汉话都是违规词
简单代码
简单代码
萝卜白菜罢了
简单代码
简单代码
不愿意看到不同的声音,所以这个也就是你一个人的玩具而已。
返回顶部
顶部