İstediğim bir dilde istemci tarafı tarayıcı kodunu kodlayabilecek miyim? [kapalı]


15

Acımasızca dürüst olacağım: JavaScript'te istemci tarafı kodu yazmaktan nefret ediyorum. Az söylemek gerekirse, bu dilin hayranı değilim.

Tarayıcıların ara sanal bir makineden (CIL veya JVM gibi) değil, bir programlama dilini desteklediği bana aptalca geliyor . İkincisi, programcıların önceden belirlenmiş bir sabit dilde değil, belirli bir dilde (bir dereceye kadar) yazmalarına izin verecektir. Bu dil daha hızlı gelişebilir, çünkü yalnızca CIL / JVM / 'de yapılan değişiklikler her büyük tarayıcının yükseltilmesini gerektirir. Eski tarayıcı deneyimini etkilemeden dil özellikleri eklenebilir.

Ara dillerin getirdiği muazzam çaba tasarrufu iyi bilinmektedir . JavaScript dışında bir şeyde ve özellikle de önceden tasarlanmış, geliştirilmiş ve optimize edilmiş bir sanal makinede tarayıcı "komut dosyası" oluşturmaya yönelik herhangi bir girişim var mı? Herhangi bir momentumu var mı?


Yanıtlar:


11

Sorunuzu cevaplamak için evet, Javascript'i web komut dosyaları için daha uyumlu bir dil lehine kullanımdan kaldırılmaya çalışılmaktadır. Google, Dart dillerinin arkasında çok fazla itici güç oluşturuyor . Dart'ın zaten Chrome'a ​​gömülü olan kendi VM'si var, ancak diğer tarayıcıların henüz benimsediğinden emin değilim. CoffeeScript adında oldukça ümit verici bir dil de var .

Ayrıca HaXe adında çok sayıda geliştirme platformunun yanı sıra tüm geliştirme platformlarını tek bir dilde birleştirmeyi hedefliyoruz.

İnanın Javascript'i sevmekten yalnız değilsiniz, ama korkarım yakında bir yere gitmeyeceğim - aslında Windows 8 HTML5 / JS uygulamaları vb.İle çok fazla ivme kazanıyor gibi görünüyor. bahsetmeye başlıyorlar :)


9
Her şeyi tek bir dilde birleştirmek, arzulananın tam tersidir. Sizi yalnızca şu anki durumla aynı, JavaScript yerine farklı bir dille bırakıyor. Mesele şu ki, mevcut çabalar üzerine inşa edilmelidir: IL / CLR iyi kurulmuş, çoğu platform için zaten yüksek performanslı JITters'e sahiptir ve birkaç derleyici zaten birkaç dili derlemektedir. Web'i 21. yüzyıla getirmek için, tarayıcıların sürekli olarak kendi yeni eşyalarını pişirmeye çalışmak ve sıfırdan başlamak yerine bunu kullanmaları gerekir.
Timwi

3
@Timwi, CIL çok ağır ve içinde çok fazla bürokrasi var. Özel bir sınıfla dolu, şişirilmiş bir bayt kodu dosyası ve her bir onSomethingolay işleyicisine tüm hantal meta veriler eklemek mantıklı olmaz - basit bir komut dosyası dilinin 10-20 karakterini ayrıştırmak ve yorumlamak çok daha etkilidir.
SK-logic

1
@ SK-logic: Genel olarak yanlış bir CIL ve bayt kodu resmi var gibi görünüyor. İkili meta verilerin JavaScript gibi üst düzey bir sözdizimine kıyasla “hantal” olduğunu düşündürecek bir fikrim yok. En önemlisi, neden "her şey bir olay işleyicisi" diye bir fikrim yok. C # programları açıkça her olay işleyicisi için birden fazla derleme derlemez.
Timwi

