栗子 晓查 发自 海边边 
量子位 报道 | 公众号 QbitAI

同学,你可知如何用文言文输出“Hello World”?

请君睁圆双眼注视于此:

 右边一顿输出

吾有一言。曰「「問天地好在。」」。書之。

却为何输出了三遍?

只因有for循环,写作“為是「甲」遍…云云”。甲等于三,便要问三次好。

这骚之过极的文言文编程语言,来自CMU本科生Huang Lingdong。

可编译成Javascript,也可编译成Python,亦有线上编辑器 (IDE) 可直接玩耍。

项目文理两开花,已于GitHub摘得3000星,且围观众人皆有话说。

譬如,妒少年之才华:

譬如,点未来之方向:

中科院计算所研究员刘群老师亦感叹:

当下,我等便前去观膜一番,探索此语言藏有何种天地精华。

文言文编程“黑话”

Huang Lingdong同学应该是读过《易经》,毕竟易经是最早论述二进制的古书。他用易经的代表布尔变量中的0和1。

“吾有”系列则被用来做定义:

吾有一数是定义int变量
吾有一爻是定义布尔变量
吾有一言是定义字符串
吾有一术是定义函数
吾有一列是定义数组
……

一般的编程里,循环判断有if、while、for,文言文编程在这件事上更是变化无穷。下面就是一段文言文书写的判断语句:

若三弗大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。

翻译过来就是:

if(3<=5){return "of course"}
else{return "no way"}

也许你会觉得if…else…语句用文言文太啰嗦,但是常用的for循环,用文言文表达却更为简洁。

為是百遍。⋯⋯ 云云。

它的意思是:

for (var i = 0; i < 100; i++){ ... }

如果需要判断某个变量human是否在world中,我们一般用for (var human of world),初学者看到for的这种用法可能会很困惑,而文言文的表示更接近普通人的理解。

凡「天地」中之「人」。⋯⋯ 云云。

古有《易经》,今有金庸小说,在展示定义函数的时候,Huang同学又皮了一下:

吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。⋯⋯是謂「六脈神劍」之術也。

这里Huang同学将函数名定义为“六脉神剑”,这个函数总共有6个输入。

funcion f(a,b,c,d,e,f){…}

还有更多好玩的函数定义:

怎样用文言文编程

看完文言文编程的基本语法后,我们来看看怎么用它来解决一些基本的问题。

比如求100以内的素数,我们会用到一种“埃氏筛”(Sieve of Eratosthenes)算法:

看一下运行结果:

二。三。五。七。一十一。一十三。一十七。一十九。二十三。二十九。三十一。三十七。四十一。四十三。四十七。五十三。五十九。六十一。六十七。七十一。七十三。七十九。八十三。八十九。九十七

你看懂是什么意思了吗?编译器翻译成JavaScript就是:

var AI1SHI4SHAI1 = () => 0;
AI1SHI4SHAI1 = function(JIA3) {var YAN3 = [];for (var _rand4 = 0; _rand4 < JIA3; _rand4++) {YAN3.push(true);};var _ans154 = JIA3 / 2;var JIA3BAN4 = _ans154;var WU4 = 2;while (true) {if (WU4 == JIA3BAN4) {break;};var XU1_ = 2;while (true) {if (XU1_ == JIA3BAN4) {break;};var _ans155 = WU4 * XU1_;var HE2 = _ans155;if (HE2 <= JIA3) {YAN3[HE2 - 1] = false;} else {break;};var _ans156 = 1 + XU1_;XU1_ = _ans156;};var _ans157 = 1 + WU4;WU4 = _ans157;};var ZHU1SU4 = [];var WU4 = 2;while (true) {if (WU4 == YAN3.length) {break;};var _ans158 = YAN3[WU4 - 1];var SU4YE2 = _ans158;if (SU4YE2) {ZHU1SU4.push(WU4);};var _ans159 = 1 + WU4;WU4 = _ans159;};return ZHU1SU4
};
var _ans160 = AI1SHI4SHAI1(100);
console.log(_ans160);

文言文编程不仅能输出简单的结果,连文字图(ASCII Art)都可以用文言文画出来,分形问题中著名的“曼德博集合”,用中文画出来是这样:

用中文画出的曼德博集合

你以为这就是编译结果的最终形态了?错错错!

项目文件还有个脚本src/render.js,它可以把程序渲染成古代书籍的样子。把O’Reilly系列图书印刷成古代线装书,真是想想就很激动啊。

安装与使用

文言文编程只需将repo下载到本地,而且本地已经安装Node,就能立即使用。现在它支持将wenyan lang转换成JavaScript和Python:

./build/wenyan.js examples/helloworld.wy -o helloworld.js

在这段命令中,如果不指定语言,程序将自动转化为JavaScript,若想转化成Python,请加入参数“—lang py”或是“-l py”。

用户也可以自行编译二进制文件。如果你只想尝尝鲜,在线IDE也是个不错的选择。

何出此“言”

至于,为何要炮制一门文言编程语言,少年为项目写有一序,由此可窥一二 (后有解读) :

夫唐、虞之世,結繩而足治,屈指而足算。是時豈料百代之後,計算機械之巧,精於公輸之木鳶,善於武侯之流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經》之走獸。鼠、蟹、鑽、魚,或以速稱。蛇、象、駱、犀,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。

然則數寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羁于远邦,兩耳久旷于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡抚掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。

文中典故之多,恐无法在此一一注释,便以划重点之法,粗粗领会其意味,并简要传达为白话:

