Web用の共通言語インフラストラクチャ(CLI)

注意、ミゲルのブログからの興味深い投稿の翻訳!



最近、TwitterのJoe HewittはWebクライアントテクノロジーの状態について非常に心配しています。 TechCrunchは、「 Web開発の現状」のレビューの進捗状況について報告した。



今日、ジョーは素晴らしいアイデアを思いつきました。



ECMAScriptの代わりにブラウザにECMA CLIを埋め込むと、Webはより柔軟になります。



ECMA CLIは、強力に型付けされた動的なプログラミング言語の両方をWebに提供します。 開発者はパフォーマンスとスクリプトのどちらかを選択できます。 プログラミング言語を選択すると(特定のタスクに最適なツールを使用して)、重要なコードを厳密に型指定された言語に変換するだけで、Webページがはるかに高速になります。



さまざまなプログラミング言語がクライアントWebの第一級の居住者になるでしょう。 多くの言語が現在利用可能ですが、プラグインで動作します。 FlashまたはSilverlightで実行できますが、この方法はそれほどスムーズではありません:別々の仮想マシンで動作し、悲惨なAPIを介してブラウザが対話する方法によって制限されます(プラグインをブラウザに統合するための約20の方法があり、最も高度な対話シナリオがあります深刻なハッキングと特定のブラウザの内部デバイスに関する深い知識が必要です)。



多分、ブラウザにECMA CLIを統合する実験をする時が来たのでしょう。 別個のプラグインとしてではなく、プラットフォームプラグインとしてではなく、ブラウザ自体の内部で一流の仮想マシンとして、Javascriptエンジンと並行して動作します。



これらの研究は、次の2つの目標を設定します。

  1. ブラウザー内の新しい言語へのアクセス。オプションで静的に型指定された言語により、パフォーマンスが大幅に向上します。
  2. ブラウザAPIの安全な拡張メカニズムを提供する新しいブラウザ革新プラットフォーム。


Monoをブラウザに直接リンクすることでこれを行うことができます。 これにより、開発者は次のようなコードを作成できます。



 <スクリプト言語= "csharp">
   documents.ElementsByTag( "email")の電子メールから 
     email.Style.Font = "bold";
 </ script>


または、サーバーからソースをロードする:



 <スクリプト言語= "csharp"ソース= "ImageGallery.cs" />


「csharp」を既存のオープンソースコンパイラ(C#、IronPython、IronRubyなど)に置き換えることができます。



または、別の方法で、開発者がソースを配布したくない場合、代わりにエンドユーザー向けにコンパクトなバイナリを公開する場合、バイナリCILを直接埋め込むことができます。



 <スクリプト言語= "cil"ソース= "MailApp.dll" />


すぐに、「保護されていないソース」に関する質問を予測します。はい、.NET Reflectorを使用して、コンパイルされたバイナリのソースコードを表示できます。 しかし、コードが難読化されている場合、最新のWebでJavascriptを読むのと同じ喜びが得られます。



ブラウザーにCILを埋め込むと、各ページ(ECMAの用語ではAppDomain)の分離されたランタイムと、ランタイムシステムのサンドボックスが作成されます。



Silverlightが提供するセキュリティモデルは、CLIランタイムを安全に超えるために必要なだけの機能を提供します。 このセキュリティモデルは、このコードが許可されていることと許可されていないことの厳格な要件に対してチェックする必要がある信頼できないコードと、いわゆる 「プラットフォーム」コード。完全に信頼されています(信頼されています)。



信頼できるコードには、信頼できないコードにはない特別な許可が与えられます。 Rantimeは、信頼できないコードが(セキュリティの観点から)重要な保護されたコードを呼び出せないようにします。



これにより、ブラウザメーカーは、ユーザーコードが確実にアクセスできるようにしながら、基盤となるオペレーティングシステムへのフルアクセス(たとえば、マイクやWebカメラなどの専用ハードウェアへの直接アクセス)を提供する新しいAPIを提供できます。安全な方法でのみ。



開発者に新しい信頼できる「プラットフォーム」APIを試してもらうことは非常に重要です。新しいUIモデル、レンダリングシステム、APIはすべて同じコア上に構築されています。



私はこのアイデアに絶対に魅了されており、それが私の最初のアイデアではなかったことを後悔しているだけです。 Moonlightプラグインに焦点を絞りすぎて、問題をより詳しく見るには、ブラウザープラグインのない*すべて*アプリケーションにECMA CLIコアを使用するにはどうすればよいですか。



ジョーは、私たちの多くと同様に、Web侵入の恐ろしい力と、GUIツールキットの持つ繊細さと速度の間で対立しています。



Silverlightはプラグイン内で優れたUIシステムを提供しますが、Joeの考えは、新しいUIのアイデアをさらに迅速に、おそらくは根本的に新しいUIを発明して実行できるプラットフォームが必要だということです。 また、ECMAサンドボックスモデルを使用すると、ブラウザメーカーが必要な新機能を追加するのを待たずに、新しいアイデアのテストを開始できます。 プラグインをブラウザに統合できるようになりました。



既存のプラグインモデルは、Webイノベーションの開発に必要な機能を提供しません。 新しいモデルが必要です。Joeのアイデアのプロトタイプから始める準備ができました。



唯一の質問は、FirefoxとChromeのどちらから起動するかです。



ゲシュタルト


Gestaltを使用すると、開発者はブラウザー内でCLIを使用できます。また、ブラウザーで他の言語を使用する方法も示します。 Silverlightプラグインが必要ですが、コードとブラウザーの相互作用は、ブラウザープラグインで利用可能な統合のレベルによって制限されます。



したがって、問題の半分しか解決されていません-PLの多言語主義、そしてそれでも、これはかなり限られた方法で行われます。



[翻訳者のメモ]

CLI-共通言語インフラストラクチャ、.NET / Monoサブシステム

CIL-共通中間言語、.NET /モノバイトコード



All Articles