点击“技术领导力”关注∆  每天早上8:30推送

来源:开源最前线(ID:OpenSourceTop)

这两天刷微博、朋友圈、公众号,发现大家都被一个文言文编程的项目圈粉了。

就连中科院计算所研究员、机器翻译领域知名专家刘群老师都赞叹道:后生可畏

到底是什么神仙项目,竟然获得如此高的评价?原来,这是一位卡内基梅隆大学(CMU)的大四学生开发的基于文言文的编程语言。

这个项目叫做Lingdong,可编译成Javascript,也可编译成Python,而且还有线上编辑器可直接运行。如今已经在Github上标星7K324个Fork(Github地址:https://github.com/LingDong-/)

而且发文前,Lingdong妥妥霸榜GitHub Trending日榜第一,单日斩获4000+Star!下面还是来看看Lingdong怎么用吧。

假如你想知道文言文是如何输出“Hello World”?,你会发现原来是这样的:

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

编译成JavaScript是这样的:

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

输出是这样的

問天地好在。
問天地好在。
問天地好在。

再比如,我们大学时候的编程,总会有一道求100以内素数的练习题,放到文言文里会是怎样的呢?这时候,你就要用到一个名为“埃氏筛”的算法,完整文言文如下:

编译成JavaScript就是如下这样:

var 埃氏篩 = () => 0;
埃氏篩 = function(甲) {var 掩 = [];for (var _rand1 = 0; _rand1 < 甲; _rand1++) {掩.push(true);};var _ans1 = 甲 / 2;var 甲半 = _ans1;var 戊 = 2;while (true) {if (戊 == 甲半) {break;};var 戌 = 2;while (true) {if (戌 == 甲半) {break;};var _ans2 = 戊 * 戌;var 合 = _ans2;if (合 <= 甲) {掩[合 - 1] = false;} else {break;};var _ans3 = 1 + 戌;戌 = _ans3;};var _ans4 = 1 + 戊;戊 = _ans4;};var 諸素 = [];var 戊 = 2;while (true) {if (戊 == 掩.length) {break;};var _ans5 = 掩[戊 - 1];var 素耶 = _ans5;if (素耶) {諸素.push(戊);};var _ans6 = 1 + 戊;戊 = _ans6;};return 諸素
};
var _ans7 = 埃氏篩(100);
console.log(_ans7);

最后,我们来看看运行结果:

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97

猿妹找不到文言文来夸它,那就只能说出一个字:牛!!!

此外,作者还提供了一个在线的IDE,你不妨赶紧试试,地址:http://wenyan-lang.lingdong.works/ide.html

你以为这就够了么?当然不,作者还做了个图灵机demo:

相关语法表

下面,我们在来看看相关的语法表,比如他是如何定义一个变量的:

还有一些运算是如何定义的呢?如下:

还有基本的数学运算:

最后还有函数定义:

看到这里,猿妹只能自叹自己没文化了,当年没能好好动脑敲代码。

安装与使用

说了这么多,要如何安装使用呢?你只需要克隆此项目, (或者直接下载 ./build/wenyan.js 然后赋予它执行权限,在终端中输入 chmod +x wenyan.js)。 之后执行 ./build/wenyan.js 把源代码编译成为目标语言。如果执行此命令不带任何参数,则输出以下帮助信息。

Usage: wenyan [options] [input files]Options:
--eval    -e <string>  : Give a string instead of a file (default: `')
--exec    -x <boolean> : Execute output (default: `false')
--inspect -i <boolean> : Interactive REPL (default: `false')
--lang    -l <string>  : Language: js/py (default: `js')
--log        <string>  : Log file (default: `/dev/null')
--output  -o <string>  : Output file (default: `/dev/stdout')
--roman   -r <boolean> : Romanize identifiers (default: `true')

然后就可以尝试编译几个简单的例子啦:

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

如果你只是尝鲜,就通过前面的IDE地址就可以体验啦。

关于作者

作者是一名卡内基梅隆大学的大四学生,将在2020年取得计算机科学学位,虽然还未毕业但已经有多个实习经历。也有自己的个人项目网站。

通过他的Github主页,你还可以找到很多有趣的项目,例如可以用程序无限生成的中国山水画,age2death(抖音很火的看着自己慢慢变老),edges2calligraphy(把你的涂鸦变成中国书法)格律诗编辑程序,隐士等等,从这些项目可以看出,这是一个对中国文化很感兴趣的小哥哥。

最后再附上他的主页地址:https://lingdong.works/

如果觉得文章对您有帮助,请转发朋友圈、点在看,让更多人获益,感谢您的支持!

大家在看:

1.王垠受邀面试阿里P9,面跪后怒发文P10赵海平

2.梁宁:人一通透,就不怎么算小账

3.支付宝"配音女神",5亿人听过她声音,31岁单身


想下载阿里业务中台50页ppt?

关注“技术领导力”公众号,回复:中台

想加入社区,跟100位互联网大咖学习?

添加群助理Emma,注明“加群”

技术领导力社群

好看就点在看

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

  1. 云闪付小程序吃坑,太坑了,整个人都要烧了,找遍全网都找不到这么详细的开发资料了

    因为公司需要让研究云闪付小程序,一开始以为像微信小程序一样.打包后基本能改主体类名放各个平台上跑,然后在研究中发现云闪付官方开发者工具难用的一匹,简直找不出哪个IDE能与此匹敌了.首先找遍全网也查不到 ...

  2. 徐州哪有教计算机编程的,太牛了!徐州这家青少年编程培训中心除了教编程,还教给孩子最宝贵的……...

    Hello,everyone! 明天就是大年三十啦! 爱小橙已经陪大家走过一年啦! 乔布斯(苹果创始人)说过,这个国家每个人都应当学习如何写计算机程序,因为它教你如何思考.学习编程,将培养孩子以下的能 ...

  3. 97年世界编程大赛第一名写的程序……看完很无奈 太牛了

    97年世界编程大赛第一名写的程序--看完很无奈 太牛了 保险起见大家运行完了还是删除哈,然后运行之前最好也看看..俺不懂,万一有啥问题俺能不负责吧 这个程序是97年Mekka '97 4K Intro ...

  4. 文言文生成器_英语不好,学编程太困难?或许用文言文来编程你就更加容易上手了!...

    「昔者苍颉作书,而天雨粟,鬼夜哭」,汉字的出现,诞生了世界上一个伟大的文明.而编程语言的出现,让人类和计算机产生了真正的联系,推动了现代文明的发展.那么,将古代汉语和编程语言结合又会产生怎样的火花?最 ...

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

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

  6. python播放视频 命令_一行命令下载全网视频,这个命令太牛逼了!

    原标题:一行命令下载全网视频,这个命令太牛逼了! 相信大家有遇到这样的情况,在网站上看到一些不错的视频,想要下载下来,但是没有找到网站的下载入口. 虽然像优酷.爱奇艺.腾讯视频都有自己的客户端,但下载 ...

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

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

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

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

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

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

最新文章

  1. 合格SEOER应该具备的能力
  2. 数据库事务的隔离级别 (转)
  3. 用BadgeView在actionbar menu上显示提醒信息
  4. GPU与CPU对比测试
  5. java中集合和数据库中_java中list集合的内容,如何使用像数据库中group by形式那样排序...
  6. 4.1 陷入不归路的调试-机器学习笔记-斯坦福吴恩达教授
  7. JZOJ 5192. 【NOI2017模拟7.2】容器
  8. Eclipse换常用的快捷键
  9. java 配置写成表达式_Java的正则表达式之小结
  10. java的System.getProperty()方法可以获取的值
  11. Windows下DNS ID欺骗的原理与实现
  12. 软能力那点事,你知多少
  13. ROS中阶笔记(十一):ROS 2.0
  14. Quick-cocos2d-x3.3 Study (五)--------- 添加按钮
  15. JavaScript验证表单数据,HTML自动验证表单数据是否为空,数字范围
  16. 全球顶级金融机构Citadel:堡垒如何建成|精品投行系列二
  17. 用slub track调试use after free问题
  18. 投资理财学习笔记五,1.6那些必知的宏观经济指标(下)
  19. dcp 1519 linux驱动下载,dcp1519驱动
  20. java long精度问题_解决Long类型超过16位丢失精度问题的两种方法

热门文章

  1. Hbase(二)Client客户端
  2. 凌思微-LE5010蓝牙开发(三)
  3. 【新博客】个人新博客地址-[NDASH - 蘇小沐学习圈 (writebug.com)]
  4. Pacemaker 安装与配置
  5. linux jdk1.8 64位下载永久地址,ubuntu,centos,java
  6. Oracle 子查询in字句优化
  7. 用python如何画矩形_python怎么画矩形
  8. 腾讯云人脸核身uniapp+后端代码
  9. IEEE 802标准总结
  10. Go语言之Windows 10开发工具LiteIDE初步使用