木兰语言 0.1.0 展示今年悬赏任务成果
【安装: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
以下是十月末之后完成的。
.. 作为模块路径
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,语法上支持嵌套的类型注解,但不知用意和建议用法为何。
func hello(a : tuple [ int ]) : int [ float, list [ str ], dict ] {
print(a)
}
a : list [ int ] = 2
补全 try ... catch ... finally
try f=open('__init__.py', 'r') {
print(len(f.read()))
print([][int('0')])
} catch e : ValueError {
print('v')
} catch e : IndexError {
print('i')
} finally {
print('f')
}
重载余下所有操作符,包括二元、一元等
包括下例的 26 个操作符,详见 此文档。
type P : str {
operator + (a) {
return str(self) + str(a) + '啊'
}
{}
}
a = P("你")
b = P("好")
print(a+b) // 输出“你好啊”
其他维护
- 测试.unittest.原始可执行文件 报错问题,期间研究了编解码问题。
- 添加github workflow与对应徽章
- 两周来的一系列代码和文档规整和清理

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
简云 Saas ERP 平台 1.5.5 版本发布
V 1.5.5 ERP 版本新增更新 内容 1. 新增SKU模块 2. 订单,采购订单优化 3. 增加报表(销售利润分析) 4. 订单h自动生成MRP 5. 其它 bug 修复
-
下一篇
NGINX Unit 1.29.0 发布
Nginx Unit 是一个动态应用服务器,能够与 Nginx Plus 和 Nginx 开源版并行或独立运行。Nginx Unit 支持 RESTful JSON API,可以在不中断服务的情况下更改配置,并可运行基于多种语言和架构的应用。Nginx Unit 生来就是为满足分布式应用的需求而设计的,可为您的服务网格奠定坚实的基础。 Nginx Unit 1.29.0 正式发布,更新内容如下: NGINX JavaScript 集成 NGINX JavaScript(njs)是一个服务器端的 JavaScript 运行时,为超快的初始化进行了优化。njs 最初是为扩展 NGINX 而设计的,它的架构适合于集成,现在它也扩展了 Unit! 这个版本带来了 NGINX JavaScript 引擎与 Unit 的初步整合。未来的版本将扩展这些功能,以实现更复杂的使用。在 Unit 1.29.0 中,JavaScript 模板字符串可以在配置字符串中使用,以执行 JavaScript 表达式。 配置工具 这个版本引入了两个新的命令行工具来简化 Unit 的安装和配置。 setup-unit ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果