fbpx
维基百科

深奥的编程语言

深奥的编程语言Esoteric programming language,有时简写为Esolang)是一类编程语言,它们被设计用于测试计算机语言表达的极限,或者作为一个概念的证明(POC),或仅仅是一个程序员的冷玩笑。esoteric将它们与开发人员真正用于编写软件的语言区别开来。通常情况下,Esolang的创作者通常并不打算让它成为主流编程语言,尽管如此,一些深奥的功能如视觉空间语法,[1]启发了在艺术中的实际应用。这种语言在黑客和爱好者之间通常较流行。

设计者几乎不会以提高该语言的易用性为目标,但会保证逻辑上的可用性。设计者通常会移除或取代传统语言的常见功能,但仍会强调并保持图灵完备性

历史 编辑

最早、且仍是深奥语言典型案例的是INTERCAL英语INTERCAL,由唐·伍兹和詹姆斯·里昂在1972年设计,意在于创造一种与他们知道的语言所不同的语言。[2]戏仿了当时通用的语言,如FortranCOBOL汇编

INTERCAL的早期实现尝试是在IBM System/360和一台身份不明的雅达利电脑(可能是Atari 2600)上进行的,但没有成功。多年来,INTERCAL仅仅只存在于INTERCAL手册中。1990年Unix中C语言的实现复兴了这个语言,刺激了深奥计算机语言的设计热潮。

1992年,Wouter van Oortmerssen创建了一个小的面向堆栈的编程语言FALSE,它的语法设计成本身就能使代码混淆、混乱,并且难以阅读。值得注意的是,它有一个只有1024字节的编译器。这启发了Urban Müller创建一个更小的语言,也就是现在著名的brainfuck,其中只包括了八个可识别字符。它与Chris Pressey的Befunge(类似FALSE,但有一个二维的指令指针)一道,成为现今最为广泛支持的深奥编程语言。这些都是最小化图灵焦油坑、和多余的语言混淆功能的典型例子。brainfuck的极小化设计兼具了优雅和纯净;实际上它与图灵机P''系列有关。

术语 编辑

图灵焦油坑 编辑

图灵焦油坑(Turing tarpit)是具有图灵完备性的编程语言,但它的指令、操作数或等效对象非常少。其中包括brainfuck(8个指令,0个操作数),单一指令计算机(1个指令,2至3个操作数)和Thue(1个指令,2个操作数)。

Turning tarpit 编辑

Turning tarpit是有状态编码的图灵焦油坑,即语言中的命令用于从一个有限的范围内选择操作,然后将这些操作应用到程序的当前状态中。[3]这样的例子包括、Whirl,也许还包括INTERCAL英语INTERCAL

有状态编码 编辑

一种编写程序的方式,使得代码中的每一个子串:

  1. 定位到列表中的下一条指令,且
  2. 应用到转换当前的程序状态。

注意每一个单一的指令总是包含两个连续的阶段:选择一个操作,并执行它。操作列表可能是静态的——如或,或动态的——如reMorse4ever。

下面是一个reMorse或THRAT的例子:

Select Next Operation in list Perform Operation 

语言范型 编辑

编程语言的范型可以分为若干类别,这些类别可以用来大致了解特定语言的操作方式。其中包括命令式语言,如brainfuck,其指令描述了如何修改数据;函数式语言,如Unlambda,其中的数据和代码都或多或少地可交换,而程序的执行是通过重复迭代调用函数实现的;和重写语言,如Thue,其中可以使用变换函数使状态初始化。

Funges 编辑

funge是一类深奥的编程语言,其程序是基于度量空间中的坐标系的(通常为笛卡尔坐标系,但不一定是)。运行时,通过在程序空间中通过移动指令指针(用一个位置矢量表示当前执行的指令),以确定空间中的点,从而执行指令。不同的指令指示了指令指针的移动方向,并因此决定指令的执行顺序。

目前,这些语言行为的官方标准是Funge-98规范。这个规范是Befunge语言——一个有二环面拓扑结构的语言——语义的一个概括。严格遵守这个标准的语言有时也被称为funges,如Unefunge(一维)和Trefunge(三维),而更多有显著差异的“远亲”被称为fungeoids,如Wierd。

非确定性语言 编辑

对于确定性语言,如果给定程序的当前状态,则总是可以预测它的下一个状态。但非确定性语言就不是这样。大多数的语言都是确定性的,但某些语言提供了一个内置的随机指令,例如Befunge。此外,有些语言,如Java2K[永久失效連結]只有随机指令。因此,即使编一个像有可靠输出这样简单的程序,往往都是一项艰巨的任务。

