19 poin oleh GN⁺ 2025-07-10 | 1 komentar | Bagikan ke WhatsApp
  • Dalam pemrograman, ungkapan "memanggil fungsi" berasal dari konsep yang mirip dengan "meminta" atau "memanggil" buku di perpustakaan
  • Pada komputasi awal, pendekatan yang dominan adalah memanggil, menghadirkan subrutin dari library
  • Ketika Fortran II memperkenalkan instruksi CALL, ungkapan "memanggil fungsi" cepat menjadi populer
  • Setelah itu, bahasa seperti Algol dan JOVIAL juga mengadopsinya dan mulai menggunakan kata benda "call"
  • Makna "call" lalu meluas dan mengakar mencakup sebelum, selama, dan sesudah kontrol runtime

Mengapa programmer mengatakan mereka "memanggil(call)" fungsi?

  • Di StackExchange ada pertanyaan tentang asal-usul ungkapan "memanggil(call) fungsi"
  • Ada banyak analogi, tetapi pada dasarnya istilah ini berasal dari makna "call" sebagai memanggil atau menghadirkan(summon)
    • Seperti "meminta" buku di perpustakaan, awalnya ini berangkat dari penggunaan subrutin dengan cara "memintanya"
    • "call number" adalah penanda yang menunjukkan lokasi buku di perpustakaan

Sejarah "call" dalam istilah perpustakaan

  • Menurut OED, Melvil Dewey pertama kali menggunakan "call number" sebagai istilah ilmu perpustakaan pada 1876
    • "call number" adalah penandaan yang digunakan untuk lokasi buku atau permintaan pengambilan
  • Dalam Library Journal tahun 1888, istilah seperti "call blank", "call slip", dan "call number" juga dipakai secara umum
  • Menurut penjelasan Joudrey & Taylor, nama "call number" berasal dari tindakan memanggil bahan pustaka dari rak tertutup
    • Sistem seperti Cutter number diperkenalkan untuk keperluan klasifikasi

Penggunaan awal "call" dalam ilmu komputer

  • Dalam makalah John W. Mauchly tahun 1947, ada contoh penggunaan subrutin dengan cara "called in" dari library subrutin
    • Dalam konteks merujuk dan menggunakannya dengan cepat melalui nomor yang tercatat
  • Rutin assembly MANIAC II (1956) juga menerapkan konsep pemberian "call number" pada tiap subrutin agar bisa dipanggil saat diperlukan
    • Dalam bahasa assembly yang sebenarnya, ini disebut sebagai "transfer control"
  • Pada masa ini, yang ditekankan bukanlah "pemanggilan" saat runtime, melainkan konsep memuat potongan kode pada saat kompilasi atau linking

Munculnya instruksi "CALL" dalam bahasa pemrograman

  • Fortran II (1958) memperkenalkan instruksi CALL dan RETURN
    • Sebagai tindakan "call for", kontrol eksekusi diserahkan ke subrutin
    • Instruksi CALL benar-benar menunjuk pada tindakan sintaksis "memanggil"
  • Secara bertahap, "transfer control" pada runtime dan tindakan "pemanggilan" pada tahap link/assembly mulai bercampur secara samar

Perluasan dan pemantapan makna "call" pada 1960-an

  • Dalam kamus Sarbacher (1959), "call in" didefinisikan sebagai perpindahan kontrol dari rutin utama ke subrutin
    • "call number" dan "call word" juga dijelaskan sebagai identifikator dan bahkan kode pemanggilan
  • Di JOVIAL (1960), "procedure call" dan "calls" secara resmi digunakan sebagai kata benda
    • Setelah itu istilah ini dipakai bersama makna berlapis seperti call site, argumen, parameter, dan lain-lain
  • Algol (1959~1960) juga mengekspresikan waktu pemanggilan dengan beragam bentuk seperti "procedure call", "called procedure", dan "during the call"
    • Dalam laporan Algol 60 oleh Peter Naur, juga muncul pembedaan makna temporal antara "call for" dan "during the call"
  • Dalam Burroughs Algebraic Compiler (1961), bentuk verba "to call" muncul dengan jelas untuk pertama kalinya
  • Sejak Corbató dkk. (1963), penggunaan modern seperti "to call a subroutine" menjadi umum

Kesimpulan

  • Instruksi "CALL X" di Fortran II membuat ungkapan "call" menetap untuk pemanggilan fungsi/subrutin
    • Berangkat dari konsep perpustakaan sebelumnya (memanggil berdasarkan nomor), tetapi berkembang menjadi makna baru dalam bahasa pemrograman
  • Setelah itu, berbagai bahasa seperti Algol dan JOVIAL menerima istilah seperti "call" dan "call site"
  • Sejak sekitar 1961, ungkapan "to call X" mulai mapan dalam dokumentasi program resmi dan komunitas
  • Kini, pemanggilan fungsi merujuk pada seluruh rangkaian kerja yang untuk sementara menyerahkan kontrol, menerima hasil, lalu kembali, dan "call" menjadi istilah standarnya

