NISHIKORI

風結ぶ言葉たち

從東北話編程語言窺探Esolang的世界

初探#

今日瀏覽社交平台時,偶然發現一張令人會心一笑的梗圖:

菲薄那气数列

透過對東北方言稍加熟悉,我們就能輕鬆將其轉換成這樣的代碼表示:

def print_fibonacci_sequence(n):
    if n < 1:
        raise ValueError("Invalid input! Please enter a positive integer.")

    fibonacci_sequence = []
    current = 0
    next_num = 1
    fibonacci_sequence.append(current + next_num)

    for _ in range(2, n+1):
        current, next_num = next_num, current + next_num
        fibonacci_sequence.append(next_num)

    return ', '.join(map(str, fibonacci_sequence))

print("Checking result for 0:")
try:
    print(print_fibonacci_sequence(0))
except ValueError as e:
    print(e)

print("Checking result for 15:")
print(print_fibonacci_sequence(15))

# 並未完全對應原文的代碼

尋根#

然而,注意到梗圖中的代碼結構清晰且配有代碼高亮標記,讓人感到這并非單純的惡搞之作,于是我決定在互聯網上進一步探索,竟意外地找到了相關的實在項目:

dongbei 是啥?它是一门以东北方言词汇为基本关键字的以人为本的编程语言。

这玩意儿可是填补了世界方言编程地图上的一大片儿空地啊! 这么说吧,谁要是看了 dongbei 程序能憋住了不笑,我敬他是纯爷们儿!

那它有啥特点咧?多了去了:

简单啊!小学文化程度就行。您能看懂春晚不?能?那就没问题。
好读啊!看着看着包您不由自主地念出声儿来。
开心啊!呃,做人嘛,最重要的是要开心。
开源啊!不但不要钱,而且不要脸 -- 随时随地欢迎东北话高手打脸指正。
总而言之,dongbei 语言具有极高的娱技比(娱乐精神 - 技术含量比例)。

dongbei 编程语言的开发采用了业界领先的 TDD(TreeNewBee-Driven Development) 方式。 具体地说,就是每个功能都是先把文案写好,八字没一撇牛皮就吹起来了,然后根据牛皮写测试案例,最后再实现功能让牛皮不被吹破。 这样做有两大好处:第一每个功能都是有的放矢,不值得 tree new bee 的功能一概没有。 第二确保了每个功能都有文案负责吹嘘,开发者绝对不会养在深闺无人识。

經過搜尋,我發現了一個來自該項目的示例文件:

https://github.com/zhanyong-wan/dongbei/blob/master/demo/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91.dongbei

這便確定了梗圖中的代碼,來自這個名為 dongbei 的項目。

問底#

根據項目的文檔指示,我將dongbei的代碼庫成功克隆至本地,執行src/dongbei.py,這樣便能親自體驗這個充滿趣味的編程語言。

學習 dongbei 的最快方法就是和大哥嘮嗑

然而,dongbei的功能遠不止于此。通過閱讀dongbei 语言咬文嚼字,我們可以發現這門語言已經相當完備,足以應對各種複雜的編程挑戰。

例如:

河內塔動喚.dongbei

https://github.com/zhanyong-wan/dongbei/blob/master/demo/%E6%B1%89%E8%AF%BA%E5%A1%94%E5%8A%A8%E5%94%A4.dongbei

康家莊的活著遊戲.dongbei

https://github.com/zhanyong-wan/dongbei/blob/master/demo/%E6%B4%BB%E7%9D%80.dongbei

融會#

事實上,網絡上除了標新立異的dongbei之外,還隱藏著眾多富有創意的編程語言,它們通常被歸類為「Esolang」——Esoeric programming language,旨在嘗試奇怪的想法,難以程式設計,或作為笑話,而不是實際使用。

Cantonese#

參考dongbei的模式,還有另一個創新的項目 ——Cantonese,它讓開發者能夠使用粵語進行編程,進一步將地方方言融入編程語言的世界,作者至今依舊在維護它。

使用該語言輸出「Hello World!」的代碼:

畀我睇下「"Hello World!"」點樣先?
收工

Ook!#