1
@Timwi, kahvaltıda ECMA-335 yiyorum, bu yüzden CIL'in ne kadar hantal olduğunu çok iyi biliyorum. DOM düğümleri genellikle dinamik olarak oluşturulur. CIL'deki mevcut bir modüle bir şey eklemenin bir yolu yoktur - yeni bir modül tanımlamanız gerekir. Bir sınıfa ekleyemezsiniz - yeni bir sınıf tanımlamanız gerekir (hantal meta veriler eklenmiş olarak). Ve sadece küçük bir metin dizesini ayrıştırmak, yürütmek ve hemen atmak için CIL okuma, JITing ve yürütme maliyetini karşılaştırın. Özel yorumlamanın her türlü derlemeden çok daha verimli olduğu birçok durum vardır.
SK-logic

2
@ Timwi, bayt kodunu ortak payda ve iletişim formatı olarak kullanmayı öneriyorsunuz, değil mi? Demek istediğim, CIL'in mevcut spesifikasyonunun neredeyse işe yaramaz olması. ExpandoObject önemsizdir. Ve karmaşıklığı ayrıştırma konusundaki görüşünüz belirsizdir. CIL modülü kendi derleme referans tablosunu, meta veri belirteçleri tablosunu ve ancak o zaman sınıfları ve yöntemleri içerir. Tüm bu hantal şeyleri okumak ve JIT yapmak için gereken çabayı önemsiz bir üst düzey dil dizisini yorumlayarak karşılaştırın. Ayrıştırma maliyeti burada neredeyse sıfırdır. Her iki yaklaşımı da deneyin ve kendinizi karşılaştırın.
SK-logic

5

Javascript'in kendisi, diğer dillerin derlenebileceği bir sanal makine tanımlayan bir ara dil olarak görülebilir. GWT gibi projelerde bu kavram zaten başlıyor. Sıfırdan tasarlayacağınız şey olmayabilir, ancak "en sevdiğiniz dili" Javascript'e derleyebileceğiniz bir gerçeklik haline geliyor.


5

Aslında hayır. Javascript ile oldukça sıkışıp kaldınız.

Bu having, gemide başka diller Bunların her biri gerçekten javascript çünkü javascript sahip olduğunu çekiş kazanmıştır asla (Java uygulamaları, vbscript, vs.) getirmek için geçmişte çabaları olmuştur entegre .

Bahsettiğiniz şeyi oluşturmanın tek yolu, sanal bir makinede çalışan, derlenmiş istemci tarafında ve daha sonra yürütülen bir komut dosyası dili oluşturmaktır. Daha sonra her tarayıcının sanal makineyi kendi kod tabanına uygulaması gerekir, böylece tüm kod tüm tarayıcılarda çalışır. Ardından, tüm tarayıcıların komutları aynı şekilde yürütmesi için bir tür standartlara sahip olduğunuzdan emin olmanız gerekir. Tabii ki, tarayıcılar bağımsız olarak yaratılıyor, muhtemelen geliştiricilerin akılda tutmaları gereken tuhaflıklar olacaktır.

Ama şimdi Javascript'i yeni tanımladık.

Sonuçta seçimleriniz:

  1. Javascript'e alışmak
  2. Javascript için derlenen bir dil kullanmaya çalışın. (Seçenek 1'e geri dönen Javascript'i hala doğrulamak isteyeceğinizi unutmayın.)
  3. tarayıcıya eklenti olarak bulunan bir eylemi kullanın; örneğin, actioncript (Flash), ActiveX, java uygulaması, .Net (SilverLight). Bu, dilin birden çok satıcısı / uygulamasıyla ilgili sorunu önler, ancak dili entegre etmez .

Temel olarak, entegre bir dil istiyorsanız, Javascript ile sıkışıp kalırsınız.


2
Başka bir seçenek, javascript ve bunu kullanmak için derlenen bir dil kullanmak olacaktır.
Jetti

@Jetti sen düşünüyorsun CoffeeScript ? Sloganı - dedikleri gibi "Altın Kural" - "Bu sadece Javascript" . Ama aslında Javascript olan bir şey yazıyorsanız, gerçekten Javascript yazmıyor musunuz? Bu, jQuery'nin javascript olmadığını savunmak gibidir, çünkü daha temiz ve kullanımı daha kolaydır.
Richard


@Jetti Belki de iyi çalışırlardı. Ancak, tarayıcılar arası desteğin tuhaflığıyla, bunlardan herhangi birini önermek ve gerçek oluşturulan javascript'i doğrulamamak konusunda gerginim.
Richard

