Apakah alternatif yang diketik secara statis untuk JavaScript pada halaman web akan praktis?

9

Preferensi untuk pengetikan dinamis dan statis sebagian besar adalah masalah selera, dan orang yang berbeda menemukan mereka lebih cocok atau kurang cocok dalam situasi yang berbeda.

Pertanyaan saya adalah, apakah mungkin secara teknis memiliki alternatif yang diketik secara statis untuk JavaScript untuk augmentasi halaman web sisi klien dll.?

Armand
sumber
3
Kenapa tidak? `` ``
Josh K
2
Apakah Anda berbicara tentang bahasa yang diketik secara statis hipotetis bahwa setiap browser harus menerapkan, atau kemungkinan sudah ada?
user281377
2
Anda bisa menggunakan applet Java, saya kira.
David Thornley
@ammoQ yang Anda sebutkan, Hipotetis
Armand
@ Astaga, saya tidak tahu. @ David LOL, terima kasih untuk itu!
Armand

Jawaban:

22

Tentu saja tidak ada alasan teknis hal semacam itu tidak bisa ada. Tidak ada yang khusus tentang kode sisi klien yang mengamanatkan penggunaan bahasa yang diketik secara dinamis.

GrandmasterB
sumber
1
Dart memiliki pengetikan statis opsional tetapi mengkompilasi ke Javascript biasa. www.dartlang.com
Nishant George Agrwal
16

Karena sangat tidak mungkin bahwa bahasa lain akan menemukan adopsi luas, taruhan terbaik Anda adalah membuat versi JavaScript yang diketik secara statis (yaitu bahasa yang dekat dengan java) dan preprocessor yang mengubahnya menjadi JavaScript normal.

Misalnya, skrip Anda terlihat seperti itu:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

dan preprocessor memeriksa bahwa setiap variabel, fungsi, objek dll digunakan dengan benar sesuai dengan jenisnya, dan mengubah skrip menjadi

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

yang dapat ditangani oleh setiap browser.

pengguna281377
sumber
5
+1 untuk pendekatan pragmatis
Gary Rowe
Sungguh pertanyaan ini bukan tentang pragmatisme - ini tentang teori. Akan diperbarui.
Armand
2
Saya juga menyarankan menggunakan inferensi tipe.
Oliver Weiler
Metode Penolong: Saran yang sangat bagus, tetapi saya tidak mengubah contoh saya sekarang, karena inferensi jenis akan membuat versi statis sangat mirip dengan versi dinamis, karena contohnya sangat sederhana.
user281377
4
Saya tidak berpikir javascript yang diketik secara statis akan sangat dekat dengan java, selain secara sintaksis. Javascript dan Java memiliki banyak perbedaan di luar pengetikan statis vs dinamis - untuk OO berbasis kelas vs prototipe. Karena kode sampel Anda tampaknya berbasis kelas, saya berpendapat bahwa "staticjavascript" adalah istilah yang salah untuk bahasa itu dan lebih baik disebut sesuatu seperti "java sisi-klien". +1 untuk kompilasi ke javascript (namun Google Web Toolkit mengkompilasi java ke javascript).
sepp2k
8

Pertanyaan saya adalah, apakah mungkin secara teknis memiliki alternatif yang diketik secara statis untuk JavaScript untuk augmentasi halaman web sisi klien dll.?

Tentu. The Google Web Toolkit mengkompilasi statis-mengetik Jawa untuk JavaScript ... Pikirkanlah hal ini: semua keindahan dan fleksibilitas dari Jawa, dengan semua kinerja mesin yang dihasilkan JavaScript!

