程式設計師用中文編程不遠咦——居然是用「文言文」寫出來的

2020-12-11 雲存儲小天使

畢竟有易語言在前,有人認為中文可以降低國人學習編程的門檻,也增強漢語的國際地位。然而最近大火的文言文程式語言,讓你明白什麼叫「中文比英語還難」。

Hello wenyan

最近有個 GitHub 項目火了 —— 文言程式語言 / wenyan-lang。

現在這個項目已經超過 10K Stars 了,咱趕緊來研究下。

學語言嘛,當然先從 「Hello world」 開始,看看文言版怎麼寫:

吾有一數。曰三。名之曰「甲」。為是「甲」遍。 吾有一言。曰「「問天地好在。」」。書之。云云。

沒看懂,編譯成 JavaScript:

var n = 3;for (var i = 0; i < n; i++) { console.log("問天地好在。");}

運行:

問天地好在。問天地好在。問天地好在。

完全的中文編程有木有,使用古漢語語法,具有圖靈完整性,可以編譯成 JavaScript 或 Python。

如同古人篆書一般,一頓之乎者也,程序寫好了!

基礎語法

趕緊學起來,第一章變量走起,中文編程肯定不能用 abc,還好我們有甲乙丙: JavaScript

true/false 我們也有對應的 陽/陰(繁體的陽/陰),類型就稱為「爻」(卦符的基本符號):

if 判斷也沒問題:

循環更為簡潔,直接聲明次數,最後以云云結尾:

加減乘除一應俱全,連邏輯運算符都支持:

容器類型也支持,而且尊重漢語習慣,首個下標是從一開始:

代碼實例

作者提供了經典程序題目的文言版代碼,比如埃拉託斯特尼篩法、 快速排序、曼德博集合、漢諾塔。

另外作者還提供了在線 IDE,可以直接編譯執行代碼。

快排

曼德博集合

看完這些代碼讓我感覺:

《九章算術》就是一本算法導論;

《孫子兵法》就是一本安全攻防;

《易經》大概是一本二進位逆向吧...

一些題外話

該項目的作者名叫 Huang Lingdong,卡內基梅隆大學(CMU)計算機專業大四學生。這麼一位世界頂級高校的大佬,做這個項目其實只是一個期末作業亦或業餘愛好。

點進 issues,廣大中國編程愛好者也表達了對作者的敬佩:

然而當我也驚嘆這個項目的腦洞和創意時,在 issues 裡還是看到了一些令我非常不悅的話題:

這位兄弟的腦洞看來比作者還大...

不然怎麼把一個程式語言聯繫到風投...

這位兄弟前半句是對的,但後半句似乎有一些鄙夷和不屑?

我在下邊回復給他一個表情:

當然哪裡都少不了「意義黨」:

真是哪裡都有上綱上線的人,作者自娛自樂寫了一個開源項目,為此查閱大量古漢語資料,也不圖什麼名利,就獲得幾千 Stars,就成為了某些人嘴裡的恰爛錢、無意義、垃圾項目。

而當我點開這些人的頭像時,發現他們掛著都是一些 Fork 和不明所以的 Repo,我也不知道他們掛這些的意義是什麼...

我當然也從源碼看出,這個項目可能叫「解釋器」更貼切一些,但作者也從來沒說這是一個多麼認真、能用於生產環境的正式項目。

Esolang

如果你和上面的他們有類似的想法,那麼我給你普及一個編程名詞:

Esoteric programming language,簡稱 Esolang,它們的設計被用於測試計算機語言設計的極限,作為一個概念的證明,或僅僅是一個玩笑。Esolang 創作者通常並不打算讓它成為主流程式語言,他們幾乎不會在意語言的可用性,甚至恰恰相反,會故意增加使用難度。

比如 Brainfuck,它是在 1993 年被創造的程式語言,語法僅包含八種符號,沒有任何單詞,用它列印 Hello world 是這樣的:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

再比如 MarioLANG,它同樣只能使用符號,需要使用形似馬裡奧關卡的語法來書寫:

