From 5853c2d150519f19bce5c45ce1b6888bc81e3298 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Sun, 4 Oct 2026 17:01:59 -0700 Subject: Update slides --- docs/2026_REBASE/lattices.js | 8 ++++---- docs/2026_REBASE/slides.css | 4 ++-- docs/2026_REBASE/slides.js | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'docs') 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.','arg : ⊥:int
3 : 3'), point('Meet combines alternatives.','1 ∧ 1 = 1
1 ∧ 2 = ⊥:int'), 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:'

Lattice · about 30 seconds of this demo slot

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.

'}, + ],'Standard flat integer lattice (monotone analysis frameworks). Tuples recursively contain collections of types.'), + notes:'

Lattice · about 30 seconds of this demo slot

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.

'}, 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.','⊤:ctrl = unreachable
⊥:ctrl = reachable'), 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:()=>'

A Simple
Tutorial.

An open-source, all-Java compiler
modeled after Java’s C2.

Cliff ClickSea of Nodes · from source to machine code
Cliff Click seated on outdoor stone steps

REBASE / SPLASH · 2026

'+external(R.repo,'github.com/SeaOfNodes/Simple','title-repo'), + body:()=>'

A Simple
Tutorial.

An open-source, all-Java compiler
modeled after Java’s C2.

Cliff ClickSea of Nodes · from source to machine code
Cliff Click seated on outdoor stone steps

REBASE / SPLASH · 2026

'+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:()=>'

Who am I?

Cliff Click

  • HotSpot’s original C2 compilerSea of Nodes, optimization, and the JVM
  • Azul, H2O, and half a dozen other startupsJVMs, low-pause GC, and distributed computing
  • Coffee Compiler ClubFounder and host · language implementation discussions
'+links()+'
Coffee Compiler Club logo

People who enjoy talking about compilers.

', + id:'bio',label:'Who am I?',section:'Cliff Click',minutes:1,steps:0,still:true, + body:()=>'

Who am I?

Cliff Click

  • HotSpot’s original C2 compilerSea of Nodes, optimization, and the JVM
  • Azul, H2O, and half a dozen other startupsJVMs, low-pause GC, and distributed computing
  • Coffee Compiler ClubFounder and host · language implementation discussions
'+links()+'
Cliff Click seated on outdoor stone stepsCoffee Compiler Club logo

People who enjoy talking about compilers.

', 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.', -- cgit v1.2.3