公众号关注 “GitHubDaily”

设为 “星标”,每天带你逛 GitHub!

转自机器之心,参与:思、一鸣

「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的出现,诞生了世界上一个伟大的文明。而编程语言的出现,让人类和计算机产生了真正的联系,推动了现代文明的发展。

那么,将古代汉语和编程语言结合又会产生怎样的火花?最近,GitHub 上出现了一个文言文做代码的项目,几乎是世界上第一门文言文编程语言(当然,底层还是转换成 Python 或 JavaScript 运行)。

如果中文是编程语言中使用的主要语言,我们中国人学习编程是否会更简单?

这是知乎上讨论非常火热的话题。很多接触过编程的人都知道「易语言」,这是一种使用中文代替编程语言中的英文的编程语言,同样可以实现程序功能。近日,一位卡内基梅隆大学(CMU)的大四学生开发了基于文言文的编程语言,高中语文三大怕的文言文终于找上程序员了。

项目地址:https://github.com/LingDong-/wenyan-lang

这一项目并不是简单的将程序中的英文字符换成了中文,而是利用 NLP 的一些技术,将文言文程序语法转换到 JavaScript 或 Python 运行,有一定的技术难度。项目问世几日即获赞 2.2K,还得到了很多人的微博转发。

作为横跨媒体和 AI 的机器之心也测试了这一项目,项目作者的脑洞、文采和创意着实令人惊讶。

如果读者想快速试一试,你也可以玩一玩在线 IDE,上面有很多预定义的函数。即使在手机上,我们也能编辑并运行「文言文代码」。

在线地址:http://wenyan-lang.lingdong.works/ide.html

序言

作者在项目开篇使用了一段文言文,介绍了建立这个项目的初衷。

翻译如下:

在尧舜时代,人们使用结绳和数手指来计算。当时怎么能够预料到,几百代人之后计算机的巧妙呢!计算机比鲁班(公输盘)的木鸢更加精巧,比诸葛亮(武侯)的木牛流马更好。此外,编程语言数量众多,如同《天官书》记录的星宿一般多,又比《山海经》中记录的飞禽走兽还要奇特。Go(鼠)、Rust(蟹)、Ruby(鑽)、Fishshell(鱼)因速度而出名。Python(蛇)、Php(象)、Perl(骆)和 JavaScript(犀)则各有独特之处。我这才理解到,为什么鬼会夜哭,天上会下粟雨。

(注:传仓颉造字后,鬼神啼哭,天降粟雨)

但以往从未有人使用过文言文进行编程。这并不是传承文脉、保护文心的好方法,所以我才产生了用文言文编程的想法。我目前还太年轻,读过的书也没有破万卷。如今身处遥远的国家(美国),也很久没有接触中文了。但是我一直对文学很有兴趣,编写的程序有时候也得到人们的一些肯定。正如王希孟和庄子一般,并不因为年轻或者知识的浩瀚无涯而退缩,于是写下了这些话。

(注:王希孟,北宋画家,18岁画成传世名作《千里江山图》)

我既没有像李贺那样呕心沥血,也没有像李商隐那样口角流沫(形容读书勤奋)。项目完成后,我将继续以干将铸剑的精神勉励自己,带着越王卧薪尝胆的精神继续向前。我自己虽想效仿《算经十书》的笔法,只是遗憾没有唐宋八大家那样淋漓的文笔。正如庾信在《哀江南赋》所写:「陆机听了心甘情愿地拍掌;张衡见了将轻视它也是理所当然」(意指如果被人嘲笑,也是理所当然,我不会太过介意)。

尽管这项目只有覆瓮的价值(一点微小的工作),但是还有完善的空间。虽然没有像吕不韦那样有一字千金的本钱,但是我对交流的渴望是一样的。

这也正是开源的精神内核,我们以此互相勉励吧。

作者是谁?

Lingdong Huang 目前是 CMU 计算机专业大四学生,明年就本科毕业了。我们可以看到他曾在迪士尼研究实验室、纽约时报等大厂实习过。而且从个人网站中,很明显可以发现他高中就开始做各种小项目,包括视觉和自然语言的都有。

