第一次遇到这些语言时,我下意识觉得有些程序员可能工作不饱和。其实这些语言中有一些是为了特定目的而创建的,另一些则是在于挑战和娱乐。总之,非常羡慕这些又聪明又有时间的人了!我们来看看这些编程语言有多奇怪 。
Brainfuck
Brainfuck是一种极小化的程序语言,它是由Urban Müller在1993年创造的。由于fuck在英语中是脏话,这种语言有时被称为Brainf*ck或Brainf***,或被简称为BF。,目标是为Amiga OS 2.0创建一个图灵完备的语言,他可以为此编写有史以来最小的编译器。他的编译器大小为240字节。(虽然他后来对此进行了改进 - 他曾一度告诉我他已经设法将它降到200字节以下。)
Brainfuck程序有一个隐含的字节指针,称为“指针”,它可以在30000字节的数组中自由移动,最初都设置为零。指针本身被初始化为指向此数组的开头。
Brainfuck编程语言由八个命令组成,每个命令都表示为一个字符。
> 增加指针。
< 减少指针。
+ 递增指针处的字节。
- 减少指针处的字节。
。 输出指针处的字节。
, 输入一个字节并将其存储在指针的字节中。
[ 如果指针处的字节为零,则跳过匹配]。
] 向后跳转到匹配[ 除非指针处的字节为零。
Brainfuck命令的语义也可以用C语言简洁地表达,如下所示(假设p先前已被定义为char *):
> 可以转变为++p;
< 可以转变为--p;
+ 可以转变为++*p;
- 可以转变为--*p;
. 可以转变为putchar(*p);
, 可以转变为*p = getchar();
[ 可以转变为while (*p) {
] 可以转变为}
下面来瞅瞅最简单的Hello world, 你能看懂吗?
Ook!
OOK!是一种为红毛猩猩设计的编程语言。OOK!与众所周知的深奥语言BrainF ***基本上是同构的 ,但语法元素更少。也不多说了,来看看Hello world
reMorse
reMorse是一种看似莫尔斯电码的语言。这种简单而富有挑战性的语言很容易让我们联想到潜艇和电报。 这种语言还是挺复杂的。 比如以下的HelloWorld例子都可以看出,连作者都懒得写完 Hello World 的代码,你就知道 reMorse 是一个多麻烦的语言了:
Malbolge
这门编程语言绝了,根据牛的叫声发明,写代码时学牛“哞。在设计编程语言时,追求易于理解,是绝大部分设计师的追求。可是,偏偏有人反其道行之。Malbolge就是其中的佼佼者。它追求的,就是尽量让你看不懂,最好能把你看懵圈了。使用Malbolge写“hello world”程序,代码是这个样子的:
cow语言
这是一门神奇的语言,就好像“两只老虎,两只老虎,跑得快”一样,没人能正常的读出这个歌词。当你在编写cow代码时,你的内心,就像一头牛一个,哞哞哞叫个不停。因为,cow语言也是模仿牛的叫声编程的,写hello world程序是这个样子的(让我想起了暗黑2的奶牛关):
INTERCAI
1972年,为了讽刺其他编程语言,唐·伍兹和詹姆斯·M.里昂两个普林斯顿大学的学生,发明了INTERCAL语言,这门语言不仅讽刺了当时的其他编程语言,而且对20世纪60年代拟定的语言结构和注释进行了冷嘲热讽。用INTERCAI写“hello world”,是这个样子的:
Whitespace
十分不幸,这种编程语言所做的正如其名:Whitespace 程序是用空格(whitespace)编写的。 Whitespace 官网上有对该语言使用方式的详细描述。
大多数现代编程语言并不考虑空格字符(空格,制表符以及换行符),忽略它们,就好像它们不存在一样。 我们认为,这对这些十分友好的字符成员十分不公正。是否因为它们是隐形的,就应该被忽略呢? Whitespace 就是一种想要纠正这种不公平的编程语言。在 Whitespace 语言里,任何非空白字符都是被忽略的,只能使用空格、制表符和换行符来编写程序。以下是用 Whitespace 编写的 Hello World :
Shakespeare
莎士比亚(Shakespeare)正如其名,是以伟大剧作家莎士比亚的作品为基础的编程语言。在莎士比亚语言中,每个程序都有一个标题、幕、场景和角色,用来组合成精彩的源代码,让它们读起来很有趣。用莎士比亚语言编写的 “Hello World”是这样子的 :
Piet
欣赏艺术的人一定会喜欢 Piet 这门编程语言。受到抽象艺术家彼埃·蒙德里安(Piet Mondrian)的启发,Piet 是一种将编程转换成抽象几何绘画的语言。程序由20种不同的颜色组成,然后由编译器根据十六进制值读取运行。Piet编写的HelloWorld例子是这样子的:
Asciidots
Asciidots 语言力求看起来像艺术,以下是几个 Asciidots 示例程序,是不是挺艺术的。
Omgrofl
现在社交网络上很多简写词汇,比如 lol, omg, brb, wtf 之类的。所以有人就觉得用这些互联网缩略词作为命令是件很有趣的事,于是这门语言诞生了。一个典型的 Omgrofl 程序看起来就像十几岁青少年间的对话,所有的变量都是 lol, lool, loool 等形式。以下是Hello World的 Omgrofl 语言版本:
GolfScript
这门语言旨在实现简单易写,对于复杂的堆栈操作很有用。
JSFuck
这门语言有点厉害了,代码使用的字符集只有六个。它是一种弱类型编程语言,允许评估任何类型的表达式。而且由于它是 JavaScript 的一个子集,因此可以在 JavaScript 的引擎上运行。以下是我在Nodejs上运行的console.log(1)的JSFuck代码:
Velato
Velato 使用 MIDI 文件作为源代码,音乐的模式决定程序命令。以下是Hello World的 Velato 语言版本:
Whenever
没有哪个程序员不喜欢这么一种语言,当你给出计算机一个指令时,计算机就会根据你的要求去执行。但是 Whenever 似乎并不是这样的,它更像是你的宠物猫,它的代码并不是顺序执行的。它们更像是一种待办事项清单,它的设计原则是:
代码总会被执行,但执行顺序和指定顺序无关
不需要变量更不需要数据结构
好奇这种语言究竟有什么用?
Grass
Grass 是一种函数式编程语言,只使用字符「W」「w」和「v」。因此,Grass 中的程序被认为看起来像「草」的 ASCII 艺术。以下是一个在 Grass 中打印「W」的程序:
wWWwwww