# HG changeset patch # User anatofuz # Date 1612745390 -32400 # Node ID 6f2af8e66c35437cd1fb31671994669d6850d131 # Parent 4e800dcf936e8122741dbc605ddafc0e6781a110 update diff -r 4e800dcf936e -r 6f2af8e66c35 slide/gears_structure.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slide/gears_structure.svg Mon Feb 08 09:49:50 2021 +0900 @@ -0,0 +1,645 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 4e800dcf936e -r 6f2af8e66c35 slide/index.html --- a/slide/index.html Mon Feb 08 08:51:56 2021 +0900 +++ b/slide/index.html Mon Feb 08 09:49:50 2021 +0900 @@ -8,7 +8,7 @@ * @auto-scaling true * @size 4:3 960px 720px */div#p>svg>foreignObject>section .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}div#p>svg>foreignObject>section .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}div#p>svg>foreignObject>section .anchor:focus{outline:none}div#p>svg>foreignObject>section h1 .octicon-link,div#p>svg>foreignObject>section h2 .octicon-link,div#p>svg>foreignObject>section h3 .octicon-link,div#p>svg>foreignObject>section h4 .octicon-link,div#p>svg>foreignObject>section h5 .octicon-link,div#p>svg>foreignObject>section h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}div#p>svg>foreignObject>section h1:hover .anchor,div#p>svg>foreignObject>section h2:hover .anchor,div#p>svg>foreignObject>section h3:hover .anchor,div#p>svg>foreignObject>section h4:hover .anchor,div#p>svg>foreignObject>section h5:hover .anchor,div#p>svg>foreignObject>section h6:hover .anchor{text-decoration:none}div#p>svg>foreignObject>section h1:hover .anchor .octicon-link,div#p>svg>foreignObject>section h2:hover .anchor .octicon-link,div#p>svg>foreignObject>section h3:hover .anchor .octicon-link,div#p>svg>foreignObject>section h4:hover .anchor .octicon-link,div#p>svg>foreignObject>section h5:hover .anchor .octicon-link,div#p>svg>foreignObject>section h6:hover .anchor .octicon-link{visibility:visible}div#p>svg>foreignObject>section h1:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h2:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h3:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h4:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h5:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h6:hover .anchor .octicon-link:before{width:16px;height:16px;content:" ";display:inline-block;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' d='M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z'/%3E%3C/svg%3E")}div#p>svg>foreignObject>section{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5;word-wrap:break-word}div#p>svg>foreignObject>section{--marpit-root-font-size:16px}div#p>svg>foreignObject>section details{display:block}div#p>svg>foreignObject>section summary{display:list-item}div#p>svg>foreignObject>section a{background-color:initial}div#p>svg>foreignObject>section a:active,div#p>svg>foreignObject>section a:hover{outline-width:0}div#p>svg>foreignObject>section strong{font-weight:inherit;font-weight:bolder}div#p>svg>foreignObject>section h1{margin:.67em 0}div#p>svg>foreignObject>section img{border-style:none}div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section kbd,div#p>svg>foreignObject>section pre{font-family:monospace,monospace;font-size:1em}div#p>svg>foreignObject>section hr{box-sizing:initial;overflow:visible}div#p>svg>foreignObject>section input{font:inherit;margin:0;overflow:visible}div#p>svg>foreignObject>section [type=checkbox]{padding:0}div#p>svg>foreignObject>section *,div#p>svg>foreignObject>section [type=checkbox]{box-sizing:border-box}div#p>svg>foreignObject>section input{font-family:inherit;font-size:inherit;line-height:inherit}div#p>svg>foreignObject>section a{color:#0366d6;text-decoration:none}div#p>svg>foreignObject>section a:hover{text-decoration:underline}div#p>svg>foreignObject>section strong{font-weight:600}div#p>svg>foreignObject>section hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #dfe2e5}div#p>svg>foreignObject>section hr:after,div#p>svg>foreignObject>section hr:before{display:table;content:""}div#p>svg>foreignObject>section hr:after{clear:both}div#p>svg>foreignObject>section table{border-spacing:0;border-collapse:collapse}div#p>svg>foreignObject>section td,div#p>svg>foreignObject>section th{padding:0}div#p>svg>foreignObject>section details summary{cursor:pointer}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section h1{font-size:32px}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{font-weight:600}div#p>svg>foreignObject>section h2{font-size:24px}div#p>svg>foreignObject>section h3{font-size:20px}div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4{font-weight:600}div#p>svg>foreignObject>section h4{font-size:16px}div#p>svg>foreignObject>section h5{font-size:14px}div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{font-weight:600}div#p>svg>foreignObject>section h6{font-size:12px}div#p>svg>foreignObject>section p{margin-top:0;margin-bottom:10px}div#p>svg>foreignObject>section blockquote{margin:0}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:0;margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ul ol{list-style-type:lower-roman}div#p>svg>foreignObject>section ol ol ol,div#p>svg>foreignObject>section ol ul ol,div#p>svg>foreignObject>section ul ol ol,div#p>svg>foreignObject>section ul ul ol{list-style-type:lower-alpha}div#p>svg>foreignObject>section dd{margin-left:0}div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px}div#p>svg>foreignObject>section pre{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section input::-webkit-inner-spin-button,div#p>svg>foreignObject>section input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;appearance:none}div#p>svg>foreignObject>section :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}div#p>svg>foreignObject>section .border{border:1px solid #e1e4e8!important}div#p>svg>foreignObject>section .border-0{border:0!important}div#p>svg>foreignObject>section .border-bottom{border-bottom:1px solid #e1e4e8!important}div#p>svg>foreignObject>section .rounded-1{border-radius:3px!important}div#p>svg>foreignObject>section .bg-white{background-color:#fff!important}div#p>svg>foreignObject>section .bg-gray-light{background-color:#fafbfc!important}div#p>svg>foreignObject>section .text-gray-light{color:#6a737d!important}div#p>svg>foreignObject>section .pl-3,div#p>svg>foreignObject>section .px-3{padding-left:16px!important}div#p>svg>foreignObject>section .px-3{padding-right:16px!important}div#p>svg>foreignObject>section .f6{font-size:12px!important}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.f6{--marpit-root-font-size:12px!important}div#p>svg>foreignObject>section .lh-condensed{line-height:1.25!important}div#p>svg>foreignObject>section .text-bold{font-weight:600!important}div#p>svg>foreignObject>section .pl-c{color:#6a737d}div#p>svg>foreignObject>section .pl-c1,div#p>svg>foreignObject>section .pl-s .pl-v{color:#005cc5}div#p>svg>foreignObject>section .pl-e,div#p>svg>foreignObject>section .pl-en{color:#6f42c1}div#p>svg>foreignObject>section .pl-s .pl-s1,div#p>svg>foreignObject>section .pl-smi{color:#24292e}div#p>svg>foreignObject>section .pl-ent{color:#22863a}div#p>svg>foreignObject>section .pl-k{color:#d73a49}div#p>svg>foreignObject>section .pl-pds,div#p>svg>foreignObject>section .pl-s,div#p>svg>foreignObject>section .pl-s .pl-pse .pl-s1,div#p>svg>foreignObject>section .pl-sr,div#p>svg>foreignObject>section .pl-sr .pl-cce,div#p>svg>foreignObject>section .pl-sr .pl-sra,div#p>svg>foreignObject>section .pl-sr .pl-sre{color:#032f62}div#p>svg>foreignObject>section .pl-smw,div#p>svg>foreignObject>section .pl-v{color:#e36209}div#p>svg>foreignObject>section .pl-bu{color:#b31d28}div#p>svg>foreignObject>section .pl-ii{color:#fafbfc;background-color:#b31d28}div#p>svg>foreignObject>section .pl-c2{color:#fafbfc;background-color:#d73a49}div#p>svg>foreignObject>section .pl-c2:before{content:"^M"}div#p>svg>foreignObject>section .pl-sr .pl-cce{font-weight:700;color:#22863a}div#p>svg>foreignObject>section .pl-ml{color:#735c0f}div#p>svg>foreignObject>section .pl-mh,div#p>svg>foreignObject>section .pl-mh .pl-en,div#p>svg>foreignObject>section .pl-ms{font-weight:700;color:#005cc5}div#p>svg>foreignObject>section .pl-mi{font-style:italic;color:#24292e}div#p>svg>foreignObject>section .pl-mb{font-weight:700;color:#24292e}div#p>svg>foreignObject>section .pl-md{color:#b31d28;background-color:#ffeef0}div#p>svg>foreignObject>section .pl-mi1{color:#22863a;background-color:#f0fff4}div#p>svg>foreignObject>section .pl-mc{color:#e36209;background-color:#ffebda}div#p>svg>foreignObject>section .pl-mi2{color:#f6f8fa;background-color:#005cc5}div#p>svg>foreignObject>section .pl-mdr{font-weight:700;color:#6f42c1}div#p>svg>foreignObject>section .pl-ba{color:#586069}div#p>svg>foreignObject>section .pl-sg{color:#959da5}div#p>svg>foreignObject>section .pl-corl{text-decoration:underline;color:#032f62}div#p>svg>foreignObject>section .mb-0{margin-bottom:0!important}div#p>svg>foreignObject>section .my-2{margin-bottom:8px!important;margin-top:8px!important}div#p>svg>foreignObject>section .pl-0{padding-left:0!important}div#p>svg>foreignObject>section .py-0{padding-top:0!important;padding-bottom:0!important}div#p>svg>foreignObject>section .pl-1{padding-left:4px!important}div#p>svg>foreignObject>section .pl-2{padding-left:8px!important}div#p>svg>foreignObject>section .py-2{padding-top:8px!important;padding-bottom:8px!important}div#p>svg>foreignObject>section .pl-3{padding-left:16px!important}div#p>svg>foreignObject>section .pl-4{padding-left:24px!important}div#p>svg>foreignObject>section .pl-5{padding-left:32px!important}div#p>svg>foreignObject>section .pl-6{padding-left:40px!important}div#p>svg>foreignObject>section .pl-7{padding-left:48px!important}div#p>svg>foreignObject>section .pl-8{padding-left:64px!important}div#p>svg>foreignObject>section .pl-9{padding-left:80px!important}div#p>svg>foreignObject>section .pl-10{padding-left:96px!important}div#p>svg>foreignObject>section .pl-11{padding-left:112px!important}div#p>svg>foreignObject>section .pl-12{padding-left:128px!important}div#p>svg>foreignObject>section hr{border-bottom-color:#eee}div#p>svg>foreignObject>section kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #d1d5da;border-radius:3px;box-shadow:inset 0 -1px 0 #d1d5da}div#p>svg>foreignObject>section:after,div#p>svg>foreignObject>section:before{display:table - /* content:""; */}div#p>svg>foreignObject>section:after{clear:both}div#p>svg>foreignObject>section>:first-child{margin-top:0!important}div#p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section dl,div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section p,div#p>svg>foreignObject>section pre,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-top:0;margin-bottom:16px}div#p>svg>foreignObject>section hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}div#p>svg>foreignObject>section blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}div#p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}div#p>svg>foreignObject>section h1{font-size:2em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}div#p>svg>foreignObject>section h2{font-size:1.5em}div#p>svg>foreignObject>section h3{font-size:1.25em}div#p>svg>foreignObject>section h4{font-size:1em}div#p>svg>foreignObject>section h5{font-size:.875em}div#p>svg>foreignObject>section h6{font-size:.85em;color:#6a737d}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:2em}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ol ul,div#p>svg>foreignObject>section ul ol,div#p>svg>foreignObject>section ul ul{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section li{word-wrap:break-all}div#p>svg>foreignObject>section li>p{margin-top:16px}div#p>svg>foreignObject>section li+li{margin-top:.25em}div#p>svg>foreignObject>section dl{padding:0}div#p>svg>foreignObject>section dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}div#p>svg>foreignObject>section dl dd{padding:0 16px;margin-bottom:16px}div#p>svg>foreignObject>section table{display:block;width:100%;overflow:auto}div#p>svg>foreignObject>section table th{font-weight:600}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{padding:6px 13px;border:1px solid #dfe2e5}div#p>svg>foreignObject>section table tr{background-color:#fff;border-top:1px solid #c6cbd1}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:#f6f8fa}div#p>svg>foreignObject>section img{max-width:100%;box-sizing:initial;background-color:#fff}div#p>svg>foreignObject>section img[align=right]{padding-left:20px}div#p>svg>foreignObject>section img[align=left]{padding-right:20px}div#p>svg>foreignObject>section code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}div#p>svg>foreignObject>section pre{word-wrap:normal}div#p>svg>foreignObject>section pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight pre{margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}div#p>svg>foreignObject>section pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:initial;border:0}div#p>svg>foreignObject>section .commit-tease-sha{display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:90%;color:#444d56}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.commit-tease-sha{--marpit-root-font-size:90%}div#p>svg>foreignObject>section .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}div#p>svg>foreignObject>section .blob-wrapper{overflow-x:auto;overflow-y:hidden}div#p>svg>foreignObject>section .blob-wrapper-embedded{max-height:240px;overflow-y:auto}div#p>svg>foreignObject>section .blob-num{width:1%;min-width:50px;padding-right:10px;padding-left:10px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:20px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-num{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .blob-num:hover{color:rgba(27,31,35,.6)}div#p>svg>foreignObject>section .blob-num:before{content:attr(data-line-number)}div#p>svg>foreignObject>section .blob-code{position:relative;padding-right:10px;padding-left:10px;line-height:20px;vertical-align:top}div#p>svg>foreignObject>section .blob-code-inner{overflow:visible;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;color:#24292e;word-wrap:normal;white-space:pre}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-code-inner{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .pl-token.active,div#p>svg>foreignObject>section .pl-token:hover{cursor:pointer;background:#ffea7f}div#p>svg>foreignObject>section .tab-size[data-tab-size="1"]{-moz-tab-size:1;-o-tab-size:1;tab-size:1}div#p>svg>foreignObject>section .tab-size[data-tab-size="2"]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}div#p>svg>foreignObject>section .tab-size[data-tab-size="3"]{-moz-tab-size:3;-o-tab-size:3;tab-size:3}div#p>svg>foreignObject>section .tab-size[data-tab-size="4"]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}div#p>svg>foreignObject>section .tab-size[data-tab-size="5"]{-moz-tab-size:5;-o-tab-size:5;tab-size:5}div#p>svg>foreignObject>section .tab-size[data-tab-size="6"]{-moz-tab-size:6;-o-tab-size:6;tab-size:6}div#p>svg>foreignObject>section .tab-size[data-tab-size="7"]{-moz-tab-size:7;-o-tab-size:7;tab-size:7}div#p>svg>foreignObject>section .tab-size[data-tab-size="8"]{-moz-tab-size:8;-o-tab-size:8;tab-size:8}div#p>svg>foreignObject>section .tab-size[data-tab-size="9"]{-moz-tab-size:9;-o-tab-size:9;tab-size:9}div#p>svg>foreignObject>section .tab-size[data-tab-size="10"]{-moz-tab-size:10;-o-tab-size:10;tab-size:10}div#p>svg>foreignObject>section .tab-size[data-tab-size="11"]{-moz-tab-size:11;-o-tab-size:11;tab-size:11}div#p>svg>foreignObject>section .tab-size[data-tab-size="12"]{-moz-tab-size:12;-o-tab-size:12;tab-size:12}div#p>svg>foreignObject>section .task-list-item{list-style-type:none}div#p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:3px}div#p>svg>foreignObject>section .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}div#p>svg>foreignObject>section .hljs{display:block;background:#fff;padding:.5em;color:#333;overflow-x:auto}div#p>svg>foreignObject>section .hljs-comment,div#p>svg>foreignObject>section .hljs-meta{color:#969896}div#p>svg>foreignObject>section .hljs-emphasis,div#p>svg>foreignObject>section .hljs-quote,div#p>svg>foreignObject>section .hljs-strong,div#p>svg>foreignObject>section .hljs-template-variable,div#p>svg>foreignObject>section .hljs-variable{color:#df5000}div#p>svg>foreignObject>section .hljs-keyword,div#p>svg>foreignObject>section .hljs-selector-tag,div#p>svg>foreignObject>section .hljs-type{color:#d73a49}div#p>svg>foreignObject>section .hljs-attribute,div#p>svg>foreignObject>section .hljs-bullet,div#p>svg>foreignObject>section .hljs-literal,div#p>svg>foreignObject>section .hljs-symbol{color:#0086b3}div#p>svg>foreignObject>section .hljs-name,div#p>svg>foreignObject>section .hljs-section{color:#63a35c}div#p>svg>foreignObject>section .hljs-tag{color:#333}div#p>svg>foreignObject>section .hljs-attr,div#p>svg>foreignObject>section .hljs-selector-attr,div#p>svg>foreignObject>section .hljs-selector-class,div#p>svg>foreignObject>section .hljs-selector-id,div#p>svg>foreignObject>section .hljs-selector-pseudo,div#p>svg>foreignObject>section .hljs-title{color:#6f42c1}div#p>svg>foreignObject>section .hljs-addition{color:#55a532;background-color:#eaffea}div#p>svg>foreignObject>section .hljs-deletion{color:#bd2c00;background-color:#ffecec}div#p>svg>foreignObject>section .hljs-link{text-decoration:underline}div#p>svg>foreignObject>section .hljs-number{color:#005cc5}div#p>svg>foreignObject>section .hljs-string{color:#032f62}div#p>svg>foreignObject>section svg[data-marp-fitting=svg]{max-height:563px}div#p>svg>foreignObject>section h1{color:#246;font-size:1.6em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{border-bottom:none}div#p>svg>foreignObject>section h2{font-size:1.3em}div#p>svg>foreignObject>section h3{font-size:1.1em}div#p>svg>foreignObject>section h4{font-size:1.05em}div#p>svg>foreignObject>section h5{font-size:1em}div#p>svg>foreignObject>section h6{font-size:.9em}div#p>svg>foreignObject>section h1 strong,div#p>svg>foreignObject>section h2 strong,div#p>svg>foreignObject>section h3 strong,div#p>svg>foreignObject>section h4 strong,div#p>svg>foreignObject>section h5 strong,div#p>svg>foreignObject>section h6 strong{font-weight:inherit;color:#48c}div#p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#p>svg>foreignObject>section pre{border:1px solid #999;line-height:1.15;overflow:visible}div#p>svg>foreignObject>section pre code svg[data-marp-fitting=svg]{max-height:529px}div#p>svg>foreignObject>section footer,div#p>svg>foreignObject>section header{margin:0;position:absolute;left:30px;color:hsla(0,0%,40%,.75);font-size:18px}div#p>svg>foreignObject>section header{top:21px}div#p>svg>foreignObject>section footer{bottom:21px}div#p>svg>foreignObject>section{align-items:stretch;background:#fff;display:flex;flex-direction:column;flex-wrap:nowrap;font-size:29px;height:720px;justify-content:center;padding:78.5px;width:1280px}div#p>svg>foreignObject>section{--marpit-root-font-size:29px}div#p>svg>foreignObject>section>:last-child,div#p>svg>foreignObject>section[data-footer]>:nth-last-child(2){margin-bottom:0}div#p>svg>foreignObject>section>:first-child,div#p>svg>foreignObject>section>header:first-child+*{margin-top:0}div#p>svg>foreignObject>section:after{position:absolute;padding:0;right:30px;bottom:21px;font-size:24px;color:#777}div#p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#p>svg>foreignObject>section.invert{background-color:#222;color:#e6eaf0}div#p>svg>foreignObject>section.invert:after{color:#999}div#p>svg>foreignObject>section.invert img{background-color:transparent}div#p>svg>foreignObject>section.invert a{color:#50b3ff}div#p>svg>foreignObject>section.invert h1{color:#a3c5e7}div#p>svg>foreignObject>section.invert h2,div#p>svg>foreignObject>section.invert h3,div#p>svg>foreignObject>section.invert h4,div#p>svg>foreignObject>section.invert h5{color:#ebeff5}div#p>svg>foreignObject>section.invert blockquote,div#p>svg>foreignObject>section.invert h6{border-color:#3d3f43;color:#939699}div#p>svg>foreignObject>section.invert h1 strong,div#p>svg>foreignObject>section.invert h2 strong,div#p>svg>foreignObject>section.invert h3 strong,div#p>svg>foreignObject>section.invert h4 strong,div#p>svg>foreignObject>section.invert h5 strong,div#p>svg>foreignObject>section.invert h6 strong{color:#7bf}div#p>svg>foreignObject>section.invert hr{background-color:#3d3f43}div#p>svg>foreignObject>section.invert footer,div#p>svg>foreignObject>section.invert header{color:hsla(0,0%,60%,.75)}div#p>svg>foreignObject>section.invert code,div#p>svg>foreignObject>section.invert kbd{background-color:#111}div#p>svg>foreignObject>section.invert kbd{border-color:#666;box-shadow:inset 0 -1px 0 #555;color:#e6eaf0}div#p>svg>foreignObject>section.invert table tr{background-color:#12181d;border-color:#60657b}div#p>svg>foreignObject>section.invert table tr:nth-child(2n){background-color:#1b2024}div#p>svg>foreignObject>section.invert table td,div#p>svg>foreignObject>section.invert table th{border-color:#5b5e61}div#p>svg>foreignObject>section.invert pre{background-color:#0a0e12;border-color:#777}div#p>svg>foreignObject>section.invert pre code{background-color:transparent}div#p>svg>foreignObject>section[data-color] h1,div#p>svg>foreignObject>section[data-color] h2,div#p>svg>foreignObject>section[data-color] h3,div#p>svg>foreignObject>section[data-color] h4,div#p>svg>foreignObject>section[data-color] h5,div#p>svg>foreignObject>section[data-color] h6{color:currentColor}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+ /* content:""; */}div#p>svg>foreignObject>section:after{clear:both}div#p>svg>foreignObject>section>:first-child{margin-top:0!important}div#p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section dl,div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section p,div#p>svg>foreignObject>section pre,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-top:0;margin-bottom:16px}div#p>svg>foreignObject>section hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}div#p>svg>foreignObject>section blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}div#p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}div#p>svg>foreignObject>section h1{font-size:2em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}div#p>svg>foreignObject>section h2{font-size:1.5em}div#p>svg>foreignObject>section h3{font-size:1.25em}div#p>svg>foreignObject>section h4{font-size:1em}div#p>svg>foreignObject>section h5{font-size:.875em}div#p>svg>foreignObject>section h6{font-size:.85em;color:#6a737d}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:2em}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ol ul,div#p>svg>foreignObject>section ul ol,div#p>svg>foreignObject>section ul ul{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section li{word-wrap:break-all}div#p>svg>foreignObject>section li>p{margin-top:16px}div#p>svg>foreignObject>section li+li{margin-top:.25em}div#p>svg>foreignObject>section dl{padding:0}div#p>svg>foreignObject>section dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}div#p>svg>foreignObject>section dl dd{padding:0 16px;margin-bottom:16px}div#p>svg>foreignObject>section table{display:block;width:100%;overflow:auto}div#p>svg>foreignObject>section table th{font-weight:600}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{padding:6px 13px;border:1px solid #dfe2e5}div#p>svg>foreignObject>section table tr{background-color:#fff;border-top:1px solid #c6cbd1}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:#f6f8fa}div#p>svg>foreignObject>section img{max-width:100%;box-sizing:initial;background-color:#fff}div#p>svg>foreignObject>section img[align=right]{padding-left:20px}div#p>svg>foreignObject>section img[align=left]{padding-right:20px}div#p>svg>foreignObject>section code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}div#p>svg>foreignObject>section pre{word-wrap:normal}div#p>svg>foreignObject>section pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight pre{margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}div#p>svg>foreignObject>section pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:initial;border:0}div#p>svg>foreignObject>section .commit-tease-sha{display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:90%;color:#444d56}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.commit-tease-sha{--marpit-root-font-size:90%}div#p>svg>foreignObject>section .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}div#p>svg>foreignObject>section .blob-wrapper{overflow-x:auto;overflow-y:hidden}div#p>svg>foreignObject>section .blob-wrapper-embedded{max-height:240px;overflow-y:auto}div#p>svg>foreignObject>section .blob-num{width:1%;min-width:50px;padding-right:10px;padding-left:10px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:20px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-num{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .blob-num:hover{color:rgba(27,31,35,.6)}div#p>svg>foreignObject>section .blob-num:before{content:attr(data-line-number)}div#p>svg>foreignObject>section .blob-code{position:relative;padding-right:10px;padding-left:10px;line-height:20px;vertical-align:top}div#p>svg>foreignObject>section .blob-code-inner{overflow:visible;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;color:#24292e;word-wrap:normal;white-space:pre}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-code-inner{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .pl-token.active,div#p>svg>foreignObject>section .pl-token:hover{cursor:pointer;background:#ffea7f}div#p>svg>foreignObject>section .tab-size[data-tab-size="1"]{-moz-tab-size:1;-o-tab-size:1;tab-size:1}div#p>svg>foreignObject>section .tab-size[data-tab-size="2"]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}div#p>svg>foreignObject>section .tab-size[data-tab-size="3"]{-moz-tab-size:3;-o-tab-size:3;tab-size:3}div#p>svg>foreignObject>section .tab-size[data-tab-size="4"]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}div#p>svg>foreignObject>section .tab-size[data-tab-size="5"]{-moz-tab-size:5;-o-tab-size:5;tab-size:5}div#p>svg>foreignObject>section .tab-size[data-tab-size="6"]{-moz-tab-size:6;-o-tab-size:6;tab-size:6}div#p>svg>foreignObject>section .tab-size[data-tab-size="7"]{-moz-tab-size:7;-o-tab-size:7;tab-size:7}div#p>svg>foreignObject>section .tab-size[data-tab-size="8"]{-moz-tab-size:8;-o-tab-size:8;tab-size:8}div#p>svg>foreignObject>section .tab-size[data-tab-size="9"]{-moz-tab-size:9;-o-tab-size:9;tab-size:9}div#p>svg>foreignObject>section .tab-size[data-tab-size="10"]{-moz-tab-size:10;-o-tab-size:10;tab-size:10}div#p>svg>foreignObject>section .tab-size[data-tab-size="11"]{-moz-tab-size:11;-o-tab-size:11;tab-size:11}div#p>svg>foreignObject>section .tab-size[data-tab-size="12"]{-moz-tab-size:12;-o-tab-size:12;tab-size:12}div#p>svg>foreignObject>section .task-list-item{list-style-type:none}div#p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:3px}div#p>svg>foreignObject>section .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}div#p>svg>foreignObject>section .hljs{display:block;background:#fff;padding:.5em;color:#333;overflow-x:auto}div#p>svg>foreignObject>section .hljs-comment,div#p>svg>foreignObject>section .hljs-meta{color:#969896}div#p>svg>foreignObject>section .hljs-emphasis,div#p>svg>foreignObject>section .hljs-quote,div#p>svg>foreignObject>section .hljs-strong,div#p>svg>foreignObject>section .hljs-template-variable,div#p>svg>foreignObject>section .hljs-variable{color:#df5000}div#p>svg>foreignObject>section .hljs-keyword,div#p>svg>foreignObject>section .hljs-selector-tag,div#p>svg>foreignObject>section .hljs-type{color:#d73a49}div#p>svg>foreignObject>section .hljs-attribute,div#p>svg>foreignObject>section .hljs-bullet,div#p>svg>foreignObject>section .hljs-literal,div#p>svg>foreignObject>section .hljs-symbol{color:#0086b3}div#p>svg>foreignObject>section .hljs-name,div#p>svg>foreignObject>section .hljs-section{color:#63a35c}div#p>svg>foreignObject>section .hljs-tag{color:#333}div#p>svg>foreignObject>section .hljs-attr,div#p>svg>foreignObject>section .hljs-selector-attr,div#p>svg>foreignObject>section .hljs-selector-class,div#p>svg>foreignObject>section .hljs-selector-id,div#p>svg>foreignObject>section .hljs-selector-pseudo,div#p>svg>foreignObject>section .hljs-title{color:#6f42c1}div#p>svg>foreignObject>section .hljs-addition{color:#55a532;background-color:#eaffea}div#p>svg>foreignObject>section .hljs-deletion{color:#bd2c00;background-color:#ffecec}div#p>svg>foreignObject>section .hljs-link{text-decoration:underline}div#p>svg>foreignObject>section .hljs-number{color:#005cc5}div#p>svg>foreignObject>section .hljs-string{color:#032f62}div#p>svg>foreignObject>section svg[data-marp-fitting=svg]{max-height:563px}div#p>svg>foreignObject>section h1{color:#246;font-size:1.6em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{border-bottom:none}div#p>svg>foreignObject>section h2{font-size:1.3em}div#p>svg>foreignObject>section h3{font-size:1.1em}div#p>svg>foreignObject>section h4{font-size:1.05em}div#p>svg>foreignObject>section h5{font-size:1em}div#p>svg>foreignObject>section h6{font-size:.9em}div#p>svg>foreignObject>section h1 strong,div#p>svg>foreignObject>section h2 strong,div#p>svg>foreignObject>section h3 strong,div#p>svg>foreignObject>section h4 strong,div#p>svg>foreignObject>section h5 strong,div#p>svg>foreignObject>section h6 strong{font-weight:inherit;color:#48c}div#p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#p>svg>foreignObject>section pre{border:1px solid #999;line-height:1.15;overflow:visible}div#p>svg>foreignObject>section pre code svg[data-marp-fitting=svg]{max-height:529px}div#p>svg>foreignObject>section footer,div#p>svg>foreignObject>section header{margin:0;position:absolute;left:30px;color:hsla(0,0%,40%,.75);font-size:18px}div#p>svg>foreignObject>section header{top:21px}div#p>svg>foreignObject>section footer{bottom:21px}div#p>svg>foreignObject>section{align-items:stretch;background:#fff;display:flex;flex-direction:column;flex-wrap:nowrap;font-size:29px;height:720px;justify-content:center;padding:78.5px;width:1280px}div#p>svg>foreignObject>section{--marpit-root-font-size:29px}div#p>svg>foreignObject>section>:last-child,div#p>svg>foreignObject>section[data-footer]>:nth-last-child(2){margin-bottom:0}div#p>svg>foreignObject>section>:first-child,div#p>svg>foreignObject>section>header:first-child+*{margin-top:0}div#p>svg>foreignObject>section:after{position:absolute;padding:0;right:30px;bottom:21px;font-size:24px;color:#777}div#p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#p>svg>foreignObject>section.invert{background-color:#222;color:#e6eaf0}div#p>svg>foreignObject>section.invert:after{color:#999}div#p>svg>foreignObject>section.invert img{background-color:transparent}div#p>svg>foreignObject>section.invert a{color:#50b3ff}div#p>svg>foreignObject>section.invert h1{color:#a3c5e7}div#p>svg>foreignObject>section.invert h2,div#p>svg>foreignObject>section.invert h3,div#p>svg>foreignObject>section.invert h4,div#p>svg>foreignObject>section.invert h5{color:#ebeff5}div#p>svg>foreignObject>section.invert blockquote,div#p>svg>foreignObject>section.invert h6{border-color:#3d3f43;color:#939699}div#p>svg>foreignObject>section.invert h1 strong,div#p>svg>foreignObject>section.invert h2 strong,div#p>svg>foreignObject>section.invert h3 strong,div#p>svg>foreignObject>section.invert h4 strong,div#p>svg>foreignObject>section.invert h5 strong,div#p>svg>foreignObject>section.invert h6 strong{color:#7bf}div#p>svg>foreignObject>section.invert hr{background-color:#3d3f43}div#p>svg>foreignObject>section.invert footer,div#p>svg>foreignObject>section.invert header{color:hsla(0,0%,60%,.75)}div#p>svg>foreignObject>section.invert code,div#p>svg>foreignObject>section.invert kbd{background-color:#111}div#p>svg>foreignObject>section.invert kbd{border-color:#666;box-shadow:inset 0 -1px 0 #555;color:#e6eaf0}div#p>svg>foreignObject>section.invert table tr{background-color:#12181d;border-color:#60657b}div#p>svg>foreignObject>section.invert table tr:nth-child(2n){background-color:#1b2024}div#p>svg>foreignObject>section.invert table td,div#p>svg>foreignObject>section.invert table th{border-color:#5b5e61}div#p>svg>foreignObject>section.invert pre{background-color:#0a0e12;border-color:#777}div#p>svg>foreignObject>section.invert pre code{background-color:transparent}div#p>svg>foreignObject>section[data-color] h1,div#p>svg>foreignObject>section[data-color] h2,div#p>svg>foreignObject>section[data-color] h3,div#p>svg>foreignObject>section[data-color] h4,div#p>svg>foreignObject>section[data-color] h5,div#p>svg>foreignObject>section[data-color] h6{color:currentColor}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

