選択した言語でクライアント側のブラウザコードをコーディングできるようになりますか?[閉まっている]


15

正直言って、クライアント側のコードをJavaScriptで書くのは嫌です。控えめに言っても、私はこの言語のファンではありません。

ブラウザーが中間の仮想マシン(CILやJVMなど)ではなくプログラミング言語をサポートしているのは馬鹿げているように思えます。後者の場合、プログラマーは、1つの固定されたプリセット言語ではなく、選択した言語(ある程度)で書くことができます。この言語は、CIL / JVM /何でも変更するだけで、すべての主要なブラウザをアップグレードする必要があるため、より急速に進化する可能性があります。古いブラウザエクスペリエンスに影響を与えずに言語機能を追加できます。

中間言語がもたらす多大な労力の節約はよく知られています。JavaScript以外、特に既に設計、開発、最適化された仮想マシンでブラウザの「スクリプト」を促進するイニシアチブはありますか?勢いはありますか?


回答:


11

あなたの質問に答えるために、はい、JavaScriptを非推奨にしてWebスクリプト用のよりまとまりのある言語を支持する努力がなされています。Googleは、Dart言語の背後に多くの推力を置いています。Dartには、Chromeに既に埋め込まれている独自のVMがありますが、他のブラウザーがまだそれを採用しているかどうかはわかりません。CoffeeScriptと呼ばれるかなり有望な言語もあります。

HaXeと呼ばれる非常に野心的なプロジェクトもあります。これは、開発プラットフォームのホスト全体を単一の言語で統合することを目的としています。

Javascriptを嫌うのはあなただけではないと信じていますが、すぐにはどこにも行かないと思います。言及されているが湧き始めている:)


9
すべてを単一の言語に統合することは、望んでいることの正反対です。JavaScriptの代わりに異なる言語を使用するだけで、現在と同じ状況になります。ポイントは、既存の努力の上に構築されるべきであるということです。IL/ CLRは十分に確立されており、ほとんどのプラットフォームですでに高性能のJITterを備えています。Webを21世紀に持ち込むには、ブラウザは常に新しいものを焼き付けてゼロから始めるのではなく、それを利用する必要があります。
ティムウィ

3
@ Timwi、CILは重すぎて、官僚主義が多すぎます。専用クラスとすべてのかさばるメタデータを備えた完全な肥大化したバイトコードファイルをすべてのonSomethingイベントハンドラーに添付することは意味がありません。10〜20文字の単純なスクリプト言語の解析と解釈がはるかに効率的です。
SKロジック

1
@ SK-logic:CILおよび一般的なバイトコードの全体像が完全に間違っているようです。JavaScriptのような高レベルの構文と比較して、バイナリメタデータが「かさばる」と思わせる理由はわかりません。何よりも、なぜ「すべてのonSomethingイベントハンドラー」なのかわかりません。C#プログラムは、明らかにすべてのイベントハンドラーの複数のアセンブリにコンパイルされません。
Timwi

1
@Timwi、私は朝食にECMA-335を食べているので、CILの大きさをよく知っています。DOMノードはしばしば動的に生成されます。CILの既存のモジュールに何かを追加する方法はありません。新しいモジュールを定義する必要があります。また、クラスに追加することはできません-新しいクラスを定義する必要があります(巨大なメタデータが添付されています)。そして、CILの読み取り、JIT、および実行のコストを、小さなテキスト文字列の解析、実行、および即時の破棄と比較してください。アドホックな解釈があらゆる種類のコンパイルよりもはるかに効率的な方法である多くの場合があります。
SKロジック

2
@Timwi、あなたはバイトコードを共通分母および通信フォーマットとして使用することを提案していますよね?私のポイントは、CILの現在の仕様はほとんど役に立たないということです。ExpandoObjectは無関係です。そして、解析の複雑さに関するあなたの見解はあいまいです。CILモジュールには、独自のアセンブリ参照テーブル、メタデータトークンテーブル、およびクラスとメソッドのみが含まれます。このかさばるすべてを読み、JITするのに必要な労力を、些細な高水準言語の文字列の解釈と比較してください。解析コストはここではほぼゼロです。両方のアプローチを試して、自分を比較してください。
SKロジック

5

Javascript自体は、他の言語をコンパイルできる仮想マシンを定義する中間言語と見なすことができます。GWTのようなプロジェクトでは、この概念はすでに始まっています。最初から設計するものではないかもしれませんが、すでに「お気に入りの言語」をJavascriptにコンパイルできることが現実になりつつあります。


5

