Webページ上のJavaScriptの静的に型付けされた代替は実用的でしょうか?


9

動的型付けと静的型付けの好みは主に好みの問題であり、さまざまな状況でさまざまな人々がそれらを多かれ少なかれ適しています。

私の質問は、クライアント側のWebページ拡張などのために、JavaScriptの静的型付けの代替を技術的に可能にすることは可能でしょうか?


3
どうしてですか? `` ``
Josh K

2
すべてのブラウザが実装しなければならない仮想の静的型付け言語、または既存の可能性について話しているのですか?
user281377 2010

2
Javaアプレットを使用できると思います。
David Thornley、2010

@ammoQあなたが言及したもの、Hypothetical
Armand

@Joshわからない。@David LOL、ありがとう!
Armand

回答:


22

そのようなことが存在し得ない技術的な理由は確かにありません。動的に型付けされた言語の使用を義務付けるクライアント側のコードに特に何もありません。


1
Dartにはオプションの静的型付けがありますが、通常のJavascriptにコンパイルされます。www.dartlang.com
Nishant George Agrwal 2013年

16

別の言語が広く採用される可能性は非常に低いため、静的に型付けされたバージョンのJavaScript(つまり、Javaに近い言語)を作成し、それを通常のJavaScriptに変換するプリプロセッサーを作成するのが最善の策です。

たとえば、スクリプトは次のようになります。

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

プリプロセッサは、すべての変数、関数、オブジェクトなどがそのタイプに従って正しく使用されていることを確認し、スクリプトを次のように変更します

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

すべてのブラウザが処理できます。


5
実用的なアプローチのための+1
Gary Rowe 2010

本当にこの質問は実用主義についてではなく、理論についてです。更新されます。
Armand

2
型推論を使用することもお勧めします。
Oliver Weiler、2010

ヘルパーメソッド:非常に良い提案ですが、例は非常に単純なので、型推論によって静的バージョンが動的バージョンに非常に似たものになるので、今は例を変更しません。
user281377

4
静的に型付けされたJavaScriptは、構文的に以外はJavaに非常に近いとは思いません。JavascriptとJavaには、静的型付けと動的型付けを超えた多くの違いがあります。あなたのサンプルコードはクラスベースのように見えるので、「staticjavascript」はその言語の誤称であり、むしろ「クライアント側のJava」のようなものと呼ばれるべきだと私は主張します。ただし、JavaScriptにコンパイルする場合は+1(Google Web ToolkitはjavaをJavaScriptにコンパイルします)。
sepp2k

8

私の質問は、クライアント側のWebページ拡張などのために、JavaScriptの静的型付けの代替を技術的に可能にすることは可能でしょうか?

承知しました。Googleウェブツールキットには、 JavaScriptに静的に型付けされたJavaのコンパイル...ただ、それを考える:ジャワのすべての美しさと柔軟性、機械生成のJavaScriptのすべてのパフォーマンスを!

