Webサイト用に他のクライアント側スクリプト言語がないのはなぜですか?[閉まっている]


35

今日のブラウザでJavaScriptと一部のVBScriptがサポートされているのはなぜですか?JavaScriptがすべて優れていることは知っていますが、別のプログラミング言語を使用するオプションがないと、さまざまな開発スタイルを促進できませんか?


1
Stack Overflowでこの質問を参照してください:stackoverflow.com/questions/2872037/…
Corey

1
あなたの質問は、まさにGoogleがGWTを作った理由です。
ジョッキング

1
DOM APIの目的は、複数の言語をサポートすることだったと思います。実は、JSは実際にこの課題に非常に適しています。それは誰のビジネスのようにも正規化され、一流の機能はイベント駆動型のパラダイムの中で巨大です。本当に思いついたのは、MSにその決定をさせようとする人は誰もいなかったということです。また、Javaアプレットは本当に本当に不自由でした。
エリック・レペン

回答:


33

複数の言語のサポートを追加する必要はありません。解決策は、言語実装者が使用できる汎用バイトコードで標準化することです。しかし、現時点ではこれについての計画はありません(提案されています)。

言語はJavascriptの上にも実装できます。Javascriptは、他の言語をその上に実装できるほど十分に優れています。そして、これにはすでに多くの例があります。


3
+1-JavaScriptは他の言語の抽象化として使用できる強力な言語であることを指摘するため。クライアント側のC ++またはJavaを実行するFirefox拡張機能を作成するのは興味深いプロジェクトです。 <script type="text/cpp" src="test.cpp"></script>
jmort253

2
@ jmort253、ネイティブクライアントを見てください。
dan_waterworth

ネイティブクライアントは非常に興味深いものですが、Mozillaがそれを採用しない限り、牽引力はありません。最後に、彼らがまだそれを引き受ける準備ができていないことを確認した。
nkassis

1
数年前にGestaltを見つけました。gestalt.codeplex.com は、Javascriptの上に他のスクリプト言語を構築する良い例です。
ジムシューベルト

2
別の例:Google Web Toolkit?JavaはJavaScriptにコンパイルされます
MarkJ

21

JavaScriptはデファクトですスタンダードと全く競争が正確に公平ではないではありませんがあるという理由だけで、標準なので1996年からあったが、私は文句をたくさん聞いていない理由を含め、他の言語ではありません。

別の「標準」言語を追加すると、あらゆる種類の楽しい小さな問題が促進されます。

  • 他の言語でどのように機能しますか?
  • DOMは共有されますか?
  • 両方で書かれたスクリプトはまだ機能しますか
  • 両方へのライブラリの移植

8
実際、JavaScriptはMozillaのGeckoで使用されている言語だと思います。IEにはJScriptがあります。他のほとんどのブラウザは、ECMAScript仕様にほぼ従うものを使用します。これらのすべての言語は、単純化のために「JavaScript」と呼ばれていますが、実際には異なります。
-Mchl

1
同じバイトコードを生成する複数の言語を使用できます。JVMを見てください。Groovy、Java、Scala、Clojure、jRubyはJVMバイトコードに直接コンパイルできます。これにより、同じDOM APIを共有し、相互運用可能にできます。解釈されているため、JavaScript VMで実装するのは指数関数的に難しくなりますが。
デビッドセルゲイ

21

Javascriptのみのサポートについては、ブラウザー間の不一致を考えてください。次に、さらに多くの言語があった場合にどうなるかを考えます。


5
ええ、クライアントサイドのVBScriptが既にあります。
オコド

1
+1メインブラウザーとそのバージョンごとに記憶する他の言語のサブセットがあれば、頭が爆発すると思います。いい答えだ。
jmort253

4
これはちょっとした選択かもしれませんが、...ブラウザのJavaScript [ECMAScript] のサポートは、最初から全面的に非常に一貫しています。一貫性のないものは、DOM(および関連するメソッド)の実装です。実用的な(そして歴史的な)観点から、JSの唯一の実際の使用はブラウザーでDOMを操作することであるため、2つを分離することは困難ですが、サーバー側のJS(NodeJSなど)の台頭により、これは実際にはいくぶん重要な区別になります。
josh3736

答えとしてこれをほとんど正確に書くつもりでした、インターネットには従わないか、サポートされない十分な標準があります。私たちが持っているごちゃごちゃした混乱がそれと同じくらいうまくいくという事実は奇跡にほかなりません。
リャサル

