49 poin oleh GN⁺ 2026-04-20 | 5 komentar | Bagikan ke WhatsApp
  • Perbedaan kelompok pola dasar lebih penting daripada tata bahasa masing-masing, dan bahasa pemrograman terbagi menjadi tujuh bahasa purba menurut cara pengulangan, rekursi, dan penyusunan komponennya
  • ALGOL, Lisp, ML, Self, Forth, APL, Prolog adalah klasifikasi intinya, dan tiap keluarga memakai bahasa perwakilan sebagai sampel acuan untuk menilai garis keturunan bahasa lain
  • Bahasa baru yang berbagi bahasa purba yang sudah akrab relatif mudah dipelajari, tetapi berpindah ke purba yang asing memerlukan jalur berpikir baru dan waktu belajar yang tidak sedikit
  • ALGOL dicirikan oleh organisasi fungsi yang berpusat pada penugasan, kondisional, dan perulangan; Lisp oleh makro dan kode berbentuk list; ML oleh fungsi kelas satu dan rekursi; Self oleh objek berbasis pengiriman pesan; Forth oleh sintaks berbasis stack; APL oleh array n-dimensi; dan Prolog oleh struktur fakta dan penelusuran
  • Bagi semua programmer, menguasai bahasa keluarga ALGOL adalah prioritas, lalu belajar SQL, dan setelah itu terus mempelajari bahasa purba yang asing secara konsisten akan lebih menguntungkan dalam jangka panjang