写得了代码、读得了文言文,文化底蕴还这么强,现在的本科生已经这么厉害了。

个人网站:https://lingdong.works

文言文编程是什么情况

用文言文编程是什么样一种体验?是不是既能学习文言文,又能搞定编程逻辑?介绍不如演示,我们先看看编程世界里的第一段代码,广大程序员学习的第一句「HelloWord」是什么样的。如果读者们文言文比较溜,或者了解一点程序思维,那么可以了解,下面一段文言文代码就是输出三遍「问天地好在」,也就是「HelloWord」的文言文版。

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

具体而言,先定义一个数「3」,并命名为「甲」,现在循环「甲」次,每次在屏幕上打印出「問天地好在。」。作者会将其翻译成对应的 Javascript 代码,从而帮助我们理解。

var n = 3;
for (var i = 0; i < n; i++) {console.log("問天地好在");
}

当然,按照我们的习惯,改写成 Python 代码也是没问题的:

a = 3
for i in range(a):print("問天地好在")

为了更贴近文言文的表达习惯,Lingdong Huang 在项目表示各种标点和换行都是可以去掉的,上面的文言文代码可以等价写为:

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

突然感觉,好像没了符号的文言文代码更容易懂了?

这样看起来似乎很简单?那你就小瞧了文言文编程的魅力。比如说程序员入门必修课「斐波那契数列」,每一项都是前两项的和,第一项是 0、第二项是 0+1、第三项是 1+1 等等。

如果用文言文来写斐波那契数列,我们需要建立一个函数,函数的输入是斐波那契项数,输出是该项具体的值。如果用文言文来写,画风是这样的:

最后一句「施「斐氏列」於七。書之。」是调用函数,并输出第 7 个结果。虽然看上去比较麻烦,但我们还是可以细细阅读,例如「吾有一術。名之曰「斐氏列」。」很明显定义了一个函数,函数名是「斐氏列」;「若「因」等於零者。昔之「果」者。今「因」是矣云云。」表示如果「因」这个变量等于 0,那么就将「因」这个变量的值赋值到「果」变量。

如果阅读上还有困难,那么也可以看看项目作者提供的对应 Javascript 代码。不过我们可以尝试把它翻译成 Python 语言,翻译结果如下所示:

def fei_seq(yin):tou = 0wei = 1ji = 1guo = 0if yin == 0:guo = yinif yin == 1:guo = yinwhile True:if ji >= yin:breakans_ = tou +weiguo = ans_tou = weiwei = guoans_ = ji + 1ji = ans_return guoprint(fei_seq(7))

当然,Python 作为一种极其精简的语言,真正用它来写斐波那契数列肯定代码量要少很多。不过,借助这段翻译,理解文言文编程还是要简单很多的。如果读者想要试一试,可以复制这个 GitHub 项目,并在本地编译,也可以直接使用在线 IDE 编译你的代码。

下面,作为一种「新语言」,我们当然要了解它的神奇语法,不论是定义变量、函数,还是生成数列,文言文都有对应的语法。

语法规则

考虑到文言文和其他编程语言的转换有一定的理解难度,作者提供了一些语法转换规则表,供参考。

变量命名

条件/循环

数学计算

数组(列表)

这里从「1」开始计数。

函数

让你的代码更有逼格

看厌了黑底的代码?项目还提供了一个炫酷的「古文代码生成器」,我们可以把自己的文言文代码转换成古书中从右到左,从上到下,没有标点的古文。是不是更有 B 格了?这个生成器还有 SVG 文件,可以将代码再提取出来,重新运行。

以下为项目作者尝试的「图灵机」代码:

推荐阅读:
8 岁小学生 B 站教编程惊动苹果,库克亲自送生日祝福!B站收藏 6.1w+!GitHub 标星 3.9k+!这门神课拯救了我薄弱的计算机基础看完 GitHub 上这几个奇葩项目后,我忍不住笑了 233333
硬核! 逛了 4 年 GitHub,一口气把我收藏的 Java 开源项目分享给你!
GitHub 上有个沙雕开发者,做了款斗图工具后火了...