++++: > > +:+:+:+:+:+:+:::::====+ >^=== """================= +:-):(:^= = ! ========= = # = ! .+.,:-< =### ======"

Parenthesis Hell,言如其名,括號地獄,只能使用括號來書寫:

(()()(()()(()()()()((()()(()(()((()((()()()((()((()()()((()((((()()(()()()()()()(((()(((()((()((((()(((()()(()()((()((()()()((()()(()()()()(()()()()(()()()()(()(())))))))))))))))))))))))))))))))))))))))))))))))))

所以 wenyan-lang 實際也屬於 Esolang,並不是用於生產的語言,你在這些語言中尋找意義,我覺得你這種行為就挺沒意義的...

相關焦點

  • 用文言文來編程,97 年 CMU 本科生火遍全網!
    最近,GitHub 上出現了一個文言文做代碼的項目,幾乎是世界上第一門文言文程式語言(當然,底層還是轉換成 Python 或 JavaScript 運行)。如果中文是程式語言中使用的主要語言,我們中國人學習編程是否會更簡單?這是知乎上討論非常火熱的話題。很多接觸過編程的人都知道「易語言」,這是一種使用中文代替程式語言中的英文的程式語言,同樣可以實現程序功能。
  • 為什麼不能用中文進行編程,而英文卻可以?程式設計師的分析很透徹!
    很多人都認為程式設計師很厲害,而且心中對他們有一絲敬佩,那這麼複雜的程序,他麼究竟是怎麼寫出來的呢?不知道大家有沒有注意一個細節,那就是編程都是英文,如果用中文去編譯的話,那就是出現很多「bug」,有時候甚至會出現亂碼,也就是說到目前為止,還沒有程式設計師能夠用中文來編譯,為什麼不能用中文進行編程,而英文卻可以?程式設計師的分析很透徹!
  • 程式設計師必讀經典長文:用十年時間自學編程
    在亞馬遜使用「title: teach, yourself, hours, since: 2000」進行高級搜索,我發現了 512 本這樣的書。在排在前十名的書籍中,有九本是編程書籍,剩下一本是關於財務管理的。用「teach yourself」代替「learn」,或者用「day」代替「hours」產生的結果類似。
  • Google 程式設計師整了個東北方言程式語言
    程式設計師的那些事(id:iProgrammer)文言文程式語言,大家都還記得吧2019 年 12 月,火了一個文言文編程項目 wenyan-lang。2020 年 1 月 31 日,知名雜誌 IEEE Spectrum 報導了文言文程式語言。後有東北方言程式語言疫情之下,大家響應號召宅家。1 月 30 日,「程式設計師的那些事」公號還發了一張趣圖,調侃程式設計師自我隔離太久做的瘋狂項目。
  • 為什麼程式設計師編程時,都是用英文而不用中文?看完長見識了
    如果大家看過程式設計師編程的話,就會發現程式設計師在寫代碼的時候全部都是由英文或者標點符號組成的。很多人也有了疑問,為什麼編程一定要用英文呢,用中文難道不行嗎?其實用漢字編程也不是不行,有一門叫做易語言的編程平臺,就是用漢字編程。
  • 文言文程式語言,讓你明白什麼叫「中文比英語還難」.
    畢竟有易語言在前,有人認為中文可以降低國人學習編程的門檻
  • 文科生學不會,理科生看不懂,這種國產程式語言居然還有IDE
    她是用文科生的表達形式,是用理科生的邏輯思維,屬於逆天一般「驚天地泣鬼神」的另類。它就是一個大學生開源的程式語言:文言文程式語言。可能有些朋友知道,在全球知名的開源託管平臺上已經發布。這個文言文漢字程式語言是卡內基梅隆大學(CMU)的大四學生開發的,利用 NLP 的一些技術,將文言文程序語法轉換到 JavaScript 或 Python 運行,並不是簡單地將程序中的英文字符換成了中文。可能很多人就「恍然大悟」了,原來就是Python啊,所以可能也就不當回事兒。
  • 這味兒上頭,前有文言文,又來東北話,中文編程玩得挺得勁!
    全宇宙都知道,東北話容易上頭,不知道用東北話編程,會不會上頭。Google的一位華人高級軟體工程師/技術主管就開發了一款以東北方言為關鍵字的程式語言,並且在GitHub上進行了開源,並且還寫了一篇詳細教程來介紹這款語言。
  • 程式設計師用文言文幽默論述技術觀點,網友:優秀!
    關於「程式設計師」這個話題,也是經常被人們不厭其煩的討論,每次都不重樣,每次都能討論出新高度,我想這個大概與程式設計師特徵有關,雖然程式設計師主業是技術,但是在技術的範疇內,他們也能變著法的整出一些新花樣來,時不時給周圍的人們帶來驚喜,比如花樣代碼注釋就是程式設計師的一個傑作,也不得不佩服他們真是腦洞大啊
  • 程式設計師「奇葩」說 - OSCHINA - 中文開源技術交流社區
    一直以來「奇葩」這個詞都是偏貶義的,直到去年有個綜藝節目叫「奇葩說」挺熱鬧,這裡的人不一定是奇葩,更多指達人的意思。「奇葩說」裡的達人都是能說會道的,我的主業是程式設計師,所以只能寫寫在我職業生涯中碰到的一些「奇葩」程式設計師。 你懂的,我這裡的「奇葩」沒有任何貶義的意思。月在胸襟人在途我剛入行時的第一位項目經理,70後。那年三十出頭,在銀行客戶現場做項目經理,負責一個二十來人的客戶現場團隊。 雖然他的職位是項目經理,但實際那時他真是一個名地道的資深程式設計師。
  • 誰說不能用中文寫代碼?
    而且我們一直在講的 Python,也可以「用中文」來編程。Python3 對於字符編碼這一塊做了很大改進。帶來的一個額外功能就是,你可以使用中文作為變量名。另外如果在代碼裡寫中文,別忘了在開頭加上 #coding: gbk 或 #coding: utf8 的聲明。上面這樣的寫法完全是符合語法的,但我個人沒有習慣這麼來命名。
  • 8k+ star的文言文程式語言你寫得動嗎?
    本文經授權轉自公眾號 開源中國(ID:oschina03)近日有開發者開源了一門新的程式語言該語言名為「文言(wenyan-lang)」,這是一門採用文言文輸入的程式語言,該語言不包括英文字符,僅包含繁體中文字符,並保留繁體引號「」。先看看 Helloworld 怎麼寫:吾有一數。
  • 如果編程替換成中文就會怎樣?程式設計師看了表示頭疼
    >你以為會寫中文就會編程嗎?這就像你以為會寫漢字就會寫出好文章一樣。編程是和機器溝通,因此要用機器的語言而不是人類的語言。最早的程序就是0和1的數字,不是中文也不是英文。以前的程式設計師,每天寫程序就是在一條長長的紙帶上打孔表示0和1。
  • 如果編程替換成中文會怎樣? 程式設計師看了表示頭疼
    你以為會寫中文就會編程嗎?這就像你以為會寫漢字就會寫出好文章一樣。編程是和機器溝通,因此要用機器的語言而不是人類的語言。最早的程序就是0和1的數字,不是中文也不是英文。以前的程式設計師,每天寫程序就是在一條長長的紙帶上打孔表示0和1。後來發現0和1的二進位太麻煩了,就把0和1壓縮一下,用16進位表示,比如數字10,用二進位表示是1010,用16進位表示就是0A,這樣表達起來就更簡潔,但是輸入電腦後,仍然要轉換為二進位電腦才能明白。後來,科學家們用簡單的英文單詞表示某些功能,比如加法,就用add表示,減法就用dec表示。
  • 高手把電腦程式語言替換成中文!程式設計師看了表示一言難盡
    編程是和機器溝通,因此要用機器的語言而不是人類的語言。最早的程序就是0和1的數字,不是中文也不是英文。以前的程式設計師,每天寫程序就是在一條長長的紙帶上打孔表示0和1。後來發現0和1的二進位太麻煩了,就把0和1壓縮一下,用16進位表示,比如數字10,用二進位表示是1010,用16進位表示就是0A,這樣表達起來就更簡潔,但是輸入電腦後,仍然要轉換為二進位電腦才能明白。
  • 【萬泉河】就是要用中文編程
    然而,仍然有許多讀者解不開其中的心結,對我的觀點乃至用詞不當大家批判。 而對中文的缺陷本身,大多是在認可的基礎上,視而不見或者掩耳盜鈴裝作不存在。  所以,我們暫且繞過那些紛爭,看編程過程中對待中文(字符)的處理。大家其實還是有共識的。所有人的主張,總結為兩種: 1,在編程設計中,儘可能不用中文。
  • @程式設計師,這些編程陷阱你中招了嗎?
    等等,這跟編程有什麼關係?別著急,繼續讀下去。在Hacker News或Proggit上評論的程式設計師並不是從計算機行業隨機選取的,而是這個行業中的精英部分。就像參加任何會議一樣,參與評論的這些人都比一般程式設計師對編程更有熱情。然而,從許多評論中可以看出,許多很厲害的程式設計師也會有各種信仰和誤解,這些信仰和誤解雖然錯得離譜,但卻廣為流傳。
  • 「文言文」「白話文」之爭?根本是假議題!
    就算課綱不改,現在中學裡許多第一線教國文、歷史、公民的年輕老師,根本也已經是被製造出來的「人工獨」,你放心把孩子交給他們洗腦嗎?媒體要我談「文言文與白話文之爭」,其實這根本是假議題,現在他們在吵的,真的是文言文的比例問題嗎?說唐宋八大家是造神,國文課要多上「臺灣人」而非「唐朝人」、「宋朝人」的作品,這不明擺著就是要去 中國化 嗎?
  • 用中文編程能給我們帶來什麼?
    每隔幾天,就會有人在網媒上討論中文編程的問題,甚至有編程的套件發布,每次都會引發一場大討論。但是在程式設計師的圈子裡,卻很少看到有人關注這個話題。
  • 為什麼程式設計師編程一般都要用英文而不用中文?聽聽內行人怎麼說
    導語:為什麼程式設計師編程一般都要用英文而不用中文?聽聽內行人怎麼說我們是不是都對編寫程序的專業人員懷揣著敬畏的態度呢?他們是怎麼做到的呢?而且所有的程序一般都是利用英文來編輯的,我們從來沒有見到過使用漢語編輯的程序,這是為什麼呢?