特許第6195849号(P6195849)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト コーポレーションの特許一覧

特許6195849ソフトウェア・コードの生成およびキャッシング
<>
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000002
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000003
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000004
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000005
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000006
  • 特許6195849-ソフトウェア・コードの生成およびキャッシング 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6195849
(24)【登録日】2017年8月25日
(45)【発行日】2017年9月13日
(54)【発明の名称】ソフトウェア・コードの生成およびキャッシング
(51)【国際特許分類】
   G06F 9/44 20060101AFI20170904BHJP
   G06F 9/445 20060101ALI20170904BHJP
【FI】
   G06F9/06 620A
   G06F9/06 640A
【請求項の数】13
【全頁数】22
(21)【出願番号】特願2014-557678(P2014-557678)
(86)(22)【出願日】2013年2月4日
(65)【公表番号】特表2015-507310(P2015-507310A)
(43)【公表日】2015年3月5日
(86)【国際出願番号】US2013024559
(87)【国際公開番号】WO2013122758
(87)【国際公開日】20130822
【審査請求日】2016年2月2日
(31)【優先権主張番号】13/371,479
(32)【優先日】2012年2月13日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】500046438
【氏名又は名称】マイクロソフト コーポレーション
【氏名又は名称原語表記】MICROSOFT CORPORATION
(74)【代理人】
【識別番号】100140109
【弁理士】
【氏名又は名称】小野 新次郎
(74)【代理人】
【識別番号】100075270
【弁理士】
【氏名又は名称】小林 泰
(74)【代理人】
【識別番号】100101373
【弁理士】
【氏名又は名称】竹内 茂雄
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100162846
【弁理士】
【氏名又は名称】大牧 綾子
(72)【発明者】
【氏名】フィッシャー,ジョモ
(72)【発明者】
【氏名】ジャクソン,マイケル・ウェイン
(72)【発明者】
【氏名】キリック,ユーナス
(72)【発明者】
【氏名】ルッコ,スティーヴン・エドワード
(72)【発明者】
【氏名】マクギャサ,ジェシー・ディー
(72)【発明者】
【氏名】ミアドヴィッチ,イェルゼイ・ズィー
(72)【発明者】
【氏名】スタイナー,スティーヴン・ジェイ
【審査官】 石川 亮
(56)【参考文献】
【文献】 特表2004−528626(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44
G06F 9/445
G06F 13/00
(57)【特許請求の範囲】
【請求項1】
少なくとも部分的にコンピューターによりインプリメントされる方法であって、
ソース・コードを含むソフトウェアを実行するリクエストを受け取るステップであって、前記ソース・コードは、スクリプトファイルへの明確な参照に遭遇していないウェブサイトのページに対するスクリプトファイルである、ステップと、
前記リクエストに応答して、第2のコードが既に前記ソース・コードから生成され、不揮発性ストレージに格納されたかを判定するステップであって、前記第2のコードが既に前記ソース・コードから生成され、不揮発性ストレージに格納されているかどうかを判定するステップは、前記不揮発性ストレージの既知の場所において前記第2のコードを検査することを含み、前記既知の場所は前記ソース・コードのソースの場所を識別する参照から導き出され、前記ソースの場所へはネットワークを介して到達可能である、ステップと、
前記リクエストを受け取る前に前記第2のコードが既に生成されていた場合に、
前記第2のコードを得るステップと
前記第2のコード又はそこから導き出されたコードを実行するステップを含む、第1組のアクションを実行するステップと、
前記リクエストを受け取る前に前記第2のコードがまだ生成されていない場合に、
前記ソース・コードを得るステップと、
前記ソース・コードから第2のコードを生成するステップと、
前記第2のコード又はそこから導き出されたコードを実行するステップと
を含む、第2組のアクションを実行するステップと、
前記リクエストを受け取る前に前記第2のコードがまだ生成されていない場合に、
前記第2のコードを、前記ソフトウェアを後に実行する際に使用するために、前記不揮発性ストレージに格納するステップと、
前記第2のコードを含むファイルをメモリ・マッピングし、該メモリ・マッピングを介して複数のプロセスで前記ファイルを共有するステップと、
を含む第3組のアクションを実行するステップと
を含む、方法。
【請求項2】
前記第3組のアクションを実行するステップは、
前記ソース・コードを再び得るステップと、
前記ソース・コードから前記第2のコードを再び生成するステップと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記第2のコードが既に前記ソース・コードから生成され、不揮発性ストレージに格納されたかを判定するステップは、
前記不揮発性ストレージの既知の場所で前記第2のコードを検査するステップをさらに含み、前記ソース・コードを含むパッケージは前記不揮発性ストレージをホストするターゲット・システムにインストールされている、請求項1に記載の方法。
【請求項4】
前記第2のコードが既に前記ソース・コードから生成され、不揮発性ストレージに格納されたかを判定するステップは、
前記不揮発性ストレージからデータを得るステップをさらに含み、前記データは前記ソース・コードを含むパッケージに対するバイトコードを前記パッケージに対するソース・コードと並べて配するファイルの一部であり、前記データは前記第2のコードが既に生成されてファイルに格納されているかどうかを示す、請求項1に記載の方法。
【請求項5】
前記第2のコードが、生成された後に変更されたかを検査するステップをさらに含み、そうである場合に、
前記ソース・コードを再び得るステップと、
前記ソース・コードから前記第2のコードを再び生成するステップと、
前記第2のコードを、前記ソフトウェアを後に実行する際に使用するために、前記不揮発性ストレージに格納するステップと、
を含む請求項1に記載の方法。
【請求項6】
計算環境におけるシステムであって、
メモリに結合された処理ユニットを備えるコンピューターを備え、前記メモリは、
ソフトウェアのソース・コードを含むパッケージのデータを格納するように動作するストアであって、前記ソース・コードはスクリプトファイルへの明確な参照に遭遇していないウェブサイトのページに対するスクリプトファイルである、ストアと、
前記ストアに前記パッケージをインストールするように動作するインストーラーであって、前記ソース・コードが第2のコードへとコンパイルされることを示すようにデータ構造をアップデートするように更に動作するインストーラーと、
前記ソース・コードを識別するために前記データ構造を検査するように、及び前記ソース・コードが前記第2のコードへとコンパイルされることを、前記データ構造において示すこと基づいて、前記ソース・コードを前記第2のコードへとコンパイルするように動作するコード・ジェネレーターと、
前記第2のコードを前記ストアへ永続的に格納するように、および前記ストアの前記第2のコードへのアクセスを提供するように動作するキャッシュ・マネージャーと、
前記ソフトウェアを実行するリクエストを受け取るように動作し、且つ前記コード・ジェネレーターが前記ソース・コードを前記第2のコードへと既にコンパイルしているかどうかを判定するように動作する実行マネージャーであって、前記コード・ジェネレーターが前記ソース・コードを前記第2のコードへと既にコンパイルしていると判定することは、不揮発性ストレージの既知の場所で前記第2のコードを検査することを含み、前記既知の場所は前記ソース・コードのソースの場所を識別する参照から導き出され、前記ソースの場所はネットワークを介して到達可能であり、
コンパイルしていた場合、
前記第2のコードを得ることと、
前記第2のコード又はそれから導き出されたコードを実行することと
を含むアクションを行い、
コンパイルしていない場合、
前記ソース・コードを得ることと、
前記ソース・コードが前記第2のコードへとコンパイルされるようにすることと、
前記ソース・コード又はそれから導き出されたコードを実行することと
を含むアクションを行う
実行マネージャーと
を含むシステム。
【請求項7】
前記実行マネージャーは、さらに前記リクエストが受け取られる前に前記コード・ジェネレーターがまだ前記ソース・コードを前記第2のコードへコンパイルしていない場合に、遅滞なく前記第2のコードを生成させるように動作する、請求項6に記載のシステム。
【請求項8】
前記コード・ジェネレーターは、前記システムが他のパッケージをインストールしていないとき又は前記システムの処理帯域を消費する他のタスクを実行していないときに行うプロセスとして実行される、請求項6に記載のシステム。
【請求項9】
前記コード・ジェネレーターは、1日のうちの構成可能な時間に行うプロセスとして実行される、請求項6に記載のシステム。
【請求項10】
デバイスであって、
処理ユニットと、
ソフトウェアのソース・コードを含むパッケージのデータを格納するよう構成されたストアであって、前記ソース・コードは、スクリプトファイルへの明確な参照に遭遇していないウェブサイトのページに対するスクリプトファイルである、ストアと、
前記パッケージを前記ストアにインストールするよう構成されたインストーラーであって、該インストーラーは、さらに前記ソース・コードが第2のコードへとコンパイルされることを示すようにデータ構造をアップデートするよう動作する、インストーラーと、
前記ソース・コードを識別するために前記データ構造を検査するように、及び前記ソース・コードが前記第2のコードへとコンパイルされることを前記データ構造において示すことに基づいて、前記ソース・コードを前記第2のコードへとコンパイルするように構成されたコード・ジェネレーターと、
前記第2のコードを前記ストアへ永続的に格納するように、および前記ストアの前記第2のコードへのアクセスを提供するように構成されたキャッシュ・マネージャーと、
前記ソフトウェアを実行するリクエストを受け取るように構成され、且つ前記コード・ジェネレーターが前記ソース・コードを前記第2のコードへと既にコンパイルしたかどうかを判定するように構成された実行マネージャーであって、前記コード・ジェネレーターが前記ソース・コードを前記第2のコードへと既にコンパイルしたかを判定することは、不揮発性ストレージの既知の場所で前記第2のコードを検査することを含み、前記既知の場所は前記ソース・コードのソースの場所を識別する参照から導き出され、前記ソースの場所はネットワークを介して到達可能であり、
コンパイルしていた場合、
前記第2のコードを得ることと、
前記第2のコード又はそれから導き出されたコードを実行することと
を含むアクションを行い、
コンパイルしていない場合、
前記ソース・コードを得ることと、
前記ソース・コードが前記第2のコードへとコンパイルされるようにすることと、
前記ソース・コード又はそれから導き出されたコードを実行することと
を含むアクションを行う
実行マネージャーと
を含むデバイス。
【請求項11】
前記リクエストを受け取る前に前記コード・ジェネレーターが前記ソース・コードを前記第2のコードへとまだコンパイルしていない場合に、前記実行マネージャーは、遅延なく前記第2のコードを生成させるようにさらに構成される、請求項10に記載のデバイス。
【請求項12】
前記デバイスが他のパッケージをインストールしていないとき又は前記デバイスの処理帯域を消費する他のタスクを実行していないときに行うプロセスとして、前記コード・ジェネレーターが実行される、請求項10に記載のデバイス。
【請求項13】
前記コード・ジェネレーターは、1日のうちの構成可能な時間に行うプロセスとして実行される、請求項10に記載のデバイス。
【発明の詳細な説明】
【背景技術】
【0001】
[0001] スクリプト言語は、様々な環境で見つけることができる。例えば、多くのインターネット・ブラウザーは、ユーザー入力または他のデータに基づいてウェブ・ページがその挙動をカスタム化することを可能にするスクリプト言語を有する。スクリプト言語はまた、インターネット・ブラウザーの外の環境でも見つけることができる。スクリプト言語と関連する1つの問題は、特に、スタート・アップのとき、また、可能性としては、それぞれの実行のときに、スクリプト言語は、コンパイルされている従来のプログラムと比較して遅くなり得ることである。
【0002】
[0002] ここで特許請求される主題事項は、何れかの欠点を解決する実施形態には限定されず、また、上記で説明した環境などのみで動作する実施形態にも限定されない。むしろ、この背景は、単に、ここで説明される幾つかの実施形態を実施でき得る1つの例示的な技術範囲を例示するために提供されている。
【発明の概要】
【0003】
[0003] 簡潔には、ここで説明する主題事項の構成は、ソフトウェア・コードの生成およびキャッシングに関する。構成では、ターゲット・デバイスは、インストールするソフトウェアを受け取ることができる。ソフトウェアは、コンパイルされていないソース・コードを含み得る。ターゲット・デバイスは、ソフトウェアをインストールすることができ、且つパッケージのソース・コードが、永続的に格納される中間または実行可能なコードへとコンパイルされることを、示すことができる。ターゲット・デバイスが、ソフトウェアがコンパイルされる前にそのソフトウェアの実行を要求するリクエストを受け取った場合、ターゲット・デバイスは、遅れることなくソフトウェアをコンパイルして実行することができる。ターゲット・デバイスが、ソフトウェアがコンパイルされた後にそのソフトウェアの実行を要求するリクエストを受け取った場合、ターゲット・デバイスは、コンパイルされたコードを入手して実行することができる。上記の動作はまた、ターゲット・デバイスから離れたサーバーから得られるスクリプト・コードにも、適用することができる。
【0004】
[0004] この概要は、後の詳細な説明で更に記載する主題事項の幾つかの構成を簡単に示すために提供される。この概要は、特許請求の範囲に記載の主題事項の鍵となる特徴や本質的な特徴を特定することを意図しておらず、また、特許請求の範囲に記載の主題事項の範囲を決定する際に用いることを意図していない。
【0005】
[0005] 「ここで説明する主題事項」という記載は、内容が明らかに別の事項を示さないかぎり、詳細な説明に記載される主題事項を指す。「構成」という用語は、「少なくとも1つの構成」と解釈すべきである。詳細な説明に記載される主題事項の示される構成は、特許請求の範囲に記載の主題事項の鍵となる特徴や本質的な特徴を特定することを意図していない。
【0006】
[0006] 主題事項の上記の構成およびここで説明する他の構成は、例として示され、添付の図面のものに限定されない。図面では、同じ参照番号は類似のエレメントを示す。
【図面の簡単な説明】
【0007】
図1図1は、ここで説明する主題事項の構成を組み込むことができる例示の汎用計算環境を表すブロック図である。
図2図2は、ここで説明する主題事項の構成を動作させることができるシステムのコンポーネントの例示の構成を表すブロック図である。
図3図3は、ここで説明する主題事項の構成に従って使用できる例示のデータ構造を示す。
図4図4は、ここで説明する主題事項の構成を動作させることができる環境のコンポーネントの例示の構成を表すブロック図である。
図5図5および図6は、ここで説明する主題事項の構成に従って生じ得る例示のアクションを概略的に表すフロー図である。
図6図5および図6は、ここで説明する主題事項の構成に従って生じ得る例示のアクションを概略的に表すフロー図である。
【発明を実施するための形態】
【0008】
定義
[0012] 「含む」という用語およびその異形は、制限のない用語(open-ended term)であり、「含むが、それに限定されない」という意味である。「または」という用語は、内容により明らかに要求されないかぎり、「および/または」と解釈する。「基づく」という用語は、「少なくとも部分的に基づく」と解釈する。「1つの実施形態」および「実施形態」という用語は、「少なくとも1つの実施形態」と解釈する。「別の実施形態」という用語は、「少なくとも1つの別の実施形態」と解釈する。
【0009】
[0013] 「1つ(a)」、「1つ(an)」、および「その(the)」という用語は、示されるアイテムやアクションが1以上であることを含む。特に、特許請求の範囲では、アイテムへの参照は、一般に、少なくとも1つのそのようなアイテムが存在することを意味し、アクションへの参照は、アクションの少なくとも1つのインスタンスが行われることを意味する。
【0010】
[0014] ここでは、「第1」、「第2」、「第3」などの用語が時には用いられる。追加のコンテキストが無い場合、特許請求の範囲におけるこれらの用語の使用は、順を暗示することを意図しておらず、識別するために用いている。例えば、「第1のバージョン」および「第2のバージョン」というフレーズは、第1のバージョンが最初のバージョンであることや、第2のバージョンの前に作成されたことや、第2のバージョンの前に第1のバージョンが要求されることや動作させられることを、必ずしも意味しない。これらのフレーズは、異なるバージョンを識別するために用いられる。
【0011】
[0015] 見出しは、利便性のためのみのものであり、1つのトピックにおける情報は、そのトピックを示す見出しを持つセクション外でも見つけることができる。
[0016] 明示的または暗黙的な他の定義は下記に含まれているであろう。
【0012】
例示の動作環境
[0017] 図1は、ここで説明する主題事項の構成を実施できる適切な計算システム環境100の例を示す。計算システム環境100は、適切な計算システム環境の単なる一例であり、ここで説明する主題事項の構成の使用や機能の範囲を制限することを意図するものでも提案するものでもない。計算環境100は、例示的な動作環境100に示されたコンポーネントの何れかのものやコンポーネントの組み合わせと関連する依存性や必要条件を持たないことを理解すべきである。
【0013】
[0018] ここで説明する主題事項の構成は、他の様々な汎用や特定用途向けの計算システムの環境または構成で動作することができる。ここで説明する主題事項の構成を用いるのに適切な良く知られた計算システム、環境、または構成の例は、パーソナル・コンピューター、サーバ・コンピューター、手持型またはラップトップ型のデバイス、マルチプロセッサー・システム、マイクロコントローラー・ベースのシステム、セットトップ・ボックス、プログラマブルの大衆消費電子製品、ネットワークPC、ミニコンピューター、メインフレーム・コンピューター、パーソナル・デジタル・アシスタント(PDA)、ゲーム用デバイス、プリンター、セットトップ・ボックスを含むアプライアンス、メディア・センター、または他のアプライアンス、自動車への埋め込み型または取り付け型の計算デバイス、他のモバイル・デバイス、上記のシステムやデバイスの何れかを含む分散型計算環境などを含む。
【0014】
[0019] ここで説明する主題事項の構成は、コンピューターにより実行されているプログラム・モジュールなどのようなコンピューター実行可能命令の一般的コンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み、それらは、特定のタスクを行うか、または特定の抽象データ型を実現する。ここで説明する主題事項の構成はまた、通信ネットワークを通じてリンクされたリモート処理デバイスによりタスクが行われる分散型計算環境でも実施することができる。分散型計算環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモートのコンピューター・ストレージ媒体に配される。
【0015】
[0020] 図1を参照すると、ここで説明する主題事項の構成をインプリメントするための例示のシステムは、コンピューター110の形の汎用計算デバイスを含む。コンピューターは、命令を実行できる任意の電子デバイスを含むことができる。コンピューター110のコンポーネントは、処理ユニット120と、システム・メモリ130と、システム・メモリを含む様々なシステム・コンポーネントを処理ユニット120と結合するシステム・バス121とを含む。システム・バス121は、様々なバス構造のうちの任意のものを用いるメモリ・バスまたはメモリ・コントローラー、周辺バス、およびローカル・バスを含む幾つかのタイプのバス構造のうちの、任意のものとすることができる。例として、そのようなアーキテクチャーは、業界標準アーキテクチャー(ISA)バス、マイクロ・チャネル・アーキテクチャー(MCA)バス、エンハンストISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)ローカル・バス、およびメザニン・バスとしても知られているペリフェラル・コンポーネント・インターコネクト(PCI)バス、アドバンスト・グラフィックス・ポート(AGP)、およびPCIエクスプレイ(PCIe)を含むが、これらには限定されない。
【0016】
[0021] 処理ユニット120は、ハードウェア・セキュリティ・デバイス122と接続することができる。セキュリティ・デバイス122は、コンピューター110の様々な構成を守るために用いることができる暗号鍵を格納すること及び生成することができる。1つの実施形態では、セキュリティ・デバイス122は、トラステッド・プラットフォーム・モジュール(TPF)チップ、TPMセキュリティ・デバイスなどを含むことができる。
【0017】
[0022] コンピューター110は、典型的には、様々なコンピューター可読媒体を含む。コンピューター可読媒体は、コンピューター110によりアクセス可能な任意の適切な媒体とすることができ、揮発性および不揮発性、取り外し可能および取り外し不可能な媒体の双方を含む。限定ではなく例として、コンピューター可読媒体は、コンピューター・ストレージ媒体および通信媒体を含む。
【0018】
[0023] コンピューター・ストレージ媒体は、コンピューター可読命令、データ構造、プログラム・モジュール、または他のデータなどのような情報を格納するために任意の方法や技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能の双方の媒体を含む。コンピューター・ストレージ媒体は、RAM、ROM、EEPROM、ソリッド・ステート・ストレージ、フラッシュ・メモリ、または他のメモリ技術、CD−ROM、デジタル・バーサタイル・ディスク(DVD)、または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージ、または他の磁気記憶装置、または望まれる情報を格納するために使用でき且つコンピューター110によりアクセスできる他の任意の媒体を含む。
【0019】
[0024] 通信媒体は、典型的には、搬送波などのような変調されたデータ信号または他のトランスポート機構においてコンピューター可読命令、データ構造、プログラム・モジュール、または他のデータを実現するものであり、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、信号内で情報をエンコードするように、その信号の特性のうちの1以上の特性が設定または変更された信号を意味する。限定ではなく例として、通信媒体は、有線ネットワークや直接有線接続などのような有線媒体と、音響、RF、赤外線、および他のワイヤレス媒体などのようなワイヤレス媒体とを含む。上記のものの任意のものの組み合わせも、コンピューター可読媒体の範囲内に含まれるべきである。
【0020】
[0025] システム・メモリ130は、リード・オンリー・メモリ(ROM)131およびランダム・アクセス・メモリ(RAM)132などのような、揮発性および/または不揮発性のメモリの形態のコンピューター・ストレージ媒体を含むことができる。スタート・アップの時などにコンピューター110内のエレメント間での情報の転送を手助けする基本的ルーチンを含むベーシック入出力システム(BIOS)133は、典型的にはROM131に格納される。RAM132は、典型的には、処理ユニット120により即座にアクセス可能な及び/又は現在動作させられているデータおよび/またはプログラム・モジュールを含む。限定ではなく例として、図1は、オペレーティング・システム134、アプリケーション・プログラム135、他のプログラム・モジュール136、およびプログラム・データ137を示す。
【0021】
[0026] コンピューター110はまた、他の取り外し可能/取り外し不可能な揮発性/不揮発性のコンピューター可読媒体を含むことができる。単なる例として、図1は、取り外し不可能で不揮発性の磁気媒体に対する読み出しおよび書き込みを行うためのハード・ディスク・ドライブ141と、取り外し可能で不揮発性の磁気ディスク152に対する読み出しおよび書き込みを行うための磁気ディスク・ドライブ151と、CD−ROMや他の光媒体などのような取り外し可能で不揮発性の光ディスク156に対する読み出しおよび書き込みを行うための光ディスク・ドライブ155とを示す。例示的な動作環境で用いることができる他の取り外し可能/取り外し不可能で揮発性/不揮発性のコンピューター・ストレージ媒体は、磁気テープ・カセット、フラッシュ・メモリ・カード、および他のソリッド・ステート・ストレージ・デバイス、デジタル・バーサタイル・ディスク、他の光ディスク、デジタル・ビデオ・テープ、ソリッド・ステートRAM、ソリッド・ステートROMなどを含む。ハード・ディスク・ドライブ141は、インターフェース140を介してシステム・バス121へ接続することができ、磁気ディスク・ドライブ151および光ディスク・ドライブ155は、インターフェース150などのような取り外し可能で不揮発性のメモリのためのインターフェースにより、システム・バス121へ接続することができる。
【0022】
[0027] ドライバーと、それらと関連するものであり上記で説明し且つ図1で示したコンピューター・ストレージ媒体とは、コンピューター可読命令、データ構造、プログラム・モジュール、およびコンピューター110に対する他のデータのストレージを提供する。例えば、図1では、ハード・ディスク・ドライブ141は、オペレーティング・システム144、アプリケーション・プログラム145、他のプログラム・モジュール146、およびプログラム・データ147を格納するものとして示されている。これらのコンポーネントは、オペレーティング・システム134、アプリケーション・プログラム135、他のプログラム・モジュール136、およびプログラム・データ137と同じである場合も異なる場合もあることに留意されたい。ここでは、オペレーティング・システム144、アプリケーション・プログラム145、他のプログラム・モジュール146、およびプログラム・データ147は、少なくとも、別のコピーであることを示すために、異なる番号が付されている。
【0023】
[0028] ユーザーは、キーボード162や、マウスやトラックボールやタッチ・パッドなどと一般的に呼ばれるポインティング・デバイス161などのような入力デバイスを用いて、コンピューター110へコマンドおよび情報を入力することができる。他の入力デバイス(示さず)としては、マイクロフォン、ジョイスティック、ゲーム・パッド、サテライト・ディッシュ、スキャナー、接触感応型スクリーン、書き込みタブレット、ジェスチャー・キャプチャ・デバイスなどが含まれ得る。これらおよび他の入力デバイスは、システム・バスと結合されたユーザー入力インターフェース160を通じて処理ユニット120と接続されることが多いが、他のインターフェースおよびバス構造、例えば、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス(USB)などにより接続されることもできる。
【0024】
[0029] モニター191や他のタイプのディスプレイ・デバイスも、ビデオ・インターフェース190などのようなインターフェースを介してシステム・バス121と接続される。コンピューターは、モニターに加えて、出力用周辺機器インターフェース195を介して接続できるスピーカー197やプリンター196などのような他の周辺出力デバイスを含むこともできる。
【0025】
[0030] コンピューター110は、ネットワーク化された環境で、リモート・コンピューター180などのような1以上のリモート・コンピューターへの論理接続を用いて、動作することができる。リモート・コンピューター180は、パーソナル・コンピューター、サーバー、ルーター、ネットワークPC、ピア・デバイス、または他の共通ネットワーク・ノードとすることができ、図1ではメモリ・ストレージ・デバイス181のみを示しているが、典型的には、コンピューター110と関連して説明した多くのまたは全てのエレメントを含むことができる。図1に示す論理接続は、ローカル・エリア・ネットワーク(LAN)171およびワイド・エリア・ネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。そのようなネットワーク環境は、オフィス、エンタープライズ・ワイド・コンピューター・ネットワーク、イントラネット、およびインターネットにおいて一般的である。
【0026】
[0031] コンピューター110は、LANネットワーク環境で用いる場合、ネットワーク・インターフェースまたはアダプター170を通じてLAN171と接続される。コンピューター110は、WANネットワーク環境で用いる場合、モデム172、またはインターネットなどのようなワイド・エリア・ネットワーク173を通じての接続を確立するための他の手段を含む。内部または外部に備えられ得るモデム172は、ユーザー入力インターフェース160または他の適切な機構を介してシステム・バス121と接続することができる。ネットワーク化された環境では、コンピューター110と関連して示されているプログラム・モジュールまたはその一部は、リモート・メモリ・ストレージ・デバイスに格納することができる。限定ではない例として、図1は、メモリ・ストレージ・デバイス181に存在するものとしてリモート・アプリケーション・プログラム185を示す。示されたネットワーク接続が例示であり、コンピューター間の通信リンクを確立するために別の手段も使用できることは、理解できる。
【0027】
コードの生成およびキャッシング
[0032] 先に述べたように、コンパイルされている従来のプログラムと比較して、スクリプト言語は、特に最初の始動時には、ユーザーからは遅く見え得る。
【0028】
[0033] 図2は、ここで説明する主題事項の構成を動作させることができるシステムのコンポーネントの例示の構成を表すブロック図である。図2に示すコンポーネントは、例であり、必要とされ得る又は含まれ得るコンポーネントを全て含んでいることを意味していない。別の実施形態では、図2と関連して説明されるコンポーネントおよび/または機能は、ここで説明する主題事項の構成の精神または範囲から離れずに、他のコンポーネント(示されたもの又は示されていないもの)に含ませること、またはサブコンポーネントに配することができる。幾つかの実施形態では、図2と関連して説明するコンポーネントおよび/または機能は、複数のデバイスにわたって分散させることができる。
【0029】
[0034] 図2を参照すると、システム205は、スクリプト・コンポーネント210、ストア220、通信機構225、および他のコンポーネント(示さず)を含むことができる。システム205は、1以上の計算デバイスを含むことができる。そのようなデバイスは、例えば、パーソナル・コンピューター、サーバ・コンピューター、手持型またはラップトップ型のデバイス、マルチプロセッサー・システム、マイクロコントローラー・ベースのシステム、セットトップ・ボックス、プログラマブルの大衆消費電子製品、ネットワークPC、ミニコンピューター、メインフレーム・コンピューター、セル電話、パーソナル・デジタル・アシスタント(PDA)、ゲーム用デバイス、プリンター、セットトップを含むアプライアンス、メディア・センター、または他のアプライアンス、自動車への埋め込み型または取り付け型の計算デバイス、他のモバイル・デバイス、上記のシステムやデバイスの何れかを含む分散型計算環境などを含む。
【0030】
[0035] システム205が単一のデバイスを含む場合、システム205として作動するように構成され得る例示のデバイスは、図1のコンピューター110を含む。システム205が複数のデバイスを含む場合、複数のデバイスのそれぞれは、図1のコンピューター110を同様に又は異なって構成したものを含むことができる。
【0031】
[0036] スクリプト・コンポーネント210は、インストーラー215、コード・ジェネレーター216、キャッシュ・マネージャー217、実行マネージャー218、および他のコンポーネント(示さず)を含むことができる。ここで用いられるコンポーネントという用語は、デバイスの全てまたは一部、1以上のソフトウェア・モジュールまたはその一部のコレクション、1以上のソフトウェア・モジュールまたはその一部と1以上のデバイスまたはその一部との何らかの組み合わせなどを含むものと、解釈される。
【0032】
[0037] 通信機構225は、システム205が他のエンティティと通信することを可能にする。例えば、通信機構225は、システム205が他のエンティティと通信して、システム205でキャッシュされ得るパッケージおよび/またはスクリプト・コードを得ることを、可能にする。通信機構225は、ネットワーク・インターフェースまたはアダプター170、モデム172、または図2と関連して説明した通信を確立するための任意の他の機構とすることができる。
【0033】
[0038] ストア220は、データへのアクセスを提供することができる任意のストレージ媒体である。ここで用いるアクセスとは、データを読み出すこと、データを書き込むこと、データを削除すること、データを更新すること、上記の2以上のことを含む組み合わせなどを含む。ストアは、揮発性メモリ(例えば、RAM、メモリ内キャッシュなど)および不揮発性メモリ(例えば、永続ストレージ)を含むことができる。
【0034】
[0039] データという用語は、1以上のコンピューター・ストレージ・エレメントにより表すことができる何れのものも含むように、広く解釈される。論理的に、データは揮発性または不揮発性のメモリにおいて、「1」および「0」の列で表すことができる。非バイナリー・ストレージ媒体を有するコンピューターでは、データは、ストレージ媒体の能力に従って表すことができる。データは、異なるタイプのデータ構造に分けて体系づけることができ、データ構造は、数や文字などのような単純なデータ・タイプ、階層やリンクや他の関連型のデータ・タイプ、複数の他のデータ構造や単純なデータ・タイプを含むデータ構造などを含む。データの幾つかの例は、情報、プログラム・コード、プログラム状態、プログラム・データ、他のデータなどを含む。
【0035】
[0040] ストア220は、ハード・ディスク・ストレージ、他の不揮発性ストレージ、RAMなどのような揮発性メモリ、他のストレージ、上記のものの何らかの組み合わせなどを含むことができ、また、複数のデバイスにわたって分散させることもできる。ストア220は、システム205の外部または内部のものとすること、または外部と内部との双方のコンポーネントを含むことができる。
【0036】
[0041] 始動および実行の時間を低減するため、メモリ・フットプリントを低減するため、不正行為に対する保護を可能にするため、および他の理由のために、コード・ジェネレーター216は、ソース・コードを、バイトコードまたは何らかの他の中間コードまたは実行可能コードへとコンパイルすることができる。コードは、コンピューターの行うアクションを示す命令を含む。コードはまた、コンピューターの行うアクション以外の情報を含むデータ、リソース、変数、定義、関係、関連付けなどを含むことができる。例えば、コードは、ウェブ・ページ、HTML、XML、他のコンテンツなどを含むことができる。実施形態では、コードは、ソフトウェア・プロジェクトに含まれ得る。ソフトウェアは、コンピューターの行うアクション以外の情報を含む1以上のコード部分、データ、リソース、変数、定義、関係、関連付けなど、および構成情報などを、含むこと又は参照することができる。
【0037】
[0042] コードにより示されるアクションは、スクリプト言語および非スクリプト言語、中間言語、アセンブリ言語、バイナリー・コード、他の言語、上記のものの何らかの組み合わせなどを含むソース・コード言語にエンコードすることができる。
【0038】
[0043] インストーラー215は、システム205へパッケージをインストールすることができる。パッケージは、1以上のソフトウェア・アプリケーションを含むことができる。インストーラー215は、配置拡張ハンドラーを含むことができ、配置拡張ハンドラーは、パッケージがインストールされたターゲット・マシンで、パッケージがスクリプト・コードを含むか他の基準を含むかにかかわらず、インストールされたパッケージに基づいてカスタムのアクションが行われることを可能にする。
【0039】
[0044] 1つのインプリメンテーションでは、インストーラー215が、スクリプト・コードを持つパッケージと遭遇したとき、インストーラー215は、パッケージのコンポーネントに対応するエレメントを、そのパッケージのコードをプリコンパイルするためのキューまたは他のデータ構造へ付加することができる。
【0040】
[0045] コード・ジェネレーター216は、データ構造からエレメントを取り出すことができ、それぞれのエレメントに対応するコードから、バイトコード、実行可能コード、または何らかの他のコードを生成することができる。エレメントはファイルを含むことができ、ファイルは、スクリプト、ファイルの一部(例えば、HTMLページ内に埋め込まれたスクリプト)、コンパイルされたコードなどを含む。簡単にするため、ここでは、バイトコードという用語は、コード・ジェネレーター216の生成するコードを示すためにしばしば用いられる。しかし、コード・ジェネレーター216は、バイトコードを生成およびキャッシングするものに限定されず、別の実施形態では、先に述べたタイプのコードを含む他のタイプのコードを生成およびキャッシングすることが、理解される。
【0041】
[0046] 1つの実施形態では、コード・ジェネレーター216は、バイトコードを生成する前に、パッケージが完全にインストールされて、パッケージに対応するエレメントがコンパイルのためのデータ構造へ配されるまで、待つことができる。別の実施形態では、コード・ジェネレーター216は、データ構造においてエレメントが使用可能になるとすぐに、またはソース・コード・モジュールがインストールされるとすぐに、バイトコードの生成を開始することができる。この別の実施形態では、1つの例において、コード・ジェネレーター216は、パッケージのインストールに失敗した場合に、生成したバイトコードを処分することができる。別の例では、コード・ジェネレーター216は、生成を止めた時点(例えば、電力が回復してマシンがリブートした後)から生成を再開することができる。1つのインプリメンテーションでは、コード・ジェネレーター216は、システム205がアイドルのとき(例えば、パッケージをインストール中ではないときや、システム205の処理帯域を消費する他のタスクを行っていないとき)や、システム205が電線の電力で(例えば、バッテリーの電力ではなく)動作しているときや、一日のうちの定められた又は構成可能な時間などに行うプロセスとして、インプリメントすることができる。
【0042】
[0047] ここで用いる「プロセス」という用語およびその異形は、1以上の従来型のプロセス、スレッド、コンポーネント、ライブラリー、タスクを行うオブジェクトなどを含むことができる。プロセスは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアとの組み合わせでインプリメントすることができる。実施形態では、プロセスは任意の機構であるが、呼び出されると、アクションを行うこと又はアクションを行う際に用いることができる。プロセスは、複数のデバイスにわたって分散させること、または1つのデバイスに配することができる。
【0043】
[0048] 1つの実施形態では、コード・ジェネレーター216はまた、コードをオン・ザ・フライで(例えば、コードに遭遇したときに)生成するために用いることができる。例えば、ユーザーが、ソフトウェアをインストールし、そのソフトウェアを含むパッケージ全体に対するバイトコードが生成される前にそのソフトウェアを実行したい場合、コード・ジェネレーター216を用いて、そのソフトウェアに対するコードを必要に応じて生成することができる。換言すると、ユーザーは、ユーザーがパッケージのソフトウェアを実行することを可能とされる前に、コード・ジェネレーター216がパッケージ全体のバイトコードを生成するのを待つ必要がない。更に、コンポーネントに対するソース・コードが変更されているという別の状況があり得、その場合、コード・ジェネレーター216は、コンポーネントに対するバイトコードを迅速に生成するために用いることができる。
【0044】
[0049] 更に、コード・ジェネレーター216は、コードをコンパイルするため及びコードをキャッシュするために、オンデマンドで用いることができる。例えば、インターネット・ブラウザー・アプリケーションでは、新たなコードへのリンクは、動的に発見することができる。例えば、ウェブ・ドキュメントは、ダウンロードされ実行される他のコードへのリンクを含むことができる。コード・ジェネレーター216は、それらのリンクにより参照されたコードをコンパイルするために、およびそのコードの後の実行を速くするように、コンパイルされたコードをキャッシュするために、用いることができる。
【0045】
[0050] コード・ジェネレーター216は、コードを生成するために、「サンド・ボックス」において又は「サンド・ボックス」を用いてインプリメントすることができる。サンド・ボックスは、それがアクセスできるデータに関する権限に対しての制限のある環境である。1つのインプリメンテーションでは、コード・ジェネレーター216は、権限を制限されたプロセスとしてインプリメントすることができる。プロセスは、プロセスが読み出し又は書き込みを行えるバイトコード・ファイルに対するハンドルを渡され得、ソース・コードに対してのリード・オンリー・アクセスが与えられ得る。セキュリティの目的のため、プロセスは、上述のリソース以外の他のリソースへのアクセスを有さない。
【0046】
[0051] 1つのインプリメンテーションでは、コード・ジェネレーター216は、仮想環境においてホストすることができる。仮想環境は、コンピューターによりシミュレートまたはエミュレートされた環境である。仮想環境は、物理マシン、オペレーティング・システム、1以上のインターフェースの組、上記のものの部分、上記のものの組み合わせなどを、シミュレートまたはエミュレートすることができる。マシンがシミュレートまたはエミュレートされたとき、そのマシンは時には仮想マシンと呼ばれる。仮想マシンは、仮想マシン上で実行されているソフトウェアには、物理マシンのように見えるマシンである。ソフトウェアは、仮想ハード・ドライブ、仮想フロッピー(登録商標)・ディスクなどのような仮想ストレージ・デバイスにファイルをセーブすること、仮想CDからファイルを読み出すこと、仮想ネットワーク・アダプターを介して通信することなどができる。
【0047】
[0052] 仮想環境は、仮想環境の外部のデータや他のリソースに対して、アクセスを制限するか又はアクセスできないようにすることができる。従って、コードが仮想環境のホストを汚染するかどうかを心配する必要無しに、仮想環境は、信頼できないコードのコンパイルに対しての適切な環境を提供することができる。
【0048】
[0053] バイトコードをファイルへ書き込んだ後、プロセスは、電子的にファイルにサインまたは「封印」し、それにより、ファイルに対する何れの変更も検出可能とされる。ファイルの封印は、多くの暗号化および/またはファイル・システムの形態をとり、これは当業者には理解できるであろう。例えば、1つのインプリメンテーションでは、ファイル・システムは、封印したときに、ファイルに拡張した属性を設定することができる。その後にファイルが変更されると、拡張した属性は変更され、ファイルがもはや封印されていないことを、示すことができる。
【0049】
[0054] ストア220へバイトコードを書き込むことを、ここでは時には、バイトコードをキャッシングすると言う。キャッシュ・マネージャー217は、バイトコードをストア220へ格納するように、および要求されたときにバイトコードへのアクセスを提供するように、動作することができる。キャッシュ・マネージャー217は、システム205の再起動後にバイトコードが使用可能であるように、バイトコードがストア220に永続的に格納されることを、確実にすることができる。キャッシュ・マネージャー217はまた、バイトコードへのアクセスを速くするために、望まれる場合には、バイトコードのコピーを、メイン・メモリ、高速キャッシュ・メモリ、ビデオ・メモリ、揮発性および不揮発性のメモリを含む他のメモリなどへ、格納させることができる。
【0050】
[0055] 更に、ここではファイルという用語が時には使用されるが、ここで説明する主題事項の構成の精神および範囲から離れずに、別の実施形態では、バイトコードは、揮発性および/または不揮発性のメモリ、データベースまたはその一部(例えば、レコード)、または何らかの他のストアへ書き込まれ得ることが、理解される。
【0051】
[0056] 1より多くのユーザーがパッケージをインストールする場合、インプリメンテーションは、パッケージに対してのバイトコードの複数のコピーまたは1つのみのコピーを、ストア220へキャッシュすることができる。パッケージが1より多くのプロセッサー・アーキテクチャー(例えば、32ビットおよび64ビット)をターゲットにする場合、コード・ジェネレーター216は、各プロセッサー・アーキテクチャーに対してのターゲットとされたバイトコードを生成してキャッシュすることができる。
【0052】
[0057] 幾つかのインプリメンテーションでは、パッケージのバイトコードを再生成するための幾つかのトリガがあり得る。例えば、バイトコードを含むファイルの封印が壊されているか(例えば、不正が検出されるか)、ストレージ媒体が破損されているか、またはキャッシュが無効または不完全であることを他のデータが示す場合、これは、パッケージのバイトコードを再生成させるトリガとして働くことができる。この場合におてい、実行マネージャー218が、封印が壊されていると判定した場合、実行マネージャー218は、コード・ジェネレーター216に命令して、パッケージに対するバイトコードを再生成させることができる。コード・ジェネレーター216は、コード・ジェネレーター216が最初にバイトコードを生成した様式(例えば、パッケージのコンポーネントに対応するエレメントを、キューまたは他のデータ構造に配し、バイトコードの生成が必要なことを示す)と似た様式で、バイトコードを生成することができる。
【0053】
[0058] 別の例として、バイトコードを用いる環境が新たなバージョンへとアップグレードされた場合、これは、バイトコードを再生成することをトリガすることができる。例えば、インターネット・ブラウザーまたは別の実行環境が、異なるバイトコードの文法やシンタックスを有する新たなバージョンへとアップグレードされた場合、これは、その新たなバージョンに対して適切なバイトコードを再生成することをトリガすることができる。この例では、トリガは、ユーザーがそのバイトコードと関連するソフトウェアの実行を試みたときに、生じ得る。これは、使用のときにバイトコードを再生成させることができ、全てのインストールされたパッケージのバイトコードの一度での再生成を避けることができる。
【0054】
[0059] 別の例として、周期的なメンテナンス・タスクが、異なるバイトコードの文法やシンタックスを有する新たなバージョンへと実行環境が更新されたことを、検出した場合、これは、その新たなバージョンに対して適切なバイトコードを再生成することをトリガすることができる。
【0055】
[0060] 別の例では、新たなバージョンのパッケージがインストールされる場合、これは、バイトコードを再生成させるためのトリガとして働くことができる。
[0061] 別の例では、バイトコードが何らかの理由で削除される場合、これは、バイトコードを再生成させるためのトリガとして働くことができる。
【0056】
[0062] ストア220では、ソース・コードおよび対応するバイトコードは、1つの例では、図3に示すように格納することができる。図3は、ここで説明される主題事項の構成に従って用いることができる例示のデータ構造を示す。1つのインプリメンテーションでは、図3に示すデータ構造は、データ構造において使用可能なソース・コード・ファイルおよびバイトコード表現を示すテーブルを有することができる。テーブルはまた、データ構造におけるソース・コード・ファイルおよびバイトコード表現の場所を示すデータを含むことができる。データ構造は、ここで説明する主題事項の構成の精神および範囲から離れずに、ファイルに格納すること又はファイルとして表すこと、データベースに格納すること、または別のストアに格納することができる。
【0057】
[0063] 図3を見ると、データ構造305は、並べて配されたソース・コードと、対応するバイトコードとを有することができる。ストア220がファイル・システムとしてインプリメントされる場合、データ構造305は、バイトコードへアクセスするために必要なファイル・ハンドラーなどの数を低減することができるので、データを得る効率を改善することができる。ソース・コードが、1以上のウェブ・ページなどではなくパッケージ内にある場合、ソース・コードおよび対応するバイトコードを並べて配することは、デフォルトの挙動であり得る。望まれる場合には、このデフォルトの挙動をオーバーライドすることができる。
【0058】
[0064] 別のインプリメンテーションでは、ストア220がファイル・システムとしてインプリメントされる場合、パッケージの1以上のコンポーネントのそれぞれに対して個別のバイトコード・ファイルがあり得る。これは、幾つかのシナリオでは効率が低下し得るが、別の利点および用法を有し得る。このインプリメンテーションは、例えば、ソース・コードがパッケージの外部(例えば、1以上のウェブ・サイト)に存在し得るとき、および/またはソース・コードが動的に生成され得るときに、用いることができる。
【0059】
[0065] 別の例として、これは、ホストまたはユーザーが1つのウェブ・サイトと関連する全情報を消去することを望み得る、自然に分離されたエクスペリエンスの場合に、用いることができる。
【0060】
[0066] 別の例として、これは、ブラウザーに対して、所与のウェブ・サイトのリソースが予め知らされているというシナリオにおいて、用いることができる。この例では、ブラウザーは、ウェブ・サイトのリソースをプリフェッチして、ネットワーク接続の無いときでもウェブ・サイトを用いることができる。この例では、ウェブ・サイトにおける深いページに対してでさえ、HTMLマークアップのページに対するスクリプト・ファイルへの明確な参照に遭遇していなくとも、バイトコードを生成することができる。
【0061】
[0067] 1つのファイルにおけるソース・コードおよび対応するバイトコードを捜すか、またはそれぞれのソース・コード/バイトコード・ペアに対しての個別のファイルを捜すかは、パッケージを実行している環境に基づき得る。環境がウェブ・ブラウザーである場合、キャッシュ・マネージャーは、各ソース・コード・コンポーネントに対応するバイトコードに対する個別のファイルを捜し得る。環境が、全ソース・コード・コンポーネントがパッケージから来たものであるのでそれらが予め知られているといったアプリケーション・フレームワークまたは別の環境(例えば、上記の、予め知らされているウェブ・サイトの例)である場合、キャッシュ・マネージャーは、1つのファイルに並べて配されるパッケージ全体に対するバイトコードを捜し得る。
【0062】
[0068] データ構造305において、パッケージの全てのコード・コンポーネントが対応するバイトコードを有さないこともあり得る。例えば、様々な理由で、パッケージの1以上のコンポーネントに対してバイトコードを生成しないことが望ましいことがある。そのような場合、そのコンポーネント(1以上)に対するソース・コードおよびバイトコードは、データ構造305から省かれ得る。
【0063】
[0069] 更に、データ構造305は、2以上のパッケージ間での共有のために、メモリ・マップされ得る。例えば、幾つかの場合、複数の異なるパッケージは、1以上の同一のソース・コンポーネントを有し得る。これらの場合、メモリ・マッピングは、同一のソース・コンポーネントに対するバイトコードを共有するために用いることができ、それにより、メモリにおいてバイトコードの複数のコピーを必要としなくなる。更に、データ構造305におけるバイトコードはリード・オンリーとすることができ、それにより、共有のためにメモリ・マッピングされたときに変化しなくなる。
【0064】
[0070] 図2および図3を参照すると、コードの実行において、実行マネージャー218は、実行マネージャーがパースしているドキュメント(例えば、HTML、XML、ワード・プロセッシング、または他のドキュメント)におけるソース・コードを参照する参照(例えば、HTTPまたは他の参照)を、見つけることができる。実行マネージャー218は、最初に、その参照に対応するバイトコードの現在のバージョンがキャッシュに存在するかを確かめるために、データ構造を調べることにより検査を行うことができる。バイトコードがキャッシュ内に存在する場合、実行マネージャー218は、実行のためにそのバイトコードを得ることができる。バイトコードがキャッシュ内に存在しない場合、実行マネージャー218は、ソース・コードの場所からソース・コードを得ること、およびソース・コードをコンパイルさせて遅延無く(例えば、コード・ジェネレーター216が、キューにある未処理のコンパイル・リクエストの何れのものをも完了させることを待つこと無しに)実行させることができる。
【0065】
[0071] 1つのインプリメンテーションでは、ソース・コードに対応するバイトコードは、ソース・コードに対する並列のディレクトリーに存在し得る。例えば、ソース・コードが、C:\PackageName\SourceCode\sourcecodename.scriptfileに存在する場合、バイトコードは、存在する場合には、C:\PackageName\SomeName\bytecodename.bytecodefileに存在し得る。
【0066】
[0072] 別のインプリメンテーションでは、ソース・コードはリモート・デバイスに存在し得る。
[0073] 図4は、ここで説明する主題事項の構成が動作できる環境のコンポーネントの例示の構成を表すブロック図である。図4に示すコンポーネントは、例示であり、必要とされ得る又は含まれ得るコンポーネントを全て含んでいることを意味していない。別の実施形態では、図4と関連して説明するコンポーネントおよび/または機能は、ここで説明する主題事項の構成の精神または範囲から離れずに、他のコンポーネント(示されたもの又は示されていないもの)に含ませること、またはサブコンポーネントに配することができる。幾つかの実施形態では、図4と関連して説明するコンポーネントおよび/または機能は、複数のデバイスにわたって分散させることができる。
【0067】
[0074] 図4を見ると、環境405は、ターゲット・デバイス410、ネットワーク415、コード・サーバー417、および他のコンポーネント(示さず)を含むことができる。ターゲット・デバイス410およびコード・サーバー417は、1以上の計算デバイスを含むことができる。そのようなデバイスは、例えば、パーソナル・コンピューター、サーバ・コンピューター、手持型またはラップトップ型のデバイス、マルチプロセッサー・システム、マイクロコントローラー・ベースのシステム、セットトップ・ボックス、テレビジョン、プログラマブルの大衆消費電子製品、ネットワークPC、ミニコンピューター、メインフレーム・コンピューター、セル電話、パーソナル・デジタル・アシスタント(PDA)、ゲーム用デバイス、プリンター、セットトップを含むアプライアンス、メディア・センター、または他のアプライアンス、自動車への埋め込み型または取り付け型の計算デバイス、他のモバイル・デバイス、上記のシステムやデバイスの何れかを含む分散型計算環境などを含む。ターゲット・デバイス410またはコード・サーバー417として作動するように構成することができる例示のデバイスは、図1のコンピューター110を含む。
【0068】
[0075] 1つの実施形態では、ネットワーク415はインターネットを含むことができる。1つの実施形態では、ネットワーク415は、1以上のローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、直接接続、仮想接続、プライベート・ネットワーク、仮想プライベート・ネットワーク、上記のものの何らかの組み合わせなどを、含むことができる。
【0069】
[0076] コード・サーバー417は、ターゲット・デバイス410へコードを提供することができる。1つの実施形態では、コード・サーバー417はウェブ・サーバーとすることができる。別の実施形態では、コード・サーバー417は、組織のプライベート・ネットワークの内部のマシンとすることができ、それはコードを含む。別の実施形態では、コード・サーバー417は、ソース・コードをターゲット・デバイス410へ提供することができる任意のデバイスを含むことができる。
【0070】
[0077] ターゲット・デバイス410は、コードを実行する ことができるデバイスである。ターゲット・デバイス410は、コンパイル環境420と、実行環境425と、インストーラー430と、ストア435とを含むことができる。インストーラー430は、図2のインストーラー215と類似にインプリメントすることができ且つ作動することができ、ストア435は、図2のストア220と類似にインプリメントすることができ且つ作動することができる。
【0071】
[0078] コンパイル環境420は、権限を制限された環境を含むことができ、そこでソース・コードをバイトコードへとコンパイルすることができる。1つの実施形態では、コンパイル環境420は、上記のような仮想環境を含むことができる。別の実施形態では、コンパイル環境420は、先に説明したような、権限を制限された異なる環境を含むことができる。
【0072】
[0079] 実行環境425は、パッケージのソフトウェアが実行される環境を含むことができる。1つのインプリメンテーションでは、実行環境425は、インターネット・ブラウザーを含むことができる。別の実施形態では、実行環境425は、ソース・コードを含み得るパッケージのソフトウェアを実行することができるホスト・プロセスを、含むことができる。
【0073】
[0080] 図5および図6は、ここで説明する主題事項の構成に従って生じ得る例示のアクションを概略的に表すフロー図である。説明を簡単にするために、図5および図6と関連して説明するメソドロジーは、一連の行為として示され説明される。ここで説明する主題事項の構成は、示される行為および/または行為の順番により限定されないことを、理解および解釈すべきである。1つの実施形態では、行為は、後に説明する順に生じる。しかし、別の実施形態では、行為は、並列、別の順、および/またはここで呈示も説明もしていない他の行為と共に、生じ得る。更に、ここで説明する主題事項の構成に従ってメソドロジーをインプリメントするために、全ての示した行為が必要ではない場合もあり得る。更に、メソドロジーは、状態図を介して一連の相互に関係した状態として又はイベントとして代替的に表せ得ることを、当業者は理解および解釈するであろう。
【0074】
[0081] 図5を見ると、ブロック505においてアクションが開始する。
[0082] ブロック510において、パッケージが受け取られ、これは、ターゲット・デバイスでインストールするソフトウェアのソース・コードを含む。例えば、図4を参照すると、ターゲット・デバイス410は、コード・サーバー417からパッケージを得ることができる。別の例としては、インストーラー430は、ストア435に存在するパッケージをインストールするように命令され得る。
【0075】
[0083] ブロック515において、パッケージは、ターゲット・デバイス410にインストールされる。例えば、図2を参照すると、インストーラー215は、ストア220にパッケージをインストールすることができる。
【0076】
[0084] ブロック520において、キューなどのようなデータ構造においてインジケーターが配される。データ・インジケーターは、パッケージのソース・コードがバイトコードへとコンパイルされることを示す。パッケージのソース・コードの各ファイルに対するデータ構造において配される別個のインジケーターが存在し得る。例えば、図2を参照すると、インストーラー215は、ストア220に格納されたデータ構造において1以上のフラグを配することができる。
【0077】
[0085] ブロック525において、アクションを開始または完了する前にパッケージのソフトウェアを実行するリクエストが受け取られないかぎり、ソース・コードを最初にコンパイルするアクションが行われる。ソース・コードをコンパイルするためのこれらのアクションは、例えば、下記のことを含むことができる。
【0078】
[0086] 1. データ構造を通して反復して、コンパイルが必要であることを示すインジケーター(1以上)を見つける。
[0087] 2. 上記のステップ1で見つけたそれぞれの適用可能なソース・コード・エレメントを、バイトコードまたは何らかの他のコードへとコンパイルする。
【0079】
[0088] 例えば、図2を参照すると、コード・ジェネレーター216は、データ構造を通して反復して、データ構造内で見つかったフラグに対してのソース・コード・ファイルをコンパイルすることができる。別の例として、コード・ジェネレーター216は、ファイルのリストを通して反復して、所与の拡張子(例えば、「.js」や、ソース・ファイルを示す別の拡張子)を有する何れのファイルをもコンパイルすることができる。
【0080】
[0089] ブロック530において、コンパイルされたコードは、次に、不揮発性メモリにおいて保持させることができる。例えば、図2を参照すると、キャッシュ・マネージャー217は、コード・ジェネレーター216により生成されたコードを、ストア220に格納することができる。コードはまた、素早いロードや実行のために、メモリ内キャッシュまたはRAMなどのような揮発性メモリに格納することもできる。
【0081】
[0090] ブロック535は、アクション520〜530の横側に置かれており、パッケージのソフトウェアを実行するリクエストが、それらのアクションの前、最中、または後に生じ得ることを示している。そのようなリクエストが受け取られると、他のアクションは、520〜530のアクションの開始または完了の前に行われ得る。例えば、そのようなリクエストが、ブロック520〜530のアクションの開始または完了の前に受け取られた場合、ソース・コードは、迅速にコンパイルおよび実行され得る。そのようなリクエストが受け取られた場合に生じることを記述する他のアクションは、図6と関連して説明する。
【0082】
[0091] ブロック540において、他のアクションがある場合には、それを行うことができる。例えば、再生成トリガ・イベントを、受け取ることができる。それに応じて、ブロック520〜530のアクションを、可能性としては、異なるソース・コード(ソース・コードが変更された場合)およびその異なるソース・コードからコンパイルされた異なる第2のコードを用いて、再び実行することができる。
【0083】
[0092] 図6を見ると、ブロック605においてアクションが開始される。
[0093] ブロック610において、ソース・コードを含むソフトウェアを実行するリクエストが受け取られる。例えば、図2を参照すると、実行マネージャー218は、ストア220にインストールされたパッケージのソフトウェアを実行するリクエストを受け取る。
【0084】
[0094] ブロック615において、コードが既にコンパイルされて不揮発性ストレージに格納されているかどうかに関する判定が、行われる。そうである場合、アクションはブロック640で継続され、そうではない場合、アクションはブロック620で継続される。例えば、図2を参照すると、実行マネージャー218は、キャッシュ・マネージャー217を用いて、パッケージが既にコンパイルされてストア220に格納されているかどうかを、判定する。
【0085】
[0095] ソース・コードが既にコンパイルされているかどうかを判定することは、不揮発性ストレージの既知の場所においてコンパイル済みコードを検査することを含み得る。既知の場所は、パッケージの名前または他の識別子に対応し得る。例えば、既知の場所は、そのパッケージに因んで名付けられたディレクトリーや、そのディレクトリーの子孫ディレクトリーであり得る。別の例として、既知の場所は、データ構造において参照される場所であり得、それは、そのコードに対してのコンパイル済みコードが存在する場合には、それの配される場所を示す。別の例として、既知の場所は、ソース・コードのソースの場所(例えば、コード・サーバー)を識別する参照から導き出される場所であり得、ソースの場所へは、ネットワークを介して到達可能である。更に別の例として、ソース・コードが既にコンパイルされているかどうかを判定することは、パッケージに対するバイトコードをパッケージに対するソース・コードと並べて配するファイルに格納されたデータ構造を検査することを、含み得る。データ構造は、第2のコードが既に生成されてフアイルに格納されているかどうかを、示すことができる。
【0086】
[0096] ブロック620において、ソース・コードが得られる。例えば、図2を参照すると、コード・ジェネレーター216は、ストア220からソース・コードを得る。
[0097] ブロック625において、バイトコード(または他のコード)が、ソース・コードから生成される。例えば、図2を参照すると、コード・ジェネレーター216は、バイトコード、機械実行可能コード、または何らかの他の中間コードを、上記で得たソース・コードから作成する。
【0087】
[0098] ブロック630において、コード(又は実行可能コードや他の中間コードなどのような、それから導き出されたコード)が実行される。例えば、図2を参照すると、実行マネージャー218は、上記の生成されたコードを実行する。
【0088】
[0099] ブロック635において、コードは不揮発性ストレージで保持される。ブロック635により表されるアクションは、上記の又は後の期間に行われるアクションと関連して生じ得る。例えば、図2および図3を参照すると、コード・ジェネレーター216は、キャッシュ・マネージャー217を用いて、データ構造305において、パッケージに対するコードを並べて配すること、およびそのデータ構造305を、ソフトウェアを後に実行する際に使用するために、ストア220に格納することができる。別の例としては、後に、コード・ジェネレーター216が、ソース・コードを再び得て、コンパイルされたコードを再び生成して、そのコンパイルされたコードをストア220に格納することができる。
【0089】
[00100] ブロック640において、コードが既にコンパイルされていた場合、そのコンパイルされたコードが得られる。例えば、図2を参照すると、実行マネージャー218は、キャッシュ・マネージャー217からバイトコードを得ることができる。
【0090】
[00101] ブロック645において、得られたコード(又はバイナリー・コードなどのような、それから導き出されたコード)が実行される。例えば、図4を参照すると、コードは、実行環境425において実行され得る。
【0091】
[00102] ブロック650において、他のアクションがある場合、それを実行することができる。例えば、バイトコードを含むファイルを、メモリ・マップすることができ、そのメモリ・マッピングを介して複数のプロセスで共有することができる。
【0092】
[00103] 別の例として、他のアクションは、コンパイルされたコードが、生成された後に変更されたかどうかを検査することを含むことができ、そうである場合に、ソース・コード(これは元のソース・コードとは異なり得る)を再び得ることと、そのソース・コードを再びコンパイルすることと、そのコンパイルされたコードを、ソフトウェアを後に実行する際に使用するために、不揮発性ストレージに格納することとを、含むことができる。
【0093】
[00104] 上記の詳細な説明から理解できるように、ソフトウェアの生成およびキャッシュと関連する構成が説明された。ここで説明する主題事項の構成は、様々な変更や代替の構成が可能であるが、その特定の例示の実施形態が、図面に示され、上記で詳細に説明されている。しかし、特許請求される主題事項の構成を、開示した特定の形態に限定することは意図しておらず、むしろ、ここで説明した主題事項の様々な構成の精神内および範囲内にある全ての変更、代替の構成、および等価物をカバーすることを意図していることを、理解すべきである。
図1
図2
図3
図4
図5
図6