it-swarm-id.com

Mengapa tidak ada bahasa pemrograman "universal" yang melayani semua tujuan?

mengapa tidak menggabungkan fitur terbaik dari semua bahasa pemrograman yang ada dan cocok dalam bahasa pemrograman universal?

60
killown

Untuk alasan yang sama Anda tidak menggunakan pisau tentara Swiss untuk mengukir ayam ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Pisau Swiss Army umumnya memiliki pisau, serta berbagai alat, seperti obeng dan pembuka kaleng dan banyak lainnya. Lampiran ini disimpan di dalam gagang pisau melalui mekanisme pivot point ...

Desain pisau dan fleksibilitasnya telah menyebabkan pengakuan di seluruh dunia ...

116
David_001

Karena

  1. tidak ada yang ingin menulis ulang semua kode warisan.
  2. Sulit untuk menyepakati semua tujuan
  3. Setelah Anda menyusun daftar tujuan yang komprehensif, mereka akan berubah sebelum Anda bisa membuatnya dibangun.
  4. Seseorang akan memulai bahasa yang sama sekali berbeda karena tujuan baru.
  5. Microsoft
  6. Apple
  7. Sumber Terbuka
  8. Apa yang akan kita lakukan dengan semua Ikan Babel?
  9. Bahkan tidak bisa membuat SQL universal.
80
JeffO

Apa yang Anda miliki dalam pemrograman adalah domain masalah yang sangat besar. Domain ini sangat beragam dan dalam berbagai arah.

Inilah sebabnya mengapa pengontrol penerbangan tertanam ditulis dalam C dan situs web ditulis dalam PHP, Java, Rails, .NET, dan Host lain.

Untuk pengontrol penerbangan tertanam, saya memiliki sekitar 128 ribu memori untuk digunakan dan di atas itu, jika kode saya mendapat pengecualian yang tidak tertangani, pesawat jatuh, 200 orang meninggal dan saya dituntut untuk menyetel $ 1 miliar, dan harus mengirim insinyur ke setiap bandara di dunia untuk memperbaiki pesawat yang grounded kehilangan pelanggan saya $ 10 juta/hari. Saya harus bekerja dengan bahasa yang sangat ketat dan memiliki sejumlah kecil bagian yang bergerak yang bisa salah.

Untuk aplikasi web saya, saya memiliki beberapa GB memori untuk bekerja, tetapi kecepatan jaringan terbatas (pada tingkat yang lebih rendah setiap hari, tetapi ini mungkin batas web terbesar). Saya akan melihat bahasa yang memberi saya banyak fitur dan menghasilkan output yang dapat ditransmisikan secepat mungkin. Saya tidak terlalu peduli jika situs saya turun, saya mungkin akan kehilangan beberapa penjualan ($ 100) dan harus menambal kasus penggunaan yang dibom, bukan masalah besar.

Situs web belum ditulis dalam C selama lebih dari 15 tahun (ada yang melakukan skrip cgi?) Dan sejauh yang saya tahu pengendali penerbangan sekarang mulai melihat C++, tetapi bahkan dengan cara yang sangat terbatas.

38
Bill Leeper
  1. Pergi ke garasi Anda (atau garasi orang tua Anda).
  2. Buka kotak alat.
  3. Jika Anda melihat lebih dari satu alat, pikirkan bagaimana itu berlaku untuk pertanyaan Anda.

Jika Anda tidak memiliki kotak alat, atau hanya memiliki salah satu palu kecil dengan bit obeng di pegangan berongga, maka saya memiliki simpati yang besar untuk Anda.

Serius. Jika Anda pergi ke bengkel mobil, apakah mekanik Anda hanya memiliki satu alat do-it-all di toolchest-nya? Dia (atau dia) adalah seorang profesional, dengan alat kelas profesional yang dirancang khusus untuk melakukan berbagai tugas perbaikan mobil.

Demikian pula, pengembang perangkat lunak profesional harus memiliki seperangkat alat yang memadai untuk melakukan perdagangannya. Jika Anda membuka kotak alat dan hanya melihat [perangkat lunak setara dengan] obeng Philips, maka Anda tidak dapat menganggap diri Anda seorang profesional.

