「深奧的程式語言」:修訂間差異
從 JSON 檔案批量匯入 |
(無差異)
|
於 2025年8月19日 (二) 21:54 的最新修訂
深奧的程式語言(Esoteric programming language,有當時仔簡寫為Esolang)是一類程式語言,𪜶予人設計用佇咧測試電腦語言表達的極限,抑是作為一个概念的證明 ( POC ),抑是干焦一个程式設計師的冷耍笑。_ esoteric _ 共伊佮開發人員真正用佇咧編寫軟體的語言區別開來。通常情況下,Esolang的創作者通常並無按算予伊成做主流程式語言,就算講按呢,一寡深奧的功能親像視覺空間語法,啟發佇藝術中的實際應用。這種語言佇駭客佮愛好者之間通常較流行。
設計者差不多袂以提懸這个語言的易用性為目標,但是會保證邏輯上的可用性。設計者通常會徙掉抑是取代傳統語言的常見功能,但是猶是會強調並保持圖靈完備性。
歷史
上早、而且猶是深奧語言典型案例的是 INTERCAL,由唐 ・ 伍茲佮詹姆斯 ・ 里昂佇一九七二年設計,意思佇創造一種佮𪜶知影的語言所無仝款的語言。伊彼戲仿矣彼當陣通用的語言,如 Fortran、COBOL 佮組譯。
INTERCAL 的早期實現試驗是佇咧 IBM System / 三百六十佮一台身分不明的雅達利電腦(可能是 Atari 兩千六百)最進行的,猶毋過無成功。久年來,INTERCAL 干焦存在佇咧 INTERCAL 手冊當中。一九九空年 Unix 中 C 語言的彼个實現復興了這个語言,刺激了深奧電腦語言的設計熱潮。
一百九十九二年,Wouter van Oortmerssen 建立一个小的疊導向的程式語言 FALSE,伊的語法設計成本身就會使代碼混淆、混亂,並且歹閱讀。值得注意的是,伊有一个干焦一千空二十四位元組的編譯器。這啟發矣 Urban Müller 建立一个閣較細的語言,也就是這馬出名的 brainfuck,其中干焦包括八个看會著字元。伊佮 Chris Pressey 的 Befunge(類似 FALSE, 但是有一个二維的指令指標)一出,成做現此時最為廣泛支援的深奧程式語言。這攏是上小化圖靈焦油坑、佮加份的語言透濫的功能的典型例。brainfuck 的極小化設計兼有優雅佮純淨;實際上伊佮圖靈機 P系列有關係。
術語
圖靈臭油坑
圖靈臭油坑(Turing tarpit)具有圖靈完備性的程式語言,但是伊的指令、運算元或者是等效物件足少的。其中包括講 brainfuck(八个指令,零個運算元), 單一指令電腦(一个指令,第二至三个運算元)和 Thue(一个指令,兩个運算元)。
Turning tarpit
Turning tarpit 是有狀態編碼的圖靈焦油坑,即語言內面的命令用佇對一个有限的範圍內選擇操作,然後共遮的操作應用著程式的當前狀態。這款的例包括 reMorse、Whirl,無的確猶閣包括 INTERCAL。
===有狀態編碼===一種編寫程式的方式,予代碼內底每一个子串:
一 . 定位到列表中的後一條指令,而且二 . 應用著轉換當前的程式狀態。
注意每一个單一的指令總是包含兩个連紲的階段:選擇一个操作,並執行伊。操作列表可能是靜態的—— 如 reMorse 抑是 THRAT,抑是動態的—— 如 reMorse 四 ever。
下跤是一个 reMorse 抑是 THRAT 的例 :
` ` ` Select Next Operation in list Perform Operation ` ` `
語言範式
程式語言的範式會當分做若是別類別,這寡類別會當用來大概了解特定語言的操作方式。其中包括命令式語言,如brainfuck,其實指令講欲按怎修改資料;函數式語言,如 Unlambda,其中的資料佮代碼攏愛濟抑是少地會當交換,而程式的執行是通過重複迵天代呼叫函式實現的;和重寫語言,如 Thue,其中會當使用變換函式使狀態初初化。
Funges
funge是一類深奧的程式語言,其程式是因為度量空間內底的坐標系的(通常𥰔仔卡爾坐標系,但無一定是)。 執行的時,通過佇咧程式空間內底通過移動指令指標(用一个位置向量表示往過執行的指令), 確定空間的點,對而且執行指令。無仝的指令指示指令指標的移動方向,並且決定指令的執行順序。
目前,遮的語言的行為官方標準是 Funge 被九十八規範。這乎規範是 Befunge 語言—— 一个有二維環面楦做結構的語言—— 語意的一个概念。嚴格按呢遵守這个標準的語言有時嘛予人號做 _ funges _,如 Unefunge(一維)和 Trefunge(三維),閣較濟有精差的「遠親」予人叫做是 _ fungeoids _,如 Wierd。
非確定性語言
對著確定性語言,若予定程式的當前狀態,總是會當預測伊的後一个狀態。但是確定性語言就毋是按呢。 大多數的語言攏是確定性的,但是某一寡語言提供一个內底的隨機指令,比如講 Befunge。此外,有的語言,如 Java 二 K 干焦隨機講。所以,即使編一个像有通靠輸出按呢簡單的程式,往往攏是一項艱巨的任務。
非確定性語言會當用來搜揣大範圍的空間,譬如講對著語法,散赤攑搜揣是一切實際的。隨機文字生成器,比如講 the Dada Engine 和 rmutt 攏是非確定性語言的例。
閣較神奇的是,無確定性演算法已經用佇超計算的理論研究中。
網際網路社群
佇網路頂懸,有一个規模細、但是有活力的社群,聚集了使用佮設計語言的合好者,目前主要箍牢咧 Esolang wiki 進行(見下文)。
esolang 社群有當時仔會活跳,討論的範圍對爭論某一个語言敢是圖靈完備,到按怎佇咧編程環境,共形象化的數學概念弄甲抽象佮難理解。有一个郵寄清單,但是直直廢棄毋免,大多數的時陣是佇咧 wiki 抑是佇咧 IRC 上討論。
圖靈完備性是一个熱門的討論話題,因為語言的圖靈完備性絕對毋是一眼就會當看出的,而且往往需要證明的方法上的飛躍才有法度解決。新語言佮新功能不斷會當創造出來,所以,證明圖靈完備性始終是一个挑戰。
程式語言會使愛好者的另外一个相關的追求是透濫的代碼。
範例
下跤是一寡深奧的語言的典型範例:
/ / /
/ / /是一門由坦納斯 ・ 韋特(Tanner Swett)佇二空空八年發明的程式語言。應該程式語言干焦有這个運算子——「/」,功能是替換字串。
Hello World 程式範例:
` ` ` Hello , world ! ` ` `
小可仔複雜的 Hello World:
` ` `/ world ! world ! / Hello , / world ! world ! world ! ` ` `
佇頂懸列代碼中,第一改出現的「world ! world !」先予人替換做「Hello ,」,得著了「Hello , world !」。 隨後的代碼的功能為列印。
Befunge
Befunge 類語言允准使用代碼,予指令指標佇多度中漫遊。比如講,下跤的程式共「Hello World」字元以相反的順序硩入棧,然後通過指令 [>]、[:]、[v]、[\ _]、[,] 和 [^] 以順時針方向迴圈,並且佇咧迴圈中列印字元。
` ` ` " dlroW olleH " > : v ^ , _@ ` ` `
二箍 Lambda 演算
二箍 Lambda 演算做是對演算法資訊理論的角度設計的,通好佇上少的語句意義下跤寫出雖然可能密集的代碼。伊有一个二十九位元組的自直譯器,一个二十一位元組的素數篩選器,佮一个一百十二位元組的 Brainfuck 直譯器。
Brainfuck
Brainfuck 的語言設計誠精簡,而且會當簡單寫出混亂的代碼。伊的程式內底干焦有八个無仝款的字元。比如講,下跤的程式提出「Hello World」:
Chef
Chef 是一个疊導向的程式語言,由 David Morgan-Mar 設計的,看起來若菜譜。程式當中包括標題、列表中的變數佮值,佮操作疊著的指令列表。就算是頭一擺提出的時陣,伊的設計原則是「程式菜譜毋但應該會當產生有效的輸出,猶閣會當方便來準備好食的物件」,毋過,若準真正大部份的程式內底原料的組合佮數量,著會做出難以下滇的食物(如果若有)。 下跤的程式是一个例外,有法度做出 Hello World tsioo-kóo-lè-tòo 醬雞卵糕:
` ` ` Hello World Cake with Chocolate sauce .
This prints hello world , while being tastier than Hello World Souffle . The main chef makes a " world ! "cake , which he puts in the baking dish . When he gets the sous chef to make the " Hello " chocolate sauce , it gets put into the baking dish and then the whole thing is printed when he refrigerates thesauce . When actually cooking , I'm interpreting the chocolate sauce baking dish to be separate from the cake one and Liquify to mean either melt or blend depending on context .
Ingredients . 三十三 gchocolate chips 一百 g butter 五十四 ml double cream 二 pinches baking powder 一百十四 g sugar 一百十一 ml beaten eggs 一百十九个 g flour 三十二 g cocoa powder 零 g cake mixture
Cooking time : 二十五 minutes .
Pre-heatoven to 一百八十 degrees Celsius .
Method . Put chocolate chips into the mixing bowl . Put butter intothe mixing bowl . Put sugar into the mixing bowl . Put beaten eggs into the mixing bowl . Put flourinto the mixing bowl . Put baking powder into the mixing bowl . Put cocoa powder into the mixing bowl . Stir the mixing bowl for 一 minute . Combine double cream into the mixing bowl . Stir the mixingbowl for 四 minutes . Liquify the contents of the mixing bowl . Pour contents of the mixing bowl into the baking dish . bake the cake mixture . Wait until baked . Serve with chocolate sauce .
chocolate sauce .
Ingredients . 一百十一 g sugar 一百空八 ml hot water 一百空八 ml heated double cream 一百空一 g dark chocolate 七十二 g milk chocolate
Method . Clean the mixing bowl . Put sugar into the mixing bowl . Put hot water into the mixing bowl . Put heated double cream into the mixing bowl . dissolve the sugar. agitate the sugar until dissolved . Liquify the dark chocolate . Put dark chocolate into the mixing bowl . Liquify the milk chocolate . Put milk chocolate into the mixing bowl . Liquify contents ofthe mixing bowl . Pour contents of the mixing bowl into the baking dish . Refrigerate for 一 hour . `` `
雖然講伊讀起來敢若䆀的機器翻譯,其中閣有一寡無啥清楚的指示,毋過照這个配方的確實有法度做出來 tsioo-kóo-lè-tòo 醬雞卵糕。
FALSE
FALSE 是一个疊導向的程式語言,有單字元命令和變數。比如講, 三 + 一的結果會當通過執行 ( λ x → x + 一 ) ( 三 ) 會出得:` 三 [一 +] ! `
INTERCAL
INTERCAL 是「縮寫無法度發音的編譯器語言」(Compiler Language With No Pronounceable Acronym)的簡稱。
JSFuck
JSFuck(抑是為著莫癩𰣻話寫作 JSF \ * ck)是一種深奧的 JavaScript 編程風格。用這款風格寫做的代碼中干焦使用 ` [`、`] `、` ( `、` ) `、` ! ` 和 ` + ` 六種字元。佮其他深奧程式語言無仝款的是,以 JSFuck 風格寫出的代碼無需要另外的編譯器抑是直譯器來執行,無論瀏覽器抑是 JavaScript ia̋n-jín 中的原生 JavaScript 直譯器攏會當直接執行。
LOLCODE
LOLCODE 予人設計做類似 lolcat 的講話方式。以下是「Hello World」的例:
Malbolge
Malbolge(地獄的第八輪)予人設計做上困難佮上深奧的程式語言。
單一指令電腦
單一指令電腦是一種干焦一个操作的機器語言。這實際上是一類的語言,因為對任何有咧操作,攏會當定義這款的語言。
Piet
Piet是由 David Morgan-Mar 設計的,這个語言的程式是點陣圖,看起來若抽象藝術咧。編譯器由一个「指標」引導,佇圖像中對一个色塊徙振動到後一个。指標移出一个區域時執行一个操作。
二十種色水有指定的行為:十八種「彩」色,以六步色調周期佮三步亮度周期排序;烏色佮白色無排序。往過一款「彩」色進入去到另外一種的時陣,執行的操作由色調佮光度的變化數確定。烏色袂當進入,當指標試圖進入一个烏色的區域的時陣,將會改變選擇後一个塊的規則。若所有可能規則攏試過矣,然後程式終止。圖像邊界以外的所在嘛被看做烏的。白色無執行操作,毋過允准指標「通過」。 二十種指定以外的色水行為由編譯器直譯器指定。
變數以有符號整數儲存佇記憶體中的單一堆疊內。大多數的操作是在這個堆疊上進行的,其他的操作則會當佇棧頂懸進行輸入 / 輸出,抑是共編譯器移動指標的規則。
Piet 是以荷蘭畫家皮特 ・ 蒙德里安(Piet Mondrian)號名的。原定的名稱 _ Mondrian _ 已經予人占用矣。
Shakespeare
Shakespeare 語言(SPL)的目的是使程式看起來像莎士比亞的戲劇。譬如講下跤的語句聲明矣程式內底的一个點,會當迵過一條 GOTO 語句捘甲:` Act I : Hamlet's insults and flattery . `。
Whitespace
Whitespace 語言干焦使用空白字元(空格、制表符和 Enter), 並無注意所有的字元。這佮傳統語言無分無仝的空白字元、不區分空格佮制表符相反。這個特性閣允准 Whitespace 程式藏佇咧其他的語言程式的原始碼中,比如講 C。
Chicken
Chicken 語言干焦「chicken」一个關鍵字。例如下跤的程式會當輸出「Hello , world !」。
` ` ` chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chickenchicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chickenchicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chickenchicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ` ` `
相關條目
- IOCCC
參考文獻
外部連結
- Esolang—佇深奧程式的語言維基站點。
- EsotericProgrammingLanguage,佇佗位咧 WikiWikiWeb
列表
- esolang wiki 上的 esolang 列表
- 開放式 kha-tá-lok-guh 計畫中和 Obfuscated Programming Languages 相關的內容