Ketika programmer membahas kelebihan dari berbagai bahasa pemrograman, mereka sering membicarakannya dalam istilah biasa, sebagai alat dalam satu set perangkat yang berbeda - satu lebih cocok untuk pemrograman sistem, yang lain untuk menempelkan program lain untuk menyelesaikan masalah saat ini. Seharusnya begitu. Bahasa memiliki kekuatan yang berbeda, dan menyatakan bahwa satu bahasa lebih baik daripada bahasa lain tanpa menyebutkan contoh spesifik berarti hanya menyebabkan perdebatan yang tidak produktif dan tajam.
Namun, ada satu bahasa yang anehnya membangkitkan rasa hormat universal:
Cuma . Para pejuang keyboard, siap menyerang siapa pun yang berani menyatakan bahwa bahasa apa pun lebih baik daripada yang lain, setuju bahwa Lisp ada di level yang berbeda. Ini melampaui kriteria utilitarian yang dinilai oleh bahasa lain, karena programmer rata-rata tidak pernah menggunakan Lisp untuk membuat sesuatu yang praktis, dan mungkin tidak akan pernah, namun, penghargaan untuk Lisp begitu dalam sehingga ia sering dipuji sifat mitos. Komik xkcd favorit semua orang dengan demikian menggambarkan Lisp setidaknya dua kali: dalam satu komik, seorang tokoh mencapai pencerahan Lisp, yang membantunya memahami struktur dasar alam semesta. Di yang lain, seorang programmer tua dalam balutan gaun menyerahkan setumpuk tanda kurung kewannya, menjelaskan bahwa ini adalah "senjata elegan untuk masa yang lebih beradab," menyinggung kemungkinan okultisme
Force yang melekat di Lisp.
Contoh hebat lainnya adalah parodi Bob Kanefsky dari lagu "God Live on Terra". Parodi-nya ditulis pada pertengahan 90-an dan disebut "Eternal Flame." Dia menggambarkan bagaimana, rupanya, Tuhan menciptakan dunia dengan bantuan Lisp. Berikut ini adalah kutipan, dan versi lengkapnya dapat ditemukan di situs web
GNU Humor Collection :
Lagipula, Tuhan menulis dalam Lisp
Saat dia mengisi dedaunan dengan hijau.
Bunga fraktal dan akar rekursif:
Retas terindah yang pernah saya lihat.
Dan ketika saya mempelajari butiran salju
Dan saya tidak menemukan dua hal yang sama
Saya tahu bahwa Tuhan mencintai bahasa
Dengan nama empat hurufnya sendiri.
Saya berbicara hanya untuk diri saya sendiri, tetapi bagi saya tampaknya meme budaya "Lisp adalah sihir rahasia" adalah fenomena yang paling aneh dan menarik. Lisp dikandung dalam menara gading sebagai alat untuk meneliti kecerdasan buatan, sehingga akan selalu sedikit asing dan misterius bagi programmer biasa. Namun, sekarang programmer saling
mendorong "coba Lisp sebelum Anda mati," seolah-olah itu semacam obat psikedelik yang memperluas kesadaran. Mereka melakukan ini meskipun Lisp adalah yang tertua kedua dari bahasa pemrograman yang masih mereka gunakan, kedua setelah
Fortran , dan itu hanya satu tahun. Bayangkan bahwa perusahaan atau tim yang mengembangkannya akan menginstruksikan Anda untuk mengiklankan beberapa bahasa pemrograman baru. Bukankah lebih keren untuk meyakinkan semua orang bahwa bahasa baru Anda memiliki kekuatan ilahi? Tetapi bagaimana ini bisa dicapai? Bagaimana bahasa pemrograman menjadi terkenal sebagai sumber pengetahuan rahasia?
Bagaimana Lisp mencapai ini?
Sampul Majalah Byte, Agustus 1979Teori A: Bahasa Aksiomatik
John McCarthy , pencipta Lisp, awalnya tidak berusaha menjadikan Lisp esensi elegan dari prinsip-prinsip komputasi. Tetapi, setelah satu atau dua ide sukses dan beberapa perbaikan, Lisp berubah menjadi hanya itu.
Paul Graham - kita akan membicarakannya nanti - menulis bahwa, setelah menciptakan Lisp, McCarthy "melakukan hal yang sama untuk pemrograman seperti yang dilakukan Euclid untuk geometri." Mungkin orang mencari makna yang lebih dalam di Lisp, karena McCarthy menciptakannya dari bagian fundamental sedemikian rupa sehingga sulit untuk mengatakan apakah dia yang menciptakannya atau menemukannya.
McCarthy mulai merenungkan penciptaan bahasa selama
Proyek Penelitian Kecerdasan Buatan Musim Panas Dartmouth tahun 1956 . Lokakarya ini adalah konferensi akademik multi-minggu berkelanjutan, yang pertama di bidang AI. Ngomong-ngomong, McCarthy, saat itu, sebagai associate professor matematika di Dartmoor, yang menciptakan istilah "kecerdasan buatan", yang mengusulkan untuk mengadakan pertemuan ini. Konferensi ini dihadiri oleh sekitar sepuluh orang. Di antara mereka adalah Allen Newel dan Herbert Simon, dua peneliti yang terkait dengan RAND Corporation dan Carnegie Mellon University, yang baru saja menyelesaikan pengembangan bahasa
IPL .
Newel dan Simon berusaha menciptakan sistem yang mampu menyampaikan bukti dalam
logika ujaran . Mereka menyadari bahwa akan sulit untuk melakukan ini, tetap pada level instruksi komputer mereka sendiri, jadi mereka memutuskan untuk membuat bahasa - atau, sebagaimana mereka menyebutnya, "pseudo-code" - yang akan membantu mereka secara lebih alami mengekspresikan karya "mesin logika teoretis" mereka. Bahasa mereka, IPL, "bahasa pemrosesan informasi", lebih seperti dialek tingkat tinggi dari assembler daripada bahasa pemrograman dalam pengertian modern. Newel dan Simon, mungkin merujuk pada Fortran, mencatat bahwa "kode pseudo lain" yang kemudian dalam pengembangan "sibuk" dengan mewakili persamaan dalam notasi matematika standar. Sebaliknya, bahasa mereka berfokus pada penyajian pernyataan sebagai daftar ekspresi simbolik. Program IPL menggunakan urutan perakitan makro untuk memproses dan mengevaluasi ekspresi dalam satu atau lebih dari daftar ini.
McCarthy berpikir akan bermanfaat untuk memiliki ekspresi aljabar dalam bahasa yang mirip dengan Fortran. Karena itu, dia tidak menyukai IPL. Tetapi dia berpikir bahwa daftar simbolis adalah cara yang baik untuk memodelkan tugas dari bidang AI, terutama yang termasuk deduksi. Itu adalah bibit keinginan McCarthy untuk membuat bahasa pemrosesan daftar aljabar, bahasa yang menyerupai Fortran, tetapi dapat menangani daftar simbolik seperti IPL.
Tentu saja, hari ini Lisp tidak menyerupai Fortran. Selama beberapa tahun ke depan, gagasan McCarthy untuk bahasa pemrosesan daftar yang ideal telah berkembang. Ide-idenya mulai berubah pada tahun 1957 ketika dia mulai menulis prosedur untuk program catur Fortran. Pengalaman lama Fortran meyakinkan McCarthy bahwa ada beberapa titik buruk dalam desainnya, yang utama adalah pernyataan IF yang canggung. McCarthy menemukan alternatif, ungkapan kondisional “benar”, mengembalikan subekspresi A jika cek yang diberikan berhasil, dan subekspresi B dalam kasus lain, dan hanya menjalankan subekspresi yang dikembalikan. Pada musim panas 1958, ketika McCarthy sedang mengerjakan sebuah program yang mampu melakukan diferensiasi, ia menyadari bahwa ekspresi kondisionalnya "benar" membuat fungsi rekursif menulis lebih sederhana dan lebih alami. Masalah diferensiasi juga mendorong McCarthy untuk menulis fungsi daftar peta yang menggunakan fungsi lain sebagai argumen dan menerapkannya ke semua elemen daftar. Itu berguna untuk membedakan jumlah anggota yang berubah-ubah.
Fortran tidak dapat mengungkapkan hal-hal seperti itu, sehingga pada musim gugur 1958 McCarthy meminta beberapa siswa tugas untuk mengimplementasikan Lisp. Karena McCarthy sekarang adalah profesor di MIT, semua siswa belajar di MIT. Dengan menerjemahkan ide-ide ke dalam kode kerja, McCarthy dan siswa membuat perubahan yang semakin menyederhanakan bahasa. Yang terbesar adalah sintaks Lisp. Mula-mula McCarthy menginginkan yang disebut "Ekspresi-M," lapisan "
gula sintaksis " yang membuat sintaks Lisp tampak seperti Fortran. Meskipun ekspresi-M dapat diterjemahkan ke dalam ekspresi-S - sebuah daftar sederhana terlampir dalam tanda kurung yang terkenal dengan Lisp - ekspresi-S benar-benar representasi tingkat rendah untuk komputer. Satu-satunya masalah adalah bahwa McCarthy menyatakan ekspresi-M dengan tanda kurung siku, dan tidak ada tanda kurung siku pada pukulan IBM 026 yang digunakan di MIT. Oleh karena itu, tim Lisp membatasi diri pada ekspresi S, dan menggunakannya untuk mewakili tidak hanya daftar data, tetapi juga penggunaan fungsi. McCarthy dan siswa membuat beberapa penyederhanaan lainnya, termasuk beralih ke rekaman awalan dan model memori di mana bahasa hanya memiliki satu jenis nyata.
Pada tahun 1960, McCarthy menerbitkan karya terkenal tentang Lisp "Fungsi Rekursif dari Ekspresi Simbolik dan Komputasi Mereka dengan Mesin". Pada saat itu, bahasa telah dikurangi sedemikian rupa sehingga McCarthy menyadari bahwa ia telah menciptakan "sistem matematika yang elegan", dan bukan hanya bahasa pemrograman lain. Dia kemudian menulis bahwa banyak penyederhanaan dalam Lisp mengubahnya menjadi "cara menggambarkan fungsi yang dihitung, jauh lebih akurat daripada mesin Turing atau definisi rekursif umum yang digunakan dalam teori fungsi rekursif." Dalam karyanya, ia memperkenalkan Lisp sebagai bahasa pemrograman yang berfungsi, dan sebagai formalisme untuk mempelajari perilaku fungsi rekursif.
McCarthy menjelaskan Lisp kepada para pembaca, membangunnya dari seperangkat aturan kecil. Kemudian, Paul Graham mengikuti jejak McCarthy menggunakan bahasa yang lebih mudah dibaca dalam esainya
Roots of Lisp . Graham dapat menjelaskan Lisp hanya dengan tujuh operator primitif, dua entri berbeda untuk fungsi, dan enam fungsi tingkat tinggi yang didefinisikan melalui operator primitif. Kemampuan untuk mendefinisikan Lisp dengan sekumpulan kecil aturan sederhana tentu menambah misteri. Graham menyebut karya McCarthy sebagai upaya untuk "membuat aksioma perhitungan." Saya pikir ini adalah cara yang bagus untuk merenungkan daya tarik Lisp. Dalam bahasa lain, ada konstruksi buatan yang jelas digambarkan oleh kata-kata yang dicadangkan seperti sementara, typedef, atau public static batal, sepertinya deskripsi Lisp dibatasi oleh logika perhitungan. Kualitas ini dan koneksi asli Lisp dengan bidang esoteris seperti "teori fungsi rekursif" harus menjelaskan prestise bahasa saat ini.
Teori B: Mesin Masa Depan
Dua dekade setelah penciptaannya, Lisp telah menjadi, menurut "
kamus ilmuwan komputer " yang terkenal, "bahasa asli" penelitian AI. Lisp menyebar dengan cepat di tahap awal, mungkin karena fakta bahwa sintaksis sistematisnya membuat tugas penerapannya pada mesin baru relatif mudah. Kemudian, peneliti terus menggunakannya karena seberapa baik ia menangani ekspresi simbolik, yang penting di era ketika sebagian besar AI adalah simbolik. Lisp digunakan dalam proyek AI yang produktif seperti program bahasa alami
SHRDLU ,
sistem aljabar komputer
Macsyma , dan sistem logika
ACL2 .
Pada pertengahan 1970-an, para peneliti AI mulai kekurangan daya komputer. Sebagai contoh, PDP-10 - mesin AI favorit semua orang - memiliki ruang alamat 18-bit, yang semakin kurang untuk program AI di Lisp. Banyak program AI juga harus interaktif, dan membuat program interaktif besar yang bekerja dengan baik pada sistem pembagian waktu adalah tugas yang sulit. Solusi yang pertama kali diusulkan Peter Deutsch dari MIT adalah mengembangkan komputer khusus untuk Lisp.
Mesin tersebut harus memberi setiap pengguna prosesor khusus yang dioptimalkan untuk Lisp. Mereka juga harus memiliki lingkungan pengembangan yang ditulis dalam Lisp untuk programmer Lisp hardcore. Mesin Lisp, ditemukan pada saat yang tidak nyaman di akhir era komputer mini, tetapi sebelum masa kejayaan revolusi komputer mikro, adalah komputer pribadi berkinerja tinggi untuk elit programmer.
Untuk sementara, sepertinya mesin Lisp akan menjadi gelombang masa depan. Ada beberapa perusahaan yang mulai bersaing untuk komersialisasi teknologi ini. Yang paling sukses adalah Symbolics, yang diciptakan oleh veteran MIT AI Lab. Pada 1980-an, Symbolics meluncurkan 3.600 seri komputernya, populer di industri AI dan di industri yang membutuhkan komputasi daya tinggi. Garis 3600 termasuk komputer dengan layar besar, grafik bitmap, antarmuka berbasis mouse, dan grafik yang kuat dan program animasi. Ini adalah mesin yang mengesankan yang memungkinkan untuk menulis program yang mengesankan. Sebagai contoh, Bob Cali, yang bekerja di bidang penelitian robotika, menulis kepada saya melalui Twitter bahwa ia mampu menerapkan dan memvisualisasikan algoritma pencarian jalur pada Symbolics 3650 pada tahun 1985. Dia mengatakan bahwa grafik raster dan OOP (tersedia pada mesin Lisp berkat ekstensi Flavours) baru di tahun 1980-an. Simbol berada di garis depan.

