Saya sering melihat orang-orang berebut bahwa bahasa favorit mereka lebih "kuat" daripada yang lain. Ketika datang untuk menggambarkan bahasa pemrograman, saya bisa mengerti apa bahasa berorientasi objek atau apa bahasa yang dinamis, tapi saya masih tidak tahu apa sebenarnya bahasa "kuat" itu. Apa yang kamu pikirkan?
programming-languages
tukang
sumber
sumber
Jawaban:
Kita tidak dapat mendefinisikan apa bahasa "kuat" tanpa terlebih dahulu mendefinisikan kata "kuat."
The literal definisi listrik akan "potensi", dan saya pikir kita semua bisa sepakat bahwa sebagian besar kompiler - dan bahkan banyak penafsir yang tidak Turing-lengkap - melakukan pekerjaan yang sama baik untuk mendapatkan prosesor untuk mengeksekusi instruksi mereka . Jadi sejauh definisi literal, jawaban untuk pertanyaan itu adalah "hampir semua bahasa."
Secara praktis, kita benar-benar harus berhenti di sana; mendefinisikan "bahasa yang kuat" sama seperti mendefinisikan "orang yang baik" atau "produk yang berkualitas." Sama sekali tidak ada definisi obyektif dari kata-kata ini yang dapat Anda setujui oleh semua orang, atau bahkan mayoritas pakar, dan sebagian besar definisi berakhir dengan mengajukan pertanyaan . Bergantung pada siapa Anda berbicara, kekuatan bisa berupa hal-hal berikut:
Apakah semua orang melihat apa yang terjadi di sini? Hampir setiap fitur poin-peluru dapat diartikan sebagai tanda "kekuatan", dan begitu juga sebaliknya!
Seseorang, di suatu tempat, jelas berpikir bahwa variabel variabel adalah ide yang luar biasa yang akan membuat bahasa tersebut sangat kuat . Saya tidak akan menghakimi; Saya bukan orang PHP.
Saya mengusulkan bahwa alih-alih semua omong kosong perang suci ini, kita semua menggunakan Definisi Sungguh Sederhana ini:
Bahasa yang paling kuat adalah bahasa yang memungkinkan Anda mengirimkan produk dengan kualitas terbaik dengan biaya terendah dalam waktu sesingkat mungkin.
Kabur? Anda betcha. Itu sebabnya siapa pun yang ingin memanggilnya seorang profesional harus memahami konsep pemrograman dan domain proyek. Itulah satu-satunya cara Anda dapat memutuskan apa yang "kuat" untuk Anda.
Jika tidak, Anda mungkin hanya membawa pisau yang sangat besar untuk pertarungan senjata.
sumber
Saya mungkin bias karena saya seorang programmer sistem. Saya akan berpikir bahasa pemrograman yang digunakan untuk semua pemrograman kernel, sistem, server dan aplikasi, atau mendukung beberapa paradigma pemrograman, atau keduanya dapat disebut "kuat".
C, C ++, D sangat kuat, tapi jelas ini hanya pendapat saya yang sederhana.
sumber
Ada beberapa definisi kekuatan di luar kelengkapan Turing. Markus mengutip apa yang saya cenderung anggap sebagai "definisi Paul Graham." Itu definisi yang cukup bagus, dengan satu kelemahan serius: itu salah. Secara teori ini adalah definisi yang sangat baik tentang kekuatan bahasa, tetapi Anda tahu apa yang mereka katakan tentang perbedaan antara teori dan praktik ...
Jika setiap orang mampu menulis kode yang sempurna, tidak hanya sempurna bebas bug tetapi juga sempurna di masa depan, secara konsisten, maka definisi Paul Graham akan benar. Tapi jelas bukan itu masalahnya. Di dunia nyata, sebagian besar waktu dan upaya yang digunakan untuk rekayasa perangkat lunak tidak diambil oleh penciptaan awal produk, tetapi dengan pemeliharaan setelahnya. Bergantung pada statistik yang Anda dengarkan, (dan mungkin sedikit berbeda dari proyek ke proyek), pemeliharaan dapat mencapai 60% hingga 90% dari total upaya yang dilakukan dalam suatu program.
Pemeliharaan sering dilakukan oleh orang-orang selain orang yang menulis kode pada awalnya, dan seringkali berbulan-bulan atau bahkan bertahun-tahun setelah penulisan awal kode, yang berarti bahwa bahkan bagi pembuat kode asli juga dapat menjadi "kode orang lain" dengan itu titik. Jika Anda ingin menjadi produktif selama pemeliharaan, Anda harus dapat dengan cepat memastikan maksud asli kode dengan membacanya.
Oleh karena itu, bahasa yang lebih kuat adalah bahasa yang membuat kode lebih mudah dibaca dengan cepat, bukan bahasa yang membuat kode lebih mudah untuk ditulis dengan cepat. Cenderung ada banyak tumpang tindih di antara keduanya, tetapi konsep-konsep tersebut sering juga saling bertentangan, karena sintaks singkat sering kali menghilangkan detail yang dapat disimpulkan oleh kompiler / juru bahasa dengan jauh lebih mudah daripada programmer pemeliharaan.
EDIT: Ada poin penting lain dalam menggambarkan kekuatan bahasa: rentang konsep yang bisa Anda ungkapkan, dan seberapa mudah Anda bisa mencapai kedua ujungnya. Paul Graham suka mengevaluasi yang ini tentang seberapa tinggi tingkat abstraksi yang bisa Anda capai, tetapi itu hanya setengahnya. Bahasa apa pun yang memaksakan batas abstraksi yang lebih rendah, di mana Anda tidak bisa pergi ketika diperlukan, akan lumpuh karena detail yang sedang disarikan ada karena suatu alasan. Ini adalah perbedaan antara bahasa mainan yang mudah dibaca seperti COBOL dan bahasa kuat yang mudah dibaca: COBOL tidak memiliki petunjuk dan tidak memiliki akses ke perakitan inline, di mana Anda dapat mengekspresikan perhitungan apa pun, bahkan yang tidak cocok dengan COBOL.
COBOL juga tidak pandai memukul spektrum abstraksi kelas atas. Menurut Wikipedia ia memiliki "tidak ada tipe yang ditentukan pengguna, dan tidak ada fungsi yang ditentukan pengguna," yang membuatnya sangat sulit untuk membuat algoritma dan struktur data.
sumber
Ini telah diperdebatkan berulang kali secara panjang lebar (misalnya, di comp.lang.lisp, beberapa kali). Saya tidak berpikir ada yang datang dengan jawaban yang "benar" tetapi banyak orang yang datang dengan jawaban yang menurut saya salah.
Dalam jawaban yang saya lihat di sini, izinkan saya memilih jawaban Mason Wheeler. Di satu sisi, masalah dia selimut yang penting - tetapi di sisi lain, aku tak bisa membayangkan memanggil mereka sama sekali terkait dengan "kekuasaan." Agak seperti yang dikatakannya bahwa mini-van Honda-nya lebih kuat daripada dragster berbahan bakar tinggi karena lebih aman, lebih tenang, memiliki penanganan yang lebih baik, lebih banyak ruang penumpang, dan perjalanan yang jauh lebih nyaman. Semua ini benar, dan itu semua penting. Faktor-faktor tersebut (di antara banyak lainnya) membuat minivan jauh lebih praktis dan masuk akal bagi kebanyakan orang - tetapi mereka tidak mengubah fakta bahwa mesin minivan hanya memproduksi sekitar 250 HP sedangkan dragster memproduksi sekitar 8000 HP.
Masalahnya, tentu saja, adalah bahwa dengan kendaraan ada definisi yang jelas tentang apa yang merupakan "kekuatan" dan apa yang tidak. Dengan bahasa pemrograman, menurut saya diskusi akhirnya setara dengan penanganan penanganan, kenyamanan, kecepatan, kapasitas kargo, dan jarak jelajah karena semuanya merupakan bagian dari "kekuatan". Hasilnya cenderung berupa benang yang berjalan tanpa henti, menghasilkan lebih banyak panas daripada cahaya. Sebagian besar pertanyaan yang muncul pada dasarnya turun ke tingkat kepentingan Anda lampirkan ke fitur yang sama sekali tidak terkait dan ortogonal - misalnya, adalah kemampuan untuk memprogram MMU dalam bahasa assembly lebih atau kurang "kuat" daripada kemampuan untuk membuat fungsi tingkat yang lebih tinggi di Haskell? Setidaknya IMO, tidak ada cara yang berarti untuk membandingkan keduanya, dan tidak ada jawaban yang bermakna yang "
Dengan demikian, sebanyak yang saya benci, saya harus mengatakan bahwa dalam kasus ini, satu-satunya jawaban yang bermakna pada dasarnya adalah jawaban yang relatif - bahasa yang kuat adalah yang Anda temukan membantu Anda mencapai apa yang Anda inginkan. Perbedaan dalam tujuan orang membuat pengukuran kekuasaan "absolut" paling tidak berarti.
sumber
Keseimbangan singkat dan fleksibilitas yang tepat.
Pertanyaan bagus Mengingat bahwa banyak bahasa "Turing selesai", kita dapat menempatkan mereka semua dengan alasan yang sama sehubungan dengan apa yang secara teoritis mereka mampu. Tetapi kami tidak melakukan itu karena bahasa jelas berbeda satu sama lain. Dan apa bedanya?
Perbedaannya adalah kemampuan untuk mengatakan banyak hal berbeda dengan sangat sedikit . Jika kita dapat melompat ke ekstrem, saya dapat membuat bahasa yang merupakan bahasa terbaik untuk secara otomatis menginisialisasi sistem manajemen konten menggunakan hanya satu karakter, 'c'. Tapi apa gunanya itu? Tentu, itu kuat dalam arti sangat singkat, tetapi tidak fleksibel. Apa yang Anda inginkan adalah bahasa yang memungkinkan Anda mengatakan banyak hal rumit tanpa terlalu bertele-tele. Tanpa menjadi seperti perakitan, mampu melakukan segalanya di bawah matahari, sangat fleksibel tetapi sangat bertele-tele.
Bahasa yang kuat adalah bahasa yang memungkinkan Anda untuk mengatakan banyak hal berbeda dengan jumlah panjang sesedikit mungkin.
sumber
Setelah Anda menekan Turing lengkap (dan mudah bagi bahasa untuk melakukan ini), "kekuatan" tidak berarti banyak, dalam arti bahwa apa pun yang dapat Anda katakan dalam satu bahasa lengkap Turing dapat Anda katakan dalam bahasa lain. Jawaban Mark Canlas menjawabnya : singkat dan fleksibel membuat perbedaan.
Karena itu, makalah Matthias Felleisen Pada Kekuatan Ekspresif Bahasa Pemrograman membuat bacaan yang menarik. Di dalamnya ia berusaha memformalisasikan gagasan ekspresif dalam bahasa.
sumber
Tampaknya ada banyak ketidaksepakatan tentang apa yang merupakan kekuatan linguistik. Apakah itu kesederhanaan, keterbacaan, kemampuan beradaptasi, atau sekadar kelengkapan Turing? Saya pikir semua faktor ini berperan, jadi mungkin cara terbaik untuk melihatnya adalah dalam hal poin stat. Ya, saya sedang berbicara RPG pena-dan-kertas, di sini.
Idenya adalah bahwa setiap bahasa memiliki (kira-kira) jumlah "titik" yang sama, yang dapat didistribusikan secara sewenang-wenang di sejumlah kategori. Untuk keperluan diskusi, katakan satu-satunya faktor adalah singkatnya, keterbacaan, dan fleksibilitas. Suatu bahasa mungkin sangat singkat dan fleksibel, tetapi akibatnya sangat sulit dibaca; atau sangat terbaca dan fleksibel, tetapi sangat bertele-tele.
(Dapat diperdebatkan, jumlah poin yang harus didistribusikan oleh suatu bahasa ditentukan oleh keterampilan perancang dan pelaksana, tetapi mari kita berpura-pura bahwa semua perancang bahasa sama baiknya dalam hal apa yang mereka lakukan.)
Ketika seorang perancang bahasa memutuskan untuk meningkatkan kekuatan suatu bahasa dalam satu kategori, mereka secara logis menghilangkan sebagian dari kekuatan potensial itu dari setiap kategori lainnya. Inilah sebabnya mengapa sering dikatakan bahwa desain bahasa pemrograman adalah tentang pertukaran. Dari sudut pandang ini, kekuatan keseluruhan bahasa masih belum dapat ditentukan, dan kita harus kembali ke metode mengkategorikan bahasa berdasarkan kekuatan relatifnya. Tidak memuaskan? Sangat buruk.
Anda dapat memperdebatkan dua cara: bahwa bahasa yang kuat adalah bahasa dengan distribusi poin yang relatif merata (jack of all trades, master of none), atau dengan poin sebanyak mungkin di satu area tanpa meninggalkan yang lain tanpa pengawasan (spesialis). Tidak ada yang namanya bahasa "manusia renaisans", dengan penguasaan sempurna di berbagai bidang. Dan jika itu definisi Anda tentang bahasa yang paling kuat, maka Anda tidak beruntung.
Untuk bacaan lebih lanjut, artikel ini (kebetulan juga oleh Paul Graham, yang tampaknya memiliki pendapat yang beragam) menyentuh gagasan bahwa, walaupun sulit untuk menentukan bagaimana , bahasa pemrograman memang memiliki kekuatan yang berbeda. Dia berargumen dengan agak persuasif bahwa sangat mudah untuk melihat bagaimana suatu bahasa kurang kuat daripada yang Anda sukai — fitur yang hilang X — tetapi sangat sulit untuk melihat bagaimana bahasa yang benar-benar lebih kuat sebenarnya begitu — itu pada dasarnya setara dengan bahasa X, tetapi dengan banyak barang lainnya dilemparkan. Saya meninggalkan Anda dengan kutipan dari kertas itu:
sumber
Bahasa pemrograman adalah alat - tidak lebih, tidak kurang. Beberapa alat sangat khusus dan sangat cocok untuk tujuan tertentu; yang lain digeneralisasikan dan disederhanakan sampai hampir tidak berguna.
Saya berpendapat bahwa bahasa yang paling "kuat" adalah bahasa yang memungkinkan Anda mencapai tujuan Anda dengan investasi waktu, energi, dan penelitian lain yang minimal; yaitu, bahasa yang memberikan ROI terbesar. Dalam beberapa situasi bisa jadi C; di tempat lain, Jawa; di yang lain lagi, Haskell.
Hal terbaik yang harus dilakukan adalah membiasakan diri dengan berbagai bahasa dan apa yang berguna bagi mereka. Kemudian, ketika tiba saatnya untuk memulai proyek baru, Anda dapat membuat keputusan tentang mana yang paling tepat.
sumber
Diskusi tentang bahasa pemrograman - IMHO - seperti diskusi tentang klien email di beberapa newsgroup Linux: mereka cenderung perang api. Saya dapat mengingat saat-saat ketika VB6 populer. Ada orang yang bahkan berpendapat bahwa itu bukan bahasa pemrograman sama sekali, sementara yang lain membuat aplikasi yang menakjubkan dengan itu.
Saya pikir bahasa pemrograman sudah berbeda dalam konsep sebagai pencipta memiliki hal-hal yang berbeda dalam pikiran ketika mereka menciptakan / mendesain bahasa. Jadi bahasa yang sesuai dengan satu tujuan - dan di bawah keadaan yang kuat - mungkin tidak cocok dengan yang lain. Penamaan bahasa yang kuat atau tidak itu murni subjektif. Yang mengatakan, saya tidak berpikir bahwa ada metrik yang bisa diterapkan.
sumber
Mereka semua adalah alat di peti alat Anda. Palu bisa jadi kuat, tetapi tidak jika Anda membutuhkan kunci pas. C / C ++ bagus jika Anda seorang programmer sistem, tetapi Adobe Flash mungkin lebih cocok untuk situs web game yang ingin Anda bangun.
sumber
Bahasa pemrograman yang paling kuat adalah yang memecahkan masalah pemrograman linier berikut :
Maksimalkan
Kecepatan pengembangan
+ Kemudahan membaca kode
+ Kemudahan debugging
+ Singkat / singkatnya ekspresi
+ Kemudahan belajar / mengajar
- Penggunaan CPU
- Persyaratan memori
Tunduk pada
(Dan ya, saya tahu, saya sudah memposting jawaban yang sepenuhnya kontradiktif. Itu karena saya adalah seorang dialek.)
sumber
Ini ditulis sehubungan dengan bahasa alami, tapi saya pikir itu sesuai untuk bahasa pemrograman juga:
"Kekuatan" tidak disebabkan oleh satu bahasa di atas yang lain. Bodoh mengatakan, "Bahasa Cina lebih kuat daripada bahasa Korea." Demikian juga, konyol untuk mengatakan "APL adalah bahasa yang lebih kuat daripada COBOL."
Ada beberapa upaya untuk menyamakan kekuatan linguistik dengan beberapa ukuran objektif. Saya yakin upaya ini gagal:
Pendapat saya adalah bahwa diskusi tentang "kekuatan satu bahasa atas yang lain" adalah ekspresi terselubung dari perasaan superioritas pembicara atas beberapa kelompok lain. Singkatnya, prasangka dan stereotipnya. Tentu saja, orang-orang yang berprasangka benar-benar percaya stereotip mereka dengan sangat kuat, dan tidak mungkin Anda bisa membujuk mereka untuk berubah pikiran.
sumber