(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-07-04
(54)【発明の名称】依存グラフ生成方法、装置、機器、記憶媒体、及びプログラム製品
(51)【国際特許分類】
G06F 8/75 20180101AFI20230627BHJP
【FI】
G06F8/75
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022520829
(86)(22)【出願日】2021-08-27
(85)【翻訳文提出日】2022-04-04
(86)【国際出願番号】 CN2021115006
(87)【国際公開番号】W WO2022179070
(87)【国際公開日】2022-09-01
(31)【優先権主張番号】202110219222.2
(32)【優先日】2021-02-26
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(74)【代理人】
【識別番号】110002468
【氏名又は名称】弁理士法人後藤特許事務所
(72)【発明者】
【氏名】魏 嘉▲ジン▼
(72)【発明者】
【氏名】霍 宇軒
(72)【発明者】
【氏名】張 聡
(72)【発明者】
【氏名】唐 輝
(72)【発明者】
【氏名】陳 澤
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BB01
5B376BC38
(57)【要約】
依存グラフ生成方法、装置、機器、記憶媒体、及びプログラム製品を提供する。依存グラフ生成方法は、関数コンポーネントで使用されるhook APIを取得することと、前記関数コンポーネントで使用される前記hook APIのパラメータ値を使用することと、依存グラフを生成することとを含み、ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
関数コンポーネントで使用されるhookアプリケーションプログラミングインタフェースAPIを取得することと、
前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得することと、
依存グラフを生成することとを含み、
ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する、依存グラフ生成方法。
【請求項2】
前記関数コンポーネントで使用されるhook APIがカスタムのhook APIを含む場合、前記カスタムのhook APIに対して再帰的分析を行い、直接的にアトミックhook APIを取得することと、
前記再帰的分析により前記アトミックhook API以外の他のhook APIが得られた場合、前記アトミックhook APIのパラメータ値を取得し、かつ前記再帰的分析により得られた前記アトミックhook API以外の他のhook APIのパラメータ値を取得することとをさらに含み、
ここで、前記依存グラフにおいて、
前記アトミックhook APIに対応するhookノード、前記他のhook APIに対応するhookノード、前記アトミックhook APIのパラメータ値に対応する値ノード、及び前記他のhook APIのパラメータ値に対応する値ノードをさらに含み、かつ各値ノードと対応するhookノードとの間に接続関係が存在する、請求項1に記載の依存グラフ生成方法。
【請求項3】
前記依存グラフが表現式により得られた新たな識別子のターゲット値ノードを含む場合、前記依存グラフにおいて前記新たな識別子に対応する値ノードを生成し、かつ前記ターゲット値ノードと前記新たな識別子の値ノードとの接続関係を確立する、請求項1に記載の依存グラフ生成方法。
【請求項4】
前記関数コンポーネントの最上層の拡張可能なマークアップ言語XML表現式を取得することと、
前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成することと、
前記最上層のXML表現式には前記依存グラフにおける値ノードの識別子を引用するターゲットXML表現式を含む場合、前記依存グラフにおいて前記ターゲットXML表現式と対応する値ノードとの接続関係を確立することとをさらに含む、請求項1に記載の依存グラフ生成方法。
【請求項5】
前記の前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成することは、
前記最上層のXML表現式の構文木を簡略化し、少なくとも一つの所定レベルのXML表現式を取得し、かつ前記依存グラフにおいて前記少なくとも一つの所定レベルのXML表現式に対応するコンポーネントノードを生成することを含む、請求項4に記載の依存グラフ生成方法。
【請求項6】
関数コンポーネントで使用されるhookアプリケーションプログラミングインタフェースAPIを取得する第一取得モジュールと、
前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得する第二取得モジュールと、
依存グラフを生成する第一生成モジュールとを含み、
ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する、依存グラフ生成装置。
【請求項7】
前記関数コンポーネントで使用されるhook APIがカスタムのhook APIを含む場合、前記カスタムのhook APIに対して再帰的分析を行い、直接的にアトミックhook APIを取得する再帰的分析モジュールと、
前記再帰的分析により前記アトミックhook API以外の他のhook APIが得られた場合、前記アトミックhook APIのパラメータ値を取得し、かつ前記再帰的分析により得られた前記アトミックhook API以外の他のhook APIのパラメータ値を取得する第三取得モジュールとをさらに含み、
ここで、前記依存グラフにおいて、
前記アトミックhook APIに対応するhookノード、前記他のhook APIに対応するhookノード、前記アトミックhook APIのパラメータ値に対応する値ノード、及び前記他のhook APIのパラメータ値に対応する値ノードをさらに含み、かつ各値ノードと対応するhookノードとの間に接続関係が存在する、請求項6に記載の依存グラフ生成装置。
【請求項8】
前記依存グラフが表現式により得られた新たな識別子のターゲット値ノードを含む場合、前記依存グラフにおいて前記新たな識別子に対応する値ノードを生成し、かつ前記ターゲット値ノードと前記新たな識別子の値ノードとの接続関係を確立する第二生成モジュールをさらに含む、請求項6に記載の依存グラフ生成装置。
【請求項9】
前記関数コンポーネントの最上層の拡張可能なマークアップ言語XML表現式を取得する第四取得モジュールと、
前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成する第三生成モジュールと、
前記最上層のXML表現式には前記依存グラフにおける値ノードの識別子を引用するターゲットXML表現式を含む場合、前記依存グラフにおいて前記ターゲットXML表現式と対応する値ノードとの接続関係を確立する確立モジュールとをさらに含む、請求項6に記載の依存グラフ生成装置。
【請求項10】
前記第三生成モジュールは、前記最上層のXML表現式の構文木を簡略化し、少なくとも一つの所定レベルのXML表現式を取得し、かつ前記少なくとも一つの所定レベルのXML表現式を前記依存グラフのコンポーネントノードとする、請求項9に記載の依存グラフ生成装置。
【請求項11】
少なくとも一つのプロセッサと、
前記少なくとも一つのプロセッサと通信接続されたメモリとを含み、
ここで、前記メモリは前記少なくとも一つのプロセッサにより実行可能な指令を記憶し、前記指令が前記少なくとも一つのプロセッサに実行されることにより、前記少なくとも一つのプロセッサが請求項1~5のいずれか一項に記載の方法を実行することができる、電子機器。
【請求項12】
コンピュータ指令を記憶した非一時的なコンピュータ可読記憶媒体であって、
前記コンピュータ指令はコンピュータに請求項1~5のいずれか一項に記載の方法を実行させる、コンピュータ可読記憶媒体。
【請求項13】
コンピュータプログラムを含み、
ここで、前記コンピュータプログラムはプロセッサにより実行される時に請求項1~5のいずれか一項に記載の方法を実現する、コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はコンピュータの技術分野に関し、特にコンピュータ言語技術に関する。
【背景技術】
【0002】
フック(hook)アプリケーションプログラミングインタフェース(Application Programming Interface、API)は関数コンポーネントにおいてコンポーネント状態を組織するためのAPIである。hook APIに対する分析は主にhook APIのライフサイクルを分析することである。
【発明の概要】
【0003】
本開示は、依存グラフ生成方法、装置、機器、記憶媒体、及びプログラム製品を提供する。
【0004】
本開示の一態様によれば、依存グラフ生成方法を提供する。
依存グラフ生成方法において、
関数コンポーネントで使用されるhookアプリケーションプログラミングインタフェースAPIを取得することと、
前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得することと、
依存グラフを生成することとを含み、
ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する。
【0005】
本開示の別の態様によれば、依存グラフ生成装置を提供する。
依存グラフ生成装置において、
関数コンポーネントで使用されるhookアプリケーションプログラミングインタフェースAPIを取得する第一取得モジュールと、
前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得する第二取得モジュールと、
依存グラフを生成する第一生成モジュールとを含み、
ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する。
【0006】
本開示の別の態様によれば、電子機器を提供する。
電子機器において、
少なくとも一つのプロセッサと、
前記少なくとも一つのプロセッサと通信接続されたメモリとを含み、
ここで、前記メモリは前記少なくとも一つのプロセッサにより実行可能な指令を記憶し、前記指令が前記少なくとも一つのプロセッサに実行されることにより、前記少なくとも一つのプロセッサが本開示による依存グラフ生成方法を実行することができる。
【0007】
本開示の別の態様によれば、コンピュータ可読記憶媒体を提供する。
コンピュータ指令を記憶した非一時的なコンピュータ可読記憶媒体において、
前記コンピュータ指令は前記コンピュータに本開示による依存グラフ生成方法を実行させる、コンピュータ可読記憶媒体。
【0008】
本開示の別の態様によれば、コンピュータプログラム製品を提供する。
コンピュータプログラム製品において、
コンピュータプログラムを含み、
ここで、前記コンピュータプログラムはプロセッサにより実行される時に本開示による依存グラフ生成方法を実現する。
【0009】
理解すべきことは、本部分に記載された内容は本開示の実施例のキー又は重要な特徴を識別することを意図するものではなく、本開示の範囲を限定するものではない。本開示の他の特徴は、以下の説明により容易に理解されるであろう。
【図面の簡単な説明】
【0010】
図面は本解決手段をよりよく理解するために用いられ、本開示を限定するものではない。
【0011】
【
図1】
図1は本開示の提供する依存グラフ生成方法のフローチャートである。
【
図2】
図2は本開示の提供する依存グラフの概略図である。
【
図3】
図3は本開示の提供する別の依存グラフの概略図である。
【
図4】
図4は本開示の提供する依存グラフ生成装置の構造図である。
【
図5】
図5は本開示の提供する別の依存グラフ生成装置の構造図である。
【
図6】
図6は本開示の提供する別の依存グラフ生成装置の構造図である。
【
図7】
図7は本開示の提供する別の依存グラフ生成装置の構造図である。
【
図8】
図8は本開示の実施例に係る依存グラフ生成方法を実現するための電子機器のブロック図である。
【発明を実施するための形態】
【0012】
以下に図面を参照して本開示の例示的な実施例を説明し、ここで本開示の実施例の様々な詳細を含み理解することに役立ち、それらを例示的なものと考えるべきである。したがって、当業者であれば、ここで説明した実施例に対して様々な変更及び修正を行うことができ、本開示の範囲及び精神から逸脱することはない。同様に、明確かつ簡単に説明するために、以下の説明において公知の機能及び構造に対する説明を省略する。
【0013】
図1に示すとおり、
図1は本開示の提供する依存グラフ生成方法のフローチャートであり、
図1に示すように、ステップS101~103を含む。
ステップS101で、関数コンポーネントで使用されるhook APIを取得する。
【0014】
上記関数コンポーネントは、予め作成された関数コンポーネントであってもよく、かつ一つ又は複数の関数コンポーネントで使用されるhook APIを取得することができる。
【0015】
また、上記hook APIは上記関数コンポーネントで使用される全てのhook APIであってもよい。なお、ここで、使用が呼び出しと理解されてもよい。例えば、上記hook APIは、上記関数コンポーネントが呼び出した全てのhook APIであってもよい。さらに、hook APIはhookと略称されてもよい。
【0016】
本開示において、いくつかの実施形態において、hook APIは、React hook APIであってもよく、React関数コンポーネントにおいて、コンポーネント状態を組織するために用いられる。
【0017】
また、本開示におけるhook APIは、保持状態、キャッシュ及び保持副作用に応じて分類することができる。例えば、保持状態でのhook APIは、useState、useReducer、useRefなどを含み、キャッシュされたhook APIはuseCallback、useMemoなどを含み、副作用を持つhook APIはuseEffect、useLayoutEffectなどを含む。
【0018】
一つの実施形態において、上記関数コンポーネントの抽象構文木を構築し、かつ該構文木により関数コンポーネントで使用されるhook APIを取得することができる。これに対して本開示は限定されず、例えば、関数コンポーネントから関数コンポーネントで使用されるhook APIを直接抽出することもできる。
【0019】
ステップS102で、前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得する。
【0020】
該ステップは、ステップS102で取得された各hook APIのパラメータ値を取得してもよい。ここで、パラメータ値は入力パラメータ及び戻り値識別子のうちの少なくとも一つを含む。例えば、いくつかのhook APIのパラメータ値は入力パラメータ及び戻り値識別子を含み、他のhook APIは入力パラメータ及び戻り値識別子のうちの少なくとも一つだけを含む。例えば、あるhook APIは入力パラメータのみがあり、戻り値識別子がなく、又は、いくつかの可能なhook APIに戻り値識別子のみがあり、入力パラメータがない。
【0021】
ステップS103で、依存グラフを生成する。ここで、前記hook APIは前記依存グラフにおけるhookノードとし、前記パラメータ値は前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する。
【0022】
該ステップは、ステップS102で取得された各hook APIを上記依存グラフにおけるhookノードとすることができる。具体的には、各hook APIについて、それぞれ対応するhookノードを生成する。ステップS102で取得された各パラメータ値を値ノードとすることができる。例えば、各入力パラメータ、及び各戻り値識別子に対応する値ノードを生成する。
【0023】
上記値ノードと対応する前記hookノードとの間に接続関係が存在することは、入力パラメータに対応する値ノードから該入力パラメータに対応するhook APIのhookノードに一つの辺を接続し、hook APIのhookノードから該hook APIの戻り値識別子に対応する値ノードに一つの辺を接続することであってもよい。値ノードとhookノードとの間の接続関係により、hook APIと入力パラメータ及び戻り値識別子との間の依存関係を正確に表現することができる。
【0024】
本開示において、生成された依存グラフにおけるhook APIを依存グラフにおけるhookノードとし、hook APIのパラメータ値を前記依存グラフにおける値ノードとする。このように、該依存グラフにより上記hookノードと値ノードとの間の関係を表示することができるので、開発者がhook APIを容易に使用してコードプログラミングを行うことに役立ち、さらにコードプログラミングの指導効果を向上させ、開発してコード品質を向上させることに役立つ。
【0025】
例えば、以下では関数コンポーネントがuseState、useCallback及びuseEffectの三つのhook APIを含むことを例に挙げて説明する。該関数コンポーネントにおいて、useStateの戻り値識別子はcount及びsetCountを含み、useCallbackの入力パラメータはcountを含むことができる。useCallbackの戻り値識別子はonLickを含み、useEffectの入力パラメータはsetCountを含むことができる。
【0026】
このように、上記関数コンポーネントについて、ステップS101で取得されたhook APIはuseState、useCallback及びuseEffectを含み、
図2に示す依存グラフを生成することができる。ここで、201、202、203はそれぞれuseState、useCallback及びuseEffectの三つのhook APIを示し、204、205、206はそれぞれcount、setCount、onLickという三つのパラメータ値を示す。
【0027】
なお、以上は簡単な関数コンポーネントのみを例に挙げて説明する。実際にはより多くのhook API、及びより複雑な入力パラメータ及び戻り値識別子を含んでもよい。
【0028】
選択的な実施形態として、
前記関数コンポーネントで使用されるhook APIがカスタムのhook APIを含む場合、前記カスタムのhook APIに対して再帰的分析を行い、直接的にアトミックhook APIを取得することと、
前記再帰的分析により前記アトミックhook API以外の他のhook APIが得られた場合、前記アトミックhook APIのパラメータ値を取得し、かつ前記再帰的分析により得られた前記アトミックhook API以外の他のhook APIのパラメータ値を取得することとをさらに含む。
ここで、前記依存グラフにおいて、
前記アトミックhook APIに対応するhookノード、前記他のhook APIに対応するhookノード、前記アトミックhook APIのパラメータ値に対応する値ノード、及び前記他のhook APIのパラメータ値に対応する値ノードをさらに含み、かつ各値ノードと対応するhookノードとの間に接続関係が存在する。
【0029】
ここで、上記カスタムのhook APIは、Reactが提供するアトミックhookに基づいて開発者自分で設定されたhook APIである。上記他のhook APIは、上記カスタムの他のhook APIと上記アトミックhook APIとの間に含まれる一つ又は複数のhook APIを指す。
【0030】
いくつかの実施形態において、上記関数コンポーネントは一つ又は複数のカスタムのhook APIを含むことができる。上記カスタムのhook APIのそれぞれに対して、以上のプロセスを実行することができる。
【0031】
同様に、上記パラメータ値は入力パラメータ及び戻り値識別子のうちの少なくとも一つを含んでもよい。異なるhook APIのパラメータ値は同じであってもよく異なってもよい。
【0032】
該実施形態において、上記再帰的分析により関数コンポーネントに係るより多くのhook APIを取得することができる。それにより、上記依存グラフはより多くのhook APIの依存関係を表示して、依存グラフの指導効果をさらに向上させることができる。
【0033】
なお、上記再帰的分析によりアトミックhook APIのみを取得すれば、アトミックhook APIのhookノード及び対応する値ノード、これらのhookノードと対応する値ノードとの接続関係を追加することができる。
【0034】
選択的な実施形態として、
前記依存グラフが表現式により得られた新たな識別子のターゲット値ノードを含む場合、前記依存グラフにおいて前記新たな識別子に対応する値ノードを生成し、かつ前記ターゲット値ノードと前記新たな識別子の値ノードとの接続関係を確立することをさらに含む。
【0035】
上記表現式により得られた新たな識別子のターゲット値ノードは、表現式により該値ノードに対応する識別子から得られた新たな識別子である。表現式により、ある入力パラメータの識別子又は戻り値識別子から新たな識別子を得られ、該入力パラメータ又は戻り値識別子に対応する値ノードは上記ターゲット値ノードである。例えば、ある入力パラメータの識別子又は戻り値識別子は、別の識別子の変数としてもよい。
【0036】
該実施形態において、新たな識別子の値ノード及びその接続関係を生成することにより、上記依存グラフはより多くの値ノードの依存関係を表示することができるので、依存グラフの指導効果をさらに向上させる。
【0037】
選択的な実施形態として、さらに、
前記関数コンポーネントの最上層の拡張可能なマークアップ言語(Extensible Markup Language、XML)表現式を取得することと、
前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成ことと、
前記最上層のXML表現式には前記依存グラフにおける値ノードの識別子を引用するターゲットXML表現式を含む場合、前記依存グラフにおいて前記ターゲットXML表現式と対応する値ノードとの接続関係を確立することとを含む。
【0038】
ここで、上記XML表現式はJSX表現値であってもよい。
【0039】
前記関数コンポーネントの最上層のXML表現式を取得することは、上記関数コンポーネントの構文木に基づいて関数コンポーネントの最上層のXML表現式を取得することであってもよい。
【0040】
前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成することは、上記依存グラフにおいて全ての最上層のXML表現式に係る全ての又は一部のXML表現式に対応するコンポーネントノードを生成することであってもよい。ここで、各XML表現式はそれぞれ一つのコンポーネントノードとする。
【0041】
また、上記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成することは、上記依存グラフの個別生成コンポーネントノードの間の関係図であってもよい。例えば、親コンポーネントノードと子コンポーネントノードとの間の関係図であり、一つのコンポーネントノードの間のフォレストプロットを構成する。該フォレストプロットを構成した後、前記ターゲットXML表現式と対応する値ノードとの接続関係を確立する。例えば、
図3のように、
図3の左側はステップS103で生成された依存グラフであり、
図3の右側は該実施形態の構造のフォレストプロットである。二つの図の間に接続された破線は、ターゲットXML表現式と対応する値ノードとの接続関係を示す。
【0042】
該実施形態において、ターゲットXML表現式と対応する値ノードとの接続関係により、上記依存グラフはXML表現式の値ノード間の依存関係を表示することができ、依存グラフの指導効果をさらに向上させる。
【0043】
好ましくは、前記の前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成することは、
前記最上層のXML表現式の構文木を簡略化し、少なくとも一つの所定レベルのXML表現式を取得し、かつ前記依存グラフにおいて前記少なくとも一つの所定レベルのXML表現式に対応するコンポーネントノードを生成することを含む。
【0044】
ここで、前記最上層のXML表現式の構文木を簡略化することは、上記最上層のXML表現式の構文木におけるXML表現式を簡略化し、上記少なくとも一つの所定レベルのXML表現式のみをコンポーネントノードとすることであってもよい。ここで、上記少なくとも一つの所定レベルは子孫レベルを含み、すなわち、子孫レベルのXML表現式のみをコンポーネントノードとして残してもよい。
【0045】
該実施形態では、最上層のXML表現式の構文木を簡略化し、依存グラフに重要なレベルのコンポーネントノードだけを残し、依存グラフを簡略化し、依存グラフの表示効果を向上させることができる。
【0046】
なお、本開示の上記依存グラフは、
上記依存グラフにおいて出次数が0であるhookノードは、必ず戻り値がないhook API又はコンポーネントノードであると特定し、
上記依存グラフにおける連通サブグラフの個数を、運転時の状態が相互に結合されたサブコンポーネントのグループ数と特定し、
上記依存グラフにおけるある経路には保持状態のhookノードを含まなければ、該経路はキャッシュ可能であり、
上記依存グラフにおける二つのコンポーネントノードが同一の連通サブ図にあり、かつ論理的に結合することができれば、開発者がこの二つのコンポーネントノードに対応するコンポーネントに対して一つの共通の親コンポーネントを追加し、二つのサブコンポーネント行為を一つのコンポーネントにカプセル化し、それにより他の連通サブグラフ上のコンポーネントと区別し、
上記依存グラフにおける二つのコンポーネントノードが同一の連通サブ図にあるが、論理的に結合することができなければ、この時に開発者が状態分割の方式により、二つのコンポーネントノードに対応する二つのサブコンポーネントをデカップリングさせ、それにより将来のコンポーネントの多重化にさらなる影響を与えず、
上記依存グラフにおけるキャッシュ可能な経路について、開発者がキャッシュ対策を使用してコンポーネントを最適化することで、より多くの性能収益を得られ、ここで、キャッシュ対策はReact.memoなどに限定されず、
上記依存グラフにおける非キャッシュ可能な経路について、開発者が該パスにおける保持状態でのhook APIがさらに状態分割された余裕があるか否かを注目し、キャッシュ可能な経路を増加させることを試み、
新たに参加した開発者にとって、上記依存グラフによりコンポーネントの状態を迅速に理解して、複雑な仕事を迅速で効果的に把握し、
異なる関数コンポーネントの依存グラフについて、データ分析の方式によりこれらのグラフにおける共通パターン及び経路を見つけ、共通パターンをコード抽象化することにより、コードの多重化性を向上させることができる、という効果を得られる。
【0047】
図4に示すとおり、
図4は本開示の提供する依存グラフ生成装置であり、
図4に示すように、依存グラフ生成装置400は、
関数コンポーネントで使用されるhookアプリケーションプログラミングインタフェースAPIを取得する第一取得モジュール401と、
前記関数コンポーネントで使用される前記hook APIのパラメータ値を取得する第二取得モジュール402と、
依存グラフを生成する第一生成モジュール403とを含み、
ここで、前記hook APIが前記依存グラフにおけるhookノードとし、前記パラメータ値が前記依存グラフにおける値ノードとし、値ノードと対応するhookノードとの間に接続関係が存在する。
【0048】
好ましくは、
図5に示すように、
前記関数コンポーネントで使用されるhook APIがカスタムのhook APIを含む場合、前記カスタムのhook APIに対して再帰的分析を行い、直接的にアトミックhook APIを取得する再帰的分析モジュール404と、
前記再帰的分析により前記アトミックhook API以外の他のhook APIが得られた場合、前記アトミックhook APIのパラメータ値を取得し、かつ前記再帰的分析により得られた前記アトミックhook API以外の他のhook APIのパラメータ値を取得する第三取得モジュール405とをさらに含み、
ここで、前記依存グラフにおいて、
前記アトミックhook APIに対応するhookノード、前記他のhook APIに対応するhookノード、前記アトミックhook APIのパラメータ値に対応する値ノード、及び前記他のhook APIのパラメータ値に対応する値ノードをさらに含み、かつ各値ノードと対応するhookノードとの間に接続関係が存在する。
【0049】
好ましくは、
図6に示すように、
前記依存グラフが表現式により得られた新たな識別子のターゲット値ノードを含む場合、前記依存グラフにおいて前記新たな識別子に対応する値ノードを生成し、かつ前記ターゲット値ノードと前記新たな識別子の値ノードとの接続関係を確立する第二生成モジュール406をさらに含む。
【0050】
好ましくは、
図7に示すように、
前記関数コンポーネントの最上層の拡張可能なマークアップ言語XML表現式を取得する第四取得モジュール407と、
前記依存グラフにおいて前記最上層のXML表現式に対応するコンポーネントノードを生成する第三生成モジュール408と、
前記最上層のXML表現式には前記依存グラフにおける値ノードの識別子を引用するターゲットXML表現式を含む場合、前記依存グラフにおいて前記ターゲットXML表現式と対応する値ノードとの接続関係を確立する確立モジュール409とをさらに含む。
【0051】
好ましくは、前記第三生成モジュールは、前記最上層のXML表現式の構文木を簡略化し、少なくとも一つの所定レベルのXML表現式を取得し、かつ前記少なくとも一つの所定レベルのXML表現式を前記依存グラフのコンポーネントノードとする。
【0052】
本開示の実施例において、本開示は、電子装置、可読記憶媒体及びコンピュータプログラム製品を提供する。
【0053】
図8は、本開示の実施例を実施できる例示的な電子装置800の概略ブロック図を示す。電子装置は、様々な形式のデジタルコンピュータ、例えば、ラップトップ型コンピュータ、デスクトップコンピュータ、ワークテーブル、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、大型コンピュータ、及び他の適切なコンピュータを示すことを意図する。電子装置はさらに様々な形式の移動装置、例えば、パーソナルディジタルアシスタント、携帯電話、スマートフォン、ウェアラブル装置及び他の類似の計算装置を示すことができる。本明細書に示された部材、それらの接続及び関係、及びそれらの機能は、例示的なものに過ぎず、本明細書に記載及び/又は要求された本開示の実現を限定するものではない。
【0054】
図8に示すように、装置800は、リードオンリーメモリ(ROM)802に記憶されたコンピュータプログラム、又は記憶ユニット808からランダムアクセスメモリ(RAM)803にロードされたコンピュータプログラムに基づいて、様々な適切な動作及び処理を実行することができる計算ユニット801を含む。RAM 803において、さらに装置800の動作に必要な様々なプログラム及びデータを記憶することができる。計算ユニット801、ROM 802、およびRAM 803は、バス804により相互に接続されている。入力/出力(I/O)インタフェース805もバス804に接続されている。
【0055】
装置800中の複数の部材は、I/Oインタフェース805に接続され、キーボード、マウスなどの入力ユニット806と、様々なタイプのディスプレイ、スピーカなどの出力ユニット807と、磁気ディスク、光ディスクなどの記憶ユニット808と、ネットワークカード、モデム、無線通信トランシーバなどの通信ユニット809とを含む。通信ユニット809は、装置800がインターネットなどのコンピュータネットワーク及び/又は各種の通信ネットワークを介して他の装置と情報/データを変換することを可能にする。
【0056】
計算ユニット801は、処理及び計算能力を有する各種の汎用及び/又は専用の処理モジュールであってよい。計算ユニット801の例は、中央処理装置(CPU)、グラフィック処理装置(GPU)、各種の専用の人工知能(AI)計算チップ、各種動作機械学習モデルアルゴリズムの計算ユニット、デジタルシグナルプロセッサ(DSP)、任意の適切なプロセッサ、コントローラ、マイクロコントローラなどを含むが、これらに限定されない。計算ユニット801は、上述した各方法及び処理、例えば依存グラフ生成方法を実行する。例えば、いくつかの実施例において、依存グラフ生成方法は、コンピュータソフトウェアプログラムとして実現され、記憶ユニット808などの機械可読媒体に有形に含まれる。いくつかの実施例において、コンピュータプログラムの一部又は全部はROM 802及び/又は通信ユニット809を介して装置800にロード及び/又はインストールされてよい。コンピュータプログラムがRAM803にロードされ、計算ユニット801によって実行される場合、上述した依存グラフ生成方法の一つ又は複数のステップを実行することができる。代替的に、他の実施例において、計算ユニット801は、他の任意の適切な方式で(例えば、ファームウェアにより)依存グラフ生成方法を実行するように構成されてよい。
【0057】
本明細書で上述したシステム及び技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、フィールドプログラマブルゲートアレイ(FPGA)、専用集積回路(ASIC)、専用標準製品(ASSP)、チップ上システムのシステム(SOC)、負荷プログラマブルロジック装置(CPLD)、コンピュータハードウェア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせにおいて実現することができる。これらの様々な実施形態は、一つ又は複数のコンピュータプログラムにおける実施を含んでよく、該一つ又は複数のコンピュータプログラムは、少なくとも一つのプログラマブルプロセッサを含むプログラマブルシステムで実行及び/又は解釈され、該プログラマブルプロセッサは専用又は汎用のプログラマブルプロセッサであってよく、記憶システム、少なくとも一つの入力装置、及び少なくとも一つの出力装置からデータ及び指令を受信し、データ及び指令を該記憶システム、該少なくとも一つの入力装置、及び該少なくとも一つの出力装置に伝送することができる。
【0058】
本開示の方法を実施するプログラムコードは、一つ又は複数のプログラミング言語の任意の組み合わせで作成することができる。これらのプログラムコードは、汎用コンピュータ、専用コンピュータ又は他のプログラマブルデータ処理装置のプロセッサ又はコントローラに提供することにより、プログラムコードがプロセッサ又はコントローラによって実行されると、フローチャート及び/又はブロック図に規定された機能/動作は実施される。プログラムコードは、機器に完全に実行され、機器に部分的に実行されてもよく、独立したソフトウェアパッケージとして機器に部分的に実行されかつ遠隔機器に部分的に実行されるか又は遠隔機器又はサーバに完全に実行されてもよい。
【0059】
本開示のコンテキストにおいて、機械可読媒体は有形の媒体であってよく、それは指令実行システム、デバイス又は装置に使用されるか又は指令実行システム、デバイス又は装置と組み合わせて使用されるプログラムを含んでよい。機械可読媒体は、機械可読信号媒体又は機械可読記憶媒体であってよい。機械可読媒体は、電子、磁気的、光学的、電磁的、赤外線、又は半導体システム、デバイス又は装置、又は上記内容の任意の適切な組み合わせを含むが、これらに限定されない。機械可読記憶媒体のより具体的な例は、一つ又は複数のワイヤに基づく電気的接続、携帯式コンピュータディスク、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、消去可能なプログラマブルリードオンリーメモリ(EPROM又はフラッシュメモリ)、光ファイバ、携帯式コンパクトディスクリードオンリーメモリ(CD-ROM)、光ストレージデバイス、磁気ストレージデバイス、又は上記内容の任意の適切な組み合わせを含む。
【0060】
ユーザとの相互作用を提供するために、コンピュータにここで説明されたシステム及び技術を実施することができ、該コンピュータは、ユーザに情報を表示する表示装置(例えば、陰極線管(CRT)又は液晶ディスプレイ(LCD)モニタ)、及びキーボード及びポインティングデバイス(例えば、マウス又はトラックボール)を含み、ユーザは該キーボード及び該ポインティングデバイスを介して入力をコンピュータに提供することができる。他のタイプのデバイスは、さらにユーザとの相互作用を提供し、例えば、ユーザに提供されたフィードバックはいかなる形式のセンシングフィードバック(例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバック)であってよく、いかなる形式(音声入力、音声入力又は触覚入力を含む)でユーザからの入力を受信することができる。
【0061】
ここで説明されたシステム及び技術は、バックグラウンド部品を含むコンピューティングシステム(例えば、データサーバ)、又はミドルウェア部品を含むコンピューティングシステム(例えば、アプリケーションサーバ)、又はフロントエンド部品を含むコンピューティングシステム(例えば、グラフィカルユーザインタフェース又はウェブブラウザを有するユーザコンピュータ、ユーザが該グラフィカルユーザインタフェース又は該ネットワークブラウザを介してここで説明されたシステム及び技術の実施形態と相互作用することができる)、又はこのようなバックグラウンド部品、ミドルウェア部品、又はフロントエンド部品の任意の組み合わせを含むコンピューティングシステムに実施することができる。任意の形式又は媒体のデジタルデータ通信(例えば、通信ネットワーク)を介してシステムの部品を相互に接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)及びインターネットを含む。
【0062】
コンピュータシステムは、クライアント及びサーバを含んでよい。クライアントとサーバとは一般的に離れており、通常は通信ネットワークを介して相互作用する。クライアントとサーバとの関係は、対応するコンピュータ上で動作し、かつクライアント-サーバの関係を有するコンピュータプログラムによって生成される。
【0063】
以上に示された様々な形式のフローを使用し、改めてステップをソーティングし、追加するか又は削除することができることを理解されたい。例えば、本開示に記載の各ステップは、並列的に実行されてもよく、順に実行されてもよく、異なる順序で実行されてもよく、本開示の技術的解決手段の所望の結果を実現することができれば、本明細書はこれを限定しない。
【0064】
上記具体的な実施形態は、本開示の保護範囲を限定するものではない。当業者が理解できるように、設計要件及び他の要因に基づいて、様々な修正、組み合わせ、サブコンビネーション及び代替を行うことができる。本開示の精神と原則内で行われた任意の修正、均等置換及び改善などは、いずれも本開示の保護範囲内に含まれるべきである。
【0065】
本願は2021年2月26日に中国で提出された中国特許出願番号No.202110219222.2の優先権を主張し、その全ての内容は引用によりこれに含まれる。
【国際調査報告】