1
Bunun dışında javascript son derece korkunç bir ara dil ve tutarlı bir şekilde yürütülmesi çok zor.
Milind R

4

Aslında, Ecma standartlarında açıklandığı gibi javascript'ten nefret etmiyorsunuz, ancak garip, hata ve wtfs ile çeşitli tarayıcılarda korkunç uygulamadan nefret ediyorsunuz. Sunucu tarafı Javascript aslında oldukça keyifli. Ayrıca DOM Modeli, istemci tarafı javascript ağrısının% 80'inin nedenidir.

Hala başka bir dil kullanmak isterseniz, kullanabilirsiniz GWT sonra (çirkin) javascript veya içine derlemek, temelde Java yazalım ki, CoffeeScript JS üzerinde sözdizimsel şeker, JS içine derlemesinin söyledi.


9
Ben romkyns adına konuşamam, ama ben (JavaScript kendisi nefret ek olarak Bahsettiğiniz sorunlar). Nesne yönelimli değildir, statik yazımı yoktur, yararlı hata yönetimi yoktur ve modern işlevselliğin yararlı bir çerçevesi yoktur. Aynı zamanda tutarsız ve hantal. Ve bu arada, JS, noktalı virgül ekleme, en nefret edilen özelliği olan ECMA standardında.
Timwi

1
@Timwi, fonksiyon tabanlı ve isterseniz OO kodu yazabilirsiniz. Statik yazma güzeldir, ancak kodunuz iyi yazılırsa (küçük işlevler, uygun kapsam belirleme), nadiren sorun olur. Noktalı virgül yerleştirmeye gelince, bunu hafif bir sıkıntı olarak görüyorum. Beni sadece bir kez ısırdı, çünkü {bir nesnenin dönüşü ve farklı satırlarda açılması vardı . Hangi "modern işlevsellik çerçevesi" eksik buluyorsunuz?
CaffGeek

2
JavaScript'in kendisi en iyi dil değildir (kibarca koymak için). Nesne yönelimli şeyler (daha az - daha iyi), dinamik tip sistemi (ne yazık ki bu tür bir betik dili için gerçekten gerekli) hakkında umurumda değil, ancak ifadelerin varlığı ve uygun olmaması listeler ve tuples sinir bozucu. Hem JavaScript'te yazmak hem de JavaScript'i hedefleyen derleyiciler uygulamak için.
SK-logic

2
@Timwi: Nesnel yönelimi kötü bir şey olarak görmüyorsunuz, ancak her zaman böyle değil. Lütfen OOP'u kalkınma paradigmalarının gümüş mermisi olarak görmeyin. JS veya Scala gibi işlevsel yaklaşım da mükemmeldir. JS'de OOP olabilir, ancak temel fark, Sınıf tabanlı programlama yerine Prototip tabanlı programlama olmasıdır. OOP geniş bir addır ve Java / C # ile sınırlı değildir. Prototip tabanlı Sınıf tabanlı farklıdır ve iyi kullanılır, Sınıf tabanlı kadar güçlüdür.
Clement Herreman

2
@ClementHerreman: JavaScript, istemci tarafı ile sınırlı değildir, ancak bu tartışma istemci tarafı ile ilgilidir. JavaScript , IL'ye kıyasla hemen hemen her dili kullanmanıza izin veren bir dezavantaj olan prototip tabanlı ile sınırlıdır.
Timwi

2

Bu soru zaman zaman ortaya çıkıyor.

Neden komut dosyası etiketlerinde sadece Javascript yerine başka dillerimiz yok?

Geri gün IE Javascript alternatif olarak VB tanıttı. Sanırım zaten yakalandığında standartların cehenneme nasıl yol açacağını görebiliyorsunuz ...

Öyleyse neden ortak bir standart ara dil olmasın?

Brendan Eich'ten yakın gelecekte neden bir ara bayt kodu dili görmediğini açıklayan eski bir podcast var:

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

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

Temel sorun, ara dil (CIL ve JVM bayt kodları gibi) genel olmaya çalışırken, çoğu zaman çok düşük düzeyli ve kendileri için derlenen orijinal üst düzey dillere çok bağlı oldukları ortaya çıkar. Örneğin, JVM'de kuyruk özyinelemeli işlevleri gerçekten uygulayamazsınız - düşük düzeyli bir bayt kodu soyutlamasına çok erken bağlanırsak hangi dil özelliklerini veya uygulama seçeneklerini uygulayamayız?

Bu arada, Javascript, gelişmiş anlambilim ve çoklu, farklı, etkili uygulamalara sahip esnek, yüksek seviyeli bir dildir. Gelecekte görebileceğimiz şey Javascript'in kendisi bir ara dil olarak - Maalesef bu biraz olgunlaşmamış ve bugün itibariyle JS'ye birkaç dil derleniyor.


Ancak bu argüman, JVM ve CIL için olduğu kadar JavaScript için de geçerli, değil mi? :) JavaScript için geçerli olan tek şey, zaten tüm tarayıcılar tarafından desteklenmiş olmasıdır.
Roman Starkov