GearsOSのメタ計算

  • 清水 隆博 @@ -20,7 +20,7 @@
-
+

研究発表の構成

  • 研究目的
  • @@ -34,7 +34,7 @@
-
+

研究目的

  • OSとアプリケーションの信頼性の保証したい
  • @@ -55,7 +55,7 @@
-
+

ノーマルレベルとメタレベルを用いた信頼性の向上

  • プログラムの実行部分は以下の2つからなる @@ -76,7 +76,7 @@
  • メタレベルの計算として信頼性を保証する
-
+

ノーマル、メタレベルの計算とGearsOS

  • ノーマル/メタレベルを一貫して記述できる言語にContinuation Based Cがある @@ -92,7 +92,7 @@
  • トランスパイラで生成するメタレベルの計算をより拡張したい
-
+

トランスパイラによるメタレベルの計算の改善

  • 本研究ではトランスパイラの機能を改善し、様々な新機能をGearsOSに導入した
  • @@ -103,12 +103,12 @@
  • 手書きからの解放
  • MetaCodeGearの入れ替え機能の追加
-

まずGearsOSについて確認をしてから、新機能の解説を行う

+

まずGearsOSについて確認をしてから、新機能の解説を行う

-
+

ノーマルレベルから見たGearsOSの構成

-
+