Tujuh Bahasa Purba Pemrograman

  • Saat memilih bahasa pemrograman, yang lebih penting daripada perbedaan tata bahasa per bahasa adalah menguasai pola dasar, dan di antara bahasa-bahasa yang masih satu keluarga, struktur dasar seperti penelusuran array atau penelusuran kombinasi hampir selalu serupa
  • Keluarga bahasa yang berbeda memiliki cara pengulangan, rekursi, dan penyusunan program yang sangat berbeda, dan kelompok pola dasar inilah yang membentuk bahasa-bahasa purba yang berbeda
  • Mempelajari bahasa baru yang berbagi bahasa purba yang sudah akrab adalah perpindahan yang relatif mudah, tetapi pindah ke bahasa purba yang asing memerlukan waktu yang cukup besar dan jalur berpikir baru
  • Bahasa purba yang dikenali di bidang perangkat lunak ada tujuh: ALGOL, Lisp, ML, Self, Forth, APL, Prolog
  • Setiap bahasa purba diklasifikasikan dengan memakai bahasa perwakilan tertentu sebagai semacam sampel acuan, dan bahasa lain dinilai garis keturunannya dengan membandingkannya terhadap sampel itu
  • ALGOL

    • Program tersusun sebagai rangkaian penugasan, kondisional, dan perulangan, lalu diorganisasi dalam satuan fungsi
    • Banyak bahasa menambahkan sistem modul, cara mendefinisikan tipe data baru, polimorfisme, serta struktur alur kontrol alternatif seperti exception atau coroutine
    • Sebagian besar bahasa pemrograman yang saat ini digunakan luas termasuk dalam garis bahasa purba ini
    • ALGOL sendiri mencakup ALGOL 58, ALGOL 60, ALGOL W, ALGOL 68
    • Assembly language, Fortran, C, C++, Python, Java, C#, Ruby, Pascal, JavaScript, Ada terhubung ke garis ini
    • Ini adalah bahasa purba tertua, dengan silsilah yang dapat ditelusuri hingga formalisasi program Ada Lovelace untuk mesin analitik Babbage
    • Bahasa mesin dan assembly dari komputer berarsitektur Eckert-Mauchly yang berlanjut ke EDVAC dan Univac awal, serta upaya bahasa tingkat tinggi awal dari A-0 milik Grace Hopper hingga Fortran dan COBOL, semuanya berada dalam bentuk ini
    • Pada 1960-an, structured programming berkembang di akademia dan membuat bahasa-bahasa ini lebih mudah dikelola; hasilnya adalah ALGOL 60, yang kemudian menjadi asal bagi sebagian besar anggota keluarga ini
    • Seiring waktu, ada kecenderungan menyerap fitur dari bahasa purba lain
      • Pada 1980-an, konsep keluarga Self diadopsi dalam bentuk class dan dipakai sebagai sarana implementasi definisi tipe data serta polimorfisme
      • Setelah 2010, konsep keluarga ML juga mulai muncul
  • Lisp

    • Sintaks yang menggabungkan ekspresi prefiks yang dibungkus tanda kurung dan representasi list
      • (+ 2 3)
      • (defun square (x) (* x x))
      • (* (square 3) 3)
    • Karena representasi list berupa item-item yang dipisah spasi dan dibungkus tanda kurung tertanam di dalam bahasa, kode itu sendiri berbentuk list
    • Makro dapat menerima list, mengubahnya, lalu menyerahkan kode yang sudah diubah ke compiler, sehingga programmer memiliki struktur untuk mendefinisikan ulang makna bahasa
    • Dalam sebagian besar penulisan kode, perilakunya cenderung mirip bahasa purba lain, biasanya ALGOL atau ML, tetapi sistem makro menjadi pembeda utamanya
    • Sintaks loop di Common Lisp juga bukan fitur bawaan bahasa, melainkan didefinisikan sebagai makro
    • Ada banyak varian Lisp awal, tetapi komunitas akhirnya membentuk konsensus pada Common Lisp
    • Sussman dan Steele mengeksplorasi sejauh mana fungsi dapat digunakan, lalu menciptakan Scheme
    • Ada pula penggunaan Lisp untuk tujuan khusus seperti Lush untuk komputasi numerik, AutoLISP sebagai bahasa skrip AutoCAD, dan Emacs Lisp untuk mengimplementasikan perilaku editor Emacs
    • Belakangan, Clojure muncul sebagai cabang utama ketiga keluarga Lisp
    • Muncul sekitar satu tahun setelah Fortran, ini adalah keluarga bahasa tertua kedua yang masih digunakan hingga hari ini
    • Titik awalnya adalah pertanyaan matematis tentang bagaimana menuliskan struktur matematika yang dapat mengevaluasi ekspresinya sendiri
    • John McCarthy memberikan jawabannya pada 1958, lalu itu diimplementasikan di komputer
    • Lisp awal, karena latar belakang matematisnya, kurang cocok dengan mesin pada zamannya; masalah memori dan siklus CPU bukanlah topik dalam matematika, sehingga teknik seperti garbage collection menjadi perlu
    • Pada akhir 1970-an dan awal 1980-an, ada mesin yang dirancang dari bawah khusus untuk menjalankan Lisp
    • Banyak elemen integrated development environment modern ditemukan pada mesin-mesin itu
    • Pada periode yang sama, Lisp menjadi sarana utama riset kecerdasan buatan, tetapi ketika gelembung AI 1980-an gagal menghasilkan capaian yang diharapkan, Lisp ikut jatuh bersama bidang itu ke dalam AI Winter
    • Setelah itu pun ia tetap bertahan, dan dengan peningkatan performa komputer serta adopsi fitur-fitur serupa oleh bahasa lain, kesulitan implementasinya berkurang
  • ML

    • Fungsi adalah nilai kelas satu, dan bahasa ini memiliki sistem tipe keluarga Hindley-Milner yang dapat mengekspresikan beragam fungsi serta tagged union
    • Semua perulangan dilakukan melalui rekursi
      • sum [] = 0
      • sum (x:xs) = x + sum xs
    • Digunakan juga cara mendefinisikan fungsi yang mengenkapsulasi pola perulangan, lalu menerima fungsi lain untuk menjalankan perilakunya
      • map _ [] = []
      • map f (x:xs) = (f x) : (map f xs)
    • Beberapa bahasa seperti Miranda dan Haskell secara default memakai lazy evaluation
    • Bahasa lain memperluas sistem tipenya ke berbagai arah
      • OCaml mencoba menggabungkannya dengan konsep bahasa purba Self
      • Agda dan Idris mengadopsi sistem dependent type yang mencampur nilai dan tipe
      • 1ML menggabungkan modul dan tipe
    • Dari ML lahir CaML, Standard ML, OCaml
    • Garis kerabat seperti Miranda, Haskell, Agda, dan Idris juga berlanjut darinya
    • ML awalnya adalah meta-language untuk program pembuktian teorema yang dikembangkan di Cambridge, Inggris, dan namanya pun berasal dari sana
    • Setelah itu ia menyebar keluar dari konteks tersebut sebagai bahasa mandiri, dan terutama populer di Eropa, khususnya Inggris dan Prancis
  • Self

    • Program tersusun sebagai sekumpulan objek yang saling mengirim pesan, dan semua perilaku diimplementasikan dengan cara ini
    • Objek baru dibuat dengan mengirim pesan ke objek yang sudah ada
    • Kondisional pun dijalankan melalui variabel yang merujuk ke salah satu dari objek true atau false
      • Kedua objek menerima pesan yang membawa fungsi yang dijalankan saat benar dan fungsi yang dijalankan saat salah sebagai parameter
      • Objek true menjalankan fungsi pertama, dan objek false menjalankan fungsi kedua
      • Kode pemanggil tidak tahu objek mana yang dipakai dan hanya mengirim pesan
    • Perulangan juga bekerja dengan cara yang sama, dan jika membuat objek yang tepat lalu menaruhnya di tempat yang tepat, seluruh makna bahasa dapat didefinisikan ulang
    • Bahasa-bahasa seperti ini biasanya menyimpan source bukan sebagai berkas teks, melainkan dalam live environment
    • Programmer memodifikasi sistem hidup, dan alih-alih mengompilasi berkas untuk membangun sistem, mereka menyimpan keadaan sistem tersebut
    • Contoh pentingnya adalah Smalltalk dan Self
    • Banyak bahasa hanya mengadopsi sebagian cara pengiriman pesan dari keluarga ini, dan adopsi parsial seperti itu biasanya disebut pemrograman berorientasi objek
    • Sebagian besar dari mereka berbasis Smalltalk, dan JavaScript adalah pengecualian karena berasal dari sistem objek tanpa class milik Self
    • Sistem objek Common Lisp menggeneralisasikannya sehingga runtime memilih kode yang akan dijalankan berdasarkan semua parameter, bukan hanya satu objek penerima pesan
    • Erlang mengubah arahnya: alih-alih alur eksekusi berpindah di antara objek, thread eksekusi paralel secara eksplisit mendengar dan mengirim pesan
    • Bahasa aslinya adalah Smalltalk, dikembangkan di Xerox Parc pada akhir 1970-an dan 1980-an
    • Pada 1980-an, ada berbagai sistem Smalltalk komersial, dan IBM memakai Smalltalk untuk mengembangkan koleksi VisualAge, yaitu alat pemrograman untuk bahasa lain
    • Saat ini Smalltalk terutama bertahan dalam bentuk open source Pharo Smalltalk
    • Banyak riset dilakukan untuk menjalankan Smalltalk dengan cepat dan efisien, dan puncaknya adalah proyek Strongtalk
    • Penemuan dari Strongtalk punya arti historis karena menjadi dasar compiler JIT HotSpot milik Java
    • Smalltalk mewarisi konsep nilai dan tipe dari bahasa-bahasa sebelumnya untuk mengimplementasikan class; semua objek memiliki class yang memberi mereka tipe, dan class menciptakan objek dari tipe itu
    • Self menghapus konsep class dan hanya terdiri dari objek
    • Karena dianggap bentuk yang lebih murni, Self dipilih sebagai sampel bahasa purba ini
  • Forth

    • Bahasa stack adalah semacam cerminan terbalik dari Lisp, dan berbagi sintaks dengan kalkulator notasi Polandia terbalik milik Hewlett Packard
    • Bahasa ini memiliki data stack; saat literal seperti 42 ditulis, nilainya di-push ke stack, dan nama fungsi bekerja terhadap stack tanpa parameter eksplisit
    • Aritmetika sederhana pun berbentuk terbalik seperti 2 3 + 5 *
    • Definisi fungsi juga sangat ringkas
      • Dalam sebagian besar varian Forth, : mendefinisikan kata baru
      • square berarti memanggil dup dan *
      • dup menggandakan item teratas stack, dan * mengalikan dua item teratas
    • Parser dapat dicegat dan diganti dengan kode sendiri, sehingga seluruh sintaks dapat diganti
    • Program Forth yang mendefinisikan bahasa kecil untuk mem-parsing langsung hal-hal seperti subset Fortran, layout paket, atau diagram ASCII yang mewakili transisi state machine adalah bentuk yang umum
    • Mencakup berbagai varian Forth, PostScript, Factor, Joy
    • Joy adalah bahasa fungsional murni yang memakai formulasi matematis komposisi alih-alih stack
    • Forth pertama kali ditulis pada 1970 untuk mengendalikan teleskop radio
    • Setelah itu menyebar luas ke seluruh dunia embedded system
    • Sistem Forth cukup mudah di-bootstrap sehingga ada puluhan varian yang dibuat banyak programmer sesuai tujuan masing-masing
    • PostScript muncul pada 1980-an sebagai sarana fleksibel untuk mendeskripsikan dokumen di printer
    • Dalam banyak hal PostScript lebih terbatas daripada Forth, tetapi ia mendefinisikan operasi dasar terkait layout grafis di dalam bahasa
  • APL

    • Segala sesuatu dalam bahasa ini adalah array n-dimensi
    • Operator tersusun dari satu atau dua simbol, dan menjalankan operasi tingkat tinggi terhadap seluruh array
    • Ekspresinya sangat padat, sehingga deretan simbol itu sendiri menjadi penanda operasi tanpa perlu diberi nama lain
    • Sebagai contoh, menghitung rata-rata variabel x ditulis sebagai (+⌿÷≢) x
    • APL, J, K adalah contoh representatif
    • Operasi tingkat tinggi atas array sebagian telah diekspor ke banyak lingkungan lain seperti MATLAB, NumPy, dan R
    • APL bermula dari notasi matematika yang dibuat Kenneth Iverson pada 1960-an, lalu kemudian diimplementasikan di komputer
    • Sejak itu ia mempertahankan basis pendukung khusus di kalangan orang-orang yang melakukan komputasi berat
    • Bahasa turunannya, K, sangat populer di lingkungan finansial
  • Prolog

    • Program tersusun sebagai kumpulan fakta
      • father(bob, ed).
      • father(bob, jane).
    • Juga digunakan fakta tak-terikat yang menurunkan fakta dari fakta lain lewat variabel
      • grandfather(X, Y) :- father(X, Z), father(Z, Y).
    • Runtime Prolog menerima fakta-fakta ini dan kueri, lalu melakukan penelusuran untuk menemukan hasil
    • Jika struktur definisi faktanya dipilih dengan tepat, Turing-completeness dapat tercapai
    • Dalam Prolog, term yang membentuk fakta adalah tipe data unik tersendiri, dan dapat dibuat lalu diteruskan ke runtime
    • Dalam hal ini, posisinya mirip dengan makro di Lisp atau penggantian parser di Forth
    • Karena program Prolog pada dasarnya adalah penelusuran, tuning berfokus pada pengaturan urutan penelusuran dan pemotongan dini jalur yang tidak menghasilkan, seperti pada kueri basis data
    • Mencakup Prolog, Mercury, Kanren
    • Sebagian besar praktik pemrograman nyata dalam keluarga bahasa purba ini dilakukan di Prolog sendiri, dan komunitasnya sangat terpusat
    • Pada 1970-an, para logikawan Prancis menyadari bahwa program dapat diekspresikan sebagai logika orde pertama, lalu mulai mencoba mengimplementasikannya
    • Pada 1980-an, proyek komputer generasi kelima Jepang bertaruh besar pada Prolog, tetapi ketika proyek itu gagal, reputasi Prolog ikut menurun
    • Terlepas dari itu, selama puluhan tahun riset untuk membuat runtime Prolog efisien dalam sebagian besar kasus serta menambahkan fitur baru terus berlanjut
    • Penambahan fitur seperti kendala numerik mengarah ke constraint logic programming
    • Prolog terus muncul di area-area nis
      • Pemeriksaan tipe Java selama bertahun-tahun diimplementasikan dengan Prolog
      • Alat pencarian source code awal Facebook juga berbasis Prolog