基本的にいいえ。あなたはJavascriptにかなりこだわっています。

そうは言っても、過去には他の言語(javaアプレット、vbscriptなど)を取り入れる努力がありました。これらのそれぞれは、javascriptが統合されているため、javascriptが持つ牽引力を得ることはありませんでした。

参照しているものをビルドする唯一の方法は、仮想マシンで実行され、コンパイルされたクライアント側で実行されるスクリプト言語を作成することです。次に、すべてのコードがすべてのブラウザーで実行されるように、各ブラウザーが仮想マシンを独自のコードベースに実装する必要があります。次に、すべてのブラウザーが同じ方法でコマンドを実行できるように、何らかの標準を用意する必要があります。もちろん、ブラウザは独立して作成されるため、開発者が留意しなければならない奇妙な点があるでしょう。

しかし、今ではJavascriptについて説明しました。

最終的に、あなたの選択は次のとおりです。

  1. Javascriptに慣れる
  2. Javascriptにコンパイルされる言語を使用してみてください。(Javascriptを検証する必要があることに注意してください。これにより、オプション1に戻ります。)
  3. actionscript(Flash)、ActiveX、javaアプレット、.Net(SilverLight)など、ブラウザのプラグインとして存在する言語を使用します。これにより、複数のベンダー/言語の実装に関する問題は回避されますが、言語は統合されません。

基本的に、統合言語が必要な場合は、Javascriptに縛られています。


2
別の選択肢は、javascriptにコンパイルする言語を使用し、それを使用することです。
ジェッティ

@Jetti CoffeeScriptを考えていますか?それがモットーである-彼らがそれを呼ぶ「ゴールデンルール」- 「それただのJavascript」である。しかし、本質的にJavascriptであるものを書いているのであれば、本当にJavaScriptを書いているのではないでしょうか?jQueryはJavascriptではなく、よりクリーンで使いやすいと主張しているようなものです。
リチャード


@Jetti多分彼らは大丈夫だろう。しかし、クロスブラウザのサポートの奇妙さにより、これらのいずれかを推奨し、実際に生成されたjavascriptを検証しないことに神経質になります。
リチャード

1
javascriptが非常に恐ろしい中間言語であり、一貫して実行するのが非常に難しいことを除いて。
本部Milind R

4

実際、Ecma規格で説明されているように、javascriptは嫌いではありませんが、さまざまなブラウザーでの奇妙な実装、嫌なもの、バグ、wtfsが嫌いです。サーバーサイドのJavascriptは実際には非常に楽しいものです。また、DOMモデルは、クライアント側のJavaScriptの80%の痛みの原因です。

