知識マップ: Adaの検査ロジックをC#の検査アプリから呼ぶ ── 画像バッファをコピーせずに渡し、境界で守る
記事「Adaの検査ロジックをC#の検査アプリから呼ぶ ── 画像バッファをコピーせずに渡し、境界で守る」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
WPFの検査アプリの合否の判定だけをAdaのDLLにし、C#とAdaの間にはC ABIを挟む。C#はLibraryImportによるP/Invokeで関数を呼び、画像のバッファはfixed文でピン留めして先頭のポインター、長さ、幅・高さ・strideを渡す。パラメーターと結果はStructLayoutのSequentialを付けたblittable型の構造体で、大きさを両側で比べてから使う。呼び出し規約はCdeclに合わせる。Adaの境界の関数は寸法を確かめてから同じメモリを配列として見て、SPARK_Modeを付けた判定の関数を呼ぶ。判定の関数の契約とオーバーフローの不在は、ループ不変条件を付けてGNATproveで証明する。境界の関数はAdaの例外をエラーコードに変え、未処理例外としてC#へ出さない。ライブラリはGPRbuildでスタンドアロンライブラリとして作り、自動でエラボレーションを行う。WindowsではDLLになり、GNATのランタイムのDLLとともにアプリのフォルダーに置く。WPFの画面ではUI要素を作ったスレッドから結果を表示する。
flowchart LR
accTitle: Adaの検査ロジックをC#から呼ぶ記事の知識マップ
accDescr: AdaとCの相互運用がC ABIを使い、C#からはLibraryImportによるP/Invokeでfixed文でピン留めした画像とblittable型の構造体を渡すこと、判定の関数をSPARKとGNATproveで証明すること、スタンドアロンライブラリがエラボレーションを自動で行いWindowsではDLLになること、例外を境界で止めることを示す図。
ada_c_interop["AdaとC/C++の相互運用(Annex B)"]
p_invoke["P/Invoke"]
c_abi["C ABI(Application Binary Interface)"]
libraryimport["LibraryImport"]
csharp_fixed_statement["fixed文(C#)"]
blittable_type["blittable型"]
structlayout["StructLayout"]
calling_convention["呼び出し規約(calling convention)"]
dll["DLL(ダイナミックリンクライブラリ)"]
spark["SPARK"]
gnatprove["GNATprove"]
spark_mode["SPARK_Mode"]
design_by_contract["契約による設計(Pre/Post)"]
integer_overflow["整数オーバーフロー"]
unhandled_exception["未処理例外"]
ada_stand_alone_library["スタンドアロンライブラリ(Stand-alone Library)"]
gprbuild["GPRbuild"]
ada_elaboration["エラボレーション(elaboration)"]
ada_task["Adaのタスク(並行処理)"]
dll_search_order["DLLの検索順序"]
wpf["WPF"]
ui_thread_context["UIスレッドのコンテキスト"]
ada_c_interop -->|"利用する"| c_abi
libraryimport -->|"実装を担う"| p_invoke
p_invoke -->|"利用する"| csharp_fixed_statement
p_invoke -->|"利用する"| blittable_type
blittable_type -.->|"で構成できる"| structlayout
p_invoke -->|"前提とする"| calling_convention
p_invoke -->|"利用する"| dll
spark -->|"利用する"| gnatprove
gnatprove -->|"で構成できる"| spark_mode
design_by_contract -->|"で確認できる"| gnatprove
integer_overflow -->|"で確認できる"| gnatprove
ada_c_interop -.->|"原因になり得る"| unhandled_exception
ada_stand_alone_library -->|"で構成できる"| gprbuild
ada_stand_alone_library -.->|"自動化する"| ada_elaboration
ada_task -.->|"両立しない"| ada_stand_alone_library
ada_stand_alone_library -.->|"利用する"| dll
dll -.->|"前提とする"| dll_search_order
wpf -->|"前提とする"| ui_thread_context
概念間の関係(全18件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- AdaとC/C++の相互運用(Annex B)はC ABI(Application Binary Interface)を利用します。
- LibraryImportはP/Invokeの実装を担います。
- P/Invokeはfixed文(C#)を利用します。
- P/Invokeはblittable型を利用します。
- blittable型はStructLayoutで構成できます。
- P/Invokeは呼び出し規約(calling convention)を前提とします。
- P/InvokeはDLL(ダイナミックリンクライブラリ)を利用します。
- SPARKはGNATproveを利用します。
- GNATproveはSPARK_Modeで構成できます。
- 契約による設計(Pre/Post)はGNATproveで確認できます。
- 整数オーバーフローはGNATproveで確認できます。
- AdaとC/C++の相互運用(Annex B)は未処理例外の原因になることがあります。
- スタンドアロンライブラリ(Stand-alone Library)はGPRbuildで構成できます。
- スタンドアロンライブラリ(Stand-alone Library)はエラボレーション(elaboration)を自動化します。
- Adaのタスク(並行処理)はスタンドアロンライブラリ(Stand-alone Library)と両立しません。
- スタンドアロンライブラリ(Stand-alone Library)はDLL(ダイナミックリンクライブラリ)を利用します。
- DLL(ダイナミックリンクライブラリ)はDLLの検索順序を前提とします。
- WPFはUIスレッドのコンテキストを前提とします。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。