Anda dapat memutar baut dengan kunci pas ujung terbuka, kunci pas ujung kotak, kunci ratchet, atau kunci pas yang bisa disesuaikan. Anda bahkan dapat memutar baut dalam keadaan darurat dengan tang slip-joint, dengan canggung, dengan kerusakan ringan hingga berat. Tetapi cukup sulit untuk memutar baut dengan palu godam.

24
brettmjohnson

Jenis jawaban yang berbeda dengan yang lain - saya benar-benar berpikir di sana berpotensi untuk bahasa menjadi yang "universal", memungkinkan fitur dan paradigma dari banyak bahasa lain, meskipun mungkin bukan bahasa yang dirancang dengan ketat yang mungkin Anda pikirkan.

Untuk menggunakan analogi brettmjohnson di atas, gagasan bahwa setiap bahasa pemrograman adalah alat di dalam kotak (atau pada pisau tentara swiss) adalah asumsi yang dibuat oleh setiap orang, tetapi benar-benar asumsi yang salah.

Bagaimana jika bahasa pemrogramannya adalah kotak alat?

Maksud saya, bagaimana jika Anda dapat menambah dan menghapus fitur dari bahasa sesuka Anda, dan memiliki kotak peralatan Anda sendiri dengan alat yang Anda butuhkan di dalamnya - bahkan jika alat itu untuk tujuan yang berbeda.

Konsepnya sudah ada sebagian. Misalnya, bahasa seperti Nemerle memungkinkan Anda untuk menambahkan sintaks ke bahasa , dan karenanya, Anda mungkin dapat mengambil "fitur terbaik dari bahasa X", dan menambahkan ke Nemerle (atau milik Anda). Ini tidak selalu berarti menulis makro Anda sendiri setiap saat - setiap bahasa (atau paradigma) dapat didefinisikan di dalam makro di perpustakaan standar - sehingga Anda dapat import Haskell; import Prolog;, dan mulai menulis dua bahasa seolah-olah itu bagian dari bahasa Anda?

Pertanyaannya kemudian adalah - bagaimana Anda mendapatkan fitur dari bahasa/paradigma yang berbeda untuk saling bekerja sama? Meskipun saya tidak bisa menjawabnya, kerangka kerja seperti .Net dan JVM menawarkan beberapa solusi - bahasa-bahasa tersebut setidaknya sebagian kompatibel karena cara mereka dikompilasi. Anda dapat mengambil kode apa pun yang ditulis dalam C #, dan menggunakannya dari F # tanpa keluhan.

'Masalah' dengan solusinya seperti saat ini, adalah bahwa menggunakan bahasa-bahasa ini bersama-sama mengharuskan Anda untuk membuatnya sebagai proyek yang terpisah, yang tidak dapat saling rujukan - Anda hanya dapat memiliki referensi 1 arah. Hambatan bahasa adalah bahwa setiap proyek mengkompilasi semua file itu secara terpisah ke Common Intermediate Language sebelum proyek lain dapat mengaksesnya.

