木兰编程语言 0.0.14.7:功能覆盖初版用户手册; Gitee Go 流水线尝鲜

2020-11-02 11:17:59 +08:00
 xuanwu

知乎原文:木兰编程语言 0.0.14.7:功能覆盖初版用户手册; Gitee Go 流水线尝鲜

木兰编程语言 在 2020 年度 OSC 中国开源项目评选 中已获得 26 票,请投票支持!

年初对原始木兰可执行文件 ulang-0.2.2.exe 作了些功能上的摸索尝试,将基本功能写在初版用户手册。开展重现项目之后,一直没重走一遍手册中的例程。上周终于完成了这个综合各部分功能的”小测验“,大部分例程在上一版本就能正确运行,余下的小部分在这个版本中也通过了。

[安装:pip install ulang,用法与例程请见 PyPI。源码位于开源中国注意:必需 python 3.7,源码文件需 UTF-8 编码]

此版本重现功能

字符串转义

比较特别的是反斜杠(木兰交互环境下效果):

> 'c\\\'+'name'
c\name

在 Python 中反斜杠如果未配对,会报语法错误:

>>> print('\')
  File "<stdin>", line 1
    print('\')
             ^
SyntaxError: EOL while scanning string literal
>>> print('\\\')
  File "<stdin>", line 1
    print('\\\')
               ^
SyntaxError: EOL while scanning string literal

配对后 Python 的效果:

>>> print('\\')
\
>>> print('\\\\')
\\

比照木兰中反斜杠转义效果:

> println('\')

> println('\\')

> println('\\\')
\
> println('\\\\')
\
> println('\\\\\')
\\
> println('\\\\\\')
\\

实现细节可见源码,个人感觉初用有些别扭,这种使用场景应该不多。

另外引号与换行转义无需多言:

> 'doesn\'t'
doesn't
> "\"吃了么?\""
"吃了么?"
> '第一行\n 第二行'
第一行
第二行

函数参数指定类型

> type Person {
>>   func $Person(name) {
>>     $name = name
>>   }
>> }
> func hello(p : Person) {
>> println("hi " + p.name)
>> }
> hello(Person("木兰"))
hi 木兰

当前路径下 Python 模块导入

比如当前路径下有 larger.py

def larger(a, b):
    if a > b:
        print(a)
    else:
        print(b)

木兰交互环境下:

> using larger
> larger.larger(5,6)
6

内置 enumerate 函数

可以更方便地定义枚举了:

> for i, v in enumerate(['小', '中', '大']) { println(i, v) }
0 小
1 中
2 大

求余运算

> 11%3
2

其他

Gitee Go 流水线

惊喜发现 Gitee Go 开通后获赠了 1000 分钟构建时间,而且非常幸运,构建环境的 Python 版本正好支持本项目需要的 3.7 。在新手模板基础上作了一点修改,较顺利地添加了一个费时少又较关键的 unittest 测试集(确认语法树生成正确),挂件看起来不错:

[余下见知乎原文:木兰编程语言 0.0.14.7:功能覆盖初版用户手册; Gitee Go 流水线尝鲜]

861 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/720922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX