Apakah saya akan pernah bisa kode kode browser sisi klien dalam bahasa pilihan saya? [Tutup]


15

Saya akan sangat jujur: Saya benci menulis kode sisi klien dalam JavaScript. Saya bukan penggemar bahasa ini, untuk sedikitnya.

Tampaknya konyol bagi saya bahwa browser mendukung bahasa pemrograman , daripada mesin virtual perantara (seperti CIL atau JVM). Yang terakhir akan memungkinkan programmer untuk menulis dalam bahasa pilihan mereka (sampai batas tertentu), daripada dalam satu bahasa tetap yang telah ditetapkan. Bahasa ini dapat berkembang lebih cepat, karena hanya perubahan pada CIL / JVM / apa pun yang akan memerlukan setiap peramban utama untuk memutakhirkan. Fitur bahasa dapat ditambahkan tanpa memengaruhi pengalaman browser lama.

Penghematan besar-besaran dari upaya yang dilakukan oleh bahasa perantara diketahui dengan baik . Apakah ada inisiatif di luar sana untuk mempromosikan "scripting" browser selain JavaScript, dan terutama dalam mesin virtual yang sudah dirancang, dikembangkan, dan dioptimalkan? Apakah mereka punya momentum?


Jawaban:


11

Untuk menjawab pertanyaan Anda, ya ada upaya yang dilakukan untuk mencabut Javascript demi bahasa yang lebih kohesif untuk skrip web. Google telah menempatkan banyak dorongan di balik bahasa Dart mereka . Dart memiliki VM sendiri yang sudah tertanam di Chrome, tapi saya tidak yakin apakah browser lain sudah mengadopsinya. Ada juga bahasa yang cukup menjanjikan yang disebut CoffeeScript .

Ada juga proyek yang sangat ambisius bernama HaXe yang bertujuan untuk menyatukan seluruh platform pengembangan dengan satu bahasa ..

Percayalah, Anda tidak sendirian dalam tidak menyukai Javascript, tapi saya khawatir ini tidak akan terjadi dalam waktu dekat - sebenarnya tampaknya akan mendapatkan banyak momentum apa dengan aplikasi Windows 8 HTML5 / JS dll. Tetapi alternatif seperti yang saya disebutkan mulai bermunculan :)


9
Menyatukan semuanya menjadi satu bahasa adalah kebalikan dari apa yang diinginkan. Itu hanya membuat Anda dengan situasi yang sama seperti sekarang, hanya dengan bahasa yang berbeda, bukan JavaScript. Intinya adalah bahwa upaya yang ada harus dibangun di atas: IL / CLR mapan, sudah memiliki JITters berkinerja tinggi untuk sebagian besar platform, dan beberapa kompiler sudah mengkompilasi beberapa bahasa ke dalamnya. Untuk membawa web ke abad ke-21, browser perlu memanfaatkan itu, daripada terus-menerus mencoba memanggang barang-barang baru mereka sendiri dan mulai dari awal.
Timwi

3
@Timwi, CIL terlalu berat dan ada terlalu banyak birokrasi di dalamnya. Tidak masuk akal untuk melampirkan file bytecode penuh, membengkak dengan kelas khusus dan semua metadata besar untuk masing-masing dan setiap onSomethingevent handler - parsing dan menafsirkan 10-20 karakter bahasa scripting sederhana jauh lebih efisien.
SK-logic

1
@ SK-logic: Tampaknya Anda memiliki gambar CIL yang sepenuhnya salah, dan bytecode secara umum. Saya tidak tahu apa yang akan membuat Anda berpikir bahwa metadata biner adalah "besar" dibandingkan dengan sintaks tingkat tinggi seperti JavaScript. Kebanyakan dari semua, saya tidak tahu mengapa "masing-masing dan setiap handler event onSomething". Program C # jelas tidak dikompilasi menjadi beberapa majelis untuk setiap pengendali acara.
Timwi

1
@Timwi, saya makan ECMA-335 untuk sarapan, jadi saya tahu betul seberapa besar CIL itu. Node DOM sering dihasilkan secara dinamis. Tidak ada cara untuk menambahkan sesuatu ke modul yang ada di CIL - Anda harus mendefinisikan modul baru. Dan Anda tidak dapat menambahkan ke kelas - Anda harus mendefinisikan kelas baru (dengan metadata besar terlampir). Dan hanya membandingkan biaya membaca, JITing dan mengeksekusi CIL untuk parsing, mengeksekusi, dan segera membuang string teks kecil. Ada banyak kasus di mana interpretasi ad hoc jauh lebih efisien daripada kompilasi apa pun.
SK-logic