それでも別の言語を使用したい場合は、GWTを使用して、基本的にJavaを記述し、((い)javascriptにコンパイルするか、JSにコンパイルされるJSの構文糖であるCoffeeScriptを使用できます。


9
私はロンキンを話すことはできませんが、JavaScript自体嫌いです(あなたが言及した問題に加えて)。オブジェクト指向ではなく、静的な型付けも、有用なエラー処理も、最新の機能の有用なフレームワークもありません。また、一貫性がなく扱いにくいです。ところで、JS、セミコロン挿入、の最も嫌わ機能がある ECMA標準で。
ティムウィ

1
@Timwi、関数ベースであり、必要に応じてオブジェクト指向コードを書くことができます。静的型付けは良いことですが、コードが適切に記述されている場合(小さな関数、適切なスコープ)、それが問題になることはほとんどありません。セミコロンの挿入に関しては、それが軽度の迷惑であることがわかりました。{オブジェクトを別の行に戻したり開いたりすることができたので、一度しか噛み付きませんでした。欠けている「現代の機能のフレームワーク」は何ですか?
CaffGeek

2
JavaScript自体は(丁寧に言えば)最高の言語ではありません。オブジェクト指向のもの(少ない方が良い)、その動的型システム(残念ながらこの種のスクリプト言語には本当に必要です)は気にしませんが、ステートメントの存在と適切なものの欠如リストとタプルは迷惑です。JavaScriptで記述し、JavaScriptを対象とするコンパイラを実装するための両方。
SKロジック

2
@Timwi:オブジェ指向ではないことを悪いことと考えていますが、必ずしもそうではありません。OOPを開発パラダイムの特効薬と見なさないでください。JSやScalaなどの機能的アプローチも優れています。JSでOOPを使用できますが、主な違いは、クラスベースのプログラミングではなく、プロトタイプベースのプログラミングです。OOPは広義の名前であり、Java / C#に限定されません。プロトタイプベースはクラスベースとは異なり、よく使用されていますが、クラスベースと同じくらい強力です。
クレメントヘレマン

2
@ClementHerreman:JavaScriptはクライアント側に限定されませんが、この説明はクライアント側に関するものです。JavaScript プロトタイプベースに制限されています。これは、ほとんどすべての言語を使用できるILと比べてマイナス面です。
ティムウィ

2

この質問は時々ポップアップします。

Javascriptだけでなく、スクリプトタグに他の言語を使用しないのはなぜですか

昔、IEはJavascriptの代替としてVBを導入しました。私はあなたがすでにこれがどうやって標準地獄につながるかを見ることができると思います...

では、なぜ共通の標準中間言語ではないのでしょうか?

Brendan Eichの古いポッドキャストで、近い将来に中間バイトコード言語が表示されない理由を説明しています。

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

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

基本的な問題は、中間言語(CILやJVMバイトコードなど)がジェネリックになろうとする一方で、ほとんどの場合、それらが低レベルになり、コンパイルされた元の高レベル言語に縛られすぎることです。たとえば、JVMで末尾再帰関数を実際に実装することはできません。低レベルのバイトコード抽象化に早すぎる段階で結合した場合、実装できない他の言語機能や実装の選択肢はどれですか。

一方、Javascriptは、確立されたセマンティクスと複数の異なる効率的な実装を備えた柔軟な高レベル言語です。将来私たちが目にするかもしれないのは、中間言語としてのJavascriptそのものです -残念ながら、これはやや未熟であり、今日ではJSにコンパイルされる言語はほとんどありません。


しかし、この議論は、JVMとCILに当てはまるのと同じくらいJavaScriptにも当てはまりますよね?:) JavaScriptの唯一の目的は、すべてのブラウザーで既にサポートされていることです。
ローマンスターコフ

ポイントはより微妙です-Javascriptはほとんどの中間言語よりも高いレベルで記述されているため、実装は何をすべきかを選択する際により多くの余裕ができます。(もちろん、これはすべてバラの海ではありません。ウェブ用のILについて最初に考えるのではなく、それほど単純ではないことを指摘したかっただけです)
hugomg

1

はい。すでにDart、Coffeescript、JavaをJavascriptにコンパイルできます。Emscriptenがあります。これは、Javascriptバイトコードを生成するためのLLVMのコンパイラバックエンドです(LLVMはかなりの数の言語を処理していると思います)。

しかし、JSにコンパイルする以外に、短期間ではありません。IE6は10歳で、まだ蹴っています。現在のブラウザ(他の言語をサポートしていない)がそれほど長く生き残らないことを願っていますが、数年は存続し、「Javascriptのみをサポートするブラウザをサポートする必要があり、 JavaScript3を使用する必要があります。CSS3と言うよりもはるかに難しい方法で、あなたのサイトはCSS3なしで動作するかもしれませんが、クライアント側のスクリプトなしで動作するようにしてください。


0

あなたは運がいいかもしれません。これは、webkit-devフォーラムへの投稿の冒頭の段落です。

今日、多くの言語がJavaScriptにコンパイルされ、Web上で実行されます。別の方法として、WebKitのさまざまな言語ランタイムをJavaScriptと一緒にWebページで実行できるようにすることを試みてきました...

ここからメッセージの残りを見ることができます。


0

JavaScriptはまさにブラウザの魂です。そのため、新しい試みの大半はJavaScriptを生成しています(CoffeeScriptは明確な例です)。
GWTでは、クライアント側のロジックをJavaプログラミング言語でコーディングし、ツールキットでJavaScriptを生成します。

Lijuコーディングをしている場合、ClojureScriptは興味深いプロジェクトです。

だから、JavaScriptは何に関係なく見える。(WebのCOBOLでしょうか?)。


0

「どんな顧客でも、それが黒である限り、彼が望むどんな色でも塗られる車を持つことができます。」 - ヘンリー・フォード

javascriptを対象とするコンパイラは既に多数あり、javascriptにコンパイルする言語を選択できます

中間言語の価値を議論するリンクは、ネットワークを介して出荷され、クライアントマシンで実行されるコードを提供することではなく、コンパイラスイートの実装の文脈でそれらを議論します。Javascriptはそのための最良の形式ではないかもしれませんが、何であれ、CILやjavaバイトコードにあまり似ていません。

JavaScriptが嫌いなら、C、Fortran、C ++が支配する組み込み、科学、またはゲーム開発の分野に移動することをお勧めします。基幹業務アプリはWebに移行しつつあり、それはJavascriptを増やすことを意味します。

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