英文原文:The 10 Weirdest Programming Languages
人们都认为编程语言很容易使用和学习。编程语言应该给你提供数据结构让你来解决实际问题,它们的语法也应清晰明了,容易理解且执行速度快,没有任何 bug。但有时候编程语言设计者们会创建一些违背这些原则的语言,要么供研究使用要么纯属娱乐。下面是 10 种最怪异的最不切实际的编程语言。
1)LOLCODE
很少有编程语言像 LOLCODE 这样注入了这么多网络时代的成分(译者注:LOLCODE 是一种建立在高度缩写的网络英语之上的编程语言)。它由英国兰卡斯特大学研究员 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,它可以让你访问所有 Python 的强大的功能库。
更多的代码和例子请看维基百科介绍。
2)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).?=\]}
更多的例子和说明请看这个网页。
3) Brainfuck
Brainfuck 是晦涩难懂的语言巨星,受到了大批崇拜者的追捧。该语言是出了名的难以编程,仅有 8 个简单的命令和一个指令指针。它的设计就是为了挑战和娱乐程序员,而不是为了用于实际用途。它由 Urban Müller 于 1993 年创建。
下面是“Hello world!”的例子:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.
<<+++++++++++++++.>.+++.------.--------.>+.>.
更多请看 这里。
4) Chicken
Chicken 不仅是语言的名字,也是该语言允许的唯一关键字。关键字重复的次数和换行决定执行的具体操作。下面是一个例子,你能猜出它是干嘛的吗?
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
更多请看 这篇文章
5) 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
学习更多请看 这里
6) ///
///是一门极简派风格的编程语言,仅包含一个操作—即用/source/replacement/这样的形式进行字符串替换。它由 Tanner Swett 于 2008 年发明。该语言的功能十分有限,但是一些聪明的程序员能够将字符串替换转换为完整的工作程序,用以循环和输出数据,下面是一个简单的“Hello, world!”的程序:
/ world! world!/Hello,/ world! world! world!
学习更多请看 这里
7) Befunge
Befunge 是一个二维编程语言。你的代码放在一个固定大小的场地,该场地的每一列都能存放代码或者数据,你的程序可以替换任何想要替换的列。解释器从左上列开始从左到右解析。你可以用特殊的方向指令控制解释器的方向。例如,下面是一个无线循环的例子:
>v
^<
而下面这个是“Hello, world!”的程序:
0"!dlroW ,olleH">:#,_@
学习更多请看 这里
8) Piet
Piet 编程语言的程序看起来都像抽象画的位图,基本的构建块就是颜色块。它支持 20 种不同的颜色,有些实现支持的更多。编译器由图像周围的移动“指针”引导,在图像中从一个色块移动到下一个。下面是一个“Hello world!”程序:
Hello World in Piet
学习更多请看该语言的 主页
9) 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@>
10) ~English
~English 是一门试图模仿自然声音语言的编程语言,其语法非常宽松,使程序员有很大的自由表达空间。但程序员不能自己定义函数而只能使用该语言内置的函数。下面是一个例子程序:
Display "Hello world!" and a newline. Stop the program.
学习更多请看 这里 ,你可能也对 Shakespeare 感兴趣。
荣誉提名: JavaScript
Javascript 是如今最受欢迎的编程语言,但受欢迎带来的副作用就是该语言自身的每处特性,无论该语言多美妙,还是每天给成千上万的程序员带来了 bug,这使得 JS 也列在这里。这里有一个完整的网站列出了 Javascript 的怪异之处,给你一个例子,下面是两个简短的完全有效的 JS 片段(你可以在你的控制台上试验一下):
// This prints 10: alert (++[[]][+[]]+[+[]]); // And this "fail": alert ((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);
更多的信息请看这些 StackOverflow 上面的问题: 1、 2
结论
包含在这份列表中的这些深奥的语言,给大家提供了一种提出和验证新思想的方法。有时候这些想法会影响整个工业界。但是它们中的大部分都是不切实际的且深奥、范围狭窄,你刚刚只学了其中的 10 种,但实际上有几百种。
翻译: 伯乐在线 - 敏敏 译文链接: http://blog.jobbole.com/53408/