2
@Timwi, Anda mengusulkan untuk menggunakan bytecode sebagai common denominator dan format komunikasi, kan? Maksud saya adalah bahwa spesifikasi CIL saat ini cukup banyak tidak berguna. ExpandoObject tidak relevan. Dan pandangan Anda tentang kompleksitas parsing dikaburkan. Modul CIL berisi tabel referensi rakitan sendiri, tabel token metadata, dan hanya kemudian kelas dan metode. Bandingkan upaya yang diperlukan untuk membaca dan JIT semua hal besar ini dengan menafsirkan string bahasa tingkat tinggi yang sepele. Biaya parsing hampir nol di sini. Coba saja kedua pendekatan dan bandingkan diri Anda.
SK-logic

5

Javascript itu sendiri dapat dilihat sebagai bahasa perantara, mendefinisikan mesin virtual di mana bahasa lain dapat dikompilasi. Dalam proyek-proyek seperti GWT gagasan ini sudah lepas landas. Mungkin bukan apa yang Anda rancang dari awal, tetapi sudah menjadi kenyataan bahwa Anda bisa mengkompilasi "bahasa favorit Anda" ke dalam Javascript.


5

Intinya, tidak. Anda cukup terjebak dengan Javascript.

Karena itu, ada upaya di masa lalu untuk membawa bahasa lain di papan (java applet, vbscript, dll.) Masing-masing tidak pernah benar-benar mendapatkan daya tarik yang dimiliki javascript karena javascript terintegrasi .

Satu-satunya cara untuk membangun apa yang Anda maksud adalah dengan membuat bahasa scripting yang berjalan pada mesin virtual, mengkompilasi sisi klien, dan kemudian dieksekusi. Kemudian setiap browser harus mengimplementasikan mesin virtual ke dalam basis kode sendiri sehingga semua kode berjalan di semua browser. Maka Anda harus memastikan memiliki semacam standar sehingga semua browser menjalankan perintah dengan cara yang sama. Tentu saja, browser dibuat secara independen, mungkin akan ada kebiasaan yang harus diingat pengembang.

Tapi sekarang kita baru saja menggambarkan Javascript.

Jadi pada akhirnya, pilihan Anda adalah:

  1. terbiasa dengan Javascript
  2. coba gunakan beberapa bahasa yang mengkompilasi ke Javascript. (Ingatlah bahwa Anda masih ingin memverifikasi Javascript, yang mengembalikan ke opsi 1.)
  3. menggunakan bahasa yang ada sebagai plug-in ke browser, seperti actioncript (Flash), ActiveX, java applet, .Net (SilverLight). Ini menghindari masalah dengan beberapa vendor / implementasi bahasa, tetapi tidak mengintegrasikan bahasa.

Intinya, jika Anda ingin bahasa terintegrasi, Anda terjebak dengan Javascript.


2
Pilihan lain akan menggunakan bahasa yang mengkompilasi ke javascript dan menggunakannya.
Jetti

@Jetti Apakah Anda memikirkan CoffeeScript ? Itu moto - ini "Aturan Emas" sebagaimana mereka menyebutnya - adalah "Ini hanya Javascript" . Tetapi jika Anda menulis sesuatu yang pada dasarnya Javascript, bukankah Anda benar-benar menulis Javascript? Ini seperti berpendapat bahwa jQuery bukan javascript karena lebih bersih dan lebih mudah digunakan.
Richard


@ Jetti Mungkin mereka akan baik-baik saja. Tetapi dengan quirkiness dukungan lintas-browser, saya akan gugup merekomendasikan salah satu dari mereka dan tidak memverifikasi javascript yang sebenarnya dihasilkan.
Richard

1
Kecuali bahwa javascript adalah bahasa perantara yang benar-benar mengerikan, dan sangat sulit dijalankan secara konsisten.
Milind R

4

