# HG changeset patch # User atton # Date 1484793550 -32400 # Node ID 6dedd4ed6b6d3bbd9844812d129d6150ecb78795 # Parent 6bf2e0196a1e24761fe9388092c9fd9b52412968 Update cbc description diff -r 6bf2e0196a1e -r 6dedd4ed6b6d paper/cbc.tex --- a/paper/cbc.tex Thu Jan 19 11:29:13 2017 +0900 +++ b/paper/cbc.tex Thu Jan 19 11:39:10 2017 +0900 @@ -26,6 +26,8 @@ % }}} +% {{{ Continuation based C における CodeSegment と DataSegment + \section{Continuation based C における CodeSegment と DataSegment} 最も基本的な CbC のソースコードをリスト\ref{src:goto}に、ソースコードが実行される流れを図\ref{fig:goto}に示す。 Continuation based C における CodeSegment は返り値を持たない関数として表現される。 @@ -51,9 +53,22 @@ CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。 よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 -% TODO: factorial +もう少し複雑な CbC のソースコードをリスト\ref{src:factrial}に、実行される流れを図\ref{fig:factrial}に示す。 +このソースコードは整数の階乗を求めるプログラムである。 +CodeSegment factorial0 では自分自身への再帰的な継続を用いて階乗を計算している。 +軽量継続時には関数呼び出しのスタックは存在しないが、計算中の値を DataSegment で持つことで再帰を含むループ処理も行なうことができる。 + +\lstinputlisting[label=src:factrial, caption=階乗を求める CbC プログラム] {src/factrial.cbc} +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=0.8]{fig/factorial.pdf} + \caption{階乗を求める CbC プログラム} + \label{fig:factrial} + \end{center} +\end{figure} +% }}} \section{MetaCodeSegment と MetaDataSegment} \section{GearsOS} diff -r 6bf2e0196a1e -r 6dedd4ed6b6d paper/fig/factorial.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/fig/factorial.graffle Thu Jan 19 11:39:10 2017 +0900 @@ -0,0 +1,706 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle6 + 169.5.0.253125 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559.20001220703125, 782.79998779296875}} + Class + SolidGraphic + ID + 2 + Style + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2011-11-12 11:03:25 +0000 + Creator + Nobuyasu Oshiro + DisplayScale + 1 in = 1.00000 in + GraphDocumentVersion + 12 + GraphicsList + + + Bounds + {{337.67999245226383, 177.89999766647816}, {103, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 44 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto print_factorial} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 42 + + ID + 43 + Points + + {325.49999356269836, 144} + {325.49999356269836, 235.79999533295631} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 33 + + + + Bounds + {{287.99999356269836, 208.79999533295631}, {75, 54}} + Class + ShapedGraphic + ID + 42 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 print_\ +factorial} + VerticalPad + 0.0 + + + + Bounds + {{86.459999710321426, 93}, {75, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 41 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto factorial} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 3 + + ID + 40 + Points + + {48.959999710321426, 144} + {183, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 38 + + + + Bounds + {{12.959999710321426, 117}, {72, 54}} + Class + ShapedGraphic + ID + 38 + Style + + shadow + + Draws + NO + + stroke + + Cap + 2 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 main} + VerticalPad + 0.0 + + + + Bounds + {{284.99999356269836, 45.359998986124992}, {81, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 37 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto factorial0} + + Wrap + NO + + + Bounds + {{208.49999356269836, 106.55999761819839}, {81, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 36 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto factorial0} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 33 + + ID + 35 + Points + + {325.49999356269836, 144} + {294.49999356269836, 93.08203125} + {351.578125, 84.4765625} + {325.49999356269836, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 33 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 33 + + ID + 34 + Points + + {183, 144} + {325.49999356269836, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{287.99999356269836, 117}, {75, 54}} + Class + ShapedGraphic + ID + 33 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 factorial 0} + VerticalPad + 0.0 + + + + Bounds + {{147, 117}, {72, 54}} + Class + ShapedGraphic + ID + 3 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 factorial} + VerticalPad + 0.0 + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoLineLength + 0.20000000298023224 + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2016-02-14 19:48:42 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595.20001220703125, 841.79998779296875} + + NSPrintReverseOrientation + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + Expanded_Canvases + + Frame + {{87, 100}, {989, 938}} + ShowInfo + + ShowRuler + + Sidebar + + SidebarWidth + 200 + TopSlabHeight + 250 + VisibleRegion + {{0, 0}, {475, 780}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 6bf2e0196a1e -r 6dedd4ed6b6d paper/fig/factorial.pdf Binary file paper/fig/factorial.pdf has changed diff -r 6bf2e0196a1e -r 6dedd4ed6b6d paper/src/factrial.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/factrial.cbc Thu Jan 19 11:39:10 2017 +0900 @@ -0,0 +1,29 @@ +__code print_factorial(int prod) +{ + printf("factorial = %d\n", prod); + exit(0); +} + +__code factorial0(int prod, int x) +{ + if (x >= 1) { + goto factorial0(prod*x, x-1); + } else { + goto print_factorial(prod); + } + +} + +__code factorial(int x) +{ + goto factorial0(1, x); +} + +int main(int argc, char **argv) +{ + int i; + i = atoi(argv[1]); + + goto factorial(i); +} +