Answers:
在雨果1963年引用之前,我们能得到真正的引用吗?是。约翰·麦卡锡(John McCarthy)从1960年4月开始在符号表达式的递归函数及其由机器进行的计算(第一部分)中使用“字符串”一词。
对于原子符号,我们将使用大写拉丁字母和数字字符串。
但对于这个问题更有用的是,将字符串作为数据类型的引用:
任何允许的字符字符串[都是] L表达式。
那不是一个很好的例子。麦卡锡说“一串字符”时并没有像程序员今天所说的那样专门使用“字符串”。您可以轻松地向Java程序员说“字符串”,他们会知道“字符”部分是隐式的:McCarthy的用法没有演示此功能。让我们尝试回到1950年代,看看麦卡锡是否玩得很安全,或者那时真的不存在这个名词。LISP可能基于数学演算,因此在这里可能不会有太大帮助,因此McCarthy的字符串函数可能是该想法在字符串处理中的第一个应用。
1960年代重要的字符串处理系统是1964年的SNOBOL,一种字符串操作语言。这引用了上面麦卡锡的论文,但也讨论了COMIT和SCL。他们在SCL上引用的工作尚未发布:不幸的是死路一条。
COMIT更易于跟踪。《计算机编程艺术》(第1卷,第3版,第461页)告诉我们,VH Yngve在1963年撰写了CACM文章。但是我正在寻找最早使用“字符串”的方法,因此我将寻找早期出版物的作者。
我找到的第一个是1958年7月发布的《机械翻译程序设计语言》。它仅包含单词“ string”的一种用法:
在字典中查找标点符号或空格之间的每个连续字符串。
再次,这种用法就像麦卡锡的用法:这并不是“字符串”在当今意义上被使用的证据。详细查看该论文,我们看到数据结构是卡上的“行”(允许延续较长的“行”)。
好的,我们将继续探讨COMIT的历史,看看能得到什么。第一个有用的参考文献是用于机械翻译的COMIT系统,摘自1959年6月的会议记录。
如果我们想用COS(F)D(F)替换D SIN(F),其中F是不受限制的,并且可以是任意任意的组成序列,则可以使用$表示该字符串。
这似乎更类似于我们今天使用它的方式:“字符串”单独存在,并且奖金具有可识别的特殊符号:在某些BASIC语言中,美元符号仍用于表示字符串变量。
大约从这个时候开始,“字符串”一词在ACM '58会议论文集的Perlis和Smith所用的用于处理符号字符串的命令语言中也出现了很多次,在Share 709系统中: Boehm和钢。
在1960年代初期,在ACM数字图书馆中搜索“字符串”会产生62个结果,包括“ ALGOL中的字符串处理”,“新语言中的字符串处理”和“字母数字信息的列表类型存储技术”之类的标题。到那时看来,这个想法已经根深蒂固。
我认为在计算机科学术语中,“字符串”作为字符的有序列表在1960年左右的几年中变得很普遍。在此之前,Yngwe和McCarthy之类的作者可以说“字符串”,并确保它们是可以理解,但不能以今天使用的意义将“字符串”用作裸词。
简写可能是由Perlis和Smith论文介绍给计算主流的。它尚未被广泛引用,但其中一个重要的引文是1960年4月约瑟夫·史密斯(Joseph W. Smith)对ALGOL的句法和语义增强(与麦卡锡(McCarthy)对LISP的描述在CACM的同一期中)。从那篇论文:
本文的目的是为ALGOL提出一套语法和语义扩展。拟议的扩展旨在帮助描述该语言中的“字符串”操作;它们并不构成用于符号操作的全面语言。
对我来说,这构成了“字符串”的证据,“字符串”意味着在学术词典中肯定了用于符号计算的数据类型,并且很重要地引入了用于商业计算的工具。
顺便提一句,Jean Sammet(1972)的《编程语言:历史与未来》表明COMIT和SNOBOL是字符串操作的前身,因此我相当有信心不会出现更早的示例。
我可以在计算中找到的最早参考文献是1963年 3 月的《流星:字符串转换的LISP解释器》,作者是麻省理工学院AI实验室的Daniel G. Bobrow。
在牛津英语词典具有从较早的实例计算1956年发行的杂志的美国计算机协会的:
预留区域用于来回穿梭控制字段的字符串,直到获得完全排序的序列。