文言 (编程语言)
文言(英語:)是一门以汉语文言文为基础进行程序编写所用的语言。編譯器主要以JavaScript實作,支持將源碼編譯為JavaScript、Python或Ruby程式碼。[4][5]
多范型:函数式、指令式、结构化、面向对象、反射式 | |
設計者 | 黃令東(Lingdong Huang) |
實作者 | 文言开发团队 |
2019年[1] | |
当前版本 |
|
操作系统 | 跨平台 |
許可證 | MIT授權條款 |
文件扩展名 | .wy |
網站 | https://wy-lang.org |
衍生副語言 | |
爪哇文言、标准文言[3] | |
啟發語言 | |
Python、JavaScript、《易经》 |
不同於大部分中文程式語言,wenyan-lang不只是以中文取代其他程式語言的關鍵字。它定義了自己的語法,使之讀起來接近古文。wenyan-lang常用的符號只有中文字和引號,亦不須分行,以符合古人的書寫習慣。[6][7][8]
概要
这个语言的开发者是来自卡内基梅隆大学的黄令东,并且当时仅是一名大四学生;在这一语言之前,他曾成功设计出了电脑自动作中国山水画的程序,也是截至目前为止让中国戏曲在人工智能技术中得以实现的唯一一人。「文言」这一编程语言不是简单的程序英文字符向中文的变换。恰恰相反,这一中国特色的语言是利用NLP技术,将文言文语法转换为Javascript或Python语法,从而进行编译与运行;技术难度巨大。这名开发者在不到一年前才萌生出文言编程的想法,那时他刚完成编程语言核心的课程。他希望能够设计出一门能够让古老的中国典籍在命令行的字符间重获新生的语言,而这正是wenyan-lang的雏形。“我总是想拖延这个语言的设计。当时我给自己的借口就是‘我想要多读一些中国古籍’,但后来我转念一想,所谓的‘想多读点书’仅仅是‘拖延症’这种字眼的美化罢了。我决定付诸实践,入手开发了。”在接受IEEE采访时他如是说,“那段时间是期末考试周,我们没有课。所以我没有选择复习任何东西,而是去利用闲暇开发「文言」;不过四天,我就已经实现了核心功能。”当问及他是否对文言文情有独钟时,他的回答是肯定的——当时他正在阅读《淮南子》。[9]
程序设计语法
文言编程语言的语法基本遵循中国古籍中的文言规则。本语言僅需要使用中文字和引號,其餘的標點符號、斷行、縮排都不是必要的,原則上以繁體中文書寫。[10]下面将会列出一些例子。[11][12]
变量
使用汉字组合作为变量的名称,而不是拉丁字母。这些变量有各自的类型,如「数」「言」等。
文言代码 | 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).
- . 2020年7月29日 [2022年12月19日].
- . [2021-11-17]. (原始内容存档于2021-11-17).
- . esolangs.org. [2021-09-06]. (原始内容存档于2021-09-06).
- . 電腦王阿達. 2020-02-04 [2021-09-06]. (原始内容存档于2021-12-11) (中文(繁體)).
- . 電子工程專輯. 2020-02-13 [2021-09-03]. (原始内容存档于2021-12-11) (中文(繁體)).
- . IEEE Spectrum. 2020-01-31 [2021-09-03]. (原始内容存档于2021-11-17) (英语).
- . 腾讯云. [2021-09-06]. (原始内容存档于2021-12-11).
- Charles Q. Choi. . IEEE Spectrum. 2020-01-31 [2021-12-11]. (原始内容存档于2021-11-17) (英语).
- . GitHub. [2021-09-03]. (原始内容存档于2021-10-13) (英语).
- . [2021-12-20]. (原始内容存档于2021-10-11).
- 《文言0.0.2指南》
- . esoteric.codes. 2020-11-12 [2021-09-06]. (原始内容存档于2021-10-14) (英语).