牛逼!用文言文来编程,97 年 CMU 本科生火遍全网!相关推荐

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

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

  2. 10 个牛逼的单行代码编程技巧,你会用吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 「程序猿DD」星球活动第一期进行中!点击了解详情! 翻译 ...

  3. 超酷炫技:10 个牛逼的单行代码编程技巧

    翻译 | 飒然Hang 来源 | https://www.rowkey.me/blog/2017/09/09/java-oneliners/ 原文 | https://github.com/aruld ...

  4. 编程十年 (2):前传2——哪有这么牛逼的游戏机?

    编程十年 (2):前传2--哪有这么牛逼的游戏机? 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/19/programming10year ...

  5. 几位阿里朋友重写的Java并发编程,牛逼了

    昨天在黄金时代群里和读者聊机械键盘大 F 的时候,好朋友 cxuan 推了一篇文章,吸引了我的眼球,名叫"太赞了,阿里几位工程师重写了 <Java 并发编程>",我看完 ...

  6. 牛逼的人,都已经开始用文言文写代码了!

    往期热门文章: 1.<往期精选优秀博文都在这里了!> 2.如何让自己少写点bug? 3.如何优雅地根治null值引起的Bug! 4.答应我,别再if/else走天下了可以吗? 5.Stac ...

  7. 在 B 站学编程,真滴牛逼!

    互联网让信息更容易触达,但是由于信息过于庞大,筛选出有价值的信息所花费的精力也会很大. 众所周知,B 站是一个学习的网站,很多人在 B 站上大学.考研.学编程,但 B 站的视频资源那更是五花八门,要从 ...

  8. 安卓编程用什么软件_震惊!安卓IOS都可以用的牛逼软件

    哈喽!小伙伴们大家好,在过去小辉辉推送的文章及软件中,小辉辉发现,大家普遍对观看影视的软件情有独钟,好了,为了满足大家一致的需求,小辉辉今天为大家推荐一个无论安卓手机还是苹果手机都可以用的牛逼影视观看 ...

  9. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

  10. 虽然这些代码很少,就几行,但却很牛逼!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:编程艺术思维 来源:urlify.cn/jqUree ...

最新文章

  1. EasyPHP-2.0b1+ Mantis-1.1.0安装及技巧
  2. RecycleView 动画实现
  3. c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
  4. problem a: 简单的整数排序_什么是基数排序?
  5. 【算法基础】数据结构导论第四章-树.pptx
  6. 实验4-2-3 pta验证“哥德巴赫猜想” (20分)
  7. C++类模板的三种特化类型
  8. TransR:实体和关系分开嵌入(知识图谱嵌入)2015 AAAI
  9. linux备份和还原设置密码,AnyBackup Linux操作系统备份与恢复最佳实践手册(33页)-原创力文档...
  10. BZOJ 1086: [SCOI2005]王室联邦( )
  11. python内点法_python射线法判断一个点在图形区域内外
  12. Linux keypad 设备树,beaglebone black通过devicetree配置矩阵键盘matrix-keypad
  13. u盘安装红旗linux操作系统,如何用u盘安装红旗linux?
  14. Bellman_Ford模版
  15. 酷派大神F1 联通版救砖线刷.docx
  16. 定积分的应用之 柱壳法求旋转体体积
  17. Google AutoValue详解
  18. 有关海盗湾墙外世界网站收藏
  19. LOL英雄联盟自动打人机训练升级【CircuitPython】
  20. Web作业表单的制作

热门文章

  1. Day33:Swift 和 Object - C
  2. Servlet原理:
  3. TCP 协议报文格式
  4. VS2015编译程序兼容XP
  5. 基于java的电子政务网的设计及开发
  6. java freepascal_Free Pascal
  7. php9.0论坛搭建默认,phpwind9.0
  8. 计算机汉字编码输入码,汉字编码、输入系统和码本
  9. redis的hscan命令
  10. 冰河木马简易使用 ——病毒木马 003