知識マップ: 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要素を作ったスレッドから結果を表示する。

Adaの検査ロジックをC#から呼ぶ記事の知識マップAdaとCの相互運用がC ABIを使い、C#からはLibraryImportによるP/Invokeでfixed文でピン留めした画像とblittable型の構造体を渡すこと、判定の関数をSPARKとGNATproveで証明すること、スタンドアロンライブラリがエラボレーションを自動で行いWindowsではDLLになること、例外を境界で止めることを示す図。利用する実装を担う利用する利用するで構成できる前提とする利用する利用するで構成できるで確認できるで確認できる原因になり得るで構成できる自動化する両立しない利用する前提とする前提とするAdaとC/C++の相互運用(Annex B)P/InvokeC ABI(Application Binary Interface)LibraryImportfixed文(C#)blittable型StructLayout呼び出し規約(calling convention)DLL(ダイナミックリンクライブラリ)SPARKGNATproveSPARK_Mode契約による設計(Pre/Post)整数オーバーフロー未処理例外スタンドアロンライブラリ(Stand-alone Library)GPRbuildエラボレーション(elaboration)Adaのタスク(並行処理)DLLの検索順序WPFUIスレッドのコンテキスト

概念間の関係(全18件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

AdaとC/C++の相互運用(Annex B)
Ada参照マニュアルの附属書Bで標準化された、C・Fortranなど他言語とのインターフェース機構。ImportやExportで双方向の呼び出しができる。
P/Invoke
C#などの.NETコードからアンマネージドなC関数群を呼び出すための、.NETの標準的な相互運用機構。
LibraryImport
.NET 7で追加された、partialメソッドに対しコンパイル時にP/Invokeのマーシャリングコードを生成するソースジェネレーター。
blittable型
マネージドコードとアンマネージドコードの間でメモリ表現が同一で、変換なしにそのまま受け渡せる型。UnmanagedCallersOnlyを付けたメソッドのシグネチャに使える型はこれに限られる。
SPARK
プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。
GNATprove
AdaCoreが提供する、SPARKコードの契約や表明を自動証明器で検証するコマンドラインツールである。
契約による設計(Pre/Post)
サブプログラムの入口での前提条件(Pre)と、出口で保証する性質(Post)を宣言的に記述する、Ada 2012の契約機構である。
整数オーバーフロー
整数の演算結果が、その型で表せる範囲を超えること。言語と設定によって、例外・パニック・折り返しのいずれかになる。Adaでは、値が型の基本範囲に収まるかを確かめるOverflow_Checkに失敗すると、実行時にConstraint_Errorが送出される。
スタンドアロンライブラリ(Stand-alone Library)
GPRbuildのライブラリプロジェクトでLibrary_Interfaceに外部へ見せるユニットを指定して作るAdaのライブラリ。初期化と終了処理の手続きを持ち、Ada以外の言語のプログラムから使える。
Adaのタスク(並行処理)
スレッドをOSのAPIやライブラリに頼らず、言語仕様に組み込む形で提供するAdaの並行実行単位。
DLL(ダイナミックリンクライブラリ)
実行時に読み込まれ、関数やデータを他のモジュールと共有できるWindowsのバイナリモジュール。
WPF
XAMLでUIを宣言的に記述する、Windows専用のデスクトップUIフレームワーク。ベクターベースの描画とデータバインディングを特徴とする。

機械可読データ

このデータセットについて

作成
合同会社小村ソフト
ライセンス
CC BY 4.0 ── 出典(合同会社小村ソフト)とライセンスへのリンクを明示し、改変した場合はその旨を示すことを条件に、再配布・改変を含めて再利用できます
最終確認日
2026-11-10 ── 収録する関係のうち、最後に出典と照合した日

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。