title: Type System of Continuation based C author: Yasutaka Higa profile: lang: Japanese # 研究目的 * 動作するプログラムの信頼性を保証したい * 検証を行ないやすい単位としてプログラムをコードセグメントとデータセグメントという単位で記述する * プログラムはコードセグメントという処理の集合として表され、相互に接続される * 接続部分をメタ計算として定義し、その切り替えでプログラムの検証を行う # 研究内容 * コードセグメントとデータセグメントを用いて記述する言語 Continuation based C に型を導入する * CbCでは接続するコードセグメント群を元にデータセグメントを定義するためにプログラムの再利用性が高めづらい * 型情報を用いてコードセグメントが接続可能かどうかをコンパイラやランタイムが判断できるようにする * また、接続に必要なデータセグメントやスタブを自動生成する # 近況報告 * CbC の型の定義をしています * 単純型付き lambda 計算 * 直積での定義 * 制約の列を取るようにしてみる * 部分型での定義 # 単純型付き lambda 計算 * CodeSegment は 値を取って値を返すもの * 1つの値を渡す/返すができる * 複数の入力なら currying でなんとかなる * 複数の値を返せない # 直積での定義 * CodeSegment は直積を取って直積を返すもの * 複数の値を渡す/返す ができる * 合成もできる * 割と良いが codesegment を取る codesegment の定義が難しい * pop : CodeSegment (stackImpl × (CodeSegment (stackImpl × Maybe a) t)) t * (stackImpl × Maybe a) -> t * のみしか渡せない * (stackImpl × Maybe a × b) -> c とか書けない # 制約の列を取るようにしてみる * CodeSegment は特定の field を持つ DS を取って返すもの * 『特定のfieldを持つ』という制約は各csの InputDS が必要とする field * 合成したら制約が増えていく、というアイデア * そもそも関数が合成できなかった ``` f : CodeSegment I O [] g : CodeSegment I1 O2 [] f ∘ g : CodeSegment I O2 [O , I2] ``` # 部分型での定義 * CodeSegment は Context に含まれる DS を取ってDSを返すもの * 一旦 Context に変換してやることで関数合成もできる * 『Contextの情報から合成可能か判断できる』ので性質は OpenSystem に使えそう * 定義と合成が書けました * が、メタ計算の定義をしようと思ったら一筋縄ではない # メタ計算の定義がどうしてできないのか * Context が確定するとCodeSegmentの定義・合成可能なのですが * Stack のコードは Context に CodeSegment (next)を持つ * ので Stack が定義できないと Context が定義できず、Context が決まらないとStackの実装が書けない # あとやること * メタ計算を部分型でどう書くか * メタ計算がMonadになるか * 修論の目次 * 修論の本体