natsuakane 是一名日本的中學生(13 歲),他創造了一門類似中文的程式語言 Wei-lang(https://github.com/natsuakane/Wei-lang)。用他自己的日式漢語來介紹就是“我製作偽中國語之機械言語”。

Wei 是“偽”的拼音,lang 是 language 的縮寫。下面我們就透過一段計算斐波那契數列第 n 項的程式碼,來看看 Wei-lang 的特點。
関數「普伊墓那値」引數「數」行
「結果」是「數」
「數」大一場合「結果」是「普伊墓那値」(「數」引二)足「普伊墓那値」(「數」引一)
「結果」
終
「表示」(「普伊墓那値」(「入力」(『整數』)))
「表示」(「新行」)
將這段程式碼儲存到檔案 fibonacci.wei 中,然後用 weilang 命令解析這個檔案,並輸入 10,
$ ./weilang fibonacci.wei
10
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 曾表示,思考如何才能寫出像中文一樣的程式碼很有意思。