是否有任何实际用途的深奥语言?

时间:2009-10-02 09:31:50

标签: esoteric-languages

您是否知道esoteric language用于编写任何实用的真实世界程序的示例?是否存在任何模糊的计算机科学领域,其中一种深奥的语言实际上被证明对解决特定问题有用?

17 个答案:

答案 0 :(得分:62)

根据定义,深奥的编程语言没有实际用途。但是,仅仅因为你不能使用它们,并不意味着它们不是有用的

<强> TL; DR:

例如,当你看一些深奥的编程语言时,你可以大致将它们分成几类:一些是作为一个笑话创建的,一些是为了好玩而创建的,一些是作为图灵的tarpits创建的,但也有一些是旨在证明或说明一点。而这些 实际上对此非常有用:说明一点,可能在编程语言类中,可能是社区或行业。尽管它们在实际应用中毫无用处,但它们仍然用于教育目的 ful

采用非确定性的深奥编程语言。这些是编程语言,对于这些编程语言,某些表达式的评估语义没有确定性地定义,但是例如概率地或基于月亮的相位或类似的东西。如果你看一下这种语言的定义,你会立刻想到:“嗯,这只是愚蠢的。”它是! (例如,Java2k中的Hello World程序几乎是一页代码,甚至不能保证每次都打印“Hello World”,大部分时间都是如此。)然而,今天的大多数主流编程语言都有非确定性并发模型。 IOW:只要你用Java,C#,Python,Ruby,Perl,甚至Erlang或Clojure开始一个线程,你的程序就像在深奥的Java2k中一样随机。那么,为什么我们认为一个人是愚蠢的并接受另一个正常,即使他们基本上是一样的东西?通过将非决定论推向极端,并以有趣的方式将其打包,esolangs允许我们提出这个问题。

另一个例子是Turing tarpits。 Turing tarpit是一种几乎没有特征但仍然是图灵完整的esolang。这样的Turing tarpit可以用来演示两种不同的东西:你可以用它来证明它是什么让某些语言比其他语言更“强大”(在表达力方面)。如果你在网上搜索,你会发现人们会问“如果Lisp比Java好得多,你为什么不给我看一些你可以用Lisp写的程序,但我不能用Java编写。”当然,这是愚蠢的:两种语言都是图灵完备的,所以没有这样的程序。然而,通过将Java与Brainfuck进行对比,您可以证明这不是一个有意义的问题。

你用Turing tarpits演示的另一件事就是你不能通过删除功能来使语言更强大(在这两个词中:计算能力和表现力)。这听起来很明显,但是有些人实际上认为微软应该从C#中删除可变状态,它会神奇地变得更强大。

一般来说,Turing tarpits有助于证明计算能力与编程语言的表达能力之间的区别。

esolangs有用的其他方式是它们可以作为编程语言研究的灵感来源。想想Unlambda,顾名思义,它是一种基于lambda演算的 not 的函数式语言。换句话说:它是一种没有功能的功能语言。

最后但并非最不重要的是,esolangs可以迫使你从一个完全不同的角度看问题(是的,我承认,这主要是一个尴尬的角度,但是,嘿,一些电影导演(例如希区柯克)欠他们的整个从尴尬的角度看待事物的事业)他们戏弄你的大脑就像一个好的谜题。也就是说,例如,存在的全部原因和Brainfuck的名称。

答案 1 :(得分:20)

工作保障!!!

答案 2 :(得分:15)

真实世界的应用,是吗?

游戏 Lost Kingdom 赢得了2004年第一届年度经典2k文本冒险大赛,并由原作者in brainfuck

(重新)撰写和增强

IRC bot in Befungethis text editor怎么样?我想如果你喜欢用深奥的语言写作,你可能会认为befunge to C compilerbrainfuck to C compiler非常有用......

答案 3 :(得分:10)

如果对某种语言使用实用,则不会将其称为深奥。这两个词是相互排斥的。

答案 4 :(得分:8)

了解图灵机,可计算性以及对计算理论所暗示的内容的实际意义。如果你使用像大脑****这样的深奥语言,可以收集所有的实际好处。

我相信,还有其他人。

答案 5 :(得分:5)

某些深奥的编程语言类在理论计算机科学中有应用。

Turing tarpits用于说明可计算性理论和暂停问题的某些结果。例如,参见Ianov的工作(this article下方有一个稍微容易理解的摘要)。

图灵机类的基本结果是另一个实际应用。例如,维基百科指出P''是“第一个'无GOTO'命令式结构化编程语言,可以证明图灵完备。”

Binary combinatory logic是分析Kolmogorov complexity的有用工具。

答案 6 :(得分:4)

受到this question的启发及其答案,我也发现了这种语言的实际用途:GolfScript,一种专为代码高尔夫设计的语言:

  

GolfScript是面向堆栈的   深奥的编程语言   解决问题(漏洞)的人数很少   按键尽可能。它的目标也是   简单易写。