Tetapi sebagai hasilnya, komputer Symbolics sangat mahal. Symbolics 3600 berharga $ 110.000 pada tahun 1983. Kebanyakan orang hanya dapat mengagumi kekuatan mesin Lisp dan keajaiban operator yang menulis dalam Lisp dari jauh. Tapi mereka kagum. Majalah Byte menggambarkan mesin Lisp dan Lisp beberapa kali antara 1979 dan akhir 1980-an. Dalam Lisp edisi Agustus 1979, pemimpin redaksi antusias tentang mesin baru yang dikembangkan di MIT, "dengan segunung memori" dan "sistem operasi canggih." Dia menganggap mereka begitu menjanjikan sehingga dua tahun sebelumnya di mana Apple II, Commodore PET, dan TRS-80 muncul, tampak membosankan. Lima tahun kemudian, pada tahun 1985, penulis di majalah Byte menggambarkan proses penulisan program Lisp untuk "Symbolics 3670 yang kompleks dan sangat kuat," dan mendorong pembaca untuk belajar Lisp, menyatakan bahwa itu adalah "bahasa yang dibutuhkan oleh sebagian besar peneliti AI," dan kandidat untuk bahasa tujuan umum di masa depan.
Saya bertanya kepada Paul MacJones,
yang telah melakukan banyak hal untuk menyelamatkan Lisp di Museum Sejarah Komputer Mountain View, tentang kapan orang-orang mulai berbicara tentang Lisp sebagai hadiah dari makhluk berdimensi lebih tinggi. Dia mengatakan bahwa fitur dari bahasa itu sendiri tentu berkontribusi terhadap hal ini, tetapi juga hubungan yang erat antara Lisp dan aplikasi AI yang kuat pada 1960-an dan 1970-an. Ketika menjadi mungkin untuk membeli mesin Lisp pada 1980-an, beberapa orang bertemu di luar tempat-tempat seperti MIT atau Stanford, dan legenda itu terus tumbuh. Saat ini, sedikit orang yang mengingat mesin Lisp dan Simbolik, tetapi mereka membantu mempertahankan aura misteri Lisp hingga 1980-an.
Teori B: pelatihan pemrograman
Pada tahun 1985, profesor dari MIT, Harold Abelson dan Gerald Sasman, serta istri Sasman, Julia, menerbitkan buku teks Struktur dan Interpretasi Program Komputer. Di buku teks, pembaca diajarkan pemrograman dalam bahasa Skema, dialek Lisp. Itu digunakan di MIT untuk pengantar pemrograman selama dua dekade. Tampak bagi saya bahwa ini adalah buku teks, SICP, menambahkan mistisisme ke Lisp. SICP mengambil Lisp dan menunjukkan bagaimana itu dapat digunakan untuk menggambarkan konsep seni pemrograman yang mendalam dan hampir filosofis. Konsep-konsep ini cukup umum untuk menggunakan PL, tetapi penulis SICP memilih Lisp. Akibatnya, reputasi Lisp dilengkapi dengan ketenaran buku aneh dan brilian yang menggelitik banyak generasi programmer (dan menjadi
meme yang sangat aneh ). Lisp selalu menjadi "formalisme elegan McCarthy"; sekarang juga telah menjadi bahasa "mengajarkan Anda rahasia pemrograman yang tersembunyi").
Perlu sedikit dibicarakan tentang betapa anehnya buku ini - karena bagi saya tampaknya keanehan dan keanehannya Lisp hari ini bergabung menjadi satu. Keanehan dimulai pada sampulnya. Ini menggambarkan seorang penyihir atau seorang alkemis mendekati meja, dan siap untuk memulai semacam sihir. Di satu sisi ia memiliki kaliper atau kompas, di sisi lain - bola dunia dengan tulisan "eval" dan "berlaku". Wanita di depannya menunjuk ke meja; dengan latar belakang adalah surat Yunani lambda memancar di udara.

