木兰语言 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

以下是十月末之后完成的。

.. 作为模块路径

详见此 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)  // 输出“你好啊”

其他维护

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/222034

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。