木兰语言 0.1.0 展示今年悬赏任务成果


【安装:pip install ulang,用法与例程请见 PyPI。源码位于开源PHP。 注意:必需 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,语法上支持嵌套的类型注解,但不知用意和建议用法为何。

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与对应徽章
  • 两周来的一系列代码和文档规整和清理

相關推薦

2024-01-31

Markdown 格式,并取得了非常好的进展。我们希望 Markdown 语言的易用性,能让更多的贡献者参与其中。这样,我们的文档就能保持统一的格式和风格,让项目页面显得更加整齐一致。实际上,我们的库已经实现了这一点,核心框

2024-10-09

14场分论坛,涵盖操作系统内核&视窗、编译器与编程语言、开发框架、硬件生态、应用开发、操作系统安全、原生智能、教育及人才培养等多个领域。这些分论坛将通过不同的技术专题讨论,深度挖掘当前操作系统技术难题

2024-08-14

bug修复版本,我想没必要发个新版本,但是Hutool使用的《木兰宽松许可证, 第2版》真的让然失望透顶,特意发新版本不吐不快! 事情起因是偶尔点开看了下协议中的内容链接: http://license.coscl.org.cn/MulanPSL2 这个地址是可访问的

2024-10-10

为LAS的常客,openKylin已连续5年参与这一全球盛会,不断展示在Linux生态创新中的前沿成果。今年,LAS采用线上线下结合的方式举行,openKylin团队通过线上方式参与,并在大会上进行了精彩的演讲,展示了创新的Kylin Mobile Runtime Env

2023-12-19

管理员权限的用户都可以查看; 2、新增:工作日志列表展示关联的任务和项目; 3、新增:任务列表展示关联的项目; 4、新增:工作记录删除功能,只有超级管理员权限才能删除,其他人不准删除; 5、优化:任务删除功能,

2023-11-16

发者来使用 Rust 重写前端代码格式化工具 Prettier,并悬赏 1 万美元。 使用 Rust 实现更快、更美观的 printers 引起了广泛关注。但主要问题在于,它们都无法与 prettier 的长尾格式化逻辑相匹配。 如果用 Rust 编写的项目能通

2023-05-25

统上运行,包括 Linux、Windows、macOS 等。它还提供了多种语言的绑定,如 Python、Ruby、Perl 等,使得开发人员可以方便地在自己喜欢的编程语言中使用它。 也正是因为使用了 libarchive 提供的开源解决方案,Windows 11 还将支持 tar、gz

2024-08-28

峰会为第四届中国峰会,采用“主会议+技术研讨会+展览展示+同期活动”的形式举行,openKylin社区咨询委员会委员韩乃平受邀出席21日峰会主论坛。   01主题演讲 8月22日,openKylin社区技术委员会委员王文竹受邀出席由算能

2024-10-21

一事,但传闻存在夸张和虚构的部分,该事件实际发生在今年6月底,田某某是在商业化技术团队实习,因为对团队资源分配不满,使用攻击代码破坏团队的模型训练任务,千万美元损失的数字也有所夸大。 另外,该人士称,受

2023-09-13

中提出了一个“支持 WASIX”的 issue;并提供了 5000 美元的悬赏。他表示,Zig 支持 WASIX 对 Wasm 和 Zig 社区来说均意义重大。 根据介绍,WASIX 是对现有 WASI ABI 的长期稳定和支持,加上额外的非侵入式系统调用扩展,以弥补缺失的

2024-07-08

谷歌宣布推出 kvmCTF,一项针对基于内核的虚拟机 (KVM) 管理程序的漏洞奖励计划 (VRP),于 2023 年10 月首次发布。 KVM 是一款强大的虚拟机管理程序,拥有超过 15 年的开源开发历史,广泛应用于消费者和企业领域,包括 Android 和 Go

2023-01-04

p;将 Apache 2.0 开源协议修改为 MulanPSL-2.0 (木兰宽松许可证) 2021 年 07 月 27 日,Furion 正式支持全平台、.NET 全平台项目开发。 2021 年 08 月 11 日,Furion 加入 木兰开源社区 重点孵化。 2021 年 08

2024-09-30

展区,openKylin社区精心策划了多场精彩纷呈的演讲互动与展示活动。《openKylin 2.0 版本和功能介绍(含AI、RISC-V)》让参会者近距离感受了openKylin在人工智能与RISC-V架构领域的最新成果;《openKylin社区生态建设》则全方位展示了

2023-09-13

多元共进|2023 Google 开发者大会精彩演讲回顾 小米安全中心宣布推出 2023 小米手机守护计划,本次守护计划奖金池总额 100 万元人民币,活动时间为 9 月 5 日-10 月 6 日。 本次测试机型为小米 13系列,守护计划需自行购买设备