人们都认为编程语言很容易使用和学习。编程语言应该给你提供数据结构让你来解决实际问题,它们的语法也应清晰明了,容易理解且执行速度快,没有任何 bug。但有时候编程语言设计者们会创建一些违背这些原则的语言,要么供研究使用要么纯属娱乐。下面是 10 种最怪异的最不切实际的编程语言。
LOLCODE
很少有编程语言像 LOLCODE 这样注入了这么多网络时代的成分,LOLCODE 是一种建立在高度缩写的网络英语之上的编程语言,(译注:就像它的名字 LOL 一样)。它由英国兰卡斯特大学研究员 Adam Lindsay 于 2007 年创建,该语言的关键字都是大写的且 meme-fied(译注:英文的原文,译者也不理解)。你几乎可以想象一个猫在生产中使用它。
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
VISIBLE VAR
IZ VAR BIGGER THAN 10? KTHX
IM OUTTA YR LOOP
KTHXBYE
与该份列表中的大部分语言一样,LOLCODE 没有标准库可言。这意味着你只能使用 LOLCODE 来读取文件或写入文本到控制台而不能干其他的事。如果你需要功能更强的版本,那么看看因 LOLCODE 受到启发的 LOLPython(http://www.dalkescientific.com/writings/diary/archive/2007/06/01/lolpython.html),它可以让你访问所有 Python 的强大的功能库(这样写 Python 的是有多无聊啊……)。
更多的代码和例子请看维基百科上的介绍:http://en.wikipedia.org/wiki/LOLCODE。
Glass
Glass 是一门深奥的编程语言,由 Gregor Richards 于 2005 年发展起来。它将非直观的后缀符号与沉重的面向对象结合起来,需要一个主栈与其面向对象的结构相结合才能进一步玩出花样。据作者所言没有其它的语言像这样执行,因为看起来非常的白痴。
下面是该语言的一个例子,程序输出 Fibonacci 序列:
{F[f(_a)A!(_o)O!(_t)$(_n)1=,(_isle)(_n)*(_a)(le).?=/(_isle)^\(_n)*(_a)
s.?(_t)f.?(_n)*(_a)s.?(_t)f.?(_a)a.?]}{M[m(_a)A!(_f)F!(_o)O!(_n)=(_nlm)
=/(_nlm)(_n)*(_f)f.?(_o)(on).?" "(_o)o.?(_n)(_n)*(_a)a.?=(_nlm)(_n)*
(_a)(le).?=\]}
更多的例子和说明请看 esolangs 的 wiki:http://esolangs.org/wiki/Glass。
Brainfuck
Brainfuck 是晦涩难懂的语言巨星,受到了大批崇拜者的追捧。该语言是出了名的难以编程,仅有8个简单的命令和一个指令指针。它的设计就是为了挑战和娱乐程序员,而不是为了用于实际用途。它由 Urban Müller 于 1993 年创建。
下面是“Hello world!”的例子:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.
<<+++++++++++++++.>.+++.------.--------.>+.>.
更多的代码和例子请看维基百科上的介绍:http://en.wikipedia.org/wiki/Brainfuck。
Chicken
Chicken 不仅是语言的名字,也是该语言允许的唯一关键字。关键字重复的次数和换行决定执行的具体操作。下面是一个例子,你能猜出它是干嘛的吗?
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
更多的例子和说明请看 esolangs 的 wiki:http://esolangs.org/wiki/Chicken。
Whitespace
Whitespace 是一门很出色的编程语言。它仅通过空格、制表符和回车来理解并忽略所有其他字符。这个特性还允许 Whitespace 程序隐藏在其他语言程序的源代码中,例如 JavaScript,Javascript 的缩进就是用空格写的。下面是一个例子用以打印“Hello, world!”(S 表示单个空格,T 表示制表符):
S S S T S S T S S S
T
S S S S S T T S S T S T
T
S S S S S T T S T T S S
T
S S S S S T T S T T S S
T
S S S S S T T S T T T T
T
S S S S S T S T T S S
T
S S S S S T S S S S S
T
S S S S S T T T S T T T
T
S S S S S T T S T T T T
T
S S S S S T T T S S T S
T
S S S S S T T S T T S S
T
S S S S S T T S S T S S
T
S S S S S T S S S S T
T
S S
更多的代码和例子请看维基百科上的介绍:http://en.wikipedia.org/wiki/Whitespace_%28programming_language%29。
///
/// 是一门极简派风格的编程语言,仅包含一个操作—即用 /source/replacement/ 这样的形式进行字符串替换。它由 Tanner Swett 于 2008 年发明。该语言的功能十分有限,但是一些聪明的程序员能够将字符串替换转换为完整的工作程序,用以循环和输出数据,下面是一个简单的“Hello, world!”的程序:
/ world! world!/Hello,/ world! world! world!
更多的例子和说明请看 esolangs 的 wiki:http://esolangs.org/wiki////。
Befunge
Befunge 是一个二维编程语言。你的代码放在一个固定大小的场地,该场地的每一列都能存放代码或者数据,你的程序可以替换任何想要替换的列。解释器从左上列开始从左到右解析。你可以用特殊的方向指令控制解释器的方向。例如,下面是一个无限循环的例子:
>v
^<
如下是“Hello, world!”:
0"!dlroW ,olleH">:#,_@
更多的例子和说明请看 esolangs 的 wiki:http://esolangs.org/wiki/Befunge。
Piet
Piet 编程语言的程序看起来都像抽象画的位图,基本的构建块就是颜色块。它支持 20 种不同的颜色,有些实现支持的更多。编译器由图像周围的移动“指针”引导,在图像中从一个色块移动到下一个。下面是一个“Hello world!”程序:
[image align=”center” width=”one_half” lightbox=”true”]https://k2vtnq.dm2301.livefilestore.com/y2p2QpikwdnW-lUSMG_91yxUKFquXNfPGO1fLGPoahl66meBlxMHRrhXyZ-1ElUJP4HfEcO_YbKJilo8bmsKk1CbV8L97aRE2gTR0aLsDGT1ww/Piet_Program_Hello_World.gif[/image]
更多的例子请看该语言的主页:http://www.dangermouse.net/esoteric/piet.html。
Malbolge
Malbolge 语言由 Ben Olmstead 于 1998 年发明,以“但丁的地狱”中地狱的第8圈命名。该名字不是随机选取的—该语言设计的初衷就是为了不可能写出有用的编程语言。在创建几年后,有人发现了设计中的漏洞使其能用 Malbolge 写程序。你必须得成为一个密码科学家才能用它写出有意义的程序。下面是 Malbolge 中看起来像‘Hello World!”程序:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
更多的代码和例子请看维基百科上的介绍:http://en.wikipedia.org/wiki/Malbolge。
~English
~English 是一门试图模仿自然声音语言的编程语言,其语法非常宽松,使程序员有很大的自由表达空间。但程序员不能自己定义函数而只能使用该语言内置的函数。下面是一个例子程序:
Display "Hello world!" and a newline.
Stop the program.
学习更多请看维基百科上的介绍:http://en.wikipedia.org/wiki/Malbolge。类似的,你可能也对 Shakespeare(译注:不是莎士比亚,是语言名)(http://en.wikipedia.org/wiki/Shakespeare_%28programming_language%29)感兴趣。
荣誉提名 JavaScript
Javascript 是如今最受欢迎的编程语言,但受欢迎带来的副作用就是该语言自身的每处特性,无论该语言多美妙,还是每天给成千上万的程序员带来了 bug,这使得 JS 也列在这里。这里有一个的网站列出了 Javascript 的怪异之处:http://wtfjs.com/。给你一个例子,下面是两个简短的完全有效的 JS 片段(你可以在你的控制台上试验一下):
// This prints 10:
alert(++[[]][+[]]+[+[]]);
// And this "fail":
alert((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);
更多的信息请可以参考 StackOverflow:javascript – (![]+[])[+[]]… Explain why this works(http://stackoverflow.com/questions/4170978/explain-why-this-works?lq=1)和 javascript – Can you explain why ++[[]][+[]]+[+[]] = “10”?(http://stackoverflow.com/questions/7202157/can-you-explain-why-10)。
结论
包含在这份列表中的这些深奥的语言,给大家提供了一种提出和验证新思想的方法。有时候这些想法会影响整个工业界。但是它们中的大部分都是不切实际的且深奥、范围狭窄,你刚刚只学了其中的 10 种,但实际上有几百种,这里有个较为完整的名单:http://esolangs.org/wiki/Language_list。
文章来源:http://tutorialzine.com/2013/12/the-10-weirdest-programming-languages/