Apakah ada bahasa pemrograman yang mengikuti pendekatan pengembangan minimalis?


26

Saya menemukan bahwa ketika bahasa dianggap sama dengan perangkat lunak komersial, selalu ada kebutuhan untuk menambahkan fitur baru untuk membenarkan rilis baru.

Bisa ada atau ada bahasa di mana versi 1.0 adalah versi terakhir? Tentu saja perbaikan bug dikecualikan dari ini, tetapi set fitur selalu tetap sama?

Dengan cara ini setiap fitur dalam bahasa cocok dengan baik dan tidak tampak seperti dibaut setelah fakta dengan fitur usang masih ada karena kompatibilitas ke belakang.

Saya berasumsi beberapa bahasa akademik seperti ini? Tapi apakah ada komersial bahasa yang sukses yang mengikuti ide ini? Pustaka yang menyertainya juga bebas untuk mendapatkan fitur-fitur baru juga, tetapi bahasanya selalu konstan.

Salah satu contoh yang bisa saya berikan adalah, salah satu bahasa favorit saya C #, yang sering saya gunakan, semakin banyak fitur yang ditambahkan setiap rilis. Untuk mengambil keuntungan dari ini, saya harus menyerahkan tugas yang sebenarnya di tangan, dan menghabiskan banyak waktu untuk mempelajari ini alih-alih mampu mengambil konsep-konsep sepele dan menggabungkannya sendiri untuk menyelesaikan masalah yang lebih kompleks dengan mudah.

Jadi saya kira saya sedang mencari pendekatan minimalis di mana semuanya konsisten, masuk akal, dan ortogonal mungkin.


7
Sebuah bidang pekerjaan dari kebanyakan pengembang adalah untuk memecahkan masalah dengan cara yang efektif. Efektivitas membutuhkan pembelajaran hal-hal baru, secara terus-menerus. Fitur bahasa baru, kerangka kerja baru, alat-alat baru yang dikembangkan untuk menjadi lebih efektif. Dengan mempelajarinya, Anda sebenarnya fokus pada pekerjaan Anda.
Arseni Mourzenko

4
Nah tidak semua orang yang program adalah tentu programmer penuh waktu. Ini hanyalah alat untuk banyak profesi lain.
Joan Venge

4
Kemudian, sekali lagi, tidak ada yang memaksa Anda untuk belajar apa pun. Jika C # 1.0 menyelesaikan kebutuhan Anda, jangan buang waktu mempelajari sesuatu yang tidak Anda butuhkan.
Arseni Mourzenko

11
Saya pikir pertanyaannya adalah sah: mengapa kita harus menerapkan KISS dan prinsip-prinsip YAGNI untuk artefak perangkat lunak namun tidak bahasa pemrograman? Ketika suatu bahasa memiliki fitur inti yang cukup, pengembangan lebih lanjut adalah (IMHO) terutama karena pemasaran (persaingan dengan bahasa lain yang memaksa perusahaan memasukkan bahasa dengan fitur untuk mempertahankan pelanggan mereka).
Giorgio

2
@MainMa: "Efektivitas membutuhkan mempelajari hal-hal baru, terus-menerus.": Bahasa pemrograman yang rumit, dikemas dengan fitur yang terlalu banyak dapat menurunkan efektivitas daripada meningkatkannya. Misalnya dalam tim, hal itu dapat menyebabkan pengembang yang berbeda menggunakan himpunan bagian bahasa yang berbeda, membuat ulasan kode, memperbaiki bug, dan pemeliharaan kurang efisien.
Giorgio

Jawaban:


32

Gangguan, Smalltalk. Kebetulan, itu juga bahasa terbaik di seluruh kelompok.

Baik Lisp dan Smalltalk adalah bahasa yang dibangun berdasarkan metafora pemersatu yang kuat. Metafora Lisp adalah "semuanya adalah daftar; daftar ini mewakili data dan kode (sebagai fungsi)". Metafora Smalltalk adalah "segala sesuatu adalah objek; satu-satunya cara untuk memanggil perilaku adalah dengan mengirimkan pesan ke objek". Metafora ini memungkinkan bahasa menjadi stabil, minimal dan kuat. Sisanya ada di perpustakaan.

Hal-hal yang disebut "struktur kontrol" dalam semua bahasa non-minimal (saya ingin menulis "kembung"), adalah bagian dari perpustakaan di sini (sebagai contoh: condfungsi di lisp; ifTrue:/ ifFalse:keluarga pesan di Smalltalk keduanya menerapkan persyaratan, di mana bahasa lain memiliki ifkata kunci).

