编程语言设计出来应该是容易学习和使用的。他应该有着很少的bug,他应该容易交流沟通,他应该简洁明了,然而总有一些语言不按照常规套路出牌,下面我们就看看那些令人感到奇怪的语言。
这是一个诞生于2007年的编程语言,它最大的特点就是所有字母都是大写,也就是说用它编程的时候,当你按下大写字母按键后,就可以把它扣下来了,因为你没有机会再安它了。
Glass是在2005年开发的一种深奥的编程语言。它结合了一个不直观的后缀符号和大量的面向对象,需要结合其面向对象的结构对主堆栈进行广泛的处理。据作者说,没有其他语言是这样实现的,因为这将是白痴。
{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).?=\]}
Brainfuck是晦涩语言中的超级明星,几乎另所有需要望尘莫及。用它编程非常地困难,它只有八个简单的命令和一个指令指针。它创造的目的就是为了挑战和娱乐程序员,并不是为了适合实际使用。一个简单的hello world的代码如下。
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.
<<+++++++++++++++.>.+++.------.--------.>+.>.
chicken不仅是语言的名称,也是语言中唯一允许使用的关键字!重复次数和新行数决定了要执行的操作码。
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
whitespace是一种了不起的编程语言,它只理解空格、制表符和新行,而忽略其他所有内容。这使得用另一种语言如JavaScript编写常规程序成为可能,JavaScript的缩进是一个空白的程序!下面是一个打印出“你好,世界!”(空格用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
///是一种极简语言,只包含一个操作-字符串替换,格式为/source/replacement/。它是由坦纳·斯威特在2006年发明的。语言是非常有限的,但是一些聪明的程序员能够将字符串替换操作转换为循环和输出数据的完全工作的程序。这里有一个简单的hello world程序。
/ world! world!/Hello,/ world! world! world!
Befunge是一种二维编程语言。你的代码放在一个固定大小的游戏场上。游戏区的每个单元格可以保存代码或数据,并且程序可以用任意单元格替换它想要的任何单元格。解释器从左上角的单元格开始,一直到右上角。您可以通过特殊的方向指令来控制解释器的方向。例如下面是一个无限循环的例子。
>v
^<
Piet是一种编程语言,其中的程序是看起来像抽象画的位图。Piet程序的基本构造块是颜色块。它支持20种不同的颜色,有些实现支持更多颜色。编译是由一个“指针”引导的,该指针在图像周围移动,从一个连续的彩色区域移动到下一个。一个hello world的程序如下。
Malbolge是Ben Olmstead于1998年发明的一种编程语言,以但丁地狱第八圈命名。名字并不是随机选择的——语言是专门设计的,不可能用它来编写有用的程序。在它推出后的几年里,我们发现了它在设计上的弱点,使得编写Malbolge程序成为可能。不过,要想在其中编写一个有意义的程序,你还必须是一名密码学科学家。这是hello word例子。
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
我们熟知的js其实也是很诡异的,不信你看看下面的这些代码。
// This prints 10:
alert(++[[]][+[]]+[+[]]);
// And this "fail":
alert((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);