“字符串”定义背后的历史


71

直到最近我才想过,但是我不确定为什么我们称呼string strings。我是.NET程序员,但是我相信字符串的概念几乎存在于每种编程语言中。

在编程之外,我不相信我曾听说过string用于描述单词或字母的单词。快速搜索“定义:字符串”会产生一堆定义,这些定义与字母,单词或与编程相关的任何性质无关。

我的猜测是,在过去,字符串实际上只是特定长度的字符数组,通常在结尾处带有定界字符。但是,我看不到从“字符数组”到的自然过渡string

有人可以提供一些我们为什么称呼字符串的见解strings吗?


18
另外,我想知道为什么他们选择使用$来定义旧版BASIC中的字符串。也许只是因为它看起来像字母S。一次在FPS游戏中聊天时,我说:“ G弦是什么?” 给一个名字叫“ G $”的玩家,他对此有些生气。他说正确的说法是“ G Money”。幸运的是,房子里还有其他几个程序员确实做到了。
Bratch

1
为此,我们大多数程序员的行话都被无耻地从那些与我们命名的东西有些抽象的相似之处的东西偷了。
卡米洛·马丁

1
乡土编程是可怕的,难以访问的抽象和复杂,我认为这是因为所有程序员都在做。
凯文·贝汉

Answers:


29

这个参考:

1971年的OED(p。3097)在1898年1月11日的密尔沃基哨兵报导中引用了1891年的《世纪词典》(第3页,第1页),以表示这是一个合成词。打印机会将他们生成的文本粘贴成一长串字符。(大概是用脚付钱,而不是用单词付钱!)引言说,合成器每小时创造超过1500个(字符?)并不罕见。


9
如果这是正确的,那么听起来可能就是答案。我们从印刷界采用了许多这样的术语,例如,“字体”是指从中拉出单个引线类型以填充“字符串”的碗。“字体”指的是它与洗礼字体(喷泉)的相似之处。
约翰·桑德斯

这好像不是我要检查1971年的OED副本,但对我来说报价似乎很合理。
保罗·

约翰是对的。这个答案更多地是关于历史而不是定义的要求。
Bratch

2
我认为早期计算中的打印影响不大。图形显示器和点矩阵打印机后来出现了字体等。
starblue 2010年

36

我一直认为,编程术语源自单词“ string”的以下定义(来自Merriam-Webster):

(1):一系列事物排列或好像在一条直线中<汽车的字符串> <名称的字符串>

(2):一系列相似的项目(如位,字符或单词)

由于编程中的字符串只是字符的有序序列,因此将其称为“字符字符串”(或简称为“字符串”)似乎是最可能的起源。


13

通过搜索ACM参考书目,似乎在1960年代,字符串一词在计算机科学中获得了其含义。在开始时,字符串是一种通用的序列或列表,例如,用于处理符号字符串的命令语言1958年。

本文在1964年明确提到“字符串”。

不幸的是,我无法访问收费站后面的全文。


11

我猜想“字符串”早在被编程语言采用之前就已被数学家使用。图灵机可以有效地对琴弦进行操作。图灵可能没有使用过该术语,但可以追溯到几十年前的自动机教科书中。

我可以找到的最早参考文献是Google书籍中1944年的一篇文章的片段,该文章是AMS逻辑学家Emil Post撰写的“正整数的递归枚举及其决策问题”。幸运的是,AMS免费提供完整文章的在线存档。这是链接:http : //www.ams.org/journals/bull/1944-50-05/S0002-9904-1944-08111-1/S0002-9904-1944-08111-1.pdf

我认为毫无疑问,他使用的是计算机科学领域中常规意义上的“字符串”。P. 286“出于工作目的,我们引入字母b,并考虑1和b的“字符串”,例如11b1bb1。对此类字符串的操作(例如“ b1bP产生P1bb1”),我们称其为正常操作。该操作仅适用于以b1b开头的字符串,然后通过首先删除初始b1b,然后在末尾附加1bb1,从给定的字符串中获取派生的字符串。因此b1bb变为b1bb1。”


7

怀疑这是因为string最初只意味着一个数据值序列:“我将它们串在一起”等。这些值不必是字符。这个一般概念的一个非常普遍的用法恰好是一个字符序列,它取代了该词的一般含义。


人们把数组叫做“字符串”吗?让我考虑一下某些语言仍然如何使用字符串存储二进制数据:PHP仍然如此,而Javascript曾经可以做到(由于缺少类型数组)。
卡米洛·马丁

7

我在计算中可以找到的最早参考文献是1963年3月的《METEOR:字符串转换LISP解释器》,作者是MIT AI Labs的Daniel G. Bobrow。

但是,定义15d。在牛津英语词典是:

计算记录或数据的线性序列。

...,并引自1956年计算机协会杂志

预留区域用于来回穿梭控制字段的字符串,直到获得完全排序的序列。

这种用法自然遵循定义15c:

数学。等等。符号或语言元素的确定顺序。

...并且首先用在克拉伦斯·欧文·刘易斯和库珀·哈罗德·兰福德的符号逻辑》(1932)中:

除了偶然,命题不是一连串的标记或一系列声音。

反过来,这又是基于行中许多其他更早的定义的。


3

这个词最初是用来区分一组值的,这些值对元素的特定顺序无关紧要(例如,一组随机的测量样本)和另一个在保留顺序时也只能保留其含义的值。最初,字符串可以是任何类型的值的集合,但是由于在大型机时代之后,字符串是迄今为止最常见的字符串,因此,值是字符这一事实成为“默认值”。


我认为,@ jonskeet对序列的引用绝对意味着有序,例如数组和向量。但是肯定存在排序(并因此使用“最终”终止符来确认开始和结束之间的差异)。
院长拉德克利夫


1

字符串是一系列离散对象(通常是 char)。

鉴于此,我可能会冒险猜测可能与“珍珠串”相关的隐喻有关。字符串上的每个珠都是单个字符。


-2

之所以称为字符串,是因为它实际上是char类型元素的数组。

就是说,它们通过此数组“串在一起”(或串在一起),这使它们变成“字符串”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.