年度最骚语言之文言文编程!!!
點擊上方“深度學習技術前沿”,選擇“星標”公眾號
前沿資訊,第一時間送達
年度最騷的編程語言來了!CMU大四學生發(fā)明文言文編程語言,項目如下所示:
就連中科院計算所研究員、機器翻譯領域知名專家劉群老師都贊嘆道:后生可畏
這個項目叫做Lingdong,可編譯成Javascript,也可編譯成Python,而且還有線上編輯器可直接運行。如今已經(jīng)在Github上標星7K,324個Fork(Github地址:https://github.com/LingDong-/)
而且發(fā)文前,Lingdong妥妥霸榜GitHub Trending日榜第一,單日斬獲4000+Star!下面還是來看看Lingdong怎么用吧。
想知道文言文如何輸出"Hello World"嗎?
請君睜圓雙眼注視于此:
吾有一數(shù)。曰三。名之曰「甲」。 為是「甲」遍。吾有一言。曰「「問天地好在。」」。書之。 云云。具體而言,先定義一個數(shù)「3」,并命名為「甲」,現(xiàn)在循環(huán)「甲」次,每次在屏幕上打印出「問天地好在。」。作者會將其翻譯成對應的 Javascript 代碼,從而幫助我們理解。
var?n?=?3; for?(var?i?=?0;?i?<?n;?i++)?{console.log("問天地好在"); }當然,按照我們的習慣,改寫成 Python 代碼也是沒問題的:
a?=?3 for?i?in?range(a):print("問天地好在")為了更貼近文言文的表達習慣,Lingdong Huang 在項目表示各種標點和換行都是可以去掉的,上面的文言文代碼可以等價寫為:
吾有一數(shù)曰三名之曰「甲」為是「甲」遍吾有一言曰「「問天地好在」」書之云云突然感覺,好像沒了符號的文言文代碼更容易懂了?
這樣看起來似乎很簡單?那你就小瞧了文言文編程的魅力。比如說程序員入門必修課「斐波那契數(shù)列」,每一項都是前兩項的和,第一項是 0、第二項是 0+1、第三項是 1+1 等等。
如果用文言文來寫斐波那契數(shù)列,我們需要建立一個函數(shù),函數(shù)的輸入是斐波那契項數(shù),輸出是該項具體的值。如果用文言文來寫,畫風是這樣的:
最后一句「施「斐氏列」於七。書之。」是調用函數(shù),并輸出第 7 個結果。雖然看上去比較麻煩,但我們還是可以細細閱讀,例如「吾有一術。名之曰「斐氏列」。」很明顯定義了一個函數(shù),函數(shù)名是「斐氏列」;「若「因」等於零者。昔之「果」者。今「因」是矣云云。」表示如果「因」這個變量等于 0,那么就將「因」這個變量的值賦值到「果」變量。
作者是誰:
這騷之過極的文言文編程語言,來自CMU本科生Huang Lingdong。如今大四,明年即將畢業(yè)。高中則畢業(yè)自上海世界外國語中學。
序言:
作者在項目開篇使用了一段文言文,介紹了建立這個項目的初衷。
翻譯如下:
在堯舜時代,人們使用結繩和數(shù)手指來計算。當時怎么能夠預料到,幾百代人之后計算機的巧妙呢!計算機比魯班(公輸盤)的木鳶更加精巧,比諸葛亮(武侯)的木牛流馬更好。此外,編程語言數(shù)量眾多,如同《天官書》記錄的星宿一般多,又比《山海經(jīng)》中記錄的飛禽走獸還要奇特。Go(鼠)、Rust(蟹)、Ruby(鑽)、Fishshell(魚)因速度而出名。Python(蛇)、Php(象)、Perl(駱)和?JavaScript(犀)則各有獨特之處。我這才理解到,為什么鬼會夜哭,天上會下粟雨。
(注:傳倉頡造字后,鬼神啼哭,天降粟雨)
但以往從未有人使用過文言文進行編程。這并不是傳承文脈、保護文心的好方法,所以我才產(chǎn)生了用文言文編程的想法。我目前還太年輕,讀過的書也沒有破萬卷。如今身處遙遠的國家(美國),也很久沒有接觸中文了。但是我一直對文學很有興趣,編寫的程序有時候也得到人們的一些肯定。正如王希孟和莊子一般,并不因為年輕或者知識的浩瀚無涯而退縮,于是寫下了這些話。
(注:王希孟,北宋畫家,18歲畫成傳世名作《千里江山圖》)
我既沒有像李賀那樣嘔心瀝血,也沒有像李商隱那樣口角流沫(形容讀書勤奮)。項目完成后,我將繼續(xù)以干將鑄劍的精神勉勵自己,帶著越王臥薪嘗膽的精神繼續(xù)向前。我自己雖想效仿《算經(jīng)十書》的筆法,只是遺憾沒有唐宋八大家那樣淋漓的文筆。正如庾信在《哀江南賦》所寫:「陸機聽了心甘情愿地拍掌;張衡見了將輕視它也是理所當然」(意指如果被人嘲笑,也是理所當然,我不會太過介意)。
盡管這項目只有覆甕的價值(一點微小的工作),但是還有完善的空間。雖然沒有像呂不韋那樣有一字千金的本錢,但是我對交流的渴望是一樣的。
這也正是開源的精神內核,我們以此互相勉勵吧。
語法規(guī)則
考慮到文言文和其他編程語言的轉換有一定的理解難度,作者提供了一些語法轉換規(guī)則表,供參考。
變量命名
條件/循環(huán)
數(shù)學計算
數(shù)組(列表)
這里從「1」開始計數(shù)。
函數(shù)
文言文編程“黑話”
Huang Lingdong同學應該是讀過《易經(jīng)》,畢竟易經(jīng)是最早論述二進制的古書。他用易經(jīng)的陰和陽代表布爾變量中的0和1。
“吾有”系列則被用來做定義:
吾有一數(shù)是定義int變量;
吾有一爻是定義布爾變量;
吾有一言是定義字符串;
吾有一術是定義函數(shù);
吾有一列是定義數(shù)組;
……
一般的編程里,循環(huán)判斷有if、while、for,文言文編程在這件事上更是變化無窮。下面就是一段文言文書寫的判斷語句:
若三弗大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。
翻譯過來就是:
if(3<=5){return?"of?course"} else{return?"no?way"}也許你會覺得if…else…語句用文言文太啰嗦,但是常用的for循環(huán),用文言文表達卻更為簡潔。
為是百遍。?? 云云。
它的意思是:
for?(var?i?=?0;?i?<?100;?i++){?...?}如果需要判斷某個變量human是否在world中,我們一般用for (var human of world),初學者看到for的這種用法可能會很困惑,而文言文的表示更接近普通人的理解。
凡「天地」中之「人」。?? 云云。
古有《易經(jīng)》,今有金庸小說,在展示定義函數(shù)的時候,Huang同學又皮了一下:
吾有一術。名之曰「六脈神劍」。欲行是術。必先得六數(shù)。曰「甲」。曰「乙」。曰「丙」。曰「丁」。曰「戊」。曰「己」乃行是術曰。??是謂「六脈神劍」之術也。
這里Huang同學將函數(shù)名定義為“六脈神劍”,這個函數(shù)總共有6個輸入。
funcion?f(a,b,c,d,e,f){…}還有更多好玩的函數(shù)定義:
安裝與使用
文言文編程只需將repo下載到本地,而且本地已經(jīng)安裝Node,就能立即使用。現(xiàn)在它支持將wenyan lang轉換成JavaScript和Python:
./build/wenyan.js?examples/helloworld.wy?-o?helloworld.js在這段命令中,如果不指定語言,程序將自動轉化為JavaScript,若想轉化成Python,請加入?yún)?shù)“—lang py”或是“-l py”。
用戶也可以自行編譯二進制文件。如果你只想嘗嘗鮮,在線IDE也是個不錯的選擇。
何出此“言”
至于,為何要炮制一門文言編程語言,少年為項目寫有一序,由此可窺一二 (后有解讀) :
夫唐、虞之世,結繩而足治,屈指而足算。是時豈料百代之後,計算機械之巧,精於公輸之木鳶,善於武侯之流馬;程式語言之多,繁若《天官》之星宿,奇勝《山經(jīng)》之走獸。鼠、蟹、鑽、魚,或以速稱。蛇、象、駱、犀,各爭文采。方知鬼之所以夜哭,天之所以雨粟。然以文言編程者 ,似所未有。此誠非文脈之所以傳,文心之所以保。嗟予小子,遂有斯志。
然則數(shù)寸之烏絲猶覆於頭,萬卷之素書未破於手;一身長羈于遠邦,兩耳久曠于雅言。然夫文章者吾之所宿好,程式者偶承時人之謬譽。故希孟不慚年少,莊生不望無涯。乃作斯言。誠未能嘔瀝長吉之心血,亦庶幾免於義山之流沫。既成之後,復學干將鑄劍而自飼,越王嚐糞而當先。自謂偶追《十書》之筆意,但恨少八家之淋漓。此子山所謂士衡撫掌而甘心,平子見陋而固宜。然則雖實覆甕之質,尚存斧正之望;雖乏呂相之金,易字之渴蓋同。此亦開源之大義,吾輩之所以勉勵也。一笑。
文中典故之多,恐無法在此一一注釋,便以劃重點之法,粗粗領會其意味,并簡要傳達為白話:
上古人類結繩記事,不會想到后代竟然發(fā)明了計算機。今天編程語言眾星閃耀,只是沒有人用文言編程。我人在國外,想念這些古典的言語,同時又擅長編程又有頭發(fā),決定為開源事業(yè)貢獻一份力量。
注:如想查看所有典故,請前往項目頁,出處皆有維基百科鏈接。
傳送門
項目代碼:
https://github.com/LingDong-/wenyan-lang
項目主頁:
http://wenyan-lang.lingdong.works/
線上IDE試玩:
http://wenyan-lang.lingdong.works/ide.html
個人主頁:
https://lingdong.works/
更多內容咨詢,請關注微信公眾號:
?
總結
以上是生活随笔為你收集整理的年度最骚语言之文言文编程!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yii2 ajax分页,Yii框架分页技
- 下一篇: 计算机视觉——SIFT算法