Ook! 是一款極致簡潔的編程語言,其核心語法僅由三個基本構件組成,乍看之下易於學習,然而在實際應用中,Ook! 帶來了獨特的挑戰。這種語言的命令系統由 Ook.Ook!Ook? 這三個元素構成,即便代碼量可能因此增加,卻絲毫不影響創建高效能的程式碼。Ook! 的設計原則簡潔到了極致,其創建者深信甚至猩猩也能輕易掌握,因此他們堅信無需附加繁冗的程式註解。

使用該語言輸出「Hello World!」的代碼:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.

Brainfuck#

Ook!類似,Brainfuck是一種簡單的、可以用最小的編譯器來實現的、圖靈完備的程式語言。這個語言由八種運算子構成。

使用該語言輸出「Hello World!」的代碼:

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

Piet#

Piet 是一種獨特的編程語言,它利用色彩的組合來表達程序的邏輯結構。該語言使用了 20 種亮度級別的色彩,每種色彩都承載著特定的指令功能。編譯器通過辨識色塊之間的亮度差異來解讀程序的命令。程序的布局和結構完全依賴于色塊的形狀和排列,而黑白色調的邊界則作為區分不同代碼區塊的分界線。雖然在Piet上編寫程序是可能的,但由于不同解釋器可能對色彩的解釋存在差異,這使得 Piet 在實際計算中并不夠精確。因此,Piet 更多地被視為一種創意工具,用于探討編程的新方法和視覺藝術的表現形式,而非作為解決實際問題的工具。它的存在挑戰了傳統編程語言的界限,讓編程過程變得更加豐富多彩和富有表現力。

使用該語言輸出「Hello World!」的幾種「代碼」:

::: grid {cols=3,rows=2, gap=12,type=images}

IMG_6605.png

IMG_6606.png

IMG_6609.png

IMG_6610.png

IMG_6608.gif

IMG_6607.gif

:::

Velato#

Velato 是一種創新的編程語言,它允許開發者通過音樂來編寫代碼。這種語言通過分析 MIDI 文件來讀取源代碼,讓你可以在創作旋律的同時編寫程序。它根據音符的順序、間距和音高(視為編程的字母)來處理代碼。儘管 Velato 支持基本的編程結構,如表達式、數字和變量聲明,但它目前不支持函數和數組。此外,它不適用於將真正的音樂作品轉化為功能性程序。

使用該語言輸出「Hello World!」的「代碼」:

image

其他語言#

可以參考the esoteric programming languages wiki這一站點,了解其他的 Esolang。

根據 Esolang Wiki,Esolang 通常分為以下幾種類別:

  • Minimalism
    許多神秘語言的設計目標是盡可能少的指令。例如 BrainfuckOISCLazy K 就屬於這種類型。當這些語言實現了圖靈完備,常被稱為「圖靈泥潭」。

  • New concepts
    探索替代方式設計編程語言在神秘編程中很受歡迎。像 BefungeThueUnlambda 是很好的例子。

  • Weirdness
    有些語言主要為了追求奇特和難以編程而創造。INTERCAL 的初衷就是要與普通語言截然不同(雖然仍有很多與傳統語言相似之處),而 Malbolge 的設計目的是極度難以使用。

  • Themed
    有些語言基於非計算機相關的主題。比如 var'aq 基於虛構的克林貢語。Shakespeare模仿莎士比亞戲劇風格,而 Chef 程序看起來像烹饪菜譜。dongbei也屬於此類。

  • Brevity
    許多神秘語言旨在設計得尽可能短小。這些被稱為「Golfing 語言」,常常用於「程式碼高爾夫」,即競賽解決編程任務,盡量以最少的字符或字節完成。如 CJamPythGolfScript 等。

  • Jokes
    許多神秘語言純粹是作為笑話創建。其中一些仍然可以用於編程,如 l33t Ook!,而其他如 HQ9+Bitxtreme 则不然。

  • Obfuscation
    有些神秘語言刻意設計得難以閱讀(而非難以書寫或理解)。Unreadable 是這方面的典型例子。

納要#

dongbei是一個基於python開發的編程語言。可能有人會認為「這也太不正式了吧」。但實際上,我們需要明確,dongbei只是一個娛樂或探索為目的設計的編程語言,它並不適用於開發嚴肅的應用程序。在開發需要穩定性、容錯能力和功能性的項目時,幾乎所有人都只會去選擇pythonC++JavaScript等成熟的、穩定的語言。

此文由 Mix Space 同步更新至 xLog
原始链接为 https://nishikori.tech/posts/tech/dongbei


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。