CodeGear

  • CbCで定義する軽量継続で表現する単位をCodeGearと呼ぶ @@ -121,7 +121,7 @@
  • goto CodeGear()でCodeGearに継続する
-
+

DataGear

  • GearsOSで扱うデータの単位
  • @@ -130,7 +130,7 @@
  • Cの構造体の形でメタレベルでは表現される
-
+

ノーマルレベル/メタレベルのCodeGear

  • ノーマルレベルのCodeGearから見ると、直接別のCodeGearに継続している
  • @@ -142,7 +142,7 @@

h:220 w:800

-
+

ノーマルレベルでのGearsOSの実装

  • 次に継続するCodeGearを引数で受け取れる @@ -162,7 +162,7 @@ }
-
+

ノーマルレベルでのGearsOSの実装

  • 通常のプログラミング言語のように引数を受け取れる
  • @@ -178,7 +178,7 @@ }
-
+

Interface

  • GearsOSのモジュール化の仕組み
  • @@ -191,7 +191,7 @@
-
+

ノーマルレベルでのInterface(ノーマルレベル)

  • 実装したいInterfaceのCodeGearの名前と引数を列挙する
  • @@ -209,7 +209,7 @@ } Stack;
-
+

Interfaceの実装(ノーマルレベル)

  • 実装したいInterfaceで定義されたAPIを実装する @@ -232,7 +232,7 @@ }
