近日, GitHub 上一个叫做文言文 (wenyan) 的编程语言项目火了, 就在本文成文期间, GitHub 上的 Star 数已经从 2200 涨到 2800, 并还有继续上涨的趋势. 只需要在在线编辑器上, 或下载一个编译器, 就可以用文言文进行编程. 让人惊讶的是, 这个涉及思路清奇的项目竟然出自卡内基梅隆大学的一名大四学生之手, 不禁让人感叹后生可畏.
文言文 (wenyan) 是一种深奥的编程语言, 遵循中国古典文学的语法和文风. 据介绍, 这种编程语言文字仅包含繁体中文字符和 "''引号, 因此古代中国人绝对看得懂. 是不是觉得很新奇? 那不妨动动你的小手尝试一下吧, 可以在在线编辑器上试用, 也可以下载编译器或查看源代码.
在线编辑器: http://wenyan-lang.lingdong.works/ide.html
下载编译器: https://github.com/LingDong-/wenyan-lang#installation
开源代码: https://github.com/LingDong-/wenyan-lang
这个项目受到了大家很多好评, 有人说项目的设计思路奇特, 有人表示在学编程的同时还顺带学习了文言文, 一箭双雕.
那么, wenyan 究竟是怎么玩的? 我们来跟着 GitHub 学习一下.
语法
正如如名, 文言文 (wenyan) 遵循古文言文的语法:
编辑
wenyan 目前可编译为 JavaScript 或 Python, 将来可能会支持更多语言 (比如 C). 上面的 "Hello World" 示例(或任何编辑) 将转换为:
varn =3;for(vari =0; i < n; i++) {console.log("問天地好在");}
输出结果:
問天地好在
問天地好在
問天地好在
标点和换行符是完全可选的(就像古文言文一样), 因此上面的代码等效于:
吾有一數曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之云云
上面的代码是可编辑的, 你可以自定义问候语并点击!
另一个稍微复杂一点的示例, 使用埃及筛查找素数:
注: 埃拉托斯特尼筛法, 简称埃氏筛或爱氏筛, 是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法. 要得到自然数 n 以内的全部素数, 必须把不大于根号 n 的所有素数的倍数剔除, 剩下的就是素数. 来源 | 百度百科
你可以在在线 IDE 上找到更多示例, 例如通用图灵机, 曼德勃罗分形图, 汉诺塔等.
特征
NLP 遵循古文言文语法
编译为 JavaScript 或 Python
图灵完备 (https://github.com/LingDong-/wenyan-lang/blob/master/examples/turing.wy 在可计算性理论里, 如果一系列操作数据的规则(如指令集, 编程语言, 细胞自动机) 可以用来模拟单带图灵机, 那么它是图灵完备的.)
在线 IDE http://wenyan-lang.lingdong.works/ide.html
入门示例 https://github.com/LingDong-/wenyan-lang/tree/master/examples
安装
编译器
克隆存储库(或下载 ./build/wenyan.JS 并设置其可执行位 chmod +x wenyan.JS). 然后运行 ./build/wenyan.JS, 把你的 wenyan 源代码编译为目标语言. 调用不带参数的编译器将显示帮助消息, 如下所示:
Usage: wenyan [options] [input files]Options:--eval -e : Give astringinsteadofa file (default: `')--exec -x : Execute ouput (default: `false')--inspect -i : Interactive REPL (default: `false')--lang -l : Language: JS/py (default: `js')--log : Log file (default: `/dev/null')--output -o : Output file (default: `/dev/stdout')--roman -r : Romanize identifiers (default: `true')
首先尝试构建包含的示例, 例如:
./build/wenyan.JS examples/helloworld.wy -o helloworld.JS
构建平台特定的二进制文件
克隆仓库
- NPM install
- NPM run make_cmdline
macOS,Windows 和 Linux 二进制文件将位于./build 文件夹中.
语法备忘单
该项目团队正在加紧构建与上下文无关的语法描述. 同时, 你还可以查看以下备忘单或 src/parser.JS 了解该项目语法.
变量
管理
数学
容器
数组是 1 索引的.
特征
渲染器
src / render.JS 可以将 wenyan 程序渲染为有历史感的印刷书籍页面图像. 它还可以将生成的 SVG 文件解析回原始程序. 下面是用 wenyan 编写的通用图灵机的渲染图:
出自 CMU 大四学生之手
值得注意的是, 这个思路清奇的设计竟然出自一名卡内基梅隆大学的大四学生 Ling Dong Huang.
在 作者简介中, Ling Dong Huang 表示自己将于 2020 年获得计算机科学学位, 此前, 他曾在迪士尼研究院, Antimodular 研究院和《纽约时报》实习, 自己也做了项目网站 https://lingdong.works/. 目前已经有将近 30 个项目. 项目主题丰富多彩, 比如用 emoji 做成的小游戏, 使用用户提交的涂鸦做成的计算机动画, 以及和本文一样对中国下手, 把中国表意文字和部首做成可视化动画, 等等, 并给出了项目的源代码.
"我自己是一名从事了 5 年前端的老程序员, 辞职目前在做讲师, 今年年初我花了一个月整理了一份最适合 2019 年学习的 web 前端干货, 从最基础的 HTML+CSS+JS 到移动端 HTML5 到各种框架, 实战项目都有整理, 送给每一位前端小伙伴, 这里是小白聚集地, 欢迎初学和进阶中的小伙伴."
想要学习 Web 前端的加群: 965747894
来源: http://www.jianshu.com/p/40c6219f9255