Namun serius, Anda dapat melakukan ini untuk semua jenis bahasa, dan banyak yang telah mencoba (ada, atau pernah, kompiler untuk C dan C # juga). Apakah hasil akhirnya praktis atau tidak tergantung pada apa yang ingin Anda capai: Google mengejar platform yang konsisten untuk mengembangkan aplikasi sisi klien yang sangat besar, dan memiliki mesin JavaScript sendiri untuk boot; Anda mungkin menemukan bahwa mengadopsi binatang buas seperti itu untuk efek melayang-layang dan panggilan AJAX yang aneh menimbulkan rasa sakit yang jauh lebih daripada sekadar belajar hidup dengan sedikit kode yang tidak diketik ...

Shog9
sumber
3
Saya tidak dapat mengatakan apakah Anda bercanda tentang "manfaat" GWT. Jika ya, bravo. Bekerja dengan GWT adalah salah satu pengalaman paling menjengkelkan dalam hidup saya.
Nicole
@Renesis: Seolah-olah bekerja dengan Javascript dan kompatibilitas browser belum menjengkelkan? Tapi itu memang memiliki fitur yang apik, seperti mengunduh banyak gambar dalam satu gambar, dan kemudian memotongnya pada klien.
Macneil
1
@ Macneil Mereka mungkin sudah memperbaikinya sekarang, tetapi ketika saya bekerja dengan Sprite itu hampir meniadakan semua manfaat karena secara otomatis menulis properti latar belakang CSS lain yang mungkin tidak Anda inginkan, jadi Anda harus mengacaukan CSS Anda setiap kali menimpanya .
Nicole
6

Sebagian besar manfaat dari bahasa yang diketik secara statis diwujudkan pada waktu kompilasi. Jika bahasa akan ditafsirkan pada klien, maka banyak dari keuntungan itu hilang. Jika Anda mengompilasinya di server, maka Anda perlu mencari cara untuk membuatnya dimuat dan dijalankan pada klien (pikirkan kontrol ActiveX). Anda bisa menggunakan pendekatan hybrid (kompilasi ke beberapa bentuk token yang sudah di-intermediate), tetapi pada dasarnya Anda kembali ke applet Java.

TMN
sumber
2
+1 untuk menjelaskan alasan yang memungkinkan mengapa tidak , tidak hanya menjawab jika itu mungkin.
4

Sudah ada.

ActionScript 3 (bahasa scripting di balik Flash dan Flex) adalah dialek ECMAScript yang mengimplementasikan tipe yang kuat, dan Anda dapat menggunakannya dengan cara yang kurang lebih sama dengan sisi klien seperti JavaScript (perbedaannya adalah bahwa AS3 membutuhkan plugin flash, dan dikompilasi). Saya pribadi mencoba untuk menghindarinya akhir-akhir ini, tetapi jika Anda berada di kamp "statis", cobalah berputar.

Itu menjawab pertanyaan utama, dan sekarang kita memiliki itu, pertanyaan kedua Anda menjadi "Apakah Flash praktis?" Jawabannya adalah "ya", dengan beberapa "jika" dan "tetapi"

  • ... jika Anda perlu menyembunyikan kode Anda untuk alasan apa pun.
  • ... jika Anda menginginkan tingkat interaktivitas yang sangat, sangat (sangat jQuery)
  • ... tetapi bahkan tanpa HTML5, kompatibilitas lintas-browser menjadi jauh lebih baik belakangan ini.
  • ... tapi HTML5 akan segera hadir.
  • ... tetapi salah satu kelebihan besar dari pengetikan / kompilasi statis (sebagai lawan interpretasi) adalah kecepatan tambahan yang dimungkinkan melalui pengoptimalan (dan Flash tidak benar-benar memiliki kecepatan yang sangat baik, terlepas dari sistem tipenya)
Inaimathi
sumber
AS3 didasarkan pada ES4 yang ditinggalkan.
gsnedders
3

Secara teori, Anda dapat menempelkan skrip apa pun pada halaman yang Anda inginkan. The <script>tag memiliki typeatribut, setelah semua.

Satu-satunya penghalang adalah mendapatkan pangsa pasar yang cukup dalam hal implementasi di berbagai browser untuk membuatnya layak digunakan.


Jadi ya, agak tidak mungkin pada saat ini.

Segera.
sumber
Jadi, tidak ada masalah dengan pengetikan statis? Saya tidak terlalu peduli dengan kepraktisan dari penangkapan ini.
Armand
1
@Alison: Anda dapat menempatkan konten teks yang Anda inginkan dalam tag skrip (dengan satu pengecualian - tidak dapat berisi urutan karakter </script>). Anda dapat menempelkan kode Brainf * ck di sana jika Anda benar-benar menginginkannya. Maka yang perlu Anda lakukan adalah menerapkan juru bahasa untuk bahasa pilihan Anda di peramban yang ingin Anda gunakan.
Anon.
@Segera. terima kasih, sangat menarik. Jika semudah itu, itu mungkin dilakukan di suatu tempat. Saya ingat <script type="vbscript">sekali waktu ...
Armand
Alison: vbscript hanya untuk IE, dan beberapa orang menggunakannya ketika pangsa pasar IE> 90%. Hari ini, dengan pangsa pasar IE di suatu tempat sekitar 50%, mungkin lebih sedikit di beberapa bagian dunia, ini adalah larangan utama; dan selama tidak ada browser yang mendapatkan pangsa pasar sebanyak itu lagi, jangan berharap hal seperti bahasa scripting sisi klien baru terjadi.
user281377
@Alison: Internet Explorer masih mendukung VBScript sebagai bahasa scripting ... Saya harus tahu, kami memiliki situs intranet di sini yang menggunakannya (dan karenanya memerlukan Internet Explorer - urgh!)
Dean Harding
2

Apakah ini praktis? Tidak.

Apa itu mungkin? Iya!

Mengembangkan alternatif Anda sendiri yang diketik secara statis untuk JavaScript akan menghabiskan waktu, paling baik. Paling buruk, Anda tidak akan dapat meyakinkan browser yang ada untuk mengimplementasikan bahasa skrip klien Anda, dan harus menulis sendiri.

Marcie
sumber
Mau jelaskan?
back2dos
Menambahkan paragraf tindak lanjut.
Marcie
Saya hanya menambahkan bahwa satu - satunya alasan mengapa hal itu mungkin tidak praktis adalah situasi saat ini. Jika kita kembali ke titik tepat sebelum Javascript dirilis, semuanya akan berbeda.
yakiv
1

Anda dapat menggunakan bahasa seperti haXe untuk menulis kode Anda dengan cara yang diketik secara statis dan mengekspornya ke javascript. JavaScript menjadi sangat cepat, sehingga cukup sebagai bahasa output. Mencoba menerapkan bahasa yang diketik secara statis sebagai standar web hampir mustahil. Upaya untuk memasukkan pengetikan statis ke dalam JavaScript gagal karena alasan luas untuk didiskusikan.

back2dos
sumber
1

Apakah secara teknis itu mungkin? Jika itu akan diterapkan di Jawa, saya akan mengatakan "sangat, sangat sulit, tetapi mungkin" tanpa kehilangan kinerja yang signifikan.

Saya sebenarnya menulis DSL yang diketik secara statis di Jawa saat ini, dan satu-satunya cara yang saya temukan untuk menghindari pengecekan tipe runtime adalah dengan menggunakan obat generik dan menekan peringatan "tidak dicentang" ... yaitu, sampai saatnya tiba untuk mengimplementasikan array multi-dimensi (parameter kelas harus diketahui pada waktu kompilasi dan karenanya secara inheren terbatas, sedangkan array multi-dimensi mewakili jumlah jenis yang tak terbatas ...) Masih mencoba mencari yang satu ini, sayangnya - saya yakin saya akan mengalami masalah serupa dengan kelas yang ditentukan pengguna.

Masalahnya, saya terus menemukan masalah seperti ini, tetapi setelah duduk sebentar, saya menemukan solusi yang bagus. Jadi, untuk melakukannya dan memiliki manfaat kinerja pengetikan statis (tidak ada pengecekan tipe runtime), saya akan mengatakan itu sangat sulit, tetapi bukan tidak mungkin. Minus kinerjanya, saya katakan keras tapi sangat mungkin.

Saya tahu ini pertanyaan lama, hanya berpikir pengalaman saya mungkin berharga bagi seseorang.

Philip
sumber
0

Secara teknis dimungkinkan untuk menulis skrip sisi klien dalam bahasa skrip apa pun yang didukung agen pengguna (browser). Dalam praktiknya, satu-satunya bahasa yang didukung secara luas adalah JavaScript / ECMAScript. Meyakinkan pembuat browser untuk menerapkan dan mendukung bahasa baru pada tahap ini tidak mungkin berhasil; dengan demikian, jika Anda ingin menggunakan bahasa sisi klien yang diketik secara statis, Anda perlu menerjemahkan bahasa baru itu ke JavaScript, atau mengimplementasikan juru bahasa dalam JavaScript.

Ada beberapa proyek yang sudah melakukan hal seperti ini; misalnya, Google Web Toolkit , sebagaimana disebutkan dalam salah satu jawaban lainnya.

mithrandi
sumber
0

Mengingat Anda tidak memiliki harapan untuk mendapatkan semua browser yang digunakan di dunia nyata untuk mendukung bahasa baru; bahasa harus dikompilasi ke jscript.

Karena semua contoh web menggunakan jscript, bahasa tersebut sebagian besar akan terlihat seperti jscript.

Saya pikir ada ruang lingkup dengan memiliki "sub set" jscript yang diperiksa oleh pemeriksa statis tetapi juga jscript yang valid. Misalnya:

  • Semua variabel harus memiliki komentar yang mengatakan ada jenis sebelum penggunaan pertama.
  • Semua penggunaan variabel harus valid dengan yang di atas.
  • Fungsi / kelas tidak dapat digunakan jika belum dinyatakan dalam komentar #
  • Sebuah komentar di bagian atas file js harus mencantumkan semua file js lain yang bergantung padanya.
Ian
sumber