Hacker News 中文摘要

RSS订阅

短语起源:为何我们“调用”函数? -- Phrase origin: Why do we "call" functions?

文章摘要

文章探讨了“调用”函数这一术语的起源,认为其可能源于“召唤”或“请求”的概念,类似于从图书馆中“调用”一本书或召唤仆人来执行任务。这一用法间接来源于从子程序库中“调用”子程序的方式,类似于从闭架图书馆中“调用”书籍。最早的“调用号码”概念可以追溯到1876年,由Melvil Dewey提出,用于指示图书馆中书籍的位置。

文章总结

文章《Phrase origin: Why do we “call” functions?》探讨了编程中“调用”(call)函数这一术语的起源。文章通过多个历史文献和编程语言的发展,追溯了“调用”这一概念的形成和演变。

  1. 术语起源的猜想:在StackExchange上,有人提问为什么程序员会用“调用”来描述函数的使用。文章提出了几种可能的类比:

    • 调用函数就像拜访朋友——我们去,停留一会儿,然后回来。
    • 调用函数就像召唤仆人——召唤其来执行任务。
    • 调用函数就像打电话——我们提出问题,并从外部获得答案。

    文章认为,最接近的类比是“召唤”这一概念,即从子程序库中“召唤”一个子程序,类似于在闭架图书馆中“召唤”一本书。

  2. 图书馆术语的影响:文章引用了《牛津英语词典》(OED)中对“call number”(索书号)的定义,指出该术语最早由Melvil Dewey在1876年提出,用于标识图书馆中书籍的位置。这种“召唤”书籍的概念被类比到计算机编程中,用于描述从子程序库中“召唤”子程序的行为。

  3. 早期计算机编程中的“调用”:John W. Mauchly在1947年的文章中首次提到了“调用”子程序的概念,描述了如何从内存中“召唤”子程序来执行计算。1956年的MANIAC II汇编程序手册进一步明确了“调用”子程序的概念,使用了“call number”这一术语,类似于图书馆中的索书号。

  4. Fortran II的贡献:1958年发布的Fortran II引入了CALLRETURN语句,正式将“调用”这一术语引入编程语言。Fortran II将“调用”描述为从主程序转移到子程序的行为,并传递参数。

  5. 术语的演变:随着时间的推移,“调用”这一术语的含义逐渐扩展。1959年的Algol语言进一步采用了“调用”这一概念,描述了在程序执行期间“调用”子程序的过程。1961年的Burroughs Algebraic Compiler首次使用了“to call”这一动词形式,标志着“调用”这一术语的完全成熟。

  6. 结论:文章总结认为,Fortran II在1958年迅速普及了“调用”这一术语,并影响了后续编程语言的发展。到1961年,“to call X”这一短语已经成为编程中的标准用法。

通过这篇文章,读者可以了解到“调用”这一编程术语的历史渊源及其在计算机科学中的重要性。

评论总结

评论主要围绕“调用”(call)这一术语在计算机科学中的起源和用法展开,以下是主要观点和论据的总结:

  1. “调用”与“调用函数”的类比

    • 评论10:作者将“调用函数”类比为“召唤仆人”或“请求某人完成任务”,强调“调用”的“请求”含义。
      • 引用:“You ‘call upon’ the function to perform a task, or return a value as the case may be. Just as you may call upon a servant or whatever.”
    • 评论12:芬兰语中将“call”翻译为“kutsua”,意为“邀请”或“召唤”,进一步支持了“调用”的“请求”含义。
      • 引用:“In Finnish we translate ‘call’ in function context as ‘kutsua’, which when translated back into English becomes ‘invite’ or ‘summon’.”
  2. “调用”术语的历史起源

    • 评论16:Grace Hopper提到“编译器”(compiler)一词的起源与“调用”相关,因为子程序在库中通过“调用词”组织,类似于从图书馆中“编译”材料。
      • 引用:“The reason it got called a compiler [around 1952] was that each subroutine was given a ‘call word’, because the subroutines were in a library, and when you pull stuff out of a library you compile things.”
    • 评论17:1951年的文献中使用“call in”来调用子程序,表明“调用”术语的早期使用。
      • 引用:“… if, as a result of some error on the part of the programmer, the order Z F does not get overwritten, the machine will stop at once. This could happen if the subroutine were not called in correctly.”
  3. “调用”与其他术语的对比

    • 评论3:作者提到“invoke”或“execute”作为“调用”的替代词,认为它们更通用但更冗长。
      • 引用:“Somewhat less frequently, I also hear ‘invoke’ or ‘execute’, which is more verbose but also more generic.”
    • 评论7:作者列举了多种可能的替代词,如“instantiating”、“evaluating”、“computing”等,并引用了早期文献中使用的“utilize”和“direct”。
      • 引用:“We could also reasonably say ‘instantiating’, ‘evaluating’, ‘computing’, ‘running’, ‘performing’ (as in COBOL), or simply ‘doing’.”
  4. “调用”术语的传播与接受

    • 评论14:作者认为新术语的传播依赖于其简洁性和易于理解性,类比了“salty”一词的传播过程,并指出“call”因其简短和多种含义而易于接受。
      • 引用:“New words propagate when they ‘click’. They are often short, and for one reason or another enable people to form mental connections and remember what they mean.”

总结:评论中探讨了“调用”这一术语的起源、类比、历史文献中的使用以及其传播和接受的原因,展示了其在计算机科学中的多重含义和广泛使用。