非确定性语言可以用来搜索大范围空间,例如对于语法,穷举搜索是不切实际的。随机文本生成器,例如和都是非确定性语言的例子。

更神奇的是,不确定性算法已经用于了超计算的理论研究中。

互联网社区 编辑

在互联网上,有一个规模小、但有活力的社区,聚集了使用和设计语言的爱好者,目前主要围绕着Esolang wiki进行(见下文)。

esolang社区偶尔会活跃,讨论的范围从争论某个语言是否图灵完备,到如何在编程环境中,将形象化的数学概念弄得抽象和难理解。有一个邮件列表,但几乎废弃不用,大多数时候是在wiki或在IRC上讨论。

图灵完备性是一个热门的讨论话题,因为语言的图灵完备性绝不是一眼就能看出的,而且往往需要证明方法上的飞跃才能解决。新语言和新功能不断被创造出来,因此,证明图灵完备性始终是一个挑战。

编程语言爱好者的另一个相关追求是混淆代码

示例 编辑

下面是一些深奥的语言的典型示例:

/// 编辑

///是一门由坦纳斯·韦特(Tanner Swett)在2008年发明的编程语言。该编程语言只含有一个操作符——“/”,功能是替换字符串[4][5]

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演算是从算法信息论的角度设计的,以便在最少的语句意义下写出尽可能密集的代码。它有一个29字节的自解释器,一个21字节的素数筛选器,和一个112字节的Brainfuck解释器。

Brainfuck 编辑

Brainfuck的语言设计极为精简,并且能轻易写出混乱的代码。它的程序中只有8个不同的字符。例如,下面的程序输出“Hello World”:

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

Chef 编辑

Chef是一种面向堆栈的编程语言,由David Morgan-Mar设计,目的是使程序看起来像菜谱。程序中包括标题、列表中的变量和值,和操作堆栈的指令列表。[6]尽管首次提出时,它的设计原则是“程序菜谱不仅应能产生有效的输出,还能以此方便地准备美味的食物”,然而,如果真按大部分程序中原料的组合和数量,则会做出难以下咽的食物(如果有的话)。[7]下面的程序是一个例外,能做出Hello World巧克力酱蛋糕:

 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 the sauce. 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. 33 g chocolate chips 100 g butter 54 ml double cream 2 pinches baking powder 114 g sugar 111 ml beaten eggs 119 g flour 32 g cocoa powder 0 g cake mixture Cooking time: 25 minutes. Pre-heat oven to 180 degrees Celsius. Method. Put chocolate chips into the mixing bowl. Put butter into the mixing bowl. Put sugar into the mixing bowl. Put beaten eggs into the mixing bowl. Put flour into the mixing bowl. Put baking powder into the mixing bowl. Put cocoa powder into the mixing bowl. Stir the mixing bowl for 1 minute. Combine double cream into the mixing bowl. Stir the mixing bowl for 4 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. 111 g sugar 108 ml hot water 108 ml heated double cream 101 g dark chocolate 72 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 of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Refrigerate for 1 hour. 

虽然它读起来像是糟糕的机器翻译,其中还有一些不甚清楚的指示,但按照这个配方的确可以做出巧克力酱蛋糕。[8]

FALSE 编辑

FALSE是一种面向堆栈的编程语言,有单字符命令和变量。例如,3+1的结果可以通过执行(λ x → x + 1)(3)得出:3[1+]!

INTERCAL 编辑

INTERCAL是“缩写无法发音的编译器语言”(Compiler Language With No Pronounceable Acronym)的简称。[2]

JSFuck 编辑

JSFuck(或为了避讳脏话写作JSF*ck)是一种深奥的JavaScript编程风格。以这种风格写成的代码中仅使用[]()!+六种字符。与其他深奥编程语言不同的是,以JSFuck风格写出的代码不需要另外的编译器或解释器来执行,无论浏览器或JavaScript引擎中的原生JavaScript解释器皆可直接运行。[9]

LOLCODE 编辑

LOLCODE被设计为类似lolcat的说话方式。以下是“Hello World”的例子:

 HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE

Malbolge 编辑

Malbolge(地狱的第8圈)被设计为最困难和最深奥的编程语言。

单一指令计算机 编辑