你有它,直接来自写作的人。虽然代码高尔夫是否是一个实际的问题可能是有争议的,但我个人的信念是,它变得越来越接近你和我可能实际写下和遇到的东西, 更不用说它是一个有趣的编程练习,并与很多粉丝竞争。所以...如果游戏,足球和各种其他娱乐活动都有某种方式......实际......我也可以自由地包括代码高尔夫:)

答案 7 :(得分:3)

我看到的唯一实际好处是,如果你用深奥的语言编写代码,它会让你以新的和有趣的方式思考问题。即使您使用主流语言进行编程,学习解决问题的新方法也会受益。

去年我读了Charles Petzold的'Annotated Turing'。我当然无意编程图灵机,至少在他描述时。但是考虑用他的“语言”来解决问题让我大吃一惊。我是一个更好的C#程序员。

答案 8 :(得分:3)

不确定; Fungot,IRC机器人:http://zem.fi/~fis/fungot.b98.txt

答案 9 :(得分:2)

如果仅由the Wikipedia link判断:

  

一种深奥的编程语言   (有时候缩短为esolang)是一个   编程语言设计为   测试计算机的边界   编程语言设计,作为一个   概念证明,或作为一个笑话。那里   通常是无意的   现实世界采用的语言   编程。

然后,没有,这种语言没有实际应用于真正的问题。

原因不是侮辱语言,而是注重“实用”:

  1. 在实践中,如果您正在解决问题,您需要能够说服自己已经解决了问题。如果您使用的是专门设计难以阅读的语言,那么很难直观地检查您的解决方案并说“是的,这是正确的。”
  2. 在实践中,你不是在真空中工作。在现实生活中,你总是与非零的其他人一起工作(即使它只是你在未来)。其他人将不得不维护你的解决方案,在这里添加一个功能,在那里解决问题,或者更糟糕的是,尝试记录你做了什么以及为什么。
  3. 如果1和2都不适用,那么您已经创建了一个问题的解决方案,该问题是(a)非常容易检查和(b)从不需要维护,因为它从未在实践中使用过。因此,这是一个微不足道的/非实际的问题。

答案 10 :(得分:2)

开发深奥的语言就像创建Mandala一样。工作结束后,你可以忘记甚至毁灭。

答案 11 :(得分:2)

colorforth非常强大,实用。

OKAD和GA4在290K

答案 12 :(得分:1)

代码混淆是一种非常常见的实际用途:-p

我不知道APL / J / K系列是否可以被称为深奥,但它们已经在很长一段时间内用于生产系统。

答案 13 :(得分:1)

存在一种叫做Pilot的语言。它是用达特茅斯BASIC(一种插曲语言)编写的解释性语言。最初的用途是让非编程教师能够编写测试程序。该语言中的所有命令都是单个字母,使用的字母定义了可用的选项。它很古老,(我在1976年学到了它),据我所知,它已经不再有用了。

答案 14 :(得分:1)

在其他用途​​中,对于算法搜索,搜索用途(如基于约束的编程和不断发展的解决方案),可以使用更小的最小值(黑盒子)/(沙盒算法语言)。

答案 15 :(得分:0)

此答案针对3种深奥的编程语言:

  • 高尔夫语言
  • 转弯沥青
  • 游戏语言

当您需要一起破解某些东西以供一次性使用时,高尔夫语言非常有用。而不是编写100行Python程序脚本或进行调试大礼包,因为您在高尔夫语言内置的某个东西上犯了错误,只需连接几个内置函数即可更快地完成工作。

旋转柏油布有助于创造力。您必须考虑图灵tarpit所具有的一些命令,才能跳出框框。在BF中,您如何将通过程序提供的整数(只是一堆ASCII值)转换为可以处理的值(例如单个单元格值)?您将如何检查平等性?您如何将两个数字相加?

转向tarpit对实践代码组织也很有用。当一个简单的任务(例如,将两个数字相加)需要您制作伪代码并具有整个程序的布局时,您必须组织程序。在BF中添加两个单元格值,您需要:1.递减第一个加数2.递增第二个加数3.循环直到第一个加数为空。

游戏中的语言对于增强该世界/级别的玩家的世界/级别的体验非常有用。在Roblox中(尽管我不会将其称为“深奥的”脚本语言),如果您只是将一些零件和模型放入您的世界中,会很有趣吗?否。如果您编写脚本来与您战斗并为自己装备枪支,就可以吗?也许。在Geometry Dash中,您可以要求您单击“编程语言”中的特定次数来使关卡更难,或者使其在上司战斗中使用伪随机攻击。游戏中深奥的编程语言可以极大地提高游戏关卡/世界中的可能性范围。

答案 16 :(得分:-2)

Eiffel,Erlang,Ocaml,Haskell。对于大多数程序员来说,这些都是“利基”语言,但它们在其领域内是实用的。你的问题根本没有意义,可能会问“我们在流行的问题领域中没有使用任何好的语言吗?”