diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/2026_REBASE/lattices.js | 8 | ||||
| -rw-r--r-- | docs/2026_REBASE/slides.css | 4 | ||||
| -rw-r--r-- | docs/2026_REBASE/slides.js | 6 |
3 files changed, 9 insertions, 9 deletions
diff --git a/docs/2026_REBASE/lattices.js b/docs/2026_REBASE/lattices.js index 2e7da4a4..a4b66d54 100644 --- a/docs/2026_REBASE/lattices.js +++ b/docs/2026_REBASE/lattices.js @@ -14,11 +14,11 @@ function early(control) { let s=edge(450,58,130,control?127:227)+edge(130,control?373:273,450,442)+ edge(450,58,450,127)+edge(450,373,450,442)+edge(450,58,760,127)+edge(760,373,450,442); - for(const x of [295,450,605]) s+=edge(450,173,x,227)+edge(x,273,450,327); + for(const x of [285,385,485,585]) s+=edge(450,173,x,227)+edge(x,273,450,327); s+=edge(760,173,760,227)+edge(760,273,760,327); if(control) s+=edge(130,173,130,327); s+=node(450,35,'⊤','global',65)+node(450,465,'⊥','global',65)+ - node(450,150,'⊤:int')+node(295,250,'−1', 'integer',80)+node(450,250,'0','integer',80)+node(605,250,'1','integer',80)+node(450,350,'⊥:int')+ + node(450,150,'⊤:int')+node(285,250,'−1','integer',68)+node(385,250,'0','integer',68)+node(485,250,'1','integer',68)+node(585,250,'2','integer',68)+text(639,258,'…','hint')+node(450,350,'⊥:int')+ node(760,150,'⊤:tuple','tuple')+node(760,250,'[T₀, …, Tₙ]','tuple',200)+node(760,350,'⊥:tuple','tuple'); s+=control?node(130,150,'⊤:ctrl','control')+node(130,350,'⊥:ctrl','control')+text(130,207,'unreachable','hint')+text(130,405,'reachable','hint'):node(130,250,'ctrl','control'); return svg(control?'Chapter 8: control, flat integers, and tuples':'Chapter 4: control, flat integers, and tuples',s); @@ -71,8 +71,8 @@ point('Constants are types.','<code>arg : ⊥:int</code><br><code>3 : 3</code>'), point('Meet combines alternatives.','<code>1 ∧ 1 = 1</code><br><code>1 ∧ 2 = ⊥:int</code>'), point('Every node computes a type.','A constant result can replace the node. Tuples meet element by element.') - ],'Other integer constants and tuple interiors are omitted.'), - notes:'<h3>Lattice · about 30 seconds of this demo slot</h3><p>These are abstract values, not the Java class hierarchy. Show global top/bottom versus domain top/bottom. Chapter 4 has one control element, flat integer constants, and tuples. AddNode.compute evaluates constant operands; meet is the operation for combining alternatives, not integer addition. Return to Example for the local rewrites.</p>'}, + ],'Standard flat integer lattice (monotone analysis frameworks). Tuples recursively contain collections of types.'), + notes:'<h3>Lattice · about 30 seconds of this demo slot</h3><p>This is the textbook flat integer constant-propagation lattice taught in monotone analysis frameworks. The ellipsis stands for the other integer constants, each at the same level. These are abstract values, not the Java class hierarchy. Show global top/bottom versus domain top/bottom. Chapter 4 has one control element, flat integer constants, and tuples. AddNode.compute evaluates constant operands; meet is the operation for combining alternatives, not integer addition. Return to Example for the local rewrites.</p>'}, control:{id:'lattice',label:'Lattice',steps:0, body:()=>page('Reachability is a type, too.','Chapter 8 · the Chapter 6 control lattice carries through loops',early(true),[ point('Control gains a dual.','<code>⊤:ctrl = unreachable</code><br><code>⊥:ctrl = reachable</code>'), diff --git a/docs/2026_REBASE/slides.css b/docs/2026_REBASE/slides.css index 67605fec..26438a39 100644 --- a/docs/2026_REBASE/slides.css +++ b/docs/2026_REBASE/slides.css @@ -8,9 +8,9 @@ .kicker{display:flex;justify-content:space-between;align-items:center;font-size:17px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;margin-bottom:30px}.kicker .tag{border:1px solid var(--accent);padding:7px 11px;border-radius:30px;color:var(--accent);letter-spacing:.05em;font-size:14px} h1,h2,h3,p{margin:0}h1{font-size:100px;line-height:.99;letter-spacing:-.055em;font-weight:750}h2{font-size:62px;line-height:1.04;letter-spacing:-.04em;font-weight:700}h3{font-size:28px;letter-spacing:-.02em;line-height:1.14}p{font-size:25px;line-height:1.4}.muted{color:var(--muted)}.accent{color:var(--accent)}.orange{color:var(--orange)}.eyebrow{font-size:16px;font-weight:bold;text-transform:uppercase;letter-spacing:.13em;color:var(--muted);margin-bottom:14px} .slide-content{flex:1;min-height:0}.footer{position:absolute;bottom:25px;left:72px;right:72px;border-top:1px solid var(--line);padding-top:13px;display:flex;justify-content:space-between;font-size:15px;color:var(--muted)}.footer strong{color:var(--ink)}.build-dots{display:flex;gap:7px}.build-dots i{width:7px;height:7px;border-radius:50%;background:#c9d1ca}.build-dots i.on{background:var(--accent)} -.title-layout{display:grid;grid-template-columns:1.2fr .8fr;gap:82px;height:100%;align-items:center}.title-copy h1{font-size:116px;line-height:.98}.title-copy .subtitle{font-size:29px;line-height:1.35;max-width:650px;margin-top:30px}.speaker{margin-top:55px}.speaker strong{font-size:30px;display:block}.speaker span{font-size:19px;display:block;margin-top:9px;color:var(--muted)}.portrait{width:100%;height:610px;object-fit:cover;object-position:50% 35%;border-radius:3px}.photo-caption{font-size:14px;color:var(--muted);margin-top:12px}.title-line{width:74px;height:6px;background:var(--orange);margin-bottom:30px} +.title-layout{display:grid;grid-template-columns:1.2fr .8fr;gap:82px;height:100%;align-items:center}.title-copy h1{font-size:116px;line-height:.98}.title-copy .subtitle{font-size:29px;line-height:1.35;max-width:650px;margin-top:30px}.speaker{margin-top:55px}.speaker strong{font-size:30px;display:block}.speaker span{font-size:19px;display:block;margin-top:9px;color:var(--muted)}.portrait{width:100%;height:440px;object-fit:cover;object-position:50% 35%;border-radius:3px}.photo-caption{font-size:14px;color:var(--muted);margin-top:12px}.title-line{width:74px;height:6px;background:var(--orange);margin-bottom:30px} .title-repo{position:absolute;left:72px;bottom:82px;font:23px Consolas,monospace} -.bio-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center;margin-top:35px}.bio-list{list-style:none;padding:0;margin:35px 0 30px}.bio-list li{border-top:1px solid var(--line);padding:18px 0;font-size:25px;line-height:1.35}.bio-list small{display:block;font-size:20px;color:var(--muted);margin-top:6px}.club-image{width:100%;height:340px;object-fit:contain;mix-blend-mode:multiply}.club-caption{font-size:20px;margin:20px 0;text-align:center}.link-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}.link-row a{font-size:20px;padding:12px 16px;border:1px solid var(--line);border-radius:5px;text-decoration:none}.link-row a:hover{background:#e0e9e2} +.bio-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:82px;align-items:center;height:100%}.bio-name{margin-top:20px}.portrait-block{height:642px}.portrait-block .portrait{display:block}.bio-media .club-image{display:block;height:145px;margin-top:16px}.bio-media .club-caption{font-size:17px;margin:8px 0 0}.bio-list{list-style:none;padding:0;margin:35px 0 30px}.bio-list li{border-top:1px solid var(--line);padding:18px 0;font-size:25px;line-height:1.35}.bio-list small{display:block;font-size:20px;color:var(--muted);margin-top:6px}.club-image{width:100%;height:340px;object-fit:contain;mix-blend-mode:multiply}.club-caption{font-size:20px;margin:20px 0;text-align:center}.link-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}.link-row a{font-size:20px;padding:12px 16px;border:1px solid var(--line);border-radius:5px;text-decoration:none}.link-row a:hover{background:#e0e9e2} .demo-layout{display:grid;grid-template-columns:1.03fr .97fr;gap:46px;margin-top:27px}.demo-code{background:#152e36;color:#ecf1e8;border-radius:9px;overflow:hidden;box-shadow:0 10px 25px #122b3410}.code-head{display:flex;justify-content:space-between;align-items:center;padding:13px 20px;background:#203d46;font:16px Consolas,monospace;color:#bdcec8}.code-head button{font-family:Arial,sans-serif;font-size:15px;background:#2e5356;color:#fff;border-color:#638582;padding:6px 13px}.demo-code pre{padding:24px 23px;margin:0;font:25px/1.5 Consolas,"Liberation Mono",monospace;tab-size:4;white-space:pre-wrap;overflow-wrap:normal}.demo-code.long pre{font-size:22px;line-height:1.45}.comment{color:#a6c0b5}.demo-actions{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap}.demo-actions button,.demo-actions a{font-size:17px}.demo-actions a{display:inline-flex;align-items:center;padding:9px 2px}.launch{font:18px Consolas,monospace;display:block;margin-top:17px;color:var(--muted)}.demo-right{padding-top:5px}.thesis{font-size:28px;line-height:1.35;max-width:580px;margin-bottom:23px} .fact{border-top:1px solid var(--line);padding:14px 0;display:flex;align-items:baseline;gap:18px}.fact b{font-size:18px;color:var(--accent);min-width:65px}.fact span{font-size:22px;line-height:1.32}.result{background:#e2ebe2;border-left:5px solid var(--accent);padding:19px 22px;margin-top:22px}.result strong{font:30px/1.3 Consolas,monospace}.result small{font-size:17px;display:block;margin-top:10px;color:var(--muted)}.watch{margin-top:20px;font-size:19px;line-height:1.45;color:var(--muted)}.watch strong{color:var(--ink)}.demo-tabs{display:flex;gap:8px;margin-top:17px}.demo-tabs button{font-size:16px}.demo-tabs button.active{background:var(--accent);color:white} [data-reveal]{transition:opacity .25s,transform .25s}[data-reveal].unrevealed{opacity:.12;transform:translateY(5px)}.state-card{border:1px solid var(--line);padding:20px;border-radius:7px;margin-top:20px;background:#ffffff50}.state-card .state{display:none}.state-card .state.active{display:block}.formula{font:34px/1.5 Consolas,monospace}.formula small{font-size:19px;display:block;color:var(--muted)}.svg-graph{width:100%;height:235px;overflow:visible}.svg-graph text{font-family:Consolas,monospace;fill:var(--ink);font-size:20px}.svg-graph .node{fill:#e9efea;stroke:var(--accent);stroke-width:2}.svg-graph .phi{fill:#eee7f5;stroke:var(--purple)}.svg-graph .ctrl{fill:#faedce;stroke:#b88228}.svg-graph .edge{fill:none;stroke:#587075;stroke-width:2}.svg-graph .memory-edge{stroke:var(--blue);stroke-width:3}.graph-caption{font-size:15px;color:var(--muted);text-align:center} diff --git a/docs/2026_REBASE/slides.js b/docs/2026_REBASE/slides.js index fc54dc41..d27034d4 100644 --- a/docs/2026_REBASE/slides.js +++ b/docs/2026_REBASE/slides.js @@ -76,7 +76,7 @@ R.slides=[ { id:'title',label:'A Simple Tutorial',section:'REBASE 2026',minutes:1,steps:0,still:true, - body:()=>'<div class="title-layout"><div class="title-copy"><div class="title-line"></div><h1>A <span class="accent">Simple</span><br>Tutorial.</h1><p class="subtitle">An open-source, all-Java compiler<br>modeled after Java’s C2.</p><div class="speaker"><strong>Cliff Click</strong><span>Sea of Nodes · from source to machine code</span></div></div><div><img class="portrait" src="assets/cliff-click-2020.jpeg" alt="Cliff Click seated on outdoor stone steps"><p class="photo-caption">REBASE / SPLASH · 2026</p></div></div>'+external(R.repo,'github.com/SeaOfNodes/Simple','title-repo'), + body:()=>'<div class="title-layout"><div class="title-copy"><div class="title-line"></div><h1>A <span class="accent">Simple</span><br>Tutorial.</h1><p class="subtitle">An open-source, all-Java compiler<br>modeled after Java’s C2.</p><div class="speaker"><strong>Cliff Click</strong><span>Sea of Nodes · from source to machine code</span></div></div><div class="portrait-block"><img class="portrait" src="assets/cliff-click-2020.jpeg" alt="Cliff Click seated on outdoor stone steps"><p class="photo-caption">REBASE / SPLASH · 2026</p></div></div>'+external(R.repo,'github.com/SeaOfNodes/Simple','title-repo'), notes:notes('An executable compiler tutorial',[ 'Assume SSA and compiler background. Simple is a small language used to explain a real optimizing compiler architecture.', 'The compiler is written in Java, modeled on C2, and open source. The teaching unit is a complete compiler snapshot, with runnable tests and an explanation.', @@ -84,8 +84,8 @@ ]) }, { - id:'bio',label:'Who am I?',section:'Cliff Click',minutes:1,steps:0, - body:()=>'<h2>Who am I?</h2><div class="bio-grid"><div><p class="accent">Cliff Click</p><ul class="bio-list"><li>HotSpot’s original C2 compiler<small>Sea of Nodes, optimization, and the JVM</small></li><li>Azul, H2O, and half a dozen other startups<small>JVMs, low-pause GC, and distributed computing</small></li><li>Coffee Compiler Club<small>Founder and host · language implementation discussions</small></li></ul>'+links()+'</div><div><img class="club-image" src="assets/coffee-compiler-club-still.gif" alt="Coffee Compiler Club logo"><p class="club-caption">People who enjoy talking about compilers.</p></div></div>', + id:'bio',label:'Who am I?',section:'Cliff Click',minutes:1,steps:0,still:true, + body:()=>'<div class="bio-grid"><div><h2>Who am I?</h2><p class="accent bio-name">Cliff Click</p><ul class="bio-list"><li>HotSpot’s original C2 compiler<small>Sea of Nodes, optimization, and the JVM</small></li><li>Azul, H2O, and half a dozen other startups<small>JVMs, low-pause GC, and distributed computing</small></li><li>Coffee Compiler Club<small>Founder and host · language implementation discussions</small></li></ul>'+links()+'</div><div class="portrait-block bio-media"><img class="portrait" src="assets/cliff-click-2020.jpeg" alt="Cliff Click seated on outdoor stone steps"><img class="club-image" src="assets/coffee-compiler-club-still.gif" alt="Coffee Compiler Club logo"><p class="club-caption">People who enjoy talking about compilers.</p></div></div>', notes:notes('Keep the biography to a minute',[ 'Select two relevant facts: original C2 and Sea of Nodes; subsequent JVM and runtime work at Azul.', 'Coffee Compiler Club is the community connection. Point to the YouTube channel and invite people to email for a Discord invite.', |