1
ジョシュは正しい。それは、物事がどのようにレンダリングされ、JSによってアクセスされるべきかについての個々のブラウザのひどいアイデアにプラグインする場所です。それは、物がいものになりましたが、IEは最終的にはそのフロントで長年の独自のAPIの問題に少なくとも対処していますMSがブラウザをファイルナビゲーター-jackassesにリンクするという運命的な決定により、ほぼすべての点で最新のものに遅れをとる)。
エリックReppen

6

ブラウザは標準化する必要があるため、開発したものはどこでも、すべてのブラウザで機能します。

複数の言語を使用する場合は、すべての言語が非常によく似ていることを確認する必要があります。あなたがWeb開発者であり、一部の地域でサポートされているかどうかに関係なく言語を選択できる場合、それは追加の頭痛の種です。

Javascriptは非常に柔軟な言語であり、必須であり、機能的であり、OOPにすることができ(プロトタイプを使用した後)、解釈されます。現在、Chromeのようなきちんとしたエンジンを使用して、いくつかの優れた機能を合理的に実行できます。余分な言語は単にここに戻って、VBScript、IEのみを見るので、その中に書かれたものはすべて特定のブラウザーとプラットフォームに縛られます。


2
ここで重要な点は、「Chromeのようなまともなエンジンを使用すること」です。少しでも負担をかけると、IE8でも足が骨折したように足を引きずり始めますが、Firefox、Chromeの最近のバージョンは私がずっと使っていたので(これが私が実際に切り替えた理由です)、ビートを見逃さずにスキップします。
マシューシャーリー

1
@Matthew Scharley:IEは一般に動きが遅く、実際、すべてのバージョンで悪化しているようです。彼らは彼らのゲームをアップする必要があります、さもなければ彼らはそれから出ます。IEが保持する唯一の理由は、OSが含まれているためです。今では、最初に使用するときにセレクタを設定する必要があり、それが大幅に低下しました。
11

「それはOOPすることができ、」...それはある OOP!継承はOOPを定義するものではありません。オブジェクトがあります。
KaptajnKold

@KaptajnKold:それは驚くべきことに、学界での議論の問題です。JSはオブジェクトを持っているという点でOOPに対応していることに同意しますが、それらは常に過度に使用されるわけではありません。プロトタイプシステムは、通常のOOPフレーバーとは大きく異なり、「OOP言語」の標準定義からさらに削除されます。ほとんどの言語と同様に、それはあなたがそれをどのように使うかに依存します-私がそれを使うとき、それはOOPです。
11

3

ベンダーは、これらをブラウザに組み込む代わりに、Java、Flash、Silverlightなどの不格好なブラウザプラグインを構築することを好みます。これにより、クロスプラットフォームの一貫性が保証されます。


まあ、それはコントロールを保証するほどクロスプラットフォームの一貫性を保証することではありません。あなたがプラグインを制御するように、他の誰かに答える必要はありません。
11

汚いjavascriptを高速で実行するのに苦労するのに比べて、「不格好な」プラグインははるかに優れています。以前はブラウザプラグインのダウンロード全体について否定的に感じていましたが、「普遍的に実装されたjavascript」よりも間違いなくオープンです。
Milind R

2

理由の1つは、さまざまなブラウザーベンダーが標準のJavascript実装に同意することさえ事実上不可能であり、Javascriptは少なくともWeb言語の観点からは永遠に存在していることです。したがって、ほとんどの人は、別のクライアント側言語をエコシステムに導入し、すべてのベンダーにそれをサポートさせることは事実上不可能であり、それを実現できる可能性のある人のほとんどはすでにJavascript標準化の問題に関与していると考えています彼らの時間の使用。


私が言っていたことのほとんど。この議論でのクライアント側言語とサーバー側言語の重要な違いは、ブラウザがクライアント側言語を実装する必要があることです。
ジョッキング

2

ここには、複数の言語をサポートすると、Webブラウザーのビルダーがすべての言語に準拠していることを確認するのが非常に不快になるという、いくつかの回答があります。私にはこれは間違っているようです。

たとえば、Javaは非常によく定義された標準です。基本的に、必要なことは、ブラウザーDOMをJava APIとして公開し、Webブラウザー内でJava仮想マシン(JVM)を実行することだけです。スクリプトコードは、コンパイルおよび署名されたJARファイルの形式で、またはJavaScriptソースコードとして配信する必要があることを指定できます。ブラウザーがJavaScriptに遭遇した場合、専用のインタープリター(現在のように)を介して、またはJVM上のRhinoを介して実行できます。jarファイルが検出されると、新しいクラスローダーとセキュリティサンドボックスが作成され、javaバイトコードがメモリにロードされて実行されます。これにより、既存のWebページとの完全な下位互換性が確保され、ブラウザで1回のストロークでJVMで実行される多数の言語をサポートできるようになります。

