Flamboyan


Pengalaman Lisp Saya dan Pengembangan GNU Emacs

Ide menarik tentang Emacs adalah bahwa ia memiliki bahasa pemrograman, dan perintah pengeditan pengguna akan ditulis dalam bahasa pemrograman yang ditafsirkan, sehingga Anda dapat memuat perintah baru ke editor Anda saat Anda mengedit. Selama tahun 1970-an, sebelum hidup saya dipolitisasi oleh peristiwa-peristiwa mengerikan, saya hanya ikut membuat ekstensi satu demi satu untuk berbagai program, dan kebanyakan dari mereka tidak ada hubungannya dengan Lisp. Jadi, kami memiliki sistem yang berguna untuk hal-hal selain pemrograman, namun Anda dapat memprogramnya saat Anda menggunakannya. Saya tidak tahu apakah itu yang pertama, tapi tentu saja editor pertama seperti itu. Anda dapat mengedit program yang Anda gunakan dan kemudian mengeditnya. Semangat membangun program raksasa dan rumit untuk digunakan dalam pengeditan Anda sendiri, dan kemudian bertukar dengan orang lain, memicu semangat kerja sama roda bebas yang kami miliki di Lab AI saat itu. Jadi, meskipun tidak ada pemikiran politik terorganisir yang menghubungkan cara kami berbagi perangkat lunak dengan desain Emacs, saya yakin bahwa ada koneksi di antara mereka, mungkin koneksi yang tidak disadari. Saya pikir itu adalah sifat dari cara kami tinggal di Lab AI yang menyebabkan Emacs dan menjadikannya seperti itu. Idenya adalah bahwa Anda dapat memberikan salinan program apa pun yang Anda miliki kepada seseorang yang menginginkan salinannya.Ada perintah seperti like 5l ’, artinya‘ pindahkan lima baris ’, atau‘ i ’dan kemudian sebuah string dan kemudian ESC untuk memasukkan string itu. Alasannya adalah bahwa itu tidak dirancang untuk menjadi bahasa pemrograman, itu dirancang untuk menjadi bahasa editor dan perintah. Itu adalah editor teks kami, dan merupakan bahasa pemrograman yang sangat jelek, seburuk mungkin. Anda akan mengetik string yang merupakan serangkaian perintah, yang disebut string perintah. Penerjemah yang kami tulis di dalamnya sebenarnya tidak ditulis untuk Emacs, itu ditulis untuk TECO. Sebelum itu, itu seperti Basic, dan subrutin hanya bisa menggunakan huruf tunggal sebagai nama mereka. Itu sulit untuk memprogram dengan program besar, jadi kami menambahkan kode sehingga mereka dapat memiliki nama yang lebih panjang. Sebenarnya, ada beberapa fasilitas yang agak canggih; Saya pikir Lisp mendapatkan fasilitas perlindungan-lepas dari TECO. Nah, orang ingin memperluas bahasa ini dengan fasilitas pemrograman, jadi mereka menambahkan beberapa. Ada perintah samar lain yang dapat digunakan untuk keluar dari loop secara kondisional. Kami mulai memasukkan fasilitas yang agak canggih, semua dengan sintaks paling jelek yang pernah Anda pikirkan, dan itu berhasil - orang tetap bisa menulis program besar di dalamnya. Bahasa tempat Anda membuat ekstensi tidak boleh dianggap sebagai bahasa pemrograman setelahnya; itu harus dirancang sebagai bahasa pemrograman. Pelajaran yang jelas adalah bahwa bahasa seperti TECO, yang tidak dirancang untuk menjadi bahasa pemrograman, adalah cara yang salah untuk melangkah. Bahkan, kami menemukan bahwa bahasa pemrograman terbaik untuk tujuan itu adalah Lisp.Multics Emacs terbukti sangat sukses - memprogram perintah pengeditan baru sangat nyaman sehingga bahkan sekretaris di kantornya mulai belajar cara menggunakannya. Dia menulis versi Emacs di Multics MacLisp, dan dia menulis perintahnya di MacLisp dengan cara yang mudah. Mereka menggunakan manual yang ditulis seseorang yang menunjukkan cara memperluas Emacs, tetapi tidak mengatakan itu adalah pemrograman. Mereka membaca manual, menemukan mereka bisa melakukan hal-hal yang bermanfaat dan mereka belajar memprogram. Jadi Bernie melihat bahwa sebuah aplikasi - program yang melakukan sesuatu yang berguna bagi Anda - yang memiliki Lisp di dalamnya dan yang dapat Anda luaskan dengan menulis ulang program Lisp, adalah sebenarnya cara yang sangat baik bagi orang untuk belajar pemrograman. Mereka bisa mendapatkan dorongan untuk penggunaan praktis mereka sendiri - pada tahap di mana itu yang paling sulit - di mana mereka tidak percaya mereka dapat memprogram, sampai mereka mencapai titik di mana mereka adalah programmer. Ini memberi mereka kesempatan untuk menulis program kecil yang berguna bagi mereka, yang di sebagian besar arena tidak mungkin Anda lakukan.Misalnya, ada TECO primitif untuk mengisi paragraf, bahwa sebagian besar editor akan ditulis dalam Lisp, tetapi bagian-bagian tertentu yang harus berjalan sangat cepat akan ditulis pada tingkat yang lebih rendah. Multics MacLisp memiliki kompiler dan juga juru bahasa - itu adalah sistem Lisp yang lengkap - tetapi orang-orang ingin mengimplementasikan sesuatu seperti itu pada sistem lain di mana mereka belum menulis kompiler Lisp. Ini adalah teknik yang telah kami praktikkan secara sadar dalam Emacs asli, karena ada fitur tingkat tinggi yang kami implementasikan kembali dalam bahasa mesin, menjadikannya sebagai TECO primitif. Nah, jika Anda tidak memiliki kompiler Lisp Anda tidak bisa menulis seluruh editor di Lisp - itu akan terlalu lambat, terutama menampilkan ulang, jika itu harus menjalankan Lisp ditafsirkan. Idenya adalah untuk menulis interpreter Lisp dan bagian-bagian bawah editor bersama-sama, sehingga bagian editor dibangun di fasilitas Lisp. Pada saat itu, orang mulai bertanya-tanya bagaimana mereka bisa mendapatkan sesuatu seperti ini pada platform di mana mereka tidak memiliki implementasi Lisp layanan penuh. Ada seorang interpreter Lisp, tapi saya mengimplementasikan fasilitas untuk pekerjaan editing tujuan khusus langsung di editor manipulasi-C buffer, menyisipkan teks terkemuka, membaca dan menulis file, menampilkan kembali buffer di layar, mengelola jendela editor. Karena itu, ketika saya menulis implementasi Emacs kedua saya, saya mengikuti jenis desain yang sama. C adalah bahasa yang baik, efisien untuk menjalankan program portabel dalam sistem operasi mirip Unix.Kami mulai membagikannya kepada mereka, dengan aturan bahwa "Anda harus mengembalikan semua peningkatan Anda" sehingga kami semua bisa mendapat manfaat. Seseorang ingin port itu dijalankan di Twenex - ini awalnya hanya berjalan pada Sistem Timesharing yang Tidak Kompatibel yang kami gunakan di MIT. Mereka mengirimnya ke Twenex, yang berarti ada beberapa ratus instalasi di seluruh dunia yang berpotensi menggunakannya. Pada awalnya, ia tampaknya dipengaruhi oleh semangat berbagi dan kerja sama yang sama dengan Emacs asli. Sekarang, ini bukan Emacs pertama yang ditulis dalam bahasa C dan dijalankan pada Unix. Tidak ada yang pernah mencoba untuk menegakkan itu, tetapi sejauh yang saya tahu orang-orang bekerja sama. Itu memiliki bahasa pemrograman yang dikenal sebagai 'mocklisp', yang terlihat secara sintaksis seperti Lisp, tetapi tidak memiliki struktur data Lisp. dasar untuk gerakan perangkat lunak bebas - pengalaman yang saya miliki, kehidupan yang saya jalani di laboratorium MIT AI - untuk bekerja pada pengetahuan manusia, dan tidak menghalangi orang lain yang menggunakan dan menyebarkan pengetahuan manusia lebih jauh. Inti dari kampanye ini adalah bahwa setiap orang harus bebas untuk melakukan hal-hal yang kami lakukan di masa lalu di MIT, bekerja bersama dalam perangkat lunak dan bekerja dengan siapa pun yang ingin bekerja bersama kami. Program Emacs kedua ini adalah 'perangkat lunak bebas' dalam arti modern dari istilah ini - itu adalah bagian dari kampanye politik eksplisit untuk membuat perangkat lunak bebas.
Pada saat itu, Anda dapat membuat komputer dengan kisaran harga yang sama dengan komputer lain yang tidak dimaksudkan untuk Lisp, kecuali bahwa itu akan menjalankan Lisp lebih cepat daripada yang seharusnya, dan dengan pengecekan tipe penuh di setiap operasi juga. Jadi ya, Anda dapat memiliki kompilator Lisp dan menjalankan program Anda dengan cepat, tetapi ketika mereka mencoba untuk mengambil mobil nomor, itu mendapatkan hasil yang tidak masuk akal dan akhirnya jatuh di beberapa titik. Dia menunjukkan bakat ini untuk bisnis dengan mengatakan kepada orang lain di kelompok, "Mari kita tinggalkan Greenblatt, lupakan idenya, dan kita akan membuat perusahaan lain." Menusuk dari belakang, jelas seorang pengusaha sejati. Greenblatt kemudian merekrut Russell Noftsker, orang yang mempekerjakan saya, yang kemudian meninggalkan AI Lab dan menciptakan perusahaan yang sukses. Namun dalam kontraknya, MIT tidak berhak memasukkan mereka ke dalam sistem mesin MIT Lisp yang keduanya perusahaan telah melisensikan. Kemudian mereka menerapkan aturan dan menghilangkan orang-orang yang bekerja paruh waktu untuk MIT, sehingga mereka harus pergi sepenuhnya, yang hanya menyisakan saya. Pengabaian itu terjadi ketika Symbolics merekrut semua peretas, kecuali saya dan beberapa yang bekerja di LMI paruh waktu. Itu adalah kontrak tiga arah di mana kedua perusahaan melisensikan penggunaan sumber sistem mesin Lisp. Tidak ada yang membayangkan bahwa kelompok peretas lab AI akan musnah, tetapi ternyata demikian.Jika kami menggunakan dan meningkatkan versi sistem MIT, kami akan melakukan pekerjaan yang tersedia untuk kedua perusahaan, tetapi Symbolics melihat bahwa kami akan mendukung LMI karena kami akan membantu mereka terus ada. Ini, pada dasarnya, berarti bahwa mereka menuntut kami harus memilih sisi, dan menggunakan versi sistem MIT atau versi Simbolik. Jika kami bekerja dan meningkatkan versi Symbolics, kami akan mendukung Symbolics sendirian. Saya pikir mereka telah dihukum cukup teliti karena mereka terjebak dengan kompetisi yang tidak pergi atau akan menghilang. Sementara itu, sudah waktunya untuk mulai membangun komunitas baru untuk menggantikan komunitas yang telah dihapus oleh tindakan mereka dan yang lainnya. Dengan cara ini, selama dua tahun, saya mencegah mereka memusnahkan Lisp Machines Incorporated, dan kedua perusahaan berlanjut. Tapi, saya tidak ingin menghabiskan bertahun-tahun untuk menghukum seseorang, hanya menggagalkan perbuatan jahat. Sekarang tidak apa-apa jika Anda menjalankan satu program pada sistem pembagian waktu - jika satu program macet, itu bukan bencana, itu adalah program Anda sesekali. Tapi itu tidak membuatnya baik untuk menulis sistem operasi, jadi saya menolak ide membuat sistem seperti mesin Lisp. Itulah yang memungkinkan untuk menjalankan program secepat komputer lain akan menjalankan program mereka dan masih mendapatkan manfaat dari pengetikan ketik. Pada awalnya, saya berpikir untuk membuat sistem berbasis Lisp, tetapi saya menyadari bahwa itu bukan ide yang baik secara teknis. Tanpa itu, Anda akan direduksi menjadi sesuatu seperti kompiler Lisp untuk mesin lain.Tidak ada cara untuk keluar dari pernyataan 'sementara', Anda hanya perlu melakukan tangkapan dan lemparan, atau menguji variabel yang menjalankan loop. Kami tidak memiliki ‘caar’ dan ‘cadr’ dan seterusnya; "memeras segala yang mungkin" adalah semangat GNU Emacs, semangat Emacs Lisp, sejak awal. Sebagai contoh, pada saat itu satu-satunya konstruksi pengulangan adalah 'sementara', yang sangat sederhana. Lalu seseorang menunjukkan kepada saya sebuah iklan di mana Sun berusaha mempekerjakan seseorang untuk bekerja di TCL untuk menjadikannya "bahasa ekstensi standar de-facto" dari Dunia. Idenya adalah bahwa kita akan memiliki juru bahasa Skema yang dirancang untuk dihubungkan ke aplikasi dengan cara yang sama seperti TCL dihubungkan ke aplikasi. Dan saya berpikir, "Kita harus menghentikan hal itu terjadi." Jadi kami mulai menjadikan Skema bahasa ekstensibilitas standar untuk GNU. Itu terlihat sedikit mirip Lisp, tetapi secara semantik tidak, dan tidak sebersih itu.Yang berarti bahwa orang yang menyukai bahasa tertentu harus bersaing untuk memilih pengembang aplikasi - dengan mengatakan "Tolong, pengembang aplikasi, letakkan bahasa saya ke dalam aplikasi Anda, bukan bahasanya." Kemudian pengguna tidak mendapatkan pilihan sama sekali - aplikasi mana pun yang mereka gunakan datang dengan satu bahasa dan mereka terjebak. Tetapi ketika Anda memiliki bahasa yang kuat yang dapat mengimplementasikan orang lain dengan menerjemahkannya, maka Anda memberi pengguna pilihan bahasa dan kami tidak harus memiliki perang bahasa lagi. Selama bahasa ekstensibilitas lemah, pengguna harus menggunakan hanya bahasa yang Anda berikan kepada mereka. Saya tidak tahu apakah ini sepenuhnya selesai, tetapi bagi siapa pun yang tertarik dengan proyek ini, silakan menghubungi kami. Kami memiliki seseorang yang bekerja pada musim panas lalu menyelesaikan penerjemah dari Python ke Skema. Yang penting adalah Anda bebas menjalankan program, bebas mempelajari apa yang dikerjakannya, bebas mengubahnya sesuai dengan kebutuhan Anda, bebas mendistribusikan ulang salinan orang lain dan bebas untuk menerbitkan versi yang ditingkatkan dan diperluas. Saya belum berbicara tentang perangkat lunak bebas, tetapi izinkan saya secara singkat memberi tahu Anda sedikit tentang apa artinya itu. Jika Anda menggunakan program yang tidak bebas, Anda telah kehilangan kebebasan penting, jadi jangan pernah melakukan itu. Perangkat lunak bebas tidak merujuk pada harga; itu tidak berarti bahwa Anda mendapatkannya secara gratis.Bagi mereka yang tidak memiliki keberanian moral untuk menolak perangkat lunak tidak bebas, ketika itu berarti ketidaknyamanan praktis, apa yang kami coba lakukan adalah memberikan alternatif gratis sehingga Anda dapat pindah ke kebebasan dengan sedikit kekacauan dan kurang dari pengorbanan dalam hal praktis. Semakin sedikit pengorbanan, semakin baik. Tujuan dari proyek GNU adalah untuk mempermudah orang menolak perangkat lunak yang menginjak-injak kebebasan, mendominasi pengguna, dan tidak bebas dengan menyediakan perangkat lunak gratis untuk menggantinya. Saya ingin meminta Anda untuk menjadi sukarelawan untuk proyek GNU; bantu kami mengembangkan perangkat lunak gratis untuk lebih banyak pekerjaan. Jika Anda mencari perangkat lunak gratis untuk digunakan, lihat di / direktori, yang mendaftar sekitar 1.900 paket sekarang. Buku esai saya, "Perangkat Lunak Bebas dan Masyarakat Gratis", sedang dijual dan dapat dibeli di www.gnu.org. Kami telah melakukan apa yang orang katakan tidak akan pernah bisa kami lakukan; kami memiliki dua sistem operasi perangkat lunak bebas. Jika Anda ingin memesan sesuatu, ada tautan ke sana dari beranda. (source)