编程语言中那些有趣的命名

学习NodeJS的时候,一定会用到其包管理器npm。npm的字面意思是node package manager,实际的含义也是这样,但是npm真正的英文名却是“npm is not an acronym”,意思是“npm不是一个缩写”,所以如果要问npm是什么单词的缩写,那么回答就是“‘npm是不是一个缩写’的缩写”。

这种计算机科学中的“饶舌”现象叫作递归缩写。

递归缩写(Recursive acronym)即递归首字缩写,是一种在全称中递归引用它自己的缩写。

在计算机领域,使用递归缩写是黑客社区中的一个较早的传统,后来又有一些牛人把自己开发的产品或者技术使用了这种方式来命名,不得不说,牛人们不仅技术牛,开起玩笑来也是充满了geek气息。

最早的递归缩写命名的实例应该是1977年或1978年出现的TINT编辑器,其命名为“TINT Is Not TECO”(TINT不是文字编辑器和修正器),它是一个MagicSix的编辑器。这又启发了麻省理工大学的两个Lisp Machine 编辑器的命名,一个叫做 EINE (“EINE Is Not Emacs“,EINE不是 Emacs),另一个是 ZWEI (“ZWEI Was EINE Initially”,ZWEI一开始是EINE)。熟悉Linux的童鞋一定对GNU不陌生, Richard Stallman的 GNU (GNU’s not UNIX,GNU不是UNIX)同样也是如此的幽默。如npm、GNU一样,许多递归缩写包括否定语,通常用来指出这个缩写指代的事物 a 不是与另一个事物 b 相类似(但事实上,这个事物 a 通常与 b 非常相似甚至是 b 的衍生品)。

还有一些有趣的例子:

Linux:Linux Is Not UniX,这就有点像GNU了,但是是否属实就有待考证了。

PHP:原名Personal Home Page,刚开始是Rasmus Lerdorf为了维护个人网页而开发的,后来功能强大了,改名为PHP: Hypertext Preprocessor,相应地含义也变成了超文本预处理器。

RPM:RPM Package Manager,原名是Red Hat Package Manager,一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。与Dpkg类似。

Wine:Wine Is Not an Emulator,是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,Mac OSX 及 BSD 等)上运行 Windows 应用的兼容层。关于Wine的真正含义,有人对“Wine Is Not an Emulator”的说法表示质疑,认为”非模拟器“的解释不过是一种娱乐性的说法,Wine的真实意思应当是是Windows Environment的缩写,即WinE。

PNG:PNG’s Not GIF,一种图像文件存储格式,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG的名称来源于“可移植网络图形格式(Portable Network Graphic Format,PNG)”,

EMACS — EMACS Makes A Computer Slow,其自我调侃的意味就太明显了,大概也是对自己集成的强大的功能洋洋得意吧。

了解这些东西,一方面在学习困倦的时候稍稍调节一下,另一方面也是体会计算机大牛们那种geek幽默,枯燥的计算机世界需要程序员们去创造快乐。

原文链接:编程语言中那些有趣的命名

时间: 2024-11-16 14:26:38

编程语言中那些有趣的命名的相关文章

画风清奇!盘点各编程语言中有趣的开源项目!

生活不易,编程苦闷,不如“人为制造”点趣味,让日子过得更加有玩味感. 本文参考了一些项目推荐,整理了一些编程语言中个人认为比较有意思,也相对实用的开源项目,每个语言列的都不多,感兴趣的有空可以试试看. 一.Go 1.Gobot Gobot 是一个机器人.无人机和物联网框架,提供在同一时间合并多个不同设备的简单且强大的解决方案. Gobot 目前共支持18个不同的平台,它包含一个 cppp.io 兼容的 RESTful API 来查询在群中运行的任何连接.设备或机器人的状态,还能够直接向设备和机器

Python历史以及Python在编程语言中的定位

提及阿姆斯特丹你可以联想到郁金香,也可以联想到关于荷兰的一些东东,当然你如果是计算机爱好一族的话,你就一定会关心Python历史,以下就有关于Python历史的介绍. AD: 以本人的观点看来,Python这种语言是非常优美和强大在实际的应用中,是由专门为非专业程序员设计的计算机语言,而拥有很优美的语言Python为什么会用Python命名呢?如果你想对其有所了解,你也不妨看看关于Python历史的介绍. Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。

闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:如果您不熟悉 捕获 (capturing) 这个概念也不用担心,后面会详细对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較类似。

闭包是功能性自包括模块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較相似. 闭包能够 捕获 和存储其所在上下文中随意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:假设您不熟悉 捕获 (capturing) 这个概念也不用操心.后面会具体对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil

Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 总结: 我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更加快速地学习Bash脚本编程. 阅读这篇随笔,不需要你有Bash编程的经验,但一定要和我一

Swift编程语言中的方法引用(基于2.2版本)

由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与Objective-C不同,由于Objective-C的方法都属于“消息”,因此直接用selector的消息签名即可表示一条确定的消息作为方法引用.而Swift的方法更类似于C++.Java中的方法,也就是说比Objective-C更静态,因此它不具有如此般灵活性. 另外,在Swift编程语言中,方法引用与C

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?

Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix 系统.类Unix系统中,也在许多其他操作系统中被广告采用. 目前相当一部分操作系统使用32位二进制数字表示时间.此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 1111

Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)

我们在Swift编程语言中常常会用到for-in循环(在编程语言术语中又被称为for-each).此外,从Swift 2.2版本起,for循环将只支持for-in形式,而不支持for i = 0; i < n; i+=1 { }这种形式了,若要使用这种形式的话,只得用while或repeat-while来代替,或想办法转为for-in. 在Swift中,标准库已经定义了许多类型可直接支持for-in循环形式,比如Range.Array.Set.Dictionary等等.那么我们是否能自己定义一个