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