mengapa tidak menggabungkan fitur terbaik dari semua bahasa pemrograman yang ada dan cocok dalam bahasa pemrograman universal?
mengapa tidak menggabungkan fitur terbaik dari semua bahasa pemrograman yang ada dan cocok dalam bahasa pemrograman universal?
Jawaban:
Untuk alasan yang sama Anda tidak menggunakan pisau tentara Swiss untuk mengukir ayam ...
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 ...
Karena
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 sejumlah lainnya.
Untuk pengendali penerbangan tertanam, saya memiliki sekitar 128 ribu memori untuk digunakan dan di atas itu, jika kode saya mendapat perkecualian, 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 merupakan 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.
Jika Anda tidak memiliki kotak peralatan, 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 peralatan dan hanya melihat [perangkat lunak yang setara dengan] obeng Philips, maka Anda tidak dapat menganggap diri Anda sebagai 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.
Jenis jawaban yang berbeda dengan yang lain - saya benar-benar berpikir ada potensi bagi bahasa untuk menjadi bahasa "universal", memungkinkan fitur dan paradigma 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 merupakan asumsi yang cacat.
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 tersebut , dan dengan demikian, Anda mungkin dapat mengambil "fitur terbaik dari bahasa X", dan menambahkannya ke Nemerle (atau milik Anda sendiri). Ini tidak selalu berarti menulis makro Anda sendiri setiap saat - setiap bahasa (atau paradigma) dapat didefinisikan di dalam makro di perpustakaan standar - sedemikian rupa sehingga Anda dapat import Haskell; import Prolog;
, dan mulai menulis dua bahasa seolah-olah itu adalah 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 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, itu tidak mungkin untuk meningkatkan sangat segera, hanya karena sejumlah besar pekerjaan itu adalah untuk mengimplementasikan bahasa dan perpustakaan, alat dll yang dibutuhkan untuk menggunakannya.
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.
"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.
Ada. Tidak ada alat yang terbaik untuk semuanya, tetapi beberapa alat seperti banyak bahasa pemrograman berfungsi untuk semua tujuan, bukan yang 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.
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.
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 itu adalah tempat - maka konsep perjalanan waktu dimungkinkan untuk dibayangkan. Dalam beberapa bahasa lain, gagasan perjalanan waktu tidak akan 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 kami 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 / naikkan nilai / dll, tentukan fungsi di tempat lain, dan berikan pointer ke fungsi tersebut. (lihat qsort () ) Untuk menggunakan lambdas dengan nilai yang diambil, jumlah dan kompleksitas kode yang harus Anda tulis meningkat banyak - sejauh yang saya tahu tidak seorang pun pernah benar-benar menulis kode untuk menggunakan metode pemrograman ini dalam C. Berbeda dengan bahasa di mana lambda 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 - 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.
Ketidakmungkinan pada manfaat teknis memiliki Bahasa Universal? Itu omong kosong. Kamu bisamemiliki 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 penanaman umum 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 ...
Adalah suatu kesalahan untuk berpikir bahwa "menggabungkan semua fitur" akan membuat bahasa yang lebih baik.
Anda 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 mengambil sesuatu dan memberikan alternatif yang lebih baik daripada menambahkan hal-hal baru. Misalnya
Ada pembicaraan hebat di atas ini oleh Paman Bob Martin - Bahasa Pemrograman Terakhir
goto
. Tapi saya suka jawabannya. Hal utama yang C lakukan adalah membiarkan Anda tidak peduli di mana tepatnya di memori semuanya berada dan apa yang ada di register apa pada jam berapa, dan menyembunyikan program counter (dalam hal alamat tepatnya di mana ia duduk, lagi. Anda dapat memindahkannya di hampir tingkat perakitan presisi dengan kebagian).
Tidak ada alat yang memiliki semua fitur terbaik. Misalnya, fitur Javascript dan Skema yang bagus adalah fitur-fiturnya kecil, jadi jika Anda mulai mengemas fitur, Anda telah kehilangan yang ini.
Namun Cobra terlihat menjanjikan ke arah memiliki semua fitur bagus dari bahasa lain. :-)
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.
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 tuntutan 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 huruf campuran yang lebih modern dengan basis fonetik seperti Cyrillic, 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 mengizinkan pembuatan kode asli, penggabungan yang dekat / efisien dengan perangkat keras untuk membuat lapisan abstraksi perangkat keras, dan memiliki basis instalasi 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 dalam makalahnya, Desain Desain (http://www.youtube.com/watch?v=pC-DlX-PaF4). Jika kita duduk hari ini untuk memilih Da Vinci atau komite untuk menentukan bahasa pemrograman universal, apakah kita tahu siapa atau apa dengan metode apa yang harus dirancang?
Mungkin sedikit berbeda pandangan tentang ini:
Apa itu bahasa? Sederhananya, itu adalah kosa kata, sintaksis, 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.
Selain dari argumen swiss-army-knife (yang ada benarnya - lebih sulit untuk merancang bahasa spektrum luas yang baik daripada yang spesifik domain - tapi itu tidak berarti bahasa seperti itu tidak akan menjadi keduanya mungkin dan ide yang bagus), ada masalah dengan "menggabungkan fitur terbaik":
Singkatnya, desain bahasa lebih sulit dan lebih rumit dari itu. Meskipun, Anda mungkin ingin melihat Scala .
Visual Batch adalah upaya bahasa pemrograman yang dapat disesuaikan. Tautan di bawah ini menunjukkan bagaimana antarmuka pemrograman ini dapat diadaptasi agar sesuai dengan kebutuhan Bahasa Pemrograman Universal.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
Ada bahasa pemrograman universal. Ini disebut "bahasa mesin" dan segala sesuatu dalam bahasa komputer lainnya akhirnya dieksekusi sebagai bahasa mesin.
Seperti apa bentuknya? String 0-9 dan AF.
Tapi itu menyebalkan untuk digunakan. Jadi Alan menciptakan bahasa yang dapat diterjemahkan ke dalam bahasa mesin dan lebih sesuai dengan apa yang ingin dilakukan Alan. Bill menciptakan bahasa yang berbeda untuk apa yang ingin dilakukan Bill. Tak lama, Anda punya Cobol dan Fortran dan Lisp dan Jawa. Semuanya hanyalah versi sederhana dari bahasa mesin, lebih mudah untuk menulis beberapa jenis program tetapi lebih sulit, atau tidak mungkin, untuk menulis jenis program lainnya. Yang satu bagus untuk akuntansi, yang lain bagus untuk mengendalikan pesawat ulang-alik.
Sebagian besar jawaban di sini fokus pada penggunaan alat terbaik untuk setiap masalah. Saya tidak percaya ini alasan yang cukup bagus.
Jika Anda melihat perusahaan besar maka biasanya perusahaan akan cenderung menggunakan satu (atau sejumlah kecil) bahasa dan teknologi, bahkan jika untuk proyek tertentu ada bahasa yang lebih baik.
Hal ini dilakukan karena manfaat yang timbul dari peningkatan standardisasi, dukungan yang lebih mudah, pembagian kode, dll. (Paling sering) lebih besar daripada nilai tambah dari bahasa tertentu.
Saya pikir semua jawaban "karena Anda tidak mengukir patung dengan pensil" tidak ada gunanya.
Siapa di sini, BENAR-BENAR memilih bahasa sebelum setiap proyek baru?
Yang benar adalah, kita hanya perlu bahasa pemrograman beberapa, dan dunia pemrograman akan lebih baik seperti itu: orang akan fokus pada pembuatan yang bahasa scripting yang lebih baik bukannya tersebar di seluruh python / ruby / perl / younameit misalnya.
C # diprogram di / untuk windows (baik-baik saja, ada Mono, ada orang di sini menjalankan aplikasi C # di bawah Mono setiap hari?) Dan itu membuat pengguna membeli Windows7 / 8, dan itu menghasilkan uang untuk Microsoft.
Perusahaan lain melakukan hal yang sama, kemudian open source lebih tahu, kemudian tuan jenius juga ... dan kami memiliki banyak bahasa yang mirip, itu hanya sifat manusia yang mementingkan diri sendiri.
Kita harus melihat ke ekonomi untuk menjawab pertanyaan ini. Jika itu menghemat uang bisnis hanya untuk satu bahasa, kami akan memilikinya. Mereka akan membakukannya dan meminta semua orang untuk menggunakannya. Bahasa-bahasa lain akan merana di gedung-gedung akademis yang berdebu dan ruang bawah tanah para penggemar bermata liar. Ini belum terjadi, jadi mereka pasti bukan insentif keuntungan dalam bahasa pemrograman universal atau orang akan secara alami berkembang sekarang.