這味兒上頭,前有文言文,又來東北話,中文編程玩得挺得勁!_風聞
大数据文摘-大数据文摘官方账号-2020-08-25 15:44
大數據文摘出品
作者:曹培信
全宇宙都知道,東北話容易上頭,不知道用東北話編程,會不會上頭。
Google的一位華人高級軟件工程師/技術主管就開發了一款以東北方言為關鍵字的編程語言,並且在GitHub上進行了開源,並且還寫了一篇詳細教程來介紹這款語言。
項目地址:
https://github.com/zhanyong-wan/dongbei
文摘菌讀罷,唉呀媽呀,這味兒太上頭了!
“以人為本”新語言,先吹牛皮後實現
關於這個東北話編程語言,作者是這麼介紹的:
簡單啊!小學文化程度就行。您能看懂春晚不?能?那就沒問題。
好讀啊!看着看着包您不由自主地念出聲兒來。
開心啊!呃,做人嘛,最重要的是要開心。
開源啊!不但不要錢,而且不要臉 -- 隨時隨地歡迎東北話高手打臉指正。
作者顯然對自己開發的語言很有信心,直接表示:“這玩意兒可是填補了世界方言編程地圖上的一大片兒空地啊! 這麼説吧,誰要是看了 dongbei 程序能忍住了不笑,我敬他是純爺們兒!”
關於這個語言的開發過程,我們可以看出來作者的做法確實很有東北味。
具體來説,這款名為dongbei的編程語言的開發採用了業界領先的 TDD(TreeNewBee-Driven Development)方式,也就是每個功能都是先把文案寫好,八字沒一撇牛皮就吹起來了,然後根據牛皮寫測試案例,最後再實現功能讓牛皮不被吹破。
好一個“先吹牛皮後實現”!這款語言的安裝也很簡單,首先,dongbei語言是基於Python 3二次開發的,對環境以來很少,只要能有Python 3就都能跑。
安裝時直接跑src/dongbei.py就成,如果是Mac環境,可以按下面鏈接的教程做:
https://docs.python-guide.org/starting/install3/osx/
規則簡單明瞭,考前附帶小抄
Dongbei語言的規則也賊好理解,我們把常用的規則羅列一下,這樣對東北話不太熟悉的小夥伴也可快速上手。
詞法
字符串:很簡單,中文全角雙引號之間的內容就是一個字符串常量,比如:
…“我是一個字符串”…
註釋:在字符串常量外面出現 # 字符,#之後的內容為註釋內容,比如:
嘮嘮:# 我是一個註釋。
“嘎哈#?”。# 我還是一個註釋。
的效果等於
嘮嘮:“嘎哈#?”。
分詞:為了適應華人書寫習慣,對分詞這一塊來説,dongbei語言加不加空格換行都無所謂。比如:
嘮
嘮
:
“嘎哈?”
。
的效果等於
嘮嘮:“嘎哈?”。
名字:代碼裏面除了各種有特俗意義的關鍵詞(keyword),還會有各種用户定義的名字(變量名、函數名、類型名,等等)。 在dongbei語言裏面,除了關鍵詞、標點符號和常數,剩下的都是名字。 比如,在“張三乘李四”這個 dongbei 語言表達式裏,“乘”是一個關鍵詞,“張三”和“李四”是兩個不同的名字。
並且,為了解決名字和關鍵詞之間需不需要回避的問題,dongbei語言允許你用中文全角方括號【】把一串字符標註為名字。 比如,“【階乘】”就明明白白地是一個叫“階乘”的名字,絕對不會被當成是名字“階”加關鍵詞“乘”。
常數:除了用阿拉伯數字表示的十進制整數(比如 2、42、250,等等),0 到 10 的常數也可以用中文表達:
零一二(兩/倆)三(仨)四五六七八九十
語法
對於dongbei的語法問題,作者表示,一個 dongbei 程序是由一串語句組成的。 每個語句以句號(。)結束。 為了表達程序員熾熱的感情,也可以用感嘆號(!)結束,意思和句號是一樣一樣的。 大家可以根據自己的心情任選使用。
並且,除了GitHub中詳細到有點“婆媽”的README,作者還放出了一個小抄,方便大家在寫代碼時碰到問題直接參考。
變量
老張是活雷鋒。# 定義變量。初始值:啥也不是。
老張裝二。# 老張 = 2
削老張。# 老張 = 啥也不是
老王是活雷鋒。老王裝仨。# 老王 = 3
老張裝老王。# 引用變量。老張 = 3
運算
老張走走。# 老張 += 1
老張走兩步。# 老張 += 2
老張稍稍。# 老張 -= 1
老張稍三步。# 老張 -= 3
老張裝老王加二。# 老張 = 老王 + 2
老張裝(老張減三)除以五乘老王。# 老張 = (老張 - 3)/5*老王
老張裝 老張齊整整地除以老王 # 老張 = (老張 / 老王),只留整數部分
比較
老王比5大
7加二比老劉小
老張跟老王一樣一樣的
老李跟250不是一樣一樣的
老劉啥也不是
打印
嘮嘮:“唉呀媽呀”。# 打印字符串常量。
嘮嘮:老王。# 打印變量的值。
嘮嘮:老王比老張大。# 打印表達式的值。
嘮嘮:“老王是”、老王。# 打印兩個表達式的並置。
條件
尋思:老王比老張大?
要行咧就嘮嘮:“老王!”。
要不行咧就嘮嘮:“老張!”。
循環
老王從1到10磨嘰:
嘮嘮:老王。
磨嘰完了!
組合
尋思:老王比老張大?
要行咧就開整:
嘮嘮:“老王!”。
嘮嘮:“你好美!”。
整完了。
套路
【階乘】(那啥)咋整:# 定義套路 階乘,有一個參數 那啥。
尋思:那啥比一小?# 需要自推嗎?
要行咧就 滾犢子吧 一。# 返回值1。
要不行咧就 滾犢子吧 那啥乘整【階乘】(那啥減一)。# 需要。返回自推結果。
整完了。# 定義結束。
嘮嘮:整【階乘】(五)!# 使用套路
幫襯
翠花,上 math。# 導入 python math 模塊。
嘮嘮:整 math.factorial(五)。# 整個 python 套路。、
在中文編程的路上越走越嗨的程序員們
這個項目的作者是一位 Google 的高級軟件工程師/技術主管,已經在谷歌工作了15年,同時也是Google C++測試框架 googletest以及googlemock 的原作者。
從頭像就能看出是個不一樣的程序員了,畢業於中國科技大學、中科院大學和耶魯大學,還曾在微軟工作了兩年,目前在為谷歌Ads開發大規模流數據處理系統。
除了這個“天雷地火”般的東北方言編程,之前還有一箇中文編程項目——“文言文” 編程,大四在讀的作者用文言文中語言作為規則創作了一款編程語言,可編譯成Javascript,也可編譯成Python,亦有線上編輯器 (IDE) 可直接操作,不可謂不“騷”。
這款文言文編程可謂文理兩開花,已經在GitHub獲得14.8k的標星。我們來簡單看一下文言文編程的定義,就知道這個語言有多“好玩”了:
吾有一數是定義int變量;
吾有一爻是定義布爾變量;
吾有一言是定義字符串;
吾有一術是定義函數;
吾有一列是定義數組;
……
文言文編程:
https://github.com/wenyan-lang/wenyan
無論是“文言文”編程,還是東北方言編程,很多人都表示這就是一種“套裝”,沒有實際意義。但是!程序員的工作已經如此單調,大家做的這些的項目,“好玩”本身不就是意義麼!