【问题标题】:The History Behind the Definition of a 'String'“字符串”定义背后的历史
【发布时间】:2010-10-27 04:23:22
【问题描述】:

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

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

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

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

【问题讨论】:

  • 此外,我想知道为什么他们选择在旧版本的 BASIC 中使用 $ 来定义字符串。也许只是因为它看起来像字母 S。有一次在 FPS 游戏中聊天时,我说,“G 字符串怎么了?”对一个名叫“G$”的玩家来说,他对此有点生气。他说正确的说法是“G Money”。幸运的是,房子里还有其他几个程序员得到了它。
  • 就此而言,我们的大多数程序员术语都被无耻地从与我们命名的东西有一些抽象相似之处的东西中窃取了。
  • 编程白话是可怕的,难以理解的抽象和复杂。我认为这是因为所有程序员都在做,是程序。
  • Programmers.SE 上的类似问题:softwareengineering.stackexchange.com/questions/43329/…

标签: string programming-languages terminology history


【解决方案1】:

来自this参考:

1971 年的牛津英语词典(第 3097 页)引用了 1891 世纪词典上的一个来源 1898 年 1 月 11 日的密尔沃基哨兵 (第 3 节,第 1 页)大意是 这是一个合成器的术语。打印机 会粘贴他们拥有的文本 在长条中产生 人物。 (估计他们是 按脚付钱,而不是按字付钱!) 引用说这并不罕见 让合成师创造出超过 每小时 1500 个(字符?)。

【讨论】:

  • 如果这是准确的,那么这听起来很可能就是答案。我们从印刷世界中采用了许多这样的术语,例如,“字体”是一个碗,从该碗中拉出单独的铅字以填充“字符串”。 “字体”指的是它与洗礼字体(喷泉)的相似性。
  • 我没有 1971 年的 OED 副本要检查,但引用对我来说似乎是合理的。
  • 约翰说得对。这个答案更多的是关于历史而不是定义,这是所要求的。
  • 我认为打印对早期计算的影响不大。字体等后来出现在图形显示器和点阵打印机中。
【解决方案2】:

字符串是离散对象的序列(通常是char)。

鉴于此,我可能会大胆猜测它可能与“珍珠串”相关的隐喻有关。字符串上的每个珠子都是一个字符。

【讨论】:

    【解决方案3】:

    在一次关于 Javascript 历史的演讲中,Douglas Crockford 说“没人知道”并给出了一些替代方案: http://www.youtube.com/watch?v=RO1Wnu-xKoY#t=2989

    我发现了一份报告,其中据称是计算机历史上第一次引用一系列字符作为“字符串”。我认为它在pdf第4页的右上角,编号为47:

    http://web.eecs.umich.edu/~bchandra/courses/papers/Naure_Algol60.pdf

    【讨论】:

      【解决方案4】:

      我在计算方面能找到的最早参考资料来自 1963 年 3 月的 METEOR: A LISP Interpreter for String Transformations,作者是 MIT 人工智能实验室的 Daniel G. Bobrow。

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

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

      ...并引用了 1956 年计算机协会杂志的第一句话:

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

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

      数学。等。按一定顺序排列的一系列符号或语言元素。

      ...并首次用于 Clarence Irving Lewis 和 Cooper Harold Langford符号逻辑(1932 年):

      命题不是一串记号,也不是一连串声音,除非是偶然的。

      这又继承于许多其他更早的对同一行事物的定义。

      【讨论】:

        【解决方案5】:

        我猜想“字符串”早在被编程语言采用之前就已经被数学家使用了。图灵机有效地在弦上运行。图灵可能没有使用过这个术语,但它在自动机教科书中随处使用,可以追溯到几十年前。

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

        我认为毫无疑问,他使用的是计算机科学中传统意义上的“字符串”。第 286 页“出于工作目的,我们在- 引入字母 b,并考虑 1 和 b 的“字符串”,例如 11b1bb1。对诸如“b1bP 产生 P1bb1”之类的字符串的操作 我们称之为正常操作。这种特殊的正常操作是应用 仅适用于以 b1b 开头的字符串,派生字符串为 然后通过首先删除初始 b1b 从给定字符串中获得, 然后在最后加上 1bb1。这样 b1bb 就变成了 b1bb1。”

        【讨论】:

          【解决方案6】:

          通过搜索 ACM 参考书目,似乎字符串一词在 1960 年代在计算机科学中获得了它的含义。一开始,字符串是一种通用的序列或列表,例如A command language for handling strings of symbols 1958 年。

          This article 在 1964 年明确提到“字符串”。

          很遗憾,我无法访问收费站后面的全文。

          【讨论】:

            【解决方案7】:

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

            话虽如此,它们是通过这个数组“串在一起”(或者是串在一起),这将它们变成了一个“串”。

            【讨论】:

              【解决方案8】:

              我的假设一直是编程术语起源于“字符串”一词的以下定义(来自 Merriam-Webster):

              (1):排列成一行的一系列事物

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

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                • 我认为这一点,@jonskeet 对序列的引用绝对意味着有序,如数组和向量。但肯定存在排序(因此有一个“最终”终止符确认开始和结束之间的差异)。
                【解决方案10】:

                怀疑这是因为string 最初的意思只是一系列数据值:“我将把它们串在一起”等等。这些值不必是字符。这个一般概念的一个非常常见的用途恰好是一系列字符,这成为了这个词的一般含义。

                【讨论】:

                • 所以人们称数组为“字符串”?让我想到一些语言如何仍然使用字符串来存储二进制数据:PHP 仍然使用,而 Javascript 曾经使用过(由于缺少类型化数组)。
                猜你喜欢
                • 2013-06-07
                • 2011-10-12
                • 1970-01-01
                • 2012-11-18
                • 2020-01-27
                • 1970-01-01
                • 2019-08-25
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多