单一指令计算机是一种只有一个操作的机器语言。这实际上是一类语言,因为对于任何给定的操作,都可以定义这样的语言。

Piet 编辑

 
Piet程序,输出“Piet”
 
Piet的“Hello World”程序

Piet是由David Morgan-Mar设计的,这个语言的程序是点阵图,看起来像抽象艺术[10]编译器由一个“指针”引导,在图像中从一个色块移动到下一个。指针移出一个区域时执行一个操作。

20种颜色有指定的行为:18种“彩”色,依6步色调周期和3步亮度周期排序;黑色和白色未排序。当由一种“彩”色进入到另一种时,执行的操作由色调和亮度的变化数确定。黑色不能进入,当指针试图进入一个黑色的区域时,将会改变选择下一个块的规则。如果所有可能的规则都尝试过了,则程序终止。图像边界以外的地方也被视为黑色。白色不执行操作,但允许指针“通过”。20种指定以外的颜色行为由编译器或解释器指定。

变量以有符号整数存储在内存中的单一堆栈内。大多数操作是在这个堆栈上进行的,其他操作则可以在栈上进行输入/输出,或告诉编译器移动指针的规则。

Piet是以荷兰画家皮特·蒙德里安(Piet Mondrian)命名的。原定的名称Mondrian已经被占用了。

Shakespeare 编辑

Shakespeare语言(SPL)的目的是使程序看起来像莎士比亚的戏剧。例如下面的语句声明了程序中的一个点,可以通过一条GOTO语句转到:Act I: Hamlet's insults and flattery.

Whitespace 编辑

Whitespace语言只使用空白字符(空格、制表符和回车),并忽略所有其他字符。这与传统语言不区分不同的空白字符、不区分空格和制表符相反。这个特性还允许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 chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken 

相关条目 编辑

参考文献 编辑

  1. ^ McLean, A., Griffiths, D., Collins, N., and Wiggins, G. (2010). "Visualisation of Live Code". In Electronic Visualisation and the Arts, London: 2010.
  2. ^ 2.0 2.1 Woods, Donald R.; Lyon, James M., The INTERCAL Programming Language Reference Manual, Muppetlabs.com, 1973 [2009-04-24], (原始内容存档于2009-04-24) 
  3. ^ Turning tarpit - Esolang (页面存档备份,存于互联网档案馆). Esolangs.org (2011-05-26). Retrieved on 2011-11-21.
  4. ^ 游戏天空 - 专属于程序猿的天书! 十大最怪异的编程语言. [2017-01-14]. (原始内容于2017-01-16). 
  5. ^ Esolang - ///. [2017-01-14]. (原始内容于2020-11-12). 
  6. ^ DM's Esoteric Programming Languages - Chef (页面存档备份,存于互联网档案馆). Dangermouse.net. Retrieved on 2013-07-21.
  7. ^ DM's Esoteric Programming Languages - Chef - Hello World (页面存档备份,存于互联网档案馆). Dangermouse.net. Retrieved on 2013-07-21.
  8. ^ Baking a Hello World Cake | Products of Mike's Mind (页面存档备份,存于互联网档案馆). www.mike-worth.com. Retrieved on 2013-09-01.
  9. ^ Jane Bailey. . The Daily WTF. 2016-02-29 [2018-07-13]. (原始内容存档于2016-03-02). 
  10. ^ Morgan-Mar, David. Piet programming language. 25 January 2008 [18 May 2013]. (原始内容于2021-04-15). 

外部链接 编辑

列表 编辑

