目前是 LikeCoin Chain 验证人 Yoitsu 背后的家伙,以及 CDC/CFC 划水组成员(笑)。偶尔会变身成狐狸。( @foobarz )
中文编程新体验(?) - 写文言文!
啥?
所以大家有想过为啥很多程序设计语言都是用英文字母(?)嘛?
虽然不全是,例如有些深奥的编程语言就没用。 目前一个有说服力(自我安慰?)的解释大概就是发明它们的人基本上都说英语吧(那 Ruby 怎么解释?啥?),以及英语在世界范围内的应用最广泛的缘故吧……
等等,刚刚说的“深奥的编程语言”是些啥,我觉得哪个都挺深奥的……
😅 嗯……
深奥的编程语言(Esoteric programming language,有时简写为Esolang)是一类编程语言,它们的设计被用于测试计算机语言设计的极限,作为一个概念的证明,或仅仅是一个玩笑。esoteric将它们与开发人员真正用于编写软件的语言区别开来。通常情况下,Esolang的创作者通常并不打算让它成为主流编程语言,尽管如此,一些深奥的功能如视觉空间语法,启发了在艺术中的实际应用。这种语言在黑客和爱好者之间通常较流行。
设计者几乎不会在意语言的可用性——一般,他们的目标完全相反。通常会移除或取代传统语言的功能,但同时仍保持图灵完全性,甚至可计算性都是未知的。
-- Wikipedia:深奥的编程语言
还是不懂?不如来举个栗子🌰吧……例如:
- 比较知名的某 brainfuckbrainfuck (经常为了和谐写成 brain f**k),一共只有八种指令。这是它的 hello,world 的写法:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
- 大部分的编程语言都忽略空白字符,但 Whitespace 反其道而行之,它忽略所有非空白字符🤔
然后,文言文编程语言登场啦!(啥?)
夫唐、虞之世,結繩而足治,屈指而足算。是時豈料百代之後,計算機械之巧,精於公輸之木鳶,善於武侯之流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經》之走獸。鼠、蟹、鑽、魚,或以速稱。蛇、象、駱、犀,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羁于远邦,兩耳久旷于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡抚掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。
文言编程速探(?)
出于某些不明或神奇的原因(汝可以去问问身边的程序员朋友们),大家开始学习一门新语言的时候,总是会以在屏幕上输出一段文字(最常见的是 "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 😂
文言的未来?
正如 功能请求 描述的一样,现在的文言(?)还缺少许多现代编程语言的常备功能,像是测试套件和导入功能什么的。如果汝既是文言爱好者(双重含义?)又有兴趣的话,可以去帮下忙?
喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。
发布评论…