文章摘要
文章探讨了“调用”函数这一术语的起源,认为其可能源于“召唤”或“请求”的概念,类似于从图书馆中“调用”一本书或召唤仆人来执行任务。这一用法间接来源于从子程序库中“调用”子程序的方式,类似于从闭架图书馆中“调用”书籍。最早的“调用号码”概念可以追溯到1876年,由Melvil Dewey提出,用于指示图书馆中书籍的位置。
文章总结
文章《Phrase origin: Why do we “call” functions?》探讨了编程中“调用”(call)函数这一术语的起源。文章通过多个历史文献和编程语言的发展,追溯了“调用”这一概念的形成和演变。
术语起源的猜想:在StackExchange上,有人提问为什么程序员会用“调用”来描述函数的使用。文章提出了几种可能的类比:
- 调用函数就像拜访朋友——我们去,停留一会儿,然后回来。
- 调用函数就像召唤仆人——召唤其来执行任务。
- 调用函数就像打电话——我们提出问题,并从外部获得答案。
文章认为,最接近的类比是“召唤”这一概念,即从子程序库中“召唤”一个子程序,类似于在闭架图书馆中“召唤”一本书。
图书馆术语的影响:文章引用了《牛津英语词典》(OED)中对“call number”(索书号)的定义,指出该术语最早由Melvil Dewey在1876年提出,用于标识图书馆中书籍的位置。这种“召唤”书籍的概念被类比到计算机编程中,用于描述从子程序库中“召唤”子程序的行为。
早期计算机编程中的“调用”:John W. Mauchly在1947年的文章中首次提到了“调用”子程序的概念,描述了如何从内存中“召唤”子程序来执行计算。1956年的MANIAC II汇编程序手册进一步明确了“调用”子程序的概念,使用了“call number”这一术语,类似于图书馆中的索书号。
Fortran II的贡献:1958年发布的Fortran II引入了
CALL和RETURN语句,正式将“调用”这一术语引入编程语言。Fortran II将“调用”描述为从主程序转移到子程序的行为,并传递参数。术语的演变:随着时间的推移,“调用”这一术语的含义逐渐扩展。1959年的Algol语言进一步采用了“调用”这一概念,描述了在程序执行期间“调用”子程序的过程。1961年的Burroughs Algebraic Compiler首次使用了“to call”这一动词形式,标志着“调用”这一术语的完全成熟。
结论:文章总结认为,Fortran II在1958年迅速普及了“调用”这一术语,并影响了后续编程语言的发展。到1961年,“to call X”这一短语已经成为编程中的标准用法。
通过这篇文章,读者可以了解到“调用”这一编程术语的历史渊源及其在计算机科学中的重要性。
评论总结
评论主要围绕“调用”(call)这一术语在计算机科学中的起源和用法展开,以下是主要观点和论据的总结:
“调用”与“调用函数”的类比:
- 评论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’.”
- 评论10:作者将“调用函数”类比为“召唤仆人”或“请求某人完成任务”,强调“调用”的“请求”含义。
“调用”术语的历史起源:
- 评论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.”
- 评论16:Grace Hopper提到“编译器”(compiler)一词的起源与“调用”相关,因为子程序在库中通过“调用词”组织,类似于从图书馆中“编译”材料。
“调用”与其他术语的对比:
- 评论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’.”
- 评论3:作者提到“invoke”或“execute”作为“调用”的替代词,认为它们更通用但更冗长。
“调用”术语的传播与接受:
- 评论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.”
- 评论14:作者认为新术语的传播依赖于其简洁性和易于理解性,类比了“salty”一词的传播过程,并指出“call”因其简短和多种含义而易于接受。
总结:评论中探讨了“调用”这一术语的起源、类比、历史文献中的使用以及其传播和接受的原因,展示了其在计算机科学中的多重含义和广泛使用。