上古人类结绳记事,不会想到后代竟然发明了计算机。今天编程语言众星闪耀,只是没有人用文言编程。我人在国外,想念这些古典的言语,同时又擅长编程又有头发,决定为开源事业贡献一份力量。

注:如想查看所有典故,请前往项目页,出处皆有维基百科链接。

量子位循蛛丝马迹,得知少年名叫Huang Lingdong,来自卡耐基梅隆大学,如今大四,明年即将毕业。高中则毕业自上海世界外国语中学。

黄姓少年一路脑洞盛开,时常开发画风清奇之项目,量子位也曾为其另一项目撰文:

任君信笔涂鸦,皆可化作梦境中之角色,生龙活虎,与其他人物一同玩耍游荡。如百鬼夜行之雄风。

而文言文编程语言,大抵是少年迄今最为骄傲且最为瞩目之成就。

各位可速速前往吸之,定然无法自拔。

传送门

项目代码:
https://github.com/LingDong-/wenyan-lang

项目主页:
http://wenyan-lang.lingdong.works/

线上IDE试玩:
http://wenyan-lang.lingdong.works/ide.html

个人主页:
https://lingdong.works/

2019年度奖项发布!锁定AI Top玩家

50家领航企业、10大商业突破人物、10大最具创新力产品3大奖项出炉。

跟大咖交流 | 进入AI社群

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

噫吁嚱!文言文亦能编程!此诚年度最骚语言也相关推荐

  1. 文言文也能编程?此诚年度最骚语言也

    近日,GitHub 上一个叫做文言文(wenyan)的编程语言项目火了,该项目迅速引发了猿们的关注热议,其 Star数一路涨到过万,热度还在持续上涨.只需要在在线编辑器上,或下载一个编译器,就可以用文 ...

  2. 解析少儿编程中的运用的科技语言

    少儿编程作为一种科技语言是没有国界的,适用于全世界.而在科技发展的今天,编程应用于各个领域.很多国家都意识到编程学习的重要性,因此,采取了各种措施来推广编程教育,如英国将编程列入中小学必修课程中,美国 ...

  3. PTA 基础编程题目集 7-22 龟兔赛跑 C语言

    PTA 基础编程题目集 7-22 龟兔赛跑 C语言 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息.乌龟每分钟可以前进3米,兔子每分钟前进9米:兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于 ...

  4. 可编程CDN – EdgeScript应用场景、语言速览和实操演示

    5月8日下午15:00,CDN云课堂的第二期,阿里云CDN团队技术专家拓山为大家带来了<可编程CDN – EdgeScript实践>主题技术分享.本次分享通过对阿里云CDN成长到当前体量的 ...

  5. 单片机c语言必背代码_最适合单片机编程的高级语言,除了C语言,别无选择!...

    单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言. 这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为什么这些语言不能用来编写单片机程序呢 ...

  6. linux+下c语言编程项目,精通UNIX下C语言编程与项目实践

    cc -I  //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...

  7. c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...

    双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好 首页 > 软件 > 双辽c语言编程学习 作者:镀金池   发布时间:2017-12-07 05:48 一个C语 ...

  8. 自学python能学成吗-没有任何编程基础可以直接学习python语言吗?学会后能够做什么?...

    很明确的说 python非常适合没有任何编程基础的人入门.. 目前应用最多的:全栈开发.数据分析.运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得 ...

  9. wheelib: 一个为编程学习而生的C语言轮子库

    wheelib: 一个为编程学习而生的C语言轮子库 wheelib

  10. c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...

    九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会 首页 > C语言 > 九江c语言编程学习 作者:镀金池   发布时间:2017-10-18 14:11 据ID ...

最新文章

  1. 马斯克卫星互联网开测:最快60M,高清视频网游都OK,先造福偏远农村
  2. 粒子群算法(PSO)Matlab实现(两种解法)
  3. 基于小波变换的图像压缩解压缩仿真
  4. Ubuntu 16.04调节屏幕显示字体大小
  5. mysql组合索引的命中情况
  6. 在服务器上打包部署springboot+vue的项目(一)启动tomcat后打开浏览器点击登录无反应 页面空白问题
  7. tp5 隐藏index.php
  8. python中output使用_python-02.输入Input/输出Output
  9. android开发常用的颜色值
  10. 软件工程(2019)结对编程第二次作业
  11. scala spark 数据对比_IT大牛耗时三个月总结出大数据领域学习路线,网友评论:炸锅了...
  12. 前端学习(1689):前端系列javascript之如何搞定面试题
  13. SAP MM模块-实施顾问岗位-面试手册-项目管理经验面试清单-英文
  14. Python os.walk() 方法--输出在目录中的文件名
  15. 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...
  16. python采用函数式编程模式-浅谈Python 函数式编程
  17. 小程序和app究竟哪个好?
  18. linux操作命令笔记
  19. 我的世界java版钻石剑附魔_我的世界钻石剑怎么附魔 钻石剑附魔100级指令
  20. Linux驱动开发(二)内核符号表

热门文章

  1. vue脚手架安装 axios 安装 配置 轮播图
  2. Quartus II 12.1安装及破解
  3. 项目中常用的各国语言字典表分享
  4. 单片机毕业设计 - 选题推荐
  5. 使用接口根据关键词取亚马逊商品数据
  6. STM32F407 硬件IIC驱动MCP4017 数字电位器
  7. 基于java的电子政务管理系统设计(含源文件)
  8. C#局域网桌面共享软件制作(二)
  9. windows运行命令大全
  10. windows 运行命令大全