- Programlamada bir fonksiyonu "çağırmak" ifadesinin kökeni, kütüphanede bir kitabı "istemek" ya da "çağırtmak" kavramına benzer
- İlk dönem bilgi işlemde, alt yordamların kütüphaneden çağrılması, devreye alınması yaklaşımı baskındı
- Fortran II,
CALL komutunu tanıtarak "bir fonksiyonu çağırmak" ifadesini hızla yaygınlaştırdı
- Ardından Algol ve JOVIAL gibi diller de bunu benimsedi ve "call" adını kullanmaya başladı
- "call"ın anlamı zamanla çalışma zamanında denetimin devrinden önce, sırasında ve sonrasında olacak şekilde genişleyip yerleşti
Programcılar neden bir fonksiyonu "çağırmaktan" söz eder?
- StackExchange'te "bir fonksiyonu çağırmak" ifadesinin kökeni hakkında bir soru sorulmuştu
- Çeşitli benzetmeler var, ancak gerçekte kökeni "call" sözcüğünün summon, yani bir şeyi huzura çağırmak ya da getirtmek anlamına dayanıyor
- Kütüphanede kitabı "istemek" gibi, alt yordamı "isteyip" kullanma fikrinden başladı
- "call number" kütüphanede kitabın yerini gösteren işarettir
Kütüphane terminolojisinde "call"ın tarihi
- OED'ye göre Melvil Dewey, 1876'da kütüphanecilik terimi olarak "call number" ifadesini ilk kez kullandı
- "call number", kitabın yeri ya da isteme talebi için kullanılan bir gösterimdir
- 1888 tarihli Library Journal'da da "call blank", "call slip", "call number" gibi terimler günlük kullanımdaydı
- Joudrey & Taylor'ın açıklamasına göre "call number", kapalı raflardan materyal isteme eyleminden türemiş bir addır
- Cutter number gibi sistemler sınıflandırma için kullanıma girdi
Bilgisayar biliminde "call" kullanımının ilk dönemi
- John W. Mauchly'nin 1947 tarihli makalesinde, alt yordam kütüphanesinden alt yordamın "called in" edilerek kullanıldığı bir örnek görülür
- Bağlam, kayıtlı bir numara üzerinden hızlıca başvurup kullanmaktır
- MANIAC II assembly rutinlerinde (1956) de her alt yordam için bir "call number" verilmesi ve gerektiğinde bununla çağrılması fikri uygulanmıştı
- Gerçek assembly dilinde buna "transfer control" deniyordu
- Bu dönemde vurgu, çalışma zamanındaki "çağrı"dan çok, derleme ya da bağlama aşamasında kod parçalarını içeri alma fikrindeydi
Programlama dillerinde CALL komutunun ortaya çıkışı
- Fortran II (1958),
CALL ve RETURN komutlarını tanıttı
- Alt yordama yürütme denetimini "çağırarak" devretme eylemini ifade ediyordu
CALL komutu, gerçekten de "çağırma" denilen sözdizimsel eylemi gösteriyordu
- Zamanla çalışma zamanında "denetimi devretme" ile bağlama/assembly aşamasındaki "çağırma" eylemi giderek belirsiz biçimde iç içe geçmeye başladı
1960'larda "call"ın anlamının genişlemesi ve yerleşmesi
- Sarbacher'in (1959) sözlüğü, "call in" ifadesini ana rutinden alt yordama denetim aktarımı olarak tanımlar
- Ayrıca "call number" ve "call word" ile tanımlayıcı ve çağrı kodunu da açıklar
- JOVIAL'de (1960) "procedure call", "calls" gibi kullanımlar resmî olarak adlaştırıldı
- Sonrasında çağrı noktası, argüman, parametre gibi çok katmanlı anlamlarla birlikte kullanılmaya başlandı
- Algol (1959~1960) da "procedure call", "called procedure", "during the call" gibi ifadelerle çağrının farklı anlarını anlattı
- Peter Naur'un Algol 60 raporunda da "call for" ile "during the call" arasında zamansal anlam ayrımı görülür
- Burroughs Algebraic Compiler'da (1961) fiil olarak "to call" açık biçimde ilk kez ortaya çıktı
- Corbató ve diğerlerinden (1963) sonra günümüzdeki "bir alt yordamı çağırmak" kullanımı yaygınlaştı
Sonuç
- Fortran II'nin
CALL X komutu, fonksiyon/alt yordam çağrısı için "call" ifadesinin yerleşmesini sağladı
- Öncesindeki kütüphane kökenli kavramdan, yani bir şeyi numarasına göre isteme fikrinden esinlense de, programlama dillerinde yeni bir anlam genişlemesi yaşandı
- Sonrasında Algol, JOVIAL ve diğerleri, "call", "call site" gibi terimleri benimsedi
- Yaklaşık 1961'den itibaren "X'i çağırmak" ifadesi resmî program dokümantasyonunda ve topluluklarda yerleşmeye başladı
- Günümüzde fonksiyon çağrısı, denetimi geçici olarak devretme, sonucu alma ve geri dönme sürecinin tamamını anlatır; bunun standart terimi de "call" olmuştur
1 yorum
Hacker News görüşleri
callsözcüğünün asıl anlamının (fiziksel kütüphanelerde materyalleri düzenlemek için kullanılan call number kavramından türediğini)compilerteriminin doğuşunu da etkilediğini açıklıyor. Her alt yordam için bircall wordatanıyordu ve bu, kütüphaneden materyalleri çıkarıp birleştirerek program oluşturma fikrinden geliyorducall numberdeniyorduIDictionaryile ilk karşılaştığımda bu imge sayesinde hemen kavradım. Ama bugünlerde bu mecaz artık pek yardımcı olmuyor. Kart kataloğunun ya da sözlüğün nasıl bir şey olduğunu bizzat açıklamak zorunda kaldığım çok oldu ve gençler de "Ha, yani analog bir hash map" diyorindexteriminin çıkış noktası olduğunu düşünürdüm. Bunu hiçindex cardsile ilişkilendirmemiştimkutsua; bunu İngilizceye geri çevirirsenizinviteya dasummonolur. Yani "annenin çocuğu bahçeden çağırması" anlamındaki çağırma hissini taşır;Joe'nun arkadaşını telefonla araması ya da "bu renge ne denir?" anlamındakicallile aynı değil. Sadece paylaşmak istedimaufrufenkullanılıyor; parçalara ayırarak çevirirseniz aşağı yukarı "çağırıp getirmek" gibi. Okulda öğrenci adları okunurken olduğu gibi doğrudan nesneyle kullanıldığında, birini adıyla ya da numarasıyla çağırmak anlamına geliyor. Telefon etmek içinseanrufenkullanılıyorsummon, bazen koda okült bir korku çağrıştırıyormuş gibi geliyor ve bazen de son derece uygun.invitede şeytanı ya da vampiri içeri davet etmek gibi gelebiliyorfunksjonskalldeniyor; kelimesi kelimesine çevirincefunction call. Yani yalnızca bir şeyi çağırmak anlamındakicallcall inifadesi alt yordam çalıştırmak için kullanılıyor. 31. sayfada "Bir alt yordam doğru şekilde çağrılmazsa makine durur" ve "Herhangi bir program içinde alt yordamlar serbestçe çağrılabilir" deniyor. 1950 tarihli erken dönem EDSAC raporlarında da "call in auxiliary sub-routine" notunu bu sunumda görebilirsinizcallyerineinvokeya daexecuteda kullanılıyor ama bunlar daha uzun ve daha genel terimler. Yine decallsözcüğünün yanlış kullanıldığı durumları ("calling a command", "calling a button") ana dili İngilizce olmayan bilgisayar bilimi öğrencilerinde sık duyuyorum ve bu biraz rahatsız ediciinvoke, Latinceinvocō,invocāre(çağırmak, huzura çağırmak) kökünden geliyor; yani bu yanlış değil, sadece daha resmî bir ifadereturnile kullanılması. "Şimdireturnanahtar sözcüğünü çağırınca fonksiyon biter" gibi ifadeler duydumInvokekullanırken, debugger'daCall Stackdiyorcommanddiye açıklıyorlarcommanddiye adlandırdığı da oluyorsaltygibi sözcüklerde olduğu gibi,calliçin de durum bu. Kısa ve sık kullanılıyor; ayrıcacall up/call in/summon/invoke(biraz büyü yapma hissi de veriyor) gibi çağrışımları oturuyor. O dönemde telefon da yeni ve şaşırtıcı bir teknolojiydi; bu yüzden başka birini telefonla arama imgesi, alt yordam çağırma fikriyle kolayca örtüşmüş olabilir.jumpgibi terimler zaten başka anlamlarda kullanılıyordu, dolayısıylacallın yaygınlaşabildiğini düşünüyorumsalty, tears ile pek ilgili değil. Benim dil alışkanlığımda birininsaltyolması üzgün olması değil, sinirli ya da rahatsız olması demek. Yani tuz gibi keskin ve sert bir şey imgesinden geliyor. Demek ki yorumlar farklı olsa da metafor işe yarıyor;callın da böyle yayılmış olabileceğini gösteriyorlibrarysözcüğünün, gerçekten etiketli materyal raflarından geldiğini hiç düşünmemiştimlibraryiçin başka bir ad kullanıldığını hiç duymadım. Örneğin.libdosya uzantısı varcallgibi bir anahtar sözcüğe ihtiyaç duyması gerekmediğini düşünürdüm. Fonksiyonlar genelde bir değer döndürür, bu yüzden bir atama ifadesi içinde kullanılabilirler.callgerektiren şey alt yordamdı; pratikte bu, isim verilmiş bir adres ya da etiketti. Aslında bu adrese doğrudanGOTOile gidip geri dönmek de mümkün.CALLanahtar sözcüğü, yürütme akışını daha açık hale getiriyor. Sanki patron Sam'e hesabı yaptırıyor, sonra Bill'e TPS raporunu yazdırıyor gibi iş akışı ilerliyor. Sonunda her şey fonksiyona dönüştü ve alt yordamlarspaghettidiye anılmaya başladı. Amaroutine(program) vesubroutineterimlerinin neden var olduğunu merak ediyorumroutinesözcüğünün kökeni için, 1947 tarihli Goldstine ve von Neumann belgesinde açıkça şöyle deniyor: "Bir problemin kodlanmış komut dizisine routine diyoruz" (bakınız)return valuekavramıyla da bağlantılı olduğunu düşünüyorumcallterimini kullanıyordu. Örneğincall by value,call by namegibi; 4.7.5.3 bölümünde "call by value durumunda" şeklinde geçiyor. Bugün genelde procedure/function/subroutinecalledilir, argument/parameter isepassedilir diyoruz; bu yüzdenpass by value/reference/namedaha açık. Amacall by valuegibi eski terimler hâlâ bazı bağlamlarda yaşıyor. Argument ya da parameter'ıcalletme fikri kayboldu ama bu tür miras terimler kaldı