1 komentar

 
GN⁺ 2025-07-10
Komentar Hacker News
  • Grace Hopper menjelaskan bahwa makna asli kata 'call' (berasal dari call number yang dipakai untuk menata bahan di perpustakaan fisik) juga memengaruhi lahirnya istilah 'compiler'. Setiap subrutin diberi 'call word', dan konsepnya berasal dari gagasan membangun program seperti mengambil lalu menggabungkan bahan dari perpustakaan
    • Saya memang memakai istilah-istilah ini secara langsung
    • Baru sekarang rasanya kepingan puzzlenya akhirnya cocok. Nomor identifikasi dalam Dewey Decimal Classification memang disebut 'call number'
  • Saya rasa Library Science berkontribusi pada komputasi modern jauh lebih besar daripada yang kita bayangkan. Misalnya, saya sering memakai gambaran katalog kartu saat menjelaskan indeks database. Begitu melihat laci kayu yang bisa dipakai mencari berdasarkan nama penulis, Dewey Decimal, atau subjek, orang biasanya langsung paham. Lihat konsep katalog perpustakaan
    • Saya dari generasi yang sempat memakai laci kayu dan kamus kertas di perpustakaan lokal. Saat pertama kali mengenal hash map atau IDictionary sekitar 25 tahun lalu, gambaran itu membuat saya langsung paham. Tapi sekarang metafora ini tidak lagi banyak membantu. Saya beberapa kali harus menjelaskan seperti apa katalog kartu atau kamus itu, dan orang-orang yang lebih muda bilang, "Oh, jadi itu semacam hash map analog"
    • Beberapa bulan lalu saya penasaran kenapa lebar standar terminal itu 80 karakter. Saya kira karena ukuran layar PC lama. Ternyata karena kartu plong berisi 80 karakter, dan kartu plong itu sendiri pada akhirnya berawal dari index card. Sekali lagi, penghormatan untuk ilmu perpustakaan. Rasanya seperti sejarah komputasi versi lebar mobil yang konon berasal dari lebar dua pantat kuda
    • Sekitar 1–2 tahun lalu saya pernah menjelaskan database dengan menganalogikannya pada laci kayu berdebu di sudut perpustakaan. Konteks dan pengetahuan awal memang sangat penting
    • Saya selalu mengira kata 'index' dalam istilah komputasi berasal dari indeks di bagian belakang buku. Saya tidak pernah mengaitkannya dengan 'index cards'
    • Generasi muda sekarang mungkin bahkan belum pernah melihat katalog kartu. Saya biasanya menjelaskan bahwa hard disk itu adalah daftar 0 dan 1, lalu membiarkan mereka menyimpulkan bahwa Anda butuh struktur untuk menemukan sesuatu
  • Saya orang Finlandia. Dalam bahasa Finlandia, kata untuk 'function call' adalah 'kutsua', yang jika diterjemahkan kembali ke bahasa Inggris berarti 'invite' atau 'summon'. Jadi maknanya adalah 'memanggil' seperti 'ibu memanggil anaknya dari halaman', bukan call dalam arti 'Joe menelepon temannya' atau 'warna ini disebut apa?'. Hanya ingin berbagi saja
    • Dalam bahasa Jerman dipakai 'aufrufen', yang kalau diterjemahkan per fragmen kira-kira berarti 'memanggil ke atas'. Jika dipakai dengan objek langsung seperti saat memanggil nama siswa di sekolah, artinya memanggil seseorang dengan nama atau nomor. Kata untuk menelepon adalah 'anrufen'
    • 'summon' juga kadang terasa pas ketika kode menimbulkan semacam horor okultisme, dan kadang memang sangat cocok. 'invite' juga bisa terasa seperti mengundang iblis atau vampir
    • Di Norwegia dipakai 'funksjonskall', yang kalau diterjemahkan harfiah berarti function call. Maknanya sekadar call dalam arti memanggil sesuatu
    • Dalam bahasa Rusia juga mirip, jika diterjemahkan balik bisa berarti 'memanggil lewat telepon', 'memanggil/menyuruh datang', 'mengundang', dan sebagainya
    • Ini tidak langsung terkait topiknya, tapi kalau Anda sedang berada di Helsinki, mungkin bagus ikut meetup Hacker News setempat
  • Dalam buku Wilkes, Wheeler, Gill (1951), frasa 'call in' dipakai untuk eksekusi subrutin. Di halaman 31 ada kalimat seperti "jika subrutin tidak dipanggil dengan benar, mesin akan berhenti" dan "subrutin dapat dipanggil secara bebas dari program mana pun". Dalam laporan awal EDSAC tahun 1950 juga ada catatan "call in auxiliary sub-routine", yang bisa dilihat di presentasi ini
  • Kadang orang juga memakai 'invoke' atau 'execute' alih-alih 'call', tetapi itu istilah yang lebih panjang dan umum. Namun saya sering mendengar pemakaian 'call' yang keliru ("calling a command", "calling a button") dari mahasiswa CS non-native speaker bahasa Inggris, dan itu agak mengganggu
    • 'invoke' berasal dari bahasa Latin invocō, invocāre (memanggil), jadi itu bukan salah, hanya bentuk singkat
    • Contoh keliru yang paling sering saya dengar (atau paling saya benci) adalah ketika dipakai bersama 'return'. Saya pernah mendengar kalimat seperti "sekarang kita panggil keyword return agar fungsinya selesai"
    • C# sering memakai 'Invoke' di hal-hal seperti delegate atau reflection, sementara debugernya memakai 'Call Stack'
    • Dalam pengalaman saya, penutur asli yang baru belajar pemrograman juga memakai pola serupa. Mereka menjelaskan hal-hal yang bukan command pun sebagai 'command'
    • Kadang pemula malah kebalikannya dan menyebut statement atau seluruh deklarasi fungsi sebagai 'command'
  • Ini bukan teori ilmiah, hanya satu pengamatan. Istilah baru mudah menyebar ketika ada titik yang terasa nyambung. Biasanya istilah itu pendek, dan mudah memunculkan atau diingat maknanya maupun citranya, sehingga cepat menyebar. Kadang perlu penjelasan, tapi sering kali orang bisa mempelajarinya dari konteks lalu ikut menyebarkannya. Kata seperti 'salty' contohnya, dan 'call' juga begitu. Pendek dan sering dipakai, sementara call up/call in/summon/invoke (dengan nuansa seperti mantra sihir) semuanya terasa cocok. Pada masa itu telepon juga masih merupakan teknologi baru yang menarik, jadi orang mungkin dengan mudah mengaitkan gambaran menelepon orang lain dengan memanggil subrutin. Istilah seperti 'jump' sudah dipakai untuk makna lain, jadi saya rasa itu membantu 'call' menyebar luas
    • Bagi saya, 'salty' tidak terlalu berkaitan dengan air mata. Dalam kebiasaan bahasa saya, kalau seseorang dibilang 'salty', itu bukan berarti sedih, melainkan kesal atau jengkel. Jadi metaforanya datang dari gambaran sesuatu yang tajam dan kuat seperti garam. Artinya, walaupun penafsirannya berbeda, metafora tetap bekerja dengan baik; ini menunjukkan bagaimana 'call' bisa menyebar dengan cara seperti itu
  • Saya tidak pernah memikirkan bahwa dalam kalimat "... hal-hal yang kompleks seharusnya ada di library, yaitu sekumpulan pita magnetik (tempat masalah-masalah berharga yang sebelumnya sudah ditulis disimpan)" kata library itu benar-benar berasal dari rak bahan berlabel di dunia nyata
  • Saya dulu berpikir fungsi tidak benar-benar memerlukan keyword call. Fungsi biasanya mengembalikan nilai, jadi tinggal dipakai di dalam assignment. Yang butuh call adalah subroutine (pada dasarnya alamat/label yang diberi nama). Sebenarnya Anda juga bisa langsung melompat ke alamat itu dengan GOTO lalu kembali lagi. Keyword CALL membuat alur eksekusi lebih jelas. Mirip bos yang menyuruh Sam mengurus kasir lalu menyuruh Bill mencetak laporan TPS. Pada akhirnya semuanya berubah menjadi fungsi, dan subroutine dijuluki 'spaghetti'. Tapi saya jadi penasaran kenapa ada istilah routine (program) dan subroutine
    • Menurut dokumen Goldstine dan von Neumann tahun 1947, asal kata routine dinyatakan jelas sebagai: "Rangkaian instruksi berkode untuk suatu masalah akan kami sebut routine" (referensi)
  • Dalam musik juga ada istilah "call and response". Saya rasa ini juga terhubung dengan konsep return value
  • Algol 60 memakai istilah "call" bukan hanya untuk fungsi tetapi juga untuk parameter. Misalnya "call by value", "call by name", dan di 4.7.5.3 ada bentuk seperti "dalam hal call by value". Saat ini kita biasanya mengatakan procedure/function/subroutine itu di-'call', sedangkan argument/parameter itu di-'pass', jadi 'pass by value/reference/name' lebih jelas. Namun istilah lama seperti "call by value" dan sejenisnya masih bertahan di beberapa konteks. Gagasan bahwa argument atau parameter juga di-call sudah hilang, tetapi istilah legacy seperti ini tetap ada