首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深扒国产编程语言“木兰”

全文 2800+ 字,阅读预计耗时 7 分钟

最近有一款国产编程语言「木兰」进入了大众的视野,和之前的「文言」不同,「木兰」并非是一款仅凭个人兴趣对现有高级语言进行包装形成的全新编程语言,它来自于中科院计算所下属单位,完全可以看作是一个国家意志驱动下的产物。

对于这样一门国产的、号称是「完全自主」的编程语言,网友们的热情可以说是相当高涨,这个语言一放出,很多身为程序员的网友是第一时间下载了该编程语言的环境,像写个 Hello World 来测试测试,看看这个语言到底是什么样子。

各种各样的拼音命名,纯粹的 HTML 文件,甚至链接里还带有「.html」的后缀,在 2020 年,除了各种各样的学生作业,这样的站点真的是比较难见的了。或许是他们把经费都烧在了研发上,以至于这个网站只能草草做一做。

很奇妙的是,虽然这个网站在开发上非常简陋,但至少这个网站看起来还像是那么回事,有点现代网站的样子,至少整个站点的风格看起来还算过得去。

不过这也只是看起来不错罢了,随便在这个站点上点一点,就能看到一些非常明显且让人无语的问题,如果这个网站不是随便搭出来的,笔者真的想不出来它怎么能够通过验收就这么挂出来。

(合作机构 -> 学校)

就这个站点来说,它很难让我信服我下载到的这个「ulang」,也就是「木兰」编程语言是一个真正能跑起来的东西。

所幸,我们还有迅雷,这个环境最终还是顺利下载下来了。

啧,这图标咋这般眼熟呢?看到它的第一眼,笔者就感受到一股浓烈的熟悉感。

行外人可能对这个图标不怎么敏感,但行内人基本上不可能没见过这个图标,是的,它是 PyInstaller 把 Python 程序打包为 exe 之后给程序加上的一个默认图标。

也就是说,这个所谓的「木兰」实际上根本就不是一个完全自主的编程语言,它只是一个基于 Python 封装出来的东西罢了,它虽然不能说是一个一点技术含量都没有的东西,但它距离一个完整的、完全自主的编程语言是差了十万八千里的,与其对外的宣传完全不符,是挂羊头卖狗肉。

当然,也有可能只是这个作者只是喜欢这个图标,所以把它用到了这个「木兰」上,这也是有可能的。反正程序已经下到手了,是不是又一骗人的货,打开它运行一下就能知道。

打开之后是一个 REPL,翻译成中文是「交互式解释器」,你可以直接在这个窗口中输入代码,然后实时地运行它。很巧合的是,Python 是一个解释性语言,而「木兰」也是一个解释性语言。

由于官方没有提供可用的开发文档,也没有可以参考的例程,想要用它来写个程序还比较困难,打开之后根本无从下手。

虽然 REPL 内提供了一个「help」,但是这个「help」也并不起到太多的作用,只提供了一个可用的方法「globals」去列出这个语言所支持的一些东西。

笔者粗略地看了看,这个「木兰」所实现的东西很少,可用的方法不多,不像其他编程语言一样有非常丰富的方法可用,而且 globals 也只是列出了内建的这些东西,对于要怎么用它来写程序,语法是怎么样的,程序没有给出任何的提示。

既然已经公开放出来了,至少资料总还是要给一份的吧,要不然程序员们也不能凭空气写代码,那就真的玄学了。

好在经过一番摸索还是找出了它一个大致的语法格式,「木兰」的语法和 Python 有比较大的区别,我们都知道 Python 语法的一大经典是「缩进」,而「木兰」则并没有采用类似 Python 的严格缩进规则,在木兰里函数是以大括号的形式定义的,你可以把程序写在一行里,没有任何问题。

(定义函数 aa,输出 123)

这个语法给笔者的感觉是有点像在写 JavaScript,除了 function 改成了 func 以外,这个 REPL 的体验和 Chrome 的控制台是比较类似的,只是在函数和操作符上,「木兰」和 Python 非常相似。

可是,只是单纯的语法不同可不能洗清它的嫌疑,毕竟之前我们有看过「文言」,只要你能写一个 Parser,你就能够对已有的某个语言进行包装,打造出一个新的编程语言。

只是语法不同,并不能证明它是一门全新的、完全自主的国产编程语言。当笔者测试它内建的这些东西时,笔者找到一个非常确凿的证据,来证明它就是基于 Python 包装出来的东西 —— install。

看到 pip,我想已经不用再多说什么了,但凡是用过 Python 的朋友不会不认识 pip。「木兰」就是基于 Python 对它进行了语法上的修改,做了一层包装。

有的朋友看到这里可能还不能完全相信,不要紧,我们还有一个利器 —— 火绒剑。笔者真的非常喜欢这款工具,这也是为什么笔者在之前的文章中向各位推荐火绒的一大原因,它的用途真的是太广泛、太丰富了。

在 Windows 下,像「木兰」这样的程序,如果它用到了 Python 之类的东西,以一个正常的 Python 来看,它在运行过程中必然会加载带有「python」字样的 dll,而这样的动态链接库引用关系是逃不过火绒剑的,我们一眼就能看出来。

果然,python37.dll 就这么摆在这里,这是 Python 3.7 的核心文件。除了它以外你还可以看到不少 .pyd,其作用主要是为「木兰」的一些方法提供支持。

实际上我们在「木兰」里执行的那些东西最终都调用的是 Python,根本谈不上任何的「完全自主」,「木兰」只是一个对 Python 做的包装而已。

包装这个东西,它可以是一个有技术含量的东西,也可以是一个没有技术含量的东西。对语言做包装这件事情本身并没有问题,在业内这甚至是非常常见的事情,比如微软推出的 TypeScript,实际上它就是微软在 JavaScript 上包了一层自己的东西,使其能够做到编译时类型检查等。

好的包装只要它方便、实用,那么它一样可以火起来,一样可以得到大家的认可,东西好用,宣传上的夸大我们可以当看不见。

但「木兰」这个东西,它基本上也没什么使用价值,为什么这么说呢?因为它只是对 Python 的语法规则做了修改而已,只是根据自己设计的语法写了一个 Parser 去对应 Python 的 AST(抽象语法树),除此之外,「木兰」没有做其他任何有意义的东西了。

相关的反编译源码可在此处找到:

https://github.com/konjac/ulang-source-decompiled

看到这篇文章你可能也想下载这个「木兰」来看看,笔者认为没有必要,浪费时间,不如去做点其他有意义的事情。

官方目前已经针对这个事情发表了道歉,这个事情在网上是闹得沸沸扬扬,到现在也算是告一段落了。有网友曾戏称,「同行 12 年,不知木兰是 Python」

看到这个木兰,它让我不禁想起了之前一款也号称是「完全自主」的骗经费项目 —— 红星浏览器,和这一次的「木兰」一样,它也是一个改名套壳的产物,不过它套的是 Chromium,而这一次「木兰」套的是 Python。

不知道为什么这种事情总是会再次出现,历史上这样的事情也不止这两件,而且很奇怪的是,这个「木兰」的作者难道就没想过他们把它放出来之后会被立刻识破吗?毕竟在文章中我们也看到了,它存在那么多的漏洞,实现的东西也很有限,为什么「木兰」的作者有这个胆量把它放出来呢?在笔者看来,这可不是无知。

做技术没有捷径,只有脚踏实地向前慢慢探索,希望下次看到这样的研发产物时,它会是一个像 Vue 那样对整个行业的发展有很大意义的东西吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200119A0QTOQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券