深奥的编程语言, 此條目需要补充更多来源, 2011年2月, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, esoteric, programming, language, 有时简写为esolang, 是一类编程语言, 它们被设计用于测试计算机语言表达的极限, 或者作为一个概念的证明, 或仅仅是一个程序员的冷玩笑, esoteric将. 此條目需要补充更多来源 2011年2月 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 深奥的编程语言 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 深奥的编程语言 Esoteric programming language 有时简写为Esolang 是一类编程语言 它们被设计用于测试计算机语言表达的极限 或者作为一个概念的证明 POC 或仅仅是一个程序员的冷玩笑 esoteric将它们与开发人员真正用于编写软件的语言区别开来 通常情况下 Esolang的创作者通常并不打算让它成为主流编程语言 尽管如此 一些深奥的功能如视觉空间语法 1 启发了在艺术中的实际应用 这种语言在黑客和爱好者之间通常较流行 设计者几乎不会以提高该语言的易用性为目标 但会保证逻辑上的可用性 设计者通常会移除或取代传统语言的常见功能 但仍会强调并保持图灵完备性 目录 1 历史 1 1 术语 1 2 图灵焦油坑 1 3 Turning tarpit 1 4 有状态编码 1 5 语言范型 1 6 Funges 1 7 非确定性语言 2 互联网社区 3 示例 3 1 3 2 Befunge 3 3 二元Lambda演算 3 4 Brainfuck 3 5 Chef 3 6 FALSE 3 7 INTERCAL 3 8 JSFuck 3 9 LOLCODE 3 10 Malbolge 3 11 单一指令计算机 3 12 Piet 3 13 Shakespeare 3 14 Whitespace 3 15 Chicken 4 相关条目 5 参考文献 6 外部链接 6 1 列表历史 编辑最早 且仍是深奥语言典型案例的是INTERCAL 英语 INTERCAL 由唐 伍兹和詹姆斯 里昂在1972年设计 意在于创造一种与他们知道的语言所不同的语言 2 它戏仿了当时通用的语言 如Fortran COBOL和汇编 INTERCAL的早期实现尝试是在IBM System 360和一台身份不明的雅达利电脑 可能是Atari 2600 上进行的 但没有成功 多年来 INTERCAL仅仅只存在于INTERCAL手册中 1990年Unix中C语言的实现复兴了这个语言 刺激了深奥计算机语言的设计热潮 1992年 Wouter van Oortmerssen创建了一个小的面向堆栈的编程语言FALSE 它的语法设计成本身就能使代码混淆 混乱 并且难以阅读 值得注意的是 它有一个只有1024字节的编译器 这启发了Urban Muller创建一个更小的语言 也就是现在著名的brainfuck 其中只包括了八个可识别字符 它与Chris Pressey的Befunge 类似FALSE 但有一个二维的指令指针 一道 成为现今最为广泛支持的深奥编程语言 这些都是最小化图灵焦油坑 和多余的语言混淆功能的典型例子 brainfuck的极小化设计兼具了优雅和纯净 实际上它与图灵机P 系列有关 术语 编辑 图灵焦油坑 编辑 主条目 图灵焦油坑 图灵焦油坑 Turing tarpit 是具有图灵完备性的编程语言 但它的指令 操作数或等效对象非常少 其中包括brainfuck 8个指令 0个操作数 单一指令计算机 1个指令 2至3个操作数 和Thue 1个指令 2个操作数 Turning tarpit 编辑 Turning tarpit是有状态编码的图灵焦油坑 即语言中的命令用于从一个有限的范围内选择操作 然后将这些操作应用到程序的当前状态中 3 这样的例子包括reMorse Whirl 也许还包括INTERCAL 英语 INTERCAL 有状态编码 编辑 一种编写程序的方式 使得代码中的每一个子串 定位到列表中的下一条指令 且 应用到转换当前的程序状态 注意每一个单一的指令总是包含两个连续的阶段 选择一个操作 并执行它 操作列表可能是静态的 如reMorse或THRAT 或动态的 如reMorse4ever 下面是一个reMorse或THRAT的例子 Select Next Operation in list Perform Operation 语言范型 编辑 编程语言的范型可以分为若干类别 这些类别可以用来大致了解特定语言的操作方式 其中包括命令式语言 如brainfuck 其指令描述了如何修改数据 函数式语言 如Unlambda 其中的数据和代码都或多或少地可交换 而程序的执行是通过重复迭代调用函数实现的 和重写语言 如Thue 其中可以使用变换函数使状态初始化 Funges 编辑 funge是一类深奥的编程语言 其程序是基于度量空间中的坐标系的 通常为笛卡尔坐标系 但不一定是 运行时 通过在程序空间中通过移动指令指针 用一个位置矢量表示当前执行的指令 以确定空间中的点 从而执行指令 不同的指令指示了指令指针的移动方向 并因此决定指令的执行顺序 目前 这些语言行为的官方标准是Funge 98规范 这个规范是Befunge语言 一个有二维环面拓扑结构的语言 语义的一个概括 严格遵守这个标准的语言有时也被称为funges 如Unefunge 一维 和Trefunge 三维 而更多有显著差异的 远亲 被称为fungeoids 如Wierd 非确定性语言 编辑 对于确定性语言 如果给定程序的当前状态 则总是可以预测它的下一个状态 但非确定性语言就不是这样 大多数的语言都是确定性的 但某些语言提供了一个内置的随机指令 例如Befunge 此外 有些语言 如Java2K 永久失效連結 只有随机指令 因此 即使编一个像有可靠输出这样简单的程序 往往都是一项艰巨的任务 非确定性语言可以用来搜索大范围空间 例如对于语法 穷举搜索是不切实际的 随机文本生成器 例如the Dada Engine和rmutt都是非确定性语言的例子 更神奇的是 不确定性算法已经用于了超计算的理论研究中 互联网社区 编辑在互联网上 有一个规模小 但有活力的社区 聚集了使用和设计语言的爱好者 目前主要围绕着Esolang wiki进行 见下文 esolang社区偶尔会活跃 讨论的范围从争论某个语言是否图灵完备 到如何在编程环境中 将形象化的数学概念弄得抽象和难理解 有一个邮件列表 但几乎废弃不用 大多数时候是在wiki或在IRC上讨论 图灵完备性是一个热门的讨论话题 因为语言的图灵完备性绝不是一眼就能看出的 而且往往需要证明方法上的飞跃才能解决 新语言和新功能不断被创造出来 因此 证明图灵完备性始终是一个挑战 编程语言爱好者的另一个相关追求是混淆代码 示例 编辑下面是一些深奥的语言的典型示例 编辑 是一门由坦纳斯 韦特 Tanner Swett 在2008年发明的编程语言 该编程语言只含有一个操作符 功能是替换字符串 4 5 Hello World程序示例 Hello world 稍微复杂的Hello World world world Hello world world world 在上列代码中 第一次出现的 world world 先被替换为 Hello 得到了 Hello world 随后的代码的功能为打印 Befunge 编辑 主条目 Befunge Befunge类语言允许使用代码 让指令指针在多个维度中漫游 例如 下面的程序将 Hello World 字符以相反的顺序压入栈 然后通过指令 gt v 和 以顺时针方向循环 并在循环中打印字符 dlroW olleH gt v 二元Lambda演算 编辑 主条目 二元Lambda演算 二元Lambda演算是从算法信息论的角度设计的 以便在最少的语句意义下写出尽可能密集的代码 它有一个29字节的自解释器 一个21字节的素数筛选器 和一个112字节的Brainfuck解释器 Brainfuck 编辑 主条目 Brainfuck Brainfuck的语言设计极为精简 并且能轻易写出混乱的代码 它的程序中只有8个不同的字符 例如 下面的程序输出 Hello World gt gt gt gt lt lt lt lt gt gt gt lt lt gt gt gt Chef 编辑 Chef是一种面向堆栈的编程语言 由David Morgan Mar设计 目的是使程序看起来像菜谱 程序中包括标题 列表中的变量和值 和操作堆栈的指令列表 6 尽管首次提出时 它的设计原则是 程序菜谱不仅应能产生有效的输出 还能以此方便地准备美味的食物 然而 如果真按大部分程序中原料的组合和数量 则会做出难以下咽的食物 如果有的话 7 下面的程序是一个例外 能做出Hello World巧克力酱蛋糕 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 the sauce 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 33 g chocolate chips 100 g butter 54 ml double cream 2 pinches baking powder 114 g sugar 111 ml beaten eggs 119 g flour 32 g cocoa powder 0 g cake mixture Cooking time 25 minutes Pre heat oven to 180 degrees Celsius Method Put chocolate chips into the mixing bowl Put butter into the mixing bowl Put sugar into the mixing bowl Put beaten eggs into the mixing bowl Put flour into the mixing bowl Put baking powder into the mixing bowl Put cocoa powder into the mixing bowl Stir the mixing bowl for 1 minute Combine double cream into the mixing bowl Stir the mixing bowl for 4 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 111 g sugar 108 ml hot water 108 ml heated double cream 101 g dark chocolate 72 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 of the mixing bowl Pour contents of the mixing bowl into the baking dish Refrigerate for 1 hour 虽然它读起来像是糟糕的机器翻译 其中还有一些不甚清楚的指示 但按照这个配方的确可以做出巧克力酱蛋糕 8 FALSE 编辑 主条目 FALSE FALSE是一种面向堆栈的编程语言 有单字符命令和变量 例如 3 1的结果可以通过执行 l x x 1 3 得出 3 1 INTERCAL 编辑 主條目 INTERCAL 英语 INTERCAL INTERCAL是 缩写无法发音的编译器语言 Compiler Language With No Pronounceable Acronym 的简称 2 JSFuck 编辑 JSFuck 或为了避讳脏话写作JSF ck 是一种深奥的JavaScript编程风格 以这种风格写成的代码中仅使用 和 六种字符 与其他深奥编程语言不同的是 以JSFuck风格写出的代码不需要另外的编译器或解释器来执行 无论浏览器或JavaScript引擎中的原生JavaScript解释器皆可直接运行 9 LOLCODE 编辑 主条目 LOLCODE LOLCODE被设计为类似lolcat的说话方式 以下是 Hello World 的例子 HAI CAN HAS STDIO VISIBLE HAI WORLD KTHXBYE Malbolge 编辑 主条目 Malbolge Malbolge 地狱的第8圈 被设计为最困难和最深奥的编程语言 单一指令计算机 编辑 主条目 单一指令计算机 单一指令计算机是一种只有一个操作的机器语言 这实际上是一类语言 因为对于任何给定的操作 都可以定义这样的语言 Piet 编辑 nbsp Piet程序 输出 Piet nbsp Piet的 Hello World 程序维基共享资源中相关的多媒体资源 PietPiet是由David Morgan Mar设计的 这个语言的程序是点阵图 看起来像抽象艺术 10 编译器由一个 指针 引导 在图像中从一个色块移动到下一个 指针移出一个区域时执行一个操作 20种颜色有指定的行为 18种 彩 色 依6步色调周期和3步亮度周期排序 黑色和白色未排序 当由一种 彩 色进入到另一种时 执行的操作由色调和亮度的变化数确定 黑色不能进入 当指针试图进入一个黑色的区域时 将会改变选择下一个块的规则 如果所有可能的规则都尝试过了 则程序终止 图像边界以外的地方也被视为黑色 白色不执行操作 但允许指针 通过 20种指定以外的颜色行为由编译器或解释器指定 变量以有符号整数存储在内存中的单一堆栈内 大多数操作是在这个堆栈上进行的 其他操作则可以在栈上进行输入 输出 或告诉编译器移动指针的规则 Piet是以荷兰画家皮特 蒙德里安 Piet Mondrian 命名的 原定的名称Mondrian已经被占用了 Shakespeare 编辑 主条目 Shakespeare 编程语言 和Shakespeare Shakespeare语言 SPL 的目的是使程序看起来像莎士比亚的戏剧 例如下面的语句声明了程序中的一个点 可以通过一条GOTO语句转到 Act I Hamlet s insults and flattery Whitespace 编辑 主条目 Whitespace Whitespace语言只使用空白字符 空格 制表符和回车 并忽略所有其他字符 这与传统语言不区分不同的空白字符 不区分空格和制表符相反 这个特性还允许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 chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken 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参考文献 编辑 McLean A Griffiths D Collins N and Wiggins G 2010 Visualisation of Live Code In Electronic Visualisation and the Arts London 2010 2 0 2 1 Woods Donald R Lyon James M The INTERCAL Programming Language Reference Manual Muppetlabs com 1973 2009 04 24 原始内容存档于2009 04 24 Turning tarpit Esolang 页面存档备份 存于互联网档案馆 Esolangs org 2011 05 26 Retrieved on 2011 11 21 游戏天空 专属于程序猿的天书 十大最怪异的编程语言 2017 01 14 原始内容存档于2017 01 16 Esolang 2017 01 14 原始内容存档于2020 11 12 DM s Esoteric Programming Languages Chef 页面存档备份 存于互联网档案馆 Dangermouse net Retrieved on 2013 07 21 DM s Esoteric Programming Languages Chef Hello World 页面存档备份 存于互联网档案馆 Dangermouse net Retrieved on 2013 07 21 Baking a Hello World Cake Products of Mike s Mind 页面存档备份 存于互联网档案馆 www mike worth com Retrieved on 2013 09 01 Jane Bailey Bidding on Security The Daily WTF 2016 02 29 2018 07 13 原始内容存档于2016 03 02 Morgan Mar David Piet programming language 25 January 2008 18 May 2013 原始内容存档于2021 04 15 外部链接 编辑Esolang 页面存档备份 存于互联网档案馆 致力于深奥编程语言的维基站点 EsotericProgrammingLanguage 位于WikiWikiWeb列表 编辑 esolang wiki上的esolang列表 页面存档备份 存于互联网档案馆 开放式目录计划中和Obfuscated Programming Languages相关的内容 取自 https zh wikipedia org w index php title 深奥的编程语言 amp oldid 79435819, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。