Sebenarnya Anda tidak membenci javascript, seperti yang dijelaskan dalam standar Ecma, tetapi Anda membenci implementasi yang buruk di berbagai browser , dengan mereka quirks, bug, dan wtfs. Javascript sisi-server sebenarnya cukup menyenangkan. Juga Model DOM adalah penyebab 80% dari rasa sakit javascript sisi klien.

Jika Anda masih ingin menggunakan bahasa lain, Anda dapat menggunakan GWT , yang pada dasarnya memungkinkan Anda menulis Java, kemudian mengompilasinya menjadi (jelek) javascript, atau CoffeeScript , yang merupakan gula sintaksis di atas JS, yang dikompilasi ke dalam JS.


9
Saya tidak dapat berbicara untuk romkyn, tapi saya benci JavaScript itu sendiri ( selain masalah yang Anda sebutkan). Itu tidak berorientasi objek, tidak memiliki pengetikan statis, tidak ada penanganan kesalahan yang berguna, dan tidak ada kerangka kerja fungsional yang berguna. Ini juga tidak konsisten dan sulit digunakan. Dan omong-omong, fitur JS yang paling dibenci, penyisipan titik koma, adalah dalam standar ECMA.
Timwi

1
@ Timwi, ini berbasis fungsi dan Anda dapat menulis kode OO jika Anda mau. Mengetik statis itu baik, tetapi jika kode Anda ditulis dengan baik (fungsi kecil, cakupan yang tepat), jarang terjadi masalah. Adapun penyisipan titik koma, saya menemukan itu menjadi gangguan ringan. Itu hanya pernah menggigitku sekali, karena aku memiliki kembalinya dan pembukaan {suatu objek pada garis yang berbeda. "Kerangka fungsionalitas modern" apa yang Anda temukan hilang?
CaffGeek

2
JavaScript itu sendiri bukan bahasa terbaik di luar sana (dengan sopan). Saya tidak peduli tentang hal-hal yang berorientasi objek (semakin sedikit - semakin baik), tentang sistem tipe dinamisnya (sayangnya sangat diperlukan untuk bahasa skrip semacam ini, sayangnya), tetapi keberadaan pernyataan dan kurangnya daftar dan tuple mengganggu. Baik untuk menulis dalam JavaScript maupun untuk mengimplementasikan kompiler yang menargetkan JavaScript.
SK-logic

2
@ Timwi: Anda melihat tidak berorientasi pada objek sebagai hal yang buruk, sementara itu tidak selalu terjadi. Tolong jangan melihat OOP sebagai peluru perak paradigma pembangunan. Pendekatan fungsional, seperti JS atau Scala juga bagus. Anda dapat memiliki OOP di JS, tetapi perbedaan utamanya adalah pemrograman berbasis Prototipe, bukan pemrograman berbasis Kelas. OOP adalah nama yang luas, dan tidak terbatas pada Java / C #. Berbasis prototipe berbeda dari berbasis Kelas, dan digunakan dengan baik, sama kuatnya dengan berbasis Kelas.
Clement Herreman

2
@ClementHerreman: JavaScript tidak terbatas pada sisi klien, tetapi diskusi ini tentang sisi klien. JavaScript adalah terbatas pada prototipe berbasis, yang merupakan downside dibandingkan dengan IL yang akan membiarkan Anda menggunakan cukup banyak bahasa apapun.
Timwi

2

Pertanyaan ini muncul dari waktu ke waktu.

Mengapa kita tidak memiliki bahasa lain dalam tag skrip alih-alih hanya Javascript

Kembali pada hari IE memperkenalkan VB sebagai alternatif untuk Javascript. Saya pikir Anda sudah dapat melihat bagaimana ini akan menyebabkan standar neraka jika tertangkap ...

Jadi mengapa bukan bahasa perantara standar umum itu?

Ada podcast lama dari Brendan Eich yang menjelaskan mengapa dia tidak melihat bahasa bytecode perantara dalam waktu dekat:

http://www.aminutewithbrendan.com/pages/20101122

http://news.ycombinator.com/item?id=1893686

Masalah dasarnya adalah bahwa sementara bahasa perantara (seperti CIL & byvec JVM) mencoba menjadi generik, sebagian besar waktu mereka berubah menjadi terlalu rendah dan terlalu terikat dengan bahasa tingkat tinggi asli yang dikompilasi untuk mereka. Misalnya, Anda tidak dapat benar-benar mengimplementasikan fungsi rekursif ekor di JVM - fitur bahasa lain atau pilihan implementasi apa yang tidak dapat kami implementasikan jika kami memasangkan abstraksi bytecode tingkat rendah terlalu dini?

Sementara itu, Javascript adalah bahasa tingkat tinggi yang fleksibel dengan semantik yang telah dikembangkan dan banyak implementasi yang berbeda, efisien. Apa yang mungkin kita lihat di masa depan adalah Javascript itu sendiri sebagai bahasa perantara - Sayangnya ini agak tidak matang dan beberapa bahasa dikompilasi ke JS pada hari ini.


Tapi argumen ini berlaku untuk JavaScript, sama seperti berlaku untuk JVM dan CIL, bukan? :) Satu-satunya hal yang terjadi untuk JavaScript adalah sudah didukung oleh semua browser.
Roman Starkov

