開源最前線(ID:OpenSourceTop) 猿妹綜合整理
猿妹這兩天刷微博、朋友圈、公眾號,發現大家都被一個文言文編程的項目圈粉了。
就連中科院計算所研究員、機器翻譯領域知名專家劉群老師都讚歎道:後生可畏
到底是什麼神仙項目,竟然獲得如此高的評價?原來,這是一位卡內基梅隆大學(CMU)的大四學生開發的基於文言文的編程語言。
這個項目叫做Lingdong,可編譯成Javascript,也可編譯成Python,而且還有線上編輯器可直接運行。如今已經在Github上標星7K,324個Fork(Github地址:https://github.com/LingDong-/)
而且發文前,Lingdong妥妥霸榜GitHub Trending日榜第一,單日斬獲4000+Star!下面還是來看看Lingdong怎麼用吧。
假如你想知道文言文是如何輸出「Hello World」?,你會發現原來是這樣的:
吾有一數。曰三。名之曰「甲」。為是「甲」遍。吾有一言。曰「「問天地好在。」」。書之。云云。
編譯成JavaScript是這樣的:
varn=3;for(vari=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 把源代碼編譯成為目標語言。如果執行此命令不帶任何參數,則輸出以下幫助信息。
然後就可以嘗試編譯幾個簡單的例子啦:
./build/wenyan.jsexamples/helloworld.wy-ohelloworld.js
如果你只是嘗鮮,就通過前面的IDE地址就可以體驗啦。
關於作者
作者是一名卡內基梅隆大學的大四學生,將在2020年取得計算機科學學位,雖然還未畢業但已經有多個實習經歷。也有自己的個人項目網站。
通過他的Github主頁,你還可以找到很多有趣的項目,例如可以用程序無限生成的中國山水畫,age2death(抖音很火的看着自己慢慢變老),edges2calligraphy(把你的塗鴉變成中國書法)格律詩編輯程序,隱士等等,從這些項目可以看出,這是一個對中國文化很感興趣的小哥哥。
最後再附上他的主頁地址:https://lingdong.works/