专栏首页JavaGuide文史上最骚的编程语言来了!大四学生发明言文编程语言!秀的我头皮发麻

文史上最骚的编程语言来了!大四学生发明言文编程语言!秀的我头皮发麻

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

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

到底是什么神仙项目,竟然获得如此高的评价?原来,这是一位卡内基梅隆大学(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/

本文分享自微信公众号 - JavaGuide(JavaGuide)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Guide 哥:有哪些程序员受用一生的好习惯?

    养成一个学习习惯和编程习惯真的太重要了,一个好习惯的养成真的对后面的学习有很大帮助。说实话我自己当初在这方面吃了不少亏,很多比较好的习惯我也是后面自己才慢慢发现...

    Guide哥
  • 涨姿势!2020最好的 10 大国外编程学习网站!

    在这篇文章中,我收集了 10 个最佳的编程学习网站,掌握编程技能可能是帮助你走出舒适区的一大步,新手程序员通常会觉得程序员市场的竞争太激烈,工作太有挑战性等。

    Guide哥
  • 直系学弟投稿!2020年应届生秋招面试回顾!

    这篇文章是我的直系学弟的投稿,这位学弟不仅和我待过一个社团,最后秋招还阴差阳错地和我做了同事。哈哈!缘分颇深。《JavaGuide面试突击版》出来之后,这位学习...

    Guide哥
  • Nodejs进阶:Express常用中间件body-parser实现解析

    body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析。使用非常简单,以下两行代码已经覆盖了大部分的使用场景。

    IMWeb前端团队
  • Java 10 var关键字详解和示例教程【面试+工作】

    在本文中,我将通过示例介绍新的Java SE 10特性——“var”类型。你将学习如何在代码中正确使用它,以及在什么情况下不能使用它。

    Java帮帮
  • DIY一个Sketch插件,生成猫猫狗狗的全家福

    最近朋友圈都在玩的全家福: ? 看了下是使用 cocos2D 引擎制作的, http://www.cocos.com/creator 主要是图片合成,利用前端...

    mixlab
  • linux 磁盘占满 查看占用

    参考https://blog.csdn.net/ithomer/article/details/89530790 查看某个目录的文件大小并排序(单位为MB)....

    平凡的学生族
  • javascript模式 读书笔记一

    模式是指一个通用问题的解决方案。 模式分三种 设计模式 编码模式:javascript特有的

    lilugirl
  • 在 Silverlight 5 项目中使用 async/await

    .Net 4.5 提供了 async/await 让异步编程回归同步, 不过, async/await 不是只能在 .Net 4.5 下才能使用, 通过使用 A...

    beginor
  • java10系列(二)Local-Variable Type Inference

    本文主要解读下java10的Local-Variable Type Inference

    codecraft

扫码关注云+社区

领取腾讯云代金券