Dapat dilihat bahwa Lisp / Smalltalk hampir merupakan perwujudan minimal dari paradigma mereka dan tidak lebih dari itu (Lisp: pemrograman fungsional; Smalltalk: pemrograman berorientasi objek).


4
Implementasi Lisp yang baik dapat bersaing dengan C, implementasi Smalltalk yang baik dapat bersaing dengan C ++. Heck, Oracle HotSopt JVM, VM tercepat di planet ini, adalah Smalltalk VM, bahkan tidak menggunakan informasi tipe statis untuk optimalisasi.
Jörg W Mittag


9
Jawaban ini terlalu kecil untuk menjadi konstruktif. Tidak memiliki detail atau bukti pendukung.
Jimmy Hoffa

2
-1 Lisp? LISP ? Serius? Setelah Perang LISP tahun 1970-an, upaya yang diulang mencoba Persatuan LISP, dan akhirnya Common Lisp? Tidak, bahkan LISP tidak membuatnya "selesai" pada 1.0.
Ross Patterson

1
Saya pikir Anda menunjukkan ide yang sangat penting: bahwa bahasa harus dibangun di sekitar satu (atau beberapa) metafora yang kuat dan menyatukan, yaitu bahasa pemrograman harus menawarkan Anda cara untuk mengatur pikiran Anda. Saya pikir kompleksitas beberapa bahasa sebagian karena kurangnya metafora seperti itu: bahasa-bahasa ini terus berkembang dengan memasukkan fitur-fitur baru karena mereka tidak memiliki pandangan pemersatu yang mendasarinya.
Giorgio

6

TeX , sistem penyusunan huruf, telah sangat stabil sejak versi 3.

Sejak versi 3, TeX telah menggunakan sistem penomoran versi istimewa, di mana pembaruan telah ditunjukkan dengan menambahkan digit tambahan di akhir desimal, sehingga nomor versi mendekati asimtotik mendekati π. Ini adalah refleksi dari fakta bahwa TeX sekarang sangat stabil, dan hanya pembaruan kecil yang diantisipasi. Versi saat ini dari TeX adalah 3.1415926; itu terakhir diperbarui pada Maret 2008. Desain itu dibekukan setelah versi 3.0, dan tidak ada fitur baru atau perubahan mendasar akan ditambahkan, sehingga semua versi yang lebih baru akan berisi hanya perbaikan bug. Meskipun Donald Knuth sendiri telah menyarankan beberapa area di mana TeX dapat ditingkatkan, ia menunjukkan bahwa ia sangat percaya bahwa memiliki sistem yang tidak berubah yang akan menghasilkan output yang sama sekarang dan di masa depan lebih penting daripada memperkenalkan fitur baru. Untuk alasan ini, ia telah menyatakan bahwa "

Saya tidak akan mengklaim bahwa itu memenuhi Anda "Jadi saya kira saya mencari pendekatan minimalis di mana semuanya konsisten, masuk akal, dan sebagai orthogonal mungkin." pernyataan, tetapi memenuhi sebagian besar kriteria Anda yang lain.


6

C dan Fortran adalah bahasa yang muncul dalam pikiran. Mereka sangat stabil dan sintaksisnya mudah terkandung dalam pikiran seseorang. Selain menulis kode buruk sendiri, ada sangat sedikit kejutan ketika menggunakan bahasa ini. Tetapi saya tidak akan menganggapnya sebagai bahasa yang bagus untuk pengembangan aplikasi yang cepat.

Saya lebih suka kemajuan bahasa yang cepat dengan fitur-fitur yang sekali saya habiskan sedikit waktu untuk itu, membuat pekerjaan saya jauh lebih mudah dan kodenya kurang rumit dengan tetap menjaga ekspresif.


1
Saya setuju dengan desain minimalis C. Bahkan jika bahasa itu diperbarui selama bertahun-tahun, desain dan programming model dasar dari bahasa tersebut masih dikenali (bahasa lain menjalani revolusi setiap 5 sampai 10 tahun). Tentu saja, C bukan bahasa tujuan umum seperti dulu, karena telah digantikan oleh bahasa lain dalam domain aplikasi tertentu (aplikasi desktop, aplikasi web, dan sebagainya).
Giorgio

