文言 (程式語言)
文言(又稱「文言文程式語言」,英語:wenyan-lang)是一門以漢語文言文為基礎進行程式編寫所用的語言。編譯器主要以JavaScript實作,支援將原始碼編譯為JavaScript、Python或Ruby程式碼。[5][6]
編程範型 | 多範式:函數式、指令式、結構化、物件導向、反射式 |
---|---|
設計者 | 黃令東(Lingdong Huang) |
實作者 | 文言開發團隊 |
釋出時間 | 2019年[1] |
目前版本 |
|
作業系統 | 跨平台 |
許可證 | MIT授權條款 |
副檔名 | .wy |
網站 | https://wy-lang.org |
衍生副語言 | |
爪哇文言、標準文言[3] | |
啟發語言 | |
Python、JavaScript、《易經》 |
不同於大部分中文程式語言,文言文程式語言不只是以中文取代其他程式語言的關鍵字。它定義了自己的語法,使之讀起來接近古文。文言文程式語言常用的符號只有中文字和引號,亦不須分行,以符合古人的書寫習慣。[7][8][9]
歷史
編輯文言文程式語言的開發者是來自卡內基梅隆大學的大四學生黃令東。在這一語言之前,他曾成功設計出了電腦自動作中國山水畫的程式。2019年,他萌生出文言編程的想法,那時他剛完成程式語言核心的課程。他希望能夠設計出一門「能夠讓古老的中國典籍在命令列的字元間重獲新生」的語言,而這就是文言文程式語言的雛形。
「我總是想拖延這個語言的設計。當時我給自己的藉口就是『我想要多讀一些中國古籍』,但後來我轉念一想,所謂的『想多讀點書』僅僅是『拖延症』這種字眼的美化罷了。我決定付諸實踐,入手開發了。」在接受IEEE採訪時他如是說,「那段時間是期末考試周,我們沒有課。所以我沒有選擇複習任何東西,而是去利用閒暇開發『文言』;不過四天,我就已經實現了核心功能。」當問及他是否對文言文情有獨鍾時,他給出了肯定回答——當時他正在閱讀《淮南子》。[10]
語法
編輯文言程式語言的語法基本遵循中國古籍中的文言規則。本語言僅需要使用中文字和引號,其餘的標點符號、斷行、縮排都不是必要的,原則上以繁體中文書寫。[11]下面將會列出一些例子。[12][13]
Hello, world!
編輯吾有一言。曰「「問天地好在。」」
書之。
變數
編輯使用漢字組合作為變數的名稱,而不是拉丁字母。這些變數有各自的類型,如「數」、「言」等。
文言代碼 | JavaScript對應代碼 | Python對應代碼 |
---|---|---|
吾有一数。曰三。名之曰「甲」。
|
var a = 3
|
a = 3
|
有数五十。名之曰「大衍」。
|
var dayan = 50
|
dayan = 50
|
吾有一言。曰「「噫吁嚱」」。名之曰「乙」。
|
var b="Alas!"
|
b = "Alas!"
|
布林值
編輯布林值用「爻」作為類型名。其值真、假分別用「陽」「陰」表示。
文言代碼 | JavaScript對應代碼 | Python對應代碼 |
---|---|---|
吾有一爻。曰阴。名之曰「丙」。 |
var c = false |
c = False
|
條件與流程控制
編輯用「若……乃得……」句式作為if判斷,用「為是」作為迴圈關鍵字。
文言代碼 | JavaScript對應代碼 | Python對應代碼 |
---|---|---|
若三不大于五者。乃得「「想当然耳」」。若非。乃得「「怪哉」」也。 |
if (3 <= 5) {
return "of course";
} else {
return "impossible";
}
|
if 3 <= 5:
print("of course")
else:
print("impossible")
|
为是百遍。……云云。
|
for (var i = 0; i < 100; i++) { ... }
|
for i in range(0, 100):
...
|
恒为是。……云云。
|
while(true) { ... }
|
while True:
...
|
乃止。 |
break; |
break
|
運算
編輯文言代碼 | JavaScript對應代碼 | Python對應代碼 |
---|---|---|
加一以二。乘其以三。 |
(1 + 2) * 3 |
(1 + 2) * 3
|
除十以三。所余几何。 |
10 % 3 |
10 % 3
|
减七百五十六以四百三十三。名之曰「甲」。 |
var a = 756 - 433 |
a = 756 - 433
|
容器類型
編輯使用文言文中的銜接詞來表達容器類型。由於尊重漢語習慣,數列的下標都是從一開始的。
文言代碼 | JavaScript對應代碼 |
---|---|
吾有一列。名之曰「甲」。充「甲」以四。以二。 |
var a=[]; a.push(4, 2);
|
夫「剑」之长。 |
sword.length;
|
夫「甲」之一。 |
a[0]
|
夫「玫瑰」之「「名」」。 |
rose["name"]
|
定義函數
編輯使用「吾有一術」進行聲明。
文言代碼 | JavaScript對應代碼 | Python對應代碼 |
---|---|---|
吾有一术。名之曰「大法」。是术曰。...是谓「大法」之术也。 |
function f() {...} |
def f:...
|
使用模組
編輯吾嘗觀「「易經」」之書。方悟「運」「占」之義。
爭議
編輯作為一個純中文的編譯語言,文言在國內外受到了廣泛爭議。多數持反對意見的人認為,這一語言因為文言文本身具備的複雜性和在現代社會的不普及性,很難收到廣泛使用,會抬高中國人學習程式語言的門檻而不是降低;而持支援態度的人認為,大四學生能夠吸取古籍,製作出如此完備而且系統的語言,其意志與精神令人驚嘆。
參考內容
編輯- ^ 文言历次发布列表. [2021-11-17]. (原始內容存檔於2021-12-03).
- ^ Release 0.3.4. 2020年7月29日 [2022年12月19日].
- ^ 文言方言等事项列表. [2021-11-17]. (原始內容存檔於2021-11-17).
- ^ 版本0.0.2. [2021-11-17]. (原始內容存檔於2021-11-17).
- ^ wenyan - Esolang. esolangs.org. [2021-09-06]. (原始內容存檔於2021-09-06).
- ^ 文言文也能寫程式,中國留美大學生開發出 wenyan-lang 程式語言. 電腦王阿達. 2020-02-04 [2021-09-06]. (原始內容存檔於2021-12-11) (中文(繁體)).
- ^ 文言文也可以用來寫程式?!. 電子工程專輯. 2020-02-13 [2021-09-03]. (原始內容存檔於2021-12-11) (中文(繁體)).
- ^ World's First Classical Chinese Programming Language. IEEE Spectrum. 2020-01-31 [2021-09-03]. (原始內容存檔於2021-11-17) (英語).
- ^ 大四学生发明文言文编程语言,设计思路清奇. 騰訊雲. [2021-09-06]. (原始內容存檔於2021-12-11).
- ^ Charles Q. Choi. World's First Classical Chinese Programming Language. IEEE Spectrum. 2020-01-31 [2021-12-11]. (原始內容存檔於2021-11-17) (英語).
- ^ GitHub - wenyan-lang/wenyan: 文言文編程語言 A programming language for the ancient Chinese.. GitHub. [2021-09-03]. (原始內容存檔於2021-10-13) (英語).
- ^ 《文言阴符·wenyan-lang操作指南》. [2021-12-20]. (原始內容存檔於2021-10-11).
- ^ 《文言0.0.2指南》
- ^ Wenyan-lang. esoteric.codes. 2020-11-12 [2021-09-06]. (原始內容存檔於2021-10-14) (英語).