栗子 晓查 发自 海边边 
量子位 报道 | 公众号 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

- MORE | 更多精彩文章 -

  • 再现暴力裁员!患病员工被关小黑屋,摄像头监控,工作量超其他人!

  • Alibaba Sentinel 限流与熔断初探

  • 看了那些Google大神Jeff Dean的传说后,我跪了!

  • 双非硕士阿里大数据开发面经(已拿offer)

如果你喜欢本文,

请长按二维码,关注 Hollis.

转发至朋友圈,是对我最大的支持。

好文章,我在看❤️

太牛X了,大四学生自创文言文编程语言,Hello World竟然这样写!?相关推荐

  1. 计算机保研去北科大还是大工,全部保研!大工这寝室太牛

    原标题:全部保研!大工这寝室太牛 在大连理工大学 5舍344寝室有这样四位姑娘 她们 四人加权平均分87.34分 她们 三年奖学金总额67400元 她们 更是化工学院保研的学霸 李汶娟 保研至北京大学 ...

  2. 一个拿到人人网和淘宝网offer的大四学生的Android学习经历

    一个拿到人人网和淘宝网offer的大四学生的Android学习经历 本来早就应该整理好的,但是最近一直杂事比较多,现在在家,我家不能上网,在亲戚家用网,总算整理好了.我也着急啊.因为过几天就要去实习了 ...

  3. 太牛了!用文言文来编程,97年CMU本科生火遍全网!

    点击"技术领导力"关注∆  每天早上8:30推送 来源:开源最前线(ID:OpenSourceTop) 这两天刷微博.朋友圈.公众号,发现大家都被一个文言文编程的项目圈粉了. 就连 ...

  4. 年度最骚的编程语言来了!大四学生发明文言文编程语言!

    程序员的成长之路 互联网/程序员/成长/职场 关注 阅读本文大概需要 2.8 分钟. 来自:开源最前线(ID:OpenSourceTop) 这两天刷微博.朋友圈.公众号,发现大家都被一个文言文编程的项 ...

  5. 为什么做好数据安全这么难?黑客太牛?

    文章讲的是为什么做好数据安全这么难?黑客太牛,随着数据泄露事件的发生越来越频繁,数据安全被搬上台面.到底是什么原因造成数据安全事件频发?是黑客太牛,还是我们太弱? 据调查,如今,企业对数据收集和存储的 ...

  6. 在B站如何不动一根手指,就可以养成6级大佬?大四学生发明养号神器,看完你也会...

    杨净 发自 凹非寺  量子位 报道 | 公众号 QbitAI 如何像拥有一个小助手一样,每天帮你签到打卡? 或许,现在利用GitHub Action定时任务就可以做到. 而这个小助手,混迹b站,可以每 ...

  7. 5g局域网传输速度_这个路由太牛了吧?,三步搭建局域网,接上U盘就是NAS

    前言:哈喽大家好,我是伟华,之前一直特别的苦恼就是家里的网络不好.我家是传统的90平米的老式住宅,优点是过去的房子都很结实,但是有一个不好的地方就是墙壁的厚度太好了,容易挡住Wi-Fi信号.今年行业不 ...

  8. 实现推拉ui样式_这推拉门隔断,我从没见过!直角设计同时划分3大功能区,太牛了...

    这位业主要是说自家装修第二名,我想大概不会有人愿意称第一.就说这个操作我就没见过,推拉门隔断内部,再装大白墙拼接推拉门隔断,形成一个直角设计,同时划分3大功能区,属实是太牛了! 这和邻居想让家里空间更 ...

  9. 15 岁黑进系统,发挑衅邮件意外获 Offer,不惑之年捐出全部财产,Twitter CEO 太牛了!...

    作者 | 年素清 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 近日,Square 兼 Twitter CEO 杰克·多西(Jack Dorsey)表示,他打算生前就捐出自己的全 ...

  10. mac可以用计算机考试系统吗,苹果测试在iPhone上装macOS电脑系统?这太牛了吧

    苹果测试在iPhone上装macOS电脑系统?这太牛了吧 2020-07-07 14:31:26 0点赞 0收藏 0评论 还记得吗?今年的WWDC20苹果开发者大会上的One more Thing(苹 ...

最新文章

  1. 2019年9月2日开学!寒假时间也定了……
  2. 十款让 Web 前端开发人员更轻松的实用工具
  3. 如何将数据导入到 SQL Server Compact Edition 数据库中(四)
  4. Maven学习总结(14)——Maven 多模块项目如何分工?
  5. Nginx入门之两种handler函数的挂载方式
  6. OpenStack 的部署T版(二)——Keystone组件
  7. java编程_Java编程和C语言的比较
  8. 基于php的外卖订餐系统开题报告_石化二小参加区2020省市级现代教育技术课题研究开题会议...
  9. 使用fastadmin的页面跳转模板
  10. 手机号码检测开通微信方法
  11. 软件工程和项目管理的区别
  12. 【Visio开发工具】用Visio绘制封闭曲面并填充颜色
  13. Swift开发 UIColor分类Hex颜色转换
  14. 从生物信息学转计算机科学,转一个:学生物的,不会编程,也可以报考生物信息学的研究生...
  15. java集合举例_菜鸟程序员都能听得懂得Java集合介绍,快来收藏
  16. linux设备授权命令,# Linux命令
  17. ubuntu20.04部署KVM环境及创建虚拟机
  18. Micro:bit - 功能引脚介绍
  19. POJ 3095 Linear Pachinko 笔记
  20. 电脑与云服务器传输文件,电脑与云服务器传输文件

热门文章

  1. 文后参考文献著录规则 自动生成器 HTML
  2. [SQL] 不允许保存更改
  3. MATLAB自学教程一1.显示图像图像基本信息
  4. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第四章 2020-12-29 完整工程
  5. VPP TCP定时器
  6. Microsoft Visual Studio .NET 2003 编译xvidcore-1.1.3
  7. WAV音频文件的分析
  8. 安卓开发3d模型展示源码_Android(安卓)全套开发资料视频+源码
  9. BeanUtils 用法
  10. 计算机操作系统试题及答案(带解析),计算机操作系统练习题及答案