@Iorgio: Tidak semua. Yang minimal (seperti yang saya sebutkan) tidak. Tidak ada perubahan dalam sintaksis Smalltalk sejak awal kecuali satu, dibawa oleh Squeak: array dikomputasi dengan kurung kurawal. Perpustakaan juga sangat stabil pada intinya ( Behaviordan Collectionhierarki). Sepertinya saya bahwa C jauh lebih stabil dengan semua C89, C99 dan yang lainnya.
herby

1
@herby: Anda mungkin benar bahwa bahasa lain seperti Smalltalk lebih stabil daripada C. Namun, model pemrograman dasar C sama dengan 20 tahun yang lalu. Bahasa lain telah mengalami perubahan besar. Jadi, sekali lagi, saya tidak mengklaim bahwa C adalah yang paling bahasa stabil sekitar, namun, IMO jauh lebih stabil daripada banyak bahasa utama lainnya.
Giorgio

6

Yang lain sudah mengatakan Lisp jadi saya harus membesarkan Forth . Sangat mudah diimplementasikan dan aturan bahasa mudah diikuti.

Ini adalah bahasa berbasis tumpukan dengan kamus "kata-kata." Anda dapat dengan mudah memperluas bahasa menggunakan beberapa fitur bawaan.

Contoh grafis kura-kura yang SANGAT singkat:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Kemudian menjalankannya dengan : squiral -50 50 g 20 0 do 100 f 21 t loop ;memberi Anda:

spiral

Penghargaan untuk blog karyawan Microsoft ini .


1
Bagaimana ini bisa diputuskan lagi? Keempat mungkin menjadi kandidat yang baik, tetapi contoh yang diberikan tidak jauh lebih baik daripada derau jalur yang dapat dieksekusi; contoh utama mengapa obsesi PLT terhadap kesederhanaan bertentangan dengan apa yang sebenarnya dibutuhkan oleh para profesional.
Telastyn

4
@ Telastyn Itu bukan pertanyaannya.
Austin Henley

4

Meskipun Lisp disebutkan, bahasa paling minimalis yang saya tahu adalah skema . Saya mengalami kesulitan memahaminya dalam kursus universitas di mana saya harus. Tapi itu mengubah cara berpikir saya tentang pemrograman, dan itu sangat minim. Minimal seperti seluruh sintaksnya adalah Tanda kurung ()dan spasi.

Satu-satunya perubahan dalam bahasa adalah keputusan untuk mengubah primitif seperti +, define(dan beberapa yang lain) menjadi built-in. Berarti mereka tersedia saat peluncuran, tetapi dapat didefinisikan ulang saat run-time.


2

Tcl, yang awalnya didesain minimalis

Dari sana tentang halaman http://www.tcl.tk/about/features.html , salah satu fiturnya adalah sangat mudah dipelajari dan di mana programmer biasa atau bahkan bukan programmer dapat menggunakannya.


3
Ini kedengarannya akurat bagi saya, tetapi jawaban satu baris tanpa informasi atau detail pendukung tidak terlalu berkualitas untuk membantu siapa pun. Harap tambahkan beberapa detail yang bagus (dan bukan hanya tautan tanpa ringkasannya) dan Anda akan mendapatkan suara dari saya
Jimmy Hoffa

ok, akan lakukan karena pertanyaan ditutup tidak tahu berapa banyak usaha nilainya
Egryan

1
Dengan keberuntungan itu akan dibuka kembali dari suara. Itu pertanyaan yang bagus. Saya mungkin memposting di Meta untuk mencoba membuka kembali jika tidak segera dibuka kembali oleh komunitas.
Jimmy Hoffa

Saya setuju dan saya berencana untuk menambahkan lebih banyak ke posting begitu saya selesai bekerja, saya tidak memiliki keberuntungan cepat dengan menemukan tautan yang relevan
Egryan

Cari di Google untuk "Studi Kasus Bahasa TCL", "Tcl: Bahasa Perintah yang dapat disematkan" dan tcl.tk/about/history.html - mereka memberikan beberapa poin kunci. Namun, saya tidak yakin mereka mendukung keinginan OP - tampaknya TCL telah diperpanjang dari versi aslinya 1.0 (lihat wiki.tcl.tk/1721 )

2

Ada beberapa bahasa yang relatif tidak berubah sejak awal mereka di luar bahasa esoterik yang tidak mungkin seperti yang diinginkan (saya akan benci untuk mencoba menulis sesuatu yang bermakna di Befunge (meskipun juga telah dimodifikasi sejak aslinya 1.0) melepaskan)).

