![]()
大數(shù)據(jù)文摘出品
程序員常說(shuō)“調(diào)用函數(shù)”,但這個(gè)“調(diào)用”(call)從哪來(lái)?最早的靈感不是來(lái)自電話,而是來(lái)自圖書館。
![]()
文章參考: https://quuxplusone.github.io/blog/2025/04/04/etymology-of-call/
在19世紀(jì),美國(guó)圖書館員梅爾維爾·杜威(Melvil Dewey)提出了“索書號(hào)”(call number)的概念,用于標(biāo)識(shí)書籍在圖書館中的位置。這個(gè)“call”,意為“請(qǐng)求調(diào)取”。
當(dāng)時(shí),如果一本書不在開(kāi)放書架,讀者需要填寫“call slip”,向圖書館員“call for”那本書。
到了20世紀(jì)40年代末,這種“請(qǐng)求調(diào)取”的說(shuō)法被移植到了計(jì)算機(jī)領(lǐng)域。
1947年,電子計(jì)算機(jī)先驅(qū)約翰·莫克利(John W. Mauchly)寫下了一篇文章,談及了從“子程序庫(kù)”中“調(diào)出”(called in)程序模塊的做法。這是“調(diào)用”在編程語(yǔ)境中最早的影子之一。
一、子程序與“調(diào)用”的崛起
進(jìn)入50年代后,程序開(kāi)始變得復(fù)雜,子程序的概念成為主流。
1956年,“MANIAC II”計(jì)算機(jī)的匯編程序引入了一個(gè)關(guān)鍵機(jī)制:程序員可以使用紙帶上的“子程序庫(kù)”,其中每段子程序都有一個(gè)獨(dú)立的“call number”標(biāo)識(shí)號(hào),就像圖書館書籍的索書號(hào)一樣。
但當(dāng)時(shí),“調(diào)用”還不是執(zhí)行時(shí)的動(dòng)作,而是匯編階段的一種“調(diào)入”:你告訴匯編器“我要用哪個(gè)模塊”,它會(huì)“調(diào)入”代碼,將之嵌入最終的程序中。
真正將“調(diào)用”變成程序中實(shí)際運(yùn)行時(shí)的操作指令,是1958年面世的Fortran II語(yǔ)言。
Fortran II首次引入了關(guān)鍵字“CALL”,你只需寫上CALL MATMPY(...),程序就會(huì)把控制權(quán)轉(zhuǎn)交給指定的子程序。
這是一種根本性的語(yǔ)言轉(zhuǎn)變:不再只是在匯編時(shí)“call in”,而是在運(yùn)行時(shí)“call function”。
這也是程序員第一次開(kāi)始真正“說(shuō)出口”這個(gè)動(dòng)詞:“我們調(diào)用一個(gè)函數(shù)”。
到了1959年,《電子與核工程百科詞典》已將“call in”定義為將控制權(quán)從主程序轉(zhuǎn)移到子程序的動(dòng)作。
盡管這一定義與Fortran II略有差異,但它反映出當(dāng)時(shí)“call”一詞正在迅速普及,并逐漸模糊其匯編與運(yùn)行的邊界。
二、從CALL到主流:術(shù)語(yǔ)的固化與傳播
1960年前后,編程語(yǔ)言之間的“術(shù)語(yǔ)感染”達(dá)到了新高。
JOVIAL語(yǔ)言在1960年文檔中正式使用“procedure call”一詞,并首次將“call”當(dāng)作名詞來(lái)使用,代表“調(diào)用行為本身”。
而ALGOL語(yǔ)言的報(bào)告中則用“call”來(lái)表示子程序工作期間的整個(gè)時(shí)間段,即不僅是跳轉(zhuǎn)動(dòng)作,還包括執(zhí)行期間的上下文。這是對(duì)“調(diào)用”概念的又一次拓展。
到了1961年,Burroughs公司的ALGOL實(shí)現(xiàn)說(shuō)明中,已經(jīng)能看到熟悉的說(shuō)法:“to call a subroutine”。
而在1963年的麻省理工課堂教材中,“call”一詞的使用已經(jīng)完全現(xiàn)代化:
“我們調(diào)用子程序EVAL”,“調(diào)用子程序PASS1與PASS2”——這些表達(dá)和今天程序員寫Python或Java時(shí)說(shuō)的“call function”別無(wú)二致。
這種語(yǔ)言的標(biāo)準(zhǔn)化,正是得益于早期語(yǔ)言(如Fortran和ALGOL)中對(duì)“CALL”語(yǔ)法結(jié)構(gòu)的設(shè)計(jì)。
最終,編程語(yǔ)言與人類語(yǔ)言完成了一次完美的融合。“CALL”既是計(jì)算機(jī)代碼里的關(guān)鍵詞,也是程序員嘴里的動(dòng)詞,它從一行Fortran代碼,變成了整個(gè)行業(yè)的通用說(shuō)法。
從圖書館索書,到程序庫(kù)取碼,再到函數(shù)調(diào)用,這個(gè)簡(jiǎn)單的“call”,穿越了近百年的語(yǔ)言變遷。
它從不是隨口而出的隱喻,而是有據(jù)可查的語(yǔ)言演化史。
而程序員們每天敲下的“CALL”,正是這段歷史在鍵盤上的延續(xù)。
作者長(zhǎng)期關(guān)注 AI 產(chǎn)業(yè)與學(xué)術(shù),歡迎對(duì)這些方向感興趣的朋友添加微信Q1yezi,共同交流行業(yè)動(dòng)態(tài)與技術(shù)趨勢(shì)!
GPU 訓(xùn)練特惠!
H100/H200 GPU算力按秒計(jì)費(fèi),平均節(jié)省開(kāi)支30%以上!
掃碼了解詳情?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.