(57)【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、ジャバスクリプトコードおよびジャバスクリプトにコンパイルされる他のコードをデバッグするための方法であって、
ソースファイル単位で、前記ジャバスクリプトコードの１つまたは複数のセグメントをライブラリコードとして指定するユーザー入力を受け取ることと、
ソースファイル単位で、前記ジャバスクリプトコードのユーザーにより生成されたセグメントをマイコードとして指定するユーザー入力を受け取ることと、
前記マイコードのみにおけるエラーを識別するために、前記ジャバスクリプトコードをステップスルーするためのステップ動作を含むデバッグ動作を前記ジャバスクリプトコードに対して実行し、前記ユーザーにより生成されたセグメントは、ライブラリコードとして指定されなかったコードに対応することと、
スクリプトエンジンによって次のコード文を実行するステップ動作をデバッガによって実行することと、
前記デバッガ内でエラーが発生した場合に実行されたコードが、前記マイコードと指定されたコードでない場合には、前記デバッガは、実行スタックにおいてマイコードとして指定されているドキュメントをスキャンすることと、
を含む方法。
【請求項２】
スクリプトエンジンによって次のコード文を実行するステップ動作をデバッガによって実行することと、
前記実行される文がユーザーにより生成されたコードである場合、デバッガユーザーインターフェース上で前記実行された文を識別することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記ジャバスクリプトコードの前記１つまたは複数のセグメントが、コンパイル済みスクリプトファイル内の注釈によって識別される別個のドキュメントである、請求項１に記載の方法。
【請求項４】
前記ジャバスクリプトコードの前記１つまたは複数のセグメントが、コンパイル済みスクリプトファイルについてのソースマップによって識別される別個のドキュメントであり、前記別個のドキュメントは、ジャバスクリプトまたは他のプログラミング言語で書かれている、請求項１に記載の方法。
【請求項５】
実行が前記デバッガにイールドする場合、前記ドキュメントバウンダリにおいて、前記ジャバスクリプトの通常の実行を継続すること、
をさらに含む、請求項１に記載の方法。
【請求項６】
実行が前記デバッガにイールドしない場合、前記ドキュメントバウンダリにおいて、前記ドキュメントバウンダリに続く文がユーザーにより生成されたコードであるかを判定することと、
前記文がユーザーにより生成されたコードである場合、デバッガユーザーインターフェース上で前記実行される文を識別することと、
をさらに含む、請求項１に記載の方法。
【請求項７】
実行が前記デバッガにイールドしない場合、前記ドキュメントバウンダリにおいて、前記ドキュメントバウンダリに続く文がライブラリコードであるかを判定することと、
前記実行される文がライブラリコードである場合、前記スクリプトエンジンに、次のドキュメントバウンダリへステップするように命令することと、
をさらに含む、請求項１に記載の方法。
【請求項８】
デバッガと、１つまたは複数のジャバスクリプトドキュメントと、スクリプトエンジンとを含むコンピュータシステムであって、前記デバッガは、ジャバスクリプトコードをステップスルーするためのステップ動作を含む、１つまたは複数のデバッグ動作を実行するように構成され、前記デバッガは、
ソースファイル単位で、前記ジャバスクリプトコードの１つまたは複数のセグメントをライブラリコードとして指定するユーザー入力を受け取り、
ソースファイル単位で、前記ジャバスクリプトコードのユーザーにより生成されたセグメントをマイコードとして指定するユーザー入力を受け取り、
前記マイコードのみにおけるエラーを識別するために、前記ジャバスクリプトコードをステップスルーし、
前記デバッガ内でエラーが発生した場合に実行されたコードが、前記マイコードと指定されたコードでない場合には、前記デバッガは、実行スタックにおいてマイコードとして指定されているドキュメントをスキャンし、
ユーザーによってステップインするように指示される場合、前記スクリプトエンジンによって次のコード文を実行し、前記実行される文がユーザーにより生成されたコードである場合、デバッガユーザーインターフェース上で前記実行される文を識別し、
前記実行される文がライブラリコードである場合、前記スクリプトエンジンに、ドキュメントバウンダリへステップンするように命令する
ように動作する、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［背景技術］
[0001]  多岐にわたるライブラリおよびプラグインがジャバスクリプトに使用可能であり、このことは、ジャバスクリプトベースのアプリケーションのより簡単な開発を可能にする。このようなライブラリは、すでにデバッグされ、最適化されているので、ジャバスクリプト開発者は、通常、ライブラリ自体はデバッグされる必要がないと想定する。加えて、このようなツールのうちの多くは、基礎をなすコードが難読化され、開発者には読めなくなるように圧縮および縮小されており、これは、ジャバスクリプト開発者がこれらの第三者のライブラリをさらに変更することを防止する。ジャバスクリプト開発者のコード内のエラーは、このようなライブラリ内にエラーを引き起こすことがあり、これは、開発者がライブラリコードを変更できないか、または変更したくない場合、コードをデバッグする際に混乱を招くおそれがある。それよりも、開発者は、開発者自身のコード内のエラーを識別することにより興味があることが多い。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
[0002]  本概要は、発明を実施するための形態において以下にさらに説明される概念の集まりを簡略化された形式で選択された概念を紹介するために提供される。本発明の概要は、特許請求される主題の重要な特徴または本質的な特徴を識別することを意図されず、特許請求される主題の範囲を限定するために使用されることも意図されない。
【課題を解決するための手段】
【０００３】
[0003]  デバッガは、ジャバスクリプト開発者が第三者のライブラリをブラックボックスとして扱うことを可能にし、それにより、それらのライブラリ内のエラーが開発者に識別されないようにする。その代わりに、ジャバスクリプト開発者は、開発者自身のコードが実行上の問題についてどのように誤りがあるかを迅速に識別することができる。
【０００４】
[0004]  スクリプトホストは、入力がデバッギングにとって興味があるか否か、すなわち、コードが開発者のコードであるのか、または第三者のコードであるのかを識別する。このような入力に基づいて、スクリプトデバッガは、興味がない入力を自動的に排除するか、またはステップオーバする。
【０００５】
[0005]  効率的なジャバスクリプトデバッグ体験を提供するために、デバッグモニタは、新たなタイプのステップメカニズムを提供し、このステップメカニズムは、本明細書において、「Ｓｔｅｐ  ｔｏ  Ｄｏｃｕｍｅｎｔ  Ｂｏｕｎｄａｒｙ」と呼ばれる。他の一般的なステップ方法（例えば、ステップイントゥ、ステップオーバ、ステップアウト）を使用することは、興味がある入力を見逃すか、またはリモートデバッギング中にはあまりに煩雑（chatty）となるかのいずれかとなるであろう。
【０００６】
[0006]  本発明の上記および他の利点および特徴をさらに明確にするために、本発明の実施形態のより具体的な説明は、添付の図面を参照しつつ、与えられるであろう。これらの図面は、本発明の典型的な実施形態のみを図示しており、そのため、本発明の範囲を限定するものとみなされるべきではないことが認識される。本発明は、添付の図面の使用を通じて、追加の特異性および詳細と共に説明および解説されるであろう。
【図面の簡単な説明】
【０００７】
【図１】[0007]例示的な実施形態に係る、デバッガツールまたは統合開発環境アプリケーションのためのユーザーインターフェースを例示する図である。
【図２】[0008]ジャストマイコードを用いてデバッグする場合に開発者のプリファレンスを選択するためのユーザーインターフェースを例示する図である。
【図３】[0009]一実施形態に係る、デバッガにおいてブレークをトリガする例外をどのように処理するかを評価するためのプロセスのフローチャートである。
【図４】[0010]一実施形態に係る、デバッガのステップ挙動を処理するためのプロセスを例示するフローチャート。
【図５】[0011]どの部分が開発者コードであり、どの部分がライブラリコードであるのかを示すコメントを有する注釈つきのコンパイル済みドキュメントを例示する図である。
【図６】[0012]コンパイル済みドキュメント内のドキュメントバウンダリを識別するためにソースマップが使用される実施形態を例示する図である。
【図７】[0013]ジャストマイコード機能を使用したジャバスクリプトデバッグのための適切なコンピューティングおよびネットワーキング環境の一例を例示する図である。
【発明を実施するための形態】
【０００８】
[0014]  図１は、例示的な実施形態に係る、デバッガツールまたは統合開発環境（IDE:integrated development environment）アプリケーションのためのユーザーインターフェース１００を例示する図である。ユーザーインターフェース１００は、開発者がデバッグ用のコードを選択し、当該コードが当該開発者によって作成されたもの、すなわち、「マイコード（my code）」であるのか、または外部ソースからのものであるのかを識別することを可能にする。
【０００９】
[0015]  コードウィンドウ１０１は、ジャバスクリプトドキュメントなどの選択されたソースファイルについての一連のコードを示す。ソースドキュメントウィンドウ１０２は、デバッギングに使用可能なファイルを示す。開発者は、マウスもしくはタッチパッドなどのポインティングデバイスを使用して、またはメニューコマンドを使用して、ソースファイルのうちの１つを選択し得る。これらのファイルは、コードウィンドウ１０１内に示されるａｐｐｌｉｃａｔｉｏｎ．ｊｓという例示的なコードなどの、開発者によって書かれたコードであり得る。開発者によって使用されてはいるが、開発者によって作成されたものではないライブラリ、プラグイン、および他の外部ファイルも、ウィンドウ１０２内に示され得る。例えば、開発者は、既存の機能を再作成するよりもむしろ、その機能のためのコードを有するオープンソースドキュメントを取得し、そのオープンソースドキュメントを新たなアプリケーション内で使用し得る。
【００１０】
[0016]  開発者は、ソースドキュメントウィンドウ１０２内のファイルを選択し、マウスを用いて「右クリックすること」、またはメニューコマンドを使用することによって、コード指定ウィンドウ１０３を開き得る。開発者は、適当なオプションを選択することによって、選択されたコードをライブラリファイルとして、または開発者自身のコード、すなわち、「マイコード」として指定し得る。ファイル指定は、デバッガツールまたはＩＤＥによって、そのファイルについてのコード内のエラーに移るか、またはそのファイルについてのコード内のエラーを表示するかを判定するために使用される。
【００１１】
[0017]  ユーザーインターフェース１００は、時計１０４、ブレークポイント１０５、またはデバッガツールのためのイベントを設定する能力などの他の構成オプションも開発者に提供する。開発者は、選択されたコードについてのコールスタック１０７も見ることができる。
【００１２】
[0018]  図２は、ジャストマイコード機能を用いてデバッグする場合に開発者のプリファレンスを選択するためのユーザーインターフェース２００を例示する。開発者は、チェックボックス２０１または他の機能を使用して、「マイコード」として指定されたファイルにデバッグを限定することを選択し得る。開発者は、ライブラリコードを識別する際に、デバッガツールまたはＩＤＥが使用すべきＵＲＩをウィンドウ２０２において指定し得る。マイコードＵＲＩウィンドウ２０３は、デバッガによって「マイコード」としてみなされるべきファイルを特定するために、開発者によって使用され得る。
【００１３】
[0019]  ユーザーインターフェース２００は、ライブラリファイル（２０２）とみなされるか、または「マイコード」（２０３）としてマークされるドキュメントおよびファイルをユーザーが具体的に選択することを可能にする。ライブラリファイルとして、または「マイコード」として具体的に指定されないファイルは、ワイルドカードマッチングまたはヒューリスティックによって、そのようなものとしてマークされ得る。例えば、特定のファイルｌｉｂｒａｒｙ．ｊｓは、ライブラリファイルとして具体的に指定され、ワイルドカード＊．ｍｉｎ．ｊｓ．を使用することで、縮小済みのあらゆるジャバスクリプトもライブラリファイルとみなされ、「マイコード」から除外される。
【００１４】
[0020]  開発者のユーザースクリプトコードのデバッグ中に、開発者は、テスト環境が予想通りに機能しているかを判定するために、開発者がテスト環境を調べ得るブレークポイントを挿入することが多い。ブレークポイントにおいて、開発者は、変数を調べ、異なる関数へそれらの間のコードを実行せずにステップし、コードを編集および実行を継続し、例外処理を見直す等し得る。デバッガが、デバッグ対象のアプリケーション内のブレークポイントに到達すると、デバッグ対象は、開発者によって実行が再開されるまでフリーズする。しかしながら、開発者は、ライブラリコードまたはオープンソースコード内でアプリケーションを停止させることを望まないかもしれない。なぜならば、そのライブラリコードまたはオープンソースコードは、すでにデバッグ済みである可能性が高く、そのため、デバッグ対象のアプリケーションにおけるエラーの原因ではない可能性が高いためである。その代わりに、開発者は、開発者自身のコード（「マイコード」）内にある可能性が高い、エラーの近因を確認することを望む。
【００１５】
[0021]  エラーを引き起こしている開発者自身のコードを手動でナビゲートすることを開発者に求めるよりもむしろ、ジャストマイコード機能を使用するデバッガは、ライブラリおよびオープンソースコードを自動的にスキップする。デバッガツールが、通常は停止をトリガするであろう例外に遭遇した場合、デバッガは、ソースファイルが「マイコード」を構成するかを評価する。ソースファイルが「マイコード」を構成しない場合、デバッガは、「マイコード」ＵＲＩに一致する実行スタック上で最新のドキュメントがないか実行スタックをスキャンする。デバッガが「マイコード」ドキュメントを見つけると、デバッガは、デバッガ（１０２）において関連する行を強調する。「マイコード」ドキュメントが見つからない場合、例外が発生したドキュメントが表示され得るか、または、任意選択により、例外は完全に無視され得る。他の全てのデバッガ機能は、典型的な手法で挙動する。デバッガは、一般に、ライブラリファイルまたはオープンソースファイルについてのソースコードを表示しない。しかしながら、開発者は、例えば、コールスタック（１０７）をナビゲートすることによって、「マイコードではない」ファイルを調べることも選び得る。
【００１６】
[0022]  図３は、一実施形態に係る、デバッガにおいてブレークをトリガする例外をどのように処理するかを評価するためのプロセスのフローチャートである。このプロセスは、例えば、ファーストチャンス例外またはユーザー未処理の例外をどのように取り扱うかを例示する。工程３０１において、例外がデバッガ内で発生する。工程３０２において、デバッガは、例外が発生したコードが「マイコード」として指定済みであるか判定する。現在のコードが「マイコード」として指定済みである場合、工程３０３において、デバッガは、エラーが発生した現在のコールコンテキストを表すスクリプト内の行を表示する。
【００１７】
[0023]  工程３０２において、現在のコードが「マイコード」として指定済みではない場合、デバッガは、工程３０４において、コールスタックにおいてレベルを１つ自動的にナビゲートダウンする。デバッガは、工程３０５において、コールスタックが調べ尽くされた（exhausted）かを評価する。コールスタックが調べ尽くされていない場合、本プロセスは、デバッガがコールスタックのこのレベルが「マイコード」として指定済みであるかを評価する工程３０２へ戻り、上述されたように進む。
【００１８】
[0024]  工程３０５において、コールスタックが調べ尽くされた場合、本プロセスは、工程３０６へ移り、デバッガは、コールスタックの最上部へ戻る。工程３０７において、デバッガは、ユーザーが外部コード内のエラーを見直すことに興味があるかをさらに評価する。ユーザーは、これを、例えば、ポップアップユーザーインターフェースクエリに応答することによって、全ての外部エラーについて、またはエラーごとに構成設定において示し得る。ユーザーが外部エラーを見直すことを望む場合、本プロセスは、コールスタックの最上部におけるコンテキストを表すスクリプト内の行における例外アシスタントをデバッガが表示する工程３０３へ移る。そうでない場合、ユーザーは、任意選択により、工程３０７において例外を無視し得る。例外が無視される場合、本プロセスは、工程３０８へ移り、通常の実行が再開される。
【００１９】
[0025]  効率的なジャバスクリプトデバッグ体験を提供するために、デバッガツールは、新たなタイプのステップメカニズム：「Ｓｔｅｐ  ｔｏ  Ｄｏｃｕｍｅｎｔａｒｙ  Ｂｏｕｎｄａｒｙ」を提供する。プロセスデバッグマネージャ（PDM:process debug manager）は、スクリプトエンジンのデバッガとユーザーインターフェースとの間の関係を調停する。ＰＤＭは、ユーザー入力を解釈し、当該ユーザー入力をスクリプトエンジンの基礎をなす工程挙動に変換する。
【００２０】
[0026]  デバッギングについての一般的なステッピングパターンは、「ステップイン／ネクスト」、「ステップオーバ」、および「ステップアウト」であり、これらは、期待される機能的挙動に対する現在のプログラミング言語の範囲の関係を識別する。ドキュメント指向のプログラミング言語であるジャバスクリプトの場合、スクリプトは、いくつかの異なるファイルに由来し得るが、ファイルのコンパイルは存在しない。ユーザーインターフェース１００、２００は、ジャバスクリプトドキュメント内のコードが「マイコード」、ライブラリコード、または何らかの他の名称であるのかを示すために使用され得る。ジャバスクリプトについて「マイコード」を効率的にデバッグすることをサポートするために、新たなステップ挙動が導入される。開発者が、関数呼び出しに「ステップインする」ことを望み、その関数呼び出しが、「マイコード」としてマークされないドキュメント内に存在する場合、従来のデバッガは、開発者が「ステップイン」コマンドを発行することを求めるであろう。開発者がリモートデバッグしている場合、これは、ネットワーク上で非常に「煩雑に」なり得、実行に長時間を要し得る。
【００２１】
[0027]  「ｓｔｅｐ  ｔｏ  ｄｏｃｕｍｅｎｔａｒｙ  ｂｏｕｎｄａｒｙ」コマンドを使用することで、ＰＤＭは、スクリプトエンジンに、スクリプトエンジンが現在のドキュメントを離れるまで実行を継続するように伝える。この機能は、開発者に透過的となるように、デバッガによって自動的にトリガされ得る。この機能性は、反対方向においても存在し得る。ユーザーが関数呼び出しを「ステップアウトする」ことを選択する場合、呼び出し関数は「マイコード」ではなかったかもしれず、その時点で、ユーザーは、現在実行中の関数の下のコールスタックにおける最初の「マイコード」ドキュメント命令に移るべきである。この時点で「マイコード」ドキュメントが存在しない場合、実行は、通常通り再開すべきである。これは、開発者が作成しておらず、デバッグ中に関心がないコードを隠す効果がある。
【００２２】
[0028]  本発明の実施形態は、ドキュメントバウンダリを示すためのエントリイベントおよび終了イベントを用いてデバッグする際に、全ての関数本体に注釈を付け、これは、スクリプトがいつドキュメントを移行するかをデバッガに伝える。
【００２３】
[0029]  図４は、一実施形態に係る、デバッガのステップ挙動を処理するためのプロセスを例示するフローチャートである。このプロセスは、Ｓｔｅｐ  ｔｏ  Ｄｏｃｕｍｅｎｔ  Ｂｏｕｎｄａｒｙ機能性をサポートするために、既存のデバッガに付加され得る。工程４０１において、開発者は、ユーザーインターフェースレベルでステップインまたはステップアウト（すなわち、任意のステップ動作）する所作を行う。工程４０２において、ＰＤＭは、スクリプトエンジンに、対応する動作を実行するように命令する。工程４０３において、デバッガは、開発者が「ステップイントゥした」対象コードが「マイコード」であるかを次のコード文において評価する。対象コードが「マイコード」である場合、工程４０４において、ユーザーインターフェースは、デバッグイベントと次に中断される命令におけるコードとを表示する。
【００２４】
[0030]  対象コードが「マイコード」ではない場合（例えば、スクリプトエンジンがライブラリコードにステップインする場合）、工程４０５において、ＰＤＭは、スクリプトエンジンに、次のドキュメントバウンダリへステップアウトするように、すなわち、「ドキュメントバウンダリへステップする（step to document boundary）」ように命令する。工程４０５において、スクリプトエンジンは、ドキュメントバウンダリイベントを検出するまで、実行モードにある。工程４０６において、本プロセスは、スクリプトの実行がデバッガにイールドする（yields）かを判定する。スクリプトの実行がイールドしない場合、工程４０７において、スクリプトは、通常の実行を継続する。スクリプトの実行がイールドする場合、本プロセスは、工程４０３に戻り、次のドキュメントについて、上述されたように継続する。
【００２５】
[0031]  したがって、各デバッギングイベントについて、デバッガは、「マイコード」に移る場合には中断すべきか、またはライブラリコードもしくは「マイコード」とラベル付けされていない他のコードに移る場合に、ドキュメントをステップスルーし、通常の実行を継続すべきかを判定する。
【００２６】
[0032]  他の実施形態において、ドキュメントレベルは、有用な粒度ではないことがある。例えば、開発者は、アプリケーションを展開する前に、開発者のジャバスクリプトファイルの全てを単一のファイルにコンパイルし得る。その時点において、ドキュメントレベルは、「マイコード」とライブラリコードとを区別するための十分な粒度のレイヤではない。より具体的には、アプリケーションが単一のドキュメントにコンパイルされる場合、そのドキュメントは、全て「マイコード」または「マイコードではない」ものとしてラベル付けされ得るにすぎない。
【００２７】
[0033]  この状況を補うために、開発者は、ソースドキュメントに注釈またはコードレベルコメントを付加して、ドキュメントバウンダリが発生する場所を示し得る。これは、開発者が、コードのどの部分が「マイコード」であり、どの部分が「マイコードではない」のか注釈を付けることを可能にする。
【００２８】
[0034]  図５は、どの部分が「マイコード」であり、どの部分が「マイコードではない」のかを示すコメントを有する注釈つきのコンパイル済みドキュメントを例示する。例えば、ソースドキュメント５０１〜５０４は、開発者によって単一のドキュメント５０５にコンパイルされ得る。ドキュメント５０１および５０４は、開発者により生成されたスクリプトであり、ドキュメント５０２および５０３は、ライブラリコード、オープンソースドキュメント、または開発者がデバッグすることを望まない他のスクリプトである。どこから「マイコード」が始まるか５０６と、どこからライブラリコードが始まるか５０７とを示すために、コンパイル済みドキュメントに注釈が付加される。追加のコメント５０８は、各セグメントがどこで終了するかを示し得る。
【００２９】
[0035]  コンパイル済みファイル５０５をデバッグする場合、デバッガは、ドキュメントバウンダリを識別するために、コメント５０６〜５０８を探す。例えば、ライブラリコード内でエラーが発生する場合、デバッガは、ｓｔｅｐ  ｔｏ  ｄｏｃｕｍｅｎｔ  ｂｏｕｎｄａｒｙ機能性を実装する際に、ｅｎｄ  ｌｉｂｒａｒｙ  ｃｏｄｅ注釈５０８を探す。
【００３０】
[0036]  図６は、コンパイル済みドキュメント内のドキュメントバウンダリおよび内容を識別するためにソースマップが使用される別の実施形態を例示する。ソースマップは、結合および縮小されたファイル６０５を元の未ビルド状態６０１〜６０４へマッピングするための手法を提供する。加えて、ソースマップは、結合されたファイルを、タイプスクリプト、コーヒースクリプト、またはダートなどの、ジャバスクリプトにコンパイルされる他の言語へマッピングするための手法を提供する。ソースマップ６０６は、ジャバスクリプトが製品用にビルドされる場合に生成される。元のジャバスクリプトファイル６０１〜６０４は、製品ファイル６０５に縮小および結合される。ソースマップ６０６は、元のファイル６０１〜６０４に関する情報を保持する。開発者が、ジャバスクリプト６０５内のある行番号および列番号を問い合わせする場合、デバッガは、元の位置を判定するために、ソースマップ６０６を検索することができる。デバッガツールは、ソースマップ６０６を自動的に構文解析し、縮小および結合されていないファイル６０１〜６０４を実行しているかのように見せることができる。ソースマップ６０６の情報は、Ｓｔｅｐ  ｔｏ  Ｄｏｃｕｍｅｎｔ  Ｂｏｕｎｄａｒｙ機能のためにドキュメントバウンダリを判定すべく使用され得る。
【００３１】
[0037]  図７は、図１〜図６の例が実装され得る適切なコンピューティングおよびネットワーキング環境７００の一例を例示する。コンピューティングシステム環境７００は、適切なコンピューティング環境の１つの例に過ぎず、本発明の使用または機能性の範囲に関していかなる限定も示唆することを意図されない。本発明は、多数の他の汎用または特殊用途のコンピューティングシステム環境または構成と共に動作可能である。本発明と共に使用するのに適し得る周知のコンピューティングシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたはデバイスのうちのいずれかを含む分散コンピューティング環境等を含むが、これらに限定されない。
【００３２】
[0038]  本発明は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能な命令の一般的なコンテキストにおいて説明され得る。一般に、プログラムモジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み、これらは、特定のタスクを実行し、または特定の抽象データ型を実装する。本発明は、通信ネットワークを通じてリンクされる複数のリモート処理デバイスによってタスクが実行される分散コンピューティング環境においても実践され得る。分散コンピューティング環境において、プログラムモジュールは、メモリ記憶デバイスを含むローカルコンピュータ記憶媒体および／またはリモートコンピュータ記憶媒体に位置し得る。
【００３３】
[0039]  図７を参照すると、本発明の様々な態様を実装するための例示的なシステムは、汎用コンピューティングデバイスをコンピュータ７００の形式で含み得る。構成要素は、処理装置７０１、システムメモリなどのデータストレージ７０２、データストレージ７０２を含む様々なシステム構成要素を処理装置７０１に結合するシステムバス７０３などの様々なハードウェア構成要素を含み得るが、これらに限定されない。システムバス７０３は、メモリバスまたはメモリコントローラ、周辺バス、および多様なバスアーキテクチャのうちのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかであり得る。限定ではなく、例として、そのようなアーキテクチャは、業界標準アーキテクチャ（ISA:Industry Standard Architecture）バス、マイクロチャネルアーキテクチャ（MCA:Micro Channel Architecture）バス、強化ＩＳＡ（EISA:Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、およびメザニンバスとしても知られるＰＣＩ（Peripheral Component Interconnect）バスを含む。
【００３４】
[0040]  処理装置７０１は、本明細書において説明される本発明の態様を実装するために、ＩＤＥ、ジャバスクリプトエディタ、またはブラウザなどの、開発者ツールおよびデバッギングツールを実行し得る。
【００３５】
[0041]  コンピュータ７００は、典型的には、多様なコンピュータ読取可能な媒体７０４を含む。コンピュータ読取可能な媒体７０４は、コンピュータ７００によってアクセスされ得る任意の使用可能な媒体であってもよく、揮発性媒体および不揮発性媒体と、取外し可能な媒体および取外し不可能な媒体との両方を含むが、伝搬信号を排除する。限定ではなく、例として、コンピュータ読取可能な媒体７０４は、コンピュータ記憶媒体と通信媒体とを含み得る。コンピュータ記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたは他のデータなどの情報の記憶のために、任意の方法または技術において実装される揮発性および不揮発性、取外し可能および取外し不可能な媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（DVD:digital versatile disk）もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望の情報を記憶するために使用され得、コンピュータ７００によってアクセスされ得る任意の他の媒体を含むが、これらに限定されない。通信媒体は、典型的には、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他の伝送メカニズムなどの変調されたデータ信号において具現化し、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、情報を信号中にエンコードするような手法でその特性のうちの１つまたは複数を設定または変更した信号を意味する。限定ではなく、例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体と、音響、ＲＦ、赤外線、および他の無線媒体などの無線媒体とを含む。上記のうちの任意のものの組み合わせも、コンピュータ読取可能な媒体の範囲内に含まれ得る。コンピュータ読取可能な媒体は、コンピュータ記憶媒体に記憶されるソフトウェアなどのコンピュータプログラム製品として具現化され得る。
【００３６】
[0042]  データストレージまたはシステムメモリ７０２は、コンピュータ記憶媒体を、読み出し専用メモリ（ROM:read only memory）およびランダムアクセスメモリ（RAM:random access memory）などの揮発性メモリおよび／または不揮発性メモリの形式で含む。スタートアップ期間などに、コンピュータ７００内の要素間で情報を伝達するのに役立つ基本ルーチンを含む基本入出力システム（BIOS:basic input/output system）は、典型的には、ＲＯＭに記憶される。ＲＡＭは、典型的には、処理ユニット７０１に即座にアクセス可能であり、および／または、処理ユニット７０１によって現在動作させられているデータおよび／またはプログラムモジュールを含む。限定ではなく、例として、データストレージ７０２は、オペレーティングシステム、アプリケーションプログラム、ならびに他のプログラムモジュールおよびプログラムデータを保持する。
【００３７】
[0043]  データストレージ７０２は、他の取外し可能／取外し不可能な、揮発性／不揮発性のコンピュータ記憶媒体も含み得る。ほんの一例として、データストレージ７０２は、取外し不可能な不揮発性の磁気媒体から読み出し、または取外し不可能な不揮発性の磁気媒体に書き込むハードディスクドライブ、取外し可能な不揮発性の磁気ディスクから読み出し、または取外し可能な不揮発性の磁気ディスクに書き込む磁気ディスクドライブ、および、ＣＤ  ＲＯＭまたは他の光媒体などの取外し可能な不揮発性の光ディスクから読み出し、または取外し可能な不揮発性の光ディスクに書き込む光ディスクドライブであり得る。例示的な動作環境において使用され得る、他の取外し可能／取外し不可能な、揮発性／不揮発性のコンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ等を含むが、これらに限定されない。上述され、図７に例示されるドライブおよびそれらの関連付けられるコンピュータ記憶媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールおよびコンピュータ７００のための他のデータのストレージを提供する。
【００３８】
[0044]  データストレージ７０２およびコンピュータ読取可能な媒体７０４は、ＩＤＥ、ジャバスクリプトエディタまたはブラウザなどの、ジャバスクリプトアプリケーションを開発し、デバッグするためのソフトウェアアプリケーションを保持し得る。加えて、データストレージ７０２およびコンピュータ読取可能な媒体７０４は、開発者により生成されたコード（すなわち、「マイコード」）ならびにライブラリコード、オープンソースコード、第三者のコード、および他のコード（すなわち、「マイコードではない」）などのジャバスクリプトファイルを保持し得る。タイプスクリプト、コーヒースクリプト、またはダートなどの他のプログラミング言語のファイルも記憶され得る。
【００３９】
[0045]  ユーザーは、ユーザーインターフェース７０５、またはタブレット、電子デジタイザ、マイクロフォン、キーボード、および／もしくは一般的にマウス、トラックボール、もしくはタッチパッドと呼ばれるポインティングデバイスなどの他の入力デバイスを通じて、コマンドおよび情報を入力し得る。他の入力デバイスは、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ等を含み得る。加えて、音声入力、手もしくは指を使用するジェスチャ入力、または他のナチュラルユーザーインターフェース（NUI:natural user interface）も、マイクロフォン、カメラ、タブレット、タッチパッド、グローブ、または他のセンサなどの適当な入力デバイスと共に使用され得る。これらおよび他の入力デバイスは、システムバス７０３に結合されるユーザーインターフェース７０５を通じて処理装置７０１に接続されることが多いが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（USB:universal serial bus）などの他のインターフェースおよびバス構造によって接続されてもよい。ユーザーインターフェース７０５は、ジャバスクリプトコードのセクションを「マイコード」または「マイコードではない」として識別するためのツールを開発者に提供し得る。
【００４０】
[0046]  モニタ７０６または他のタイプの表示デバイスも、ビデオインターフェースなどのインターフェースを介してシステムバス７０３に接続される。モニタ７０６は、タッチスクリーンパネル等と一体化されてもよい。モニタおよび／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータにおけるように、コンピューティングデバイス７００が組み込まれる筐体に物理的に結合され得ることに留意されたい。加えて、コンピューティングデバイス７００などのコンピュータは、出力周辺インターフェース等を通じて接続され得る、スピーカおよびプリンタなどの他の周辺出力デバイスも含み得る。
【００４１】
[0047]  コンピュータ７００は、リモートコンピュータなどの１つまたは複数のリモートデバイスへの論理接続７０７を使用して、ネットワーク化された環境またはクラウドコンピューティング環境において動作し得る。リモートコンピュータは、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他の一般的なネットワークノードであってもよく、典型的には、コンピュータ７００に関連して上述された要素のうちの多くまたは全てを含む。図７に図示される論理接続は、１つまたは複数のローカルエリアネットワーク（LAN:local area network）と、１つまたは複数の広域ネットワーク（WAN:wide area network）とを含むが、他のネットワークも含み得る。そのようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいてありきたりなものである。
【００４２】
[0048]  ネットワーク化された環境またはクラウドコンピューティング環境において使用される場合、コンピュータ７００は、ネットワークインターフェースまたはアダプタ７０７を通じて、公衆ネットワークまたはプライベートネットワークに接続され得る。いくつかの実施形態において、モデムまたは他の手段は、ネットワーク上での通信を確立する。内部または外部であり得るモデムは、ネットワークインターフェース７０７または他の適当なメカニズムを介してシステムバス７０３に接続され得る。インターフェースおよびアンテナなどを含む無線ネットワーキングコンポーネントは、アクセスポイントまたはピアコンピュータなどの適切なデバイスを通じて、ネットワークに結合され得る。ネットワーク化された環境において、コンピュータ７００に関連して図示されるプログラムモジュールまたはその一部は、リモートメモリストレージデバイスに記憶され得る。図示されるネットワーク接続は例示であり、コンピュータ間の通信リンクを確立する他の手段が使用されてもよいことが認識され得る。
【００４３】
[0049]  ネットワークインターフェース７０７は、システム７００を使用する開発者がリモートデバイス上で実行されているコードをデバッグすることができるように、リモートコンピュータまたは端末上で実行されているソフトウェアおよびコードへのアクセスを提供するためにも使用され得る。
【００４４】
[0050]  主題は、構造的な特徴および／または方法論的な動作に固有の言語で説明されてきたが、添付の特許請求の範囲において定義される主題は、必ずしも上述された特定の特徴または動作に限定されるとは限らないことが理解されるべきである。むしろ、上述された特定の特徴および動作は、特許請求の範囲を実施する例示的な形式として開示される。
【図１】
0006543609.tif 000002
【図２】
0006543609.tif 000003
【図３】
0006543609.tif 000004
【図４】
0006543609.tif 000005
【図５】
0006543609.tif 000006
【図６】
0006543609.tif 000007
【図７】
0006543609.tif 000008