Bagaimana memanfaatkannya

  • Bagi sebagian besar programmer, sebagian atau seluruh keluarga bahasa ini mungkin tampak sangat asing, tetapi masing-masing layak diberi waktu karena jalur berpikir dan kemungkinan baru yang dibawanya
  • Dari sudut pandang ALGOL, dua hal yang tampak sepenuhnya berbeda sangat sering ternyata hanya perbandingan sepele bila dilihat dari sudut pandang lain
  • Prioritas

    • Semua programmer perlu benar-benar memahami satu bahasa keluarga ALGOL
    • Setelah itu, disarankan mempelajari SQL, bahasa keluarga Prolog
      • Dalam karier, manfaatnya berada tepat setelah ALGOL
  • Perluasan setelahnya

    • Setelah menguasai dua keluarga di atas, akan menguntungkan dalam jangka panjang bila setiap tahun mempelajari satu bahasa baru dari keluarga bahasa purba yang belum akrab
    • Bahasa yang disarankan dari tiap keluarga dan urutannya adalah sebagai berikut
      • Lisp: PLT Racket
      • ML: Haskell
      • Self: Self
      • Prolog: Prolog
      • Forth: gForth
      • APL: K, dipakai melalui ok
  • Penyesuaian urutan

    • Jika banyak melakukan komputasi numerik, lebih cocok mempelajari K lebih awal
    • Jika banyak melakukan embedded programming, lebih cocok mempelajari gForth lebih awal
    • Namun urutan itu sendiri, atau bahasa mana tepatnya yang dipilih, bukan hal yang terlalu penting
    • Mengambil Standard ML atau OCaml alih-alih Haskell, Common Lisp alih-alih PLT Racket, atau Factor alih-alih gForth juga tetap masuk akal
  • Tambahan dalam catatan kaki

    • Bahkan setelah mempelajari SQL, tetap perlu mempelajari Prolog itu sendiri
      • Karena cara penggunaan nyatanya sangat berbeda dari SQL
    • Ada pula pendapat pembaca bahwa untuk memahami Forth secara mendalam, pendekatan yang umum adalah membuat implementasi Forth sendiri
      • Disebutkan bahwa Forth cukup kecil sehingga satu orang dapat mengimplementasikannya dari nol dalam waktu yang relatif singkat
      • gForth adalah implementasi yang baik untuk mempelajari ANS Forth
      • Sebagai materi belajar disebutkan FORTH Fundamentals, Volume 1 karya McCabe
      • Forth lain yang juga disebut layak dilihat: PygmyForth, eForth, colorForth