真剣に、しかし、あなたはあらゆる種類の言語のためにこれをすることができて、そして多くは試みました(CとC#のためのコンパイラも同様にありました、またはされてきました)。最終結果が実用的かどうかは、何を達成しようとしているのかに依存します。Googleは、非常に大規模なクライアント側アプリを開発するための一貫したプラットフォームを求めており、起動する独自のJavaScriptエンジンを備えています。ホバー効果やそのような奇妙なAJAX呼び出しにこのような獣を採用すると、単純に型付けされていないコードで生活することを学ぶよりもはるかに多くの苦痛をもたらすことでしょう。


3
GWTの「メリット」について冗談を言っているのかどうか、完全にはわかりません。もしそうなら、ブラボー。GWTでの作業は、私の人生で最も厄介な経験の1つでした。
Nicole

@Renesis:Javascriptとブラウザーの互換性を操作することは、すでに厄介ではなかったかのように?ただし、複数の画像を1つの画像にダウンロードし、クライアントでそれらを分割するなど、洗練された機能は備えています。
マクニール、

1
@Macneil彼らは今までにこれを修正したかもしれませんが、Spritesを使用していたとき、それはあなたが望まないかもしれない他のCSS背景プロパティを自動的に書き込んだので、それをオーバーライドするために毎回CSSを乱雑にする必要があったので、ほとんどすべての利点を打ち消しました。
ニコール

6

静的型付け言語の利点のほとんどは、コンパイル時に実現されます。言語がクライアントで解釈される場合、これらの利点の多くは失われます。それらをサーバーでコンパイルする場合、それらをロードしてクライアントで実行する方法を理解する必要があります(ActiveXコントロールを考えてみてください)。ハイブリッドアプローチ(中間のトークン化された形式にコンパイル)を使用することもできますが、その後は基本的にJavaアプレットに戻ります。


2
+1は、考えられる理由を説明するためのものであり、可能であれば答えるだけでありません。

4

すでに存在しています。

ActionScript 3(FlashとFlexの背後にあるスクリプト言語)は、強力な型を実装するECMAScriptの方言であり、JavaScriptとほぼ同じクライアント側の方法で使用できます(AS3にはFlashプラグインが必要であり、コンパイルされます)。私は最近、それを避けようとしていますが、「静的」キャンプにいる場合は、それを試してみてください。

これで主要な質問に答えることができたので、次の質問は「フラッシュは実用的ですか?」答えは「はい」で、「if」と「but」がいくつかあります

  • ...何らかの理由でコードを非表示にする必要がある場合。
  • ...非常に、非常に(過去のjQueryレベル)高いレベルの対話性が必要な場合
  • ...しかし、HTML5がなくても、最近、ブラウザー間の互換性は大幅に向上しています。
  • ...しかし、HTML5はまもなく登場します。
  • ...しかし、静的なタイピング/コンパイルの大きな解釈の1つ(解釈とは対照的に)は、最適化によって許容される追加の速度です(そして、型システムに関係なく、Flashは実際には非常に高速ではありません)。

AS3は、廃止されたES4に基づいています。
gsnedders 2012

3

理論的には、必要なページに任意のスクリプトを貼り付けることができます。<script>タグはtype、すべての後に、属性を。

唯一の障壁は、さまざまなブラウザーでの実装に関して十分な市場シェアを得て、使用する価値があるようにすることです。


ですから、現時点では、ありそうもありません。


それで、静的型付けには問題ありませんか?私はこのキャッチアップの実用性についてあまり気にしていません。
Armand、

1
@Alison:必要なテキストコンテンツをスクリプトタグに配置できます(ただし、文字シーケンスを含めることはできません</script>)。本当に望めば、Brainf * ckコードをそこに貼り付けることができます。次に、使用するブラウザに選択した言語のインタプリタを実装するだけです。
アノン。

@Anon。ありがとう、とても面白い。それが簡単なら、おそらくどこかで行われたことでしょう。私は<script type="vbscript">むかしむかしから覚えています...
Armand

アリソン:vbscriptはIE専用で、一部の人々はIEの市場シェアが90%を超えたときにそれを使用していました。今日、IEの市場シェアは約50%であり、おそらく世界の一部の地域では少ないので、それは大いに行き詰まっています。また、ブラウザがこれほど多くの市場シェアを獲得しない限り、新しいクライアント側スクリプト言語のようなものが起こることを期待しないでください。
user281377 2010

@Alison:Internet Explorerはまだ VBScriptをスクリプト言語としてサポートしています...知っておくべきですが、これを使用するイントラネットサイトがあります(したがってInternet Explorerが必要です -緊急です)
Dean Harding

2

それは実用的でしょうか? 番号。

出来ますか?はい!

静的に型付けされた独自のJavaScriptの代替を開発することは、せいぜい時間がかかるだけです。最悪の場合、既存のブラウザーにクライアントスクリプト言語を実装するように説得することができず、独自のブラウザーを作成する必要があります。


説明してもいいですか?
back2dos 2010

フォローアップ段落を追加しました。
Marcie、2010

それが現実的でないかもしれない唯一の理由は、現在の状況であると付け加えたいと思います。Javascriptがリリースされる直前の時点に戻ると、状況は異なります。
yakiv


1

haXeなどの言語を使用して、静的に型指定された方法でコードを記述し、それをJavaScriptにエクスポートできます。JavaScriptは非常に高速になりつつあるため、出力言語としては十分です。静的に型付けされた言語をWeb標準として適用することは、ほぼ不可能です。JavaScriptに静​​的型付けを導入する試みは、広く議論する理由により失敗しました。


1

技術的に可能でしょうか?それをJavaで実装する場合は、パフォーマンスを大幅に低下させることなく、「非常に困難ですが可能」と言います。

私は実際には現在Javaで静的に型付けされたDSLを手書きしています。ランタイム型チェックを回避する唯一の方法は、ジェネリックスを使用して「チェックされていない」警告を抑制することです...つまり、実装する時まで多次元配列(クラスパラメータはコンパイル時に既知でなければならず、したがって本質的に有限ですが、多次元配列は無限の型を表します...)残念ながら、これを理解しようとしていますが、残念ながら、ユーザー定義のクラスでも同様の問題が発生します。

こういう問題に出くわし続けているのですが、しばらく座ってみたら良い解決策が思いつきます。そのため、静的型付け(ランタイム型チェックなし)のパフォーマンス上の利点を得るには、それは非常に困難ですが、不可能ではありません。パフォーマンスを差し引いて、一生懸命言いますが、可能です。

私の経験は誰かにとって価値があるかもしれないと思っていました。


0

技術的には、ユーザーエージェント(ブラウザ)がサポートする任意のスクリプト言語でクライアント側スクリプトを作成することができます。実際には、広くサポートされている唯一の言語はJavaScript / ECMAScriptです。この段階でブラウザメーカーが新しい言語を実装してサポートするように説得しても、成功する可能性は低いです。したがって、静的に型付けされた新しいクライアント側言語を使用する場合は、新しい言語をJavaScriptに変換するか、JavaScriptでその言語のインタープリターを実装する必要があります。

すでにこのようなことをしているプロジェクトがいくつかあります。たとえば、他の回答の1つで述べたように、Google Web Toolkitです。


0

現実の世界で使用されているすべてのブラウザで新しい言語をサポートすることは望んでいません。言語はjscriptにコンパイルする必要があります。

Webの例はすべてjscriptで記述されているため、言語はほとんどjscriptのように見えるはずです。

静的チェッカーによってチェックされているが有効なjscriptでもあるjscriptの「サブセット」を持つスコープがあると思います。例えば:

  • すべての変数には、最初の使用前に型があることを示すコメントが必要です。
  • 変数のすべての使用は、上記で有効でなければなりません。
  • コメントで宣言されていない関数/クラスは使用できません#
  • jsファイルの上部にあるコメントには、それが依存する他のすべてのjsファイルをリストする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.