Batu loncatan untuk menghilangkan penghalang itu adalah untuk memungkinkan kode bahasa yang berbeda (misalnya, C # dan F #) dikompilasi di dalam proyek yang sama. Secara teori Anda dapat mengkompilasi setiap file secara terpisah (atau dalam kelompok - jika mereka memiliki tipe parsial atau referensi melingkar), dan kemudian mengkompilasi file dari bahasa yang berbeda yang dapat mengakses objek yang sudah dikompilasi (CIL). Anda perlu mendefinisikan secara ketat urutan kompilasi agar ini berfungsi - tetapi urutan kompilasi sudah diperlukan dalam kasus F #.

Lagi pula, saya tidak mengatakan "pasti ada bahasa universal". Saya menyarankan bahwa ada potensi interoperabilitas yang jauh lebih baik antara bahasa yang ada saat ini. Pada kenyataannya, sepertinya tidak akan meningkat sangat cepat, hanya karena banyaknya pekerjaan yang harus dilakukan untuk mengimplementasikan bahasa dan perpustakaan, alat, dll yang diperlukan untuk menggunakannya.

20
Mark H

Fitur terbaik dari beberapa bahasa bertentangan dengan fitur terbaik dari yang lain.

Sebagai contoh: Ketik refleksi sadar adalah fitur yang sangat bagus, tetapi itu tidak akan bernilai banyak dalam bahasa yang diketik secara longgar, tetapi pengetikan yang longgar bisa menjadi manfaat nyata di saat-saat juga.

Bahkan dalam satu bahasa Anda tidak dapat selalu menggunakan semua fitur terbaik pada saat yang sama karena mereka saling bertentangan.

10
Bill

"Jack dari semua perdagangan - master of none." muncul dalam pikiran.

Beberapa program memerlukan kecepatan, yang lain banyak memori atau akses cepat ke disk. Beberapa bahasa bagus di satu, tetapi buruk di lain - saya tidak berpikir Anda akan mendapatkan bahasa yang bagus sama sekali.

Jadi, selagi Anda bisa menulis hampir semua program dalam bahasa apa pun, apa yang Anda dapatkan tidak dijamin menjadi program "terbaik" yang bisa Anda tulis untuk menyelesaikan masalah itu.

7
ChrisF

Bahasa membentuk cara orang berpikir. Ini berlaku untuk bahasa alami. Jika seorang anak hanya tahu satu bahasa dengan angka "satu, dua, banyak", mengajar matematika anak itu ... sulit. (Maaf, saya tidak memiliki tautannya) Dalam bahasa Inggris kita berbicara tentang waktu yang berbeda seolah-olah mereka adalah tempat - maka konsep perjalanan waktu dimungkinkan untuk dibayangkan. Dalam beberapa bahasa lain, gagasan perjalanan waktu akan tidak pernah terjadi pada penuturnya.

Ini juga berlaku untuk bahasa pemrograman.

Karenanya jika kita memiliki satu bahasa pemrograman, semua orang akan berpikir tentang semua tugas komputasi yang sama persis. Dengan demikian kita tidak akan mengeksplorasi alternatif, dan cara terbaik untuk melakukan sesuatu akan tetap belum ditemukan.

Hal terdekat yang kita miliki dengan bahasa universal adalah C. C memetakan sangat dekat dengan konsep perangkat keras yang mendasari (bagaimana hal-hal sebenarnya dilakukan dalam perangkat keras) dan program dalam setiap * bahasa dapat dikonversi menjadi C. (Lihat bagaimana CFront menggunakan kompiler C untuk assembler tugas) Masalah dengan C pada dasarnya adalah bahwa konversi yang disebutkan di atas tidak masuk akal dari perspektif programmer C.

"Lambdas" selalu mungkin dalam C. Sintaks tidak aktif, termasuk penyebaran kode di seluruh proyek/file, maka itu bukan solusi yang disukai. Dengan versi tanpa-tangkap/upvalue/etc, tentukan fungsi di tempat lain, dan berikan pointer ke fungsi tersebut. (lihat qsort ()) Untuk menggunakan lambdas dengan nilai yang ditangkap, jumlah dan kompleksitas kode yang harus Anda tulis meningkat banyak - sejauh yang saya ketahui tidak seorang pun pernah benar-benar menulis kode untuk digunakan metode pemrograman ini dalam C. Berbeda dengan bahasa di mana lambdas adalah bagian dari bahasa, dan pada dasarnya digunakan di mana-mana.

Perbedaan utama antara C dan C++ adalah bagaimana Anda bisa meminta C++ untuk mengurus barang untuk Anda; tetapi kemudian Anda tidak dapat lagi melihat, dari hanya satu baris kode, seberapa banyak Anda benar-benar memintanya. Jawabannya menjadi: itu tergantung (pada semua kode lain ini).

Beberapa bahasa pemrograman sangat baik untuk tugas-tugas tertentu, tetapi di mana sebagian besar program saat ini digunakan di seluruh dunia tidak akan masuk akal jika diprogram dalam bahasa itu. Artinya, jika bahasa dapat digunakan untuk mengimplementasikan program itu untuk memulai, yang tidak diberikan.

5
MaHuJa

Ada. Tidak ada alat yang terbaik untuk semuanya, tetapi beberapa alat seperti banyak bahasa pemrograman melayani untuk semua tujuan, bukan terbaik untuk semua.

Anda dapat memilih alat terbaik untuk pekerjaan itu tetapi ada bahasa pemrograman yang dapat digunakan pada semua tujuan dan Anda dapat memilihnya. Saya tidak merekomendasikannya tetapi itu mungkin.

4
Maniero

Adalah suatu kesalahan untuk berpikir bahwa "menggabungkan semua fitur" akan membuat bahasa yang lebih baik.

Anda lebih cenderung berakhir dengan kekacauan yang membengkak, kompleks, dan tidak dapat dibaca.

Desain bahasa yang baik membutuhkan pilihan dan pertukaran yang harus dilakukan. Boleh dibilang bahasa terbaik/paling revolusioner/paling sukses adalah bahasa yang mengeluarkan sesuatu dan memberikan alternatif yang lebih baik daripada menambahkan hal-hal baru di. Mis.

  • Bahasa pemrograman terstruktur (C, Pascal) - mengeluarkan "goto", menggantikan dengan prosedur dan loop terstruktur dll.
  • Java - mengeluarkan "manajemen memori manual", menggantikan dengan GC/memori yang dikelola
  • Haskell/Clojure - mengeluarkan "keadaan berubah-ubah yang tidak dapat dikendalikan"
  • LISP - menghapus sebagian besar "sintaks bahasa", menggantikan dengan pohon homofonik yang fleksibel dari ekspresi-s

Ada pembicaraan hebat di atas ini oleh Paman Bob Martin - Bahasa Pemrograman Terakhir

4
mikera

Ketidakmungkinan pada manfaat teknis memiliki Bahasa Universal? Itu omong kosong. Anda bisa memiliki bahasa universal yang mencakup semua pangkalan. Masalahnya sebagian besar historis: bahasa yang berbeda diciptakan untuk melakukan hal yang berbeda dan digunakan di komunitas yang berbeda. Banyak dari mereka terjebak. Tambahkan ke preferensi itu (vi! Emacs! Tunggu, maksudku Java! C #, tunggu maksudku Microsoft, Open Source, dll. Dll.) Dan penyematan umum dari kecelakaan sejarah ... Lihatlah bahasa-bahasa alami di tanah kecil massa seperti beberapa negara Eropa untuk melihat betapa gilanya topik ini. Beberapa kota memiliki kebanggaan dan kegembiraan sendiri, sedikit dialek yang hanya mereka yang berbicara. Bangsa dan komunitas pemrograman tidak begitu berbeda, juga komunitas pemrograman tidak lebih rasional. Jika ya, kita semua akan berbicara esperanto dan program di Universal tentang sesuatu ...

4
Dan Rosenstark

Karena sesuatu yang saya sebut "paradoks generalisasi/spesialisasi", yang mungkin memiliki nama lain dan sebenarnya bukan paradoks

Semakin umum bahasa pemrograman, semakin banyak kode yang diperlukan untuk mencapai sesuatu. Semakin khusus bahasa, semakin sedikit yang dapat Anda capai dengan bahasa itu.

4
Homde

Dengan semua yang ditulis sejauh ini, sulit untuk menambahkan banyak alasan baru, tetapi saya akan memberikan beberapa.

  • Evolusi: Bukan hanya sistem biologis yang diperkenalkan, bermutasi, dan menjalani kompetisi survival of the fittest untuk sumber daya dan ceruk untuk memanggil mereka sendiri. Kompetisi itu bagus dan mendorong banyak hal.

  • Kedewasaan: Kami telah membuat bahasa komputer mungkin kurang dari satu abad. Kami belum bisa mendapatkan jawabannya karena kami belum tahu semua pertanyaannya.

  • Pisahkan genesis: Tidak yakin kata yang tepat untuk ini, tetapi di dunia mereka banyak sistem penulisan yang dimulai di banyak wilayah geografis. Pikirkan tentang Cuneiform yang didiktekan sebagian oleh permintaan ukiran ke tablet tanah liat. Pikirkan tentang huruf Sanskerta, Yunani, Ibrani, Romawi, Arab. Hieroglyphics, metode tulisan China yang indah dengan 6000+ simbol yang digunakan bersama di banyak negara Asia Timur. Pikirkan alfabet campuran yang lebih modern dengan basis fonetik seperti Sirilik, Katakana, dan Hirigana. Saya bukan ahli bahasa, jadi jangan nyalakan ketidakakuratan terlalu keras, tetapi ketika budaya di seluruh dunia membutuhkan sesuatu, mereka akan membuatnya dan membuatnya sendiri karena kebutuhan. Bahasa komputer muncul ketika ada banyak komunikasi di seluruh dunia dan seperti sistem Imperial dan Metric, datang dari tempat-tempat dengan kepemimpinan ide yang kuat. Tetapi bahasa pemrograman melayani banyak budaya yang berbeda (beberapa di antaranya budaya perusahaan), sehingga mereka mencerminkan orang-orang yang membuatnya. Bahasa komputer hadir dengan warisan budaya yang membentuk desain dan penggunaannya. Dalam kultur kernel OS, C dan C++ sepertinya tidak akan segera ditinggalkan untuk Java (atau sebaliknya) karena mereka mengijinkan pembuatan kode asli, penggabungan dekat/efisien dengan perangkat keras untuk membuat abstraksi perangkat keras lapisan, dan memiliki berbasis diinstal yang cukup besar.

  • Desain Desain: Bahasa pemrograman muncul dengan menggunakan berbagai paradigma organisasi. COBOL dan Ada berasal dari komite yang merupakan bagian dari DOD yang memiliki banyak hierarki. Jika saya ingat dengan benar C, C++, Java, dan mungkin banyak lainnya berasal dari satu atau sejumlah kecil desainer. Fred Brooks membandingkan hasil komite vs pendekatan berbasis Visioner di makalahnya, Desain Desain (http://www.youtube.com/watch?v=pC-DlX-PaF4). Jika kita duduk hari ini untuk memilih Da Vinci atau komite untuk mendefinisikan bahasa pemrograman universal, apakah kita tahu siapa atau apa dengan metode apa yang harus dirancang?

0
DeveloperDon

Mungkin sedikit berbeda pandangan tentang ini:

Apa itu bahasa? Sederhananya, itu sederhana, kosa kata, dan semantik.

Apa hal pertama yang Anda lakukan dengan bahasa pemrograman?
Anda mendefinisikan hal-hal - kelas, variabel, metode - Anda memperluas kosakata dan semantik.

Mengapa? Jadi sekarang Anda bisa mengatakan hal-hal di dalamnya yang tidak bisa Anda katakan sebelumnya.
Suka atau tidak, Anda telah membuat bahasa tujuan khusus yang baru.

IMHO, hal yang harus dicari dalam bahasa tujuan umum adalah jika membuatnya mudah untuk membuat bahasa tujuan khusus.

0
Mike Dunlavey

Tidak ada alat yang memiliki semua fitur terbaik. Misalnya, fitur Nice dari Javascript dan Skema adalah mereka kecil, jadi jika Anda mulai mengemas fitur, Anda sudah kehilangan yang ini.

Tetap Cobra terlihat menjanjikan ke arah memiliki semua fitur Nice dari bahasa lain. :-)

0
Andrea

Selain argumen swiss-army-knife (yang ada benarnya - lebih sulit untuk merancang bahasa spektrum luas yang baik daripada domain- spesifik - tetapi itu tidak berarti bahasa seperti itu tidak mungkin sekaligus ide yang baik), ada masalah dengan "menggabungkan fitur terbaik":

  • Untuk fitur bahasa, "terbaik" adalah subyektif, atau setidaknya (tanpa henti) dapat diperdebatkan.
  • Beberapa fitur tidak kompatibel; fitur yang baik dari satu bahasa dapat meledak ketika dikombinasikan dengan fitur yang baik dari yang lain.
  • Kami belum selesai dengan fitur baru.

Singkatnya, desain bahasa lebih sulit dan lebih rumit dari itu. Meskipun, Anda mungkin ingin melihat Scala .

0
comingstorm

Karena jika Anda membuat bahasa seperti itu, itu akan menjadi bahasa baru. Anda mungkin mendapatkan basis penggemar yang besar, tetapi semua bahasa lain masih ada.

C masih ada meskipun banyak bahasa baru diciptakan sejak itu.

Anda bisa mengatakan bahwa python adalah bahasa universal, tetapi kemudian ada juga Ruby.

Alasannya ada banyak bahasa hanya karena ada banyak programmer dan beberapa dari mereka suka membuat bahasa baru.

Alasan tidak ada satu bahasa universal yang disetujui semua orang adalah bahwa pemrograman sebagai keahlian tidak ditentukan oleh beberapa institusi yang membuat semua keputusan. Setiap orang bebas melakukan apa yang mereka inginkan.

Itu hal yang baik.

0
hasen