原标题:服了!年度最强的编程语言来了!它不是Python!

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

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

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

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

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

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

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

吾有一數。曰三。名之曰「甲」。

為是「甲」遍。

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

云云。

编译成Java是这样的:

varn = 3;

for( vari = 0; i < n; i++) {

console.log( "問天地好在。");

}

输出是这样的

問天地好在。

問天地好在。

問天地好在。

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

编译成Java就是如下这样:

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 stringinstead ofa 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/

责任编辑:

python 做山水画_服了!年度最强的编程语言来了!它不是Python!相关推荐

  1. python做交易软件_我用Python做了个量化交易工具!

    量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标.量化 ...

  2. python 做网页_女生30岁以前,怎么早做打算

    庆哥 爱美水瓶座玩转广式煲汤养生干货总结癖有位网友说,她人生焦虑值达到巅峰是29岁那一年.即将步入30岁大军,已婚未育,工作7年,工资和入职时差不了多少,想跳槽又尴尬.在职场里,30岁,是不是女人的大 ...

  3. python做运动控制_第一课:用Python操控小龟小车运动

    欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...

  4. python做日历牌_中秋节到了,送你一个Python做的Crossin牌“月饼”

    明天是难得一见的国庆中秋双节合一,在这里除了祝大家节日快乐之外,我们还要送上一个"月饼"--当然这个月饼是不能吃的,因为它是用python做的.先给大家看一下效果图. 图1. 月饼 ...

  5. python做单元测试_如何使用python做单元测试?

    很多编程小白不太理解单元测试,为什么要进行单元测试呢?很简单,主要是提高代码的正确,同时确保重构不出错.接下来我们一起学习怎么用python做单元测试吧. python内置了一个unittest,但是 ...

  6. java做爬虫和python做爬虫_为什么常用Python,Java做爬虫,而不是C#C++等?

    我写了爬虫在c#和java.区别不大,原则是充分利用正则表达式.这只是一个平台的问题.后来我才知道,许多爬虫是用python编写的.因为我不熟悉python目前,我不知道为什么.百度给了以下结果:1) ...

  7. python做统计分析_用Python做数据分析,Numpy,Pandas,matp

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包,我最开始学习pandas是看的<利用Python进行 ...

  8. python做物联网_使用Python来做物联网,就是这么easy!

    搭建整套物联网系统的方法有很多,最近四处捣鼓,使用python + 阿里云搭建一套最简单的物联系统,可以将单片机上的数据通过阿里云传输到PC端. 一.基本结构 先看架构图 框架.png 二.设备端接入 ...

  9. 用python做数据挖掘_你用 Python 做过什么有趣的数据挖掘项目?

    有网友在知乎提问:「你用 Python 做过什么有趣的数据挖掘项目?」 我最近刚开始学习 Python, numpy, scipy 等, 想做一些数据方面的项目,但是之前又没有这方面的经验.所以想知道 ...

最新文章

  1. ztree html写法,ztree.html
  2. LeetCode----13. 罗马数字转整数
  3. C++学习之路 | PTA乙级—— 1012 数字分类 (20分)(精简)
  4. Oracle中备份用户对象的两种方法
  5. LeetCode栈专题-1(go/py3/c++)
  6. leetcode 95 python
  7. DPM2010保护Sharepoint
  8. python安装virtualenv_python安装virtualenv虚拟环境步骤图文详解
  9. 图形用户界面GUI会被淘汰吗
  10. mysql中的默认表_MySQL中表的默认类型为( )。_学小易找答案
  11. 编码的奥秘:电筒密谈
  12. html修改成透明色,在html2canvas中将透明颜色更改为白色
  13. 安卓手机设置指定文件夹下的图片、视频不被相册读取到
  14. flutter插件开发(一)
  15. 一篇关于校园的爱情故事:伤感
  16. MySQL数据库安全
  17. C#事件中sender和e参数的理解
  18. 影子系统、沙盒、虚拟机
  19. 将一根木棍分成三段,求这三段构成三角形的概率 和  在一圆周上任意取三个点构成锐角三角形的概率是多少
  20. 相机模型、相机标定及基于yolov5的单目测距实现

热门文章

  1. python如何调用c++numpy.ndarray代码_python – 在cython中使用numpy:定义ndarray数据类型/ ndims...
  2. 36岁自学python_Python语言基础
  3. pmp知识点详解-项目大牛整理_PMP核心知识点—第五章:项目范围管理(1)
  4. 【关于重载OnBackPressed无效的解决方案】
  5. java   web servelt
  6. Servlet的延迟加载和预加载
  7. OAuth2.0 基础概述
  8. jquery ajax中使用jsonp的限制[转]
  9. 无法使用index seek的写法
  10. 利用XSLT把ADO记录集转换成XML