日本中學生創造了一門“類似中文”的程式語言

natsuakane 是一名日本的中學生(13 歲),他創造了一門類似中文的程式語言 Wei-lang(https://github.com/natsuakane/Wei-lang)。用他自己的日式漢語來介紹就是“我製作偽中國語之機械言語”。
Wei 是“偽”的拼音,lang 是 language 的縮寫。下面我們就透過一段計算斐波那契數列第 n 項的程式碼,來看看 Wei-lang 的特點。
  1. 関數「普伊墓那値」引數「數」行
  2. 「結果」是「數」
  3. 「數」大一場合「結果」是「普伊墓那値」(「數」引二)足「普伊墓那値」(「數」引一)
  4. 「結果」
  5. 「表示」(「普伊墓那値」(「入力」(『整數』)))
  6. 「表示」(「新行」)
將這段程式碼儲存到檔案 fibonacci.wei 中,然後用 weilang 命令解析這個檔案,並輸入 10,
  1. ./weilang fibonacci.wei
  2. 10
  3. 55
這段程式碼輸出了 55,這正是斐波那契數列的第 10 項。
Wei-lang 與主流程式語言最大的不同點就是程式碼中充滿了漢字,所有標點符號也都是全形符號(使用半形空格作縮排反而會出錯)。
若將這段程式碼翻譯成 Python 程式碼,大概是這樣,
我們注意到,在 Wei-lang 的程式碼中,有些漢字括在了「」之中。這些漢字構成了函式、引數和變數的名字。
例如 「數」 相當於 Python 程式碼中名為 num 的引數; 「結果」 相當於名為 result 的區域性變數。 「表示」 和 「入力」 後面都帶有 (),應該不難猜出它們是函式名。“表示”和“入力”這兩個日文單詞的含義分別是“顯示”和“輸入”,所以對應 print() 和 input() 函式。
在主流程式語言中,函式名和變數名等識別符號要麼是英文和數字的組合(如 C、Java、Go 等),要麼是以特殊的符號開頭,比如 PHP 中的 $var,MySQL 中的 @var。像 「數」 這種前後都需要特殊符號的寫法從未出現過。不過,用一對括號將引數括起來也有好處,這樣在函式的引數列表中,就可以省略 , 分隔符了,例如 (「甲」「乙」),中間就不需要再加逗號了。
「普伊墓那値」 這個函式名中的每個漢字我們都認識,但合在一起就完全不知道什麼意思了。這其實是日語中的借用字(當て字),即不考慮漢字原本的含義,僅使用漢字來表示外來語讀音的現象。類似咱們小時候剛學英語時,用漢字標註單詞讀音的做法。
Wei-lang 在函式返回值方面還有點 Rust 的風格,最後一個表示式,即 「結果」 的值就是函式的返回值。
程式碼中還有些漢字沒有括在「」之中,除了表示數字的零一二三四五六七八九,剩下的那些漢字相當於運算子和關鍵字。如 関數 相當於 Python 中的 def,表示開始定義函式。  相當於賦值的 =;  相當於比較運算子 >;  和  來自日語的引く和足す,分別表示減法和加法; 場合 一詞多出現在日語中表示”如果……就……“的句子中,正好對應 if 語句。
 和  從出現位置上可以判斷出分別對應 C、Java 等語言中的 { 和 }。從含義上看,用  作為表示結束的 } 還挺合適的,不過  和表示開始的 { 有什麼關聯暫時沒有想到。
另外,“行”字可以拆開成“彳”“亍”(chì chù)兩個字,其實這兩個字本身就有左右的含義。彳表示左步;亍表示右步, 彳亍合在一起指緩步慢行。這兩個字曾用於翻譯量子力學中也有左右之分的狄拉克符號。

雖然作者 natsuakane 自稱 Wei-lang 是類似中文的程式語言,但很多漢字的用法並不符合漢語習慣,所以更準確的說法可能是"Wei-lang 是一門漢字程式語言”。
Wei-lang 是用 C++實現的,原始碼只有不到 1800 行。儘管程式碼量不大,Wei-lang 依然具備了基本的程式語言功能,而且採用了編譯原理中的 LL(1) 自頂向下分析法,並利用了多型、組合設計模式等程式設計技巧,很難相信這些程式碼竟出自一位中學生之手。
natsuakane 曾表示,思考如何才能寫出像中文一樣的程式碼很有意思。


相關文章