Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 123:bf51106b9171
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Feb 2021 16:41:35 +0900 |
parents | 3734280f30c1 |
children | 62aca38647e8 |
files | slide/index.html slide/index.md |
diffstat | 2 files changed, 277 insertions(+), 426 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/index.html Sun Feb 07 14:55:08 2021 +0900 +++ b/slide/index.html Sun Feb 07 16:41:35 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%}</style></head><body><div class="bespoke-marp-osc"><button data-bespoke-marp-osc="prev" tabindex="-1" title="Previous slide">Previous slide</button><span data-bespoke-marp-osc="page"></span><button data-bespoke-marp-osc="next" tabindex="-1" title="Next slide">Next slide</button><button data-bespoke-marp-osc="fullscreen" tabindex="-1" title="Toggle fullscreen (f)">Toggle fullscreen</button><button data-bespoke-marp-osc="presenter" tabindex="-1" title="Open presenter view (p)">Open presenter view</button></div><div id="p"><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="1" data-paginate="true" data-marpit-pagination="1" data-marpit-pagination-total="36" style="--paginate:true;"> + /* 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%}</style></head><body><div class="bespoke-marp-osc"><button data-bespoke-marp-osc="prev" tabindex="-1" title="Previous slide">Previous slide</button><span data-bespoke-marp-osc="page"></span><button data-bespoke-marp-osc="next" tabindex="-1" title="Next slide">Next slide</button><button data-bespoke-marp-osc="fullscreen" tabindex="-1" title="Toggle fullscreen (f)">Toggle fullscreen</button><button data-bespoke-marp-osc="presenter" tabindex="-1" title="Open presenter view (p)">Open presenter view</button></div><div id="p"><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="1" data-paginate="true" data-marpit-pagination="1" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>GearsOSのメタ計算</h1> <ul> <li>清水 隆博 @@ -20,48 +20,42 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-marpit-pagination="2" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-marpit-pagination="2" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>研究発表の構成</h1> <ul> <li>研究目的</li> <li>CbC、GearsOSの基礎概念</li> -<li>従来のGearsOSの課題</li> -<li>本研究での成果</li> +<li>GearsOSの新機能</li> <li>本研究での新たなGearsOSのシステムの解説 <ul> <li>GearsOSのInterfaceシステムの改善</li> -<li>Perlトランパイラの改善</li> +<li>Perlトランスパイラの改善</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="3" data-paginate="true" data-marpit-pagination="3" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="3" data-paginate="true" data-marpit-pagination="3" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>研究目的</h1> <ul> -<li>アプリケーションの信頼性を保証したい +<li>OSとアプリケーションの信頼性の保証したい</li> +<li>OSそのものも巨大なプログラム <ul> -<li>この為には土台のOSの信頼性を高く保証する必要がある</li> +<li>プログラムの信頼性の保証にはテストが使われる</li> </ul> </li> -<li>OSそのものも巨大なプログラム -<ul> -<li>プログラムの信頼性の保証にはテストが一般的に使われる</li> -</ul> -</li> -<li>並列並行処理など起因するバグや、そもそもOSを構成する処理が巨大 +<li>並列並行処理などのバグや、そもそもOSを構成する処理が巨大 <ul> <li>テストコードで信頼性を保証しきれない</li> </ul> </li> <li>形式手法を用いてテストに頼らず信頼性を保証したい <ul> -<li>定理証明</li> -<li>モデル検査</li> +<li>既存のソースコードに形式手法を導入できるフレームワークを構築したい</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="4" data-paginate="true" data-marpit-pagination="4" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="4" data-paginate="true" data-marpit-pagination="4" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>ノーマルレベルとメタレベルを用いた信頼性の向上</h1> <ul> <li>プログラムの実行部分は以下の2つからなる @@ -82,108 +76,95 @@ <li>メタレベルの計算として信頼性を保証する</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-marpit-pagination="5" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-marpit-pagination="5" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>メタレベルの計算とGearsOS</h1> <ul> <li>ノーマルレベル、メタレベルを一貫して記述できる言語CbCを用いてGearsOSを開発している</li> -<li>GearsOSのメタレベルの処理は従来のものは手動で行うものが多かった +<li>CbCを使うとメタレベルの処理を分離して書ける</li> +<li>メタレベルの処理を全部手で書くのは面倒 +<ul> +<li>メタレベルの処理を自動生成してくれるフレームワークを導入したい</li> +</ul> +</li> +<li>フレームワークに乗って実装すると等価なCbCに変換される +<ul> +<li>CbCレベルではメタレベルの処理とノーマルレベルの処理が見れる</li> +</ul> +</li> +<li>メタ計算を自分で定義できるようにしたい +<ul> +<li>デバッグフラグ感覚でモデル検査を導入できるようにしたい</li> +</ul> +</li> +</ul> +</section> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-marpit-pagination="6" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSのメタ計算フレームワーク</h1> +<ul> +<li>従来もPerlを中心としたメタコード生成のフレームワークを構築していた +<ul> +<li>計算に必要なデータの入出力のメタ計算を主に生成していた</li> +</ul> +</li> +<li>しかしGearsOSのメタレベルの処理は従来のものは手動で行う方が多かった <ul> <li>計算で使うすべてのデータ構造の管理</li> -<li>別のInterfaceの出力を受けるメタレベルの処理</li> +<li>別のInterfaceの出力を受けるメタレベルのデータ管理など</li> </ul> </li> <li>Perlでメタレベルに変換された後で気づくエラーも多い <ul> -<li>ノーマルレベルで検知したい</li> +<li>変換する前の時点でコード自体は間違えている</li> +<li>変換されてしまった後なのでコードを見比べないと原因が不明</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-marpit-pagination="6" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>モデル検査</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-marpit-pagination="7" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSのプログラミングフレームワーク</h1> <ul> -<li>プログラムの可能な実行を数え上げて仕様を満たしているかどうかの確認</li> -<li>デッドロック発生の検知 +<li>GearsOSはCbCには無いモジュール化の仕組みとしてInterfaceがある <ul> -<li>JavaPathFinderなど</li> +<li>Perlフレームワーク上に構築されている</li> +<li>変換時に等価な純粋なCbCに変換される</li> </ul> </li> -<li>状態爆発が問題になる</li> -<li>Spinを用いる方法では、 promelaという言語で実装し直す必要がある</li> -<li>実装を変更せず、カジュアルにモデル検査を行いたい</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-marpit-pagination="7" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>定理証明支援系</h1> +<li>Interfaceの機能が他の言語のInterfaceの機能とギャップがあった <ul> -<li>論理学的なモデルに変更して証明する -<ul> -<li>Agda</li> -<li>Coq</li> +<li>実装していないAPIがあっても、変換前の時点でエラーが出ない</li> +<li>引数の値が揃っていなくても、変換前の時点でエラーが出ない</li> +<li>存在していないAPIを呼んでも、変換前の時点でエラーが出ない</li> </ul> </li> -<li>HoareLogicを用いる +<li>Interfaceの定義ファイルもあるものと無いものがあった <ul> -<li>PreCondition -> Statement -> PostCondition</li> -</ul> -</li> -<li>従来の方法ではStatementには限られたコマンドしか使えない -<ul> -<li>ループは不変条件を使うが、 条件を見つけることが一般的には困難</li> -<li>実装言語と同じ記述で証明をすることはできない</li> +<li>トランスパイラで統一な処理が出来ない</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-marpit-pagination="8" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>GearsOSでの信頼性の保証</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-marpit-pagination="8" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>Perlを中心としたフレームワークによるメタ計算の生成</h1> <ul> -<li>メタレベルのみで信頼性の保証を行う +<li>GearsOSの例題を作製する場合も、コピペや手書きが多発していた <ul> -<li>ノーマルレベルでの記述は変更しない</li> +<li>フレームワークに実装したAPIを使って自動生成に変更したい</li> </ul> </li> -<li>Continuation Based C(CbC)をつかって、ノーマルレベルとメタレベルの分離を行う</li> -<li>C言語の下位言語であり、 いくつかのCコンパイラ上で実装している</li> -<li>C言語の構文は使用可能だが、 関数呼び出しの他に軽量継続を持つ +<li>Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい <ul> -<li>関数呼び出し時のスタックの操作を行わず<code>jmp</code>命令で次の処理に移動する</li> -<li>schemaなどと違い環境を持たず継続するために軽量継続と呼ぶ</li> +<li>Perlを中心としたフレームワークを活用したい</li> +</ul> +</li> +<li>コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある</li> +<li>本研究ではPerlを中心としたトランスパイルシステムの整備、拡張を行った +<ul> +<li>GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-marpit-pagination="9" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>GearsOSでの信頼性の保証</h1> -<ul> -<li>デフォルトのメタレベルの計算は自動生成される</li> -<li>資源管理あるいは検証用のメタ計算は必要に応じて挿入する</li> -<li>これにより大きなコード変更が無くモデル検査や定理証明を行うことができる</li> -<li>モデル検査や定理証明の困難さはメタレベルのプログラミングとして吸収する -<ul> -<li>例えばOSで使用するデータ構造に合わせたモデル検査用の状態圧縮</li> -<li>OSの検証に利用できるinvariantの提供</li> -</ul> -</li> -<li>CbCを用いたOSであるGearsOSを開発している</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-marpit-pagination="10" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>研究発表の構成</h1> -<ul> -<li>研究目的</li> -<li><strong>CbC、GearsOSの基礎概念</strong></li> -<li>従来のGearsOSの課題</li> -<li>本研究での成果</li> -<li>本研究での新たなGearsOSのシステムの解説 -<ul> -<li>GearsOSのInterfaceシステムの改善</li> -<li>Perlトランパイラの改善</li> -</ul> -</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-marpit-pagination="11" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-marpit-pagination="9" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>GearsOSの基礎概念</h1> <ul> <li>CodeGear、DataGear</li> @@ -197,7 +178,7 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-marpit-pagination="12" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-marpit-pagination="10" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>CbCとCodeGear(ノーマルレベル)</h1> <ul> <li>軽量継続で表現する単位をCodeGearと呼ぶ</li> @@ -205,7 +186,7 @@ <li>CodeGearは返り値の型の代わりに<code>__code</code>で宣言する</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="13" data-paginate="true" data-marpit-pagination="13" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-marpit-pagination="11" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>DataGear</h1> <ul> <li>GearsOSで扱うデータの単位</li> @@ -221,7 +202,7 @@ <li>DataGearの定義ではInterfaceシステムが使用できる</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-marpit-pagination="14" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-marpit-pagination="12" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Context(1)</h1> <ul> <li>従来のOSのプロセスに相当する機能(MetaDataGear)</li> @@ -243,7 +224,7 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-marpit-pagination="15" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="13" data-paginate="true" data-marpit-pagination="13" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Context(2)</h1> <ul> <li>GearsOSでのプログラム実行に必要な情報を持っている @@ -257,7 +238,7 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-marpit-pagination="16" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-marpit-pagination="14" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>StubCodeGear</h1> <ul> <li>実行したいCodeGearの直前に実行されるMetaCodeGear</li> @@ -270,16 +251,20 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-marpit-pagination="17" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-marpit-pagination="15" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Interface</h1> <ul> <li>GearsOSのモジュール化の仕組み</li> <li>Interface はある Data Gear と、それに対する操作(API)を行う Code Gear とその操作に用いる Data Gear の集合を表現する。</li> <li>JavaのInteface、Haskellの型クラスに相当する</li> -<li>GearsOSではこの他にもgoto時の値の保管に利用される</li> +<li>ContextにInterfaceの引数の保存場所がある +<ul> +<li>goto時にStubCodeGearでデータをとってくる</li> +</ul> +</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-marpit-pagination="18" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-marpit-pagination="16" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Interfaceの定義</h1> <ul> <li>GearsOSで拡張したtypedef構文で宣言する @@ -292,9 +277,8 @@ <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">stack</span>;</span> <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">data</span>;</span> <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">data1</span>;</span> - <span class="hljs-comment">/* Type* stack; */</span> - <span class="hljs-comment">/* Type* data; */</span> - <span class="hljs-comment">/* Type* data1; */</span> + + <span class="hljs-function">__code <span class="hljs-title">whenEmpty</span><span class="hljs-params">(...)</span></span>; <span class="hljs-function">__code <span class="hljs-title">clear</span><span class="hljs-params">(Impl* <span class="hljs-built_in">stack</span>,__code next(...))</span></span>; <span class="hljs-function">__code <span class="hljs-title">push</span><span class="hljs-params">(Impl* <span class="hljs-built_in">stack</span>,Type* data, __code next(...))</span></span>; @@ -307,36 +291,15 @@ } Stack; </span></span></foreignObject></svg></code></pre> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-marpit-pagination="19" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>Interfaceの実装</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-marpit-pagination="17" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>メタレベルからみたInterface</h1> <ul> -<li>定義したInterfaceは実装する必要がある +<li>Cの構造体に変換される</li> +<li>CodeGearはCodeGearの番号で持ち歩く <ul> -<li>Stack Interfaceの場合はSingleLinkedStackなど</li> +<li>実装が決まると実装の番号が代入される</li> </ul> </li> -<li>cbcファイルにCodeGearやコンストラクタを定義し、 型はcontext.hに直接書く</li> -</ul> -<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-function">__code <span class="hljs-title">popSingleLinkedStack</span><span class="hljs-params">(struct SingleLinkedStack* <span class="hljs-built_in">stack</span>, __code next(<span class="hljs-keyword">union</span> Data* data, ...))</span> </span>{ - <span class="hljs-keyword">if</span> (<span class="hljs-built_in">stack</span>->top) { - data = <span class="hljs-built_in">stack</span>->top->data; - <span class="hljs-built_in">stack</span>->top = <span class="hljs-built_in">stack</span>->top->next; - } <span class="hljs-keyword">else</span> { - data = <span class="hljs-literal">NULL</span>; - } - <span class="hljs-function"><span class="hljs-keyword">goto</span> <span class="hljs-title">next</span><span class="hljs-params">(data, ...)</span></span>; -} -</span></span></foreignObject></svg></code></pre> -<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap> <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">SingleLinkedStack</span> {</span> - <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Element</span>* <span class="hljs-title">top</span>;</span> - } SingleLinkedStack; -</span></span></foreignObject></svg></code></pre> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-paginate="true" data-marpit-pagination="20" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>メタレベルからみたInterface</h1> -<ul> -<li>Cの構造体になる</li> -<li>CodeGearはCodeGearの番号で持ち歩く</li> <li>定義はcontext.h内のunion Dataの定義に書く <ul> <li>union DataはすべてのDataGearの型をもつ</li> @@ -344,65 +307,35 @@ </li> </ul> <pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap> <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Stack</span> {</span> - <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">stack</span>;</span> + <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">stack</span>;</span> <span class="hljs-comment">// 実装へのポインタ</span> <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">data</span>;</span> <span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span>* <span class="hljs-title">data1</span>;</span> <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">clear</span>;</span> - <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">push</span>;</span> - <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">pop</span>;</span> - <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">pop2</span>;</span> - <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">isEmpty</span>;</span> - <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">get</span>;</span> + ... <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">get2</span>;</span> <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">next</span>;</span> <span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Code</span> <span class="hljs-title">whenEmpty</span>;</span> } Stack; </span></span></foreignObject></svg></code></pre> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-marpit-pagination="21" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>メタレベルからみたInterface</h1> -<ul> -<li>構造体にコンストラクタを使って値を書き込み、Interfaceを表現 +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-marpit-pagination="18" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSのビルドシステム</h1> <ul> -<li>実装のオブジェクト(構造体)そのものへのポインタ</li> -<li>定義したAPIに対応するenum Code(CodeGearの番号の連番) +<li>CMakeとPerlを使ってビルドする <ul> -<li>APIの名前ごとに、実装のCodeGearの番号を代入する</li> -</ul> -</li> +<li>CMakeはMakefileやbuild.ninjaを生成する</li> +<li>Perlは2種類のスクリプトが自動的に呼ばれる</li> </ul> </li> -</ul> -<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-function">Stack* <span class="hljs-title">createSingleLinkedStack</span><span class="hljs-params">(struct Context* context)</span> </span>{ - <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Stack</span>* <span class="hljs-title">stack</span> =</span> <span class="hljs-keyword">new</span> Stack(); - <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">SingleLinkedStack</span>* <span class="hljs-title">singleLinkedStack</span> =</span> <span class="hljs-keyword">new</span> SingleLinkedStack(); - <span class="hljs-built_in">stack</span>-><span class="hljs-built_in">stack</span> = (<span class="hljs-keyword">union</span> Data*)singleLinkedStack; - singleLinkedStack->top = <span class="hljs-literal">NULL</span>; - ... - <span class="hljs-built_in">stack</span>->get2 = C_get2SingleLinkedStack; - <span class="hljs-built_in">stack</span>->isEmpty = C_isEmptySingleLinkedStack; - <span class="hljs-built_in">stack</span>->clear = C_clearSingleLinkedStack; - <span class="hljs-keyword">return</span> <span class="hljs-built_in">stack</span>; -} -</span></span></foreignObject></svg></code></pre> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-marpit-pagination="22" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>GearsOSのビルドシステム</h1> +<li>Perlでエラーを出すとCMakeがビルドを止める <ul> -<li>CMakeを使ってビルドする -<ul> -<li>CMakeはMakefileやbuild.ninjaを生成する</li> -</ul> -</li> -<li>Perlが最低2回よばれる -<ul> -<li>generate_stub.plはCbCファイル毎に実行される<br /> +<li>従来はエラーを出していなかったので怪しいコードを生成しても止まらない<br /> <img src="./geasflow1.svg" alt="w:632 h:10cm" style="width:632px;height:10cm;" /></li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-marpit-pagination="23" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-marpit-pagination="19" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>GearsOSのビルドシステム</h1> <ul> <li>generate_stub.pl @@ -430,84 +363,8 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-marpit-pagination="24" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>研究発表の構成</h1> -<ul> -<li>研究目的</li> -<li>CbC、GearsOSの基礎概念</li> -<li><strong>従来のGearsOSの課題</strong></li> -<li>本研究での成果</li> -<li>本研究での新たなGearsOSのシステムの解説 -<ul> -<li>GearsOSのInterfaceシステムの改善</li> -<li>Perlトランパイラの改善</li> -</ul> -</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-marpit-pagination="25" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>GearsOSの課題(1)</h1> -<ul> -<li>Interfaceシステムが不十分 -<ul> -<li>定義する際の構文が混乱を仕様とずれた記述を誘発させていた</li> -<li>未実装のAPIがあっても警告が発生しない</li> -<li>メソッド呼び出し時の引数の数が足りなくても警告が発生しない</li> -<li>定義していないAPIを呼び出してもエラーが出ない</li> -<li>並行呼び出しに対応していなかった</li> -</ul> -</li> -<li>Interfaceの実装の型には型定義ファイルが存在しなかった -<ul> -<li>型定義の方法の一貫性がなかった</li> -<li>メタ情報を手動で実装する必要性があった</li> -</ul> -</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-marpit-pagination="26" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>GearsOSの課題(2)</h1> -<ul> -<li>Interface間の連携が上手くいっていなかった -<ul> -<li>入出力の受け取りするメタ部分を手動で実装する必要があった</li> -</ul> -</li> -<li>メタレベルの計算、データの定義を従来は手動で行っていた -<ul> -<li>自動的にコンパイル時に決定するはずの情報をすべて手書き</li> -</ul> -</li> -<li>メタレベルのCodeGearの定義やユーザーからの制御が困難であった -<ul> -<li>モデル検査などをメタ計算として定義できない</li> -</ul> -</li> -<li>書いたGearsOSのプログラムを、メタを含むコードに変換し、コンパイルしないとバグに気づかない状態があった -<ul> -<li>メタを含むコードに変換する前に気づきたい</li> -</ul> -</li> -<li>例題を作製する際にコピペを行う回数が多く、バグを発生させがちであった</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="27" data-paginate="true" data-marpit-pagination="27" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>研究発表の構成</h1> -<ul> -<li>研究目的</li> -<li>CbC、GearsOSの基礎概念</li> -<li>従来のGearsOSの課題</li> -<li><strong>本研究での成果</strong></li> -<li>本研究での新たなGearsOSのシステムの解説 -<ul> -<li>GearsOSのInterfaceシステムの改善</li> -<li>Perlトランパイラの改善</li> -</ul> -</li> -</ul> -</section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-marpit-pagination="28" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>本研究の成果</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-paginate="true" data-marpit-pagination="20" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSに導入された新機能</h1> <ul> <li>ARMクロスコンパイル用のCMakeの定義 <ul> @@ -515,20 +372,20 @@ <li>GearsOSのビルドシステムに手を加えずにクロスコンパイルが可能</li> </ul> </li> -<li>Interface構文の簡素化 +<li><strong>Interface構文の簡素化</strong> <ul> <li>より簡潔に明確に記述できるように定義した</li> </ul> </li> -<li>Interfaceの実装の型の導入 +<li><strong>Interfaceの実装の型の導入</strong> <ul> <li>GearsOSでの型定義の方法に一貫性が生まれた</li> </ul> </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="29" data-paginate="true" data-marpit-pagination="29" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>本研究の成果</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-marpit-pagination="21" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSに導入された新機能</h1> <h2>Interfaceシステムの強化</h2> <ul> <li>Interface構文の簡素化 @@ -550,8 +407,8 @@ </li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="30" data-paginate="true" data-marpit-pagination="30" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>本研究の成果</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-marpit-pagination="22" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSに導入された新機能</h1> <h2>手書きからの解放</h2> <ul> <li>Interfaceの雛形ファイルの作製スクリプトの導入</li> @@ -565,15 +422,25 @@ <li>GearsOSの初期化ルーチンの自動生成</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="31" data-paginate="true" data-marpit-pagination="31" data-marpit-pagination-total="36" style="--paginate:true;"> -<h1>本研究の成果</h1> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-marpit-pagination="23" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>GearsOSの新機能</h1> <ul> -<li>自由なMetaCodeGearの作製、継続の入れ替え機能</li> +<li><strong>自由なMetaCodeGearの作製、継続の入れ替え機能</strong></li> <li>Perlトランスパイラの変換ルーチンのデバッグ機能の追加</li> <li>ジェネリクスのサポート</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="32" data-paginate="true" data-marpit-pagination="32" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-marpit-pagination="24" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>Interfaceの改良</h1> +<ul> +<li>従来のInterfaceにまつわるPerlのフレームワークを改良した +<ul> +<li>CbCの変換後のコードでなく、Perlレベルでエラー検知可能になった</li> +</ul> +</li> +</ul> +</section> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-marpit-pagination="25" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Interfaceの定義構文の改良</h1> <ul> <li>従来は引数とCodeGearの定義を別けて記述していた @@ -590,11 +457,11 @@ <li>シンタックスをgolangやJavaのInterfaceを参考に簡潔なものにした</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="33" data-paginate="true" data-marpit-pagination="33" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-marpit-pagination="26" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>従来のInterface</h1> <h1>定義し直したInterface構文</h1> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="34" data-paginate="true" data-marpit-pagination="34" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="27" data-paginate="true" data-marpit-pagination="27" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Implementの型定義ファイルの導入</h1> <ul> <li>Interfaceは型定義ファイルがあったが、Implはなかった @@ -611,7 +478,7 @@ <li>Implementにも型定義ファイルを導入して一貫性を持たせたい</li> </ul> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="35" data-paginate="true" data-marpit-pagination="35" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-marpit-pagination="28" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>Implementの型定義</h1> <ul> <li>基本はInterfaceと同じシンタックス @@ -630,9 +497,59 @@ } PhilsImpl; </span></span></foreignObject></svg></code></pre> </section> -</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="36" data-paginate="true" data-marpit-pagination="36" data-marpit-pagination-total="36" style="--paginate:true;"> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="29" data-paginate="true" data-marpit-pagination="29" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>Interfaceの実装</h1> +<ul> +<li>定義したInterfaceは実装する必要がある +<ul> +<li>Stack Interfaceの場合はSingleLinkedStackなど</li> +</ul> +</li> +<li>cbcファイルにCodeGearやコンストラクタを定義し、 型はcontext.hに直接書く</li> +</ul> +<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-function">__code <span class="hljs-title">popSingleLinkedStack</span><span class="hljs-params">(struct SingleLinkedStack* <span class="hljs-built_in">stack</span>, __code next(<span class="hljs-keyword">union</span> Data* data, ...))</span> </span>{ + <span class="hljs-keyword">if</span> (<span class="hljs-built_in">stack</span>->top) { + data = <span class="hljs-built_in">stack</span>->top->data; + <span class="hljs-built_in">stack</span>->top = <span class="hljs-built_in">stack</span>->top->next; + } <span class="hljs-keyword">else</span> { + data = <span class="hljs-literal">NULL</span>; + } + <span class="hljs-function"><span class="hljs-keyword">goto</span> <span class="hljs-title">next</span><span class="hljs-params">(data, ...)</span></span>; +} +</span></span></foreignObject></svg></code></pre> +<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap> <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">SingleLinkedStack</span> {</span> + <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Element</span>* <span class="hljs-title">top</span>;</span> + } SingleLinkedStack; +</span></span></foreignObject></svg></code></pre> +</section> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="30" data-paginate="true" data-marpit-pagination="30" data-marpit-pagination-total="31" style="--paginate:true;"> +<h1>Context定義ファイルの自動生成</h1> +<ul> +<li>ContextはすべてのDataGearの型情報をunion Dataとして持つ必要がある +<ul> +<li>すべてのDataGearの定義をunion Dataの定義内に書く</li> +</ul> +</li> +<li>これは今まで手書きで作製していた +<ul> +<li>Interfaceの型定義ファイルを導入したので、自動生成が可能になった</li> +</ul> +</li> +</ul> +<pre><code class="language-c"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-class"><span class="hljs-keyword">union</span> <span class="hljs-title">Data</span> {</span> + <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Stack</span> {</span> + ... + } Stack; + <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">SingleLinkedStack</span> {</span> + ... + } SingleLinkedStack; +} +</span></span></foreignObject></svg></code></pre> +</section> +</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="31" data-paginate="true" data-marpit-pagination="31" data-marpit-pagination-total="31" style="--paginate:true;"> <h1>まとめ</h1> <ul> +<li>Perlトランスパイラのフレームワークの機能を充実させた</li> <li>型定義ファイルの導入、呼び出しシンタックスの導入を行った <ul> <li>DataGearの定義方法に一貫性が出た</li>
--- a/slide/index.md Sun Feb 07 14:55:08 2021 +0900 +++ b/slide/index.md Sun Feb 07 16:41:35 2021 +0900 @@ -16,26 +16,23 @@ # 研究発表の構成 - 研究目的 - CbC、GearsOSの基礎概念 -- 従来のGearsOSの課題 -- 本研究での成果 +- GearsOSの新機能 - 本研究での新たなGearsOSのシステムの解説 - GearsOSのInterfaceシステムの改善 - - Perlトランパイラの改善 + - Perlトランスパイラの改善 --- # 研究目的 -- アプリケーションの信頼性を保証したい - - この為には土台のOSの信頼性を高く保証する必要がある +- OSとアプリケーションの信頼性の保証したい - OSそのものも巨大なプログラム - - プログラムの信頼性の保証にはテストが一般的に使われる -- 並列並行処理など起因するバグや、そもそもOSを構成する処理が巨大 + - プログラムの信頼性の保証にはテストが使われる +- 並列並行処理などのバグや、そもそもOSを構成する処理が巨大 - テストコードで信頼性を保証しきれない - 形式手法を用いてテストに頼らず信頼性を保証したい - - 定理証明 - - モデル検査 + - 既存のソースコードに形式手法を導入できるフレームワークを構築したい --- @@ -55,66 +52,46 @@ --- # メタレベルの計算とGearsOS - ノーマルレベル、メタレベルを一貫して記述できる言語CbCを用いてGearsOSを開発している -- GearsOSのメタレベルの処理は従来のものは手動で行うものが多かった - - 計算で使うすべてのデータ構造の管理 - - 別のInterfaceの出力を受けるメタレベルの処理 -- Perlでメタレベルに変換された後で気づくエラーも多い - - ノーマルレベルで検知したい +- CbCを使うとメタレベルの処理を分離して書ける +- メタレベルの処理を全部手で書くのは面倒 + - メタレベルの処理を自動生成してくれるフレームワークを導入したい +- フレームワークに乗って実装すると等価なCbCに変換される + - CbCレベルではメタレベルの処理とノーマルレベルの処理が見れる +- メタ計算を自分で定義できるようにしたい + - デバッグフラグ感覚でモデル検査を導入できるようにしたい --- - -# モデル検査 -- プログラムの可能な実行を数え上げて仕様を満たしているかどうかの確認 -- デッドロック発生の検知 - - JavaPathFinderなど -- 状態爆発が問題になる -- Spinを用いる方法では、 promelaという言語で実装し直す必要がある -- 実装を変更せず、カジュアルにモデル検査を行いたい - ---- - -# 定理証明支援系 -- 論理学的なモデルに変更して証明する - - Agda - - Coq -- HoareLogicを用いる - - PreCondition -> Statement -> PostCondition -- 従来の方法ではStatementには限られたコマンドしか使えない - - ループは不変条件を使うが、 条件を見つけることが一般的には困難 - - 実装言語と同じ記述で証明をすることはできない +# GearsOSのメタ計算フレームワーク +- 従来もPerlを中心としたメタコード生成のフレームワークを構築していた + - 計算に必要なデータの入出力のメタ計算を主に生成していた +- しかしGearsOSのメタレベルの処理は従来のものは手動で行う方が多かった + - 計算で使うすべてのデータ構造の管理 + - 別のInterfaceの出力を受けるメタレベルのデータ管理など +- Perlでメタレベルに変換された後で気づくエラーも多い + - 変換する前の時点でコード自体は間違えている + - 変換されてしまった後なのでコードを見比べないと原因が不明 --- -# GearsOSでの信頼性の保証 -- メタレベルのみで信頼性の保証を行う - - ノーマルレベルでの記述は変更しない -- Continuation Based C(CbC)をつかって、ノーマルレベルとメタレベルの分離を行う -- C言語の下位言語であり、 いくつかのCコンパイラ上で実装している -- C言語の構文は使用可能だが、 関数呼び出しの他に軽量継続を持つ - - 関数呼び出し時のスタックの操作を行わず`jmp`命令で次の処理に移動する - - schemaなどと違い環境を持たず継続するために軽量継続と呼ぶ +# GearsOSのプログラミングフレームワーク +- GearsOSはCbCには無いモジュール化の仕組みとしてInterfaceがある + - Perlフレームワーク上に構築されている + - 変換時に等価な純粋なCbCに変換される +- Interfaceの機能が他の言語のInterfaceの機能とギャップがあった + - 実装していないAPIがあっても、変換前の時点でエラーが出ない + - 引数の値が揃っていなくても、変換前の時点でエラーが出ない + - 存在していないAPIを呼んでも、変換前の時点でエラーが出ない +- Interfaceの定義ファイルもあるものと無いものがあった + - トランスパイラで統一な処理が出来ない --- -# GearsOSでの信頼性の保証 - -- デフォルトのメタレベルの計算は自動生成される -- 資源管理あるいは検証用のメタ計算は必要に応じて挿入する -- これにより大きなコード変更が無くモデル検査や定理証明を行うことができる -- モデル検査や定理証明の困難さはメタレベルのプログラミングとして吸収する - - 例えばOSで使用するデータ構造に合わせたモデル検査用の状態圧縮 - - OSの検証に利用できるinvariantの提供 -- CbCを用いたOSであるGearsOSを開発している - - - ---- -# 研究発表の構成 -- 研究目的 -- **CbC、GearsOSの基礎概念** -- 従来のGearsOSの課題 -- 本研究での成果 -- 本研究での新たなGearsOSのシステムの解説 - - GearsOSのInterfaceシステムの改善 - - Perlトランパイラの改善 +# Perlを中心としたフレームワークによるメタ計算の生成 +- GearsOSの例題を作製する場合も、コピペや手書きが多発していた + - フレームワークに実装したAPIを使って自動生成に変更したい +- Interfaceの機能充実も、 メタ計算の生成もCbCで行うのは難しい + - Perlを中心としたフレームワークを活用したい +- コード変換(トランスパイル)を行うために必要な環境の整備もする必要がある +- 本研究ではPerlを中心としたトランスパイルシステムの整備、拡張を行った + - GearsOSのメタ計算の生成がより柔軟かつ高い信頼性で可能となった --- # GearsOSの基礎概念 @@ -175,7 +152,8 @@ - GearsOSのモジュール化の仕組み - Interface はある Data Gear と、それに対する操作(API)を行う Code Gear とその操作に用いる Data Gear の集合を表現する。 - JavaのInteface、Haskellの型クラスに相当する -- GearsOSではこの他にもgoto時の値の保管に利用される +- ContextにInterfaceの引数の保存場所がある + - goto時にStubCodeGearでデータをとってくる --- # Interfaceの定義 @@ -187,9 +165,8 @@ union Data* stack; union Data* data; union Data* data1; - /* Type* stack; */ - /* Type* data; */ - /* Type* data1; */ + + __code whenEmpty(...); __code clear(Impl* stack,__code next(...)); __code push(Impl* stack,Type* data, __code next(...)); @@ -202,48 +179,22 @@ } Stack; ``` ---- -# Interfaceの実装 -- 定義したInterfaceは実装する必要がある - - Stack Interfaceの場合はSingleLinkedStackなど -- cbcファイルにCodeGearやコンストラクタを定義し、 型はcontext.hに直接書く - -```c -__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { - if (stack->top) { - data = stack->top->data; - stack->top = stack->top->next; - } else { - data = NULL; - } - goto next(data, ...); -} -``` - -```c - struct SingleLinkedStack { - struct Element* top; - } SingleLinkedStack; -``` --- # メタレベルからみたInterface -- Cの構造体になる +- Cの構造体に変換される - CodeGearはCodeGearの番号で持ち歩く + - 実装が決まると実装の番号が代入される - 定義はcontext.h内のunion Dataの定義に書く - union DataはすべてのDataGearの型をもつ ```c struct Stack { - union Data* stack; + union Data* stack; // 実装へのポインタ union Data* data; union Data* data1; enum Code clear; - enum Code push; - enum Code pop; - enum Code pop2; - enum Code isEmpty; - enum Code get; + ... enum Code get2; enum Code next; enum Code whenEmpty; @@ -251,31 +202,12 @@ ``` --- -# メタレベルからみたInterface -- 構造体にコンストラクタを使って値を書き込み、Interfaceを表現 - - 実装のオブジェクト(構造体)そのものへのポインタ - - 定義したAPIに対応するenum Code(CodeGearの番号の連番) - - APIの名前ごとに、実装のCodeGearの番号を代入する -```c -Stack* createSingleLinkedStack(struct Context* context) { - struct Stack* stack = new Stack(); - struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); - stack->stack = (union Data*)singleLinkedStack; - singleLinkedStack->top = NULL; - ... - stack->get2 = C_get2SingleLinkedStack; - stack->isEmpty = C_isEmptySingleLinkedStack; - stack->clear = C_clearSingleLinkedStack; - return stack; -} -``` - ---- # GearsOSのビルドシステム -- CMakeを使ってビルドする +- CMakeとPerlを使ってビルドする - CMakeはMakefileやbuild.ninjaを生成する -- Perlが最低2回よばれる - - generate_stub.plはCbCファイル毎に実行される + - Perlは2種類のスクリプトが自動的に呼ばれる +- Perlでエラーを出すとCMakeがビルドを止める + - 従来はエラーを出していなかったので怪しいコードを生成しても止まらない ![w:632 h:10cm](./geasflow1.svg) --- @@ -293,65 +225,20 @@ - すべてのCbCファイルを読み込み、使用しているCodeGearなどの情報を取得 ---- -# 研究発表の構成 -- 研究目的 -- CbC、GearsOSの基礎概念 -- **従来のGearsOSの課題** -- 本研究での成果 -- 本研究での新たなGearsOSのシステムの解説 - - GearsOSのInterfaceシステムの改善 - - Perlトランパイラの改善 - - --- -# GearsOSの課題(1) -- Interfaceシステムが不十分 - - 定義する際の構文が混乱を仕様とずれた記述を誘発させていた - - 未実装のAPIがあっても警告が発生しない - - メソッド呼び出し時の引数の数が足りなくても警告が発生しない - - 定義していないAPIを呼び出してもエラーが出ない - - 並行呼び出しに対応していなかった -- Interfaceの実装の型には型定義ファイルが存在しなかった - - 型定義の方法の一貫性がなかった - - メタ情報を手動で実装する必要性があった - ---- -# GearsOSの課題(2) -- Interface間の連携が上手くいっていなかった - - 入出力の受け取りするメタ部分を手動で実装する必要があった -- メタレベルの計算、データの定義を従来は手動で行っていた - - 自動的にコンパイル時に決定するはずの情報をすべて手書き -- メタレベルのCodeGearの定義やユーザーからの制御が困難であった - - モデル検査などをメタ計算として定義できない -- 書いたGearsOSのプログラムを、メタを含むコードに変換し、コンパイルしないとバグに気づかない状態があった - - メタを含むコードに変換する前に気づきたい -- 例題を作製する際にコピペを行う回数が多く、バグを発生させがちであった - ---- -# 研究発表の構成 -- 研究目的 -- CbC、GearsOSの基礎概念 -- 従来のGearsOSの課題 -- **本研究での成果** -- 本研究での新たなGearsOSのシステムの解説 - - GearsOSのInterfaceシステムの改善 - - Perlトランパイラの改善 - ---- -# 本研究の成果 +# GearsOSに導入された新機能 - ARMクロスコンパイル用のCMakeの定義 - ARM用のアーキテクチャに向けてクロスコンパイルするCMakeを定義 - GearsOSのビルドシステムに手を加えずにクロスコンパイルが可能 -- Interface構文の簡素化 +- **Interface構文の簡素化** - より簡潔に明確に記述できるように定義した -- Interfaceの実装の型の導入 +- **Interfaceの実装の型の導入** - GearsOSでの型定義の方法に一貫性が生まれた --- -# 本研究の成果 +# GearsOSに導入された新機能 ## Interfaceシステムの強化 - Interface構文の簡素化 - より簡潔に明確に記述できるように定義した。 @@ -362,7 +249,7 @@ - InterfaceにないAPIの呼び出しの検知 - コード変換前にPerlレベルでエラーを発生させた --- -# 本研究の成果 +# GearsOSに導入された新機能 ## 手書きからの解放 - Interfaceの雛形ファイルの作製スクリプトの導入 - 別のInterfaceからの出力を取得するStubの自動生成 @@ -372,12 +259,16 @@ - GearsOSの初期化ルーチンの自動生成 --- -# 本研究の成果 -- 自由なMetaCodeGearの作製、継続の入れ替え機能 +# GearsOSの新機能 +- **自由なMetaCodeGearの作製、継続の入れ替え機能** - Perlトランスパイラの変換ルーチンのデバッグ機能の追加 - ジェネリクスのサポート +--- +# Interfaceの改良 +- 従来のInterfaceにまつわるPerlのフレームワークを改良した + - CbCの変換後のコードでなく、Perlレベルでエラー検知可能になった --- # Interfaceの定義構文の改良 @@ -388,6 +279,7 @@ - シンタックスが問題 - シンタックスをgolangやJavaのInterfaceを参考に簡潔なものにした + --- # 従来のInterface @@ -416,9 +308,51 @@ __code next(...); } PhilsImpl; ``` +--- +# Interfaceの実装 +- 定義したInterfaceは実装する必要がある + - Stack Interfaceの場合はSingleLinkedStackなど +- cbcファイルにCodeGearやコンストラクタを定義し、 型はcontext.hに直接書く + +```c +__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { + if (stack->top) { + data = stack->top->data; + stack->top = stack->top->next; + } else { + data = NULL; + } + goto next(data, ...); +} +``` + +```c + struct SingleLinkedStack { + struct Element* top; + } SingleLinkedStack; +``` + +--- +# Context定義ファイルの自動生成 +- ContextはすべてのDataGearの型情報をunion Dataとして持つ必要がある + - すべてのDataGearの定義をunion Dataの定義内に書く +- これは今まで手書きで作製していた + - Interfaceの型定義ファイルを導入したので、自動生成が可能になった +```c +union Data { + struct Stack { + ... + } Stack; + struct SingleLinkedStack { + ... + } SingleLinkedStack; +} +``` + --- # まとめ +- Perlトランスパイラのフレームワークの機能を充実させた - 型定義ファイルの導入、呼び出しシンタックスの導入を行った - DataGearの定義方法に一貫性が出た - 従来手書きしていたメタな定義をビルド時に自動的に生成するようにした