Nokta daha incelikli - Javascript, çoğu ara dilden daha yüksek bir seviyede açıklanıyor, bu yüzden uygulamalar ne yapılacağını seçmede daha fazla yer kaplıyor. (Tabii ki, bu hepsi bir gül denizi değil - sadece web için bir IL hakkında ilk düşünen olmadığımız ve bu kadar basit olmadığını belirtmek
istedim

1

Evet. Dart, Coffeescript ve Java'yı Javascript'e derleyebilirsiniz. Javascript bayt kodu oluşturmak için LLVM için bir derleyici arka ucu olan Emscripten var (ve LLVM, inanıyorum ki birkaç dili işler).

Ancak JS'ye derlemek dışında, kısa bir zaman dilimi içinde değil. IE6 10 yaşında ve hala tekmeliyor. Umarım mevcut tarayıcılar (diğer dilleri desteklemez) bu kadar uzun süre hayatta kalamazlar, ancak birkaç yıl boyunca etrafta olacaklar ve "sadece Javascript'i destekleyen tarayıcıları desteklemeliyiz, bu yüzden Javascript'i kullanmalıyız ", CSS3'ten çok daha zor bir yolla siteniz CSS3 olmadan çalışabilir, ancak istemci tarafı komut dosyası olmadan çalışmasını sağlayın.


0

Sadece şanslı olabilirsin. Bu, webkit-dev forumundaki bir sunumun açılış paragrafıdır:

Birçok dil, web üzerinde çalışmak için bugün JavaScript'i derlemektedir. Alternatif olarak, WebKit'te farklı dil çalışma zamanlarının JavaScript ile birlikte web sayfalarında çalışmasını sağlamayı deniyoruz ...

İletinin geri kalanını burada görüntüleyebilirsiniz .


0

JavaScript, tarayıcıların ruhudur, bu yüzden yeni denemelerin çoğu JavaScript üretmektedir (CoffeeScript açık bir örnektir).
GWT'de, istemci tarafı mantığınızı Java programlama dilinde kodlar ve araç setini JavaScript oluşturur.

ClojureScript, Lisp kodlamasındaysanız ilginç bir projedir.

Ne olursa olsun, JavaScript kalmak için burada. (Web'in COBOL'u belki?).


0

"Herhangi bir müşteri, siyah olduğu sürece istediği rengi boyanmış bir araca sahip olabilir." -- Henry Ford

Javascript'i hedefleyen çok sayıda derleyici zaten var ve javascript için derlenen herhangi bir dili seçebilirsiniz .

Ara dillerin değerini tartışan bağlantınız, bunları bir ağ üzerinden gönderilecek ve bir istemci makinesinde çalıştırılacak kod sağlamada değil, bir derleyici paketi uygulama bağlamında tartışır. Javascript bunun için en iyi format olmayabilir, ancak her neyse, CIL veya java bayt kodlarına çok benzemez.

Javascriptten nefret ediyorsanız, C, Fortran ve C ++ 'ın tünele hükmettiği Gömülü, Bilimsel veya oyun geliştirme alanına girmenizi öneririm. İş kolu uygulamaları çok fazla web'e taşınıyor ve bu daha az değil, daha fazla Javascript anlamına geliyor.

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.