Intinya lebih halus - Javascript dijelaskan di tingkat yang lebih tinggi daripada kebanyakan bahasa perantara sehingga implementasi mendapatkan ruang lebih luas dalam memilih apa yang harus dilakukan. (Tentu saja, ini bukan lautan mawar - saya hanya ingin menunjukkan bahwa kita bukan yang pertama berpikir tentang IL untuk web dan tidak sesederhana itu)
hugomg

1

Iya. Anda sudah dapat mengompilasi Dart, Coffeescript dan Java ke Javascript. Anda memiliki Emscripten, yang merupakan backend kompiler untuk LLVM untuk menghasilkan bytecode Javascript (dan saya yakin LLVM menangani beberapa bahasa).

Tetapi selain mengkompilasi ke JS, tidak dalam jangka waktu singkat. IE6 berusia 10 tahun dan masih menendang. Saya berharap bahwa browser saat ini (yang tidak mendukung bahasa lain) tidak akan bertahan begitu lama, tetapi mereka akan ada selama beberapa tahun, memprovokasi siklus menggigit ekor "kita masih harus mendukung browser yang hanya mendukung Javascript, jadi kita harus menggunakan Javascript ", dengan cara yang jauh lebih sulit daripada mengatakan CSS3 - situs Anda mungkin bekerja tanpa CSS3, tetapi cobalah membuatnya berfungsi tanpa skrip sisi klien.


0

Anda mungkin beruntung. Ini adalah paragraf pembuka kiriman di forum webkit-dev:

Banyak bahasa yang dikompilasi ke JavaScript hari ini untuk dijalankan di web. Sebagai alternatif, kami telah bereksperimen dengan mengaktifkan runtimes bahasa yang berbeda di WebKit untuk berjalan di halaman web bersama JavaScript ...

Anda dapat melihat seluruh pesan di sini .


0

JavaScript adalah jiwa peramban, itulah sebabnya sebagian besar upaya baru menghasilkan JavaScript (CoffeeScript adalah contoh yang jelas).
Di GWT, Anda kode logika sisi klien Anda dalam bahasa pemrograman Java dan toolkit dengan menghasilkan JavaScript.

ClojureScript adalah proyek yang menarik jika Anda menggunakan Lisp coding.

Jadi kelihatannya apa pun, JavaScript tetap ada di sini. (COBOL web mungkin?).


0

"Setiap pelanggan dapat memiliki mobil dicat warna apa saja yang dia inginkan asalkan hitam." - Henry Ford

Sudah ada sejumlah kompiler yang menargetkan javascript, dan Anda dapat memilih bahasa apa pun yang dikompilasi ke javascript.

Tautan Anda yang membahas nilai bahasa perantara membahasnya dalam konteks penerapan rangkaian kompiler, bukan dalam memberikan kode yang akan dikirimkan melalui jaringan dan dijalankan pada mesin klien. Javascript mungkin bukan format terbaik untuk itu, tetapi apa pun itu, Javascript tidak akan terlihat seperti CIL atau bytecode java.

Jika Anda membenci javascript, saya sarankan Anda pindah ke ruang pengembangan game Embedded, Scientific, atau, di mana C, Fortran, dan C ++ memerintah. Lini aplikasi bisnis sangat banyak pindah ke web, dan itu berarti lebih banyak Javascript, bukan kurang.

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.