luv*_*ere 18 esoteric-languages
您是否知道任何用于编写任何实用,真实世界程序的深奥语言的例子?是否存在任何模糊的计算机科学领域,其中一种深奥的语言实际上被证明对解决特定问题有用?
Jör*_*tag 63
根据定义,深奥的编程语言没有实际用途.但是,仅仅因为你不能使用它们,并不意味着它们没用.
TL;博士:
例如,当你看一些深奥的编程语言时,你可以大致将它们分成几类:一些是作为一个笑话创建的,一些是为了好玩而创建的,一些是作为图灵的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编写." 当然,这是愚蠢的:两种语言都是图灵完备的,所以没有这样的程序.然而,通过将Brain与Brainfuck进行对比,您可以证明这不是一个有意义的问题.
而你用Turing tarpits演示的另一件事是你可以通过删除功能来使语言更强大(在这两个词中:计算能力和表达能力).这听起来很明显,但有些人实际上认为微软应该从C#中删除可变状态,它会神奇地变得更强大.
通常,Turing tarpits有助于证明计算能力与编程语言的表达能力之间的区别.
esolang可能有用的其他方式是它们可以作为编程语言研究的灵感来源.想想Unlambda,顾名思义,它是一种不基于lambda演算的函数式语言.换句话说:它是一种没有功能的功能语言.
最后但并非最不重要的一点是,esolangs可以迫使你从一个完全不同的角度来看问题(是的,我承认,这主要是一个尴尬的角度,但是,嘿,一些电影导演(例如希区柯克)将他们的整个职业生涯都归功于寻找从尴尬的角度来看,他们会把你的大脑戏弄成一个好的谜题.也就是说,例如,存在的全部原因和Brainfuck的名称.
sho*_*osh 10
如果某种语言有实际用途,就不会被称为深奥.这两个词是相互排斥的.
一些深奥的编程语言类在理论计算机科学中有应用.
Turing tarpits用于说明可计算性理论和停止问题的某些结果.例如见工作Ianov(有一个稍微更容易总结中途下来这篇文章).
图灵机类的基本结果是另一个实际应用.例如,维基百科指出P''是第一个'无GOTO'命令式结构化编程语言,可以证明图灵完备."
二元组合逻辑是分析Kolmogorov复杂性的有用工具.