Web sayfalarındaki JavaScript'e statik olarak yazılmış bir alternatif pratik olur mu?


9

Dinamik ve statik yazım tercihi büyük ölçüde bir zevk meselesidir ve farklı insanlar bunları farklı durumlarda aşağı yukarı uygun bulmaktadır.

Sorum şu ki, istemci tarafı web sayfası genişletme vb. İçin JavaScript'e statik olarak yazılmış bir alternatif olması mümkün müdür?


3
Neden olmasın? `` ``
Josh K

2
Her tarayıcının uygulamak zorunda olduğu varsayımsal, statik olarak yazılmış bir dilden mi, yoksa zaten var olan olasılıklardan mı bahsediyorsunuz?
user281377

2
Sanırım Java uygulamalarını kullanabilirsiniz.
David Thornley

Bahsettiğin @ammoQ, Varsayımsal
Armand

@Josh bilmiyorum. @David LOL, bunun için teşekkürler!
Armand

Yanıtlar:


22

Böyle bir şeyin var olamayacağına dair kesinlikle teknik bir neden yoktur. Dinamik olarak yazılan dillerin kullanımını zorunlu kılan istemci tarafı kodu hakkında özel bir şey yoktur .


1
Dart isteğe bağlı statik yazım özelliğine sahiptir ancak sıradan Javascript ile derlenir. www.dartlang.com
Nishant George Agrwal

16

