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

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

▶ バイドゥ ユーエスエイ エルエルシーの特許一覧

特許6994071Protobufベースのプロジェクトのための包括的な検証手法
<>
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図1A
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図1B
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図2
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図3A
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図3B
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図3C
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図3D
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図4
  • 特許-Protobufベースのプロジェクトのための包括的な検証手法 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-14
(45)【発行日】2022-01-14
(54)【発明の名称】Protobufベースのプロジェクトのための包括的な検証手法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20220106BHJP
【FI】
G06F11/36 124
【請求項の数】 20
(21)【出願番号】P 2020070764
(22)【出願日】2020-04-10
(65)【公開番号】P2020187737
(43)【公開日】2020-11-19
【審査請求日】2020-04-10
(31)【優先権主張番号】16/411,755
(32)【優先日】2019-05-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】516357421
【氏名又は名称】バイドゥ ユーエスエイ エルエルシー
【氏名又は名称原語表記】Baidu USA LLC
(74)【代理人】
【識別番号】100118913
【弁理士】
【氏名又は名称】上田 邦生
(74)【代理人】
【識別番号】100142789
【弁理士】
【氏名又は名称】柳 順一郎
(74)【代理人】
【識別番号】100163050
【弁理士】
【氏名又は名称】小栗 眞由美
(74)【代理人】
【識別番号】100201466
【弁理士】
【氏名又は名称】竹内 邦彦
(72)【発明者】
【氏名】フェン, キアン
(72)【発明者】
【氏名】チャン, ユーロン
(72)【発明者】
【氏名】ワン, ペイ
(72)【発明者】
【氏名】ディン, ユー
(72)【発明者】
【氏名】ウェイ, タオ
【審査官】多胡 滋
(56)【参考文献】
【文献】特開2012-073778(JP,A)
【文献】特開2008-305003(JP,A)
【文献】米国特許出願公開第2007/0277158(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
データ通信のためにプロトコル・バッファ(Protobuf)を使用するアプリケーションの検証において、検証の代用ヘッダファイルを使用するためのコンピュータで実装される方法であって、
Protobuf仕様による1または複数の関数の第1のセットを定義するProtobuf定義ファイルから1または複数のProtobufメッセージタイプを得るステップであって、前記第1のセットの前記関数がProtobufライブラリのセットを呼び出すステップと、
前記Protobufメッセージタイプに基づいて前記検証の代用ヘッダファイルを生成するステップであって、該検証の代用ヘッダファイルが、標準C/C++プログラム言語による1または複数の関数の第2のセットを定義し、前記第2のセットの前記関数が標準C/C++ライブラリのセットを呼び出すステップと、
前記検証の代用ヘッダファイルに1または複数の検証スタブを挿入するステップと、
前記標準C/C++ライブラリのセットに基づいて、前記Protobufライブラリのセットの検証を必要とすることなく、前記検証の代用ヘッダファイルを含むアプリケーションの検証を遂行するステップと、
を含む方法。
【請求項2】
前記Protobuf定義ファイルから前記1または複数のProtobufメッセージタイプを得るステップが、前記Protobuf定義ファイルに基づいて抽象構文ツリー(AST)を生成するステップと、前記ASTを解析するステップと、を含む請求項1に記載の方法。
【請求項3】
各Protobufメッセージタイプについて、前記検証の代用ヘッダファイルの中にC++クラスが生成され、対応するProtobufメッセージタイプの各フィールドについて、前記C++クラスの中に1つのメンバ・フィールドおよび対応するメンバ関数が生成される請求項1に記載の方法。
【請求項4】
C/C++クラスの1または複数のオブジェクトの生成、アクセス、または削除のための、前記検証の代用ヘッダファイルを含む前記アプリケーションの前記検証が、前記標準C/C++ライブラリに依存する請求項3に記載の方法。
【請求項5】
前記検証スタブが、前記メンバ関数に関連した1または複数の事前条件、前記メンバ関数に関連した1または複数の事後条件、またはこれらの組合せを含む請求項3に記載の方法。
【請求項6】
前記1または複数の事前条件ならびに/あるいは前記1または複数の事後条件がカスタマイズ可能である請求項5に記載の方法。
【請求項7】
前記Protobufメッセージタイプが前記Protobuf定義ファイルの中で定義される請求項1に記載の方法。
【請求項8】
命令を記憶した非一時的マシン可読媒体であって、前記命令がプロセッサによって実行されたとき、該プロセッサが、データ通信のためにプロトコル・バッファ(Protobuf)を使用するアプリケーションの検証において、検証の代用ヘッダファイルを使用する動作を遂行し、該動作が、
Protobuf仕様による1または複数の関数の第1のセットを定義するProtobuf定義ファイルから1または複数のProtobufメッセージタイプを得るステップであって、前記第1のセットの前記関数がProtobufライブラリのセットを呼び出す、1または複数のProtobufメッセージタイプを得るステップと、
前記Protobufメッセージタイプに基づいて前記検証の代用ヘッダファイルを生成するステップであって、該検証の代用ヘッダファイルが、標準C/C++プログラム言語による1または複数の関数の第2のセットを定義し、前記第2のセットの前記関数が標準C/C++ライブラリのセットを呼び出す、前記検証の代用ヘッダファイルを生成するステップと、
前記検証の代用ヘッダファイルに1または複数の検証スタブを挿入するステップと、
前記標準C/C++ライブラリのセットに基づいて、前記Protobufライブラリのセットの検証を必要とすることなく、前記検証の代用ヘッダファイルを含むアプリケーションの検証を遂行するステップとを含む非一時的マシン可読媒体。
【請求項9】
前記Protobuf定義ファイルから前記1または複数のProtobufメッセージタイプを得るステップが、前記Protobuf定義ファイルに基づいて抽象構文ツリー(AST)を生成するステップと、前記ASTを解析するステップと、を含む請求項8に記載の非一時的マシン可読媒体。
【請求項10】
各Protobufメッセージタイプについて、前記検証の代用ヘッダファイルの中にC++クラスが生成され、対応するProtobufメッセージタイプの各フィールドについて、前記C++クラスの中に1つのメンバ・フィールドおよび対応するメンバ関数が生成される、請求項8に記載の非一時的マシン可読媒体。
【請求項11】
C/C++クラスの1または複数のオブジェクトの生成、アクセス、または削除のための、前記検証の代用ヘッダファイルを含む前記アプリケーションの前記検証が、前記標準C/C++ライブラリに依存する請求項10に記載の非一時的マシン可読媒体。
【請求項12】
前記検証スタブが、前記メンバ関数に関連した1または複数の事前条件、前記メンバ関数に関連した1または複数の事後条件、またはこれらの組合せを含む請求項10に記載の非一時的マシン可読媒体。
【請求項13】
前記1または複数の事前条件ならびに/あるいは前記1または複数の事後条件がカスタマイズ可能である請求項12に記載の非一時的マシン可読媒体。
【請求項14】
前記Protobufメッセージタイプが前記Protobuf定義ファイルの中で定義される請求項8に記載の非一時的マシン可読媒体。
【請求項15】
プロセッサと、命令を記憶するように該プロセッサに結合されたメモリとを備えるデータ処理システムであって、前記命令が前記プロセッサによって実行されたとき、前記プロセッサが、データ通信のためにプロトコル・バッファ(Protobuf)を使用するアプリケーションの検証において検証の代用ヘッダファイルを使用するための動作を遂行し、該動作が、
Protobuf仕様による1または複数の関数の第1のセットを定義するProtobuf定義ファイルから1または複数のProtobufメッセージタイプを得るステップであって、前記第1のセットの前記関数がProtobufライブラリのセットを呼び出す、1または複数のProtobufメッセージタイプを得るステップと、
前記Protobufメッセージタイプに基づいて前記検証の代用ヘッダファイルを生成するステップであって、該検証の代用ヘッダファイルが、標準C/C++プログラム言語による1または複数の関数の第2のセットを定義し、前記第2のセットの前記関数が、標準C/C++ライブラリのセットを呼び出すステップと、
前記検証の代用ヘッダファイルに1または複数の検証スタブを挿入するステップと、
前記標準C/C++ライブラリのセットに基づいて、前記Protobufライブラリのセットの検証を必要とすることなく、前記検証の代用ヘッダファイルを含むアプリケーションの検証を遂行するステップと、
を含むデータ処理システム。
【請求項16】
前記Protobuf定義ファイルから前記1または複数のProtobufメッセージタイプを得るステップが、前記Protobuf定義ファイルに基づいて抽象構文ツリー(AST)を生成するステップと、前記ASTを解析するステップと、を含む請求項15に記載のシステム。
【請求項17】
各Protobufメッセージタイプについて、前記検証の代用ヘッダファイルの中にC++クラスが生成され、対応するProtobufメッセージタイプの各フィールドについて、前記C++クラスの中に1つのメンバ・フィールドおよび対応するメンバ関数が生成される請求項15に記載のシステム。
【請求項18】
C/C++クラスの1または複数のオブジェクトの生成、アクセス、または削除のための、前記検証の代用ヘッダファイルを含む前記アプリケーションの前記検証が、前記標準C/C++ライブラリに依存する、請求項17に記載のシステム。
【請求項19】
前記検証スタブが、前記メンバ関数に関連した1または複数の事前条件、前記メンバ関数に関連した1または複数の事後条件、またはこれらの組合せを含む請求項17に記載のシステム。
【請求項20】
前記1または複数の事前条件ならびに/あるいは前記1または複数の事後条件がカスタマイズ可能である請求項19に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施形態は一般にソフトウェア開発に関する。より具体的には、本開示の実施形態は、Protobufを使用するアプリケーションの検証において検証の代用ヘッダファイルを使用することに関する。
【背景技術】
【0002】
Google(登録商標)によって開発されたプロトコル・バッファ(Protobuf)は、構造化データを直列化する、言語的にもプラットフォーム的にも中立の方法である。Protobufは、互いに有線で通信するため、またはデータを記憶するためのプログラムの開発において有用である。
【0003】
Protobufを利用する人工知能(AI)アプリケーション(たとえば自律性乗物を運転するためのAIプログラム)が、ますます増えている。自動化された検証および評価のツールを使用する(たとえばメモリ安全性のための)そのようなAIアプリケーションの検証および評価は、Googleによって提供されるProtobufコード・ジェネレータなどの標準的なProtobufコード・ジェネレータによって生成されたProtobufヘッダファイルの複雑さのために、遅く、多くの時間が必要となる。
【発明の概要】
【0004】
本開示の実施形態が、限定ではなく例として示され、添付図面では類似の参照は類似の要素を指示する。
【図面の簡単な説明】
【0005】
図1A】Protobufヘッダファイルを生成するための処理を示すブロック図である。
図1B】Protobuf定義ファイルの一例を示す図である。
図2】一実施形態に係る検証の代用ヘッダファイルを生成する処理を示すブロック図である。
図3A】一実施形態に係るexample.proto Protobuf定義ファイルに対応する例示のASTを示す図である。
図3B】一実施形態に係る図3Aに対応する特定のフィールドを定義するデータ構造の図表である。
図3C】一実施形態に係る図3Aに対応する特定のフィールドを定義するデータ構造の図表である。
図3D】一実施形態に係る図3Aの例示のASTに対応する等価のコードを示す図である。
図4】一実施形態に係るデータ通信のためにProtobufを使用するアプリケーションの検証において検証の代用ヘッダファイルを使用するための方法を示す流れ図である。
図5】一実施形態に係るデータ処理システムを示すブロック図である。
【発明を実施するための形態】
【0006】
本開示の様々な実施形態および態様が、以下で論じられる詳細を参照しながら説明され、添付図面は様々な実施形態を示す。以下の説明および図面は本開示の実例であり、本開示を限定するものと解釈されるべきではない。本開示の様々な実施形態の完全な理解を提供するために、多くの具体的な詳細が説明される。しかしながら、特定の事例では、本開示の実施形態の簡潔な議論を提供するために、周知の詳細または旧来の詳細は説明されない。
【0007】
本明細書における「一実施形態」または「実施形態」に対する参照は、実施形態に関連して説明された特定の特徴、構造、または特性が、本開示の少なくとも1つの実施形態に含まれ得ることを意味する。様々な位置において「一実施形態では」という慣用句が出現することは、必ずしもすべてが本明細書における同一の実施形態を指すわけではない。
【0008】
いくつかの実施形態によれば、データ通信のためにプロトコル・バッファ(Protobuf)を使用するアプリケーションの検証において、検証の代用ヘッダファイルが使用される。Protobuf定義ファイルから1または複数のProtobufメッセージタイプが得られる。Protobuf定義ファイルは、対応するソースコードの実行中に呼び出される1または複数の関数を定義するProtobuf仕様に適合する。検証の代用ヘッダファイルは、Protobufメッセージタイプに基づいて生成され、検証の代用ヘッダファイルは、Protobufの専用ライブラリの代わりに標準C/C++ライブラリを使用して呼び出される1または複数の関数を定義する。Protobufの専用ライブラリは検証するのが困難である。検証の代用ヘッダファイルに1または複数の検証スタブが付加される。検証の代用ヘッダファイルはアプリケーションのソースコードに含まれる。その後、検証の代用ヘッダファイルを含むアプリケーションの検証は、検証の代用ヘッダファイルに基づいて、呼び出された標準C/C++ライブラリの関数のソースコードの検証を含めて遂行される。
【0009】
一実施形態では、Protobuf定義ファイルから1または複数のProtobufメッセージタイプを得るステップは、Protobuf定義ファイルに基づいて抽象構文ツリー(AST)を生成するステップと、ASTを解析するステップとを含む。一実施形態では、各Protobufメッセージタイプについて、検証の代用ヘッダファイルの中にC++クラスが生成され、C++クラスの中に、対応するProtobufメッセージタイプの各フィールドについて、1つのメンバ・フィールドおよび対応するメンバ関数が生成される。
【0010】
一実施形態では、C++クラスの1または複数のオブジェクトの生成、アクセスまたは削除のための、検証の代用ヘッダファイルを含むアプリケーションの検証は、標準C/C++ライブラリに依存する。一実施形態では、検証スタブは、メンバ関数に関連した1または複数の事前条件、メンバ関数に関連した1または複数の事後条件、またはこれらの組合せを含む。一実施形態では、1または複数の事前条件ならびに/あるいは1または複数の事後条件はカスタマイズ可能である。一実施形態では、ProtobufメッセージタイプはProtobuf定義ファイルの中で定義される。
【0011】
図1Aを参照して、Protobufヘッダファイルを生成するための処理を示すブロック図100が示されている。開発者は、Protobufインターフェース記述言語を用いるProtobuf定義ファイル110(通常は.protoのファイル名拡張子を有する)において構造化データ(またはメッセージ)を定義する。以下で、Protobuf定義ファイル110は、簡単にprotoファイルとも称され得る。Protobuf定義ファイル110は、グーグルによって定義されたProtobufライブラリのセットに関連づけられたProtobuf仕様に適合する。Protobufコード・ジェネレータ120は、Protobuf定義ファイル110に基づいて、1または複数のProtobufヘッダファイル130を生成する。標準的なProtobufコード・ジェネレータ120はグーグルから入手可能である。たとえば、Protobufコード・ジェネレータ120は、C/C++言語を用いて、Protobuf定義ファイル110からヘッダファイル(拡張子.pb.hを有する)およびインプリメンテーション・ファイル(拡張子.pb.ccを有する)を生成する。その後、開発者はアプリケーションの中にヘッダファイル130を含めることができ、それによって、アプリケーションは、Protobuf定義ファイル110に含まれるメッセージタイプ定義に従ってProtobufメッセージを読んだり書いたりすることができる。
【0012】
解説のために、図1Bには、example.protoという名称の簡単な例示のProtobuf定義ファイル110が与えられている。この例では、example.protoファイルは2つのメッセージタイプMsgType1およびMsgType2を定義しており、MsgType1は必要な32ビットの整数値を含み、MsgType2は必要なブール値を含む。
【0013】
この文献の最後の表1及び表2に列記されたexample.pb.hヘッダファイルは、図1Bに示されたようなグーグルのexample.proto定義ファイルに基づく標準的なProtobufコード・ジェネレータによって生成された例示のヘッダファイルである。ヘッダファイルexample.pb.hが、GoogleのProtobufのインプリメンテーションからの専用ライブラリ(たとえばヘッダファイルがライン1~7に列記されたライブラリ)に大きく依存することが理解され得、このため、検証処理は、GoogleのProtobufライブラリを詳細に調べて、対応する関数を検証する必要があるので、検証処理に付随する作業負荷が大幅に増加してしまう。
【0014】
Protobufを利用する人工知能(AI)アプリケーション(たとえば自律性乗物を運転するためのAIプログラム)が、ますます増えている。自動化された検証および評価のツールを使用する(たとえばメモリ安全性のための)そのようなAIアプリケーションの検証および評価は、標準的なProtobufコード・ジェネレータによって生成されたProtobufヘッダファイルの複雑さのために、遅く、多くの時間を必要とする。具体的には、標準的なProtobufコード・ジェネレータによって生成されたProtobufヘッダファイルは、標準的なProtobufライブラリからのデータ構造を用いて生成されているため、複雑である。したがって、検証されかつ検査されるアプリケーションの中に標準的なProtobufコード・ジェネレータによって生成されたProtobufヘッダファイルを含めると、検証および確認の処理を不必要に低速化する恐れがある。
【0015】
図2を参照して、一実施形態に係る検証の代用ヘッダファイルを生成する処理を示すブロック図200が示されている。抽象構文ツリー(AST)ジェネレータ210は、Protobuf定義ファイル110を分析して、Protobuf定義ファイル110の中で定義されたメッセージタイプを記述するASTを生成する。次いで、ASTパーサ220は、ASTを解析して、各Protobufメッセージタイプにおけるすべてのフィールドを含むすべてのProtobufメッセージタイプを得る。そのようにして得られたProtobufメッセージタイプは、AST生成の基になったProtobuf定義ファイル110の中で定義されたものと一致するはずであることを理解されたい。
【0016】
Protobufメッセージタイプが一旦得られると、検証コード・ジェネレータ230はProtobufメッセージタイプに基づいて1または複数のC++クラスを生成する。詳細には、各Protobufメッセージタイプについて少なくとも1つのC++クラスが生成される。検証コード・ジェネレータ230は、Protobufメッセージタイプにおける各フィールドについて、メンバ・フィールドならびにProtobufメッセージタイプに対応するC++クラスにおけるメンバ・フィールドにアクセスするためのメンバ関数を生成する。データ・メンバおよび関数メンバを含むC++クラスは、検証の代用ヘッダファイル250に保存される。
【0017】
その上、検証の代用ヘッダファイル250が証明可能なように、検証スタブ・ジェネレータ240は、検証の代用ヘッダファイル250に検証スタブを付加する。検証スタブは、少なくとも1つのメンバ関数のメモリ安全性などを保証するための事前条件および/または事後条件を含む。たとえば、事前条件は、1)関数の入力パラメータがポインタである場合にはNULLポインタであってはならない、2)関数の入力パラメータは、それぞれの基本タイプの範囲を超えてはならない(たとえば整数、実数、倍精度実数などの基本タイプは定義された範囲を有する)、といった条件を含み得る。別の実施形態では、事前条件の一例は「入力値が特定の範囲内にあること」でよい。事後条件の一例は「出力値が特定の範囲内にあること」でよい。本明細書で説明された例示の事前条件および事後条件は例であり、本開示を限定するものではない。異なる実施形態では、事前条件および事後条件は異なるやり方でカスタマイズされ得る。加えて、事前条件および事後条件は任意の適切なフォーマットで定義され得る。一実施形態では、事前条件および事後条件を定義するためにANSI/ISO C仕様言語(ACSL)が使用される。
【0018】
したがって、標準C++クラスが使用されるため、検証および評価のとき、検証の代用ヘッダファイル250がアプリケーションに含まれている場合には、オブジェクトの生成、アクセス、または削除のために依存されるのは標準C/C++ライブラリのみ(たとえばstdlibc++)となり、より複雑な、Protobufに特有のコード、関数、およびライブラリは使用されない。
【0019】
上記のexample.proto定義ファイルに対応するverification_example.hという名称の例示の検証の代用ヘッダファイル250が、解説のために、この文献の最後の表3から表5に与えられている。表1及び表2のexample.pb.hヘッダファイルと比較して、各メッセージタイプに関して必要なすべての方法が大幅に簡素化されたことが認められる。事前条件および事後条件に関する検証検査は、パラメータを有する関数に付加される。詳細には、引数としてポインタを有する関数にはポインタ検査が付加される。たとえば、verification_example.hのライン46~47(表3及び表4参照)に示されるように、検証サブ“/*@ requires \valid(x)*/”が挿入されている。同様に、ライン81は変数“from”の検証を必要とし、ライン86は変数“other”の検証を必要とする。そのような検証スタブは、変数“x”が有効なポインタであることを確認するための検証処理を命令する。検証が失敗すると(たとえばポインタxが無効なポインタであると)、ユーザに通知するために警報が生成されてよい。条件はACSLフォーマットに従う。それゆえに、検証処理は、条件が満たされるかどうかを自動的に検査して確認することになる。Protobuf定義ファイルに基づいてASTを生成することは、当業者の技量の範囲内にある。
【0020】
図3Aを参照して、example.proto定義ファイルに対応するAST 300の一例が示されている。AST 300は、Protobuf定義ファイル名(“1:example.proto”)、パッケージ名(“2:test”)、および2つの定義されたメッセージタイプ(すなわちMsgType1およびMsgType2)に関する情報を含む(ノード“3:1”:両方のメッセージタイプが1つのフィールドを有する、ノード“4:2”:両方のメッセージタイプが「必要な」ラベルを有する、ノード“5:5”および“5:8”:フィールド・タイプはそれぞれint32およびboolである)。一実施形態によれば、キー値ペアと同様に、キー(たとえば図3Bに示されるようなフィールドID)およびキーに関連する値(たとえば図3Cに示されるようなフィールド・タイプ)を列挙するために数が利用される。ASTパーサは、各Protobufメッセージタイプにおけるすべてのフィールドを含むすべてのProtobufメッセージタイプを得るために、ASTを解析してよい。解説のために、ASTの等価なコード表現が図3Dに与えられている。
【0021】
図4を参照して、データ通信のためにProtobufを使用するアプリケーションの検証において検証の代用ヘッダファイルを使用するための方法400の流れ図が示されている。方法400はハードウェア、ソフトウェア、またはこれらの組合せで実施され得る。ブロック410において、Protobuf定義ファイル(たとえばProtobufと互換性がある定義ファイル)に基づいて、1または複数のProtobufメッセージタイプが得られる。ブロック420において、標準C/C++ヘッダファイルと互換性があるProtobufメッセージタイプに基づいて、検証の代用ヘッダファイルが生成される。ブロック430において、検証の代用ヘッダファイルに1または複数の検証スタブが付加される。ブロック440において、検証の代用ヘッダファイルがアプリケーションのソースコードに含まれる。ブロック450において、Protobufの専用ライブラリの検証を必要とすることなく、標準C/C++ライブラリのみを検証することにより、検証の代用ヘッダファイルを含むアプリケーションが検証される。
【0022】
上記で示されて説明されたコンポーネントのうちいくつかまたはすべてが、ソフトウェア、ハードウェア、またはこれらの組合せで実施され得ることに留意されたい。たとえば、そのようなコンポーネントは持続的記憶デバイスにインストールして記憶されたソフトウェアとして実施され得、本出願の全体にわたって説明された処理または演算を実行するために、プロセッサ(図示せず)によってメモリにロードされ、かつ実行され得る。あるいは、そのようなコンポーネントは、集積回路(たとえば特定用途向けICすなわちASIC)、デジタル信号プロセッサ(DSP)、またはフィールド・プログラマブル・ゲートアレイ(FPGA)などの専用ハードウェアの中にプログラムされた、または組み込まれた、アプリケーションから、対応するドライバおよび/またはオペレーティングシステムを介してアクセス可能な実行可能コードとして実施され得る。その上、そのようなコンポーネントは、ソフトウェア・コンポーネントによって1または複数の特定の命令を介してアクセス可能な命令セットの一部分として、プロセッサまたはプロセッサコアにおける特定のハードウェア・ロジックとして実施され得る。
【0023】
C++プログラム言語を参照しながらいくつかの実施形態が説明されてきたが、本開示はプログラム言語によって制限されず、本開示の実施形態は、本開示の範囲から逸脱することなく他のプログラム言語に適合し得ることを理解されたい。
【0024】
図5は、本開示の一実施形態とともに使用され得るデータ処理システムの一例を示すブロック図である。たとえば、システム1500は、上記で説明された処理または方法のうち任意のものを遂行する、上記で説明されたデータ処理システムのうち任意のものを表し得、たとえば、図2のASTジェネレータ210、ASTパーサ220、検証コード・ジェネレータ230、および検証スタブ・ジェネレータ240などでよい。システム1500は多くの様々な構成要素を含むことができる。これらの構成要素は、集積回路(IC)、ICの一部分、個別の電子デバイス、またはコンピュータシステムのマザーボードもしくはアドイン・カードなどの回路基板に適合された他のモジュール、またはコンピュータシステムのシャーシの内部に別様に組み込まれた構成要素として実施され得る。
【0025】
システム1500は、コンピュータシステムの多くの構成要素の高レベルの概観を示すように意図されていることにも留意されたい。しかしながら、特定の実装形態には追加の構成要素が存在し得、その上、他の実装形態では、示された構成要素の種々の配置が生じ得ることを理解されたい。システム1500は、デスクトップ・コンピュータ、ノートパソコン、タブレット型コンピュータ、サーバ、携帯電話、メディアプレーヤ、携帯情報端末(PDA)、スマートウォッチ、パーソナル・コミュニケータ、ゲーム機、ネットワークのルータまたはハブ、無線アクセスポイント(AP)またはリピータ、セットトップ・ボックス、またはこれらの組合せを表し得る。さらに、単一のマシンまたはシステムしか示されていないが、「マシン」または「システム」という用語は、本明細書で論じられた技法のうち任意の1または複数を遂行する1組(または複数の組)の命令を個々にまたは連帯的に実行するマシンまたはシステムの任意の収集を含むと解釈されるものとする。
【0026】
一実施形態では、システム1500は、バスまたは相互接続1510を介して接続される、プロセッサ1501、メモリ1503、およびデバイス1505~1508を備える。プロセッサ1501は、単一のプロセッサコアまたは複数のプロセッサコアを含む、単一のプロセッサまたは複数のプロセッサを表し得る。プロセッサ1501は、マイクロプロセッサ、中央処理装置(CPU)等の1または複数の汎用プロセッサを表し得る。より具体的には、プロセッサ1501は、複数命令セット・コンピューティング(CISC)マイクロプロセッサ、縮小命令セット・コンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIM)マイクロプロセッサ、他の命令セットを実施するプロセッサ、または命令セットの組合せを実施するプロセッサでよい。プロセッサ1501は、特定用途向け集積回路(ASIC)、セルラー式プロセッサまたはベースバンド・プロセッサ、フィールド・プログラマブル・ゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、ネットワーク・プロセッサ、グラフィックス・プロセッサ、通信用プロセッサ、暗号プロセッサ、コプロセッサ、組み込み型プロセッサ、または命令を処理することができる何らかの他のタイプの論理などの1または複数の専用プロセッサでもよい。
【0027】
超低電圧プロセッサなど低電力のマルチコア・プロセッサ・ソケットであり得るプロセッサ1501は、システムの様々な構成要素と通信するための主処理ユニットおよび中央ハブとして働き得る。そのようなプロセッサはシステム・オン・チップ(SoC)として実施され得る。プロセッサ1501は、本明細書で論じた動作およびステップを遂行するための命令を実行するように構成されている。システム1500がさらに含み得るグラフィックス・インターフェースは、表示コントローラ、グラフィックス・プロセッサ、および/または表示デバイスを含み得る任意選択のグラフィックス・サブシステム1504と通信する。
【0028】
プロセッサ1501はメモリ1503と通信してよく、メモリ1503は、一実施形態では、所与の量のシステムメモリを与えるために複数のメモリ・デバイスによって実施され得る。メモリ1503は、ランダムアクセスメモリ(RAM)、動的RAM(DRAM)、シンクロナスDRAM(SDRAM)、静的RAM(SRAM)または他のタイプの記憶デバイスなど、1または複数の揮発性記憶(すなわちメモリ)デバイスを含み得る。メモリ1503は、プロセッサ1501または何らかの他のデバイスによって実行される命令のシーケンスを含む情報を記憶し得る。たとえば、種々のオペレーティングシステム、デバイス・ドライバ、ファームウェア(たとえば入出力基本システムすなわちBIOS)の実行可能コードおよび/またはデータ、および/またはアプリケーションがメモリ1503にロードされ、プロセッサ1501によって実行され得る。オペレーティングシステムは、たとえば、ロボットオペレーティングシステム(ROS)、マイクロソフト(登録商標)のウィンドウズ(登録商標)オペレーティングシステム、アップルのマックOS(登録商標)/iOS(登録商標)、グーグル(登録商標)のアンドロイド(登録商標)、LINUX、UNIX(登録商標)など任意の種類のオペレーティングシステム、または他のリアルタイム・オペレーティングシステムもしくは組み込み型オペレーティングシステムであり得る。
【0029】
システム1500がさらに含み得るデバイス1505~1508などのIOデバイスは、ネットワーク・インターフェース・デバイス1505、任意選択の入力デバイス1506、および他の任意選択のIOデバイス1507を含む。ネットワーク・インターフェース・デバイス1505は、無線トランシーバおよび/またはネットワーク・インターフェース・カード(NIC)を含み得る。無線トランシーバは、Wi-Fiトランシーバ、赤外線トランシーバ、ブルートゥース(登録商標)・トランシーバ、WiMaxトランシーバ、無線セルラー電話トランシーバ、衛星トランシーバ(たとえば全地球測位システム(GPS)トランシーバ)、もしくは他の無線周波数(RF)トランシーバ、またはこれらの組合せでよい。NICはイーサネット(登録商標)カードでよい。
【0030】
入力デバイス1506は、マウス、タッチパッド、タッチセンシティブ・スクリーン(表示デバイス1504に組み込まれ得る)、スタイラスなどのポインタデバイス、および/またはキーボード(たとえば物理的キーボードまたはタッチセンシティブ・スクリーンの一部分として表示されたバーチャル・キーボード)を含み得る。たとえば、入力デバイス1506はタッチスクリーンに結合されたタッチスクリーン・コントローラを含み得る。タッチスクリーンおよびタッチスクリーン・コントローラは、たとえば、それだけではないが、容量技術、抵抗技術、赤外線技術、表面弾性波技術、ならびに他の近接センサ配列またはタッチスクリーンに対する1または複数の接触点を判定するための他の要素を含む複数のタッチ感知技術のうち任意のものを使用して、接触と、動きまたは動きの中断とを検知する。
【0031】
IOデバイス1507はオーディオ・デバイスを含み得る。オーディオ・デバイスは、音声認識、音声応答、デジタル記録、および/または電話の機能など、音声対応の機能を促進するためのスピーカおよび/またはマイクロフォンを含み得る。他のIOデバイス1507は、ユニバーサル・シリアル・バス(USB)ポート、パラレルポート、シリアルポート、プリンタ、ネットワーク・インターフェース、バスブリッジ(たとえばPCI-PCIブリッジ)、センサ(たとえば加速度計、ジャイロスコープ、磁力計、光センサ、コンパス、近接センサなどの運動センサ)またはこれらの組合せをさらに含み得る。デバイス1507がさらに含み得る画像処理サブシステム(たとえばカメラ)は、写真およびビデオクリップの記録などのカメラ機能を促進するために利用される電荷結合デバイス(CCD)または相補型金属酸化膜半導体(CMOS)光センサなどの光センサを含み得る。特定のセンサがセンサ・ハブ(図示せず)を介して相互接続1510に結合されてよく、一方、キーボードまたは熱センサなど他のデバイスは、システム1500の特定の構成または設計に依拠して、組み込みコントローラ(図示せず)によって制御され得る。
【0032】
データ、アプリケーション、1または複数のオペレーティングシステムなどの情報の持続的記憶を提供するために、プロセッサ1501には大容量記憶装置(図示せず)も結合され得る。様々な実施形態において、より薄くより軽いシステム設計を可能にするばかりでなくシステム応答性も改善するために、この大容量記憶装置はソリッドステート・デバイス(SSD)によって実施されてよい。しかしながら、他の実施形態では、大容量記憶装置は、停電中にコンテキスト状態および他のそのような情報の不揮発性記憶装置を有効にするために、主として、SSDキャッシュとして働く少量のSSD記憶装置を伴うハードディスク・ドライブ(HDD)を使用して実施されてよく、その結果、システム・アクティビティの再起動において高速のパワーアップが可能になる。また、フラッシュメモリが、たとえばシリアル周辺インターフェース(SPI)を介してプロセッサ1501に結合されてよい。このフラッシュメモリは、BIOSならびにシステムの他のファームウェアを含むシステム・ソフトウェアの不揮発性記憶装置をもたらし得る。
【0033】
記憶デバイス1508が含み得るコンピュータ・アクセス可能な記憶媒体1509(マシン可読記憶媒体またはコンピュータ可読媒体としても知られている)には、本明細書で説明された技法または機能のうち任意の1または複数を具現する1または複数の命令のセットまたはソフトウェア(たとえばモジュール、ユニット、および/またはロジック1528)が記憶されている。処理モジュール/ユニット/ロジック1528は、たとえばASTジェネレータ210、ASTパーサ220、検証コード・ジェネレータ230、および検証スタブ・ジェネレータ240など、上記で説明されたコンポーネントのうち任意のものを表し得る。処理モジュール/ユニット/ロジック1528は、データ処理システム1500による実行中には、メモリ1503の内部および/またはプロセッサ1501の内部に、余すところなく、または少なくとも部分的に存在してもよく、メモリ1503およびプロセッサ1501はマシンアクセス可能な記憶媒体も構成する。処理モジュール/ユニット/ロジック1528は、ネットワーク・インターフェース・デバイス1505によってネットワークを通じてさらに送信/受信されてよい。
【0034】
コンピュータ可読記憶媒体1509は、上記で説明されたいくつかのソフトウェア機能を持続的に記憶するためにも使用され得る。例示的実施形態では、コンピュータ可読記憶媒体1509は単一の媒体であるように示されているが、「コンピュータ可読記憶媒体」という用語は、命令の1または複数のセットを記憶する単一の媒体または複数の媒体(たとえば集中型もしくは分散型のデータベース、および/または関連するキャッシュおよびサーバ)を含むように解釈されるべきである。「コンピュータ可読記憶媒体」という用語は、マシンによる実行のための命令のセットを記憶することまたは符号化することが可能であって本開示の技法のうち任意の1または複数をマシンに遂行させる任意の媒体を含むようにも解釈されるべきである。したがって、「コンピュータ可読記憶媒体」という用語は、それだけではないが、ソリッドステート・メモリならびに光媒体および磁気媒体、または何らかの他の非一時的マシン可読媒体を含むように解釈されるべきである。
【0035】
処理モジュール/ユニット/ロジック1528、構成要素および本明細書で説明された他の機能は、個別のハードウェア構成要素として実施され得、またはASIC、FPGA、DSPまたは類似のデバイスなどハードウェア構成要素の機能の中に組み込まれ得る。加えて、処理モジュール/ユニット/ロジック1528は、ハードウェアデバイスの内部のファームウェアまたは機能回路として実施され得る。さらに、処理モジュール/ユニット/ロジック1528は、ハードウェアデバイスとソフトウェア・コンポーネントの任意の組合せで実施され得る。
【0036】
システム1500は、データ処理システムの様々な構成要素を用いて示されているが、何らかの特定のアーキテクチャまたは構成要素を相互に連結するやり方を表すことは意図されておらず、そのため、詳細は、本開示の実施形態に密接な関係はないことに留意されたい。ネットワークコンピュータ、ハンドヘルドコンピュータ、携帯電話、サーバ、および/または構成要素がより少ないかもしくは恐らくより多い他のデータ処理システムも、本開示の実施形態とともに使用され得ることも理解されたい。
【0037】
先の詳細な説明のいくつかの部分は、コンピュータ記憶装置の内部のデータ・ビットにおける動作のアルゴリズムおよび記号表現の観点から提示されている。これらのアルゴリズム的な説明および表現は、データ処理技術の当業者が、著作物の要旨を他の当業者に最も効果的に伝えるために使用するやり方である。ここで、アルゴリズムは、一般に、所望の結果に達する動作の自己矛盾がないシーケンスと考えられる。動作は、物理量の物理的操作を必要とするものである。
【0038】
しかしながら、これらおよび類似の用語のすべてが、適切な物理量に関連づけられるべきであり、これらの量に与えられた好都合なラベルでしかないことを念頭に置かれたい。特に別記しない限り、上記の議論から明らかなように、説明の全体にわたって、以下の特許請求の範囲において説明されるものなどの用語を利用する議論は、コンピュータシステムのレジスタおよびメモリの内部の物理的(電子的)量として表されたデータを操作して、コンピュータシステムのメモリもしくはレジスタ、または他のそのような情報の記憶デバイス、伝送デバイスもしくは表示デバイスの内部の物理量として同様に表される他のデータへと変換するコンピュータシステム(または類似の電子計算デバイス)の作用および処理を指すことが理解される。
【0039】
本開示の実施形態は、本明細書における動作を遂行するための装置にも関する。そのようなコンピュータプログラムは非一時的コンピュータ可読媒体に記憶されている。マシン可読媒体は、マシン(たとえばコンピュータ)に可読の形態で情報を記憶するための任意の機構を含む。たとえば、マシン可読(たとえばコンピュータ可読)媒体は、マシン(たとえばコンピュータ)可読記憶媒体(たとえば読み取り専用メモリ(「ROM」)、ランダムアクセスメモリ(「RAM」)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ素子)を含む。
【0040】
先の図に表された処理または方法は、ハードウェア(たとえば回路、専用ロジックなど)、(たとえば非一時的コンピュータ可読媒体上に具現された)ソフトウェア、またはこれらの組合せを含む処理ロジックによって遂行され得る。上記では、処理または方法がいくつかの順次動作の観点から説明されているが、説明された動作のうちいくつかは異なる順序で遂行され得ることを理解されたい。その上に、いくつかの動作は、順次ではなく並行して遂行され得る。
【0041】
本開示の実施形態は、何らかの特定のプログラム言語を基準として説明されているわけではない。本明細書で説明されたような本開示の実施形態の教示を実施するために、種々のプログラム言語が使用され得ることが理解されよう。
【0042】
前述の明細書では、本開示の実施形態が特定の例示的実施形態を参照しながら説明されている。以下の特許請求の範囲で説明されるような本開示のより広範な精神および範囲から逸脱することなく、様々な修正形態が作製され得ることが明白であろう。したがって、本明細書および図面は、限定的意味ではなく例示的意味に見なされるべきである。
【表1】
【表2】
【表3】
【表4】
【表5】
図1A
図1B
図2
図3A
図3B
図3C
図3D
図4
図5