-
+

InterfaceのAPI呼び出し(ノーマルレベル)

  • goto interfaceName->method()のようにAPIを呼び出す
  • @@ -248,7 +248,26 @@ goto stackTest->insertTest1(stack, shutdown);
-
+
+

par goto

+
    +
  • GearsOSの並行呼び出し構文
  • +
  • 通常のgoto文の様にpar gotoと書くと、並列実行される
  • +
+
    Phils* phils0 = createPhilsImpl(context,0,fork0,fork1);
+    Phils* phils1 = createPhilsImpl(context,1,fork1,fork2); 
+    Phils* phils2 = createPhilsImpl(context,2,fork2,fork3); 
+    Phils* phils3 = createPhilsImpl(context,3,fork3,fork4); 
+    Phils* phils4 = createPhilsImpl(context,4,fork4,fork0); 
+
+    par goto phils0->thinking(exit_code);
+    par goto phils1->thinking(exit_code);
+    par goto phils2->thinking(exit_code);
+    par goto phils3->thinking(exit_code);
+    par goto phils4->thinking(exit_code);
+
+
+

ノーマルレベルのまとめ

  • goto nextなどで次の継続に飛ぶ @@ -262,35 +281,36 @@
  • 呼び出す際はgoto interface->method()を使う
+
  • par gotoで並列実行
  • -
    +

    GearsOSのメタレベルの計算とMetaDataGear

    • GearsOSのメタレベルの計算は、GearsOSの基本構造と関わりが深い
    • GearsOSの基本構造はメタなCodeGear/DataGearで表現される
    -
    +

    MetaDataGear

    • ノーマルレベルのCodeGearの前後でMetaCodeGearが実行される
        -
      • MetaCodeGear参照するDataGearのことをMetaDataGearと呼ぶ -
          -
        • Context
        • -
        • TaskManager
        • -
        • Worker
        • -
        • ...
          +
        • MetaCodeGear参照するDataGearのことをMetaDataGearと呼ぶ
          h:220 w:800
      -
    • -
    -
    -

    Context(1)

    +
    +

    GearsOSのシステム構成

    +
      +
    • MetaDataGearであるContext, TaskManager, Workerによって構成
    • +
    +

    +
    +
    +

    Context

    • 従来のOSのプロセスに相当するMetaDataGear
    • GearsOSでのプログラム実行に必要な情報を持っている @@ -303,8 +323,8 @@
    -
    -

    Context(2)

    +
    +

    Context

    • GearsOSでcontextを触るのはメタ計算部分だけ
        @@ -312,15 +332,63 @@
    • 従来は手書きでcontext.hの中で定義
    • -
    • Context自体は構造体で定義されている +
    • Context自体は構造体で定義されている
      +w:532 h:10cm
    • +
    +
    +
    +

    メタレベルでのDataGearの管理

    +
      +
    • メタレベルではDataGearを纏めて管理する必要がある
    • +
    • すべてのDataGearはCの共用体を使って定義される +
        +
      • union Data
      • +
      +
    • +
    • union DataはすべてのDataGearにキャストすることが可能
        -
      • Contextの要素にDataGearの型がすべて揃った共用体がある
        -w:532 h:10cm
      • +
      • Contextにはunion DataとしてDataGearを保存する
      • +
      +
    • +
    • メタレベルの計算では必ずこのunion Dataが利用される
    • +
    +
    union Data {
    +    struct Stack {
    +        ...
    +    } Stack;
    +    struct SingleLinkedStack {
    +        ...
    +    } SingleLinkedStack;
    +    struct Context Context;
    +    ...
    +}
    +
    +
    +
    +

    union Dataの定義

    +
      +
    • union Data型はcontext.hに定義されている
    • +
    • 計算で使うすべてのDataGearの構造体の定義を列挙する +
        +
      • 従来は手書きですべて記述
      • +
      • Intefaceの定義を書き、CbCを書き、context.hに追記...
      • +
      +
    • +
    • 手書きで生成していたので、いくつかの問題があった +
        +
      • 整理しないと計算に使わないDataGearの定義が残る
      • +
      • Interfaceの定義ファイルと食い違うケースがある
      • +
      • DataGearの数が増えると手書きするのが煩雑
      • +
      +
    • +
    • すべてのメタレベルの計算の元となる重要なデータ +
        +
      • 手書きの場合ミスが発生する可能性が高い
    -
    +

    CodeGear、DataGearの番号

    • Perlで変換すると番号の形に抽象化される @@ -330,7 +398,7 @@
    -
    +

    メタレベルに変換されたGearsOSの実装

    • @@ -350,7 +418,7 @@
    -
    +

    メタレベルに変換されたGearsOSの実装

    • 継続先はgoto metaに変更されている @@ -378,7 +446,7 @@ }
    -
    +

    メタに変換されたGearsOSの実装

    • 直接checkAndSetに行かずにmetaに飛ぶ
    • @@ -400,7 +468,7 @@ }
    -
    +

    メタに変換されたGearsOSの実装

    • 変換前
    • @@ -424,7 +492,7 @@ }
    -
    +

    データを取り出すStubCodeGear

    __code pickup_rforkPhilsImpl_stub(struct Context* context) {
       PhilsImpl* phils = (PhilsImpl*)GearImpl(context, Phils, phils);
    @@ -433,7 +501,7 @@
     }
     
    -
    +
    • メタレベルの処理を全部手で書くのは面倒
        @@ -452,68 +520,7 @@
    -
    -

    GearsOSのメタ計算フレームワークとInterface

    -
      -
    • CbCには無いモジュール化の仕組みとしてInterfaceがある -
        -
      • Perlフレームワーク上に構築
      • -
      • コンパイル時に等価な純粋なCbCに変換する
      • -
      -
    • -
    • Interfaceの機能が他の言語のInterfaceの機能とギャップがあった -
        -
      • 実装していないAPIがあっても、変換前の時点でエラーが出ないなど
      • -
      -
    • -
    • Interfaceの定義ファイルもあるものと無いものがあった -
        -
      • トランスパイラで統一な処理が出来ない
      • -
      -
    • -
    -
    -
    -

    Perlを中心としたフレームワークによるメタ計算の生成

    -
      -
    • GearsOSの例題を作製する場合も、コピペや手書きが多発していた -
        -
      • フレームワークに実装したAPIを使って自動生成に変更したい
      • -
      -
    • -
    • Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい -
        -
      • Perlを中心としたフレームワークを活用したい
      • -
      -
    • -
    • コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある
    • -
    • Perlを中心としたトランスパイルシステムの整備、拡張を行った -
        -
      • GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった
      • -
      -
    • -
    -
    -
    -

    GearsOSの基礎概念

    -
      -
    • CodeGear、DataGear
    • -
    • Interface
    • -
    • GearsOSのビルドシステム -
        -
      • cmake
      • -
      • Perlトランスパイラ
      • -
      -
    • -
    -
    -
    -

    InterfaceとDataGear

    -
      -
    • Interface
    • -
    -
    -
    +

    GearsOSのビルドシステム

    • CMakeとPerlを使ってビルドする @@ -530,7 +537,7 @@
    -
    +

    GearsOSのビルドシステム

    • Perlスクリプトはファイルの変換・生成を行う @@ -546,10 +553,14 @@

    w:632 h:10cm

    -
    +

    Perlトランスパイラが生成するファイル

      -
    • context.hの中身をもとに生成するファイルが多い
    • +
    • context.hの中身をもとに生成するファイルが多い +
        +
      • このファイルで定義した内容をもとにメタレベルの計算をするので重要
      • +
      +
    @@ -598,7 +609,46 @@
    -
    +
    +

    GearsOSのメタレベルについてのまとめ

    +
      +
    • ノーマルレベルで書いたCodeGearにはContextの操作が付け加わる
    • +
    • 継続への書き込み、CodeGearの値の受け取りはContext経由で行われる +
        +
      • 値の受け取りはStubCodeGearが行う
      • +
      • PerlトランスパイラでMetaCodeGearが生成される
      • +
      +
    • +
    • メタレベルへの変換はビルド時にPerlトランスパイラによって行われる
    • +
    • メタレベルの情報はPerlトランスパイラが生成するファイがル重要 +
        +
      • DataGearの扱いはcontext.hに定義したunion Dataに依存する
      • +
      +
    • +
    +
    +
    +

    Perlを中心としたフレームワークによるメタ計算の生成

    +
      +
    • GearsOSの例題を作製する場合も、コピペや手書きが多発していた +
        +
      • フレームワークに実装したAPIを使って自動生成に変更したい
      • +
      +
    • +
    • Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい +
        +
      • Perlを中心としたフレームワークを活用したい
      • +
      +
    • +
    • コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある
    • +
    • Perlを中心としたトランスパイルシステムの整備、拡張を行った +
        +
      • GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった
      • +
      +
    • +
    +
    +

    主なGearsOSに導入された新機能

    • Interfaceシステムの強化
    • @@ -606,7 +656,7 @@
    • MetaCodeGearの入れ替え機能の追加
    -
    +

    Interfaceシステムの強化

    • Interface構文の簡素化 @@ -619,6 +669,7 @@
    • GearsOSでの型定義の方法に一貫性が生まれた
    +
  • InterfaceのParserの実装
  • Interfaceの引数の確認
  • Interfaceで未定義のAPIの検知
  • InterfaceにないAPIの呼び出しの検知 @@ -629,7 +680,7 @@
  • -
    +

    手書きからの解放

    • Interfaceの雛形ファイルの作製スクリプトの導入
    • @@ -643,15 +694,19 @@
    • GearsOSの初期化ルーチンの自動生成
    -
    +

    GearsOSの新機能

    • 自由なMetaCodeGearの作製、継続の入れ替え機能
    • -
    • Perlトランスパイラの変換ルーチンのデバッグ機能の追加
    • +
    • Perlトランスパイラの変換ルーチンのデバッグ機能の追加 +
        +
      • トランスパイラそのもののデバッグが困難であった
      • +
      +
    • ジェネリクスのサポート
    -
    +

    Interfaceの改良

    • 従来のInterfaceにまつわるPerlのフレームワークを改良した @@ -661,71 +716,25 @@
    -
    -

    Interfaceの定義構文の改良

    -
      -
    • 従来は引数とCodeGearの定義を別けて記述していた -
        -
      • Interfaceの宣言なので、書ける変数は引数/出力のもののみ
      • -
      -
    • -
    • Javaのクラス変数やインスタンス変数のようなものだと思われてしまった -
        -
      • GearsOSに慣れてない
      • -
      • シンタックスが問題
      • -
      -
    • -
    • シンタックスをgolangやJavaのInterfaceを参考に簡潔なものにした
    • -
    -
    -
    -

    従来のInterface

    -
      -
    • 引数の組とAPI(CodeGear)は別けて記述する必要があった
    • -
    -
    typedef struct Stack<Type, Impl>{
    -        union Data* stack;
    -        union Data* data;
    -        union Data* data1;
    -
    -
    -        __code whenEmpty(...);
    -        __code clear(Impl* stack,__code next(...));
    -        __code push(Impl* stack,Type* data, __code next(...));
    -        __code pop(Impl* stack, __code next(Type* data, ...));
    -        __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...));
    -        __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
    -        __code get(Impl* stack, __code next(Type* data, ...));
    -        __code get2(Impl* stack, __code next(Type* data, Type* data1, ...));
    -        __code next(...);
    -} Stack;
    -
    -
    -
    -

    定義し直したInterface構文

    -
      -
    • APIのみを記述すれば良くなった
    • -
    -
    -
    -
    +

    Implementの型定義ファイルの導入

    • Interfaceは型定義ファイルがあったが、実装側はなかった
    • -
    • context.h上にメタな構造体に直した実装の型を手で書いていた +
    • context.h上のunion Dataの定義に型定義を書いていた
        +
      • メタな構造体に直した実装の型を手書き
      • +
      • 型定義の一貫性がない(Intefaceはファイルが導入)
      • これはメタ情報なので手で書きたくない
      • -
      • 型定義の一貫性がない
    • 実装側にも型定義ファイルを導入して一貫性を持たせたい
        -
      • Perlトランスパイラフレームワークで利用可能
      • +
      • PerlトランスパイラフレームワークでInterface/Implの定義ファイルを纏めて扱える
    -
    +

    Implementの型定義

    • 基本はInterfaceと同じシンタックス @@ -744,31 +753,11 @@ } PhilsImpl;
    -
    +

    Interfaceの実装時の型名の省略

      -
    • 従来は型名を必ず書かなければならなかった -
        -
      • これはメタ情報なので変換時に書き換える
      • -
      -
    • +
    • APIのCodeGearには、トランスパイル時に具体的な型が名前につけられる
    -

    従来

    -
    __code pickup_lforkPhilsImpl(struct PhilsImpl* phils, __code next(...)) {
    -    struct AtomicT_int* left_fork = phils->Leftfork;
    -    goto left_fork->checkAndSet(-1, phils->self, pickup_rforkPhilsImpl, eatingPhilsImpl);
    -
    -}
    -
    -

    現在

    -
    __code pickup_lfork(struct PhilsImpl* phils, __code next(...)) {
    -    struct AtomicT_int* left_fork = phils->Leftfork;
    -    goto left_fork->checkAndSet(-1, phils->self, pickup_rfork, eating);
    -
    -}
    -
    -
    -

    トランスパイル前

    __code pickup_lfork(struct PhilsImpl* phils, __code next(...)) {
         struct AtomicT_int* left_fork = phils->Leftfork;
    @@ -780,37 +769,60 @@
     
    __code pickup_lforkPhilsImpl(struct Context *context,struct PhilsImpl* phils, enum Code next) {
         struct AtomicT_int* left_fork = phils->Leftfork;
         Gearef(context, AtomicT_int)->atomicT_int = (union Data*) left_fork;
    -    Gearef(context, AtomicT_int)->oldData = -1;
    -    Gearef(context, AtomicT_int)->newData = phils->self;
    +    ...
         Gearef(context, AtomicT_int)->next = C_pickup_rforkPhilsImpl;
         Gearef(context, AtomicT_int)->fail = C_eatingPhilsImpl;
         goto meta(context, left_fork->checkAndSet);
    -
     }
     
    -
    -

    Interfaceのパーサーの導入

    +
    +

    PerlトランスパイラでのInterfaceのエラー生成

      -
    • PerlでのInterfaceの情報の取得は、CbC自体のファイルの解析処理と共通だった +
    • Interfaceの実装時に様々なミスをする可能性がある
        -
      • Interfaceならではの情報が取れない
      • -
      • スクリプトに直接書かれているので他のツールが使えない
      • +
      • APIを完全に実装していない
      • +
      • 呼び出しの引数を間違えている
      • +
      • 無いAPIを呼び出している
    • -
    • モジュール化したInterfaceのパーサーを導入した -
        -
      • Perlフレームワークを使う一連のツールの作製が可能になった +
      • 従来は変換した後CbCコンパイラがコンパイルする際や、実行時にしかエラーが出なかった
          -
        • InterfaceとImplを見た実装の雛形ファイルの作製ツール
        • -
        • コード変換時にInterfaceのAPIに関連するチェック機能
        • -
        -
      • +
      • どの記述でエラーが出たのかの特定が困難
      • +
      • CbCコンパイラがコンパイルする前にトランスパイラで検知したい
    -
    +
    +

    実装をし忘れているAPIがあった場合のエラー終了

    +
      +
    • PerlトランスパイラでのInterfaceのエラー生成 +
        +
      • CbCコンパイラが動く前にエラーを検知
      • +
      +
    • +
    +
    [ 33%] Generating c/examples/DPP2/PhilsImpl.c
    +[ERROR] Not define eating at examples/DPP2/PhilsImpl.cbc
    +make[3]: *** [CMakeFiles/DPP2.dir/build.make:101: c/examples/DPP2/PhilsImpl.c] Error 25
    +make[2]: *** [CMakeFiles/Makefile2:442: CMakeFiles/DPP2.dir/all] Error 2
    +make[1]: *** [CMakeFiles/Makefile2:450: CMakeFiles/DPP2.dir/rule] Error 2
    +make: *** [Makefile:293: DPP2] Error 2
    +
    +
    +
    +

    手書きからの解放

    +
      +
    • 従来はメタレベルの計算に関係する処理・ファイルを手書きするケースが多々あった +
        +
      • 手書きではなく型定義ファイルからのファイル生成
      • +
      • トランスパイル時にコードの解析を行いメタ計算を自動生成
      • +
      +
    • +
    +
    +

    今回の修論での変更点/追加点の一覧

    @@ -861,64 +873,15 @@ + + + + +
    手書き meta.pmによって自動化
    par gotoのInterface呼び出し非対応対応
    -
    -

    Interfaceの実装の雛形生成コマンドの実装

    -
      -
    • Interfaceと実装する型が決まると、最低限書かないといけないCodeGearが決まる
    • -
    • 従来は手作業でCbCファイルにCodeGearの定義を書いて実装していた -
        -
      • コンストラクタも手書き
      • -
      -
    • -
    • JavaはIDEで、golangはコマンドとして雛形を生成するものを用意している -
        -
      • GearsOSでも導入した
      • -
      -
    • -
    • 実装の型ファイルを引数で渡すと雛形を生成する
    • -
    -
    $perl too/impl2cbc.pl SingleLinkedStack.h
    -
    -
    -
    -

    PerlトランスパイラでのInterfaceのエラー生成

    -
      -
    • Interfaceの実装時に様々なミスをする可能性がある -
        -
      • APIを完全に実装していない
      • -
      • 呼び出しの引数を間違えている
      • -
      • 無いAPIを呼び出している
      • -
      -
    • -
    • 従来は変換した後CbCコンパイラがコンパイルする際や、実行時にしかエラーが出なかった -
        -
      • どの記述でエラーが出たのかの特定が困難
      • -
      • CbCコンパイラがコンパイルする前にトランスパイラで検知したい
      • -
      -
    • -
    -
    -
    -

    実装をし忘れているAPIがあった場合のエラー終了

    -
      -
    • PerlトランスパイラでのInterfaceのエラー生成 -
        -
      • CbCコンパイラが動く前にエラーを検知
      • -
      -
    • -
    -
    [ 33%] Generating c/examples/DPP2/PhilsImpl.c
    -[ERROR] Not define eating at examples/DPP2/PhilsImpl.cbc
    -make[3]: *** [CMakeFiles/DPP2.dir/build.make:101: c/examples/DPP2/PhilsImpl.c] Error 25
    -make[2]: *** [CMakeFiles/Makefile2:442: CMakeFiles/DPP2.dir/all] Error 2
    -make[1]: *** [CMakeFiles/Makefile2:450: CMakeFiles/DPP2.dir/rule] Error 2
    -make: *** [Makefile:293: DPP2] Error 2
    -
    -
    -
    +

    Context定義ファイルの自動生成

    • ContextはすべてのDataGearの型情報をunion Dataとして持つ必要がある @@ -933,17 +896,8 @@
    • ビルド時に使用しているDataGearを回収し、 context.hを作製する
    -
    union Data {
    -    struct Stack {
    -        ...
    -    } Stack;
    -    struct SingleLinkedStack {
    -        ...
    -    } SingleLinkedStack;
    -}
    -
    -
    +

    StubCodeGear

    • 実行したいCodeGearの直前に実行されるMetaCodeGear
    • @@ -956,7 +910,7 @@
    -
    +

    出力があるIntefaceのAPI

    Stackから値を2つ取得するpop2 APIの定義の一部

      @@ -983,7 +937,7 @@ }
    -
    +

    メタに変換されたpop2

    • Contextの中のDataGearの保存場所にあるStack Interfaceにdataを書き込んでいる
    • @@ -1009,7 +963,7 @@ }
    -
    +

    pop2 APIの呼び出し(ノーマルレベル)

    • 継続で渡している pop2Test1で2つの値を受け取りたい
    • @@ -1032,7 +986,7 @@ }
    -
    +

    Stackからの値を受け取るCodeGear

    • 継続で渡されたCodeGearがContextから値をとってくるMetaCodeGearは手書きする必要があった @@ -1042,7 +996,7 @@
    -
    +

    別のInterfaceの出力を受けるCodeGearのメタ計算部分の自動生成

    • goto interface->method()している箇所を読み取る @@ -1059,7 +1013,7 @@
    -
    +

    元のStub

    __code pop2Test1StackTestImpl3_stub(struct Context* context) {
       StackTestImpl3* stackTest = (StackTestImpl3*)GearImpl(context, StackTest, stackTest);
    @@ -1081,7 +1035,7 @@
     }
     
    -
    +

    メタ計算の切り替えAPI

    • CodeGearが継続するMetaCodeGearを自由に選択できるPerlモジュールを導入した @@ -1094,7 +1048,7 @@ w:932 h:10cm
    -
    +

    meta.pm

    • replaceMeta関数に置換対象を登録 @@ -1118,7 +1072,7 @@ }
    -
    +

    Perlトランスパイルで生成されたメタ部分の比較

    meta.pm導入前

      @@ -1139,7 +1093,7 @@ }
    -
    +

    今後の課題

    • Perlトランスパイラのリファクタリング @@ -1159,14 +1113,15 @@
    • GearsOSを既存のUNIXの置き換えとして実行したい
    -
  • ノーマルレベルの記述の純粋関数化 +
  • ノーマルレベルの記述の純粋関数化、別の言語での定義
    • CbC/Cベースの記述ではノーマルレベルの記述に限界がある
    • +
    • Perlトランスパイラの機能をさらに拡張すると、PerlでCbCコンパイラを実装することに近くなってしまう
  • -
    +

    まとめ

    • Perlトランスパイラのフレームワークの機能を充実させた
    • diff -r 4e800dcf936e -r 6f2af8e66c35 slide/index.md --- a/slide/index.md Mon Feb 08 08:51:56 2021 +0900 +++ b/slide/index.md Mon Feb 08 09:49:50 2021 +0900 @@ -64,7 +64,7 @@ - 手書きからの解放 - MetaCodeGearの入れ替え機能の追加 -#### まずGearsOSについて確認をしてから、新機能の解説を行う +まずGearsOSについて確認をしてから、新機能の解説を行う --- # ノーマルレベルから見たGearsOSの構成 @@ -185,12 +185,32 @@ ``` --- +# par goto +- GearsOSの並行呼び出し構文 +- 通常のgoto文の様に`par goto`と書くと、並列実行される + +```c + Phils* phils0 = createPhilsImpl(context,0,fork0,fork1); + Phils* phils1 = createPhilsImpl(context,1,fork1,fork2); + Phils* phils2 = createPhilsImpl(context,2,fork2,fork3); + Phils* phils3 = createPhilsImpl(context,3,fork3,fork4); + Phils* phils4 = createPhilsImpl(context,4,fork4,fork0); + + par goto phils0->thinking(exit_code); + par goto phils1->thinking(exit_code); + par goto phils2->thinking(exit_code); + par goto phils3->thinking(exit_code); + par goto phils4->thinking(exit_code); +``` + +--- # ノーマルレベルのまとめ - `goto next`などで次の継続に飛ぶ - 継続に値を渡すことも可能 - ノーマルレベルのGearsOSのコードにはInterfaceがある - 実装を隠蔽、抽象化できる - 呼び出す際は`goto interface->method()`を使う +- `par goto`で並列実行 --- # GearsOSのメタレベルの計算とMetaDataGear @@ -202,14 +222,16 @@ # MetaDataGear - ノーマルレベルのCodeGearの前後でMetaCodeGearが実行される - MetaCodeGear参照するDataGearのことをMetaDataGearと呼ぶ - - Context - - TaskManager - - Worker - - ... ![h:220 w:800](./metacg.svg) --- -# Context(1) +# GearsOSのシステム構成 +- MetaDataGearであるContext, TaskManager, Workerによって構成 + +![](./gears_structure.svg) + +--- +# Context - 従来のOSのプロセスに相当するMetaDataGear - GearsOSでのプログラム実行に必要な情報を持っている - DataGearの型定義 @@ -217,15 +239,49 @@ - goto時に引数を書き込むDataGearごとの場所 - DataGearを管理するヒープ情報 --- -# Context(2) +# Context - GearsOSでcontextを触るのはメタ計算部分だけ - ノーマルレベルではcontextに触れない - 従来は手書きでcontext.hの中で定義 - Context自体は構造体で定義されている - - Contextの要素にDataGearの型がすべて揃った共用体がある ![w:532 h:10cm](./context.svg) +--- +# メタレベルでのDataGearの管理 +- メタレベルではDataGearを纏めて管理する必要がある +- すべてのDataGearはCの共用体を使って定義される + - `union Data`型 +- `union Data`はすべてのDataGearにキャストすることが可能 + - Contextには`union Data`としてDataGearを保存する +- メタレベルの計算では必ずこの`union Data`が利用される + +```c +union Data { + struct Stack { + ... + } Stack; + struct SingleLinkedStack { + ... + } SingleLinkedStack; + struct Context Context; + ... +} +``` + +--- +# union Dataの定義 + +- union Data型はcontext.hに定義されている +- 計算で使うすべてのDataGearの構造体の定義を列挙する + - 従来は手書きですべて記述 + - Intefaceの定義を書き、CbCを書き、context.hに追記... +- 手書きで生成していたので、いくつかの問題があった + - 整理しないと計算に使わないDataGearの定義が残る + - Interfaceの定義ファイルと食い違うケースがある + - DataGearの数が増えると手書きするのが煩雑 +- すべてのメタレベルの計算の元となる重要なデータ + - 手書きの場合ミスが発生する可能性が高い --- @@ -337,44 +393,8 @@ - 実装のコードをほとんど変えずにモデル検査を導入できるようにしたい ---- -# GearsOSのメタ計算フレームワークとInterface -- CbCには無いモジュール化の仕組みとしてInterfaceがある - - Perlフレームワーク上に構築 - - コンパイル時に等価な純粋なCbCに変換する -- Interfaceの機能が他の言語のInterfaceの機能とギャップがあった - - 実装していないAPIがあっても、変換前の時点でエラーが出ないなど -- Interfaceの定義ファイルもあるものと無いものがあった - - トランスパイラで統一な処理が出来ない ---- -# Perlを中心としたフレームワークによるメタ計算の生成 -- GearsOSの例題を作製する場合も、コピペや手書きが多発していた - - フレームワークに実装したAPIを使って自動生成に変更したい -- Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい - - Perlを中心としたフレームワークを活用したい -- コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある -- Perlを中心としたトランスパイルシステムの整備、拡張を行った - - GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった - ---- -# GearsOSの基礎概念 -- CodeGear、DataGear -- Interface -- GearsOSのビルドシステム - - cmake - - Perlトランスパイラ - - - - - - - ---- -# InterfaceとDataGear -- Interface --- # GearsOSのビルドシステム @@ -399,6 +419,7 @@ # Perlトランスパイラが生成するファイル - context.hの中身をもとに生成するファイルが多い + - このファイルで定義した内容をもとにメタレベルの計算をするので重要 |ファイル名|内容|元にするファイル| |-|-|-| @@ -410,6 +431,28 @@ |typedefData.h | DataGearのtypef一覧| context.h| |dataGearInit.c| DataGearのアロケート処理| context.h| + +--- +# GearsOSのメタレベルについてのまとめ +- ノーマルレベルで書いたCodeGearにはContextの操作が付け加わる +- 継続への書き込み、CodeGearの値の受け取りはContext経由で行われる + - 値の受け取りはStubCodeGearが行う + - PerlトランスパイラでMetaCodeGearが生成される +- メタレベルへの変換はビルド時にPerlトランスパイラによって行われる +- メタレベルの情報はPerlトランスパイラが生成するファイがル重要 + - DataGearの扱いはcontext.hに定義したunion Dataに依存する + + +--- +# Perlを中心としたフレームワークによるメタ計算の生成 +- GearsOSの例題を作製する場合も、コピペや手書きが多発していた + - フレームワークに実装したAPIを使って自動生成に変更したい +- Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい + - Perlを中心としたフレームワークを活用したい +- コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある +- Perlを中心としたトランスパイルシステムの整備、拡張を行った + - GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった + --- # 主なGearsOSに導入された新機能 - Interfaceシステムの強化 @@ -422,6 +465,7 @@ - より簡潔に明確に記述できるように定義した。 - Interfaceの実装の型の導入 - GearsOSでの型定義の方法に一貫性が生まれた +- InterfaceのParserの実装 - Interfaceの引数の確認 - Interfaceで未定義のAPIの検知 - InterfaceにないAPIの呼び出しの検知 @@ -440,6 +484,7 @@ # GearsOSの新機能 - **自由なMetaCodeGearの作製、継続の入れ替え機能** - Perlトランスパイラの変換ルーチンのデバッグ機能の追加 + - トランスパイラそのもののデバッグが困難であった - ジェネリクスのサポート @@ -449,51 +494,14 @@ - CbCの変換後のコードでなく、Perlレベルでエラー検知可能になった --- -# Interfaceの定義構文の改良 -- 従来は引数とCodeGearの定義を別けて記述していた - - Interfaceの宣言なので、書ける変数は引数/出力のもののみ -- Javaのクラス変数やインスタンス変数のようなものだと思われてしまった - - GearsOSに慣れてない - - シンタックスが問題 -- シンタックスをgolangやJavaのInterfaceを参考に簡潔なものにした - - ---- -# 従来のInterface -- 引数の組とAPI(CodeGear)は別けて記述する必要があった -```c -typedef struct Stack{ - union Data* stack; - union Data* data; - union Data* data1; - - - __code whenEmpty(...); - __code clear(Impl* stack,__code next(...)); - __code push(Impl* stack,Type* data, __code next(...)); - __code pop(Impl* stack, __code next(Type* data, ...)); - __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...)); - __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); - __code get(Impl* stack, __code next(Type* data, ...)); - __code get2(Impl* stack, __code next(Type* data, Type* data1, ...)); - __code next(...); -} Stack; -``` - ---- -# 定義し直したInterface構文 -- APIのみを記述すれば良くなった -```c -``` - ---- # Implementの型定義ファイルの導入 - Interfaceは型定義ファイルがあったが、実装側はなかった -- context.h上にメタな構造体に直した実装の型を手で書いていた +- context.h上のunion Dataの定義に型定義を書いていた + - メタな構造体に直した実装の型を手書き + - 型定義の一貫性がない(Intefaceはファイルが導入) - これはメタ情報なので手で書きたくない - - 型定義の一貫性がない - 実装側にも型定義ファイルを導入して一貫性を持たせたい - - Perlトランスパイラフレームワークで利用可能 + - PerlトランスパイラフレームワークでInterface/Implの定義ファイルを纏めて扱える --- # Implementの型定義 @@ -511,28 +519,7 @@ ``` --- # Interfaceの実装時の型名の省略 -- 従来は型名を必ず書かなければならなかった - - これはメタ情報なので変換時に書き換える -### 従来 - -```c -__code pickup_lforkPhilsImpl(struct PhilsImpl* phils, __code next(...)) { - struct AtomicT_int* left_fork = phils->Leftfork; - goto left_fork->checkAndSet(-1, phils->self, pickup_rforkPhilsImpl, eatingPhilsImpl); - -} -``` -### 現在 - -```c -__code pickup_lfork(struct PhilsImpl* phils, __code next(...)) { - struct AtomicT_int* left_fork = phils->Leftfork; - goto left_fork->checkAndSet(-1, phils->self, pickup_rfork, eating); - -} -``` - ---- +- APIのCodeGearには、トランスパイル時に具体的な型が名前につけられる ### トランスパイル前 ```c __code pickup_lfork(struct PhilsImpl* phils, __code next(...)) { @@ -546,50 +533,13 @@ __code pickup_lforkPhilsImpl(struct Context *context,struct PhilsImpl* phils, enum Code next) { struct AtomicT_int* left_fork = phils->Leftfork; Gearef(context, AtomicT_int)->atomicT_int = (union Data*) left_fork; - Gearef(context, AtomicT_int)->oldData = -1; - Gearef(context, AtomicT_int)->newData = phils->self; + ... Gearef(context, AtomicT_int)->next = C_pickup_rforkPhilsImpl; Gearef(context, AtomicT_int)->fail = C_eatingPhilsImpl; goto meta(context, left_fork->checkAndSet); - } ``` ---- -# Interfaceのパーサーの導入 -- PerlでのInterfaceの情報の取得は、CbC自体のファイルの解析処理と共通だった - - Interfaceならではの情報が取れない - - スクリプトに直接書かれているので他のツールが使えない -- モジュール化したInterfaceのパーサーを導入した - - Perlフレームワークを使う一連のツールの作製が可能になった - - InterfaceとImplを見た実装の雛形ファイルの作製ツール - - コード変換時にInterfaceのAPIに関連するチェック機能 ---- -# 今回の修論での変更点/追加点の一覧 - -|項目|従来|今回の修論| -|-|-|-| -|実装の型ファイル|無し|新たに導入| -|union Dataの定義|手書き|自動生成| -|実装のCodeGearの型名|手書き|自動生成| -|実装のCbCファイル|手書き|雛形を自動生成| -|別のInterfaceの出力を取得するStub|手書き|自動生成| -|Interfaceの未実装の場合の警告|無し|新たに導入| -|Interfaceのparser|スクリプトに埋め込み|モジュール化| -|MetaCodeGearの差し替え処理|手書き|meta.pmによって自動化| - - ---- -# Interfaceの実装の雛形生成コマンドの実装 -- Interfaceと実装する型が決まると、最低限書かないといけないCodeGearが決まる -- 従来は手作業でCbCファイルにCodeGearの定義を書いて実装していた - - コンストラクタも手書き -- JavaはIDEで、golangはコマンドとして雛形を生成するものを用意している - - GearsOSでも導入した -- 実装の型ファイルを引数で渡すと雛形を生成する -```shell -$perl too/impl2cbc.pl SingleLinkedStack.h -``` --- @@ -617,22 +567,37 @@ ``` --- +# 手書きからの解放 +- 従来はメタレベルの計算に関係する処理・ファイルを手書きするケースが多々あった + - 手書きではなく型定義ファイルからのファイル生成 + - トランスパイル時にコードの解析を行いメタ計算を自動生成 + + +--- +# 今回の修論での変更点/追加点の一覧 + +|項目|従来|今回の修論| +|-|-|-| +|実装の型ファイル|無し|新たに導入| +|union Dataの定義|手書き|自動生成| +|実装のCodeGearの型名|手書き|自動生成| +|実装のCbCファイル|手書き|雛形を自動生成| +|別のInterfaceの出力を取得するStub|手書き|自動生成| +|Interfaceの未実装の場合の警告|無し|新たに導入| +|Interfaceのparser|スクリプトに埋め込み|モジュール化| +|MetaCodeGearの差し替え処理|手書き|meta.pmによって自動化| +|par gotoのInterface呼び出し|非対応|対応| + + + + +--- # Context定義ファイルの自動生成 - ContextはすべてのDataGearの型情報をunion Dataとして持つ必要がある - すべてのDataGearの定義をunion Dataの定義内に書く - これは今まで手書きで作製していた - Interfaceの型定義ファイルを導入したので、自動生成が可能になった - ビルド時に使用しているDataGearを回収し、 context.hを作製する -```c -union Data { - struct Stack { - ... - } Stack; - struct SingleLinkedStack { - ... - } SingleLinkedStack; -} -``` --- # StubCodeGear - 実行したいCodeGearの直前に実行されるMetaCodeGear @@ -825,8 +790,9 @@ - GearsOS自身で記述したい - xv6への組み込み - GearsOSを既存のUNIXの置き換えとして実行したい -- ノーマルレベルの記述の純粋関数化 +- ノーマルレベルの記述の純粋関数化、別の言語での定義 - CbC/Cベースの記述ではノーマルレベルの記述に限界がある + - Perlトランスパイラの機能をさらに拡張すると、PerlでCbCコンパイラを実装することに近くなってしまう --- # まとめ - Perlトランスパイラのフレームワークの機能を充実させた