その他の利点:

  1. JVMは、10年にわたるパフォーマンスの改善から恩恵を受けています。現在、非常に高速で安定しており、成熟しています。解釈されたjavascriptに比べてパフォーマンスが大幅に向上することを期待しています。
  2. クライアント側のアプリがより大きく、より複雑になると、JavaやScalaなどの構造化された型付き言語の利点が増加します。
  3. 真のマルチスレッド、およびマルチコアコンピューティング用に最適化されたコレクションライブラリであるScalaを利用できます。
  4. ブラウザ内で何千ものオープンソースのJavaライブラリを使用できます。
  5. ブラウザは、openGLなどのライブラリを通じて、高度なグラフィックスおよびグラフィックスカードコンピューティング機能へのアクセスを提供できます。
  6. クライアント側とサーバー側でjavaを実行している場合、極端に圧縮されたバイナリオブジェクトグラフシリアル化= Webページの読み込みと実行の高速化により、クライアントとサーバー間の通信をさらに活用できます。

1
すでにJVMコードを実行できます。Javaアプレットと呼ばれる
Raynos

1

JavaScriptがWebの標準言語としての地位をさらに高めると信じています。サーバー側のJavaScriptが増加しています。サーバーでのこの強力な言語の実装の例を次に示します。

  • POW WebサーバーSJS - POW Webサーバーのサーバー側JavaScript。Firefox拡張機能またはXULRunnerアプリケーションとして実行されます。SJSは、データベースに接続してクライアント側のコンテンツを生成できるという点で、ApacheのPHPと同様の役割を果たします。

  • NodeJS-イベントベースのモデルを使用するサーバー側JavaScript。GoogleのV8 JavaScriptエンジンを使用して構築されています。NodeJSは、スケーラブルなネットワークプログラムを構築するためのツールとして宣伝されています。「Hello World」Webサーバーは、わずか6行で記述できます。

  • Jaxer-すべてのスクリプトブロックをrunat="server"サーバー側のJavaScriptとして解釈するJavaScriptサーバー。Webアプリケーション全体をJavaScriptで記述することができます。

  • Rhino-JavaScript for Java -Mozillaは、Java上で実行されるこのサーバー側JavaScript実装を作成しました。基本的に、Querces PHP for Java、Jython、JRuby、およびJVM上で実行される他の言語のその他の多くの抽象概念に似た概念です。Rhinoは通常、JavaScriptをJavaに埋め込み、エンドユーザーにスクリプトツールを提供するために使用されますが、ビジネスロジックを別の言語で書き直すことなく、クライアント側のコードをサーバーに移動するためにも使用できます。

  • JQuery Claypool-サーバーでJQueryの機能を使用するサーバー側JavaScriptフレームワーク。とてもかっこいい!EnvJsサーバー側のブラウザーのJavaScript実装を使用して開発されています。

  • EnvJs -Rhinoの上に構築されたヘッドレスブラウザ。

これらの実装とフレームワークの多くが実証しているのは、JavaScriptがWeb開発において非常に強力な力になりつつあり、コミュニティのリーダーがすでにJavaScriptをサーバーに移動し始めていることです。JavaScriptは非常に強力な関数型プログラミング言語であり、時間が経つにつれて進化するのではないかと感じています。

要約すると、代わりにこの単一のブラウザー言語をサーバーに移植し、より統一された方法でそのギャップを埋めることができる場合、他の言語をブラウザーに移植することは矛盾のようです。


JavaScriptがブラウザーに限定されないことを指摘して+1
ゲイリーロウ

1

Haskel、Lisp、Python(おそらくその他)など、他の言語をjavascriptにコンパイルするツールの例がいくつかあります。したがって、これらの言語のいずれかで作業する場合は、そのようにすることができます。

そして大学の教授の一人がJavascriptでスキームの実装を書いたと思います。スキームが好きなら、それもできます。


0

人々は、組み込みの多様性の欠如を2つの方法で回避しました。フラッシュやJavaアプレットのようなプラグインを使用することと、jqueryやgoogle web toolkitのようなjavascriptを「マシンコード」として使用するレイヤーを構築することです。十分に人気のある新しい開発スタイルがあれば、人々はそれを取り入れる方法を見つけるでしょう。

javascriptで.netランタイムを作成し、それが一般的になると、特定のサークルがインターネット上であなたの名前を永遠に呪うでしょう。


WebフォームとIEを非難します。ホットポーカーでジャブすることで、Web UI開発者の怒りを減らすことができます。ブランドの関連付けには適していません。
エリックReppen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.