【安装:pip install ulang
,用法与例程请见 PyPI。源码位于开源中国。 注意:必需 python 3.7,源码文件需 UTF-8 编码】
2022年小结
去年,七月发布 0.0.22 版之后项目静默了一段时间。今年一月末开始 悬赏任务又开始大步推进。重现功能量较大,因此发布大版本。
感激所有参与者的合作、耐心和探究精神!
此版本重现功能
按各悬赏任务的完成先后顺序逐个介绍。
更多增量运算
早先完成了 += -=,现已完成余下的 *= ^= |= &= /= %= 等:
> a = 10 > a %= 4 > a 2
木兰源码转换为 Python
现在 --dump-python 命令行选项可以将木兰源码转换为 Python 源码:
> 木兰 --dump-python 测试\算法\排序\冒泡.ul import sys from math import * ARGV = sys.argv[1:] def 冒泡(数列): 换过 = True while 换过: 换过 = False for i in range(0, len(数列) - 2 + 1): 前项 = 数列[i] 后项 = 数列[i + 1] if (前项 > 后项): (数列[i], 数列[i + 1]) = (后项, 前项) 换过 = True 打乱数列 = [5, 2, 1, 8, 4] 冒泡(打乱数列) print(打乱数列)
匿名函数支持多参数与无参数
> 体积 = (长:int, 宽:int, 高:int) -> 长*宽*高 print(体积(2, 3, 4)) 24 > a = () -> 3 print(a()) 3
期间发现第一个形参 不支持默认值,不解原因。
函数支持若干形参(点点点)
包括普通函数
>func 哈(...) {{ __varargs__ = tuple('ha', 'ha') print(...) } 哈(2, 3, 3, 3) hah
和匿名函数
>b = (...) -> max(...)) print(b(3, 1, 2)) 3
以下是十月末之后完成的。
.. 作为模块路径
详见此 pr
using * in .. func talk() { module_py.talk('..') }
更多超类语法,但运行报错,不明用意
见最后两行示例。运行有报错,与原始木兰行为相同,因而仅添加了语法树测试。详见 此pr。
type Person : list { func $Person { super.__init__() } } p = Person() v = p.super Person.super(None)
在类型内定义类型
type Animal { type Child { func $Child(name) { $name = name } } func getChildName() { c = Animal.Child('Animal.Child').name return c } } p = Animal() print(p.getChildName())
十六进制数字
> n = 12 + 0x1F + 0X1a + 0xab + 0XCD print(n) 445
但格式有误时报错比较费解:
> print(0xg) 请先定义‘xg’再使用,见第1行<br/>
应该是木兰支持 乘法省略乘号 的副作用。
(语义待确定)复杂类型注解
详见 此pr,语法上支持嵌套的类型注解,但不知用意和建议用法为何。
> 木兰 --dump-python 测试\算法\排序\冒泡.ul import sys from math import * ARGV = sys.argv[1:] def 冒泡(数列): 换过 = True while 换过: 换过 = False for i in range(0, len(数列) - 2 + 1): 前项 = 数列[i] 后项 = 数列[i + 1] if (前项 > 后项): (数列[i], 数列[i + 1]) = (后项, 前项) 换过 = True 打乱数列 = [5, 2, 1, 8, 4] 冒泡(打乱数列) print(打乱数列)
0
补全 try ... catch ... finally
> 木兰 --dump-python 测试\算法\排序\冒泡.ul import sys from math import * ARGV = sys.argv[1:] def 冒泡(数列): 换过 = True while 换过: 换过 = False for i in range(0, len(数列) - 2 + 1): 前项 = 数列[i] 后项 = 数列[i + 1] if (前项 > 后项): (数列[i], 数列[i + 1]) = (后项, 前项) 换过 = True 打乱数列 = [5, 2, 1, 8, 4] 冒泡(打乱数列) print(打乱数列)
1
重载余下所有操作符,包括二元、一元等
包括下例的 26 个操作符,详见 此文档。
> 木兰 --dump-python 测试\算法\排序\冒泡.ul import sys from math import * ARGV = sys.argv[1:] def 冒泡(数列): 换过 = True while 换过: 换过 = False for i in range(0, len(数列) - 2 + 1): 前项 = 数列[i] 后项 = 数列[i + 1] if (前项 > 后项): (数列[i], 数列[i + 1]) = (后项, 前项) 换过 = True 打乱数列 = [5, 2, 1, 8, 4] 冒泡(打乱数列) print(打乱数列)
2
其他维护
- 测试.unittest.原始可执行文件 报错问题,期间研究了编解码问题。
- 添加github workflow与对应徽章
- 两周来的一系列代码和文档规整和清理
还没有评论,来说两句吧...