JP7302440B2 - コンピュータが読むことができるコードを生成する方法、コンピュータ可読媒体、及びシステム - Google Patents

コンピュータが読むことができるコードを生成する方法、コンピュータ可読媒体、及びシステム Download PDF

Info

Publication number
JP7302440B2
JP7302440B2 JP2019202418A JP2019202418A JP7302440B2 JP 7302440 B2 JP7302440 B2 JP 7302440B2 JP 2019202418 A JP2019202418 A JP 2019202418A JP 2019202418 A JP2019202418 A JP 2019202418A JP 7302440 B2 JP7302440 B2 JP 7302440B2
Authority
JP
Japan
Prior art keywords
user
given
library
identifying
libraries
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019202418A
Other languages
English (en)
Other versions
JP2020087452A (ja
Inventor
チャンダー・アジャイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2020087452A publication Critical patent/JP2020087452A/ja
Application granted granted Critical
Publication of JP7302440B2 publication Critical patent/JP7302440B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示で議論される実施形態は、コンピュータプログラム生成に関係がある。
コンピュータの増設とともに、コンピュータを動作させるコンピュータ可読命令を生成するための様々なアプローチも現れてきた。しかし、そのような命令はしばしば、コンピュータプログラミング言語の詳細な知識と、コンピュータが実行する様々な命令を手動で入力することとを必要とする。
本開示の請求される主題は、上記のような環境でしか動作しない実施形態又はあらゆる欠点を解消する実施形態に限られない。むしろ、この背景は、本開示で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ設けられている。
本開示の1つ以上の実施形態には、コンピュータが読むことができるコードを生成する方法が含まれ得る。方法は、ユーザによって指定される複数のユーザ関数を受け取ることを含んでよい。方法は、前記ユーザ関数の夫々について、所与のユーザ関数に関連した少なくとも1つのライブラリをドメインインターフェイスファイル(Domain Interface file,DIF)内で見つけることを更に含んでよく、前記少なくとも1つのライブラリは、前記所与のユーザ関数のコンストラクタを特定する。方法は、前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記DIF内の1つ以上のコンストラクタライブラリを識別することを更に含んでよい。方法は、前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことを更に含んでよい。方法は、前記取り出されたコードを単一プログラムにまとめ、該単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することを更に含んでよい。
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって、実現され達成される。
上記の概要及び下記の詳細な説明は、単に例及び説明であって、請求されている発明を限定するものではないことが理解されるべきである。
例となる実施形態は、添付の図面の使用を通じて更なる特定及び詳細をもって記載及び説明される。
コンピュータプログラムを生成することに関連したシステムの例を表す。 コンピュータプログラムを生成する方法の例のフローチャートを表す。 ブロック220及び/又は230のような図2のフローチャートの様々な部分についての更に詳細な方法の例のフローチャートを表す。 ドメインインターフェイスファイル(DIF)を生成する方法の例のフローチャートを表す。 コンピュータシステムの例を表す。
本開示は、とりわけ、プログラムの生成を要求するユーザがコンピュータプログラミングの限られた知識しか有さないときにプログラムを生成するための自動コード構成(Automated Code Construction)システムの使用に関する。ACCは、プログラムが何を行うべきかというユーザの意図を伝達するようユーザから1つ以上のユーザ関数を受け取ってよい。更に、ユーザは、プログラムの動作中に使用されるデータ構造のようなプログラムのための文脈情報を供給してよい。ACCは、ユーザ関数で特定されているタスクを実行する関数のライブラリを見つけるために、ドメインインターフェイスファイル(DIF)を利用してよい。DIFは、ACCがDIFからコードを取り出して単一のプログラムにまとめ得るように、ユーザ関数のような関数の複数のライブラリを含んでよい。
ユーザ関数に関連したDIF内のライブラリを識別した後に、ACCは、ユーザ関数によって使用されるオブジェクトを生成するDIF内の他のライブラリを探してよい。それにより、ユーザ関数によって使用されるオブジェクトは、ユーザ関数を実行することより前に、初期化及び/又は別なふうに決定され得る。それら及び他の実施形態で、DIFは、DIF内の特定のライブラリをACCに指し示すライブラリの1つ以上におけるライブラリリンクを含んでよい。例えば、DIFにおける第1関数のためのライブラリは、第2ライブラリへのライブラリリンクを含んでよく、それにより、第2ライブラリは、ACCによって、単一プログラムに含まれるべきであるものとして識別され得る。第1ライブラリにおけるライブラリリンクは、第1ライブラリにおける関数、ユーザ関数、又は単一プログラムに含まれるべきものとしてACCによって既に識別された何らかの他の関数によって使用されるオブジェクトを生成するものとして、第2ライブラリを指し示してよい。
DIFを使用するACCシステムの使用は、コンピュータ自体の動作に多くの利点を提供し得る。コンピュータ自体に関して、ACCとともにDIFを使用することは、関数が参照されるが適切にロードされない様々なプログラミングエラーを回避する。例えば、DIFを使用すると、関数に関連したライブラリが特定され、プログラムのためのコードに適切にロードされる。他の例として、ACCは、コードの全てを導入するために人間を当てにするのではなく、適切な順序でコードの様々な部分のロードを実行する。更なる例として、ACCとともにDIFを使用することは、プログラムの速度が改善され得るように、アプリケーションのためにそれほどリソースを消費しない計算上効率的な関数の選択を容易にする。更なる例として、本開示は、はっきり言うと、従前人間の干渉が必要とされてきた自動プログラム生成におけるハングアップを防ぐようライブラリ関数の探索を可能にすることによって、コンピュータが以前に実行することができなかったタスクをコンピュータが実行することを可能にする。このように、本開示の実施形態は、コンピュータ自体の性能を改善し得る。
本開示の実施形態は、添付の図面を参照して説明される。
図1は、本開示の1つ以上の実施形態に従って、コンピュータプログラムを生成することに関連したシステム100の例を表す。図1に表されるように、ユーザ110は、ユーザ関数112及び/又は他の情報を自動コード構成(ACC)システム120に提起してよい。ACCは、エンドユーザ160によって利用され得るプログラム150を生成するために、開発者130によって生成されるドメインインターフェイスファイル(DIF)140を利用してよい。いくつかの実施形態で、ACC120は、プログラム150を生成する際に追加の情報を得るために、ユーザ110にクエリ122を提起してよい。
ユーザ110は、ほとんど又は全くプログラミング経験を必要とされない人又は個人を含んでよい。なお、ユーザ110は、そのような経験を有してもよい。ユーザ110は、プログラム150が達成すべきであることの所望の意図を、1つ以上の高レベルユーザ関数112又は関数112の何らかの表現を介してACC120へ伝達してよい。例えば、ユーザ110は、記入式のフォーム(fillable form)をACC120に提起し、その後にフォームについて自動的に集められた承認(approval)が書き入れられることを要求してよい。そのような例において、ユーザ110は、豊富なプログラミング経験を持っている必要がなく、むしろ、フォームと、フォームにより何が行われるべきかの要求とを提起する。それら及び他の実施形態で、ユーザ関数112は、所望の効果に対応するユーザ関数112をユーザ110がテーブルから探すこと(例えば、フォーム=save()に入力された情報を記憶し、承認=approve()を探すこと)によって、供給されてよい。他の例として、ACC120は、平文言語(plain-language)要求をユーザ110から受け取り、平文言語要求をユーザ関数112に変換するよう構成されてもよい。例えば、ACC120は、1つ以上の既知のユーザ関数112内でユーザ要求において使用されているテキストを探すことによって、テキスト検索動作を実行してよい。
DIF140は、如何にして関数の1つ以上のライブラリが他の関数又はアプリケーションのタスクに関係するかのインジケーションをDIF140が含むように配置されたコンピュータ可読命令の組を含んでよい。本明細書で使用されるように、「ライブラリ」との語は、前もってコンパイルされたルーチン内で使用される夫々の個別的な関数について手動でコードを入力する必要なしにライブラリのコードがプログラムに加えられるときに利用されるよう、様々なオブジェクト、ルーチン、サブルーチン、等が初期化され、利用可能であるように、所与のプログラムが要求することができる前もってコンパイルされたルーチンの組を指し得る。いくつかの実施形態で、DIF140は、DIF140におけるどのライブラリ及び/又はどの他の関数が実行されるときに所与のオブジェクトをもたらし得るかを示すリンクを含んでよい。例えば、ユーザ関数112が動作するためにオブジェクトpersonをコンストラクタとして使用したことをACC120が認識した場合には、ACC120は、DIF140から、実行されるときにオブジェクトpersonをもたらす関数を含むライブラリを検索してよい。追加的に、又は代替的に、DIF140は、複数のライブラリがオブジェクトpersonをもたらし得る場合に、オブジェクトpersonの特定のインスタンスが使用され得るように、特定のライブラリへのリンクを含んでもよい。本明細書で使用されるように、「コンストラクタ」との語は、コンピュータプログラミングにおいて関数内で引数の1つとして用いられるコンピュータプログラミングオブジェクトを指し得る。例えば、関数approval()は、関数を実行するためにオブジェクトTarget及びApprover_Listを用いてよく、2つのオブジェクトは、関数approval()のコンストラクタである。
いくつかの実施形態で、DIF140は、他のライブラリへの識別されたライブラリ内のリンクを含んでよい。例えば、DIF140の所与のライブラリにおける関数は、実行されるときに所与のライブラリによって用いられるコンストラクタ又は他のオブジェクトを生成するDIF140内の他のライブラリの識別を含んでよい。
いくつかの実施形態で、DIF140を使用するACC120は、所与の関数によって用いられ得る複数の可能性のあるライブラリ及び/又は複数の可能性のあるコンストラクタを識別してよい。それら及び他の実施形態で、ACC120は、可能性のあるライブラリ及び/又は可能性のあるコンストラクタのうちのどれがプログラム150で使用されるべきかを決定するようユーザにクエリ122を提起してよい。例えば、ACC120は、プログラム150が実装される文脈(context)に応じて、ライブラリ内の所与の関数が、3つの異なるライブラリによって生成される3つの異なる可能性があるコンストラクタを利用し得ることを決定してよい。そのような例において、ACC120は、3つのコンストラクタのうちのどれがプログラム150のために意図されるかを決定するようユーザ110にクエリ122を提起してよい。クエリ122への応答に基づいて、ACC120は、プログラム150で使用される適切なコンストラクタを識別してよい。
ACC120がDIF140内のライブラリを所与の関数に関係があるものとして識別した後に、ACC120はライブラリのコードをプログラム150に加えてよい。ACC120は、次いで、プログラム150に加えられるべき任意の更なるコードを識別するために、他のユーザ関数112及び/又は1つ以上のユーザ関数112のコンストラクタ及び/又は識別されたコンストラクタ若しくは識別された関数のコンストラクタを解析してよい。例えば、ACC120は、初期ユーザ関数により解析を開始してよく、関連するライブラリがDIF140において見つけられ、ライブラリのコードがプログラム150に加えられる。ACC120は、次に、DIF140内の初期ユーザ関数の任意のコンストラクタ及びそれらの関連するライブラリを識別し、そのようなライブラリからのコードをプログラム150に加えてよい。ACC120は、次に、DIF140内のコンストラクタの中の任意のコンストラクタ及びそれらの関連するライブラリを特定し、コードをプログラム150に加えてよい。そのようなプロセスは、ユーザ関数及びコンストラクタの全てが識別され、プログラム150に加えられる識別されたライブラリからの関連するコードを有するまで、ユーザ関数の夫々について繰り返されてよい。
いくつかの実施形態で、識別されたライブラリ及び関連するコードの様々な部分は、様々なコンストラクタが適切な順序で初期化及び/又は生成されるような順序で加えられてよい。例えば、識別された関数がコンストラクタを呼び出す場合に、そのコンストラクタを生成するためのコードは、コンストラクタを呼び出す関数の前にプログラム150において含まれてよい。
それら及び他の実施形態で、ACC120がユーザ関数及び任意の関連するコンストラクタの夫々、コンストラクタの中のコンストラクタ、等を解析した後に、プログラム150の生成は完了したと見なされ得る。プログラム150が完成した後に、プログラム150はエンドユーザ160に利用可能にされてよい。例えば、ユーザ110は、強いプログラミング背景を持たないビジネスマンであってよく、ウェブインターフェイスを介してプログラム150にアクセスし得るエンドユーザ160のためにプログラム150を生成するためにACC120に働きかけてよい。
いくつかの実施形態で、ユーザ110は、プログラム150の生成を容易にするよう文脈情報をACC120へ供給してよい。そのような文脈情報は、プログラム150が利用するデータ構造又はユーザインターフェイス(例えば、記入式のフォーム)、プログラム150が動作し得る環境、プログラムを使用することになる対象エンドユーザ160の組、意図されたタスクについてプログラム150が利用するポリシーのような、エンティティ間の関係(例えば、様々なタスクに対する様々なユーザの承認者リスト)、等を含んでよい。いくつかの実施形態で、文脈情報は、プログラム150に加えられるべき1つ以上のライブラリに関してACC120に知らせてよい。そのようなライブラリは、ユーザ関数112のうちの1つと無関係であるが、文脈情報とは関係があり得る。いくつかの実施形態で、ACC120は、ユーザ関数112のうちの1つ又はコンストラクタのうちの1つと関連するものとして複数のライブラリを識別してよく、文脈情報は、ユーザ110へのクエリ122が識別された可能性のあるライブラリの全てよりも少ないライブラリを含むように、ACC120がライブラリの一部を除くことを可能にし得る。
図1を参照して記載されるようにプログラムを生成するアプローチは、記入式のフォームのためにインターネットに基づくアプリケーションを生成すること並びにそのようなフォームの処理及び取り扱いにおいて特に有利であり得る。例えば、そのような使用ケースシナリオは、とびとびの数のタスクが実行される場合に、プログラム150の自動生成に力を貸し得る特定のフレームワークを提供し得る。しかし、それらのタスクは様々なコンストラクタのうちのいずれかで動作することができるので、ACC120及びDIF140の使用と、プログラム150の様々な側面(複数のコンストラクタのうちのどれが使用されるべきか)を明らかにするようユーザ110にクエリする能力とは、プログラム150の生成を容易にし得る。
本開示の適用範囲から外れることなしに、システム100に対して変更、追加、又は削除が行われてよい。例えば、システム100は、プログラム150の生成を容易にし得るコンポーネント及び/又はユーザをいくつでも含んでよい。
[プログラム生成の例]
以下の例は、DIFを利用するACCを使用したプログラム生成の例を説明するために、プログラミングコードの行の例を用いる。例は、承認又は拒否が要求に対して得られるまで、要求に関して情報を収集し、要求を承認することができる承認者のリストを決定し、その後に承認者のリストを電子メールで送るために、記入式のフォームを利用するようプログラムの生成に従う。
ユーザは最初に、そのようなプログラムを生成するようACCに要求を送信する。このとき、要求は、記入式のフォームと、ユーザ関数save()(例えば、フォームに入力された情報をセーブする。)及びapprove()(例えば、要求に対する承認を求める。)とを含む。
ACCは、次の入力によりDIFへのアクセスを有する:

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()は、書き入れられるよう、供給されたフォームに対して作用するので、追加の関数及び/又はライブラリは、このユーザ関数についてはプログラムに加えられない。
ACCは、次に、approve()関数を解析してよい。例えば、ACCは、Approveライブラリ及び下位にある関連する関数がプログラムに加えられるべきであることを識別してよい。しかし、ACCは、関数Approvalが、DIFの行init:Target,Approver_Listによって指定されるように、コンストラクタTarget及びApprover_Listを使用することを認識し得る。ACCは、文脈により、Targetがセーブされたフォームからのデータであることを認識し得る(例えば、ユーザが、承認されるべき記入式フォームを提起した。)。ACCは、Approver_ListがEntityオブジェクトの組であることを認識し得る。ACCは、CommunityライブラリがEntityをもたらし得ることと、PersonがEntityであることを認識し得る。しかし、DIFのLink:セクションなしでは、ACCは、find_related関数のRelative_Titleオブジェクトのためにどのライブラリを用いるべきかを決定することができない可能性がある。DIFはLink:セクションを含むので、ACCは、Approver_Listオブジェクトを取得するためにPolicyライブラリが呼び出されるべきであることを指示される。
DIFのLink:セクションがPolicyライブラリを参照することに応答して、ACCは、コンストラクタが関連するResultを伴ったCondition:Functionsの組であることを認識する。ACCは、オブジェクトConditionがDIFにおいてどこにも現れないことに基づいて、Condition:Functionsをユーザにクエリしてよい。例えば、オブジェクト(initによって表される。)のためのコンストラクタがあるとき、そのオブジェクトは、他の関数によって使用されること又はライブラリ内の他の演算を実行することより前に初期化されてよく、そして、Conditionがどこにも現れないときに、ユーザは上記のとおりにクエリされ得る。追加的に、又は代替的に、ACCは、Condition:Functionへの呼び出しが、関数の形式をとる条件(例えば>$500)を入力するためのユーザへのクエリを起動する。ACCは更に、Conditionを満足することが何らかの結果をもたらし得ることを認識し得る。DIFにおけるアスタリスク(*)の使用は、どのような結果がユーザによって意図されているかをユーザにクエリするようACCをトリガしてよい。文脈情報に照らして、ACCは、それらがACCに知られているオブジェクトであるとして、結果がRelative_Title,Person、又はCommunityであるべきかどうかをユーザにクエリしてよい。目下の場合に、ユーザは、Relative_Titleを選択することによって応答し得る。別な言い方をすれば、それらの選択によれば、ユーザは、$500を越える量の要求について、関連のあるタイトルを持った特定の個人が要求を承認しなければならないことを示し得る。
ACCは、次に、Community:ライブラリ内のfind_related関数が、EntityをもたらすようRelative_Titleオブジェクトに作用する関数であることを認識し得る。Communityライブラリ内のfind_related関数の識別に応答して、Communityライブラリからのコードが単一プログラムに加えられ得る。Communityライブラリからのコードの追加により、ユーザ関数の夫々についてのコンストラクタはアドレッシングされ得、プログラムは完成され得る。プログラムはコンパイルされ、エンドユーザに供給されてよい。コードの例は:

f=save() //変数fとしてフォームに入力された情報をセーブする
p=Policy.evaluate(f.amount) //Policyライブラリからのevaluate関数を実行し、フォームに入力された量に基づいて、関連のあるタイトルを出力する
c=Community.find_related(p) //Communityライブラリからのfind_related関数をポリシーからの関連のあるタイトルに対して実行し、関連のあるタイトルを有しているエンティティのリストを出力する
a=Approval(f,c) //フォームの要求に対する承認又は拒否が受け取られるまで、関連のあるタイトルを有する各エンティティにフォームを電子メールで送ることによって、フォーム及び関連のあるタイトルを有するエンティティのリストに対してapproval関数を実行する

を含む。
図2~4に表されている方法の夫々について、方法は、如何なる適切なシステム、装置、又はデバイスによっても、例えば、図1のACC120若しくはDIF140のいずれか、ユーザ110、開発者130、及び/又はエンドユーザ160、及び/又はシステム100の要素の任意の組み合わせによって、実行されてよい。たとえ別個のブロックとして表されているとしても、方法のブロックのうちの1つ以上に関連するステップ及び動作は、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
更に、図2~4に表されている方法の夫々について、変更、追加、又は削除が、本開示の適用範囲から外れることなしに方法に対して行われてもよい。例えば、方法の動作は、別の順序で実施されてもよい。追加的に、又は代替的に、2つ以上の動作が同時に実行されてもよい。更には、説明されている手順及び動作は例として与えられており、手順及び動作のいくつかは、開示されている実施形態の本質を損なうことなしに、任意であっても、より少ない手順及び動作にまとめられても、あるいは更なる動作に拡張されてもよい。
図2は、本開示の1つ以上の実施形態に従って、コンピュータプログラムを生成する方法200の例のフローチャートを表す。いくつかの実施形態で、図1のACC120が、方法200の動作のうちの1つ以上を実行してよい。
ブロック210で、ユーザによって指定される1つ以上のユーザ関数が受け取られてよい。例えば、ACCは、エンドユーザのためのプログラムの生成においてACCによって使用されるよう、ユーザからの1つ以上のユーザ関数の入力を受け取ってよい。ユーザ関数は、テキスト入力された1つ以上の高レベル関数として、オーディオ入力や視覚/グラフィカル入力(例えば、ブロック図を介する。)、等として、受け取られてよい。いくつかの実施形態で、ユーザ関数は、ユーザの意図として(例えば、エンドユーザが達成するためにユーザがプログラムに望むことの記述(statement)によって)伝えられてよく、ACCは、1つ以上のユーザ関数を生成するよう記述のテキストをパースしてよい。それら及び他の実施形態で、ユーザは、1つ以上のユーザ関数に加えて文脈情報を供給してよい。そのような文脈情報は、プログラムが使用されるべきである文脈、又はプログラムによって使用される何らかの情報若しくは特徴を含んでよい。例えば、ユーザは、プログラムの動作中にエンドユーザからデータを取得するために使用されるフォーム、異なるエンティティ間の関係、等を供給してよい。
ブロック220で、各ユーザ関数について、ライブラリが、所与のユーザ関数に関連するものとしてドメインインターフェイスファイル(DIF)内で見つけられてよい。それら及び他の実施形態で、ライブラリは、所与のユーザ関数の1つ以上のコンストラクタを特定してよい。例えば、第1ユーザ関数について、第1ライブラリが、第1ユーザ関数に関連するものとしてDIFにおいて見つけられてよく、第2ユーザ関数について、第2ライブラリが、第2ユーザ関数に関連するものとしてDIFにおいて見つけられてよい。第1ライブラリは、第1ユーザ関数によって使用される1つ以上のコンストラクタを特定することができ、第2ライブラリは、第2ユーザ関数によって使用される1つ以上のコンストラクタを特定することができる。いくつかの実施形態で、第1ユーザ関数は、関数の名称、関数のコメント記載、等における同じ又は類似した語の使用に基づき、第1ユーザ関数に関連するものとして識別されてよい。
いくつかの実施形態で、全ての関数が対応するライブラリに関連付けられているとは限らない。例えば、ユーザ関数は、ユーザ関数がDIF内での識別なしでさえ動作し得るほどユーザからの十分な詳細を含む入力であることがある。他の例として、ユーザからの文脈情報は、DIFにおいて所与のユーザ関数についてのライブラリの特定をバイパスするほど十分な詳細を提供し得る。それら及び他の実施形態で、ユーザは、コンピュータが読むことができるコードをユーザがユーザ関数の1つ以上として供給し得るほどに、プログラミングコード供給の経験を有していることがある。
いくつかの実施形態で、1つ以上の特定されたライブラリは、DIF内の他のライブラリへのリンクを含んでよい。それら及び他の実施形態で、リンクは、コンストラクタをもたらす1つ以上の他のライブラリを特定し得る。いくつかの実施形態で、複数のライブラリは、所与のユーザ関数によって用いられる可能性があるものとして識別されてよい。それら及び他の実施形態で、複数のライブラリのうちのどれが使用されるべきであるかに関して情報を提供するようクエリがACCによってユーザに提起されてよい。
ブロック230で、1つ以上のコンストラクタライブラリが、DIFにおいて識別されてよい。例えば、実行されるときにコンストラクタをもたらすライブラリが、DIFにおいて識別され得る。それら及び他の実施形態で、ユーザ関数について実行されるのと同様の解析がコンストラクタに対して実行されてよく、それにより、ユーザ関数の1つ又はコンストラクタによって使用されるオブジェクトをもたらす如何なるライブラリも識別され得る。
ブロック240で、DIFにおいて識別された1つ以上のライブラリからコードが取り出されてよい。例えば、ブロック220及び/又は230で識別されたライブラリのコードは、単一プログラムに含まれることに備えて、DIFからコピーされてよい。他の例として、DIFにおいて識別されたライブラリからのコードは、他の位置に格納され、且つ/あるいは、他の位置からアクセスされてよい。
ブロック250で、取り出されたコードが単一プログラムにまとめられてよい。例えば、ブロック240で取り出されたコードは、増大するコードの組へとコンパイル、アペンド又はプリペンドされてよい。いくつかの実施形態で、ブロック220、230、及び/又は240は、ユーザ関数の夫々及び/又はコンストラクタの夫々がプログラムに含まれる適切なコードを有するまで、複数回繰り返されてよい。いくつかの実施形態で、DIF内のライブラリからのコードは、プログラムがライブラリからルーチンを呼びだし得る順序に基づいて、特定の順序でプログラムにおいて結合されてよい。例えば、コードは、所与のユーザ関数に対応するプログラムの部分が実行される前に、所与の関数によって用いられるコンストラクタが初期化及び/又は決定されるような順序で、プログラムに含まれてよい。全てのコードが含まれた後、プログラムはコンパイルされるか又は別なふうに完了されてよい。
ブロック260で、プログラムはエンドユーザに供給されてよく、それにより、エンドユーザは、ユーザのユーザ関数によって示されるように所望のタスクを実行するためにプログラムを使用し得る。
図3は、本開示の1つ以上の実施形態に従って、ブロック220及び/又は230のような図2のフローチャートの様々な部分の更に詳細な方法300の例のフローチャートを表す。例えば、方法300は、ブロック210の後で開始し、終了後に、ブロック230又は240の1つへ進んでよい。
破線矢印は、ブロック210及び/又は220のような図2からの前のブロックの後にブロック310が開始してよいことを示し得る。
ブロック310で、所与のユーザ関数が複数のライブラリに対応するかどうかが決定されてよい。例えば、ACC(例えば、図1のACC120)が、1よりも多いライブラリで所与のユーザ関数が現れるか否かを判定してよい。他の例として、ACCは、複数の関数がコンストラクタを生成する場合に、そのコンストラクタを所与のユーザ関数が用いるか否かを判定してよい。所与のユーザ関数が複数のライブラリに対応する場合には、方法300はブロック320へ進んでよい。所与の関数が複数のライブラリに対応しない場合には、方法300はブロック350へ進んでよい。
ブロック320で、文脈情報が受け取られているか否かが決定されてよい。例えば、ユーザは、所与のユーザ関数と、プログラムに関する文脈情報とを提起してよい。文脈情報が受け取られている場合には、方法300はブロック330へ進んでよい。文脈情報が受け取られていない場合には、方法300はブロック340へ進んでよい。
ブロック330で、文脈情報が単一のライブラリ又は複数のライブラリを特定するかどうかが決定されてよい。例えば、文脈情報は、具体的に、単一のライブラリが特定されるほど十分に、複数のライブラリのうちのどれがプログラムで使用されるべきかを示し得る。他の例として、文脈情報は、1つ以上の可能性のあるライブラリを単一のライブラリに狭めることなしにそれらの可能性のあるライブラリをプルーニングすることをACCに可能にするほど十分な詳細を提供し得る。文脈情報が複数のライブラリを特定する場合には、方法300はブロック340へ進んでよい。文脈情報が単一のライブラリを特定する場合には、方法300はブロック350へ進んでよい。
ブロック340で、どのライブラリが使用されるべきかを明らかにするようクエリがユーザに提起されてよい。例えば、ブロック320からブロック340に達するとき、クエリは、ブロック310で特定された複数のライブラリに関してユーザに送られてよい。クエリは、ライブラリの識別、ライブラリによって呼び出される関数、ライブラリによって呼び出される関数のコンストラクタ、等を含んでよい。いくつかの実施形態で、クエリは、(ライブラリの名称、ライブラリ内の関数、等によろうとよらなかろうと)所与のライブラリに夫々対応している複数の答え(answers)を持った質問(question)として提示されてよい。他の例として、ブロック330からブロック340に達するとき、クエリにおいてユーザに提示されるライブラリ及び/又は関数の組は、可能性のあるライブラリのより小さいサブセットがクエリにおいてユーザに提示されるように、文脈情報に基づいて限定され又は切り捨てられてよい。
ブロック350で、選択された1つ以上のライブラリが、単一プログラムに含まれるべきライブラリとして識別されてよい。例えば、(例えば、ブロック330で)文脈情報によって識別された単一のライブラリ、又は(例えば、ブロック340で)クエリに応答してユーザによって識別された1つ以上のライブラリが、単一プログラムに含まれるべきであるライブラリとして識別されてよい。
ブロック350の後の破線矢印は、ブロック230及び/又は240のような図2の方法200へ方法300が戻ってよいことを示し得る。いくつかの実施形態で、方法300は、単一プログラムに加えられるべき様々なライブラリを識別するために、各ユーザ関数について及び/又はユーザ関数の各コンストラクタについて繰り返されてよい。
図4は、本開示の1つ以上の実施形態に従って、ドメインインターフェイスファイル(DIF)を生成する方法400の例のフローチャートを表す。例えば、図1の開発者130のような開発者が、コンピュータシステムを用いて、図4の動作のうちの1つ以上を実行してDIFを生成してよい。
ブロック410で、ユーザによって呼び出し可能である可能性のある関数が識別されてよい。例えば、開発者は、DIFを用いて生成され得る可能性のあるプログラムの範囲を決定してよい。生成され得る可能性のあるプログラムの範囲に基づいて、開発者は、可能性のあるプログラムによってどの関数が使用され得るかを決定してよい。例えば、関数は、所与のプログラムを生成するようACCに最初にプロンプトする際にユーザによって提起される可能性があるユーザ関数、ユーザ関数のコンストラクタ、又は所与のプログラムを生成する際にACCによって使用される可能性がある他の関数を含んでよい。それら及び他の実施形態で、開発者によって識別される関数は、可能性のあるプログラムの範囲内にあるいずれかのプログラムの動作中に呼び出される可能性がある関数の網羅的な組であってよい。いくつかの実施形態で、開発者によって識別される関数のうちの少なくともいくつかは、ライブラリに体系化されてよく、且つ/あるいは、前もって構成されたライブラリに付加されるか又は含められてよい。
ブロック420で、ブロック410で識別された関数について、所与の識別された関数によって使用されるコンストラクタをどのライブラリが生成するかを特定する1つ以上のライブラリリンクが、挿入されてよい。例えば、開発者はライブラリにライブラリリンクを挿入してよく、それにより、プログラムを生成するACCが所与の関数に関連したライブラリにアクセスするとして、そのライブラリに位置するライブラリリンクは、関数によって使用されるコンストラクタを生成する他のライブラリをACCに指し示す。追加的に、又は代替的に、ライブラリリンクは、所与の識別された関数のコンストラクタの1つ以上によって使用されるオブジェクトを生成するライブラリをACCに指し示してもよい。ライブラリリンクは、プログラムの期待される可能性のある使用に基づいて決定されてよく、それにより、ACCは、DIF内の更なるライブラリを指し示され得る。
図5は、本開示で記載される少なくとも1つの実施形態に従って、コンピュータシステムの例を表す。システム500は、コンピュータプログラムの生成に関与するよう構成された如何なる適切なシステム、装置、又はデバイスも含んでよい。コンピュータシステム500は、プロセッサ510、メモリ520、データストレージ530、及び通信ユニット540を含んでよく、それらは全て通信上結合されてよい。データストレージ530は、ACC、DIF、及び/又は1つ以上のコンピュータプログラムライブラリを実行するようコンピュータ可読命令のような様々なタイプのデータを含んでよい。
一般に、プロセッサ510は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む如何なる適切な特定目的若しくは汎用コンピュータ、コンピュータエンティティ、又はプロセッシングデバイスも含んでよく、如何なる適用可能なコンピュータ可読記憶媒体でも記憶された命令を実行するよう構成されてよい。例えば、プロセッサ510は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行するよう且つ/あるいはデータを処理するよう構成された何らかの他のデジタル若しくはアナログ回路を含んでよい。
図5には単一のプロセッサとして表されているが、プロセッサ510は、本開示で記載される任意数の動作を個別的に又は集合的に実行するよう構成され、任意数のネットワーク又は物理的な位置にわたって分散された任意数のプロセッサを含んでよい。いくつかの実施形態で、プロセッサ510は、メモリ520、データストレージ530、又はメモリ520及びデータストレージ530に記憶されているプログラム命令を解釈及び/又は実行し且つ/あるいはデータを処理してよい。いくつかの実施形態で、プロセッサ510は、データストレージ530からプログラム命令をフェッチし、プログラム命令をメモリ520にロードしてよい。
プログラム命令がメモリ520にロードされた後、プロセッサ510は、図2の方法200、図3の方法300及び/又は図4の方法400を実行するための命令のようなプログラム命令を実行してよい。例えば、プロセッサ510は、ユーザにより指定された関数を取得し、複数のライブラリを用いる単一プログラムを構成するためにDIFを用いるACCを作動させることに関する命令を取得してよい。
メモリ520及びデータストレージ530は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶しているコンピュータ可読記憶媒体又は1つ以上のコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ510のような汎用又は特定目的コンピュータによってアクセスされ得る如何なる利用可能な媒体であってもよい。いくつかの実施形態で、コンピュータシステム500は、メモリ520及びデータストレージ530のいずれか一方を含んでも含まなくてもよい。
例として、制限なしに、そのようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、電気的消去可能なプログラム可能リードオンリーメモリ(EEPROM)、コンパクトディスク型リードオンリーメモリ(CD-ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令若しくはデータ構造の形で所望のプログラムコードを搬送若しくは記憶するために使用されてよく且つ汎用若しくは特定目的コンピュータによってアクセスされ得る何らかの他の記憶媒体を含む非一時的なコンピュータ可読記憶媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれてよい。コンピュータ実行可能命令は、例えば、プロセッサ510に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
通信ユニット540は、ネットワーク上で情報を送信又は受信するよう構成される如何なるコンポーネント、デバイス、システム、又はそれらの組み合わせも含んでよい。いくつかの実施形態で、通信ユニット540は、他の場所若しくは同じ場所にある他のデバイス、又は同じシステム内の他のコンポーネントとさえ通信してよい。例えば、通信ユニット540は、モデム、ネットワークカード(無線若しくは有線)、光通信デバイス、赤外線通信デバイス、無線通信デバイス(例えば、アンテナ)、及び/又はチップセット(例えば、Bluetooth(登録商標)デバイス、802.6デバイス(例えば、メトロポリタンエリアネットワーク(MAN))、WiFiデバイス、WiMAXデバイス、セルラー通信設備、若しくは他)、等を含んでよい。通信ユニット540は、データがネットワーク及び/又は本開示で記載されている何らかの他のデバイス若しくはシステムと交換されることを可能にし得る。例えば、通信ユニット540は、システム500が、コンピュータデバイス及び/又は他のネットワークのような他のシステムと通信することを可能にし得る。
本開示の適用範囲から外れることなしに、システム500に対して変更、追加又は削除が行われてよい。例えば、データストレージ530は、複数の場所に位置してネットワークを通じてプロセッサ510によってアクセスされる多種多様な記憶媒体であってよい。
上述されたように、本開示で記載される実施形態は、以下で更に詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む特定目的又は汎用コンピュータ(例えば、図5のプロセッサ510)の使用を含んでよい。更に、上述されたように、本開示で記載される実施形態は、コンピュータ実行可能命令又はデータ構造を搬送又は記憶しているコンピュータ可読媒体(例えば、図5のメモリ520又はデータストレージ530)を用いて実装されてもよい。
本開示で使用されるように、「モジュール」又は「コンポーネント」との語は、コンピュータシステムの汎用ハードウェア(例えば、コンピュータ可読媒体、プロセッシングデバイス、又は何らかの他のハードウェア)によって記憶及び/又は実行され得るモジュール若しくはコンポーネントの動作及び/又はソフトウェアオブジェクト若しくはソフトウェアルーチンを実行するよう構成された具体的なハードウェア実施を指し得る。いくつかの実施形態で、本開示で記載される異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで(例えば、別個のスレッドとして)実行するオブジェクト又はプロセスとして実行されてよい。本開示で記載されるシステム及び方法のいくつかは、概して、(汎用ハードウェアによって記憶及び/又は実行される)ソフトウェアで実装されるよう記載されているが、具体的なハードウェア実施又はソフトウェア及び具体的なハードウェア実施の組み合わせも可能であり考えられている。本明細書で、「コンピュータエンティティ」は、本開示で前に定義されている如何なるコンピュータシステムであってもよく、あるいは、コンピュータシステムで実行される如何なるモジュール又はモジュールの組み合わせであってもよい。
一般的な方法によれば、図面に表されている様々な特徴は、実寸通りでなくてもよい。本開示で提示される実例は、何らかの特定の装置(デバイス、システム、等)又は方法の実際の図であるよう意図されず、単に、本開示の様々な実施形態について記載するために用いられる理想的な表現である。従って、様々な特徴の寸法は、明りょうさのために任意に拡大又は縮小されることがある。その上、図面の一部は、明りょうさのために簡略化されることがある。よって、図面は、特定の方法の全ての動作又は所与の装置(又はデバイス)の全てのコンポーネントを表さないことがある。
本開示で及び特に添付の特許請求の範囲(例えば、添付の特許請求の範囲の本文)で使用される用語は、概して、非制限的な(open)用語として意図されている(例えば、とりわけ、「~を含んでいる」(including)との語は、「~を含んでいるが限られない」(including, but not limited,)と解釈されるべきであり、「~を持っている」(having)との語は、「少なくとも~を持っている」(having at least)と解釈されるべきであり、「~を含む」(includes)との語は、「~を含むが限られない」(includes, but is not limited to,)と解釈されるべきである。)。
加えて、導入されたクレーム記載(introduced claim recitation)において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも1つ」(at least one)及び「1つ以上」(one or more)といった導入句を使用して、クレーム記載を導入することがある。
加えて、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう(例えば、他に修飾語のない、単なる「2つの記載事項」という記載がある場合、この記載は、少なくとも2つの記載事項、又は2つ以上の記載事項を意味する。)。更に、「A、B及びC等のうち少なくとも1つ」又は「A、B及びC等のうちの1つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Aのみ、Bのみ、Cのみ、AとBの両方、AとCの両方、BとCの両方、及び/又はAとBとCの全て、等を含むよう意図される。
更に、2つ以上の選択可能な用語を表す如何なる離接語及び/又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「A又はB」という句は、「A又はB」、あるいは、「A及びB」の可能性を含むことが理解されるべきである。
しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「1つ以上」又は「少なくとも1つ」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を1しか含まない例に限定されるということが示唆されると解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つ」又は「1つ以上」を意味すると解釈されるべきである。)。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
加えて、「第1」(first)、「第2」(second)、「第3」(third)等の語の使用は、要素の特定の順序又は数を示すために本願で必ずしも使用されているわけではない。一般に、「第1」、「第2」、「第3」等の語は、異なる要素どうしを総称的な識別子として区別するために使用される。「第1」、「第2」、「第3」等の語が特定の順序を示すとの明示がない限りは、それらの語が特定の順序を示すと理解されるべきではない。更には、「第1」、「第2」、「第3」等の語が要素の特定の数を示すとの明示がない限りは、それらの語が要素の特定の数を示すと理解されるべきではない。例えば、第1のウィジェットは、第1の側面を有するものとして記載されることがあり、第2のウィジェットは、第2の側面を有するものとして記載されることがある。第2のウィジェットに対する「第2の側面」との語の使用は、第2のウィジェットのその側面を第1のウィジェットの「第1の側面」と区別するためであって、第2のウィジェットが2つの側面を有していることを示すためではない。
本開示で挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
コンピュータが読むことができるコードを生成する方法であって、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する方法。
(付記2)
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
を更に有する、
付記1に記載の方法。
(付記3)
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの1つを実行することと
を更に有する、
付記1に記載の方法。
(付記4)
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記3に記載の方法。
(付記5)
前記データ構造は、記入式のフォームを含む、
付記4に記載の方法。
(付記6)
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別する動作と、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入する動作と
を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記1に記載の方法。
(付記7)
前記単一プログラムはウェブベースのプログラムである、
付記1に記載の方法。
(付記8)
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
付記1に記載の方法。
(付記9)
命令を含む1つ以上の非一時的なコンピュータ可読媒体であって、
前記命令は、1つ以上のプロセッサによって実行されるときに、システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、コンピュータ可読媒体。
(付記10)
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
を更に有する、
付記9に記載のコンピュータ可読媒体。
(付記11)
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの1つを実行することと
を更に有する、
付記9に記載のコンピュータ可読媒体。
(付記12)
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記11に記載のコンピュータ可読媒体。
(付記13)
前記データ構造は、記入式のフォームを含む、
付記12に記載のコンピュータ可読媒体。
(付記14)
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記9に記載のコンピュータ可読媒体。
(付記15)
1つ以上のプロセッサと、命令を含む1つ以上の非一時的なコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記1つ以上のプロセッサによって実行されるときに、当該システムに、
ユーザによって指定される複数のユーザ関数を受け取ることと、
前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
前記取り出されたコードを単一プログラムにまとめることと、
前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
を有する動作を実行させる、システム。
(付記16)
前記動作は、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
を更に有する、
付記15に記載のシステム。
(付記17)
前記動作は、
前記ユーザから文脈情報を受け取ることと、
前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
前記ユーザからの前記文脈情報に基づいて、
コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
のうちの1つを実行することと
を更に有する、
付記15に記載のシステム。
(付記18)
前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
付記17に記載のシステム。
(付記19)
前記動作は、
前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別することと、
前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入することと
を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
を更に有する、
付記15に記載のシステム。
(付記20)
前記動作は、
前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
を更に有する、
付記15に記載のシステム。
100,500 システム
110 ユーザ
112 ユーザ関数
120 自動コード構成システム(ACC)
122 クエリ
130 開発者
140 ドメインインターフェイスファイル(DIF)
150 プログラム
160 エンドユーザ
510 プロセッサ
520 メモリ
530 データストレージ
540 通信ユニット

Claims (20)

  1. コンピュータが読むことができるコードを生成する方法であって、
    ユーザによって指定される複数のユーザ関数を受け取ることと、
    前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
    前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
    前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
    前記取り出されたコードを単一プログラムにまとめることと、
    前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
    を有する方法。
  2. 前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
    所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
    を更に有する、
    請求項1に記載の方法。
  3. 前記ユーザから文脈情報を受け取ることと、
    前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記ユーザからの前記文脈情報に基づいて、
    コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
    前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
    のうちの1つを実行することと
    を更に有する、
    請求項1に記載の方法。
  4. 前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
    請求項3に記載の方法。
  5. 前記データ構造は、記入式のフォームを含む、
    請求項4に記載の方法。
  6. 前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別する動作と、
    前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入する動作と
    を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
    を更に有する、
    請求項1に記載の方法。
  7. 前記単一プログラムはウェブベースのプログラムである、
    請求項1に記載の方法。
  8. 前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
    を更に有する、
    請求項1に記載の方法。
  9. 命令を含む1つ以上の非一時的なコンピュータ可読媒体であって、
    前記命令は、1つ以上のプロセッサによって実行されるときに、システムに、
    ユーザによって指定される複数のユーザ関数を受け取ることと、
    前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
    前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
    前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
    前記取り出されたコードを単一プログラムにまとめることと、
    前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
    を有する動作を実行させる、コンピュータ可読媒体。
  10. 前記動作は、
    前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
    所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
    を更に有する、
    請求項9に記載のコンピュータ可読媒体。
  11. 前記動作は、
    前記ユーザから文脈情報を受け取ることと、
    前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記ユーザからの前記文脈情報に基づいて、
    コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
    前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
    のうちの1つを実行することと
    を更に有する、
    請求項9に記載のコンピュータ可読媒体。
  12. 前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
    請求項11に記載のコンピュータ可読媒体。
  13. 前記データ構造は、記入式のフォームを含む、
    請求項12に記載のコンピュータ可読媒体。
  14. 前記動作は、
    前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別することと、
    前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入することと
    を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
    を更に有する、
    請求項9に記載のコンピュータ可読媒体。
  15. 1つ以上のプロセッサと、命令を含む1つ以上の非一時的なコンピュータ可読媒体とを有するシステムであって、
    前記命令は、前記1つ以上のプロセッサによって実行されるときに、当該システムに、
    ユーザによって指定される複数のユーザ関数を受け取ることと、
    前記ユーザ関数の夫々について、所与のユーザ関数に関連した、該所与のユーザ関数のコンストラクタを特定する少なくとも1つのライブラリをドメインインターフェイスファイル内で見つけることと、
    前記コンストラクタに基づいて、実行されるときに前記コンストラクタをもたらす関数を含む前記ドメインインターフェイスファイル内の1つ以上のコンストラクタライブラリを識別することと、
    前記ユーザ関数に関連した前記ライブラリと、実行されるときに前記コンストラクタをもたらす関数を含む前記1つ以上のコンストラクタライブラリとから、コードを取り出すことと、
    前記取り出されたコードを単一プログラムにまとめることと、
    前記単一プログラムが前記ユーザとは異なるエンドユーザによってアクセスされ得るように前記単一プログラムを供給することと
    を有する動作を実行させる、システム。
  16. 前記動作は、
    前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記複数のライブラリのうちのどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザへクエリを提起することと、
    所与のライブラリを特定する前記ユーザからの応答に基づいて、コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして前記所与のライブラリを識別することと
    を更に有する、
    請求項15に記載のシステム。
  17. 前記動作は、
    前記ユーザから文脈情報を受け取ることと、
    前記所与のユーザ関数が複数のライブラリに対応することを識別することと、
    前記ユーザからの前記文脈情報に基づいて、
    コードが取り出されて前記単一プログラムにまとめられるべきである前記複数のライブラリのうちの1つとして所与のライブラリを識別すること、又は
    前記複数のライブラリのサブセットの中のどれが前記単一プログラムに含まれるべきかを明らかにするよう前記ユーザにクエリを提起することで、前記サブセットは前記ユーザからの前記文脈情報に基づき決定される、前記提起すること
    のうちの1つを実行することと
    を更に有する、
    請求項15に記載のシステム。
  18. 前記文脈情報は、前記単一プログラムにおいて使用されるよう前記ユーザによって提供されるデータ構造を含む、
    請求項17に記載のシステム。
  19. 前記動作は、
    前記ユーザによって呼び出し可能である複数の可能性のある関数を識別する動作であり、該可能性のある関数の夫々は、1つ以上の所与のライブラリの特徴に関連し、該関連は、前記所与のライブラリによって使用される少なくとも1つの追加の関数の識別を含む、前記識別することと、
    前記ユーザによって呼び出し可能である所与の可能性のある関数について、該所与の可能性のある関数によって呼び出される所与のコンストラクタをどのライブラリが生成するかを識別する1つ以上のライブラリリンクを挿入することと
    を有する更なる動作を実行することによって、前記ドメインインターフェイスファイルをコンパイルすること
    を更に有する、
    請求項15に記載のシステム。
  20. 前記動作は、
    前記ユーザが前記ユーザ関数を入力するための、前記ユーザに提示されるユーザインターフェイスを生成すること
    を更に有する、
    請求項15に記載のシステム。
JP2019202418A 2018-11-16 2019-11-07 コンピュータが読むことができるコードを生成する方法、コンピュータ可読媒体、及びシステム Active JP7302440B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/194,224 US10719304B2 (en) 2018-11-16 2018-11-16 Computer program generation using a library
US16/194224 2018-11-16

Publications (2)

Publication Number Publication Date
JP2020087452A JP2020087452A (ja) 2020-06-04
JP7302440B2 true JP7302440B2 (ja) 2023-07-04

Family

ID=70727566

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019202418A Active JP7302440B2 (ja) 2018-11-16 2019-11-07 コンピュータが読むことができるコードを生成する方法、コンピュータ可読媒体、及びシステム

Country Status (2)

Country Link
US (1) US10719304B2 (ja)
JP (1) JP7302440B2 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797014A (en) 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
JP2000132405A (ja) 1998-10-23 2000-05-12 Nec Ic Microcomput Syst Ltd インライン展開処理装置及び方法
JP2003108369A (ja) 2001-09-28 2003-04-11 Hidetomo Harikawa Webからの要求を受け取り結果出力を行うプログラムの自動生成
JP2013513868A (ja) 2009-12-09 2013-04-22 ザ マスワークス, インク グラフィカル状態遷移図モデルにおける再利用候補の正規化バージョン
JP2017211902A (ja) 2016-05-27 2017-11-30 Sus株式会社 自動プログラミング装置と自動プログラミング方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5414854A (en) * 1993-04-05 1995-05-09 Taligent, Inc. Object-oriental system for managing shared libraries
US5519866A (en) * 1993-06-28 1996-05-21 Taligent, Inc. Method and apparatus of incrementally linking components of a modeled computer program
US5613122A (en) * 1994-11-14 1997-03-18 Object Technology Licensing Corp. Object-oriented operating system
US5652884A (en) * 1994-11-14 1997-07-29 Object Technology Licensing Corp. Method and apparatus for dynamic update of an existing object in an object editor
US5915252A (en) * 1996-09-30 1999-06-22 International Business Machines Corporation Object oriented framework mechanism for data transfer between a data source and a data target
US6199068B1 (en) * 1997-09-11 2001-03-06 Abb Power T&D Company Inc. Mapping interface for a distributed server to translate between dissimilar file formats
KR100280820B1 (ko) * 1998-03-19 2001-02-01 정선종 C++ 객체지향 프로그래밍 시스템에서의 객체에 영속성부여 방법
US6199049B1 (en) * 1998-09-30 2001-03-06 International Business Machines Corporation Verifiable electronic journal for a point of sale device and methods for using the same
US6970875B1 (en) * 1999-12-03 2005-11-29 Synchronicity Software, Inc. IP library management system
US6681383B1 (en) 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
US6604110B1 (en) 2000-08-31 2003-08-05 Ascential Software, Inc. Automated software code generation from a metadata-based repository
US6918126B1 (en) * 2000-09-08 2005-07-12 International Business Machines Corporation Method and apparatus for creating and enforcing protected system level Java code
US6751790B2 (en) * 2001-05-09 2004-06-15 Sun Microsystems, Inc. Frameworks for efficient representation of string objects in Java programming environments
US7117504B2 (en) * 2001-07-10 2006-10-03 Microsoft Corporation Application program interface that enables communication for a network software platform
US7131120B2 (en) * 2002-05-16 2006-10-31 Sun Microsystems, Inc. Inter Java virtual machine (JVM) resource locking mechanism
US7996368B1 (en) * 2004-09-21 2011-08-09 Cyress Semiconductor Corporation Attribute-based indexers for device object lists
US7752606B2 (en) 2005-08-10 2010-07-06 Capital One Financial Corporation Software development tool using a structured format to generate software code
US9424005B1 (en) * 2009-12-09 2016-08-23 The Mathworks, Inc. Templatized component
US8572591B2 (en) * 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
JP6107455B2 (ja) * 2013-06-14 2017-04-05 富士電機株式会社 テストスケジュール決定装置、プログラム
US9239774B2 (en) * 2014-01-15 2016-01-19 Microsoft Technology Licensing, Llc Classification of JavaScript code for debugging using just my code

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5797014A (en) 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
JP2000132405A (ja) 1998-10-23 2000-05-12 Nec Ic Microcomput Syst Ltd インライン展開処理装置及び方法
JP2003108369A (ja) 2001-09-28 2003-04-11 Hidetomo Harikawa Webからの要求を受け取り結果出力を行うプログラムの自動生成
JP2013513868A (ja) 2009-12-09 2013-04-22 ザ マスワークス, インク グラフィカル状態遷移図モデルにおける再利用候補の正規化バージョン
JP2017211902A (ja) 2016-05-27 2017-11-30 Sus株式会社 自動プログラミング装置と自動プログラミング方法

Also Published As

Publication number Publication date
US10719304B2 (en) 2020-07-21
JP2020087452A (ja) 2020-06-04
US20200159510A1 (en) 2020-05-21

Similar Documents

Publication Publication Date Title
US8181155B2 (en) Unified expression and location framework
US10083016B1 (en) Procedurally specifying calculated database fields, and populating them
CN102841841B (zh) 一种测试中的断言处理方法及系统
García-Domínguez et al. EUnit: a unit testing framework for model management tasks
Moreno et al. On the relationship between the vocabulary of bug reports and source code
US11042467B2 (en) Automated searching and identification of software patches
CN109313547B (zh) 用于cpu利用率和代码重构的查询优化器
CN113283613B (zh) 深度学习模型的生成方法、优化方法、装置、设备及介质
CN109542455B (zh) 合约执行方法、合约精简方法、设备和存储介质
AU2007243790C1 (en) Contextual search of a collaborative environment
US10671361B2 (en) Automatically determining data dependencies to facilitate code execution
CN116560642A (zh) 代码生成方法及其装置、电子设备及存储介质
US20130019225A1 (en) Incremental Inferences for Developing Data Models
CN111221852A (zh) 基于大数据的混合查询处理方法及装置
CN115238138A (zh) 一种图数据查询方法及装置
US9244706B2 (en) Command line shell command generation based on schema
JP7302440B2 (ja) コンピュータが読むことができるコードを生成する方法、コンピュータ可読媒体、及びシステム
CN110955712A (zh) 基于多数据源的开发api处理方法及装置
CN116204550A (zh) 数据库查询语句的优化方法、存储介质与设备
Korenkov et al. WALT platform for web application development
ZOBAČ Implementation of provenance chains traversal
CN108845953B (zh) 接口测试的方法及装置
CN110688430B (zh) 一种获得数据旁路的方法、装置及电子设备
CN113467828A (zh) 一种异构众核处理器中编程语言转换方法和系统
CN112363700A (zh) 智能合约的协同创建方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220708

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230524

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230605

R150 Certificate of patent or registration of utility model

Ref document number: 7302440

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150