木蘭，名稱來自模組單元語言的縮寫，是一種教學用程式語言，其語法規範來自 Lua，編譯與執行環境使用 Python 實現。由中國科學院計算技術研究所入股的中科智芯公司於 2020 年 1 月 15 日發表，團隊領導人為中科院副研究員劉雷。這套程式語言是中科智芯公司的重點產品，主要應用於中華人民共和國境內的中小學及幼兒園，作教育使用。 發表之初，研發團隊曾稱這個程式語言可使用於人工智慧與物聯網，完全自主研發，編譯器與整合開發環境套件也完全由團隊開發。在發表後，被質疑是以 Python 37 套件套殼產生。開發者劉雷承認是基於 Python 做二次開發，完全自主研發以及針對人工智慧及物聯網應用開發等說法為過度誇大。至 2020 年 1 月 20 日，官方下載網頁無法開啟，劉雷也被中科院停職接受調查。 簡介 木蘭由中國科學院計算技術研究所國家重點實驗室編譯組研發團隊於 2020 年 1 月 15 日發表。在發表時，開發團隊領導人劉雷聲稱這套程式語言完全由這個研發團隊進行自主設計、開發、程式設計，編譯器與整合開發工具套件也完全自主開發，完全掌握核心技術；劉雷認為這個程式語言將會成為「智慧物聯時代的 C 語言」。劉雷聲稱，木蘭是為針對人工智慧與物聯網應用而開發的程式語言；不過因為有易於理解及使用的特性，在尚未被大量使用於應用開發的情況下，木蘭已經投入中小學及幼兒園的教育課程中使用。在硬體上，能夠搭配中華人民共和國自主研發的龍芯、寒武紀處理器，在作業系統上可搭配 Android、iOS、Linux、Windows 系統跨平臺運作。 中科智芯科技有限公司提供 青少年人工智慧教育 相關的服務，其網頁上介紹木蘭語言時則僅聲稱該語言是 專為人工智慧教育而生的程式語言。2020 年 1 月 20 日，中科智芯科技網站所提供的木蘭的 語言環境 的安裝包名稱為 ulang022exe。 語法內容 因為官方尚沒有提供完整開發檔案與整合開發套件，這個程式語言的實質內容並不清楚，但在開放 ulangexe 下載後，開發者社群對它進行逆向工程，對它的特性有基礎瞭解。透過重現專案，發現了更多語法特性。下面是用木蘭原始碼編寫的猜 1100 數字例程，可用 ulangexe 執行。 using Cmd in cmd using exit in sys using randrange in random type GuessNumber Cmd intro prompt I have a number within 100 in mind guess which one Try numberInMind randrange 1000 10 history closestDiffSoFar 100 func default row try n int row catch e ValueError println row is not a number try again return historyappend n compare n func compare n if n numberInMind println Bingo exit else println Too n numberInMind large small println Getting close though if gettingCloser func gettingCloser minDiff min map n diff n numberInMind return diff 0 diff diff history closestDiffSoFar minDiff return true if closestDiffSoFar minDiff GuessNumber cmdloop 其語法的最直觀特色之一是取消了 Python 的強制縮排，改用大括號。透過語句末尾的分號，支援一行內編寫多個語句。 函式方面，可以用 代替 self；在函式無引數時，定義時可以省略 ；支援 lambda 函式內多個語句。 型別方面，型別擴充套件使用冒號表示；型別變數需用大括號包圍，如例程中的 intro、prompt 等。 內建函式方面，添加了 println；isinstance 改為 isa。 註釋段用 ，註釋行用 。 關鍵詞方面有諸多修改，比如由 Python 使用的 def 改成 func，類似於 Swift、Go 與 PHP；tryexcept 改為 trycatch；None 改為 nil，TrueFalse 改為 truefalse；class 改為 type 等等。 不支援漢字作為變數名稱，保留的關鍵字中也沒有漢字，因此不能以中文來進行程式設計。與此相比，Python 3 可以使用 Unicode 文字（包括漢字）作為變數名。 實現原理 在程式執行時，用 RPly 進行詞法與語法分析後生成 Python 抽象語法樹，呼叫 Python 內建函式 compile 生成可執行碼，再呼叫 Python 內建函式 exec 執行。執行速度與 Python 相近。由於基於 Python 的執行時環境，可以跨平臺運作。 除了執行木蘭原始碼，ulangexe 還有引數支援周邊功能。其中 dumppython 藉助 codegen 庫將木蘭原始碼生成對應的 Python 程式碼。 透過擴充套件 Python 內建函式 __import__，支援匯入木蘭模組，同時仍支援匯入 Python 模組，而且不需 __init__py 即可找到模組。語法與 Python 基本對應。 using some_module using module1 module2 using some_method in some_module using in some_module using in using ceil in math 關於核心技術的爭議 在其執行檔 ulang022exe 開放下載後，CSDN 網友 沉迷單車的追風少年 等開發者發現，這個執行檔是直接用 PyInstaller 將 Python 37 套件打包成一個執行檔，圖示直接使用 Python 的官方圖示。在解開後，其內容大部份都是 python 37 的官方套件，包括 python 的建構環境、套件等，自行撰寫的部份不多，與其宣稱完全自主開發不同。開發者劉雷回應，在 8 位元單晶片上的編譯器是由他們團隊自主開發，在 32 位元處理器上則是基於 Python 二次開發，其語法規範來自 Lua，但擴充了資料型別，主要使用於中小學教育，而不是人工智慧與物聯網開發。1 月 19 日，相關負責人劉雷被中科院停職檢查。之後劉雷則表示木蘭專案沒有使用任何科研經費。1 月 19 日，官方下載網頁已經無法開啟。 處罰 2020 年 1 月 23 日，中國科學院計算技術研究所釋出《關於 木蘭 語言問題的調查與處理意見》，認為劉雷在 木蘭 語言的宣傳活動中存在欺瞞、虛假陳述和誇大宣傳的行為，取消其五年內專業技術崗位晉升的申請資格，取消三年內科研專案的申請資格，崗位等級從工程師一級降為助理工程師一級。 評論 《經濟日報》（中國經濟網）認為，學術界的醜聞 讓人痛心，認為科學不容玷汙，應加強科學道德和學風建設。認為科研工作者應該 以身作則，還學術、還科研一片淨土。 重現專案 由於木蘭原始碼並未由官方釋出，於 1 月 16 日在知乎提出問題「木蘭」程式語言有什麼特色？的程式語言愛好者吳烜隨即建立了木蘭程式語言重現專案，並開源在 Gitee。2020 年 11 月 25 日，該專案在開源中國（OSCHINA）主辦的評選活動中位列 最積極運營專案 前 20 名。 此專案透過修改詞法分析部分，使木蘭支援了中文識別符號。猜數字例程改用中文命名如下。 using Cmd in cmd using exit in sys using 隨機範圍數 in 隨機數 type 猜數字 Cmd intro prompt 木蘭想了個 100 之內的數，猜是幾？ 猜猜吧 想的 隨機範圍數 1000 10 歷史 至今最近 100 func default 行 try 數 int 行 catch 例外 ValueError println 行 不是數，請再試 return 歷史append 數 比較 數 func 比較 數 if 數 想的 println 中了！ exit else println 太 數 想的？大 小 了！ println 不過接近咯 if 接近了 func 接近了 最近 min map 數 差 數 想的；return 差 0 差 差 歷史 至今最近 最近；return true if 至今最近 最近 猜數字 cmdloop 註釋 相關條目 紅芯 漢芯 銀河麒麟 Category 中國科學院 Category 程式設計語言 Category 中華人民共和國科技 Category2020 年中國大陸 Category 中華人民共和國學術醜聞 Category 科學騙局 Category 中華人民共和國軟體產業