Bahasa-bahasa yang paling mungkin memenuhi keinginan untuk tidak harus mempelajari sesuatu yang baru adalah bahasa-bahasa yang berspesialisasi dalam 'lem' di antara program-program lain. Bahasa seperti jcl , bash, dan sejenisnya. Bahasa scripting sederhana juga dapat jatuh ke dalam ini - awk menjadi salah satu pemimpin.

Begitu seseorang meninggalkan dunia ini, pengembangan terjadi. Baik bahasa atau kerangka kerjanya. Dalam beberapa situasi sulit untuk membuat kode untuk bahasa tanpa mendapatkan beberapa kerangka kerja yang cepat pulih.

Banyak bahasa memiliki tingkat kompatibilitas ke belakang. Orang masih dapat menulis Java 1.4 hari ini, meskipun mungkin tidak disarankan - kerangka kerja orang menulis untuk itu berubah lebih cepat daripada bahasa. Kita masih dapat menemukan kompiler f77 dan f90 di luar sana untuk spesifikasi bahasa yang tidak berubah dalam 20 atau 40 tahun. C, Objective C, C ++ masih dapat dikodekan dengan spesifikasi bahasa yang lebih lama - seseorang tidak perlu terus memperbarui kode seseorang karena spesifikasi baru dirilis atau kerangka kerja baru di luar sana.

Beberapa bahasa memiliki sejarah yang agak lama tidak berubah karena bahasa itu sendiri cukup kuat untuk melakukan apa pun yang diinginkan. Lisp adalah kandidat utama di bidang ini. Keempat juga jatuh ke dunia "itu tidak banyak berubah".

Pergi ke bahasa skrip yang lebih tradisional melihat TCL, Perl dan Python. Hindari hal-hal yang saat ini berada di ranah 'fad' yang mengalami ledakan popularitas karena alasan tertentu (ruby dan javascript, saya melihat Anda). TCL telah berubah selama bertahun-tahun , meskipun salah satu tujuannya adalah untuk mencoba mempertahankan konsistensi desain. Modern Perl dan Python keduanya memiliki beberapa konsistensi desain, meskipun diakui fitur-fitur baru dapat terasa melesat (meskipun orang tidak perlu menggunakannya).


2

Saya pikir Python adalah kandidat yang masuk akal untuk bahasa dengan minimalis sebagai salah satu tujuan desainnya. Ini didasarkan di sekitar sejumlah kecil konsep inti, dan versi 3 berusaha, antara lain, sedikit menyederhanakan bahasa dengan menghapus beberapa fitur.

(Memang, itu tidak sama dengan set fitur yang tetap sama dari versi 1, tapi saya pikir itu cara yang cukup arbitrer untuk mengevaluasi bahasa, mengingat bahwa penulis bahasa dapat menyebutnya versi 1 kapan pun mereka mau.)


Tanggal jawaban Desember 2012 memberi Anda izin gratis, karena sejak itu kami memiliki keganjilan yang dikenal sebagai Python 3, yang menyaingi C ++ dalam ingin menambahkan tumpukan sampah cruft, sementara sebenarnya menghilangkan kesederhanaan. Ini sekarang salah satu bahasa add-infest yang paling asing dalam komputasi.
Thomas Browne

-1

Saya pikir pendekatan desain "minimalis" akan dicontohkan oleh Tcl. Sebagai contoh, Anda dapat menggunakan perintah {catch} dengan nilai {return -code n} untuk mengimplementasikan struktur kontrol yang dapat Anda bayangkan, Perl harus menunggu satu dekade untuk (secara resmi) mendapatkan {switch} - (bukan berarti Perl pernah membutuhkannya). Anda juga akan melihat bahwa Dodekalogue http://wiki.tcl.tk/10259 mencakup tata bahasa Tcl sepenuhnya - sisanya, paradigma pemrograman apa pun yang ingin Anda kerjakan, dapat diekspresikan dalam tata bahasa ini.


ini hanya mengulangi poin yang dibuat dan dijelaskan dalam jawaban yang diposting dua tahun lalu
agas

Mengacu pada posting asli saya kira saya hanya bisa mengatakan orthogonality = sejarah (keluarga bahasa C) dan asimilasi lintas-bahasa baru-baru ini; Saya telah melihat di OS menggunakan pendekatan di antara semua bahasa untuk kerangka kerja MVC umum, coroutine, & c. Di luar tren itu, saya bisa mencatat penambahan penutupan yang luar biasa untuk C11 dan Java lambda yang akan datang (yang keduanya mencerminkan pengembangan di OS "scripting" langs).
user132043
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.