Istilah "Lisp" (atau "Lisp-like") adalah payung untuk banyak bahasa yang berbeda, seperti Common Lisp, Scheme, dan Arc. Ada fragmentasi serupa di komunitas bahasa lain, seperti di ML.
Namun, Ruby dan Python sama-sama berhasil menghindari nasib ini, di mana inovasi lebih banyak terjadi pada implementasi (seperti PyPy atau YARV) daripada membuat perubahan pada bahasa itu sendiri.
Apakah komunitas Ruby dan Python melakukan sesuatu yang istimewa untuk mencegah fragmentasi bahasa?
programming-languages
language-design
chrisaycock
sumber
sumber
Jawaban:
Ruby dan Python sama-sama memiliki diktator yang baik hati . Mereka adalah bahasa yang mengakar dalam keprihatinan pragmatis. Itu mungkin faktor yang paling signifikan menghambat fragmentasi. Lisp dan ML, di sisi lain, lebih seperti bahasa "desain oleh komite", dikandung dalam dunia akademis, untuk tujuan teoretis.
Lisp pada awalnya dirancang oleh John McCarthy sebagai notasi matematika praktis untuk program komputer. Dia tidak pernah mengimplementasikannya sebagai bahasa pemrograman aktual; implementasi pertama dikembangkan oleh Steve Russell , tetapi dia bukan diktator yang baik hati. Seiring waktu, banyak implementasi Lisp yang berbeda muncul; Common Lisp adalah upaya untuk menstandarkan mereka.
Lisp lebih dari "keluarga" bahasa. Begitu juga ML, yang mengikuti jalur evolusi yang mirip dengan Lisp.
sumber
Salah satu faktor yang mungkin adalah usia. Lisp dan ML jauh lebih tua dari Python dan Ruby:
Lisp: 1958
ML: 1973
Python: 1991
Ruby: 1995
Lisp dan ML jelas telah melihat perubahan yang jauh lebih besar dalam kemampuan perangkat keras, lebih banyak tren dalam ilmu komputer, dan banyak lagi mahasiswa Ph.D mencari sesuatu untuk dikerjakan.
sumber
Mereka pada dasarnya semua bahasa yang didefinisikan implementasi
Ketika mudah untuk membuat implementasi baru dari suatu bahasa yang sebagian besar kompatibel dengan kode yang ada, kemudian peretas menjadi peretas, mereka melanjutkan dan melakukannya. Semua orang menulis implementasi Lisp di beberapa titik. Kompiler ML hampir wajib untuk mahasiswa pascasarjana dalam desain bahasa - bahasa ini didokumentasikan dengan baik .
Di sisi lain, kami memiliki bahasa ad hoc dan implementasi yang ditentukan. Atau bahasa yang begitu kompleks sehingga merupakan penghalang yang signifikan untuk menghasilkan implementasi alternatif yang layak:
Kelemahan yang tampaknya - bahasa yang terlalu sulit untuk menghasilkan alternatif yang layak untuk, memiliki sisi besar : sumber daya pengembang langka terkonsentrasi pada satu implementasi yang benar.
Sebagai catatan sejarah, beberapa di komunitas Haskell aktif melakukan merger dan konsentrasi upaya dev, mengakui bahwa setiap pemecah-belah komunitas dev akan berarti kita tidak akan berhasil. GHC dipilih dan diperjuangkan.
sumber
cabal
bukan alat yang menyenangkan untuk digunakan dan lebih mudah untuk di break :. Bahkan Yesod mengakuinya: yesodweb.com/blog/2012/04/cabal-meta Python dan Ruby jauh lebih baik dalam hal manajemen paket.Saya akan mengatakan satu faktor adalah platform yang menentukan . Untuk Haskell platformnya adalah standar Haskell dan GHC (saya bayangkan). Untuk Ruby itu adalah Ruby on Rails yang "mendefinisikan" platform pengembangan Ruby. Untuk C itu adalah Unix.
Bandingkan dengan Lisp, di mana tidak ada platform kick-ass asli yang mendefinisikan seperti apa bahasa itu. Jika saya ingat dengan benar, setiap mesin Lisp memiliki sedikit perbedaan tergantung pada model dan pabrikannya. Lisp umum untuk beberapa alasan tidak mendefinisikan. Mungkin karena terlalu banyak kompetisi dan keengganan untuk pindah ke platform lain.
Ini, tentu saja, sepenuhnya spekulasi dari pihak saya. Pikiran itu berasal dari komentar balasan pada jawaban Harvey. Namun, tampaknya platform pendefinisian datang dalam banyak bentuk, tetapi properti yang umum tampaknya adalah yang mendapatkan popularitas.
sumber
Jangan lupa menimbang budaya yang mendorong perkembangan bahasa
Saya juga akan mempertimbangkan fakta bahwa pengembangan python / php secara aktif dilakukan di depan umum. Anda memiliki satu kelompok individu yang menetapkan spesifikasi standar yang tersedia secara bebas untuk siapa saja / semua orang.
Sama seperti W3C lakukan dengan standar HTML / CSS. Anda memiliki sekelompok kecil individu termotivasi yang mengontrol detail yang lebih halus dari apa yang dirancang untuk dicapai oleh bahasa tersebut. Semuanya masuk ke spesifikasi yang jelas sebelum dirilis ke publik.
OTOH, bahasa seperti LISP bercabang secara tertutup oleh profesor atau individu lain yang benar-benar percaya bahwa perspektif mereka tentang 'penggunaan terbaik' dari bahasa itu benar. Mereka mungkin secara simultan benar dan salah pada saat yang sama karena beberapa implementasi hebat dalam hal-hal tertentu; sementara tidak ada yang terbaik dalam segala hal.
Itu tidak selalu merupakan hal yang buruk karena keragaman melahirkan inovasi. Bahasa seperti LISP, dan akan tetap menjadi bahasa yang bagus untuk pembelajaran dan penelitian karena mereka mendorong batas-batas pemahaman.
Tetapi kualitas yang membuat lingkungan bagus untuk inovasi tidak selalu bermanfaat untuk stabilitas; sebaliknya, kualitas yang membuat lingkungan bagus untuk stabilitas tidak selalu bagus untuk kreativitas.
Ketika pengembangan didasarkan pada kolaborasi aktif, kadang-kadang individu terpaksa menyerah untuk kepentingan keseluruhan yang lebih besar. Buruk untuk penelitian / bagus untuk konsistensi.
Faktanya adalah, kita masih hidup di barat-liar pengembangan bahasa pemrograman. Masalah mendesain 'bahasa ideal' begitu hebat sehingga, meski ada upaya monumental, tidak ada yang bisa menyelesaikannya.
Di sektor penelitian / akademisi, masih ada banyak ruang untuk perbaikan dan inovasi. Di sektor komersial, di mana ada pertumbuhan eksponensial dari perangkat lunak yang digunakan dalam aplikasi praktis dan kekuatan pendorongnya adalah kesederhanaan dan konsistensi.
Beberapa bahasa mengkhususkan pada yang pertama, beberapa mengkhususkan pada yang kedua. Mereka yang mencoba untuk mengkhususkan pada keduanya biasanya tidak melakukan dengan sangat baik dan mati.
Dengan keduanya, saya mengacu pada bahasa monolitik seperti VB / C # / Java. Masih terlalu dini untuk mengatakannya tetapi saya ingin melihat seperti apa tampilan C # dan Python dalam 10 tahun. Pada kecepatan saat ini, C # meningkatkan fungsionalitas dan ketidakkonsistenan pada tingkat yang membuatnya terlihat sangat suram. Bahkan dengan dokumentasi yang bagus, terlalu merepotkan untuk mengingat semua detail halus dan keanehan yang termasuk dalam bahasa. Ini bagus untuk satu pengembang tetapi segera setelah Anda memasukkan lebih banyak pengembang dengan gaya yang unik, ketidakkonsistenan dalam basis kode bertambah, kualitas menderita, dan tidak ada yang menang. Saya pikir ada banyak yang harus dipelajari dari kesulitan yang dihadirkan Perl dalam lingkungan produksi.
sumber
Saya tidak berpikir itu benar untuk mengatakan bahwa bahasa-bahasa seperti Python dan Ruby tidak terfragmentasi. Kami sudah mulai melihat beberapa efek fragmentasi. Sebagai contoh, Python 3 tidak sepenuhnya kompatibel dengan Python 2, sehingga kedua versi perlu dipertahankan dan banyak kode yang ada hanya bekerja dengan Python 2. Ada juga beberapa spin-off Python, termasuk PyPy.
Faktor lain adalah usia bahasa. Yang paling banyak mengalami fragmentasi adalah bahasa-bahasa yang lebih tua dan karenanya tunduk pada tekanan evolusi dan revisi. Lisp diciptakan beberapa dekade yang lalu, jadi ada cukup waktu untuk mengambil beberapa idenya dan menggabungkannya ke dalam bahasa baru. C adalah contoh lain dari bahasa yang terfragmentasi. Sementara C hanya memiliki satu revisi besar untuk bahasa itu sendiri (K&R ke ANSI), ada banyak spin-off termasuk C ++, Not Quite C, dan semua yang lain yang menggunakan sintaksis mirip-C.
Ruby itu sendiri adalah "fragmentasi" (jika Anda mau) dari bahasa sebelumnya. Karena menggabungkan ide-ide dari C, Smalltalk, dan Perl (antara lain), saat ini bahasa yang melakukan fragmentasi. Saya tidak melihat mengapa kita mungkin tidak melihat lilitan Ruby selanjutnya dengan bahasa lain di masa depan.
sumber
Lisp terfragmentasi karena model yang begitu kuat, bahasa yang paling menakjubkan yang pernah dikandung. Sebagian besar bahasa saat ini meminjam hal-hal yang pertama kali diterapkan di Lisp, sehingga Anda dapat mengatakan bahwa setiap bahasa adalah bagian dari fragmentasi khusus ini. Smalltalk misalnya sangat terinspirasi oleh Lisp, dan Ruby sangat terinspirasi oleh Smalltalk. JavaScript adalah Lisp dalam penyamaran Java, dan sebagainya .. Semuanya terhubung, dan setiap penemu bahasa memilih karya favoritnya dari bahasa lain.
Faktor lain adalah bahwa Lisp mungkin adalah konsep pemrograman yang paling mudah untuk diterapkan - itulah sebabnya mengapa hal itu dilakukan berulang kali.
sumber
Bahasa-bahasa seperti cebol terlalu mendasar dan teoretis untuk diubah secara dramatis. Perubahan tata bahasa (saya tidak bermaksud hanya mengubah nama-nama perintah) tidak akan cocok dengan teori pemrograman fungsional di belakangnya.
Tetapi fakta bahwa ada bahasa seperti lisp menunjukkan bahwa "perubahan" sudah dibuat menjadi lisp. Dengan kata lain, ada bahasa yang dibuat oleh orang-orang yang terinspirasi oleh lisp atau teorinya di baliknya dan membuat bahasa baru yang mirip dengan cara yang sama.
Ada juga banyak bahasa yang terinspirasi oleh Python. Misalnya Julia, CoffeeScript, dll. Yang akan membentuk keluarga mereka sendiri dari bahasa berorientasi objek spasi-putih.
Saya pikir, dasar-dasar dasar bahasa seperti Python tidak akan pernah benar-benar berubah. Python berorientasi objek dan karena itu memiliki kesamaan dengan C ++ dan Java tetapi dinamis dan karenanya juga mirip dengan banyak bahasa skrip.
Nah siapa sebenarnya yang peduli dengan bahasa? Yang penting adalah tujuannya: Bahasa Perancis mirip dengan bahasa Latin tetapi gadis-gadis yang mengerti bahasa Prancis jauh lebih panas;)
sumber