annotate paper/vmpcbc.tex @ 21:879272af0acd

Add sample codes
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Tue, 05 Jul 2016 12:00:31 +0900
parents ea7b331f263a
children fca342b9dbd5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
1 \documentclass[submit,PRO]{ipsj}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
2 \usepackage{PROpresentation}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
3 \PROheadtitle{y-n-(x): 情報処理学会プログラミング研究会 発表資料 Y年m月d日}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
4
18
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
5 \usepackage[dvipdfmx]{graphicx}
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
6 \usepackage{latexsym}
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
7 \usepackage{listings}
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
8 \lstset{
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
9 language={C},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
10 basicstyle={\small},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
11 commentstyle={\small\itshape},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
12 keywordstyle={\small\bfseries},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
13 stringstyle={\small},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
14 frame={trlb},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
15 breaklines=true,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
16 columns=[l]{fullflexible},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
17 xrightmargin=0zw,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
18 xleftmargin=3zw,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
19 lineskip=-0.5ex,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
20 captionpos=b,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
21 moredelim=**[s][\color{red}]{\"compressed}{\"},
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
22 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
23 \renewcommand{\lstlistingname}{Code}
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
24
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
25 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
26 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
27 \def\|{\verb|}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
28
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
29 \setcounter{巻数}{57}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
30 \setcounter{号数}{1}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
31 \setcounter{page}{1}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
32
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
33 % TODO: コードセグメント, Code Segment の統一
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
34
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
35
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
36 \受付{2015}{3}{4}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
37 %\再受付{2015}{7}{16} %省略可能
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
38 %\再再受付{2015}{7}{20} %省略可能
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
39 \採録{2015}{8}{1}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
40
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
41
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
42
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
43
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
44 \begin{document}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
45
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
46
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
47 \title{Continuation based C を用いたプログラムの検証手法}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
48 \etitle{Verification method of programs using Continuation based C}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
49
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
50 \affiliate{RUnivIe}{琉球大学 大学院 理工学研究科 情報工学専攻\\
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
51 Infomation Engineering Course Graduate School of Engineering and Science University of the Ryukyus}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
52 \affiliate{RUniv}{琉球大学\\
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
53 University of the Ryukyus}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
54
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
55
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
56 \author{比嘉 健太}{Yasutaka HIGA}{RUnivIe}[atton@cr.ie.u-ryukyu.ac.jp]
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
57 \author{河野 真治}{Shinji KONO}{RUniv}[kono@ie.u-ryukyu.ac.jp]
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
58
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
59 \begin{abstract}
12
96f146208607 Add TODO
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
60 % TODO: update
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
61 Continuation based C 言語によって記述されたプログラムのデータ構造の性質を検証する手法を提案する。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
62 Continuation based C とは当研究室が提案している Code Segment, Data Segment という単位でプログラムを記述する言語である。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
63 Code Segment とは処理の単位であり、データの単位である Data Segment を入力と出力に持つ。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
64 プログラム全体は Code Segment どうしの接続により表現され、あるCode Segment の出力は接続された次の Code Segment の入力となる。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
65 また、メモリ管理やエラーの処理など、本来中心に行ないたい処理と異なる処理はメタ計算として分離し、Meta Code Segment, Meta Data Segment として記述する。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
66 Code Segment の接続処理を Meta Code Segment として表現し、接続部分に検証を含めることで 元の Code Segment を変更することなくプログラムの検証を行なう。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
67 本論文では Continuatoin based C によって記述された赤黒木や Synchronized Queue といったデータ構造の性質を検証する。
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
68 \end{abstract}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
69
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
70
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
71 \begin{jkeyword}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
72 プログラミング言語, 検証, 赤黒木
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
73 \end{jkeyword}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
74
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
75 \begin{eabstract}
12
96f146208607 Add TODO
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
76 % TODO: update
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
77 We propose a verification method for programs using Continuation based C language.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
78 Our laboratory develops Continuation based C language which supports programming unit called Code Segment, Data Segment.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
79 Code segments are calculation units which have input/output data segments that data unit.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
80 Programs are represented by connections among with code segments and code segments.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
81 The output data segment of some code segment is converted to the input data segment of connected one.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
82 We introduce meta computations which split main computations and complicated computations such as memory control, error handling and more.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
83 Meta computations represented to meta code segment and meta data segment, which saves main computations.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
84 In this paper, We define a meta computation which connects code segments with verifications and verify properties of data structures such as Red-Black Tree and Synchronized Queue.
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
85 \end{eabstract}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
86
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
87 \begin{ekeyword}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
88 Programming Language, Verification, Red-Black Tree
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
89 \end{ekeyword}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
90
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
91 \maketitle
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
92
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
93 \section{コードセグメントとデータセグメント}
10
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
94 本研究は実際に動作するプログラムの信頼性を保証することを目的とする。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
95 プログラムの信頼性とは、定められた環境下においてプログラムの動作が必ず仕様を満たすことである。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
96 プログラムが仕様を満たすことを保証する手法として、プログラムの性質を証明する手法やプログラムの状態を全て数えあげるモデルチェッカなどが存在する。 % TODO ref
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
97 しかし、証明では実際に動作するコードでなく証明用にコードを書き直したり、モデルチェッカでは高速化のために抽象化した記号実行によって性質が検証されるなど、実際に動作するコードとの乖離が発生してしまう。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
98
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
99 実際に動作するコードを検証しやすいよう、本研究室ではコードセグメントとデータセグメントを用いるプログラミングスタイルを提案している。 % TODO ref?
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
100 コードセグメントとは処理の単位であり、ループを含まない単純な処理のみを行なう。
18
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
101 プログラムはコードセグメントどうしを組み合わせることにより構築される(図\ref{fig:csds})。
10
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
102 組み合わせる際のコードセグメント間における値の受け渡しにはデータセグメントを用いる。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
103 データセグメントとはデータの単位である。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
104 なお、接続されたコードセグメントには依存関係が発生するが、依存関係が無いコードセグメントは並列に実行することが可能である。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
105
18
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
106 \begin{figure}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
107 \begin{center}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
108 \includegraphics[scale=0.5]{fig/code_segment_data_segment.pdf}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
109 \caption{コードセグメントどうしの組み合わせ}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
110 \label{fig:csds}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
111 \end{center}
7d776d6abf67 Add figure
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
112 \end{figure}
10
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
113
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
114 ここで、コードセグメントどうしの接続処理について考える。
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
115 処理を表すコードセグメントどうしの接続も処理であるため、コードセグメントで表現できる。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
116 このような計算を実現するための計算をメタ計算と呼び、メタ計算を行なうコードセグメントをメタコードセグメントと呼ぶ。
10
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
117 メタコードセグメントはコードセグメント間に存在する処理と考えることもできる。
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
118 また、メタ計算に必要なデータはメタデータセグメントに格納する。
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
119 メタデータセグメントは通常の処理に必要なデータセグメントの拡張である。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
120 プログラムの性質を検証する機能をメタ計算として提供することで、ユーザが書いたコードセグメントを変更することなく、メタ計算を追加するだけでプログラムの信頼性を上げる。
10
aeb1ce0e33c8 Wrote section 1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
121
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
122 \section{Continuation based C}
17
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
123 コードセグメントとデータセグメントを用いたプログラミングスタイルで記述言語に Continuation based C\cite{cbc-clang} 言語が存在する。
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
124 Continuation based C (以下 CbC)はOSや組込みシステムなどの記述を行なうことを目標に作られた、アセンブラとC言語の中間のような言語である。
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
125 CbC におけるコードセグメントはC言語における関数に、関数呼び出しが末尾のみである制約を加えようなものである。
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
126 コードセグメントどうしの接続は goto によって表される(Code\ref{src:simpleCs})。
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
127
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
128 \begin{lstlisting}[label=src:simpleCs, caption=code]%コードセグメントの接続例 (10加算して2倍する)]
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
129 __code addTen(int a) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
130 int b = a+10;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
131 goto twice(b);
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
132 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
133
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
134 __code twice(int x) {
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
135 int y = 2*x;
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
136 goto showValue(y);
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
137 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
138 \end{lstlisting}
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
139
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
140 CbCにおけるコードセグメントは、C言語の関数宣言の返り値の型の部分に \verb/__code/ を記述して定義する。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
141 コードセグメント内部には変数の宣言やif文による分岐といったC言語の文法を用いて処理を記述する。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
142 次のコードセグメントへ接続する場合は \verb/goto/ を用いて接続先を指定する。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
143 Code\ref{src:simpleCs}の例では、2つのコードセグメント \verb/addTen/ と \verb/twice/を定義している。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
144 \verb/addTen/では int の値を受けとり、10加算して \verb/twice/ を実行する。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
145 \verb/twice/では受けとったintの値を2倍して \verb/showValue/ を実行する。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
146
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
147 また、CbCにおけるデータセグメントはC言語における構造体と共用体を用いたデータ構造である。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
148 各コードセグメントで必要な値を構造体で定義し、それらの共用体としてデータセグメントを定義する(Code\ref{src:simpleDs})。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
149
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
150 \begin{lstlisting}[label=src:simpleDs, caption=data]%データセグメントの例 (10加算して2倍する)]
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
151
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
152 union Data {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
153 struct Count {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
154 int x;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
155 } count;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
156 struct Port {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
157 unsigned int port;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
158 } port;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
159 };
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
160 \end{lstlisting}
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
161
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
162 Code\ref{src:simpleDs}ではデータセグメントとして int を持つ count と unsigned int を持つ port の2つを定義している。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
163 コードセグメントに\verb/goto/する際に利用するデータセグメントを指定することで、データセグメント内部の値で処理が行なえる。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
164
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
165 \begin{lstlisting}[label=src:stub, caption=stub]%データセグメントの利用例 (countの値を2倍する)]
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
166
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
167 __code addTen(union Data* ds, int a) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
168 int b = a+10;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
169 goto twice_stub(ds);
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
170 }
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
171
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
172 __code twice_stub(union Data* ds) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
173 goto twice(ds->count.x);
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
174 }
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
175
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
176 __code twice(int x) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
177 int y = 2*x;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
178 goto showValue(y);
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
179 }
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
180 \end{lstlisting}
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
181
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
182 Code\ref{src:stub}では \verb/twice/ の際に2倍する値は count の値であることを \verb/twice_stub/ で指定している。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
183 CbC におけるメタコードセグメントはCode\ref{src:stub}や goto する際に必ず通るコードセグメント(Code\ref{src:meta}の \verb/meta/)のように表現される。
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
184
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
185 \begin{lstlisting}[label=src:meta, caption=meta ] %メタコードセグメントを用いて接続した例]
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
186
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
187 struct Context {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
188 union Data *data;
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
189 /* メタ計算に必要なデータ */
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
190 };
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
191
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
192 __code meta(struct Context* context,
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
193 enum Code next) {
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
194
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
195 /* 接続時に行なうメタ計算を記述 */
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
196 switch (next) {
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
197 case AddTen:
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
198 /* 特定のコードセグメントへのメタ計算 */
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
199 goto addTen_stub(context);
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
200 case Twice:
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
201 goto twice_stub(context);
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
202 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
203 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
204
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
205 __code addTen(struct Context* context, int a) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
206 x = x+10;
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
207 goto meta(context, Twice);
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
208 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
209
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
210 __code twice(struct Context* context, int x) {
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
211 x = x*2;
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
212 goto meta(context, ShowValue);
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
213 }
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
214 \end{lstlisting}
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
215
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
216 メタコードセグメントの切り替えは \verb/meta/ を変更することで実現できる。
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
217 また、メタデータセグメントに相当する \verb/Context/ はデータセグメントをフィールドに持つ構造体として表現できる。
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
218
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
219 CbC におけるメタ計算の例にメモリ管理がある。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
220 メモリの確保やポインタ演算をメタコードセグメントのみで行なうことで、コードセグメント側ではメモリに由来するエラーを排除することができる。
11
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
221 また、メタ計算を切り替えることでメモリの管理方法も切り替えることができるため、不要な領域の開放するよう拡張することも容易である。
bac0852b7258 Wrote section 2
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
222
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
223 \section{メタ計算を用いたデータ構造の性質の検証}
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
224 CbC で記述されさデータ構造と、データ構造に対する処理の性質を実際に検証する。
17
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
225 検証の対象として、当研究室で CbC を用いて開発している Gears OS \cite{gears-os}における非破壊赤黒木を用いる。
13
fccf91d337c3 Writing section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
226 赤黒木とは木構造を持ったデータ構造であり、各ノードに赤と黒の色を割り当て、その色を用いて木の高さのバランスを取る。
fccf91d337c3 Writing section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
227 また、非破壊であるため木にデータを挿入、削除した際に過去の木は変更されない。
fccf91d337c3 Writing section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
228 非破壊赤黒木に求められる性質には、挿入したデータを参照できること、削除できること、値の更新ができること、操作を行なった後の木はバランスしていること、などが存在する。
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
229 本論文では任意の順番で木に要素を挿入しても木がバランスしていることを検証する。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
230
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
231 まず、検証を行なうために満たすべき仕様を定義する。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
232 仕様はデータ構造が常に満たすべき論理式として表現し、CbC のコードで記述する。
20
ea7b331f263a Update profile
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
233 検証する仕様として、木を根から辿った際に最も長い経路は最も短い経路の高々2倍に収まることを CbC で定義する(Code\ref{src:specification})。
19
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
234
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
235 \begin{lstlisting}[label=src:specification, caption=s]% 木の高さの仕様記述]
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
236
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
237 if (akashaInfo.maxHeight >
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
238 2*akashaInfo.minHeight) {
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
239 goto meta(context, ShowTrace);
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
240 }
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
241
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
242 \end{lstlisting}
c957fb73860f Add CbC sources
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
243
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
244 定義した仕様に対し、挿入する値と順番の全ての組み合わせに対して確認していく。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
245 また、仕様を満たさない反例が存在する場合はその具体的な組み合わせの値を出力する。
13
fccf91d337c3 Writing section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
246
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
247 当研究室で開発している検証用メタ計算ライブラリ akasha と、C言語の有限モデルチェッカ cbmc を用いてこの仕様を検証した。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
248 akasha では検証用の仕様をメタコードセグメントに定義する。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
249 検証に必要な木の状態の保持や挿入順番の数え上げといった状態の保持はメタデータセグメントが行なう。
17
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
250 akasha を用いて要素数13個までは任意の順で挿入を行なっても仕様が満たされることを検証した。
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
251 また、赤黒木の処理に恣意的にバグを追加した際には反例をきちんとと返した。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
252
21
879272af0acd Add sample codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
253 CbCは C とほぼ同様の構文を持つため、単純な置換でC言語に変換することができる。
14
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
254 CbCで記述された赤黒木のコードを置換でC言語に変換し、cbmcで検証する。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
255 cbmc における仕様は bool を返すコードとして記述するため、akashaと同じ仕様定義を用いることができる。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
256 任意の順番での挿入の検証にはcbmcの機能に存在する非決定的な入力を用いた。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
257 しかし、cbmcで検証できる範囲内では赤黒木の仕様を検証することはできなかった。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
258 有限モデルチェッカでは探索する状態空間を有限の数で指定し、それを越える範囲は探索しない。
784913eb2902 Wrote section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
259 cbmcで実行可能な最大の状態空間まで探索しても、バグを含んだ赤黒木に対する反例を得ることはできなかった。
13
fccf91d337c3 Writing section 3
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
260
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
261 \section{まとめと今後の課題}
15
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
262 コードセグメントとデータセグメントを用いたプログラミング手法を用いる言語CbCで記述したプログラムに対する仕様の検証を行なうことができた。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
263 メタ計算として検証を行なうことで、実際に動作するプログラムを全く変更することなくプログラムを検証した。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
264
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
265 今後の課題として、検証できる範囲の拡大や効率化、値の抽象化などがある。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
266 本論文では入力の組み合わせを全探索するため、過去に探索した形状の木に対しても探索を行なっていた。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
267 木の形状を抽象化することで探索範囲を抑えて高速に検証ができると思われる。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
268 また、抽象度を上げることで有限回でなく無限回の操作も扱いたい。
aab1f02f16e8 Wrote section 4
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
269 さらに、検証の際に証明を併用することで抽象化や状態数の削減が行なえると考えている。
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
270
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
271 \begin{thebibliography}{9}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
272
17
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
273 \bibitem{cbc-clang} 徳森海斗, 河野真治: Continuation based CのLLVM/clang 3.5上の実装について, 情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS) (2014)
84f71cc1764a Add bibliographies
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
274 \bibitem{gears-os} 伊波立樹, 東恩納琢偉, 河野真治: Code Gear、 Data Gear に基づく OS のプロトタイプ, 情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS) (2016)
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
275
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
276 \end{thebibliography}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
277
20
ea7b331f263a Update profile
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
278 \begin{biography}
ea7b331f263a Update profile
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
279 \profile{n}{比嘉健太}{2015年琉球大学工学部情報工学科卒業。2015年琉球大学大学院理工学研究科情報工学専攻入学。}
12
96f146208607 Add TODO
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
280 % TODO: update
20
ea7b331f263a Update profile
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
281 \profile{n}{河野真治}{1960年生.1982年情報処理大学理学部情報科学科卒業.
9
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
282 1984年同大学大学院修士課程修了.1987年同博士課程修了.理学博士.1987年情報処
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
283 理大学助手.1992年架空大学助教授.1997年同大教授.オンライン出版の研究
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
284 に従事.2010年情報処理記念賞受賞.電子情報通信学会,IEEE,IEEE-CS,ACM
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
285 各会員.}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
286 \end{biography}
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
287
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
288
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
289
a9e93aee0af1 Fix Newline code
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
290 \end{document}