Horo
Horo

目前是 LikeCoin Chain 验证人 Yoitsu 背后的家伙,以及 CDC/CFC 划水组成员(笑)。偶尔会变身成狐狸。( @foobarz )

中文编程新体验(?) - 写文言文!

啥?

所以大家有想过为啥很多程序设计语言都是用英文字母(?)嘛?

虽然不全是,例如有些深奥的编程语言就没用。 目前一个有说服力(自我安慰?)的解释大概就是发明它们的人基本上都说英语吧(那 Ruby 怎么解释?啥?),以及英语在世界范围内的应用最广泛的缘故吧……



等等,刚刚说的“深奥的编程语言”是些啥,我觉得哪个都挺深奥的……

😅 嗯……

深奥的编程语言(Esoteric programming language,有时简写为Esolang)是一类编程语言,它们的设计被用于测试计算机语言设计的极限,作为一个概念的证明,或仅仅是一个玩笑。esoteric将它们与开发人员真正用于编写软件的语言区别开来。通常情况下,Esolang的创作者通常并不打算让它成为主流编程语言,尽管如此,一些深奥的功能如视觉空间语法,启发了在艺术中的实际应用。这种语言在黑客和爱好者之间通常较流行。
设计者几乎不会在意语言的可用性——一般,他们的目标完全相反。通常会移除或取代传统语言的功能,但同时仍保持图灵完全性,甚至可计算性都是未知的。
-- Wikipedia:深奥的编程语言

还是不懂?不如来举个栗子🌰吧……例如:

  • 比较知名的某 brainfuckbrainfuck (经常为了和谐写成 brain f**k),一共只有八种指令。这是它的 hello,world 的写法:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
  • 大部分的编程语言都忽略空白字符,但 Whitespace 反其道而行之,它忽略所有非空白字符🤔


然后,文言文编程语言登场啦!(啥?)

之世,結繩而足治,屈指而足算。是時豈料百代之後,計算機械之巧,精於公輸木鳶,善於武侯流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經》之走獸。,或以速稱。,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羁于远邦,兩耳久旷于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉心血,亦庶幾免於義山流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡抚掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。

wenyan-lang 的 Readme

文言编程速探(?)

出于某些不明或神奇的原因(汝可以去问问身边的程序员朋友们),大家开始学习一门新语言的时候,总是会以在屏幕上输出一段文字(最常见的是 "hello, world")作为开始。 不过这回例外一下好了……

一个典型的文言程序大概像这样:

吾有一數。曰三。名之曰「甲」。 
為是「甲」遍。 	
    吾有一言。曰「「問天地好在。」」。書之。 
云云。

(按作者的说法,标点(除了引号「」)和换行和空格都是可以省略的)

它编译成 JavaScript 大概就会变成这个样子: (作者说还可以编译成 Python 和 Ruby )

var 甲 = 3;
for (var _rand1 = 0; _rand1 < 甲; _rand1++) {
    var _ans1 = "問天地好在。";
    console.log(_ans1);
};

所以能大概找到文言和关键词之间的关系了没?

再来看一个稍微复杂些的例子,用文言实现的快速排序

吾有一術。名之曰「快排」。欲行是術。必先得一列。曰「甲」。乃行是術曰。
	若「甲」之長不大於一者。
		乃得「甲」
	也。
	吾有三列。名之曰「首」。曰「頷」。曰「尾」。

	夫「甲」之一。名之曰「甲一」。
	充「頷」以「甲一」。
	夫「甲」之其餘。名之曰「甲餘」。

	凡「甲餘」中之「丁」。
		若「丁」小於「甲一」者。
			充「首」以「丁」。
		若非。
			充「尾」以「丁」
		也。
	云云。
	施「快排」於「首」。昔之「首」者。今其是矣。
	施「快排」於「尾」。昔之「尾」者。今其是矣。

	銜「首」以「頷」以「尾」。名之曰「乙」。
	乃得「乙」。

是謂「快排」之術也。

吾有一列。名之曰「己」。
充「己」以五。以三。以二十。以八。以三十五。以七百。
施「快排」於「己」。書之。

它生成的 JavaScript 是这样:

var 快排 = () => 0;
快排 = function(甲) {
    if (甲.length <= 1) {
        return 甲
    };
    var 首 = [];
    var 頷 = [];
    var 尾 = [];
    var _ans57 = 甲[1 - 1];
    var 甲一 = _ans57;
    頷.push(甲一);
    var _ans58 = 甲.slice(1);
    var 甲餘 = _ans58;
    for (var 丁 of 甲餘) {
        if (丁 < 甲一) {
            首.push(丁);
        } else {
            尾.push(丁);
        };
    };
    var _ans59 = 快排(首);
    首 = _ans59;
    var _ans60 = 快排(尾);
    尾 = _ans60;
    var _ans61 = 首.concat(頷).concat(尾);
    var 乙 = _ans61;
    return 乙
};
var 己 = [];
己.push(5, 3, 20, 8, 35, 700);
var _ans62 = 快排(己);
console.log(_ans62);

(像 JavaScript 和 Python 之类的语言支持不是 ASCII 字符的变量名,像甲乙丙丁什么的就能用了)

它甚至还有一个工具把文言的代码输出成古籍的样式,这个样子 😂


汝也可以用它提供的在线 IDE体验一下。


还有人在讨论要不要造一个像古籍一样竖着写代码(?)的IDE 😂

文言的未来?

正如 功能请求 描述的一样,现在的文言(?)还缺少许多现代编程语言的常备功能,像是测试套件和导入功能什么的。如果汝既是文言爱好者(双重含义?)又有兴趣的话,可以去帮下忙?

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论