5 komentar

 
zkj9404 2026-04-21

Menarik ya

 
tazuya 2026-04-20

Waktu kuliah, saya belajar mata kuliah jurusan dan mengerjakan tugas dengan keluarga ALGOL, Lisp, dan Prolog, jadi rasanya nostalgia sekali.

 
mhcoma 2026-04-20

Bahasa-bahasa itu meninggalkan banyak jejak pada bahasa pemrograman arus utama modern,
dan di antaranya hanya Forth yang pengaruhnya tampak lebih kecil.

 
click 2026-04-21

Kalau sampai notasi prefix sih belum tentu, tapi kalau harus ngoding pakai notasi postfix memang terlalu tidak nyaman.

 
GN⁺ 2026-04-20
Komentar Hacker News
  • Di kelas PL di Tufts, kami pernah langsung membuat versi mini untuk masing-masing dari 4 keluarga bahasa awal, yaitu imperatif, Lisp, ML, dan Smalltalk, dan senang rasanya melihat proses itu kini juga terbit sebagai buku ajar. Agak disayangkan bagian Prolog yang dulu sempat ada sekarang hilang

    • Kalau ada versi yang menyertakan bagian Prolog yang hilang itu diunggah setidaknya ke tempat seperti Internet Archive, rasanya akan sangat menyenangkan
  • Kalau ada satu hal yang ingin saya ubah dari klasifikasi tulisan ini, Ruby menurut saya jelas lebih tepat dilihat sebagai bahasa berorientasi objek daripada keluarga Algol. Pengaruh Smalltalk sangat besar, dan bahkan nama pustaka standarnya masih menyisakan jejak itu, misalnya memakai collect alih-alih map. Di Ruby, dari awal sampai akhir semuanya adalah objek, dan pemanggilan metode juga paling alami dipahami sebagai mengirim pesan ke objek. Memang sering dibandingkan dengan Python, tetapi jalur evolusinya cukup berbeda, dan sekarang rasanya keduanya bertemu di titik ekosistem yang mirip. Bagi saya, Ruby terasa seperti alpaka yang lebih hangat dibanding Python

    • Python juga, sejak new style classes, pada dasarnya bisa dianggap sebagai bahasa OOP murni. Di tingkat Hello World mungkin kurang terlihat, tetapi bahkan tipe dasar pun semuanya sudah menjadi objek. Untuk menekankan bahwa bahkan bilangan bulat adalah objek, cukup tunjukkan type(42) dan dir(42) kepada orang yang tidak suka OOP
    • Saya justru merasa cara menunjuk satu bahasa purwarupa tertentu sebagai bahasa berorientasi objek malah membingungkan orang. OO lebih mirip satu gaya pemrograman seperti halnya prosedural; menurut saya terlalu dipaksakan jika Python dan C++ digolongkan sebagai jenis bahasa yang sama hanya karena sama-sama punya multiple inheritance
    • Melihat analogi unta itu, saya jadi terpikir, bukankah camel memang simbol yang lebih lekat dengan Perl?
  • Saya ingin menambahkan satu kategori lagi dalam silsilah bahasa, yaitu bahasa untuk mengekspresikan bukti. Ini adalah keluarga tempat program sekaligus menjadi bukti lewat korespondensi Curry-Howard, dan Lean adalah contoh utamanya. Memang bisa juga dilihat sebagai subkategori dari fungsional, tetapi karena tujuan utamanya adalah verifikasi, bukan eksekusi, rasanya layak dibahas sebagai sumbu tersendiri

    • Menurut saya, pembuktian teorema dan tipe kompleks tampak seperti perluasan yang ditambahkan ke bahasa yang sudah ada. Agda dan Idris adalah bahasa fungsional dengan tipe kompleks tambahan, sedangkan Isabelle dan Lean adalah bentuk yang ditambah pembuktian interaktif. Dafny lebih seperti bahasa imperatif yang diberi teorema dan hint, dan ACL2 paling mudah dipahami sebagai Lisp dengan theorem/hint. Selain itu, seperti terlihat pada traits di Rust, typeclasses terasa seperti sejenis pemrograman logika yang berjalan di atas bahasa fungsional maupun imperatif
    • Secara definisi, keluarga seperti ini tidak memiliki kelengkapan Turing, jadi saya agak sulit menganggapnya sebagai bahasa pemrograman sungguhan. Jika Turing-complete, program yang tidak pernah berhenti bisa dipakai untuk menghasilkan bukti palsu
    • Saya melihat keluarga ini pada akhirnya berasal langsung dari ML
    • Lean jelas merupakan bahasa dependently typed ML-family yang dekat dengan Agda dan Idris, jadi dalam gambaran besar menurut saya masih bisa dimasukkan ke klasifikasi ML. Dan saya juga tidak merasa tujuan jangka panjang Lean menganggap eksekusi sebagai hal sekunder. Microsoft tampaknya tertarik pada penulisan perangkat lunak nyata. Sebaliknya, jika lebih ditekankan bahwa ini adalah “bahasa untuk mengekspresikan bukti”, maka Prolog juga tak bisa dilewatkan, jadi Lean bisa dilihat setengah ML, setengah Prolog. Dari sudut pandang ini, korespondensi Curry-Howard terasa sebagai salah satu cara untuk mewujudkan logika komputasi
  • Baru-baru ini saya meninjau lagi proyek perbandingan bahasa, berupa benchmark penguraian siklus permutasi bertanda paralel untuk 3.715.891.200 signed permutation dari 10 karakter. Saya ingin mencari bukan sekadar bahasa purwarupa, tetapi implementasi modern dari tiap paradigma yang sungguh layak dipilih untuk pemrograman riset. Saya menilai bukan hanya performa, tetapi juga kemudahan mendapat bantuan AI dan apakah saya nyaman membaca serta berpikir dengan kodenya, dan berkat AI saya bisa melakukan semacam wisata optimisasi yang cukup dalam untuk tiap bahasa. Hasilnya saya rangkum di sini, dan cukup mengejutkan bahwa F# muncul di posisi paling atas

    • Sekilas memang mengejutkan, tetapi saya rasa detail adalah kuncinya. Jika Lean dikecualikan, secara umum selisih angkanya tidak terlalu dramatis, dan fakta bahwa Chez 2,5 kali lebih lambat dari C++ justru termasuk cukup bagus untuk bahasa JIT bertipe dinamis. Kemungkinan besar kekuatan F# pada tugas seperti ini berasal dari pengalaman paralelisasi di atas .NET Core yang sangat matang dan stabil. Jika angka itu adalah elapsed time, akan lebih menarik lagi jika ada rincian CPU time juga. Strategi paralelisasi tiap bahasa juga sedikit berbeda, jadi ini bukan perbandingan dalam kondisi yang benar-benar sama. Misalnya, percabangan thread sederhana di F# dan parallel iterator Rayon di Rust bisa memiliki struktur overhead yang berbeda. Pada akhirnya Rust dan C++ mungkin bisa lebih cepat bila primitif konkurensi OS tingkat rendah ditangani dengan sangat cermat, tetapi itu sudah menjadi jenis perbandingan lain. Juga tidak jelas apakah pemakaian C FFI dari C atau Haskell sebaiknya diizinkan, sehingga perbandingan semacam ini pada dasarnya memang banyak bercampur dengan penilaian kualitatif. Sebagai catatan, kode Chez mungkin masih bisa dipercepat jika permutation disimpan dalam fxvector dan operasi khusus fixnum dipakai, sehingga boxing/unboxing dan alokasi berkurang. Dokumen terkait ada di dokumentasi objek Chez Scheme
  • Saya juga pernah menulis artikel serupa di sini. Saya setuju dengan Algol, Lisp, Forth, APL, dan Prolog, tetapi untuk bahasa fungsional inovatif saya memasukkan SASL yang sedikit lebih awal daripada ML, dan untuk perwakilan objek saya memilih Smalltalk yang muncul lebih dulu daripada Self. Saya juga menambahkan Fortran, COBOL, SNOBOL, dan Prograph karena menurut saya masing-masing mengubah permainan dengan caranya sendiri

    • Saya lebih suka daftar ini. Terutama menyenangkan melihat SNOBOL masuk. Saya sendiri belum pernah memakainya, tetapi dulu waktu kecil saya pertama kali mengenalnya karena judulnya terdengar lucu saat mengambil buku tentangnya di obral buku perpustakaan umum. Sebelum itu saya hanya tahu sedikit BASIC, Logo, dan sedikit assembly 6502 yang saya panggil dari BASIC dengan mengikuti contoh di manual Atari BASIC. Dan saya juga sulit membayangkan daftar bahasa inovatif yang tidak memasukkan Fortran dan COBOL, atau akar mereka yaitu FLOW-MATIC. Buku yang saya rujuk adalah manual Atari BASIC
    • Saya kurang paham kenapa Smalltalk alih-alih Self tidak masuk daftar. Smalltalk lebih dulu ada, dan Alan Kay bahkan orang yang menciptakan istilah “OOP” itu sendiri. Saya juga cenderung melihat ML, dalam silsilahnya, sebagai anak dari Lisp
  • Saya ingin menambahkan keluarga semantik ke diskusi ini. Misalnya Verilog, Petri nets, Kahn process networks, dataflow machines, process calculi, reactive, term rewriting, keluarga constraint solver/theorem prover, dan probabilistic programming. Selain itu ada juga bahasa seperti Unison, Darklang, temporal dataflow, dan DBSP yang tidak pas masuk 7 kategori lama, tetapi secara praktik sudah mendekati tahap produksi. Ini mungkin terdengar agak curang, tetapi kebanyakan memang merupakan model komputasi yang sejajar dengan model mesin von Neumann. Sudah lama saya ingin menulis sesuatu seperti “semua cara komputasi yang kita kenal, di luar von Neumann”

    • Kalau tulisan seperti itu terbit, saya akan sangat senang membacanya. Sementara itu saya jadi teringat lagi pada sebagian tulisan Steve Yegge. Intinya, sebagian besar pendidikan ilmu komputer modern pada dasarnya berdiri di atas kerangka yang dibuat von Neumann, dan pilihan terhadap perangkat sekuensial juga mencerminkan realitas biaya produksi dan kecepatan pada masa itu. Saya juga terkesan dengan penjelasan bahwa banyak hal yang kita pelajari—arsitektur mesin, percabangan, perulangan, subrutin, debugging, konversi sistem bilangan, pemodelan masalah—semuanya sudah muncul dalam karyanya. Kutipan terkait ada di archive
    • Melihat pembahasan term rewriting, saya jadi teringat saat kuliah dulu membuat perangkat lunak spreadsheet dan kebagian parser rumus. Awalnya saya buntu hampir seminggu, lalu akhirnya sadar bahwa kalau 1+1 ditulis ulang menjadi bentuk seperti ADD(1,1), saya bisa mem-parsing-nya dengan cara yang saya pahami. Ditambah lagi saya keras kepala menolak belajar regex, jadi kodenya jadi cukup aneh, dan saya masih ingat rekan tim berkata, “kalau Andy bilang bisa, jangan disentuh.” Orang lain di tim menyelesaikannya dengan regex dan kodenya kira-kira 20 kali lebih pendek daripada punya saya
    • Soal “bahasa baru yang siap untuk dunia nyata”, menurut saya bahkan sistem seperti ChatGPT yang mungkin belum sepenuhnya production-ready menurut standar saya pun masuk kategori serupa karena memang dipakai di pekerjaan nyata. Apakah ini layak disebut bahasa pemrograman memang bisa diperdebatkan, tetapi sebagai medium untuk memberi tahu komputer apa yang harus dilakukan, menurut saya cukup masuk akal untuk dianggap begitu. Sifat nondeterministik juga menurut saya bukan syarat mutlak bahasa pemrograman
    • Tulisan Sussman tentang propagators juga cukup menarik untuk dibaca
    • Untuk contoh logic programming di S9 Scheme, materi ini cukup bagus. Bahkan tanpa membeli bukunya, kita bisa langsung mengambil kodenya, dan kalau sudah punya dasar dari buku pengantar seperti Simply Scheme, struktur solver-nya cukup mudah dibaca
  • Mata kuliah “Concepts of programming languages” yang saya ambil di TU Delft adalah mata kuliah favorit saya selama kuliah ilmu komputer. Kami belajar C, sisi fungsional lewat Scala, dan konsep prototipe lewat JavaScript, dan itu sangat mempermudah saya saat beberapa tahun kemudian belajar Elixir. Ada juga kelas membuat agen Unreal Tournament dengan GOAL, bahasa berbasis Prolog. Lama sekali saya tidak pernah benar-benar paham Prolog cocok dipakai untuk apa, tetapi akhirnya saya memakainya untuk membuat spellcheck yang memaksa kalimat Papiamentu buruk hasil LLM diperbaiki berulang kali

    • Saya juga pernah mengambil kelas serupa, dan meski dosennya kurang bagus, saya tetap sangat bersyukur mengikutinya. Sekadar mengenal sangat dangkal pun berbagai bahasa purwarupa lain sudah cukup untuk memperluas wawasan, dan kalau ditambah assembly efeknya makin besar. Mungkin kita tidak langsung bisa membuat sesuatu yang produktif dengannya, tetapi setidaknya kita terhindar dari jebakan melihat semua masalah seperti paku hanya karena yang kita punya palu
    • Saya juga ada di kelas itu. Bagian Unreal Tournament adalah salah satu kelas paling keren yang pernah saya lihat, dan kalau tidak salah setahun setelah saya kelas itu dihapus. Sayang sekali, sekarang sepertinya berubah menjadi mata kuliah AI biasa yang semua orang juga punya. Saya sendiri masih belum banyak menemukan penggunaan Prolog yang benar-benar bagus, tetapi justru GOAL yang jauh lebih membekas bagi saya. Dan baru belakangan ini saya sadar bahwa strukturnya sebenarnya bisa direplikasi dalam bahasa yang lebih “normal”, dan itu malah memberi banyak keuntungan, jadi ada sedikit rasa kecewa juga
    • Saya penasaran apakah GOAL yang dimaksud di sini adalah Game Oriented Assembly Lisp
  • Saya setuju dengan gagasan bahwa kita perlu belajar bahasa dari kategori yang berbeda-beda. Baru setelah belajar OCaml, fungsi benar-benar terasa seperti fungsi matematis bagi saya, dan Mathematica membentuk kebiasaan melihat ekspresi itu sendiri sebagai input. Notasi Polandia terbalik di PostScript memberi kesan seperti bukan sekadar aritmetika yang berbeda, tetapi benar-benar menyusun ulang cara berpikir saya. Namun saya tidak setuju dengan klaim bahwa memilih Java, C#, C++, Python, atau Ruby itu sama saja. Kalau targetnya hanya mengimplementasikan quicksort mungkin memang mirip, tetapi bagi orang yang benar-benar ingin membangun sesuatu, pilihan bahasa bisa membuat perbedaan sebesar siang dan malam. Kalau seseorang ingin membuat game 3D lalu pertama kali diberi Ruby, atau ingin melakukan data science eksploratif atau deep learning tetapi pertama kali diberi Java, motivasinya bisa langsung turun

    • Saya sendiri mungkin tidak akan pernah mencari uang dengan Rust, tetapi sama sekali tidak menyesal telah mempelajarinya. Rust benar-benar membuat saya berpikir jauh lebih dalam tentang kepemilikan data di dalam program
  • Tulisan ini mengingatkan saya pada 7 languages in 7 weeks karya Bruce Tate. Saya juga pertama kali mengenal Erlang dari buku itu. Tetapi secara sejarah, memasukkan COBOL dan Fortran ke keluarga Algol terasa agak dipaksakan, meski tetap mengingatkan bahwa sejarah memang pada dasarnya selalu mengandung penyederhanaan

    • Kalau ditarik lebih jauh lagi untuk membuat klasifikasi primitif, menurut saya itu juga terasa dipaksakan. Bahasa assembly paling awal pun sudah bersifat imperatif, tetapi yang membuat Algol, Fortran, dan Cobol menarik adalah bahwa fungsi dan fitur tingkat tinggi lain memungkinkan pemrograman yang kompleks. Memang keturunan Algol paling banyak, tetapi saya pribadi menganggap bahasa pemrograman imperatif pertama adalah Fortran
    • Dari Wikipedia terlihat Fortran dan Algol sama-sama dikembangkan sekitar 1957, tetapi saya jadi penasaran mana yang sebenarnya lebih dulu, dan apakah dalam proses perancangannya ada pengaruh timbal balik atau tumpang tindih
    • Mungkin lebih tepat melihat COBOL sebagai fosil hidup. Dan Fortran modern terasa seperti bahasa yang berakar pada keluarga FORTRAN tetapi kemudian menerima ciri-ciri silsilah Algol melalui transfer horizontal
  • Ada juga diskusi HN lama yang terkait. Diskusi sebelumnya bisa membantu memahami konteks

    • Tepatnya itu diskusi tanggal 4 Mei 2023 dengan 323 komentar. Yang lebih lama lagi ada thread ini dari 30 September 2021, dan saat itu ada 29 komentar