剛剛!國產編程語言"木蘭"負責人道歉!承認基於Python二次開發

2020年1月15日,中國科學院計算技術研究所(以下簡稱中科院計算所)計算機體系結構國家重點實驗室,由該實驗室編譯組主導研發的國產編程語言“木蘭(Mulan)”正式發佈。

剛剛!國產編程語言

此消息一經發出,引發不少開發者質疑。對於完全自主設計的“國產編程語言”,大家的期待都非常大,網友@沉迷單車的追風少年 就在第一時間前往官網下載。

剛剛!國產編程語言

下載完成後卻發現圖標有點不太對勁。納尼?和python幾乎一毛一樣

剛剛!國產編程語言

這不明顯是pyinstall打包的嗎?該網友吐槽到:我發佈pyqt的軟件都知道換個圖標,這麼大的項目連圖標都不換?

打開之後就是類似python一樣的對話框

剛剛!國產編程語言

提供了這麼多函數,和python幾乎一毛一樣啊

試一下反向破譯一下,以為會加密,畢竟是一個商用軟件,我們自己寫pyqt有時候都加密

但是,結果一點加密都沒有,直接破解了:

剛剛!國產編程語言

就是python寫的啊。

同樣在在知乎上也有很多開發者對此進行討論。

很多開發者發現解包後的木蘭語言其實就是建立在 Python 之上,將 Python 構建的環境、包和項目都編譯成一個可執行文件。所以似乎木蘭只是在頂層做了一個接口,將底層編譯、優化等眾多工作都交給了原版 Python?

如下所示為 EXE 文件的解包結果(採用 PyInstaller Extractor):

剛剛!國產編程語言

從解包結果可知,「木蘭」語言是通過 Pyinstaller 將 Python 文件打包成 EXE 可執行文件。

根目錄下有個driver,添加pyc文件頭即可用uncompyle6來反編譯:

剛剛!國產編程語言

只有兩行,調用了runtime.main裡的main函數。

這個文件被放在了pyz_extracted裡

剛剛!國產編程語言

main裡本身實現了不少東西

剛剛!國產編程語言

但你這個執行是不是有點……?

剛剛!國產編程語言

直接調exec,唯一的區別就是加了一個globals。

命令行版本里的repl裡是做了一些處理的……雖然也沒發現有什麼改進的特性。

關於關鍵詞看到不少同學都是試出來的func2333,這裡有一個list:

剛剛!國產編程語言

不忍看下去了。。。

所以它到底跟python有多大區別嘞(⊙o⊙)?

還有說好的面向智能物聯應用呢?這通篇也沒瞅著哪裡跟智能物聯有半毛錢關係啊,你好歹封個藍牙或者zigbee的模塊進去嘛233

網友@龍文,直接表示就是Python3.7.4換了皮膚。

作為對比,截了幾張圖,上面是木蘭,下面是Python3.7.2。

以sys庫為例

木蘭導入包的方式為:

sys = __import__('sys')

Python導入包的方式為:

sys = import sys

報錯信息木蘭:

剛剛!國產編程語言

版本信息格式也是一樣,從左邊可以看出木蘭是基於Python3.7.4換皮膚的:

剛剛!國產編程語言

當然,你可以死皮賴臉地說是參考了Python。

但是。。。。重點來了,copyright居然有Python字樣,哈哈哈哈,這太尷尬了,這下沒法抵賴了吧:

剛剛!國產編程語言

Python的如下:

剛剛!國產編程語言

還有一個sys.prefix屬性引起了我的注意,我倒要看看這個C:\\Users\\huawei\\AppData\\Local\\Temp\\_MEI143282路徑下有什麼東西,

打開一看尼瑪我傻眼了都,全是Python的文件,結果不言而喻:

剛剛!國產編程語言

其實之前我們比較熟悉的文言編程語言,它就非常明確只關注語法和前端,把所有底層操作都留給了 Java 或 Python。雙兔傍地走,安能辨我是Python。

一位開發者從以下三個角度評價了木蘭語言:

剛剛!國產編程語言

把 Python 環境打包到一個可運行的文件,那麼這可能是沒問題的。但將其號稱為擁有自主產權的編程語言就太言過其實了。對此,你怎麼看呢?

最新情況:1.18晚上,研發木蘭編程語言的團隊負責人劉雷(已打碼),做出回應。

本人系中科院計算所編譯實驗室員工。基於我在編譯技術上的科研積累創辦了中科智芯(北京)科技有限公司,該公司圍繞青少年編程教育,設計開發編程語言、編譯器和集成開發環境等產品。為了更好地在中小學中普及計算思維,本人帶領團隊開發了一種稱為“木蘭“的編程語言。它包含三個組成部分:一、在語言規範上借鑑了 Lua 語言的特性並進行了擴展,增加數據表達方法等新的特性;二、開發了支持少兒編程教育的可視化編程環境;三、針對 8 位 AVR 單片機,實現了相應的編譯器和運行時系統,開發了能模擬多任務執行的虛擬機。以上產品已經在數百所中小學中,開展了 10 萬人次的編程科普活動。針對 STM32 單片機,我們是基於 Python 開源編譯器進行的二次開發,也就是先將木蘭語言的源程序轉換為 Python 的中間表示(AST),再在Python虛擬機上運行。這就是在開發和運行環境中會包含 Python 系統的原因。在 1 月 15 日接受媒體採訪時,本人在對木蘭編程語言的介紹中,犯了以下錯誤:1. 木蘭編程語言主要是用於中小學教育,在介紹中將它擴大到智能物聯領域。2. 木蘭語言在 8 位單片機上的編譯器是本團隊開發的,在 32 位單片機上的編譯器是基於 Python 開源編譯器進行的二次開發,但在接受採訪中將木蘭編程語言和編譯器誇大為完全自主開發。對於此次在網絡上造成的不良影響,本人鄭重道歉,對給中科院、中科院計算所帶來的不良後果表示誠摯的歉意。本人感謝大家的監督與批評,並深刻反省,保證不再出現類似問題。

劉雷2020年1月18日

剛剛!國產編程語言

網友評論

剛剛!國產編程語言

剛剛!國產編程語言


分享到:


相關文章: