Ada sejumlah besar bahasa pemrograman. Beberapa dari mereka tumbuh dan menjadi sangat populer. Orang-orang menggunakan bahasa seperti itu semakin sering. Pendiri bahasa tersebut (atau organisasi / komunitas pendiri) dapat mencoba menerapkan perubahan untuk menjadikan bahasa lebih baik. Tetapi kadang-kadang sulit untuk membuat beberapa perubahan karena kompatibilitas ke belakang dan hal-hal buruk seperti itu sudah ada dalam bahasa selama bertahun-tahun, dan digunakan oleh banyak pengguna.
Apakah ada prinsip atau langkah arsitektur, selama fase desain bahasa, yang dapat membantu membuatnya lebih stabil sehingga perancang bahasa tidak akan takut untuk merusak kompatibilitas ke belakang?
programming-languages
backward-compatibility
Viacheslav Kondratiuk
sumber
sumber
Jawaban:
Stabilitas bahasa bukanlah keputusan teknis. Ini adalah kontrak antara penulis bahasa dan pengguna.
Penulis mengiklankan versi yang diberikan kurang lebih stabil. Semakin kurang stabil suatu bahasa, semakin banyak perubahan yang dapat penulis lakukan. Setiap pengguna yang tertarik dengan bahasa tersebut dapat memutuskan apakah ia ingin menginvestasikan waktu di dalamnya untuk mempelajari fitur baru atau mengembangkan aplikasi yang mungkin rusak oleh pembaruan bulan depan.
Menggunakan bahasa yang tidak stabil dapat menarik karena Anda tertarik dengan konsep baru, atau Anda ingin membantu dengan memberikan umpan balik. Jika Anda seorang bisnis, Anda mungkin lebih suka menunggu teknologi menjadi lebih stabil sebelum menginvestasikan waktu Anda di dalamnya. Anda lebih peduli tentang hal-hal seperti waktu ke pasar, dan pengalaman pengguna.
Jadi ini adalah masalah komunikasi & kepercayaan. Lihatlah perkembangan bahasa karat. Mereka sangat jelas tentang apa yang mereka ubah dan apa yang mereka pertahankan. Ketika mereka ingin menunda keputusan tentang fitur yang diberikan, mereka menggunakan apa yang mereka sebut gerbang fitur. Di sisi lain, tim sudut menghadapi banyak kemarahan atas pengumuman 2.0 mereka karena perubahan lebih besar dari yang diharapkan.
Bahkan penulis perpustakaan harus berkomunikasi tentang stabilitas apis mereka. Hampir semua teknologi yang digunakan oleh orang lain harus mencapai keseimbangan antara stabilitas dan kesempurnaan. Pembuat mobil tidak dapat mengubah posisi pedal, dan perancang laptop tidak akan menemukan tata letak keyboard baru karena alasan yang sama: Anda tidak membantu pengguna Anda jika Anda tidak dapat membuat keputusan tentang cara mereka akan menggunakan produk Anda.
sumber
Pertimbangkan fasilitas untuk membuat sintaksis dapat diperluas, misalnya makro. Makro tidak secara otomatis merupakan hal yang baik dan dapat menjadi terlalu kuat. Beberapa bahasa memiliki sintaks yang sangat fleksibel sejak awal yang mengurangi kebutuhan makro. Beberapa skenario untuk dipertimbangkan:
|>
tanpa meninggalkan bahasa? Bisakah saya memilih prioritas dan asosiasi untuk operator ini?Pertimbangkan fasilitas untuk menjaga semantik tetap dapat diperluas. Kebutuhan umum adalah:
use v5.20
, yang memungkinkan semua fitur Perl v5.20 yang tidak kompatibel ke belakang. Anda juga dapat memuat satu fitur yang disukai secara eksplisituse feature 'state'
. Mirip: Pythonfrom __future__ import division
.class
memperkenalkan kelas tidak menyiratkan bahwa saya tidak akan dapat memiliki variabel lokal bernamaclass
. Dalam praktiknya, ini menghasilkan kata kunci yang memperkenalkan deklarasi variabel atau metode, berlawanan dengan tradisi C-like menggunakan nama jenis untuk memperkenalkan deklarasi. Alternatif lain adalah menggunakan sigils untuk Anda$variables
, seperti di Perl dan PHP.Sebagian dari jawaban ini dipengaruhi oleh ucapan Guy Steele “Growing a Language” (1998) ( pdf ) ( youtube ).
sumber
Saya pikir langkah yang cukup penting adalah mempromosikan manajer paket yang juga dapat mengelola versi bahasa itu sendiri.
Misalnya, saya menggunakan SBT untuk Scala atau Leiningen untuk Clojure. Keduanya izinkan saya menyatakan versi bahasa yang ingin saya gunakan, per proyek . Jadi, cukup mudah untuk memulai proyek ramah lingkungan dalam versi bahasa terbaru, sambil meningkatkan proyek yang ada dengan langkah yang lebih nyaman, jika pernah.
Tentu saja, tergantung pada bahasanya, ini mungkin masih meninggalkan Anda dengan kebutuhan untuk menunggu pustaka yang relevan untuk diangkut ke versi yang Anda butuhkan (ini terjadi, misalnya, di Scala), tetapi tetap membuat segalanya menjadi lebih mudah.
sumber