IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ テンパー システムズ、インコーポレイテッドの特許一覧

特表2024-501045共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成
<>
  • 特表-共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成 図1
  • 特表-共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成 図2
  • 特表-共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成 図3
  • 特表-共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成 図4
  • 特表-共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-10
(54)【発明の名称】共通仕様書からの多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションの作成
(51)【国際特許分類】
   G06F 8/73 20180101AFI20231227BHJP
   G06F 8/51 20180101ALI20231227BHJP
【FI】
G06F8/73
G06F8/51
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023539765
(86)(22)【出願日】2021-12-27
(85)【翻訳文提出日】2023-08-18
(86)【国際出願番号】 US2021065236
(87)【国際公開番号】W WO2022146933
(87)【国際公開日】2022-07-07
(31)【優先権主張番号】17/135,817
(32)【優先日】2020-12-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.DOCKER
2.KUBERNETES
3.SWIFT
4.ADA
5.ARM
(71)【出願人】
【識別番号】523237350
【氏名又は名称】テンパー システムズ、インコーポレイテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】サミュエル、マイケル ヴィンセント
(72)【発明者】
【氏名】ナグラ、ジャスビル
【テーマコード(参考)】
5B081
5B376
【Fターム(参考)】
5B081AA00
5B376BB12
5B376DA18
5B376FA06
(57)【要約】
コンピュータにより実施される技術は、共通仕様書プログラミング言語において記述された共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成することによるいくつかの課題を解決する。技術は、共通仕様書を、多くの異なるプログラミング言語ターゲットの各々のためのソフトウェアプログラミングインタフェースドキュメンテーションに翻訳する、ドキュメンテーションジェネレータコンピュータプログラムによって採用され得る。技術はまた、共通仕様書を異なるターゲット言語にコンパイルことに加えて、多くの異なるプログラミング言語ターゲットの各々のための共通仕様書からドキュメンテーションを生成する技術を組み込む、ソースツーソースコンパイラによって採用され得る。
【特許請求の範囲】
【請求項1】
ライブラリの共通仕様書からドキュメンテーションフラグメントを抽出することであって、前記共通仕様書は、ソースプログラミング言語におけるソースコードを含む、前記抽出することと、
前記ドキュメンテーションフラグメントの中断されたテキスト内で第1の構造化されたテキストを識別することと、
前記第1の構造化されたテキストを第2のテキストに翻訳することと、
それぞれのターゲットプログラミング言語のためのドキュメンテーション出力を作成することであって、前記ドキュメンテーション出力は、前記第2のテキストを含む、前記作成することと、
を含む、コンピュータにより実施される方法。
【請求項2】
前記第1の構造化されたテキストを複数のテキストに翻訳することであって、前記第2のテキストは、前記複数のテキストの1つである、前記翻訳することと、
複数のそれぞれのターゲットプログラミング言語のための複数のドキュメンテーション出力を作成することであって、各々のドキュメンテーション出力は、前記複数のテキストのそれぞれのテキストを含み、前記ドキュメンテーション出力は、前記複数のドキュメンテーション出力の1つである、前記作成することと、
を更に含む、請求項1に記載のコンピュータにより実施される方法。
【請求項3】
前記第1の構造化されたテキストを前記第2のテキストに翻訳することは、
前記第1の構造化されたテキストが、前記共通仕様書の前記ソースプログラミング言語における前記ソースコード内で規定された値を参照すると判定することと、
前記共通仕様書の前記ソースプログラミング言語における前記ソースコード内の前記値を取得することと、
前記値に基づいて、前記第2のテキストを形成することと、
に基づいている、請求項1または2に記載のコンピュータにより実施される方法。
【請求項4】
前記値に基づいて、前記第2のテキストを形成することは、
異なるが同等の値に前記値を翻訳することと、
前記異なるが同等の値を前記第2のテキストに含めることと、
に基づいている、請求項3に記載のコンピュータにより実施される方法。
【請求項5】
前記第1の構造化されたテキストを前記第2のテキストに前記翻訳することは、
前記第1の構造化されたテキストが、前記共通仕様書の第1の命名されたタイプの構築ブロックを参照すると判定することに基づいており、前記第1の命名されたタイプの構築ブロックは、前記ソースプログラミング言語においてインタフェースを作るための前記ソースプログラミング言語によって提供され、
前記第2のテキストは、前記それぞれのターゲットプログラミング言語におけるソースコードの第2の命名されたタイプの構築ブロックへの参照を含み、前記それぞれのターゲットプログラミング言語における前記ソースコードの前記第2の命名されたタイプの構築ブロックは、前記共通仕様書の前記第1の命名されたタイプの構築ブロックに基づいて生成され、前記それぞれのターゲットプログラミング言語における前記第2の命名されたタイプの構築ブロックは、前記それぞれのターゲットプログラミング言語においてインタフェースを作るための前記それぞれのターゲットプログラミング言語によって提供される、請求項1に記載のコンピュータにより実施される方法。
【請求項6】
前記参照は、ハイパーリンクである、請求項5に記載のコンピュータにより実施される方法。
【請求項7】
前記ソースプログラミング言語においてインタフェースを作るための前記ソースプログラミング言語によって提供される前記第1の命名されたタイプの構築ブロックは、クラスである、請求項5または6に記載のコンピュータにより実施される方法。
【請求項8】
前記それぞれのターゲットプログラミング言語においてインタフェースを作るための前記それぞれのターゲットプログラミング言語によって提供される前記それぞれのターゲットプログラミング言語における前記第2の命名されたタイプの構築ブロックは、クラスのメンバ関数である、請求項5から7のいずれか一項に記載のコンピュータにより実施される方法。
【請求項9】
前記ドキュメンテーション出力からドキュメンテーションを生成するように、前記それぞれのターゲットプログラミング言語のためのドキュメンテーションジェネレータを自動で呼び出すことを更に含み、
前記生成されたドキュメンテーションは、前記それぞれのターゲットプログラミング言語のためのコミュニティ内のプログラマの予想に従う、請求項1から8のいずれか一項に記載のコンピュータにより実施される方法。
【請求項10】
前記中断されたテキストは、第1の中断されたテキストであり、
前記第1の構造化されたテキストは、前記第1の中断されたテキスト内の第1の位置を有し、
前記第2のテキストは、構造化されたテキストであり、
前記ドキュメンテーション出力は、第2の中断されたテキストを含み、
前記ドキュメンテーション出力は、前記第2のテキストが、前記第1の中断されたテキスト内の前記第1の構造化されたテキストの前記第1の位置とセマンティック的に同等である、前記第2の中断されたテキスト内の第2の位置を有するように作成される、請求項1から9のいずれか一項に記載のコンピュータにより実施される方法。
【請求項11】
前記第1の構造化されたテキストは、ドキュメンテーションフラグメント言語における第1の使用例を含み、
前記第2のテキストは、前記第1の使用例と機能的に同等である、前記それぞれのターゲットプログラミング言語における第2の使用例を含む、請求項1から10のいずれか一項に記載のコンピュータにより実施される方法。
【請求項12】
前記第1の使用例における共通概念を識別することと、
前記第1の使用例における前記共通概念を、前記それぞれのターゲットプログラミング言語における機能的に同等の共通概念に翻訳するために、前記それぞれのターゲットプログラミング言語のための共通概念コーパスを使用することと、
前記機能的に同等の共通概念を前記第2の使用例における前記それぞれのターゲットプログラミング言語に含めることと、
を更に含む、請求項11に記載のコンピュータにより実施される方法。
【請求項13】
前記共通仕様書は、第1の共通仕様書であり、前記第1の構造化されたテキストを前記第2のテキストに前記翻訳することは、
前記第1の構造化されたテキストが、第2の共通仕様書の第1の命名されたタイプの構築ブロックを参照すると判定することに基づいており、前記第1の命名されたタイプの構築ブロックは、前記ソースプログラミング言語においてインタフェースを作るための前記ソースプログラミング言語によって提供され、
前記第2のテキストは、前記それぞれのターゲットプログラミング言語におけるソースコードの第2の命名されたタイプの構築ブロックへの参照を含み、前記ソースコードは、前記第2の共通仕様書から導出され、前記それぞれのターゲットプログラミング言語における前記ソースコードの前記第2の命名されたタイプの構築ブロックは、前記第2の共通仕様書の前記第1の命名されたタイプの構築ブロックに基づいて生成され、前記それぞれのターゲットプログラミング言語における前記第2の命名されたタイプの構築ブロックは、前記それぞれのターゲットプログラミング言語においてインタフェースを作るための前記それぞれのターゲットプログラミング言語によって提供される、請求項1から12のいずれか一項に記載のコンピュータにより実施される方法。
【請求項14】
前記中断されたテキストは、第1の中断されたテキストであり、
前記第1の中断されたテキストは、第1の人間の言語における第1のプローズを含み、
前記第1の構造化されたテキストは、前記第1のプローズに対する前記第1の中断されたテキスト内の第1の位置を有し、
前記第2のテキストは、構造化されたテキストであり、
前記ドキュメンテーション出力は、第2の中断されたテキストを含み、
前記方法は、前記第1のプローズを、第2の人間の言語における第2のプローズに翻訳することを更に含み、
前記ドキュメンテーション出力は、前記第2のテキストが、前記第1のプローズに対する前記第1の中断されたテキスト内の前記第1の構造化されたテキストの前記第1の位置とセマンティック的に同等である、前記第2のプローズに対する前記第2の中断されたテキスト内の第2の位置を有する、請求項1から13のいずれか一項に記載のコンピュータにより実施される方法。
【請求項15】
命令を含むコンピュータプログラムであって、前記命令は、1つ以上のコンピューティングデバイスによって実行されるとき、前記1つ以上のコンピューティングデバイスに、
ライブラリの共通仕様書からドキュメンテーションフラグメントを抽出することであって、前記共通仕様書は、ソースプログラミング言語におけるソースコードを含む、前記抽出することと、
前記ドキュメンテーションフラグメントの中断されたテキスト内で構造化されたテキストを識別することと、
前記構造化されたテキストを複数のターゲットプログラミング言語のための複数のテキストに翻訳することと、
前記複数のターゲットプログラミング言語のための複数のドキュメンテーション出力を作成することと、
を実行させる、コンピュータプログラム。
【請求項16】
前記1つ以上のコンピューティングデバイスによって実行されるとき、前記1つ以上のコンピューティングデバイスに、
前記複数のターゲットプログラミング言語の少なくとも2つのターゲットプログラミング言語の各々のために、前記ターゲットプログラミング言語のために作成された前記ドキュメンテーション出力からドキュメンテーションを生成するように、前記ターゲットプログラミング言語のためのドキュメンテーションジェネレータを自動で呼び出すことを実行させる命令を更に含み、
前記生成されたドキュメンテーションは、前記ターゲットプログラミング言語のためのコミュニティ内のプログラマの予想に従う、請求項15に記載のコンピュータプログラム。
【請求項17】
前記1つ以上のコンピューティングデバイスによって実行されるとき、前記1つ以上のコンピューティングデバイスに、
第1の前記構造化されたテキスト内で、ドキュメンテーションフラグメント言語において表現された使用例を識別することと、
第1の前記構造化されたテキスト内で、前記使用例の予想された出力を識別することと、
前記複数のターゲットプログラミング言語の各々のために、前記共通仕様書の前記ソースプログラミング言語における前記ソースコードに基づいて、前記ターゲットプログラミング言語におけるソースコードを導出することと、
前記複数のターゲットプログラミング言語の各々のために、前記ターゲットプログラミング言語における前記ソースコードに基づいて、前記ターゲットプログラミング言語のためのライブラリを生成することと、
前記複数のターゲットプログラミング言語の少なくとも2つのターゲットプログラミング言語の各々のために、前記ドキュメンテーションフラグメント言語において表現された前記使用例に基づいて、前記ターゲットプログラミング言語において表現された使用例を導出することと、
前記複数のターゲットプログラミング言語の前記少なくとも2つのターゲットプログラミング言語の各々のために、前記ターゲットプログラミング言語において表現された前記使用例及び前記ターゲットプログラミング言語のための前記ライブラリに基づいて、前記ターゲットプログラミング言語のためのテストプログラムを生成することと、
前記複数のターゲットプログラミング言語の前記少なくとも2つのターゲットプログラミング言語の各々のために、前記ターゲットプログラミング言語のための前記テストプログラムを実行し、前記テストプログラムの実行の出力を前記予想された出力と比較し、前記比較した結果をユーザインタフェース、ファイル、またはデータベースに出力することと、
を実行させる命令を更に含む、請求項15または16に記載のコンピュータプログラム。
【請求項18】
前記複数のターゲットプログラミング言語は、以下のプログラミング言語:C、JAVA、PYTHON(登録商標)、C++、C#、JAVASCRIPT、PHP、SWIFT、R、LISP、FORTRAN、ADA、PASCAL、GROOVY、RUBY、GO、OBJECTIVE-C、DART、SCALA、またはLUA、のうちの少なくとも1つを含む、請求項15に記載のコンピュータプログラム。
【請求項19】
ライブラリの共通仕様書からドキュメンテーションフラグメントを抽出することであって、前記共通仕様書は、ソースプログラミング言語におけるソースコードを含む、前記抽出することと、
前記ドキュメンテーションフラグメントの第1の中断されたテキスト内で第1の構造化されたテキストを識別することと、
前記第1の構造化されたテキストを第2の構造化されたテキストに翻訳することと、
それぞれのターゲットプログラミング言語のためのドキュメンテーション出力を作成することであって、前記ドキュメンテーション出力は、第2の中断されたテキスト内で前記第2の構造化されたテキストを含む、前記作成することと、
を実行するように構成された1つ以上のコンピューティングデバイスを含む、システム。
【請求項20】
前記1つ以上のコンピューティングデバイスは、
前記第1の構造化されたテキストを少なくとも8個の構造化されたテキストに翻訳することであって、前記第2の構造化されたテキストは、前記少なくとも8個の構造化されたテキストの1つである、前記翻訳することと、
少なくとも8個のターゲットプログラミング言語のための少なくとも8個のドキュメンテーション出力を作成することであって、各々のドキュメンテーション出力は、前記少なくとも8個の構造化されたテキストのそれぞれのテキストを含み、前記ドキュメンテーション出力は、前記少なくとも8個のドキュメンテーション出力の1つである、前記作成することと、
を実行するように更に構成される、請求項19に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータプログラミング言語に関する。より具体的に、本開示は、共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成するコンピュータにより実施される技術に関する。
【背景技術】
【0002】
コンピュータは、多種多様なタスクを実行するための非常に強力なツールである。コンピュータプログラムは、コンピュータシステムを使用してカスタム処理タスクを達成するための一般的な機構である。典型的なプログラムは、実行可能形式にコンパイルされたプログラムされた命令(ソースコード)のセットである。実行可能形式は次いで、タスクを達成するようにコンピュータシステムによって実行される。例えば、Cプログラミング言語命令のセットは、x86プロセッサ-実行可能命令のセットにコンパイルされ得る。プロセッサ-実行可能命令のセットは次いで、処理タスクを達成するように、x86-互換プロセッサによって実行され得る。
【0003】
人間のコンピュータプログラマによってプログラムされたようなプログラムされた命令のセットと実行可能形式との間で、コンパイラは典型的には、トランスレータとして使用される。本質的に、コンパイラは、内在する実行可能形式の詳細をプログラマが知ること、またはケアすることからさえも隠す。典型的には、プログラマによって書かれた全てのプログラムされた命令は、コンパイラによって翻訳される。例えば、コンパイラは、基本的なコンパイラ実装のプログラマの知識なしに、データタイプチェック、シンボルテーブル構築、レジスタ割り当て、及び命令スケジューリングを実行し得る。このようにして、コンパイラは、プログラマに、高レベルプログラミング言語を使用してより高いレベルで処理タスクを推論及び表現するためのツールを提供し、高レベルプログラミング言語は、プログラマが、低レベルの実行の詳細に関して悩む認知負荷を軽減する。コンパイラの全体的な構築及びオペレーションは、本分野において周知である。例えば、Aho,A.,Sethi,R.,and Ullman,J,、「Compilers:Principles,Techniques,and Tools,」Second Edition,2007を参照されたい。
【0004】
一部のコンパイラの1つの目的は、クロスコンパイルである。クロスコンパイラは、出力が入力よりも最終実行可能形式に近い、1つの入力から2つ以上の多くの出力を作成するコンパイラとして定義され得る。例えば、クロスコンパイラは、人間可読及びコンピュータ可読の両方であるソースプログラミング言語において記述されたソースコードを入力として受け付け得、ソースコードの複数の異なる実行可能形式を出力として作成し得る。例えば、Cプログラミング言語のためのクロスコンパイラを考える。そのようなクロスコンパイラは、Cソースコードから、x86実行可能(例えば、MICROSOFT WINDOWS(登録商標)オペレーティングシステムにより構成されたコンピュータ上での実行のための)、ARM実行可能(例えば、ANDROID(登録商標)オペレーティングシステムにより構成されたモバイルコンピューティングデバイス上での実行のための)、及びWASM実行可能(例えば、ウェブブラウザアプリケーションによってサポートされる仮想スタックマシンでの実行のための)を作成し得る。
【0005】
ソースツーソースコンパイラも存在する。ソースツーソースコンパイラは、人間可読及びコンピュータ可読の両方であるソースプログラミング言語において記述されたソースコードを入力として受け入れ、その各々が人間可読及びコンピュータ可読の両方でもある1つ以上の複数の異なるプログラミング言語ターゲットのためのソースコードを出力する、コンパイラとして定義され得る。異なるプログラミングターゲットは次いで、それぞれのコンパイラによって実行可能形式に更にコンパイルされ得る。例えば、HAXEコンパイラは、HAXEプログラミング言語によって記述されたソースコードを、少数の構造的に類似のプログラミング言語ターゲットに翻訳することができる。HAXEに関するより多くの情報は、インターネット上でhaxe.orgインターネットドメイン内で利用可能である。
【0006】
異なるプログラミング言語コミュニティは、ソフトウェアプログラミングインタフェースのためのドキュメンテーションを生成するための異なるツールセットを使用する。例えば、JAVA(登録商標)プログラミング言語コミュニティは、JAVADOCドキュメンテーションジェネレータを使用し、PYTHON(登録商標)プログラミング言語コミュニティは、PYDOCドキュメンテーションジェネレータを使用し、C++プログラミング言語コミュニティは、DOXYGENドキュメンテーションジェネレータを使用する、などである。各々のドキュメンテーションジェネレータは、異なる形式においてドキュメンテーションを生成する。結果として、異なるコミュニティのメンバは、ソフトウェアプログラミングインタフェースドキュメンテーションが、手元の特定のプログラミング言語に応じて変化する異なる方法においてフォーマットされることを予想する。
【発明の概要】
【0007】
本明細書で開示される技術は、この問題及び他の問題に対処する。
【0008】
このセクションにおいて説明されるアプローチは、追及され得るアプローチであるが、必ずしも以前に認知または追及されたアプローチであるとは限らない。したがって、他に指示されない限り、このセクションにおいて説明されるアプローチのいずれかは、このセクションにそれらが含まれるおかげで、単なる従来技術として適格であると想定されるべきではない。
【0009】
添付図面の図では、技術が例として、且つ限定としてではなく例示され、添付図面では、同様の参照符号は、類似の要素を指す。
【図面の簡単な説明】
【0010】
図1】共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成するソフトウェアドキュメンテーション生成システムの概略図である。
図2】ソフトウェアドキュメンテーション生成システムのドキュメンテーションフラグメントトランスレータにおける翻訳のフェーズのフローチャートである。
図3】共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成する処理のフローチャートである。
図4】技術の実施態様において使用され得る例示的な基本的コンピューティングデバイスのブロック図である。
図5図4の基本的コンピューティングデバイスのオペレーションを制御するために採用され得る例示的な基本的ソフトウェアシステムのブロック図である。
【発明を実施するための形態】
【0011】
概要
以下の詳細な説明の全体的な概要セクションは、共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成する技術の有用な概要を提供する。
【0012】
以下の説明では、説明の目的のために、多数の特定の詳細が、技術の完全な理解を提供するように示される。しかしながら、それらの特定の詳細なしに技術が実践され得ることが明らかである。他の例では、公知の構造及びデバイスは、技術を不必要に曖昧にすることを回避するために、ブロック図の形式において示される。
【0013】
用語集
例示の目的のために、限定ではなく、技術の開示の理解を支援するために、以下の定義が提供される。
【0014】
明確に構造化されたテキスト::用語「明確に構造化されたテキスト」は、特殊訓練を有さない人が解読することができるが、マシン解釈可能でもある構造化されたテキストである。例えば、以下の例では、マイクロブロギングサービスメッセージ「@catlover,your pictures from 2020-09-30 are available at https://cat.photos」、テキスト「@catlover」、Industry Standards Organization(ISO)の形式化された日、及びURLは、マシン及び最小の訓練を有さない人間の両方に有益である。
【0015】
クロスコンパイラ::「クロスコンパイラ」は、1つの入力から2つ以上の多くの出力を作成するコンパイラである。
【0016】
コンパイラ::「コンパイラ」は、例えば、共通仕様書プログラミング言語において記述されたコンピュータプログラムまたはコンピュータプログラムライブラリなど、人間及びマシン消費に適切な入力を消費し、例えば、ターゲットコンピュータプログラミング言語ランタイムのためのターゲットコンピュータプログラム実行可能、リンク可能、もしくはロード可能コンピュータプログラムライブラリ、またはターゲットコンピュータプログラミング言語におけるソースコードなど、マシン消費のためにより適切な出力を生成する。
【0017】
ドキュメンテーションジェネレータ::「ドキュメンテーションジェネレータ」は、ハイパーテキストマークアップ言語(HTML)、PDF、またはPOSTSCRIPTなどのデータフォーマットにおいて人間可読ドキュメントを作成するコンピュータプログラムである。ドキュメンテーションジェネレータは、様々なソースからテキストのパッセージを分解し、相互インデックス付けし、再配列することによってドキュメンテーションを作成する。そのようなソース(本明細書では「ドキュメンテーション入力」とも呼ばれる)は、コンピュータプログラミング言語において記述されたソースコードファイル、マークダウンまたはHTMLなどのフォーマットにあるドキュメンテーション入力ファイル、SVG及びDOTのような画像のテキストの記述により、PNG及びJPEGなどのバイナリ画像フォーマットを含む、図、ダイヤグラム、及び他の非テキストコンテンツをそれから導出することができるメディアファイル、チャプタのようなグループ化へのコンテンツの編成を支援するヒントを提供し、ドキュメント化されたソフトウェアによって使用される概念を説明する、別のプロジェクトから生成されたドキュメンテーションのような編成境界にわたってどのようにファイルを発見し及びファイルにリンクするかを説明するドキュメンテーションメタデータファイル、特定のフォントを使用してレンダリングされた各々の文字の形状(グリフス)を定義する、テキストの色及びフォントサイズ、ならびに印刷フォントファイルを制御することができる、Cascading Style Sheet(CSS)を含む、ドキュメンテーションがどのように見えるべきかを説明する文体ファイル、を含み得る。
【0018】
中断されたプローズ::用語「中断されたプローズ」または「中断されたテキスト」は、それが包含する全ての不明確なフラグメントが、コンテキスト的に有効な明確に構造化されたテキストまたはプローズと置き換えられていた場合、プローズであるテキストのパッセージを指し得る。
【0019】
ライブラリ::「ライブラリ」は、自動化可能形式にあるアルゴリズムまたはアルゴリズム(複数可)の表現として定義され得る。自動化可能形式の例は、プログラミング言語コードまたはそのコンパイルされたバージョン(例えば、バイトコード、バイナリ実行可能コードなど)であり得る。典型的には、プロセスまたはプロセス(複数可)として実行されるとき、ライブラリは、それが一部として実行するプロセス(複数可)を「保有」しない。代わりに、ライブラリは、特定の種類のアルゴリズムのタスクをライブラリに委任するより大規模なシステムと並行してまたはその一部として実行する。例えば、コンピュータネットワーク上でのマイクロサービスは、ライブラリとして見られ得る。マイクロサービスは、他のネットワークノードが特定のアルゴリズムのタスクを削除するために存在することが多い。
【0020】
プローズ::用語「プローズ」は、プログラミング言語において記述されたプログラムとは反対に、主に人間による通信のために意味された人間言語におけるテキストを指す。
【0021】
ランタイム::プログラミング言語のための「ランタイム」は、その言語において記述されたコンピュータプログラムの実行をサポートする計算機構を網羅する。例えば、プログラミング言語のためのランタイムは、その言語のコンピュータプログラムがコンパイルされるバイトコード命令を理解する仮想マシンを網羅し得る。JAVA(登録商標)仮想マシン(JVM)は、そのようなランタイムの1つの例にすぎない。加えて、用語「ランタイム」またはフレーズ「ランタイムにおいて(at runtime)」は、コンピュータプログラムが実行されるときの時間を指すために本明細書で使用される場合がある。
【0022】
ソースコード::用語「ソースコード」は、コンピュータプログラミング言語において表現されたステートメント、表現、及びコマンドを網羅する構造化されたテキストを指し得る。
【0023】
構造化されたテキスト::用語「構造化されたテキスト」は、マシン解釈可能であり、特殊訓練を有さない人が理解するのに苦労し得るテキストを指し得る。例えば、テキスト「Use{@link MyClass#method(int,int)} to do XYZ」では、中括弧の間のテキストは、人間が復号するための専門知識を必要とする、パンクチュエーションデンスマイクロ言語に従って構造化される。
【0024】
ターゲット::「ターゲット」は、コンパイラ出力に接続するためにクライアントによって使用される機構として定義され得る。プログラミング言語は、ターゲットであることができ、プログラマは、同一のメモリ空間にロードするライブラリに接続するコードを記述する。仮想マシン(VM)は、ターゲットであることができ、プログラマは、仮想マシンが稼働する種類のバイトコードにコンパイルするコードを記述することができ、インタフェースを介して使用をリンクするために、VMに依存することができる。別のプログラムは、クライアントであり得る。したがって、プログラム間機構は、ターゲットであり、コードは、例えば、ネットワークサービスまたはマイクロサービスなど、クライアントプログラムのプロセスの外部で稼働する何かにメッセージを送信し、着信メッセージが応答を包含するときを認識するために、プロセス間通信(IPC)、リモートプロシージャコール(RPC)、またはRESTfulネットワークプロトコルを使用し得る。
【0025】
全体概要
本明細書で開示されるコンピュータにより実施される技術は、共通仕様書プログラミング言語において記述された共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成することによるいくつかの課題を解決する。技術は、ドキュメンテーションジェネレータコンピュータプログラムによって採用され得、ドキュメンテーションジェネレータコンピュータプログラムは、多くの異なるプログラミング言語ターゲットの各々のためのソフトウェアプログラミングインタフェースドキュメンテーションに共通仕様書を翻訳する。技術はまた、ソースツーソースコンパイラによって採用され得、ソースツーソースコンパイラは、共通仕様書を異なるターゲット言語にコンパイルすることに加えて、共通仕様書から多くの異なるプログラミング言語ターゲットの各々のためのドキュメンテーションを生成する技術を組み込む。
【0026】
本明細書で開示される技術によって解決される1つの課題は、ソフトウェアプログラミングインタフェースドキュメンテーションが単なるプローズではないことである。例えば、ドキュメンテーションは、ソースコード例を包含し得る。共通仕様書から多くの異なるターゲットプログラミング言語のためのソフトウェアプログラミングインタフェースドキュメンテーションを生成するとき、異なるドキュメンテーションのセットは、共通仕様書から、異なるプログラミング言語ターゲットのためのソースコードフラグメントに翻訳されたソースコードフラグメントを含むべきである。
【0027】
関連する課題は、ドキュメンテーションが、プローズと一致してプログラマによって書かれた、埋め込まれた構造化されたテキストを有し得ることである。例えば、以下の例の、プローズと一致した埋め込まれた構造化されたテキストを包含するマルチラインソースコードコメントブロックを考える。
【表1】
【0028】
この例では、コメントブロック、シンタックス「/**」及び「*/」は、コメントブロックの開始及び終了を示すために使用され、埋め込まれた構造化されたテキストは、文字列「[inline DEFAULT_MAX_TORQUE_VALUE]」及び文字列「{@リンクBoltTightener.setMaxTorque()}」である。プログラマは、埋め込まれた構造化されたテキストを、リンクまたは他のリッチなもしくは特別にフォーマットされたコンテンツと置き換えるコンパイラまたはドキュメンテーションジェネレータを予想し得る。現在の例では、プログラマは、埋め込まれた構造化されたテキスト「[inlineDEFAULT_MAX_TORQUE_VALUE]」を、可変名「DEFAULT_MAX_TORQUE_VALUE」の共通仕様書のプログラミング言語における宣言の初期値と置き換えるコンパイラまたはドキュメンテーションジェネレータを予想し得る。加えて、プログラマは、埋め込まれた構造化されたテキスト「{@link BoltTightener.setMaxTorque()}」を、ドキュメンテーション間ハイパーリンクと置き換えるコンパイラまたはドキュメンテーションジェネレータを予想し得る。プログラマは、コンパイラまたはドキュメンテーションジェネレータの他の機能を予想し得る。例えば、メトリックユーザのためのドキュメンテーションのバージョンでは、プログラマは、ニュートンメートルに翻訳されることになるトルク値を予想し得る。プログラマの予想を満たさない生成されたドキュメンテーションは、プログラマに不満を与え、関連するソフトウェアは、低品質のものとして認知され得る。
【0029】
多くの異なるプログラミング言語ターゲットのために解決される別の課題は、ドキュメンテーションのためのプログラミング言語コミュニティの異なる予想を満たしている。異なるプログラミング言語のための異なるドキュメンテーションジェネレータの非包括的なリストは、DのためのDDOC、KOTLINのためのDOKKA、C++のためのDOXYGEN、JAVA(登録商標)のためのJAVADOC、JAVASCRIPT(登録商標)のためのJDOC、OCAMLのためのOCAMLDOC、PERLのためのPERLDOC、PHPのためのPHPDOCUMENTOR、PYTHON(登録商標)のためのPYDOC、及びSCALAのためのSCALADOCを含む。それらの異なるコミュニティ内のプログラマは、それらのドキュメンテーションジェネレータによって作成されたドキュメンテーションをどのように効率的にスキャンするかを学習することに時間を投資してきた。プログラミング言語コミュニティの好ましいドキュメンテーションジェネレータによって作成されたものとは文体的に及び編成的にはるかに異なるソフトウェアプログラミング言語ドキュメンテーションは、要約するのに不必要に難しく、より低い品質のものとして認知される。
【0030】
多くの異なるプログラミング言語ターゲットのために解決される更なる別の課題は、マシン(例えば、ソフトウェアプログラミングインタフェースドキュメンテーションを入力として受け付けるコンピュータデバイス上で実行するコンピュータプログラム)の予想を満たしている。コンピューティングデバイス上で実行する統合開発環境(IDE)は、そのようなマシンの1つの例である。例えば、IDEを使用するプログラマがソースコード内のワードのポイントデバイスカーソルを移動させるとき、IDEは、そのワードに関連する生成されたドキュメンテーションのフラグメントを表示し得る。別の例として、プログラマが、ソースコードのワードのタイピングを始めるとき、IDEは、可能な完了ごとに関連するドキュメンテーションフラグメントによりワードのプリフィックスのための可能な完了を示唆し得る。例えば、IDEソースコードエディタに「isRe」をタイプするプログラマを考える。それに応じて、IDEは、以下のオプションを可能な完了として提示し得る:
-「isReadable-読み出すためにそれが開示され、利用可能になった場合に真」
-「isReady-それが事前公開チェックを通る場合に真」
【0031】
上記課題に関連して、IDEが、共通して使用されるドキュメンテーションジェネレータからの出力により開発及びテストされた可能性が高かったそのアルゴリズムを使用して関連するドキュメンテーションフラグメントを抽出することができない場合、そのドキュメンテーションと結び付けられたソフトウェアライブラリは、学習するのがより難しく、正確に使用するのもより難しい。
【0032】
解決された更なる別の課題は、ドキュメンテーション内での相互参照をサポートすることである。上記のボルトを締め付ける例に戻り、コメントブロックが、プログラム要素を参照する埋め込まれた構造化されたデータを含むことを思い出されたい。プログラム要素は、テキスト「{@link BoltTightener.setMaxTorque()}」を有するコメントブロック内で参照される。そのような構造化されたデータは、ハイパーリンクに変換され得る。ハイパーリンクに変換するとき、参照は、マシン解釈可能な参照に翻訳される必要がある。マシン解釈可能な参照の例は、参照を説明する生成されたドキュメンテーションの別の部分にリンクするUniform Resource Locator(URL)である。加えて、ハイパーリンクに変換するとき、埋め込まれた構造化されたテキストは、「リンクテキスト」と置き換えられる必要がある。リンクテキストは、異なるプログラミング言語ターゲットに対して異なることが多い。例えば、コメントブロック内の「setMaxTorque」と命名された概念エンティティをC++プログラマが参照し得る方法は、コメントブロック内のそのエンティティをPYTHON(登録商標)プログラマが参照する方法とは異なり得る。
【0033】
解決された更なる別の課題は、ターゲットプログラミング言語における仕様書内のパブリックソフトウェアプログラミング言語インタフェース要素が、共通仕様書プログラミング言語における共通仕様書内の要素に1対1で対応し得ないことである。特に、共通仕様書は、ターゲットプログラミング言語における仕様書内の単一の要素に対応しない要素の概念的グループ化を定義し得る。例えば、共通仕様書プログラミング言語における方位の概念の以下の定義を考える。
【表2】
【0034】
上記定義は、「CardinalDirection」と命名された概念的グループ化を定義し、概念的グループ化内の4つの別個のエンティティに名前を与える。一部のターゲットプログラミング言語は、同様に概念的グループ化を定義し得ない。したがって、ターゲットプログラミング言語において定義されるような概念的グループ化に対するドキュメンテーション相互参照への、共通仕様書内の概念的グループ化に対するドキュメンテーション相互参照の1対1の翻訳が常に存在するとは限らない。
【0035】
例えば、概念的グループ化は、以下のように、PERLプログラミング言語において定義され得る:
【表3】
【0036】
ここで、概念的グループ化は、概念エンティティ名が、示される大文字及び下線形式にある概念的グループ化内の各々のエンティティの名前のプリフィックスである、広く受け入れられたPERLプログラミングプラクティスに従って定義される。しかしながら、結果として、「CardinalDirection」が参照し得るプログラミング言語構造が存在しない。
【0037】
別の例として、GOプログラミング言語では、概念的グループ化は、以下のように定義され得る:
【表4】
【0038】
ここで、CardinalDirectionに対する相互参照は、「type CardinalDirection」に翻訳することができる。しかしながら、慣習により、GOプログラマは、その定義をその自身のソースコードファイルに置き、それ自体のタイプ定義の代わりに、ドキュメンテーション相互参照内のファイルを参照することが多い。
【0039】
また、JAVA(登録商標)プログラミング言語では、概念的グループ化は、以下のように定義され得る:
【表5】
【0040】
上記のPERL及びGOの例とは異なり、JAVA(登録商標)の例では、ドキュメンテーション相互参照を「CardinalDirection」に直接翻訳することが可能である。
【0041】
更なる別の課題は、共通仕様書内のソースコードコメント内でプログラマによって書かれた使用例が、異なるターゲット言語において異なって表された共通概念を参照することができることである。そのような使用例は、以下のナラティブアークに準拠することが多い:
1.ライブラリに接続する。
2.一部の入力を作成する。
3.入力と共にライブラリの一部を使用する。
4.出力を説明する。
【0042】
共通仕様書内で定義され得る以下の使用例を考える:
【表6】
【0043】
ここで、日付は、共通概念である。ライン01は、ライブラリに接続する。ライン02は、入力を作成する。ライン03は、入力と共に接続されたライブラリの一部を使用する。また、ライン04は、出力を説明するコメントである。この使用例及びそれと同様のその他は、ターゲット言語に精通したプログラマが日付共通概念のインスタンスを表現するとして認識する使用例に、ターゲットプログラミング言語ごとに異なって翻訳されるべきである。例えば、JAVA(登録商標)における使用例は、java.timeパッケージに基づいて、共通仕様書からのフレーズ「Date(year:1776,month:8,day:2)」を、テキストとおそらくは置き換えるはずである。また、或る慣習に準拠する文字列として日付を表すことが慣習的であるターゲットプログラミング言語では、日付フレーズは、例として、文字列「17760802」と置き換えられ得る。
【0044】
更なる別の課題は、ドキュメンテーション相互参照が、共通仕様書に及び得ることである。例えば、2つの異なる共通仕様書は、異なるプログラマのチームによって別々に維持され得る。それにも関わらず、共通仕様書の1つは、他の共通仕様書に対するドキュメンテーション相互参照を包含し得る。この相互参照は、共通仕様書から生成されるために、ターゲットプログラミング言語ドキュメンテーション内で維持されるべきである。
【0045】
本明細書で開示される技術は、それらの課題の全てを解決し、それによって、共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成する、最新のコンピュータにより実施される技術における改善を提供する。
【0046】
ドキュメンテーション生成システム
図1は、共通仕様書から多くのプログラミング言語のための慣用語ソフトウェアドキュメンテーションを作成するソフトウェアドキュメンテーション生成システムの概略である。システムへの入力102は、共通仕様書104を含む。共通仕様書104は、少なくとも2つのタイプの印刷可能コンテンツ:(1)共通仕様書プログラミング言語においてプログラムされたプログラミング言語ステートメント及び表現(ソースコード)と、(2)ソースコードコメント(ドキュメンテーションフラグメント)と、を網羅し得る。コメントは、プローズ、埋め込まれた構造化されたテキスト、及びソースコード使用例を含み得る。
【0047】
共通仕様書104は、1つ以上のファイルまたは1つ以上の他の適切なデータコンテナとしてコンピュータ記憶媒体に記憶され得る。1つ以上のデータコンテナは、ソースコードを包含する1つ以上のデータコンテナを網羅し得、ソースコードは、ソースコードコメントをも包含し得る。しかしながら、ソースコードを包含するデータコンテナが、ソースコードのためのソースコードコメントを包含する別のデータコンテナに対する参照またはリンク(例えば、ハイパーリンク)を包含することも可能である。したがって、ソースコード及びソースコードコメントが同一のデータコンテナに記憶され得るが、それらは代わりに、別々のデータコンテナに記憶され得、別々のデータコンテナでは、ソースコードデータコンテナ内からソースコードコメントデータコンテナを参照するためにテキストリンクまたは参照が使用される。
【0048】
例えば、以下の可能な共通仕様書104のスニペットを考える。ライン01~0806は、ドキュメンテーションフラグメントを網羅する。ライン01における文字シーケンス「/**」は、ドキュメンテーションフラグメントの開始を示す。ライン0806における文字シーケンス「*/」は、ドキュメンテーションフラグメントの終了を示す。ライン02は、プローゼである。ライン03~0705は、XMLのようなマークアップタグ<example></example>内で囲まれた使用例を表す。また、ライン0907は、非ドキュメンテーションプログラミング言語命令ソースコードを表し、非ドキュメンテーションプログラミング言語命令ソースコードでは、明確な例を提供することを目的として例において提供されない更なる詳細を表すために「...」が使用される。
【表7】
【0049】
上記例では、XMLのようなタグは、使用例を網羅するものとして、コメントブロックの部分を指定するために使用されるが、他の実施態様では他のシンタックスが使用される。例えば、XMLのようなタグの代わりに、使用例は、まさに1つの可能性として、別々のライン上で2つのバッククォート「''」で囲まれ得る。
【0050】
共通仕様書104は、ドキュメンテーションフラグメントエクストラクタ106及びコンパイラ118の両方への入力であり得る。ドキュメンテーションフラグメントエクストラクタ106は、共通仕様書104または共通仕様書104によって参照される1つ以上のファイルからドキュメンテーションフラグメントを抽出し得、コンパイラ118は、共通仕様書104からソースコードを抽出し得る。そのような抽出は、ライン再構築、事前処理、語彙分析(トークン化)、シンタックス分析(構文解析)、及びセマンティック分析など、コンパイラフロントエンドによって実行されるオペレーションを伴い得る。概して、共通仕様書104から抽出されたドキュメンテーションフラグメントは、共通仕様書104内のソースコードコメントに対応し得、共通仕様書104から抽出されたソースコードは、コメントではない共通仕様書の他のテキストに対応し得る。他のテキストは、共通仕様書プログラミング言語のステートメント及び表現を網羅し得る。
【0051】
いくつかの実施態様では、ドキュメンテーションフラグメントの一部または全ては、共通仕様書104のソースコードファイル内のソースコードと一致して含まれるが、ドキュメンテーションフラグメントの一部または全ては、共通仕様書104のソースコードファイル内のソースコードと一致するテキストリンク(例えば、ハイパーリンク)によって参照されるファイルから取得される。よって、ドキュメンテーションフラグメントの全ては、ソースプログラミング言語においてソースコードを包含する共通仕様書104のソースコードファイルから抽出され得、ドキュメンテーションフラグメントの全ては、共通仕様書104のソースコードファイル内のテキストリンクによって参照される別々のファイルから抽出され得、またはドキュメンテーションフラグメントの一部は、共通仕様書104のソースコードファイルから抽出され得、ドキュメンテーションフラグメントの一部は、共通仕様書104のソースコードファイル内のテキストリンクによって参照される別々のファイルから抽出され得る。共通仕様書104からドキュメンテーションフラグメントを抽出することは、それらのタイプの抽出のいずれかを網羅し得る。
【0052】
コンパイラ118はまた、共通仕様書104のソースコードの中間表現に対してオペレーションを実行し得る。中間表現は、共通仕様書104のソースコードに対して実行されたフロントエンドオペレーションの結果としてコンパイラ118によって生成され得る。いくつかの実施態様では、参照によってその内容全体が本明細書に組み込まれる、2020年12月33日に出願された「Deriving Many Idiomatic Programming Language Interfaces」と題する関連する米国特許出願第17/131,574号において説明されるように、中間表現は、言語間定義的要素のセットに基づいている。
【0053】
コンパイラ118は、中間表現に対して様々なオペレーションを実行し得る。コンパイラ118が中間表現に対して実行し得る一部の分析オペレーションは、データフロー分析、依存性分析、エイリアス分析、ポインタ分析、エスケープ分析、またはコンパイラのミドルエンドによって実行され得る他の適切な分析オペレーションを含み得る。コンパイラ118が中間表現に対して実行し得る一部の最適化オペレーションは、インライン展開、デッドコード除去、定数伝播、ループ転換、またはコンパイラのミドルエンドによって実行され得る他の適切な最適化オペレーションを含み得る。
【0054】
コンパイラ118の出力は、コードジェネレータ120に入力され得る。コードジェネレータ120は、特定のプログラミング言語ターゲットのためのコンパイラバックエンドに対応する。システムは、多くの異なるプログラミング言語ターゲットのための多くのコードジェネレータを網羅し得る。図1の例では、簡易化のために1つのコードジェネレータ120のみが示される。いくつかの実施態様では、システムは、多くの異なるプログラミング言語ターゲットのための多くのコードジェネレータを網羅する。例えば、システムは、以下のプログラミング言語ターゲット:C、JAVA(登録商標)、PYTHON(登録商標)、C++、C#、JAVASCRIPT(登録商標)、PHP、SWIFT、R、LISP、FORTRAN、ADA、PASCAL、GROOVY、RUBY、GO、OBJECTIVE-C、DART、SCALA、及びLUA、の各々のための別個のコードジェネレータを網羅し得る。
【0055】
ドキュメンテーションフラグメント言語
ドキュメンテーションフラグメントエクストラクタ106によって共通仕様書104から抽出されたドキュメンテーションフラグメントのソースコード使用例は、ドキュメンテーションフラグメントプログラミング言語に従い得る。ドキュメンテーションフラグメント言語は、共通仕様書プログラミング言語、共通仕様書プログラミング言語のサブセット、またはドキュメンテーションにおけるソースコード使用例を承認するために専門化されたプログラミング言語であり得る。
【0056】
ドキュメンテーションフラグメント言語は、共通仕様書104内のソースコードコメントの一部としてソースコード使用例を書くための様々な能力を提供し得る。ドキュメンテーションフラグメント言語は、ステップのシーケンスを規定することを可能にすることができる。例えば、以下の例では、ライン01における第1のステップ、次いで、ライン02における次のステップ、及びライン03における最後のステップを有するシーケンス内で3つのステップが存在する:
【表8】
【0057】
ドキュメンテーションフラグメント言語は、変数名の宣言を可能にすることができる。例えば、上記ライン02では、変数名「independenceDay」を宣言するために、キーワード「let」が使用される。
【0058】
ドキュメンテーションフラグメント言語は、共通概念コーパス112を介して、値を作ることを可能にすることができる。例えば、上記ライン02では、1776年8月2日を表す値Date(year:1776,month:8,day:2)は、共通概念コーパス112を介して作られる。
【0059】
ドキュメンテーションフラグメント言語は、値が変数名と関連付けられることを可能にすることができる。例えば、上記ライン02では、共通概念コーパス112を介して作成された値と変数名「independenceDay」とを関連付けるために、等号(「=」)が使用される。
【0060】
ドキュメンテーションフラグメント言語は、結果として値を取得するために、名前または値を有するドキュメント化されたライブラリのアプリケーションプログラミングインタフェースの一部を使用することを可能にすることができる。例えば、上記ライン03では、変数名「dayCount」と関連付けられた結果として値を取得するために、変数名「independenceDay」と共に、「documentedLibrary」と命名されたライブラリのインタフェースが使用される。
【0061】
ドキュメンテーションフラグメント言語は、どのインタフェース要素を使用するかを区別するために十分な相互参照シンタックスをサポートし得る。例えば、上記ライン03では、ライブラリ名「documentedLibrary」をインタフェース要素「daysSince」から区別するために、ピリオド(「.」)が使用される。
【0062】
ドキュメンテーションフラグメント言語は、プロシージャコールにおいて値のグループ化が送信する(渡す)ことを可能にするプロシージャコールシンタックスをサポートし得る。例えば、上記ライン03では、プロシージャコールにおいて渡す値を規定するために、インタフェース要素名「daysSince」に続く開括弧及び閉括弧が使用される。
【0063】
ドキュメンテーションフラグメント言語は、或るステップが何を行うのかをプローズで説明するのをサポートし得る。例えば、ドキュメンテーションフラグメント言語は、例えば、「/*some prose*/」など、インタースティシャルプログラミング言語コメントをサポートし得る。
【0064】
ドキュメンテーションフラグメント言語は、プログラマがソースコード使用例内で異なる戦略をどのように組み合わせるかを示すことを可能にするために、if-then-else及びwhileループステートメントなどの構造化されたプログラミング言語ステートメントの使用をサポートし得る。
【0065】
ドキュメンテーションフラグメント言語は、更なる議論の価値があるいずれかの結果または結果(複数可)の識別をサポートし得る。例として:ドキュメンテーションフラグメント言語は、結果が値と同等であること(例えば、「result==42」)をプログラマが示すことを可能にするシンタックスを提供し得る。ドキュメンテーションフラグメント言語は、ソースコード使用例によって表される(例えば、「print(result)/* would print 42 */」プログラムをそれらが稼働させていたようにリーダが見るものを示すために、プローズによるイディオムの使用を可能にし得る。ドキュメンテーションフラグメント言語は、メタデータと関連付けられたテキストが、それらがプログラムを稼働させていたようにリーダが見るものを規定することをリーダに対して明確にするために、メタデータがフォーマットされたプログラムをそれらが稼働させていたようにリーダが見るものを規定するために、メタデータの使用を可能にし得る。例えば、テキスト「Hello, World!"」が、プログラムの標準出力デバイスに出力されることを規定するために、テキスト「//stdout:"Hello, World!"」が使用され得、テキスト「//stdout:」は、そのように規定するためのメタデータである。
【0066】
ドキュメンテーションフラグメント言語は、別のプロシージャの内部に現れる入れ子プロシージャの表現を可能にし得る。
【0067】
ステートメントと表現との間の区別
多くのプログラミング言語ターゲットは、ステートメントと表現との間で区別する。ステートメントは、遂行されることになる一部のアクションを規定するソースコードの単位である。ステートメントの例は、assertionステートメント、assignmentステートメント、gotoステートメント、returnステートメント、callステートメント、blockステートメント、do-loopステートメント、for-loopステートメント、if-then-elseステートメント、switchステートメント、while-loopステートメント、with-ステートメントなどを含む。表現は、その値を判定するために評価されるソースコードの単位である。多くのケースでは、ステートメントは、表現を包含することができるが、表現は、ステートメントを包含しない。これに対する例外は、入れ子プロシージャである。要するに、表現は、値を作成し、場合によっては、サイドエフェクトを有するが、ステートメントの唯一の目的は、サイドエフェクトを有することである。
【0068】
一部のプログラミング言語は、ステートメントと表現との間で区別しない。例えば、一部の機能的プログラミング言語は、この区別を行わない。ステートメントと表現との間で区別しないプログラミング言語におけるソースコードを、それを行う別のプログラミング言語におけるソースコードに翻訳することが可能である。そのように行うことは典型的には、一時(使い捨て)変数を導入することを伴う。そのような変数は、値を一時的に保持する役割を果たすが、人間にとって有益でない変数名を使用することが多い。結果として、読み出すことが意味されたターゲットプログラミング言語におけるソースコード使用例にソースコード使用例を翻訳するために一時変数を導入することは、低品質ドキュメンテーションにつながる。よって、ドキュメンテーションフラグメント言語は、共通仕様書104内のソースコード使用例において各々の種類を使用することができる場所についてのルールを有することを含む、表現とステートメントとの間で区別を行い得る。このようにして、有益でない名前を有する一時変数を使用することなく、この区別をもサポートするターゲットプログラミング言語におけるソースコード使用例に、共通仕様書104内のソースコード使用例を翻訳することができる。
【0069】
入れ子プロシージャ
一部のターゲットプログラミング言語は、入れ子プロシージャを許容しない。入れ子プロシージャは、別のプロシージャ内で定義されたプロシージャである。入れ子プロシージャを許容するターゲットプログラミング言語と、入れ子プロシージャを許容しないターゲットプログラミング言語とへの両方の翻訳をサポートするために、ドキュメンテーションフラグメント言語は、名前が共通仕様書104内のソースコード使用例において言及されないときでさえ、入れ子プロシージャが記述的名を与えられることを必要とし得る。そのようにすることによって、入れ子プロシージャをサポートしないターゲットプログラミング言語のために、所与の記述的名によってコールすることができるターゲット言語における非入れ子プロシージャに、入れ子プロシージャを変換することができる。例えば、メタデータを使用することなどによって、共通仕様書104内のソースコード使用例において記述的名を明示的に言及することができる。代わりに、共通仕様書104内の命名されていない入れ子プロシージャを検出すると、記述的名を提供するように、ユーザ入力に対してユーザを促すことができる。
【0070】
共通概念コーパス
共通仕様書104から抽出されたドキュメンテーションフラグメント内のフレーズから所与のターゲットプログラミング言語のための同等のフレーズに外部概念を翻訳するための共通概念コーパス112がシステムにおいて提供され得る。例えば、JAVASCRIPT(登録商標)について、共通概念コーパス112は、JAVASCRIPT(登録商標)のために、上記例から「new Date(1776,7,2)」に「Date(year:1776,month:8,day:2)」を翻訳し得る。
【0071】
共通概念コーパス112は、抽象化トークンのためのトランスレータとして実装され得る。例えば、機械学習に基づくトランスレータまたは文法駆動トランスレータが使用され得る。例えば、共通概念コーパス112は、「Date(year:1776,month:8,day:2)」から、以下の抽象化トークンのシーケンスを作成し得る。
【表9】
【0072】
上記例の抽象化トークンのシーケンスは、フォーマットされた拡張可能マークアップ言語(XML)のようなものである。しかしながら、特定の抽象化トークンシーケンスフォーマットは必要とされず、1つの可能なフォーマットの単なる例として、XMLのようなフォーマットが使用される。他の構造化されたテキストフォーマットまたはバイナリフォーマットが可能である。
【0073】
共通概念コーパス112は、共通仕様書104から抽出されたドキュメンテーションフラグメント内の共通概念の抽象化トークンシーケンス形式を、ターゲット言語のためのトークンシーケンスに翻訳するために、文法駆動トランスレータを使用し得る。例えば、共通概念コーパス112は、ターゲットプログラミング言語ごと、及び概念ごとの翻訳文法を網羅し得る。例えば、JAVASCRIPT(登録商標)のための翻訳文法及び日付概念は、Augmented Backus-Naur Form(ABNF)において以下のように表現され得る:
【表10】
【0074】
別の例として、JAVA(登録商標)のための翻訳文法及び日付概念は、ABNFにおいて以下のように再度表現され得る:
【表11】
【0075】
上記例の文法では、引用されたトークンが、不変の出力に含まれる。事後処理パスの間の処理にために「postprocess:」によりマークされない限り、入力に対して山括弧の間のトークン「<...>」が必要とされる。「/.../」の間の文法コンテンツは、山括弧の間でない入力トークンに一致させるために、正規表現シンタックスを使用する。
【0076】
例をウォークスルーするために、共通仕様書104から抽出されたドキュメンテーションフラグメントにあり得る以下の例のソースコード使用例を考える:
【表12】
【0077】
共通概念テキスト「Date(year:1776,month:8,day:2)」は次いで、以下の抽象化トークンシーケンスに変換され得る:
【表13】
【0078】
次いで、日付概念のための例のJAVASCRIPT(登録商標)文法が上記抽象化トークンシーケンスに適用される場合、JAVASCRIPT(登録商標)言語のための以下の抽象化トークンシーケンスが生成される:
【表14】
【0079】
最終的に、JAVASCRIPT(登録商標)慣習に従って、山括弧トークンを取り除き、ホワイトスペースを挿入した後、上記抽象化トークンシーケンスから以下のJAVASCRIPT(登録商標)ソースコードが生成される。
【表15】
【0080】
事後処理
時に、翻訳の一部は、プログラムの別の部分にフラグメントを追加することを必要とする。例えば、JAVA(登録商標)のコアjava.timeパッケージ内のタイプを参照するために、用語「DateTime」を使用する前に、JAVA(登録商標)プログラミング言語は、ソースファイルの最上部の近くの「import java.time.LocalDate;」のようなインポート命令を必要とする。そのような使用をサポートするために、ターゲット言語のための翻訳文法は、ホイスト命令を含み得る。ホイスト命令は、関連するステートメントをソースファイル内の適切な位置に移動させる事後処理パスをシグナリングする。例えば、日付概念のための上記JAVA(登録商標)文法は、共通概念テキスト「Date(year:1776,month:8,day:2)」を表す初期抽象化トークンシーケンスから、以下の抽象化トークンシーケンスを作成する:
【表16】
【0081】
上記例では、ライン01~06は、ライン02及び05における関連するimportステートメントを、JAVA importステートメントを包含するためのソースコードファイル内の適切な位置(例えば、ソースコードファイルの最上部の近く)に移動させる(ホイストする)ための事後処理パスのためのホイスト命令を包含する。
【0082】
エンベロープ
一部のソースコード使用例は、不必要な詳細を削除する。例えば、ソースコード使用例の著者は、完全なプログラムにそれを変えるために、提供された使用例の上及び下の共通定型文をどのように追加するかをリーダが知ることを想定し得る。この定型文は、本明細書で、ソースコード使用例の「エンベロープ」と称される。ターゲットプログラミング言語におけるソースコード使用例に翻訳された、共通仕様書104内のソースコード使用例のエンベロープは、ソースコードが稼働することが必要であるが、リーダに対して可視である場合、著者が作ることを試みるポイントから目を逸らす、ソースコード使用例の表示された部分の前及び後のコンテンツである。
【0083】
いくつかの実施態様では、生成されたドキュメンテーションは、エンベロープを含むが、それが可視である方法においての文体とされる。加えて、「copy to clipboard」オペレーションまたは「open in source code editor」オペレーションがソースコード使用例の可視部分に適用されるときにエンベロープが含まれる。
【0084】
ターゲットプログラミング言語への共通仕様書104内のソースコード使用例の翻訳は、関係のあるコンテンツからエンベロープコンテンツを区別するための抽象化トークンを含み得る。抽象化トークンは、エンベロープコンテンツの始め及び終わりをマークし得る。例えば、エンベロープコンテンツを有するが、上記議論された共通日付概念のみのJAVA(登録商標)翻訳は、上記議論されたホイスト命令を事後処理した後であり得る。
【表17】
【0085】
上記例では、テキスト「//BEGIN ENVELOPE」及びテキスト「//END ENVELOPE」は、エンベロープコンテンツの始め及び終わりを表すために使用される抽象化トークンである。
【0086】
エンベロープは、他の理由により有用である。例えば、ソースコード使用例の翻訳がターゲット言語におけるスタンドアロンプログラムを結果としてもたらすとき、それがエラーを生むかどうかを判定するために、プログラムをコンパイル及び実行することができる。これは、翻訳におけるエラー及び著者による誤った想定を検出するための容易な方法を提供する。
【0087】
更に、ソースコード使用例内またはソースコード使用例に隣接する構造化されたテキストは、例の予想された出力を示し得る。プログラムの出力が予想された出力に一致するかどうかをテストするために、ターゲット言語へのエンベロープを有するソースコード使用例の翻訳をコンパイル及び実行することができる。どのようにして何かをプログラムしないかを例示するためにソースコード使用例が提供されるときなど、予想された出力がエラーまたはスローされた例外である可能性があることに留意されよう。このケースでは、プログラムは、それが予想されたエラーコードを生成し、または予想された例外をスローするかどうかをテストするために実行され得る。
【0088】
エンベロープは、ターゲットプログラミング言語ごとなどに別々に規定され得る。代わりに、エンベロープは、ドキュメンテーションフラグメントトランスレータ114によって自動で生成及び出力され得る。
【0089】
エンベロープ及びテストする例
前の例に戻り、共通仕様書104の以下の可能なコンテンツを考える:
【表18】
【0090】
ドキュメンテーションフラグメントエクストラクタ106は、始めの「/**」コメントブロックマーカ及び終わりの「*/」コメントブロックマーカによって、ソースコードコメントブロックとしてライン01~0806を識別し得る。この識別に基づいて、ドキュメンテーションフラグメントエクストラクタ106は、ドキュメンテーションフラグメントとしてライン02~-705を抽出し得る。一方、コンパイラ118は、共通ブロックの一分として囲まれず、コンパイルされることになるソースコードとして、ライン0907を識別し得る。ドキュメンテーションフラグメントエクストラクタ106は、ドキュメンテーションフラグメントトランスレータ114に、抽出されたドキュメンテーションフラグメントを渡し得る。
【0091】
この例におけるドキュメンテーションフラグメントは、共通仕様書104の上記例のライン0403及び0504においてソースコード使用例を包含する。ドキュメンテーションフラグメントがソースコード使用例を包含するとき、ドキュメンテーションフラグメントトランスレータ114は、特定のターゲットプログラミング言語におけるエンベロープされたソースコード使用例に、ソースコード使用例を翻訳するように構成され得る。エンベロープされたソースコード使用例は次いで、テストソースコードファイル124に出力され得る。例えば、現在の例について、ターゲット言語がJAVA(登録商標)である場合、テストソースコードファイル124は、以下のJAVA(登録商標)ソースコードを包含し得る:
【表19】
【0092】
この例では、JAVA(登録商標)ソースコードのライン05及び06は、共通仕様書104の上記例のライン0403及び0504から直接導出される。JAVA(登録商標)ソースコードの残りのラインは、ドキュメンテーションフラグメントトランスレータ114によって自動で生成されたエンベロープの一部である。
【0093】
この例におけるドキュメンテーションフラグメントは、共通仕様書104の例のライン0605において、予想された出力インジケータ「//stdout:」を包含する。ドキュメンテーションフラグメントが予想された出力インジケータを包含するとき、ドキュメンテーションフラグメントトランスレータ114は、予想された出力ファイル122に予想された出力を出力するように構成され得、予想された出力ファイル122は、ファイルシステムファイルまたは標準出力「ファイル」であり得る。例えば、現在の例について、予想された出力ファイル122は、以下のコンテンツを包含し得る:
【表20】
【0094】
コンパイラ118は、コードジェネレータ120に、共通仕様書104内のソースコードの中間表現(例えば、抽象化トークンシーケンス)を渡し得る。加えて、ドキュメンテーションフラグメントトランスレータ114は、コードジェネレータ120に、ドキュメンテーションフラグメントの中間表現(例えば、抽象化トークンシーケンス)を渡し得る。コードジェネレータ102は、特定のターゲット言語(例えば、JAVA(登録商標))のためであり得る。入力中間表現から、コードジェネレータ102は、ターゲット言語においてライブラリソースコードファイル126を作成する。ライブラリソースコードファイル126は、ターゲット言語への共通仕様書104内のソースコードの翻訳と、ターゲット言語へのドキュメンテーションフラグメントの翻訳との両方を包含する。例えば、現在の例について、ターゲット言語がJAVA(登録商標)である場合、ライブラリソースコードファイル126は、以下のコンテンツを包含し得る:
【表21】
【0095】
上記例では、ライン01~03及びライン20~21は、共通仕様書104の例のソースコードのJAVA(登録商標)翻訳を表し、ライン04及び19は、ドキュメンテーションフラグメントの例のJAVA(登録商標)翻訳を表す。JAVA(登録商標)ドキュメンテーションフラグメントが、共通仕様書104の例から抽出されたドキュメンテーションフラグメントのソースコード使用例の翻訳を包含することに留意されるべきである。ソースコード使用例のJAVA(登録商標)翻訳は、XMLのようなマークアップによって描かれたエンベロープを含む。<span>タグがハイパーテキストマークアップ言語(HTML)または同様のものとして処理される場合、ソースコードエディタ、ウェブブラウザ、または他のコンピュータアプリケーションなどによる、グラフィカルユーザインタフェース内のライブラリソースコードファイル126のデフォルトの提示内でエンベロープのコンテンツを隠蔽するために、Cascading Style Sheet(CSS)または同様のものにおける「エンベロープ」クラスの定義を使用することができる。例えば、デフォルトで、ライブラリソースコードファイル126のコンテンツは、以下のように、不可視のエンベロープコンテンツと共に表示され得る:
【表22】
【0096】
ターゲット言語コンパイラ130は、ターゲットライブラリ138にライブラリソースコードファイル126をコンパイルし得る。例えば、ターゲットがJAVA(登録商標)である場合、ターゲット言語コンパイラ130は、従来のJAVA(登録商標)ソースコードコンパイラまたは第三者JAVA(登録商標)ソースコードコンパイラであり得る。
【0097】
ターゲット言語ドキュメンテーションジェネレータ134は、ライブラリソースコードファイル126からターゲットドキュメンテーション140を生成し得る。例えば、ターゲットがJAVA(登録商標)である場合、ターゲット言語ドキュメンテーションジェネレータ134は、コンピュータプログラムまたは同様のもののためのJAVADOCを生成し得る。
【0098】
テストランナ128は、稼働可能コンピュータプログラムにテストソースコードファイル124をコンパイルするために、ターゲット言語コンパイラ130を使用し得る。テストランナ128は次いで、コンピュータプログラムを稼働し得、予想された出力122との比較のために出力をキャプチャし得る。稼働するとき、テストコンピュータプログラムは、ライブラリソースコード126から生成されたターゲットライブラリ138をロードし呼び出し得る。テストランナ128によってキャプチャされたテストコンピュータプログラムの出力が予想された出力122に一致しない場合、テストランナ128は、テスト結果データ136においてテスト失敗を示し得る。そのようなテスト結果は、共通仕様書104内で書かれたソースコード使用例が、バグもしくは他のプログラミングエラーを包含することを示し得、またはソースコード使用例をターゲット言語に翻訳する際のドキュメンテーションフラグメントトランスレータ114における課題を示し得る。その一方で、テストランナ128によってキャプチャされたテストコンピュータプログラムの出力が予想された出力122に一致する場合、テストランナ128は、テスト結果データ136においてテスト成功を示し得る。
【0099】
テスト結果136、ターゲット言語ライブラリ138、及びターゲット言語ドキュメンテーション140を含むシステムの出力134は、1つ以上のコンピュータ記憶媒体に記憶され得る。
【0100】
システムは、他のターゲット言語のための、他のドキュメンテーションフラグメントトランスレータ114、他のコードジェネレータ120、他のターゲット言語コンパイラ130、及び他のターゲット言語ドキュメンテーションジェネレータ132を含み得る。このようにして、システムは、共通仕様書104から多くのプログラミング言語ターゲットのための慣用語ソフトウェアドキュメンテーションを作成することができる。共有コンポーネント108は、外部相互インデックスフェッチャ110を含み、共通概念コーパス112は、多くの異なるプログラミング言語ターゲットにわたってシステム内で共有され得る。
【0101】
ドキュメンテーションフラグメントトランスレータ
ドキュメンテーションフラグメントトランスレータ114は、共通仕様書104から抽出されたドキュメンテーションフラグメントを、特定のターゲットプログラミング言語に精通したプログラマにとって有益であるフォーマットに翻訳するように構成され得る。ターゲットプログラミング言語のためのソースコード126に、ドキュメンテーションフラグメントトランスレータ114の出力を埋め込むことができる。次いで、ソースコード126のドキュメンテーション140を生成するために、ターゲット言語ドキュメンテーションジェネレータ132にソースコードを入力することができる。代わりに、ドキュメンテーションフラグメントトランスレータ114は、生成するためにターゲットプログラミング言語特有ツールを必要としない、HTMLまたはPDFまたは同様のもののような特定のフォーマットにおいて直接、ターゲット言語ドキュメンテーションフラグメントトランスレータ114及び出力ドキュメンテーション140をバイパスし得る。
【0102】
共通仕様書104から抽出されたドキュメンテーションフラグメントは、中断されたプローズ、ドキュメンテーションフラグメント言語におけるソースコード使用例、または相互参照を含み得る。ドキュメンテーションフラグメントトランスレータ114は、翻訳するためのドキュメンテーションフラグメントに加えて、追加の入力を受信し得る。特に、ドキュメンテーションフラグメントトランスレータ114は、それに対して共通仕様書104から導出されたターゲットライブラリ138内で明らかな参照に対してドキュメンテーション140が生成される、共通仕様書104内で定義された参照に関連する相互インデックス116を受信し得る。相互インデックス116も、他の共通仕様書から導出されたライブラリのための相互インデックスを含み得、そのような相互インデックスは、それに対してドキュメンテーションフラグメントトランスレータ114によってドキュメンテーション140が生成される、共通仕様書104によって使用される入力、出力、またはオペレータを定義し得る。
【0103】
ドキュメンテーションフラグメントトランスレータ114への他の入力は、それが必要とする相互インデックスをフェッチするために、ドキュメンテーションフラグメントトランスレータ114が外部相互インデックスフェッチャ110を使用することを可能にするメタデータ、例えば、URLによって規定されたネットワーク位置など、ドキュメンテーション140が利用可能にされもしくは公開される場所を記述するメタデータ、入力ドキュメンテーションフラグメント内でプローズのロケール(複数可)もしくはヒューマン言語(複数可)を記述するメタデータ、ドキュメンテーション140のリーダが好むロケール(複数可)もしくはヒューマン言語(複数可)を記述するメタデータ、ドキュメンテーションフラグメントのソースコード使用例が有効な例であるか、もしくはそのように行わないものを説明することを意味されているかどうかを記述するメタデータ、ドキュメンテーションフラグメントのソースコード使用例の計算結果を記述するメタデータ、または翻訳されたソースコード使用例に基づいて人がテストコンピュータプログラムを稼働させるもの及び適切なエンベロープが見るべきものを記述するメタデータ、を含み得る。
【0104】
ドキュメンテーションフラグメントトランスレータ114は、1つのヒューマン言語から別のヒューマン言語に、共通仕様書104から抽出されたドキュメンテーションフラグメント内のプローズを翻訳し、その結果、出力ライブラリソースコードファイル126がターゲットヒューマン言語におけるポーズを含むように構成され得る。
【0105】
ドキュメンテーションフラグメントトランスレータ114は、ドキュメンテーションフラグメント言語内のソースコード使用例を、ターゲット言語における同等のソースコード使用例に翻訳し得る。それを行う際に、ドキュメンテーションフラグメントトランスレータ114は、ターゲット言語における同等のソースコード使用例のためのターゲットプログラミング言語におけるエンベロープを生成及び導入し得る。
【0106】
ドキュメンテーションフラグメントトランスレータ114は、ターゲット言語におけるソースコード使用例のエンベロープされたバージョンからコンパイルされたテストコンピュータプログラムの実際の結果または実際の出力に対して、ソースコード使用例のいずれかの予想された結果または予想された出力をチェックすることを有効にするために、追加の出力を作成し得、次いで、実際の結果または実際の出力を生成するように稼働し得る。加えて、または代わりに、ドキュメンテーションフラグメントトランスレータ114は、内部で品質制御チェックを実行し得、追加の出力としてそれらの結果を出力し得る。
【0107】
翻訳のフェーズ
図2をここで参照して、ドキュメンテーションフラグメントトランスレータ114は、共通仕様書104から抽出されたドキュメンテーションフラグメントに適用されるパーサを使用し得る。パーサは、中断されたテキスト内で構造化されたテキストを取り出すために使用され得る。要素242は、埋め込まれた構造化されたテキストを有する中断されたプローズを包含する共通仕様書から抽出された例のドキュメンテーションフラグメントを記述する。要素242では、埋め込まれた構造化されたテキストがイタリック体で表示される。
【0108】
ドキュメンテーションフラグメントトランスレータ114は次いで、構造化されたテキストプレースホルダを有するが、中断されたプローズを分離し得、構造化されたテキストプレースホルダは、中断されたプローズから(例えば、要素246にある)隔離された構造化されたテキスト部分から、構造化されたテキスト(例えば、要素244にある)を再度組み込む場所を示す。要素244は、構造化されたテキストプレースホルダを有するが、要素242の中断されたプローズを示し、構造化されたテキストプレースホルダは、構造テキストを再度組み込む場所を示す。要素246は、プレースホルダを分離された構造化されたテキストに関連付ける。
【0109】
その埋め込まれた構造化されたテキストから別々の中断されたプローズへのパーサを使用するドキュメンテーションフラグメントトランスレータ114の代替として、ドキュメンテーションフラグメントトランスレータ114は、事前分離されたドキュメンテーションフラグメントエクストラクタ106から、それらのコンポーネントを受信し得る。例えば、要素242のような組み込まれた形式においてドキュメンテーションフラグメントをドキュメンテーションフラグメントトランスレータ114に入力するドキュメンテーションフラグメントエクストラクタ106の代わりに、ドキュメンテーションフラグメントエクストラクタ106は、事前に分離された形式の要素244及び246のようなドキュメンテーションフラグメントを入力することができる。
【0110】
ドキュメンテーションフラグメントトランスレータ114は、埋め込まれたプレースホルダを有する中断されたプローズを、埋め込まれたプレースホルダを有する、翻訳された、中断されたプローズに翻訳することができる。それを行う際、プレースホルダテキストは、翻訳される必要がない。例えば、要素248は、要素244の英語の中断されたプローズのスペイン語翻訳を表す。要素248の翻訳された、中断されたプローズはなお、同一のセマンティック位置にプレースホルダを包含することに留意されよう。
【0111】
要素246の「cross_reference_2」などの相互インデックス付けフレーズを翻訳することは、ドキュメンテーションフラグメントトランスレータ114が、相互インデックステーブル内のフレーズの全体または一部を検索することを伴い得る。短縮された名前がコンテキスト内でより大きなスタンドアロンの名前と同一であるとき、より大規模なプログラム内で既に発見及び処理された、命名されたエンティティと、それらを識別するための使用されるルールとをコンパイラ118が有し得るので、共通仕様書104のコンパイルの間に、それらのテーブルを構築することが便利であり得る。コンパイラ118はまた、第三者によって書かれたソースファイル内で定義されたプログラミング言語構造を参照する名前を頻繁に扱い得、よって、コンパイラ118が、相互インデックスを作成することが便利であることが多く、相互インデックスは、関連する相互インデックスフレーズを、共通仕様書104外で定義されたがそれによって参照されるプログラミング言語要素に関連付けることを可能にする。
【0112】
要素246は、要素242によって表されるドキュメンテーションフラグメントのソースコード使用例への参照「code_sample_1」を包含する。要素250では、ソースコード使用例は、ターゲット言語においてエンベロープされたソースコード使用例に翻訳されてきた。また、要素250では、「cross_reference_2」値#Rainbowは、特定の対応するURLに翻訳されてきた。ドキュメンテーションフラグメントトランスレータ114は次いで、翻訳された、中断されたプローズを、要素248によって表される埋め込まれたプレースホルダと再度組み合わせ、要素250によって表される構造化されたテキストに翻訳された関連するプレースホルダを、要素252によって表されるようなエンドユーザツールにとって有益なヒントをフォーマットすることによる明確な、準構造化されたテキストと再度組み合わせる。そのようなエンドユーザツールは、ターゲット言語コンパイラ130、ターゲット言語ドキュメンテーションジェネレータ132、及び生成されたドキュメンテーション140を見るためのツール(例えば、ウェブブラウザ、IDE、またはソースコードエディタ)を含み得る。
【0113】
要素242では、イタリック体で表示されたテキストは、埋め込まれた構造化されたテキストを表す。要素244では、イタリック体で表示されたテキストは、埋め込まれたプレースホルダテキストを表す。要素248246では、イタリック体で表示されたテキストは、埋め込まれたプレースホルダテキストを表す。要素252では、イタリック体で表示されたテキストは、エンドユーザツールにとって有益なヒントをフォーマットすることによる準構造化されたテキストを表す。
【0114】
ドキュメンテーション生成のためのプロセス
図3は、共通仕様書から多くのプログラミング言語ターゲットのための慣用語ソフトウェアドキュメンテーションを作成する処理のフローチャートである。オペレーション354及び356は、多くのプログラミング言語ターゲットに対して1回実行され得る。オペレーション358~372は、プログラミング言語ターゲットごとに実行され得る。
【0115】
オペレーション354において、共通仕様書から抽出されたドキュメンテーションフラグメントのソースコード使用例のテキストは、メタデータにより増補され得る。テキストは、テキスト内で言及され得るが、典型的には簡潔さのために削除される暗黙的な構造を追加するために、テキストに対するドキュメンテーションフラグメント言語のためのコンパイラによって、1つ以上のパスに基づいて増補され得る。例えば、ソースコード使用例のテキスト「let n = 123;」は、例えば、「let n:number = 123;」としてなど、データタイプ情報により増補され得、テキスト「:number」は、ストリング、ユーザにより定義されたデータタイプ、または他のデータタイプとは反対に、それが数字データタイプを表すことを示すために、変数「n」を増補する。他のコンパイラに基づく増補が可能であり、特定の増補のセットが必要とされない。
【0116】
オペレーション356において、増補テキストは、抽象化トークンの第1のシーケンスに変換され、抽象化トークンの第1のシーケンスは、いずれかの特定のターゲットプログラミング言語とは独立した中間形式にある増補されたテキストを表す。変換は、機械学習処理または文法駆動処理に従って行われ得る。抽象化トークンの第1のシーケンスとして使用され得る、増補テキストを言語間定義的要素のシーケンスに変換するための文法駆動アプローチは、参照によってその内容が以下に組み込まれる、2020年12月22日に出願された「Deriving Many Idiomatic Programming Language Interfaces」と題する、関連する米国特許出願第17/131,574号において説明される。
【0117】
オペレーション358において、抽象化トークンの第1のシーケンスは、所与のターゲット言語のために事前処理される。例えば、ターゲット言語が入れ子関数をサポートせず、ソースコード使用例が入れ子関数を伴う場合、クロージャ変換が実行され得る。
【0118】
オペレーション360において、所与のターゲット言語のためのドキュメンテーションフラグメントトランスレータは、ドキュメンテーションフラグメントトランスレータのコーパスから選択される。
【0119】
オペレーション362において、選択されたドキュメンテーションフラグメントトランスレータは、所与のターゲット言語に構造においてより近い第2の抽象化トークンシーケンスを生成するために、第1の抽象化トークンシーケンスに適用される。翻訳は、機械学習ベースまたは文法駆動であり得る。
【0120】
オペレーション364において、事後処理が第2の抽象化トークンシーケンスに対して実行される。例えば、第2のシーケンス内の一連のトークンが、それが相互参照であることを示すマーカによって囲まれるとき、相互参照転換が実行され得、転換は、第2のシーケンス内の一連のトークンを置き換えるために、第2のシーケンスに適用される。別の例として、第2のシーケンス内の一連のトークンが、一連のトークンがホイストされる必要があることを示すマーカによって囲まれるとき、エンベロープ内にあり得る第2のシーケンス内のその規定された宛先に一連のトークンを移動させる。
【0121】
オペレーション366において、第2のシーケンス内の不必要なトークンが取り除かれる。そのような不必要なトークンは、テキストに貢献せず、または、例えば、エンベロープ境界など、翻訳に固執する必要がある境界を識別しないトークンを含み得る。
【0122】
オペレーション368において、ターゲット特有ソースコードフォーマッタは、人間がそれを配置することをリーダが予想するホワイトスペースを挿入するために、抽象化トークンの第2のシーケンスに適用される。ほとんどのターゲットについて、
1.エンベロープ境界マーカなどの非テキスト出力トークンを発見し、それらの順序場所に注意し、
2.各々の間の単一のスペースを有するテキストトークンに参加し、
3.例えば、参加したテキストをフォーマットするために所与のターゲット言語に対して適切な、見事なプリンタなど、コードフォーマッタを使用し、
4.所与のターゲット言語に対して適切な語彙アナライザを使用して、ホワイトスペーストークンを含むトークンにフォーマットされたテキストを分割し、
5.挿入されたスペーストークンをカウントしないように考慮して、順序場所に非テキストトークンを再挿入する、
ことに十分であり得る。
【0123】
オペレーション370において、所与のターゲット言語のツールチェーンに適切なエンベッダが選択される。例えば、JAVADOCは、JAVA(登録商標)のために選択され得、DOKKAは、KOTLINのために選択され得、両方のエンベッダは、HTMLをソースコードコメントに埋め込むことを可能にする。HTMLエンベッダは、テキストトークンを、そのテキストコンテンツを表示するHTMLフレーズに変え、エンベロープ境界をメタデータタグと置き換え、メタデータタグは、リーダからエンベロープコンテンツを隠蔽するが、エンベロープコンテンツを、エンベロープコンテンツを使用することができるスクリプト及びオペレーションに対して利用可能にする、ことの両方である。そのようなオペレーションは、クリップボードへのコピー操作またはエディタオペレーションにおけるオープンを含み得る。
【0124】
オペレーション372において、エンベッダは、翻訳されたテキストフラグメントを作成するために、トークンストリームに適用され、翻訳されたテキストフラグメントは、場合によっては、ターゲット特有ドキュメンテーションジェネレータによる更なる処理の後に、ターゲットに精通した人にとって有益な明確に構造化されたテキストである。
【0125】
基本的コンピューティングデバイス
技術は、少なくとも1つのコンピューティングデバイスによって実装され得る。1つ以上のコンピューティングデバイスによる場合、技術は、パケットデータネットワークなどのネットワークを使用して、共に結合されたコンピューティングデバイスの組み合わせを使用して、全体的または部分的に実装され得る。技術の実施態様において使用されるコンピューティングデバイスは、技術の一部もしくは全てを実行するために配線接続され得、または技術の一部もしくは全てを実行するように永続的にプログラムされた、少なくとも1つの特定用途向け集積回路(ASIC)もしくはフィールドプログラマブルゲートアレイ(FPGA)などのデジタル電子デバイスを含み得、またはファームウェア、メモリ、他の記憶装置、もしくは組み合わせにおいてプログラム命令に従って技術の一部もしくは全てを実行するようにプログラムされた少なくとも1つの汎用ハードウェアプロセッサを含み得る。技術の実施態様において使用されるコンピューティングデバイスはまた、技術の一部または全てを達成するために、カスタム配線接続されたロジック、ASIC、またはFPGAを、カスタムプログラミングと組み合わせ得る。技術の実施態様において使用されるコンピューティングデバイスは、サーバコンピューティングデバイス、ワークステーションコンピューティングデバイス、パーソナルコンピューティングデバイス、ポータブルコンピューティングデバイス、ハンドヘルドコンピューティングデバイス、モバイルコンピューティングデバイス、または技術の一部もしくは全てを実装するように配線接続されたロジックもしくはプログラムロジックを組み込むいずれかの他のコンピューティングデバイスであり得る。
【0126】
図4は、技術の実施態様において使用され得る例示的な基本的コンピューティングデバイスのブロック図である。図4の例では、ハードウェア、ソフトウェア、またはハードウェア及びソフトウェアの組み合わせにおいて技術の一部または全てを実装するためのコンピューティングデバイス400及び命令は、コンピュータアーキテクチャ及びコンピューティングデバイスの実装に関して通信するための、本開示が関連する当業者によって一般に使用される同一のレベルの詳細において、例えば、ボックス及び円として、概略的に表される。
【0127】
コンピューティングデバイス400は、入力/出力(I/O)サブシステム402を含み、I/Oサブシステム402は、電子信号パスを通じてコンピューティングデバイス400のコンポーネントの間で情報または命令を通信するためのバスまたは他の通信機構を含み得る。I/Oサブシステム402は、I/Oコントローラ、メモリコントローラ、及び少なくとも1つのI/Oポートを含み得る。電子信号パスは、例えば、線、片方向矢印、または双方向矢印として、図面において概略的に表される。
【0128】
少なくとも1つのハードウェアプロセッサ404は、情報及び命令を処理するためのI/Oサブシステム402に結合される。ハードウェアプロセッサ404は、埋め込みシステムまたはグラフィックスプロセシングユニット(GPU)またはデジタルシグナルプロセッサまたはARMプロセッサなど、例えば、汎用マイクロプロセッサまたはマイクロコントローラまたは特殊目的マイクロプロセッサを含み得る。プロセッサ404は、統合算術ロジックユニット(ALU)を含み得、または別々のALUに結合され得る。
【0129】
コンピューティングデバイス400は、データ及びプロセッサ404によって実行されることになる命令を電子的にデジタルに記憶するためのI/Oサブシステム402に結合されたメインメモリなど、メモリ406の1つ以上のユニットを含む。メモリ406は、様々な形式のランダムアクセスメモリ(RAM)または他の動的記憶装置などの揮発性メモリを含み得る。メモリ406はまた、プロセッサ404によって実行されることになる命令の実行の間に一時変数または他の中間情報を記憶するために使用され得る。そのような命令は、プロセッサ404にアクセス可能な非一時的記憶媒体に記憶されるとき、コンピューティングデバイス400を特殊目的マシンにレンダリングすることができ、特殊目的マシンは、命令において規定されたオペレーションを実行するためにカスタマイズされる。
【0130】
コンピューティングデバイス400は更に、リードオンリメモリ(ROM)408、またはプロセッサ404のための情報及び命令を記憶するためのI/Oサブシステム402に結合された他の静的記憶装置など、不揮発性メモリを含む。ROM408は、消去可能PROM(EPROM)または電気的消去可能PROM(EEPROM)など、様々な形式のプログラム可能ROM(PROM)を含み得る。永続的記憶装置410のユニットは、フラッシュメモリ、あるいはソリッドステート記憶装置、磁気ディスク、またはCD-ROMもしくはDVD-ROMなどの光学ディスクなど、様々な形式の不揮発性RAM(NVRAM)を含み得、情報及び命令を記憶するためのI/Oサブシステム402に結合され得る。記憶装置410は、プロセッサ404によって実行されるとき、コンピュータにより実施される方法に、技術の一部または全てを実行させる命令及びデータを記憶するために使用され得る非一時的コンピュータ可読媒体の例である。
【0131】
メモリ406、ROM408、または記憶装置410内の命令は、モジュール、メソッド、オブジェクト、関数、ルーチン、またはコールとして編成された1つ以上の命令セットを含み得る。命令は、1つ以上のコンピュータプログラム、オペレーティングシステムサービス、またはモバイルappを含むアプリケーションプログラムとして編成され得る。命令は、オペレーティングシステムまたはシステムソフトウェア、マルチメディア、プログラミング、または他の関数をサポートするための1つ以上のライブラリ、TCP/IP、HTTP、または他の通信プロトコルを実装するためのデータプロトコル命令またはスタック、HTML、XML、JPEG、MPEG、またはPNGを使用して符号化されたファイルを解釈及びレンダリングするためのファイル処理命令、グラフィカルユーザインタフェース(GUI)、コマンド-ラインインタフェース、またはテキストユーザインタフェースのためのコマンドをレンダリング及び解釈するためのユーザインタフェース命令、オフィススイート、インターネットアクセスアプリケーション、設計及び製造アプリケーション、グラフィックスアプリケーション、音声アプリケーション、ソフトウェアエンジニアリングアプリケーション、教育アプリケーション、ゲームまたは多岐にわたるアプリケーションなどのアプリケーションソフトウェア、を含み得る。命令は、ウェブサーバ、ウェブアプリケーションサーバ、またはウェブクライアントを実装し得る。命令は、構造化クエリ言語(SQL)もしくはNoSQL、オブジェクトストア、グラフデータベース、フラットファイルシステム、または他のデータ記憶装置を使用して、関係データベースシステムなど、プレゼンテーションレイヤ、アプリケーションレイヤ、及びデータストレージレイヤとして編成され得る。
【0132】
コンピューティングデバイス400は、I/Oサブシステム402を介して、少なくとも1つの出力デバイス412に結合され得る。出力デバイス412は、デジタルコンピュータディスプレイであり得る。使用され得るディスプレイの例は、タッチスクリーンディスプレイまたは発光ダイオード(LED)ディスプレイまたは液晶ディスプレイ(LCD)または電子ペーパディスプレイを含む。コンピューティングデバイス400は、ディスプレイデバイスの代わりにまたはそれに加えて、他のタイプの出力デバイス412を含み得る。他の出力デバイス412の例は、プリンタ、チケットプリンタ、プロッタ、プロジェクタ、サウンドカードもしくはビデオカード、スピーカ、ブザーまたは圧電デバイスまたは他の可聴デバイス、ランプまたはLEDまたはLCDインジケータ、触覚デバイス、アクチュエータまたはサーボを含む。
【0133】
入力デバイス414は、信号、データ、コマンド選択、またはジェスチャをプロセッサ404に通信するためのI/Oサブシステム402に結合され得る。入力デバイス414の例は、タッチスクリーン、マイクロフォン、静止及びビデオデジタルカメラ、英数字及び他のキー、キーパッド、キーボード、グラフィックタブレット、画像スキャナ、ジョイスティック、クロック、スイッチ、ボタン、ダイヤル、スライド、または力センサ、動きセンサ、熱センサ、加速度計、ジャイロスコープ、及び慣性測定ユニット(IMU)センサなどの様々なタイプのセンサ、セルラもしくはWi-Fi(登録商標)などの無線機、無線周波数(RF)もしくは赤外線(IR)送受信機及びグローバルポジショニングシステム(GPS)送受信機などの様々なタイプの送受信機を含む。
【0134】
別のタイプの入力デバイスは、制御デバイス416であり、制御デバイス416は、ディスプレイスクリーン上でのグラフィカルインタフェース内で、カーソル制御またはナビゲーションなどの他の自動制御機能を実行し得、代わりに、または追加で入力機能を実行し得る。制御デバイス416は、方向情報及びコマンド選択をプロセッサ404に通信し、ディスプレイ412上でのカーソルの移動を制御するための、タッチパッド、マウス、トラックボール、またはカーソル方向キーであり得る。入力デバイスは、デバイスが平面内で位置を規定することを可能にする、2つの軸、第1の軸(例えば、x)及び第2の軸(例えば、y)内で少なくとも2つの自由度を有し得る。別のタイプの入力デバイスは、ジョイスティック、ワンド、コンソール、ステアリングホイール、ペダル、ギアシフト機構、または他のタイプの制御デバイスなど、有線、無線、または光学制御デバイスである。入力デバイス414は、ビデオカメラ及び深度センサなど、複数の異なる入力デバイスの組み合わせを含み得る。
【0135】
コンピューティングデバイス400は、出力デバイス412、入力デバイス414、及び制御デバイス416のうちの1つ以上が省略されたモノのインターネット(IoT)デバイスまたは他のコンピューティングアプライアンスを含み得る。入力デバイス414は、1つ以上のカメラ、動き検出器、サーモメータ、マイクロフォン、地震検出器、他のセンサまたは検出器、測定デバイスまたはエンコーダを含み得、出力デバイス412は、単一ラインLEDまたはLCDディスプレイなどの特殊目的ディスプレイ、1つ以上のインジケータ、ディスプレイパネル、メータ、バルブ、ソレノイド、アクチュエータ、またはサーボを含み得る。
【0136】
コンピューティングデバイス400がモバイルまたはポータブルコンピューティングデバイスであるとき、入力デバイス414は、グローバルポジショニングシステム(GPS)モジュールに結合されたGPS受信機を含み得、GPSモジュールは、複数のGPSサテライトを三角測量し、コンピューティングデバイス400の地球物理学的位置についての緯度-経度値など、地理的位置またはポジションを判定及び生成する能力を有する。出力デバイス412は、ホスト424もしくはサーバ430に向かって向けられた、単独でまたは他のアプリケーション特有データとの組み合わせで、ポジション報告パケット、通知、パルスもしくはハートビート信号、またはコンピューティングデバイス400のポジションを規定する他の繰り返しデータ送信を生成するためのハードウェア、ソフトウェア、ファームウェア、及びインタフェースを含み得る。
【0137】
コンピューティングデバイス400は、コンピューティングデバイス400との組み合わせでロード及び使用または実行されるとき、コンピューティングデバイス400に特殊目的マシンとして動作させ、または特殊目的マシンとして動作するようにコンピューティングデバイス400をプログラムする、カスタマイズされた配線接続ロジック、少なくとも1つのASICまたはFPGA、ファームウェアまたはプログラム命令もしくはロジックを使用して、技術の一部または全てを実装し得る。
【0138】
コンピューティングデバイス400によって実行される技術は、プロセッサ404がメインメモリ406に包含された少なくとも1つの命令の少なくとも1つのシーケンスを実行することに応答して実行され得る。そのような命令は、記憶装置410などの別の記憶媒体からメインメモリ406に読み出され得る。メインメモリ406に包含された命令のシーケンスの実行は、プロセッサ404に、技術の一部または全てを実行させる。ソフトウェア命令の代わりに、またはソフトウェア命令との組み合わせで、配線接続回路が使用され得る。
【0139】
本明細書で使用される用語「記憶媒体」は、マシンに特定の方式で動作させるデータまたは命令を記憶するいずれかの非一時的コンピュータ可読媒体を指す。そのような記憶媒体は、不揮発性媒体または揮発性媒体を含み得る。不揮発性媒体は、例えば、記憶装置410など、光学ディスクまたは磁気ディスクを含む。揮発性媒体は、メモリ406などの動的メモリを含む。記憶媒体の一般形式は、例えば、ハードディスク、ソリッドステートドライブ、フラッシュドライブ、磁気データ記憶媒体、いずれかの光学データ記憶媒体もしくは物理データ記憶媒体、またはメモリチップなどを含む。
【0140】
記憶媒体は、送信媒体とは異なるが、送信媒体と共に使用され得る。送信媒体は、記憶媒体の間で情報を転送することに参加する。例えば、送信媒体は、I/Oサブシステム402のバスを含むワイヤを含む、同軸ケーブル、銅線、及び光ファイバを含む。送信媒体はまた、無線波及び赤外線データ通信の間に生成されたものなど、音響波または光波の形式をも取ることができる。
【0141】
様々な形式の媒体は、実行のために、少なくとも1つの命令の少なくとも1つのシーケンスをプロセッサ404に搬送することに関与し得る。例えば、命令は、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上で最初に搬送され得る。リモートコンピュータは、その動的メモリに命令をロードすることができ、モデムを使用して、光ファイバまたは同軸ケーブルまたは電話線などの通信リンクを通じて命令を送信することができる。コンピューティングデバイス400にローカルなモデムまたはルータは、通信リンク上でデータを受信することができ、コンピューティングデバイス400によって読み出されることになるデータを変換することができる。例えば、無線周波数アンテナまたは赤外線検出器などの受信機は、無線信号または光信号において搬送されたデータを受信することができ、適切な回路は、バス上でデータを配置するなど、データをI/Oサブシステム402に提供することができる。I/Oサブシステム402は、データをメモリ406に搬送し、メモリ406から、プロセッサ404は、命令を取り出し及び実行する。メモリ406によって受信された命令は、任意選択で、プロセッサ404による実行の前または後のいずれかで、記憶装置410に記憶され得る。
【0142】
コンピューティングデバイス400はまた、バス402に結合された通信インタフェース418を含む。通信インタフェース418は、ネットワーク422またはインターネット上のパブリックもしくはプライベートクラウドなど、少なくとも1つの通信ネットワークに直接または間接的に接続されたネットワークリンク420への双方向データ通信結合を提供する。例えば、通信インタフェース418は、イーサネット(登録商標)ネットワーキングインタフェース、統合サービスデジタルネットワーク(ISDN(登録商標))カード、ケーブルモデム、サテライトモデム、または対応するタイプの通信ライン、例えば、いずれかの種類のもしくは光ファイバラインもしくは電話線のイーサネット(登録商標)ケーブルもしくはメタルケーブルへのデータ通信接続を提供するためのモデムであり得る。ネットワーク422は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、キャンパスネットワーク、インターネットワーク、またはいずれかのそれらの組み合わせを広義に表す。通信インタフェース418は、互換性を有するLANへのデータ通信接続を提供するためのLANカード、またはセルララジオ電話無線ネットワーキング標準に従ってセルラデータを送信もしくは受信するために配線接続されたセルララジオ電話インタフェース、またはサテライト無線ネットワーキング標準に従ってデジタルデータを送信もしくは受信するために配線接続されたサテライト無線インタフェースを含み得る。いずれかのそのような実施態様では、通信インタフェース618は、様々なタイプの情報を表すデジタルデータストリームを搬送する信号パスを通じて、電気信号、電磁気信号、または光信号を送信及び受信する。
【0143】
ネットワークリンク420は典型的には、例えば、サテライト、セルラ、Wi-Fi(登録商標)、またはBLUETOOTH(登録商標)技術を使用して、他のデータデバイスへの直接のまたは少なくとも1つのネットワークを通じた電気データ通信、電磁気データ通信、または光データ通信を提供する。例えば、ネットワークリンク420は、ホストコンピュータ424へのネットワーク422を通じた接続を提供し得る。
【0144】
更に、ネットワークリンク420は、ネットワーク422を通じた接続、またはインターネットサービスプロバイダ(ISP)426によって操作されるインターネットワーキングデバイス及び/またはコンピュータを介した他のコンピューティングデバイスへの接続を提供し得る。ISP426は、インターネット428として表されるワールドワイドパケットデータ通信ネットワークを通じてデータ通信サービスを提供する。サーバコンピュータ430は、インターネット428に結合され得る。サーバ430は、ハイパーバイザ、またはDOCKERもしくはKUBERNETESなどの集中化プログラムシステムを実行するコンピュータにより、またはそれらなしに、いずれかのコンピュータ、データセンタ、仮想マシン、または仮想コンピューティングを広義に表す。サーバ430は、電子デジタルサービスを表し得、電子デジタルサービスは、1つよりも多いコンピュータまたはインスタンスを使用して実装され、送信ウェブサービス要求、HTTPペイロードにおけるパラメータを有するユニフォームリソースロケータ(URL)ストリング、APIコール、appサービスコール、または他のサービスコールによってアクセス及び使用される。
【0145】
コンピューティングデバイス400及びサーバ430は、分散コンピューティングシステムの要素を形成し得、分散コンピューティングシステムは、他のコンピュータ、処理クラスタ、サーバファーム、あるいはタスクを実行し、またはアプリケーションもしくはサービスを実行するように協調する他のコンピュータの編成を含む。サーバ630は、モジュール、メソッド、オブジェクト、関数、ルーチン、またはコールとして編成された1つ以上の命令セットを含み得る。命令は、1つ以上のコンピュータプログラム、オペレーティングシステムサービス、及び/またはモバイルappを含むアプリケーションプログラムとして編成され得る。命令は、オペレーティングシステム及び/またはシステムソフトウェア、マルチメディア、プログラミング、または他の関数をサポートするための1つ以上のライブラリ、TCP/IP、HTTP、または他の通信プロトコルを実装するためのデータプロトコル命令またはスタック、HTML、XML、JPEG、MPEG、またはPNGを使用して符号化されたファイルを解釈及びレンダリングするためのファイルフォーマット処理命令、グラフィカルユーザインタフェース(GUI)、コマンド-ラインインタフェース、またはテキストユーザインタフェースのためのコマンドをレンダリング及び解釈するためのユーザインタフェース命令、オフィススイート、インターネットアクセスアプリケーション、設計及び製造アプリケーション、グラフィックスアプリケーション、音声アプリケーション、ソフトウェアエンジニアリングアプリケーション、教育アプリケーション、ゲームまたは多岐にわたるアプリケーションなどのアプリケーションソフトウェア、を含み得る。サーバ430は、構造化クエリ言語(SQL)もしくはNoSQL、オブジェクトストア、グラフデータベース、フラットファイルシステム、または他のデータ記憶装置を使用して、関係データベースシステムなど、プレゼンテーションレイヤ、アプリケーションレイヤ、及びデータストレージレイヤをホストするウェブアプリケーションサーバを含み得る。
【0146】
コンピューティングデバイス400は、ネットワーク、ネットワークリンク420、及び通信インタフェース418を通じて、メッセージを送信することができ、プログラムコードを含む、データ及び命令を受信することができる。インターネットの例では、サーバ430は、インターネット428、ISP426、ローカルネットワーク422、及び通信インタフェース418を通じて、アプリケーションプログラムのための要求されたコードを送信し得る。受信されたコードは、それが受信され、または後の実行のために、記憶装置410もしくは他の不揮発性記憶装置に記憶されるように、プロセッサ404によって実行され得る。
【0147】
基本的ソフトウェアシステム
図5は、図4のコンピューティングデバイス400のオペレーションを制御するために採用され得る例示的な基本的ソフトウェアシステム500のブロック図である。それらの接続、関係、及び関数を含む、ソフトウェアシステム500及びそのコンポーネントは、例としてのみ意味され、技術の実施態様を限定することを意味しない。技術を実装するために適切な他のソフトウェアシステムは、異なる接続、関係、及び関数を有するコンポーネントを含む、異なるコンポーネントを有し得る。
【0148】
ソフトウェアシステム500は、コンピュータシステム400のオペレーションを命令するために提供される。システムメモリ(RAM)406及び固定記憶装置(例えば、ハードディスクまたはフラッシュメモリ)410に記憶され得るソフトウェアシステム500は、カーネルまたはオペレーティングシステム(OS)510を含む。
【0149】
OS510は、502-1、502-2、502-3…502-Nとして表される処理の実行、メモリ割り当て、ファイル入力及び出力(I/O)、ならびにデバイスI/Oを管理することを含む、コンピュータオペレーションの低レベル態様を管理する。1つ以上のアプリケーションプログラムは、システム500による1つ以上の処理として、実行のために「ロードされる」(例えば、固定記憶装置410からメモリ406に転送される)。コンピューティングデバイス400上での使用のために意図されたアプリケーションまたは他のソフトウェアも、例えば、インターネットロケーション(例えば、ウェブサーバ、appストア、または他のオンラインサービス)からダウンロード及びインストールするための、ダウンロード可能コンピュータ実行可能命令のセットとして記憶され得る。
【0150】
アプリケーションプログラム命令の実行は、実行されており、プログラムコード及びその現在の活動を構成するコンピュータプログラムのインスタンスの形式にあるプロセス(例えば、502-2)を実装し得る。オペレーティングシステム(OS)に応じて、プロセス(例えば、502-3)は、命令を同時に実行する実行の複数のスレッドから成り得る。このコンテキストでは、コンピュータプログラムは、命令の受動的集合であるが、プロセス(例えば、502-1)は、それらの命令の実際の実行であり得る。いくつかのプロセス(例えば、502-1及び502-2)は、同一のプログラムと関連付けられ得、例えば、同一のプログラムのいくつかのインスタンスを開始することは、1つよりも多いプロセスが実行されることを意味することが多く、単一のプロセスとして最初に起動するプログラムは、その後追加のプロセスをスポーンし得る(例えば、fork)。
【0151】
OS510は、プロセス502-1、502-2、502-3…502-Nがプロセッサ404を共有することを可能にするようにマルチタスキングを実装し得る。各々のプロセッサ404またはプロセッサのコアは、単一のタスクを一度に実行するが、コンピューティングデバイス400は、各々のタスクが終了することを待つ必要なしに、各々のプロセッサが実行されているタスクの間で切り替えることを可能にするようにマルチタスキングを実装するためにプログラムされ得る。タスクが入力/出力オペレーションを実行するとき、タスクがそれを切り替えることができることを示すとき、またはハードウェアが中断するとき、切り替えが実行され得る。コンテキスト切り替えを迅速に実行することによって対話式ユーザアプリケーションのための素早い応答が、同時の複数のプロセスの同時実行の出現を提供することを可能にするように、タイムシェアリングが実装され得る。セキュリティ及び信頼性のために、OS510は、独立したプロセスの間の直接通信を防止し得、厳格に調停及び制御されたプロセス間通信機能性を提供する。
【0152】
いくつかのインスタンスでは、プロセス502-1、502-2、502-3…502-N及びそれらが実装するアプリケーションプログラムは、アプリケーションコンテナ540内で実行し得る。アプリケーションコンテナは概して、OS510のオペレーションのモードであり、そのモードでは、OS510は、複数の隔離されたユーザ空間インスタンスの存在が、OS510上で稼働することを可能にする。アプリケーションコンテナ540は、1つのそのようなインスタンスの例である。代わりに、インスタンス自体は時に、ゾーン、仮想プライベートサーバ、パーティション、仮想環境、仮想カーネル、またはジェイルと称される。アプリケーションコンテナは、それによって、CPU時間及び記憶媒体空間などの有限ハードウェアコンピューティングリソースをインスタンスの中で割り当てることができる機構を提供する。
【0153】
ソフトウェアシステム500は、グラフィカル(例えば、「ポイントアンドクリック」または「タッチジェスチャ」)形式においてユーザコマンド及びデータを受信するためのグラフィカルユーザインタフェース(GUI)515を含む。それらの入力は次いで、オペレーティングシステム510またはプロセス502-1、502-2、502-3…502-Nからの命令に従って、システム500によって作用し得る。GUI515は、ユーザが追加の入力を供給し、またはセッションを終了する(例えば、ログオフする)とすぐに、OS510及びプロセス502-1、502-2、502-3…502-Nからのオペレーションの結果を表示する役割をも果たす。
【0154】
OS510は、コンピューティングデバイス400のベアハードウェア520(例えば、プロセッサ404)上で直接実行することができる。代わりに、ハイパーバイザまたは仮想マシンモニタ(VMM)530は、ベアハードウェア520とOS510との間で介入され得る。この構成では、VMM530は、コンピューティングデバイス400のOS510とベアハードウェア520との間のソフトウェア「クッション」または仮想化レイヤとして作用する。
【0155】
VMM530は、1つ以上の仮想マシンインスタンス(「ゲストマシン」)をインスタンス化し及び稼働させる。各々のゲストマシンは、ゲストオペレーティングシステム上で実行するように設計された、OS510などの「ゲスト」オペレーティングシステム、及びアプリケーション502などの1つ以上のアプリケーションを含む。VMM530は、ゲストオペレーティングシステムに仮想オペレーティングプラットフォームを提示し、ゲストオペレーティングシステムの実行を管理する。
【0156】
いくつかのインスタンスでは、VMM530は、ゲストオペレーティングシステムが、それがコンピューティングデバイス400のベアハードウェア520上で直接稼働しているかのように稼働することを可能にし得る。それらのインスタンスでは、ベアハードウェア520上で実行するように構成された同一のバージョンのゲストオペレーティングシステムも、修正または再構成なしに、VMM530上で実行し得る。言い換えると、VMM530は、いくつかのインスタンスにおいて、完全ハードウェア及びCPU仮想化をゲストオペレーティングシステムに提供し得る。
【0157】
他のインスタンスでは、ゲストオペレーティングシステムは、VMM530上で実行するように特別に設計または構成され得る。それらのインスタンスでは、ゲストオペレーティングシステムは、それが仮想マシンモニタ上で実行することを「認識する」。言い換えると、VMM530は、いくつかのインスタンスにおいて、準仮想化をゲストオペレーティングシステムに提供し得る。
【0158】
クラウドコンピューティング
技術は、「クラウドコンピューティング」環境内で実装され得る。用語「クラウドコンピューティング」は概して、コンピューティングモデルを記述するために本明細書で使用され、コンピューティングモデルは、コンピュータネットワーク、サーバ、ソフトウェアアプリケーション、及びサービスなど、コンピューティングリソースの共有プールへのオンデマンドアクセスを有効にし、最小の管理エフォートまたはサービスプロバイダ対話により、リソースの迅速なプロビジョニング及びリリースを可能にする。
【0159】
異なる要件に最良に適合する様々な異なる方法において、クラウドコンピューティング環境(時に、クラウド環境、またはクラウドと称される)を実装することができる。例えば、パブリッククラウド環境内で、下層コンピューティングインフラストラクチャは、そのクラウドサービスを他の組織または一般大衆に利用可能にする組織によって保有される。対照的に、プライベートクラウド環境は概して、単一の組織による使用、または単一の組織内での使用のためにのみ意図される。コミュニティクラウドは、コミュニティ内のいくつかの組織によって共有されることが意図されるが、ハイブリッドクラウドは、データ及びアプリケーションポータビリティによって共に結び付けられる2つ以上のタイプのクラウド(例えば、プライベート、コミュニティ、またはパブリック)を含む。
【0160】
概して、クラウドコンピューティングモデルは、消費者による使用のために(クラウドのパブリック/プライベートの性質に従って、組織内または組織の外部のいずれかで)、組織の自身の情報技術部門によって以前に提供されていた可能性がある、それらの責任の一部を、代わりに、クラウド環境内のサービスレイヤとして移されることを有効にする。特定の実施態様に応じて、各々のクラウドサービスレイヤによってまたは各々のクラウドサービスレイヤ内で提供されるコンポーネントまたは特徴の簡潔な定義は、可変であることができるが、共通例は、クラウドインフラストラクチャ上で稼働しているソフトウェアアプリケーションを消費者が使用する、ソフトウェアアズアサービス(SaaS)を含むが、SaaSプロバイダは、下層クラウドインフラストラクチャ及びアプリケーションを管理または制御する。プラットフォームアズアサービス(PaaS)では、それら自身のアプリケーションを開発し、展開し、他に制御するために、PaaSプロバイダによってサポートされるソフトウェアプログラミング言語及び開発ツールを消費者が使用することができるが、PaaSプロバイダは、クラウド環境の他の態様(例えば、ランタイム実行環境の下のあらゆるもの)を管理または制御する。インフラストラクチャアズアサービス(IaaS)では、任意のソフトウェアアプリケーション、及び/またはプロビジョン処理、記憶、ネットワーク、及び他の根本的なコンピューティングリソースを消費者が展開し、稼働させることができるが、IaaSプロバイダは、下層物理クラウドインフラストラクチャ(例えば、オペレーティングシステムレイヤの下のあらゆるもの)を管理または制御する。データベースアズアサービス(DBaaS)では、クラウドインフラストラクチャ上で稼働しているデータベースサーバまたはデータベース管理システムを消費者が使用するが、DbaaSプロバイダは、1つ以上のデータベースサーバを含む、下層クラウドインフラストラクチャ、アプリケーション、及びサーバを管理または制御する。
【0161】
開示の他の態様
文脈上特に明記されていない限り、用語「or」は、包含的な意味で(排他的な意味ではなく)先述の明細書及び添付の特許請求の範囲において使用され、その結果、例えば、要素のリストを接続するために使用されるとき、用語「または」は、リスト内の要素の1つ、一部、または全てを意味する。
【0162】
文脈上特に明記されていない限り、用語「comprising(含む)」、「including(含む)」、「having(有する)」、「based on(に基づく)」、及び「encompassing(包含する)」などは、前述の明細書及び添付の特許請求の範囲においてオープンエンドで使用され、追加の要素、特徴、行動、またはオペレーションを排除しない。
【0163】
文脈上特に明記されていない限り、フレーズ「at least one of X,Y,and Z(X、Y、及びZのうちの少なくとも1つ)」などの接続的言語は、項目、用語などがX、Y、もしくはZ、またはそれらの組み合わせのいずれかであり得ることを伝えるものと理解されるべきである。したがって、そのような接続的言語は、各々に対してXのうちの少なくとも1つ、Yのうちの少なくとも1つ、及びZのうちの少なくとも1つが存在することのデフォルト暗示によって必要とすることが意図されない。
【0164】
文脈上特に明記されていない限り、前述の詳細な説明及び添付の特許請求の範囲において使用されるように、単数形「a」、「an」、及び「the」は、複数形をも含むことが意図される。
【0165】
文脈上特に明記されていない限り、前述の詳細な説明及び添付の特許請求の範囲では、第1の、第2のなどという用語は、いくつかのインスタンスでは、様々な要素を記述するために本明細書で使用され、それらの要素は、それらの用語によって限定されるべきではない。それらの用語は、1つの要素を別の要素から区別するためにのみ使用される。例えば、第1のコンピューティングデバイスは、第2のコンピューティングデバイスと呼ばれ得、同様に、第2のコンピューティングデバイスは、第1のコンピューティングデバイスと呼ばれ得る。第1のコンピューティングデバイス及び第2のコンピューティングデバイスは両方、コンピューティングデバイスであるが、それらは、同一のコンピューティングデバイスではない。
【0166】
前述の明細書では、実施態様ごとに変化し得る多数の特定の詳細を参照して技術が説明されてきた。したがって、明細書及び図面は、限定的な意味ではなく、例示的な意味で考えられるべきである。
図1
図2
図3
図4
図5
【国際調査報告】