(57)【要約】      （修正有）【課題】コンピュータが読むことができるコードを生成する。【解決手段】ユーザによって指定される複数のユーザ関数を受け取る（２１０）。各ユーザ関数について、所与のユーザ関数に関連した少なくとも１つのライブラリをドメインインターフェイスファイル（ＤＩＦ）内で見つけ、少なくとも１つのライブラリは所与のユーザ関数のコンストラクタを特定する（２２０）。コンストラクタに基づいて、実行されるときにコンストラクタをもたらす関数を含むＤＩＦ内の１つ以上のコンストラクタライブラリを識別する（２３０）。ユーザ関数に関連したライブラリと、実行されるときにコンストラクタをもたらす関数を含む１つ以上のコンストラクタライブラリとから、コードを取り出す（２４０）。取り出されたコードを単一プログラムにまとめ（２５０）、単一プログラムがエンドユーザによってアクセスされ得るように単一プログラムを供給する（２６０）。【選択図】図２
2020087452.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが読むことができるコードを生成する方法であって、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する方法。
【請求項２】
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
請求項１に記載の方法。
【請求項３】
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
請求項１に記載の方法。
【請求項４】
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
請求項３に記載の方法。
【請求項５】
前記データ構造は、記入式のフォームを含む、
請求項４に記載の方法。
【請求項６】
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別する動作と、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入する動作と
を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
請求項１に記載の方法。
【請求項７】
前記単一プログラムはウェブベースのプログラムである、
請求項１に記載の方法。
【請求項８】
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
請求項１に記載の方法。
【請求項９】
命令を含む１つ以上の非一時的なコンピュータ可読媒体であって、
前記命令は、１つ以上のプロセッサによって実行されるときに、システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、コンピュータ可読媒体。
【請求項１０】
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
請求項９に記載のコンピュータ可読媒体。
【請求項１２】
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記データ構造は、記入式のフォームを含む、
請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
請求項９に記載のコンピュータ可読媒体。
【請求項１５】
１つ以上のプロセッサと、命令を含む１つ以上の非一時的なコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記１つ以上のプロセッサによって実行されるときに、当該システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、システム。
【請求項１６】
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
請求項１５に記載のシステム。
【請求項１７】
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
請求項１５に記載のシステム。
【請求項１８】
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
請求項１７に記載のシステム。
【請求項１９】
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
請求項１５に記載のシステム。
【請求項２０】
前記動作は、
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示で議論される実施形態は、コンピュータプログラム生成に関係がある。
【背景技術】
【０００２】
コンピュータの増設とともに、コンピュータを動作させるコンピュータ可読命令を生成するための様々なアプローチも現れてきた。しかし、そのような命令はしばしば、コンピュータプログラミング言語の詳細な知識と、コンピュータが実行する様々な命令を手動で入力することとを必要とする。
【０００３】
本開示の請求される主題は、上記のような環境でしか動作しない実施形態又はあらゆる欠点を解消する実施形態に限られない。むしろ、この背景は、本開示で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ設けられている。
【発明の概要】
【０００４】
本開示の１つ以上の実施形態には、コンピュータが読むことができるコードを生成する方法が含まれ得る。方法は、ユーザによって指定される複数のユーザ関数を受け取ることを含んでよい。方法は、前記ユーザ関数の夫々について、所与のユーザ関数に関連した少なくとも１つのライブラリをドメインインターフェイスファイル（Domain  Interface  file，ＤＩＦ）内で見つけることを更に含んでよく、前記少なくとも１つのライブラリは、前記所与のユーザ関数のコンストラクタを特定する。方法は、前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ＤＩＦ内の１つ以上のコンストラクタライブラリを識別することを更に含んでよい。方法は、前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことを更に含んでよい。方法は、前記取り出されたコードを単一プログラムにまとめ、該単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することを更に含んでよい。
【０００５】
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって、実現され達成される。
【０００６】
上記の概要及び下記の詳細な説明は、単に例及び説明であって、請求されている発明を限定するものではないことが理解されるべきである。
【０００７】
例となる実施形態は、添付の図面の使用を通じて更なる特定及び詳細をもって記載及び説明される。
【図面の簡単な説明】
【０００８】
【図１】コンピュータプログラムを生成することに関連したシステムの例を表す。
【図２】コンピュータプログラムを生成する方法の例のフローチャートを表す。
【図３】ブロック２２０及び／又は２３０のような図２のフローチャートの様々な部分についての更に詳細な方法の例のフローチャートを表す。
【図４】ドメインインターフェイスファイル（ＤＩＦ）を生成する方法の例のフローチャートを表す。
【図５】コンピュータシステムの例を表す。
【発明を実施するための形態】
【０００９】
本開示は、とりわけ、プログラムの生成を要求するユーザがコンピュータプログラミングの限られた知識しか有さないときにプログラムを生成するための自動コード構成（Automated  Code  Construction）システムの使用に関する。ＡＣＣは、プログラムが何を行うべきかというユーザの意図を伝達するようユーザから１つ以上のユーザ関数を受け取ってよい。更に、ユーザは、プログラムの動作中に使用されるデータ構造のようなプログラムのための文脈情報を供給してよい。ＡＣＣは、ユーザ関数で特定されているタスクを実行する関数のライブラリを見つけるために、ドメインインターフェイスファイル（ＤＩＦ）を利用してよい。ＤＩＦは、ＡＣＣがＤＩＦからコードを取り出して単一のプログラムにまとめ得るように、ユーザ関数のような関数の複数のライブラリを含んでよい。
【００１０】
ユーザ関数に関連したＤＩＦ内のライブラリを識別した後に、ＡＣＣは、ユーザ関数によって使用されるオブジェクトを生成するＤＩＦ内の他のライブラリを探してよい。それにより、ユーザ関数によって使用されるオブジェクトは、ユーザ関数を実行することより前に、初期化及び／又は別なふうに決定され得る。それら及び他の実施形態で、ＤＩＦは、ＤＩＦ内の特定のライブラリをＡＣＣに指し示すライブラリの１つ以上におけるライブラリリンクを含んでよい。例えば、ＤＩＦにおける第１関数のためのライブラリは、第２ライブラリへのライブラリリンクを含んでよく、それにより、第２ライブラリは、ＡＣＣによって、単一プログラムに含まれるべきであるものとして識別され得る。第１ライブラリにおけるライブラリリンクは、第１ライブラリにおける関数、ユーザ関数、又は単一プログラムに含まれるべきものとしてＡＣＣによって既に識別された何らかの他の関数によって使用されるオブジェクトを生成するものとして、第２ライブラリを指し示してよい。
【００１１】
ＤＩＦを使用するＡＣＣシステムの使用は、コンピュータ自体の動作に多くの利点を提供し得る。コンピュータ自体に関して、ＡＣＣとともにＤＩＦを使用することは、関数が参照されるが適切にロードされない様々なプログラミングエラーを回避する。例えば、ＤＩＦを使用すると、関数に関連したライブラリが特定され、プログラムのためのコードに適切にロードされる。他の例として、ＡＣＣは、コードの全てを導入するために人間を当てにするのではなく、適切な順序でコードの様々な部分のロードを実行する。更なる例として、ＡＣＣとともにＤＩＦを使用することは、プログラムの速度が改善され得るように、アプリケーションのためにそれほどリソースを消費しない計算上効率的な関数の選択を容易にする。更なる例として、本開示は、はっきり言うと、従前人間の干渉が必要とされてきた自動プログラム生成におけるハングアップを防ぐようライブラリ関数の探索を可能にすることによって、コンピュータが以前に実行することができなかったタスクをコンピュータが実行することを可能にする。このように、本開示の実施形態は、コンピュータ自体の性能を改善し得る。
【００１２】
本開示の実施形態は、添付の図面を参照して説明される。
【００１３】
図１は、本開示の１つ以上の実施形態に従って、コンピュータプログラムを生成することに関連したシステム１００の例を表す。図１に表されるように、ユーザ１１０は、ユーザ関数１１２及び／又は他の情報を自動コード構成（ＡＣＣ）システム１２０に提起してよい。ＡＣＣは、エンドユーザ１６０によって利用され得るプログラム１５０を生成するために、開発者１３０によって生成されるドメインインターフェイスファイル（ＤＩＦ）１４０を利用してよい。いくつかの実施形態で、ＡＣＣ１２０は、プログラム１５０を生成する際に追加の情報を得るために、ユーザ１１０にクエリ１２２を提起してよい。
【００１４】
ユーザ１１０は、ほとんど又は全くプログラミング経験を必要とされない人又は個人を含んでよい。なお、ユーザ１１０は、そのような経験を有してもよい。ユーザ１１０は、プログラム１５０が達成すべきであることの所望の意図を、１つ以上の高レベルユーザ関数１１２又は関数１１２の何らかの表現を介してＡＣＣ１２０へ伝達してよい。例えば、ユーザ１１０は、記入式のフォーム（fillable  form）をＡＣＣ１２０に提起し、その後にフォームについて自動的に集められた承認（approval）が書き入れられることを要求してよい。そのような例において、ユーザ１１０は、豊富なプログラミング経験を持っている必要がなく、むしろ、フォームと、フォームにより何が行われるべきかの要求とを提起する。それら及び他の実施形態で、ユーザ関数１１２は、所望の効果に対応するユーザ関数１１２をユーザ１１０がテーブルから探すこと（例えば、フォーム＝save()に入力された情報を記憶し、承認＝approve()を探すこと）によって、供給されてよい。他の例として、ＡＣＣ１２０は、平文言語（plain-language）要求をユーザ１１０から受け取り、平文言語要求をユーザ関数１１２に変換するよう構成されてもよい。例えば、ＡＣＣ１２０は、１つ以上の既知のユーザ関数１１２内でユーザ要求において使用されているテキストを探すことによって、テキスト検索動作を実行してよい。
【００１５】
ＤＩＦ１４０は、如何にして関数の１つ以上のライブラリが他の関数又はアプリケーションのタスクに関係するかのインジケーションをＤＩＦ１４０が含むように配置されたコンピュータ可読命令の組を含んでよい。本明細書で使用されるように、「ライブラリ」との語は、前もってコンパイルされたルーチン内で使用される夫々の個別的な関数について手動でコードを入力する必要なしにライブラリのコードがプログラムに加えられるときに利用されるよう、様々なオブジェクト、ルーチン、サブルーチン、等が初期化され、利用可能であるように、所与のプログラムが要求することができる前もってコンパイルされたルーチンの組を指し得る。いくつかの実施形態で、ＤＩＦ１４０は、ＤＩＦ１４０におけるどのライブラリ及び／又はどの他の関数が実行されるときに所与のオブジェクトをもたらし得るかを示すリンクを含んでよい。例えば、ユーザ関数１１２が動作するためにオブジェクトpersonをコンストラクタとして使用したことをＡＣＣ１２０が認識した場合には、ＡＣＣ１２０は、ＤＩＦ１４０から、実行されるときにオブジェクトpersonをもたらす関数を含むライブラリを検索してよい。追加的に、又は代替的に、ＤＩＦ１４０は、複数のライブラリがオブジェクトpersonをもたらし得る場合に、オブジェクトpersonの特定のインスタンスが使用され得るように、特定のライブラリへのリンクを含んでもよい。本明細書で使用されるように、「コンストラクタ」との語は、コンピュータプログラミングにおいて関数内で引数の１つとして用いられるコンピュータプログラミングオブジェクトを指し得る。例えば、関数approval()は、関数を実行するためにオブジェクトTarget及びApprover_Listを用いてよく、２つのオブジェクトは、関数approval()のコンストラクタである。
【００１６】
いくつかの実施形態で、ＤＩＦ１４０は、他のライブラリへの識別されたライブラリ内のリンクを含んでよい。例えば、ＤＩＦ１４０の所与のライブラリにおける関数は、実行されるときに所与のライブラリによって用いられるコンストラクタ又は他のオブジェクトを生成するＤＩＦ１４０内の他のライブラリの識別を含んでよい。
【００１７】
いくつかの実施形態で、ＤＩＦ１４０を使用するＡＣＣ１２０は、所与の関数によって用いられ得る複数の可能性のあるライブラリ及び／又は複数の可能性のあるコンストラクタを識別してよい。それら及び他の実施形態で、ＡＣＣ１２０は、可能性のあるライブラリ及び／又は可能性のあるコンストラクタのうちのどれがプログラム１５０で使用されるべきかを決定するようユーザにクエリ１２２を提起してよい。例えば、ＡＣＣ１２０は、プログラム１５０が実装される文脈（context）に応じて、ライブラリ内の所与の関数が、３つの異なるライブラリによって生成される３つの異なる可能性があるコンストラクタを利用し得ることを決定してよい。そのような例において、ＡＣＣ１２０は、３つのコンストラクタのうちのどれがプログラム１５０のために意図されるかを決定するようユーザ１１０にクエリ１２２を提起してよい。クエリ１２２への応答に基づいて、ＡＣＣ１２０は、プログラム１５０で使用される適切なコンストラクタを識別してよい。
【００１８】
ＡＣＣ１２０がＤＩＦ１４０内のライブラリを所与の関数に関係があるものとして識別した後に、ＡＣＣ１２０はライブラリのコードをプログラム１５０に加えてよい。ＡＣＣ１２０は、次いで、プログラム１５０に加えられるべき任意の更なるコードを識別するために、他のユーザ関数１１２及び／又は１つ以上のユーザ関数１１２のコンストラクタ及び／又は識別されたコンストラクタ若しくは識別された関数のコンストラクタを解析してよい。例えば、ＡＣＣ１２０は、初期ユーザ関数により解析を開始してよく、関連するライブラリがＤＩＦ１４０において見つけられ、ライブラリのコードがプログラム１５０に加えられる。ＡＣＣ１２０は、次に、ＤＩＦ１４０内の初期ユーザ関数の任意のコンストラクタ及びそれらの関連するライブラリを識別し、そのようなライブラリからのコードをプログラム１５０に加えてよい。ＡＣＣ１２０は、次に、ＤＩＦ１４０内のコンストラクタの中の任意のコンストラクタ及びそれらの関連するライブラリを特定し、コードをプログラム１５０に加えてよい。そのようなプロセスは、ユーザ関数及びコンストラクタの全てが識別され、プログラム１５０に加えられる識別されたライブラリからの関連するコードを有するまで、ユーザ関数の夫々について繰り返されてよい。
【００１９】
いくつかの実施形態で、識別されたライブラリ及び関連するコードの様々な部分は、様々なコンストラクタが適切な順序で初期化及び／又は生成されるような順序で加えられてよい。例えば、識別された関数がコンストラクタを呼び出す場合に、そのコンストラクタを生成するためのコードは、コンストラクタを呼び出す関数の前にプログラム１５０において含まれてよい。
【００２０】
それら及び他の実施形態で、ＡＣＣ１２０がユーザ関数及び任意の関連するコンストラクタの夫々、コンストラクタの中のコンストラクタ、等を解析した後に、プログラム１５０の生成は完了したと見なされ得る。プログラム１５０が完成した後に、プログラム１５０はエンドユーザ１６０に利用可能にされてよい。例えば、ユーザ１１０は、強いプログラミング背景を持たないビジネスマンであってよく、ウェブインターフェイスを介してプログラム１５０にアクセスし得るエンドユーザ１６０のためにプログラム１５０を生成するためにＡＣＣ１２０に働きかけてよい。
【００２１】
いくつかの実施形態で、ユーザ１１０は、プログラム１５０の生成を容易にするよう文脈情報をＡＣＣ１２０へ供給してよい。そのような文脈情報は、プログラム１５０が利用するデータ構造又はユーザインターフェイス（例えば、記入式のフォーム）、プログラム１５０が動作し得る環境、プログラムを使用することになる対象エンドユーザ１６０の組、意図されたタスクについてプログラム１５０が利用するポリシーのような、エンティティ間の関係（例えば、様々なタスクに対する様々なユーザの承認者リスト）、等を含んでよい。いくつかの実施形態で、文脈情報は、プログラム１５０に加えられるべき１つ以上のライブラリに関してＡＣＣ１２０に知らせてよい。そのようなライブラリは、ユーザ関数１１２のうちの１つと無関係であるが、文脈情報とは関係があり得る。いくつかの実施形態で、ＡＣＣ１２０は、ユーザ関数１１２のうちの１つ又はコンストラクタのうちの１つと関連するものとして複数のライブラリを識別してよく、文脈情報は、ユーザ１１０へのクエリ１２２が識別された可能性のあるライブラリの全てよりも少ないライブラリを含むように、ＡＣＣ１２０がライブラリの一部を除くことを可能にし得る。
【００２２】
図１を参照して記載されるようにプログラムを生成するアプローチは、記入式のフォームのためにインターネットに基づくアプリケーションを生成すること並びにそのようなフォームの処理及び取り扱いにおいて特に有利であり得る。例えば、そのような使用ケースシナリオは、とびとびの数のタスクが実行される場合に、プログラム１５０の自動生成に力を貸し得る特定のフレームワークを提供し得る。しかし、それらのタスクは様々なコンストラクタのうちのいずれかで動作することができるので、ＡＣＣ１２０及びＤＩＦ１４０の使用と、プログラム１５０の様々な側面（複数のコンストラクタのうちのどれが使用されるべきか）を明らかにするようユーザ１１０にクエリする能力とは、プログラム１５０の生成を容易にし得る。
【００２３】
本開示の適用範囲から外れることなしに、システム１００に対して変更、追加、又は削除が行われてよい。例えば、システム１００は、プログラム１５０の生成を容易にし得るコンポーネント及び／又はユーザをいくつでも含んでよい。
【００２４】
［プログラム生成の例］
以下の例は、ＤＩＦを利用するＡＣＣを使用したプログラム生成の例を説明するために、プログラミングコードの行の例を用いる。例は、承認又は拒否が要求に対して得られるまで、要求に関して情報を収集し、要求を承認することができる承認者のリストを決定し、その後に承認者のリストを電子メールで送るために、記入式のフォームを利用するようプログラムの生成に従う。
【００２５】
ユーザは最初に、そのようなプログラムを生成するようＡＣＣに要求を送信する。このとき、要求は、記入式のフォームと、ユーザ関数save()（例えば、フォームに入力された情報をセーブする。）及びapprove()（例えば、要求に対する承認を求める。）とを含む。
【００２６】
ＡＣＣは、次の入力によりＤＩＦへのアクセスを有する：
Form:
save(f)
read(f)
Approval:
init:Target,Approver_List
Approver_List:[Entity]
Links:
Approver_List<-Policy
Person:Entity
KEY:Email
Community:
[Entity  w:Relative_Title]
find_related(relative_title,Entity):Entity
Policy:
init:[(Condition:Function,Result:*)]
evaluate:Result
【００２７】
ユーザが記入式のフォームを供給することに基づいて、Formライブラリがsave(f)関数を有してロードされる。よって、プログラムは、Formライブラリ及びプログラム内で下位にある関数を含むことになる：
f=save()        //入力されたデータをセーブする
【００２８】
関数save()は、書き入れられるよう、供給されたフォームに対して作用するので、追加の関数及び／又はライブラリは、このユーザ関数についてはプログラムに加えられない。
【００２９】
ＡＣＣは、次に、approve()関数を解析してよい。例えば、ＡＣＣは、Approveライブラリ及び下位にある関連する関数がプログラムに加えられるべきであることを識別してよい。しかし、ＡＣＣは、関数Approvalが、ＤＩＦの行init:Target,Approver_Listによって指定されるように、コンストラクタTarget及びApprover_Listを使用することを認識し得る。ＡＣＣは、文脈により、Targetがセーブされたフォームからのデータであることを認識し得る（例えば、ユーザが、承認されるべき記入式フォームを提起した。）。ＡＣＣは、Approver_ListがEntityオブジェクトの組であることを認識し得る。ＡＣＣは、CommunityライブラリがEntityをもたらし得ることと、PersonがEntityであることを認識し得る。しかし、ＤＩＦのLink:セクションなしでは、ＡＣＣは、find_related関数のRelative_Titleオブジェクトのためにどのライブラリを用いるべきかを決定することができない可能性がある。ＤＩＦはLink:セクションを含むので、ＡＣＣは、Approver_Listオブジェクトを取得するためにPolicyライブラリが呼び出されるべきであることを指示される。
【００３０】
ＤＩＦのLink:セクションがPolicyライブラリを参照することに応答して、ＡＣＣは、コンストラクタが関連するResultを伴ったCondition:Functionsの組であることを認識する。ＡＣＣは、オブジェクトConditionがＤＩＦにおいてどこにも現れないことに基づいて、Condition:Functionsをユーザにクエリしてよい。例えば、オブジェクト（initによって表される。）のためのコンストラクタがあるとき、そのオブジェクトは、他の関数によって使用されること又はライブラリ内の他の演算を実行することより前に初期化されてよく、そして、Conditionがどこにも現れないときに、ユーザは上記のとおりにクエリされ得る。追加的に、又は代替的に、ＡＣＣは、Condition:Functionへの呼び出しが、関数の形式をとる条件（例えば＞＄５００）を入力するためのユーザへのクエリを起動する。ＡＣＣは更に、Conditionを満足することが何らかの結果をもたらし得ることを認識し得る。ＤＩＦにおけるアスタリスク（*）の使用は、どのような結果がユーザによって意図されているかをユーザにクエリするようＡＣＣをトリガしてよい。文脈情報に照らして、ＡＣＣは、それらがＡＣＣに知られているオブジェクトであるとして、結果がRelative_Title，Person、又はCommunityであるべきかどうかをユーザにクエリしてよい。目下の場合に、ユーザは、Relative_Titleを選択することによって応答し得る。別な言い方をすれば、それらの選択によれば、ユーザは、＄５００を越える量の要求について、関連のあるタイトルを持った特定の個人が要求を承認しなければならないことを示し得る。
【００３１】
ＡＣＣは、次に、Community:ライブラリ内のfind_related関数が、EntityをもたらすようRelative_Titleオブジェクトに作用する関数であることを認識し得る。Communityライブラリ内のfind_related関数の識別に応答して、Communityライブラリからのコードが単一プログラムに加えられ得る。Communityライブラリからのコードの追加により、ユーザ関数の夫々についてのコンストラクタはアドレッシングされ得、プログラムは完成され得る。プログラムはコンパイルされ、エンドユーザに供給されてよい。コードの例は：
f=save()    //変数fとしてフォームに入力された情報をセーブする
ｐ＝Policy.evaluate(f.amount)  //Policyライブラリからのevaluate関数を実行し、フォームに入力された量に基づいて、関連のあるタイトルを出力する
c=Community.find_related(p)  //Communityライブラリからのfind_related関数をポリシーからの関連のあるタイトルに対して実行し、関連のあるタイトルを有しているエンティティのリストを出力する
a=Approval(f,c)    //フォームの要求に対する承認又は拒否が受け取られるまで、関連のあるタイトルを有する各エンティティにフォームを電子メールで送ることによって、フォーム及び関連のあるタイトルを有するエンティティのリストに対してapproval関数を実行する
を含む。
【００３２】
図２〜４に表されている方法の夫々について、方法は、如何なる適切なシステム、装置、又はデバイスによっても、例えば、図１のＡＣＣ１２０若しくはＤＩＦ１４０のいずれか、ユーザ１１０、開発者１３０、及び／又はエンドユーザ１６０、及び／又はシステム１００の要素の任意の組み合わせによって、実行されてよい。たとえ別個のブロックとして表されているとしても、方法のブロックのうちの１つ以上に関連するステップ及び動作は、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
【００３３】
更に、図２〜４に表されている方法の夫々について、変更、追加、又は削除が、本開示の適用範囲から外れることなしに方法に対して行われてもよい。例えば、方法の動作は、別の順序で実施されてもよい。追加的に、又は代替的に、２つ以上の動作が同時に実行されてもよい。更には、説明されている手順及び動作は例として与えられており、手順及び動作のいくつかは、開示されている実施形態の本質を損なうことなしに、任意であっても、より少ない手順及び動作にまとめられても、あるいは更なる動作に拡張されてもよい。
【００３４】
図２は、本開示の１つ以上の実施形態に従って、コンピュータプログラムを生成する方法２００の例のフローチャートを表す。いくつかの実施形態で、図１のＡＣＣ１２０が、方法２００の動作のうちの１つ以上を実行してよい。
【００３５】
ブロック２１０で、ユーザによって指定される１つ以上のユーザ関数が受け取られてよい。例えば、ＡＣＣは、エンドユーザのためのプログラムの生成においてＡＣＣによって使用されるよう、ユーザからの１つ以上のユーザ関数の入力を受け取ってよい。ユーザ関数は、テキスト入力された１つ以上の高レベル関数として、オーディオ入力や視覚／グラフィカル入力（例えば、ブロック図を介する。）、等として、受け取られてよい。いくつかの実施形態で、ユーザ関数は、ユーザの意図として（例えば、エンドユーザが達成するためにユーザがプログラムに望むことの記述（statement）によって）伝えられてよく、ＡＣＣは、１つ以上のユーザ関数を生成するよう記述のテキストをパースしてよい。それら及び他の実施形態で、ユーザは、１つ以上のユーザ関数に加えて文脈情報を供給してよい。そのような文脈情報は、プログラムが使用されるべきである文脈、又はプログラムによって使用される何らかの情報若しくは特徴を含んでよい。例えば、ユーザは、プログラムの動作中にエンドユーザからデータを取得するために使用されるフォーム、異なるエンティティ間の関係、等を供給してよい。
【００３６】
ブロック２２０で、各ユーザ関数について、ライブラリが、所与のユーザ関数に関連するものとしてドメインインターフェイスファイル（ＤＩＦ）内で見つけられてよい。それら及び他の実施形態で、ライブラリは、所与のユーザ関数の１つ以上のコンストラクタを特定してよい。例えば、第１ユーザ関数について、第１ライブラリが、第１ユーザ関数に関連するものとしてＤＩＦにおいて見つけられてよく、第２ユーザ関数について、第２ライブラリが、第２ユーザ関数に関連するものとしてＤＩＦにおいて見つけられてよい。第１ライブラリは、第１ユーザ関数によって使用される１つ以上のコンストラクタを特定することができ、第２ライブラリは、第２ユーザ関数によって使用される１つ以上のコンストラクタを特定することができる。いくつかの実施形態で、第１ユーザ関数は、関数の名称、関数のコメント記載、等における同じ又は類似した語の使用に基づき、第１ユーザ関数に関連するものとして識別されてよい。
【００３７】
いくつかの実施形態で、全ての関数が対応するライブラリに関連付けられているとは限らない。例えば、ユーザ関数は、ユーザ関数がＤＩＦ内での識別なしでさえ動作し得るほどユーザからの十分な詳細を含む入力であることがある。他の例として、ユーザからの文脈情報は、ＤＩＦにおいて所与のユーザ関数についてのライブラリの特定をバイパスするほど十分な詳細を提供し得る。それら及び他の実施形態で、ユーザは、コンピュータが読むことができるコードをユーザがユーザ関数の１つ以上として供給し得るほどに、プログラミングコード供給の経験を有していることがある。
【００３８】
いくつかの実施形態で、１つ以上の特定されたライブラリは、ＤＩＦ内の他のライブラリへのリンクを含んでよい。それら及び他の実施形態で、リンクは、コンストラクタをもたらす１つ以上の他のライブラリを特定し得る。いくつかの実施形態で、複数のライブラリは、所与のユーザ関数によって用いられる可能性があるものとして識別されてよい。それら及び他の実施形態で、複数のライブラリのうちのどれが使用されるべきであるかに関して情報を提供するようクエリがＡＣＣによってユーザに提起されてよい。
【００３９】
ブロック２３０で、１つ以上のコンストラクタライブラリが、ＤＩＦにおいて識別されてよい。例えば、実行されるときにコンストラクタをもたらすライブラリが、ＤＩＦにおいて識別され得る。それら及び他の実施形態で、ユーザ関数について実行されるのと同様の解析がコンストラクタに対して実行されてよく、それにより、ユーザ関数の１つ又はコンストラクタによって使用されるオブジェクトをもたらす如何なるライブラリも識別され得る。
【００４０】
ブロック２４０で、ＤＩＦにおいて識別された１つ以上のライブラリからコードが取り出されてよい。例えば、ブロック２２０及び／又は２３０で識別されたライブラリのコードは、単一プログラムに含まれることに備えて、ＤＩＦからコピーされてよい。他の例として、ＤＩＦにおいて識別されたライブラリからのコードは、他の位置に格納され、且つ／あるいは、他の位置からアクセスされてよい。
【００４１】
ブロック２５０で、取り出されたコードが単一プログラムにまとめられてよい。例えば、ブロック２４０で取り出されたコードは、増大するコードの組へとコンパイル、アペンド又はプリペンドされてよい。いくつかの実施形態で、ブロック２２０、２３０、及び／又は２４０は、ユーザ関数の夫々及び／又はコンストラクタの夫々がプログラムに含まれる適切なコードを有するまで、複数回繰り返されてよい。いくつかの実施形態で、ＤＩＦ内のライブラリからのコードは、プログラムがライブラリからルーチンを呼びだし得る順序に基づいて、特定の順序でプログラムにおいて結合されてよい。例えば、コードは、所与のユーザ関数に対応するプログラムの部分が実行される前に、所与の関数によって用いられるコンストラクタが初期化及び／又は決定されるような順序で、プログラムに含まれてよい。全てのコードが含まれた後、プログラムはコンパイルされるか又は別なふうに完了されてよい。
【００４２】
ブロック２６０で、プログラムはエンドユーザに供給されてよく、それにより、エンドユーザは、ユーザのユーザ関数によって示されるように所望のタスクを実行するためにプログラムを使用し得る。
【００４３】
図３は、本開示の１つ以上の実施形態に従って、ブロック２２０及び／又は２３０のような図２のフローチャートの様々な部分の更に詳細な方法３００の例のフローチャートを表す。例えば、方法３００は、ブロック２１０の後で開始し、終了後に、ブロック２３０又は２４０の１つへ進んでよい。
【００４４】
破線矢印は、ブロック２１０及び／又は２２０のような図２からの前のブロックの後にブロック３１０が開始してよいことを示し得る。
【００４５】
ブロック３１０で、所与のユーザ関数が複数のライブラリに対応するかどうかが決定されてよい。例えば、ＡＣＣ（例えば、図１のＡＣＣ１２０）が、１よりも多いライブラリで所与のユーザ関数が現れるか否かを判定してよい。他の例として、ＡＣＣは、複数の関数がコンストラクタを生成する場合に、そのコンストラクタを所与のユーザ関数が用いるか否かを判定してよい。所与のユーザ関数が複数のライブラリに対応する場合には、方法３００はブロック３２０へ進んでよい。所与の関数が複数のライブラリに対応しない場合には、方法３００はブロック３５０へ進んでよい。
【００４６】
ブロック３２０で、文脈情報が受け取られているか否かが決定されてよい。例えば、ユーザは、所与のユーザ関数と、プログラムに関する文脈情報とを提起してよい。文脈情報が受け取られている場合には、方法３００はブロック３３０へ進んでよい。文脈情報が受け取られていない場合には、方法３００はブロック３４０へ進んでよい。
【００４７】
ブロック３３０で、文脈情報が単一のライブラリ又は複数のライブラリを特定するかどうかが決定されてよい。例えば、文脈情報は、具体的に、単一のライブラリが特定されるほど十分に、複数のライブラリのうちのどれがプログラムで使用されるべきかを示し得る。他の例として、文脈情報は、１つ以上の可能性のあるライブラリを単一のライブラリに狭めることなしにそれらの可能性のあるライブラリをプルーニングすることをＡＣＣに可能にするほど十分な詳細を提供し得る。文脈情報が複数のライブラリを特定する場合には、方法３００はブロック３４０へ進んでよい。文脈情報が単一のライブラリを特定する場合には、方法３００はブロック３５０へ進んでよい。
【００４８】
ブロック３４０で、どのライブラリが使用されるべきかを明らかにするようクエリがユーザに提起されてよい。例えば、ブロック３２０からブロック３４０に達するとき、クエリは、ブロック３１０で特定された複数のライブラリに関してユーザに送られてよい。クエリは、ライブラリの識別、ライブラリによって呼び出される関数、ライブラリによって呼び出される関数のコンストラクタ、等を含んでよい。いくつかの実施形態で、クエリは、（ライブラリの名称、ライブラリ内の関数、等によろうとよらなかろうと）所与のライブラリに夫々対応している複数の答え（answers）を持った質問（question）として提示されてよい。他の例として、ブロック３３０からブロック３４０に達するとき、クエリにおいてユーザに提示されるライブラリ及び／又は関数の組は、可能性のあるライブラリのより小さいサブセットがクエリにおいてユーザに提示されるように、文脈情報に基づいて限定され又は切り捨てられてよい。
【００４９】
ブロック３５０で、選択された１つ以上のライブラリが、単一プログラムに含まれるべきライブラリとして識別されてよい。例えば、（例えば、ブロック３３０で）文脈情報によって識別された単一のライブラリ、又は（例えば、ブロック３４０で）クエリに応答してユーザによって識別された１つ以上のライブラリが、単一プログラムに含まれるべきであるライブラリとして識別されてよい。
【００５０】
ブロック３５０の後の破線矢印は、ブロック２３０及び／又は２４０のような図２の方法２００へ方法３００が戻ってよいことを示し得る。いくつかの実施形態で、方法３００は、単一プログラムに加えられるべき様々なライブラリを識別するために、各ユーザ関数について及び／又はユーザ関数の各コンストラクタについて繰り返されてよい。
【００５１】
図４は、本開示の１つ以上の実施形態に従って、ドメインインターフェイスファイル（ＤＩＦ）を生成する方法４００の例のフローチャートを表す。例えば、図１の開発者１３０のような開発者が、コンピュータシステムを用いて、図４の動作のうちの１つ以上を実行してＤＩＦを生成してよい。
【００５２】
ブロック４１０で、ユーザによって呼び出し可能である可能性のある関数が識別されてよい。例えば、開発者は、ＤＩＦを用いて生成され得る可能性のあるプログラムの範囲を決定してよい。生成され得る可能性のあるプログラムの範囲に基づいて、開発者は、可能性のあるプログラムによってどの関数が使用され得るかを決定してよい。例えば、関数は、所与のプログラムを生成するようＡＣＣに最初にプロンプトする際にユーザによって提起される可能性があるユーザ関数、ユーザ関数のコンストラクタ、又は所与のプログラムを生成する際にＡＣＣによって使用される可能性がある他の関数を含んでよい。それら及び他の実施形態で、開発者によって識別される関数は、可能性のあるプログラムの範囲内にあるいずれかのプログラムの動作中に呼び出される可能性がある関数の網羅的な組であってよい。いくつかの実施形態で、開発者によって識別される関数のうちの少なくともいくつかは、ライブラリに体系化されてよく、且つ／あるいは、前もって構成されたライブラリに付加されるか又は含められてよい。
【００５３】
ブロック４２０で、ブロック４１０で識別された関数について、所与の識別された関数によって使用されるコンストラクタをどのライブラリが生成するかを特定する１つ以上のライブラリリンクが、挿入されてよい。例えば、開発者はライブラリにライブラリリンクを挿入してよく、それにより、プログラムを生成するＡＣＣが所与の関数に関連したライブラリにアクセスするとして、そのライブラリに位置するライブラリリンクは、関数によって使用されるコンストラクタを生成する他のライブラリをＡＣＣに指し示す。追加的に、又は代替的に、ライブラリリンクは、所与の識別された関数のコンストラクタの１つ以上によって使用されるオブジェクトを生成するライブラリをＡＣＣに指し示してもよい。ライブラリリンクは、プログラムの期待される可能性のある使用に基づいて決定されてよく、それにより、ＡＣＣは、ＤＩＦ内の更なるライブラリを指し示され得る。
【００５４】
図５は、本開示で記載される少なくとも１つの実施形態に従って、コンピュータシステムの例を表す。システム５００は、コンピュータプログラムの生成に関与するよう構成された如何なる適切なシステム、装置、又はデバイスも含んでよい。コンピュータシステム５００は、プロセッサ５１０、メモリ５２０、データストレージ５３０、及び通信ユニット５４０を含んでよく、それらは全て通信上結合されてよい。データストレージ５３０は、ＡＣＣ、ＤＩＦ、及び／又は１つ以上のコンピュータプログラムライブラリを実行するようコンピュータ可読命令のような様々なタイプのデータを含んでよい。
【００５５】
一般に、プロセッサ５１０は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む如何なる適切な特定目的若しくは汎用コンピュータ、コンピュータエンティティ、又はプロセッシングデバイスも含んでよく、如何なる適用可能なコンピュータ可読記憶媒体でも記憶された命令を実行するよう構成されてよい。例えば、プロセッサ５１０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又はプログラム命令を解釈及び／又は実行するよう且つ／あるいはデータを処理するよう構成された何らかの他のデジタル若しくはアナログ回路を含んでよい。
【００５６】
図５には単一のプロセッサとして表されているが、プロセッサ５１０は、本開示で記載される任意数の動作を個別的に又は集合的に実行するよう構成され、任意数のネットワーク又は物理的な位置にわたって分散された任意数のプロセッサを含んでよい。いくつかの実施形態で、プロセッサ５１０は、メモリ５２０、データストレージ５３０、又はメモリ５２０及びデータストレージ５３０に記憶されているプログラム命令を解釈及び／又は実行し且つ／あるいはデータを処理してよい。いくつかの実施形態で、プロセッサ５１０は、データストレージ５３０からプログラム命令をフェッチし、プログラム命令をメモリ５２０にロードしてよい。
【００５７】
プログラム命令がメモリ５２０にロードされた後、プロセッサ５１０は、図２の方法２００、図３の方法３００及び／又は図４の方法４００を実行するための命令のようなプログラム命令を実行してよい。例えば、プロセッサ５１０は、ユーザにより指定された関数を取得し、複数のライブラリを用いる単一プログラムを構成するためにＤＩＦを用いるＡＣＣを作動させることに関する命令を取得してよい。
【００５８】
メモリ５２０及びデータストレージ５３０は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶しているコンピュータ可読記憶媒体又は１つ以上のコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ５１０のような汎用又は特定目的コンピュータによってアクセスされ得る如何なる利用可能な媒体であってもよい。いくつかの実施形態で、コンピュータシステム５００は、メモリ５２０及びデータストレージ５３０のいずれか一方を含んでも含まなくてもよい。
【００５９】
例として、制限なしに、そのようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、電気的消去可能なプログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、コンパクトディスク型リードオンリーメモリ（ＣＤ−ＲＯＭ）若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス（例えば、ソリッドステートメモリデバイス）、又はコンピュータ実行可能命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するために使用されてよく且つ汎用若しくは特定目的コンピュータによってアクセスされ得る何らかの他の記憶媒体を含む非一時的なコンピュータ可読記憶媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれてよい。コンピュータ実行可能命令は、例えば、プロセッサ５１０に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
【００６０】
通信ユニット５４０は、ネットワーク上で情報を送信又は受信するよう構成される如何なるコンポーネント、デバイス、システム、又はそれらの組み合わせも含んでよい。いくつかの実施形態で、通信ユニット５４０は、他の場所若しくは同じ場所にある他のデバイス、又は同じシステム内の他のコンポーネントとさえ通信してよい。例えば、通信ユニット５４０は、モデム、ネットワークカード（無線若しくは有線）、光通信デバイス、赤外線通信デバイス、無線通信デバイス（例えば、アンテナ）、及び／又はチップセット（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）デバイス、８０２．６デバイス（例えば、メトロポリタンエリアネットワーク（ＭＡＮ））、ＷｉＦｉデバイス、ＷｉＭＡＸデバイス、セルラー通信設備、若しくは他）、等を含んでよい。通信ユニット５４０は、データがネットワーク及び／又は本開示で記載されている何らかの他のデバイス若しくはシステムと交換されることを可能にし得る。例えば、通信ユニット５４０は、システム５００が、コンピュータデバイス及び／又は他のネットワークのような他のシステムと通信することを可能にし得る。
【００６１】
本開示の適用範囲から外れることなしに、システム５００に対して変更、追加又は削除が行われてよい。例えば、データストレージ５３０は、複数の場所に位置してネットワークを通じてプロセッサ５１０によってアクセスされる多種多様な記憶媒体であってよい。
【００６２】
上述されたように、本開示で記載される実施形態は、以下で更に詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む特定目的又は汎用コンピュータ（例えば、図５のプロセッサ５１０）の使用を含んでよい。更に、上述されたように、本開示で記載される実施形態は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶しているコンピュータ可読媒体（例えば、図５のメモリ５２０又はデータストレージ５３０）を用いて実装されてもよい。
【００６３】
本開示で使用されるように、「モジュール」又は「コンポーネント」との語は、コンピュータシステムの汎用ハードウェア（例えば、コンピュータ可読媒体、プロセッシングデバイス、又は何らかの他のハードウェア）によって記憶及び／又は実行され得るモジュール若しくはコンポーネントの動作及び／又はソフトウェアオブジェクト若しくはソフトウェアルーチンを実行するよう構成された具体的なハードウェア実施を指し得る。いくつかの実施形態で、本開示で記載される異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで（例えば、別個のスレッドとして）実行するオブジェクト又はプロセスとして実行されてよい。本開示で記載されるシステム及び方法のいくつかは、概して、（汎用ハードウェアによって記憶及び／又は実行される）ソフトウェアで実装されるよう記載されているが、具体的なハードウェア実施又はソフトウェア及び具体的なハードウェア実施の組み合わせも可能であり考えられている。本明細書で、「コンピュータエンティティ」は、本開示で前に定義されている如何なるコンピュータシステムであってもよく、あるいは、コンピュータシステムで実行される如何なるモジュール又はモジュールの組み合わせであってもよい。
【００６４】
一般的な方法によれば、図面に表されている様々な特徴は、実寸通りでなくてもよい。本開示で提示される実例は、何らかの特定の装置（デバイス、システム、等）又は方法の実際の図であるよう意図されず、単に、本開示の様々な実施形態について記載するために用いられる理想的な表現である。従って、様々な特徴の寸法は、明りょうさのために任意に拡大又は縮小されることがある。その上、図面の一部は、明りょうさのために簡略化されることがある。よって、図面は、特定の方法の全ての動作又は所与の装置（又はデバイス）の全てのコンポーネントを表さないことがある。
【００６５】
本開示で及び特に添付の特許請求の範囲（例えば、添付の特許請求の範囲の本文）で使用される用語は、概して、非制限的な（open）用語として意図されている（例えば、とりわけ、「〜を含んでいる」（including）との語は、「〜を含んでいるが限られない」（including,  but  not  limited,）と解釈されるべきであり、「〜を持っている」（having）との語は、「少なくとも〜を持っている」（having  at  least）と解釈されるべきであり、「〜を含む」（includes）との語は、「〜を含むが限られない」（includes,  but  is  not  limited  to,）と解釈されるべきである。）。
【００６６】
加えて、導入されたクレーム記載（introduced  claim  recitation）において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも１つ」（at  least  one）及び「１つ以上」（one  or  more）といった導入句を使用して、クレーム記載を導入することがある。
【００６７】
加えて、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう（例えば、他に修飾語のない、単なる「２つの記載事項」という記載がある場合、この記載は、少なくとも２つの記載事項、又は２つ以上の記載事項を意味する。）。更に、「Ａ、Ｂ及びＣ等のうち少なくとも１つ」又は「Ａ、Ｂ及びＣ等のうちの１つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢの両方、ＡとＣの両方、ＢとＣの両方、及び／又はＡとＢとＣの全て、等を含むよう意図される。
【００６８】
更に、２つ以上の選択可能な用語を表す如何なる離接語及び／又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ又はＢ」、あるいは、「Ａ及びＢ」の可能性を含むことが理解されるべきである。
【００６９】
しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「１つ以上」又は「少なくとも１つ」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を１しか含まない例に限定されるということが示唆されると解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つ」又は「１つ以上」を意味すると解釈されるべきである。）。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
【００７０】
加えて、「第１」（first）、「第２」（second）、「第３」（third）等の語の使用は、要素の特定の順序又は数を示すために本願で必ずしも使用されているわけではない。一般に、「第１」、「第２」、「第３」等の語は、異なる要素どうしを総称的な識別子として区別するために使用される。「第１」、「第２」、「第３」等の語が特定の順序を示すとの明示がない限りは、それらの語が特定の順序を示すと理解されるべきではない。更には、「第１」、「第２」、「第３」等の語が要素の特定の数を示すとの明示がない限りは、それらの語が要素の特定の数を示すと理解されるべきではない。例えば、第１のウィジェットは、第１の側面を有するものとして記載されることがあり、第２のウィジェットは、第２の側面を有するものとして記載されることがある。第２のウィジェットに対する「第２の側面」との語の使用は、第２のウィジェットのその側面を第１のウィジェットの「第１の側面」と区別するためであって、第２のウィジェットが２つの側面を有していることを示すためではない。
【００７１】
本開示で挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
【００７２】
上記の実施形態に加えて、以下の付記を開示する。
（付記１）
コンピュータが読むことができるコードを生成する方法であって、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する方法。
（付記２）
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
付記１に記載の方法。
（付記３）
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
付記１に記載の方法。
（付記４）
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記３に記載の方法。
（付記５）
前記データ構造は、記入式のフォームを含む、
付記４に記載の方法。
（付記６）
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別する動作と、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入する動作と
を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記１に記載の方法。
（付記７）
前記単一プログラムはウェブベースのプログラムである、
付記１に記載の方法。
（付記８）
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
付記１に記載の方法。
（付記９）
命令を含む１つ以上の非一時的なコンピュータ可読媒体であって、
前記命令は、１つ以上のプロセッサによって実行されるときに、システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、コンピュータ可読媒体。
（付記１０）
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
付記９に記載のコンピュータ可読媒体。
（付記１１）
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
付記９に記載のコンピュータ可読媒体。
（付記１２）
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記１１に記載のコンピュータ可読媒体。
（付記１３）
前記データ構造は、記入式のフォームを含む、
付記１２に記載のコンピュータ可読媒体。
（付記１４）
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記９に記載のコンピュータ可読媒体。
（付記１５）
１つ以上のプロセッサと、命令を含む１つ以上の非一時的なコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記１つ以上のプロセッサによって実行されるときに、当該システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも１つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の１つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記１つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、システム。
（付記１６）
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして前記所与のライブラリを識別することと
を更に有する、
付記１５に記載のシステム。
（付記１７）
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの１つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの１つを実行することと
を更に有する、
付記１５に記載のシステム。
（付記１８）
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記１７に記載のシステム。
（付記１９）
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、１つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも１つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する１つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記１５に記載のシステム。
（付記２０）
前記動作は、
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
付記１５に記載のシステム。
【符号の説明】
【００７３】
１００，５００  システム
１１０          ユーザ
１１２          ユーザ関数
１２０          自動コード構成システム（ＡＣＣ）
１２２          クエリ
１３０          開発者
１４０          ドメインインターフェイスファイル（ＤＩＦ）
１５０          プログラム
１６０          エンドユーザ
５１０          プロセッサ
５２０          メモリ
５３０          データストレージ
５４０          通信ユニット
【図１】
2020087452.tif 000003
【図２】
2020087452.tif 000004
【図３】
2020087452.tif 000005
【図４】
2020087452.tif 000006
【図５】
2020087452.tif 000007