Başka bir dilin geniş bir şekilde benimsenmesi pek olası olmadığından, en iyi seçeneğiniz, statik olarak yazılmış bir JavaScript sürümü (yani, java'ya yakın bir dil) ve bunu normal JavaScript'e dönüştüren bir ön işlemci oluşturmak olacaktır.

Örneğin, komut dosyanız şöyle görünür:

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

ve önişlemci her değişkenin, fonksiyonun, nesnenin vb. türüne göre doğru kullanıldığını kontrol eder ve betiği

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

her tarayıcının üstesinden gelebilir.


5
Pragmatik bir yaklaşım için +1
Gary Rowe

Gerçekten bu soru pragmatizmle ilgili değil - teoriyle ilgili. Güncellenecek.
Armand

2
Ayrıca tür çıkarımı kullanmanızı öneririm.
Oliver Weiler

Yardımcı Yöntem: Çok iyi bir öneri, ancak şimdi örneğimi değiştirmiyorum, çünkü tür çıkarımı statik sürümü dinamik sürüme çok benzetecektir, çünkü örnek çok basittir.
user281377

4
Ben statik olarak yazılmış bir javascript sözdizimi dışında, java çok yakın olacağını sanmıyorum. Javascript ve Java'nın statik ve dinamik yazmanın ötesinde birçok farkı vardır - biri için sınıf tabanlı ve prototip tabanlı OO. Örnek kod sınıf tabanlı gibi göründüğünden, ben "staticjavascript" bu dil için bir yanlış adlandırma olduğunu ve daha ziyade "istemci tarafı java" gibi bir şey olarak adlandırılmalıdır. Javascript derlemek için +1 olsa da (btw Google Web Toolkit java javascript derlemek).
sepp2k

8

Sorum şu ki, istemci tarafı web sayfası genişletme vb. İçin JavaScript'e statik olarak yazılmış bir alternatif olması mümkün müdür?

Elbette. Google Web Toolkit Hemen düşünmek ... JavaScript Java statik-daktilo da hazırlar: bütün güzellik ve Java esneklik, makine tarafından oluşturulan JavaScript tüm performansla!

Cidden, bunu her türlü dil için yapabilirsiniz ve birçoğu denemiştir (C ve C # için de derleyiciler vardır veya olmuştur). Nihai sonucun pratik olup olmadığı, ne yapmaya çalıştığınıza bağlıdır: Google, çok büyük istemci tarafı uygulamaları geliştirmek için tutarlı bir platformdan sonradır ve önyükleme yapmak için kendi JavaScript motoruna sahiptir; Fareyle üzerine gelme efektleri için böyle bir canavarı benimsemenin ve garip AJAX çağrısının, biraz şifrelenmemiş kodla yaşamayı öğrenmekten çok daha fazla acı getirdiğini görebilirsiniz ...


3
Tamamen GWT "faydaları" hakkında şaka olup olmadığını söyleyemem. Eğer öyleyse, bravo. GWT ile çalışmak hayatımın en çılgın deneyimlerinden biriydi.
Nicole

@Renesis: Javascript ve tarayıcı uyumluluklarıyla çalışmak sanki çıldırmıyor muydu? Ancak, tek bir görüntüde birden fazla görüntü indirmek ve daha sonra bunları istemcide kesmek gibi kaygan özelliklere sahiptir.
Macneil

1
@Macneil Şimdiye kadar bunu düzeltmiş olabilirler, ancak Sprites ile çalışırken neredeyse tüm faydaları reddetti çünkü otomatik olarak istemediğiniz diğer CSS arka plan özelliklerini yazdı, bu yüzden her seferinde CSS'nizi geçersiz kılmak zorunda kaldınız .
Nicole

6

Statik olarak yazılan dillerin faydalarının çoğu derleme zamanında gerçekleştirilir. Dil müşteri üzerinde yorumlanacaksa, bu avantajların büyük bir kısmı kaybolur. Bunları sunucuda derlerseniz, onları nasıl yükleyeceğinizi ve istemcide çalıştıracağınızı anlamanız gerekir (ActiveX denetimlerini düşünün). Karma bir yaklaşımla gidebilirsiniz (bazı orta düzeyde tokenize formla derleyin), ancak temelde Java uygulamalarına geri dönersiniz.


2
+1 , sadece mümkünse cevap vermemekle kalmamasının nedenini açıklamak için .

4

Zaten var.

ActionScript 3 (Flash ve Flex'in arkasındaki komut dosyası dili), güçlü türleri uygulayan bir ECMAScript lehçesidir ve JavaScript ile aşağı yukarı aynı istemci tarafı biçiminde kullanabilirsiniz (fark, AS3'ün bir flash eklentisi gerektirmesi ve derlenmiştir). Ben şahsen bu gün ondan uzak durmaya çalışıyorum, ama "statik" kampta iseniz, bir koşuşturma verin.

Bu asıl soruyu cevaplar ve şimdi buna sahibiz, ikincil sorunuz "Flash pratik mi?" Cevap "evet", birkaç "if" ve "ama"

  • ... herhangi bir nedenle kodunuzu gizlemeniz gerekiyorsa.
  • ... çok, çok (geçmiş jQuery seviyesi) yüksek bir etkileşim düzeyi istiyorsanız
  • ... ancak HTML5 olmasa bile, tarayıcılar arası uyumluluk son zamanlarda çok daha iyi hale geliyor.
  • ... ancak HTML5 çok yakında.
  • ... ancak statik yazım / derlemenin en büyük çekimlerinden biri (yorumlamanın aksine) optimizasyonlarla sağladığı ek hızdır (ve tip sistemine rağmen Flash gerçekten çok iyi bir hıza sahip değildir)

AS3, terk edilmiş ES4'ü temel alır.
gsnedders

3

Teorik olarak, herhangi bir komut dosyasını istediğiniz bir sayfaya yapıştırabilirsiniz. <script>Etiketi bir vardır typesonuçta niteliği.

Tek engel, farklı tarayıcılarda kullanılmaya değer hale getirmek için uygulama açısından yeterli pazar payı elde etmektir.


Yani evet, bu noktada pek olası değil.


Peki, statik yazmayla ilgili bir sorun yok mu? Bu yakalamanın pratikliğinden çok rahatsız değilim.
Armand

1
@Alison: İstediğiniz metin içeriğini komut dosyası etiketine yerleştirebilirsiniz (bir istisna dışında - karakter dizisini içeremez </script>). Gerçekten isterseniz Brainf * ck kodunu buraya yapıştırabilirsiniz. O zaman tek yapmanız gereken, kullanmak istediğiniz tarayıcıda seçtiğiniz dil için bir tercüman uygulamaktır.
Anon.

@Anon. teşekkürler, çok ilginç. Bu kadar kolaysa, muhtemelen bir yerde yapılır. Bir <script type="vbscript">zamanlar hatırlıyorum ...
Armand

Alison: vbscript sadece IE'ydi ve bazı insanlar IE'nin pazar payı>% 90 olduğunda kullandı. Bugün, IE'nin pazar payı% 50 civarında, muhtemelen dünyanın bazı bölgelerinde daha az olduğu için, büyük bir hareketsizlik; ve hiçbir tarayıcı bu kadar çok pazar payına sahip olmadığı sürece, yeni bir istemci tarafı kodlama dili gibi bir şeyin olmasını beklemeyin.
user281377

@Alison: Internet Explorer hala burada intranet siteleri, bilmem gereken ... Bir komut dosyası dili olarak VBScript desteklediğini kullanım o (ve dolayısıyla gerektiren Internet Explorer - urgh!)
Dekan Harding

2

Pratik olur mu? Hayır.

Mümkün mü? Evet!

JavaScript'e kendi statik olarak yazılmış alternatifinizi geliştirmek en iyi ihtimalle zaman alıcı olacaktır. En kötüsü, mevcut tarayıcıları istemci komut dosyası dilinizi uygulamaya ikna edemezsiniz ve kendi dilinizi yazmanız gerekir.


Açıklamak ister misiniz?
back2dos

Takip paragrafı eklendi.
Marcie

Sadece pratik olmamasının tek sebebinin mevcut durum olduğunu eklemeliyim . Javascript yayınlanmadan hemen önceki noktaya geri dönseydik, işler farklı olurdu.
yakiv


1

HaXe gibi dilleri, kodunuzu statik olarak yazarak yazmak ve javascript'e aktarmak için kullanabilirsiniz. JavaScript çok hızlı hale geliyor, bu nedenle çıktı dili olarak yeterli. Statik olarak yazılan bir dili bir web standardı olarak uygulamaya çalışmak imkansızdır. JavaScript'e statik yazım girişimleri, geniş tartışma nedenleri nedeniyle başarısız oldu.


1

Teknik olarak mümkün olur mu? Java'da uygulanacaksa, önemli performans kaybı olmadan "çok, çok zor ama mümkün" diyebilirim.

Aslında şu anda Java'da statik olarak yazılmış bir DSL'yi el yazısı olarak kullanıyorum ve çalışma zamanı tür denetiminden kaçınmanın tek yolu jenerikleri kullanmak ve "denetlenmemiş" uyarıları bastırmak ... yani, uygulama zamanı gelene kadar çok boyutlu diziler (sınıf parametreleri derleme zamanında bilinmelidir ve bu nedenle doğal olarak sonludur, oysa çok boyutlu diziler sonsuz sayıda türü temsil eder ...) Yine de bunu anlamaya çalışıyorum, ne yazık ki-- eminim ki Kullanıcı tanımlı sınıflarla benzer sorunlarla karşılaşırsınız.

Şey, bu tür problemler üzerinde tökezlemeye devam ediyorum, ama bir süre üzerinde oturduktan sonra, iyi bir çözüm buluyorum. Yani, bunu yapmak ve statik yazmanın performans faydalarına sahip olmak için (çalışma zamanı tipi kontrolü yok), bunun son derece zor olduğunu, ancak imkansız olmadığını söyleyebilirim. Performans eksi, sert ama çok mümkün olduğunu söyleyebilirim.

Bunun eski bir soru olduğunu biliyorum, deneyimimin birileri için değerli olabileceğini düşündüm.


0

İstemci tarafı komut dosyalarını, kullanıcı aracısının (tarayıcı) desteklediği herhangi bir komut dosyası dilinde yazmak teknik olarak mümkündür. Uygulamada, yaygın olarak desteklenen tek dil JavaScript / ECMAScript'tir. Tarayıcı üreticilerini bu aşamada yeni bir dil uygulamaya ve desteklemeye ikna etmenin başarılı olması muhtemel değildir; bu nedenle, statik olarak yazılan yeni bir istemci tarafı dili kullanmak istiyorsanız, yeni dili JavaScript'e çevirmeniz veya JavaScript'te bunun için bir tercüman uygulamanız gerekir.

Zaten böyle bir şey yapan birkaç proje var; örneğin, diğer yanıtlardan birinde belirtildiği gibi Google Web Araç Seti .


0

Gerçek dünyada kullanılan tüm tarayıcıları yeni bir dili desteklemek için alma umudunuz olmadığı düşünüldüğünde; dilin jscript'e derlenmesi gerekir.

Web'in tüm örnekleri jscript'te olduğundan, dil çoğunlukla jscript'e benzemelidir.

Ben statik bir denetleyicisi tarafından kontrol ancak aynı zamanda geçerli jscript jscript bir "alt kümesi" var kapsamı olduğunu düşünüyorum. Örneğin:

  • Tüm değişkenlerin, ilk kullanımdan önce türleri olduğunu söyleyen bir yorumu olmalıdır.
  • Değişkenlerin tüm kullanımları yukarıdakilerle geçerli olmalıdır.
  • Bir yorumda bildirilmediyse işlevler / sınıf kullanılamaz #
  • Js dosyasının üst kısmındaki yorum, bağımlı olduğu tüm diğer js dosyalarını listelemelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.