Apa yang sedang terjadi di sini? Mengapa ada kaki binatang di meja? Mengapa seorang wanita menunjuk ke meja? Apa arti penting dari ruang tinta? Haruskah kita memahami bahwa sang penyihir mengungkapkan pengetahuan rahasia alam semesta, dan bahwa mereka terdiri dari siklus eval / apply dan
lambda calculus ? Rupanya begitu. Hanya gambar ini yang seharusnya menambahkan banyak persepsi hari ini tentang Lisp.
Tetapi teks buku itu sendiri sering ternyata sama anehnya. SICP tidak seperti kebanyakan buku lain tentang ilmu komputer. Para penulis dalam kata pengantar menjelaskan bahwa buku ini bukan hanya tentang pemrograman dalam Lisp - itu bercerita tentang "tiga trik, atau fenomena: pikiran manusia, satu set program komputer dan komputer." Kemudian mereka menggambarkan bahwa mereka yakin bahwa pemrograman tidak boleh dianggap sebagai disiplin ilmu komputer, tetapi sebagai catatan baru "
epistemologi prosedural". Program adalah cara baru untuk menyusun pemikiran yang hanya sesekali dimasukkan ke dalam komputer. Bab pertama memberikan tur singkat tentang Lisp, tetapi sebagian besar buku ini adalah tentang konsep yang lebih abstrak.
Ini membahas berbagai paradigma pemrograman, sifat waktu dan identitas dalam sistem OO, dan di satu tempat, masalah sinkronisasi apa yang mungkin timbul karena keterbatasan mendasar dari penyampaian pesan, yang memainkan peran kecepatan cahaya dalam teori relativitas. Ini adalah hal-hal yang sangat musykil.Dan bukan untuk mengatakan bahwa buku itu buruk. Dia luar biasa. Ini membahas konsep pemrograman penting pada tingkat yang lebih tinggi daripada di semua buku lain yang saya baca, konsep yang saya pikirkan sejak lama tetapi tidak bisa dijelaskan. Anehnya, pengantar buku teks pemrograman dapat dengan cepat melanjutkan untuk menggambarkan kelemahan mendasar OOP dan keuntungan dari bahasa fungsional yang meminimalkan keadaan yang bisa berubah. Sungguh menakjubkan bagaimana ini berubah menjadi diskusi tentang bagaimana paradigma streaming mungkin seperti RxJS hari inimungkin memberi Anda yang terbaik dari kedua pendekatan. SICP menyoroti esensi pengembangan program tingkat tinggi dengan cara yang mengingatkan pada karya asli McCarthy tentang Lisp. Hal pertama yang ingin Anda lakukan setelah membaca buku ini adalah membuat rekan programmer Anda membacanya; jika mereka menemukannya, melihat sampulnya, dan tidak membaca, maka semua yang akan ditunda adalah bahwa beberapa hal misterius yang disebut eval / apply memberi penyihir kekuatan khusus atas meja dengan kaki binatang. Saya akan terkesan dengan sepatu mereka.Tapi mungkin kontribusi paling penting dari SICP adalah meningkatkan Lisp dari tingkat rasa ingin tahu yang lucu menjadi kebutuhan pedagogis. Jauh sebelum SICP, orang menyarankan satu sama lain untuk belajar Lisp untuk meningkatkan level mereka sebagai seorang programmer. Majalah Byte Magazine edisi 1979. Editor yang sama, yang mengagumi mesin Lisp baru di MIT, menjelaskan bahwa ada baiknya mempelajari bahasa ini karena "mewakili sudut pandang yang berbeda pada tugas-tugas." Namun, di SICP, Lisp disajikan tidak hanya sebagai kontras dengan bahasa lain. Itu digunakan sebagai bahasa pengantar, mengisyaratkan bahwa itu adalah bahasa terbaik untuk mempelajari konsep pemrograman dasar. Ketika programmer hari ini menyarankan satu sama lain untuk mencoba Lisp sebelum mereka mati, mereka mungkin melakukannya karena SICP. Bagaimanapun, Brainfuck juga mungkin menawarkan "perspektif berbeda tentang tugas."Tetapi orang-orang malah mempelajari Lisp, mengetahui bahwa selama dua puluh tahun sudut pandang Lisp sangat berguna sehingga siswa di MIT mengajarkan Lisp ke semua bahasa lain.Kembali Gangguan
Pada tahun SICP dirilis, Björn Straustrup menerbitkan edisi pertama buku " Bahasa Pemrograman C ++ ", yang membawa OOP ke massa. Beberapa tahun kemudian, pasar mesin Lisp runtuh, dan musim dingin AI dimulai . Selama sepuluh tahun ke depan, C ++ dan kemudian Jawa menjadi bahasa masa depan, dan Lisp bervegetasi.Secara alami, tidak mungkin untuk menunjukkan kapan tepatnya orang mulai mengagumi Lisp lagi. Mungkin ini terjadi setelah Paul Graham, salah satu pendiri Y-Combinator dan pencipta Hacker News, menerbitkan beberapa esai berpengaruh yang menggambarkan Lisp sebagai bahasa terbaik untuk startup. Dalam Essay Ahead of Medium"Graham mengklaim bahwa macro Lisp membuat bahasa lebih kuat daripada bahasa lain. Dia menyatakan bahwa menggunakan Lisp dalam startup Viaweb-nya membantunya mengembangkan hal-hal tertentu lebih cepat daripada yang dilakukan kompetitornya. Beberapa programmer yakin. Tetapi sebagian besar tidak beralih ke Lisp.Sebaliknya, semakin banyak fitur Lisp mulai jatuh ke dalam bahasa favorit semua orang. Python telah menambahkan daftar generasi. Dalam C # - Linq. Di Ruby ... well, Ruby adalah Lisp. Seperti dicatat Graham pada tahun 2001, "bahasa default, dibangun ke banyak bahasa populer kemudian, secara bertahap berkembang menuju Lisp." Dan sementara bahasa-bahasa lain secara bertahap mendekati Lisp, Lisp sendiri entah bagaimana mempertahankan reputasi khususnya sebagai bahasa misterius yang hanya sedikit dipahami, tetapi semua orang perlu belajar. Pada tahun 1980, pada tahun ulang tahun Lisp yang ke-20, McCarthy menulis bahwa Lisp telah bertahan selama ia mengambil "perkiraan lokal sejenis dalam ruang PL". Tapi ini meremehkan pengaruh nyata Lisp. Dia telah bertahan selama lima puluh tahun karena programmer dengan enggan mengakui, dekade demi dekade, bahwa ini adalah alat terbaik untuk tugas mereka. Dia bertahan meskipunbahwa sebagian besar programmer tidak menggunakannya. Karena asalnya dan digunakan dalam penelitian AI, dan mungkin juga warisan SICP, Lisp terus menyenangkan orang. Dan sampai kita dapat membayangkan Tuhan yang menciptakan dunia dengan bantuan beberapa bahasa yang lebih baru, Lisp tidak akan pergi ke mana pun.