small refactor

This commit is contained in:
2025-07-22 23:36:20 +02:00
parent 8053caf1db
commit c9d8f8db60
7 changed files with 89 additions and 51 deletions

View File

@@ -5,17 +5,15 @@ mkdir build
ln -s $(realpath res) build/res ln -s $(realpath res) build/res
git_rev=$(git rev-parse --short=12 HEAD)
git_commit_date=$(date -d @$(git log -1 --format=%at) +'%d. %B %Y %H:%M')
compile () {
typst compile --root . --features html --input git_rev=$git_rev --input git_commit_date="$git_commit_date" -j 6 $@
}
page () { page () {
compile --format pdf --input web=false "pages/$1" "build/$1.min.pdf" last_modified=$(git log -1 --format="%ad" --date="format:%d. %B %Y %H:%M" -- "pages/$1")
compile --format html --input web=true "pages/$1" "build/$1.desktop.html" full_commit_hash=$(git log -1 --format="%H" -- "pages/$1")
compile --format html --input web=false "pages/$1" "build/$1.min.html" git_inp=(--input "git_rev=$full_commit_hash" --input "git_commit_date=$last_modified")
typst compile --root . --features html -j 6 "${git_inp[@]}" --format pdf --input web=false "pages/$1" "build/$1.min.pdf"
typst compile --root . --features html -j 6 "${git_inp[@]}" --format html --input web=true "pages/$1" "build/$1.desktop.html"
typst compile --root . --features html -j 6 "${git_inp[@]}" --format html --input web=false "pages/$1" "build/$1.min.html"
typst compile --root . --features html -j 6 "${git_inp[@]}" --format html --input web=false --input nano=true "pages/$1" "build/$1.nano.html"
} }
page "article-make-regex-engine-1.typ" page "article-make-regex-engine-1.typ"

View File

@@ -9,6 +9,7 @@
} }
#let is-web = to-bool(sys.inputs.at("web", default: "true")) #let is-web = to-bool(sys.inputs.at("web", default: "true"))
#let is-nano = to-bool(sys.inputs.at("nano", default: "false"))
#let is-html() = { if sys.inputs.at("query", default:"false") == "true" { #let is-html() = { if sys.inputs.at("query", default:"false") == "true" {
return false return false
} else { } else {
@@ -16,6 +17,9 @@
} } } }
#let git_rev = sys.inputs.at("git_rev", default: "") #let git_rev = sys.inputs.at("git_rev", default: "")
#let short_git_rev = if git_rev != "" {
git_rev.slice(0, count:8)
} else { "" }
#let git_commit_date = sys.inputs.at("git_commit_date", default: "") #let git_commit_date = sys.inputs.at("git_commit_date", default: "")
#let res-path() = { #let res-path() = {
@@ -49,17 +53,9 @@
} }
} }
#let html-p(txt) = {
context if is-html() {
html.elem("p", txt)
} else {
text(txt)
}
}
#let sized-p(size, txt) = { #let sized-p(size, txt) = {
context if is-html() { context if is-html() {
html.elem("p", attrs: (style: "font-size: " + str(size.abs.pt()) + "pt"), txt) html.elem("span", attrs: (style: "font-size: " + str(size.abs.pt()) + "pt"), txt)
} else { } else {
text(size, txt) text(size, txt)
} }
@@ -81,6 +77,11 @@
} }
} }
#let html-code(inner) = {
html-opt-elem("code", (:),
inner)
}
#let html-span(attrs, content) = { #let html-span(attrs, content) = {
html-opt-elem("span", attrs, content) html-opt-elem("span", attrs, content)
} }
@@ -305,3 +306,7 @@ document.addEventListener('scroll', (event) => {
#let person(p) = { #let person(p) = {
flink(p.url, p.nick) flink(p.url, p.nick)
} }
#let blocking-code(raw) = {
context html-frame(raw)
}

18
components/header.typ Normal file
View File

@@ -0,0 +1,18 @@
#import "../common.typ": *
#let rev() = [
#if git_rev != "" {[
Git revision #flink("https://github.com/alex-s168/website/tree/" + git_rev)[\##short_git_rev]
]}
#if git_commit_date != "" {[
Modified at #git_commit_date
]}
]
// authors is list of people in common:people
#let rev-and-authors(authors) = [
#rev()
Written by #authors.map((p) => person(p)).join[, ]
]

View File

@@ -28,14 +28,30 @@
#set text(font: "DejaVu Sans Mono", size: default-font-size) #set text(font: "DejaVu Sans Mono", size: default-font-size)
#show raw: it => box( #show raw: it => if type(it.lang) == str and it.lang != "" and is-nano == false {
// TODO: after typst fix html exporter breaking line :sob:
// context html-frame(context
box(
stroke: black, stroke: black,
radius: 2pt, radius: 2pt,
inset: if is-html() { 1.4pt } else { 4pt }, inset: if is-html() { 1.4pt } else { 5pt },
outset: 0pt, outset: 0pt,
baseline: 3.1pt, baseline: 3.1pt,
text(it) text(it)
) )
} else if is-nano == true {
html-code(text(it))
} else {
box(
stroke: black,
radius: 2pt,
inset: if is-html() { 1.4pt } else { 5pt },
outset: 0pt,
baseline: 3.1pt,
text(it)
)
}
#show box: it => { #show box: it => {
context if is-html() { context if is-html() {
@@ -119,6 +135,12 @@ html.elem("style", "
.current { .current {
font-weight: bold; font-weight: bold;
} }
pre {
margin-top: 0px;
margin-bottom: 0px;
display: inline;
}
") ")
} }

View File

@@ -1,6 +1,7 @@
#import "../common.typ": * #import "../common.typ": *
#import "../simple-page-layout.typ": * #import "../simple-page-layout.typ": *
#import "../core-page-style.typ": * #import "../core-page-style.typ": *
#import "../components/header.typ": rev-and-authors
#simple-page( #simple-page(
gen-table-of-contents: true, gen-table-of-contents: true,
@@ -11,7 +12,7 @@
#title[The making of the favicon] #title[The making of the favicon]
#sized-p(small-font-size)[ #sized-p(small-font-size)[
Written by alex_s168 #rev-and-authors((people.alex,))
] ]
] ]

View File

@@ -1,6 +1,7 @@
#import "../common.typ": * #import "../common.typ": *
#import "../simple-page-layout.typ": * #import "../simple-page-layout.typ": *
#import "../core-page-style.typ": * #import "../core-page-style.typ": *
#import "../components/header.typ": rev-and-authors
#simple-page( #simple-page(
gen-table-of-contents: true, gen-table-of-contents: true,
@@ -13,7 +14,7 @@
#title[Part 1: Introduction to RegEx] #title[Part 1: Introduction to RegEx]
#sized-p(small-font-size)[ #sized-p(small-font-size)[
Written by alex_s168 #rev-and-authors((people.alex,))
] ]
] ]

View File

@@ -1,25 +1,18 @@
#import "../common.typ": * #import "../common.typ": *
#import "../simple-page-layout.typ": * #import "../simple-page-layout.typ": *
#import "../core-page-style.typ": * #import "../core-page-style.typ": *
#import "../components/header.typ": rev-and-authors
#simple-page( #simple-page(
gen-table-of-contents: true, gen-table-of-contents: true,
[Alexander Nutz - Approaches to Pattern Matching] [Approaches to Pattern Matching - Alexander Nutz]
)[ )[
#section[ #section[
#title[Approaches to pattern matching in compilers] #title[Approaches to pattern matching in compilers]
#sized-p(small-font-size)[ #sized-p(small-font-size)[
#if git_rev != "" {[ #rev-and-authors((people.alex,))
Git revision #flink("https://github.com/alex-s168/website/tree/" + git_rev)[\##git_rev]
]}
#if git_commit_date != "" {[
Modified at #git_commit_date
]}
Written by alex_s168
] ]
] ]
@@ -80,23 +73,23 @@
#section[ #section[
An example is Cranelift's ISLE DSL: An example is Cranelift's ISLE DSL:
#context html-frame[```lisp #blocking-code(```lisp
;; x ^ x == 0. ;; x ^ x == 0.
(rule (simplify (bxor (ty_int ty) x x)) (rule (simplify (bxor (ty_int ty) x x))
(subsume (iconst_u ty 0))) (subsume (iconst_u ty 0)))
```] ```)
] ]
#section[ #section[
Another example is tinygrad's pattern system: Another example is tinygrad's pattern system:
#context html-frame[```python #blocking-code(```python
(UPat(Ops.AND, src=( (UPat(Ops.AND, src=(
UPat.var("x"), UPat.var("x"),
UPat(Ops.SHL, src=( UPat(Ops.SHL, src=(
UPat.const(1), UPat.const(1),
UPat.var("b")))), UPat.var("b")))),
lambda x,b: UOp(Ops.BIT_TEST, src=(x, b))) lambda x,b: UOp(Ops.BIT_TEST, src=(x, b)))
```] ```)
Fun fact: tinygrad actually decompiles the python code inside the second element of the pair, and runs multiple optimization passes on that. Fun fact: tinygrad actually decompiles the python code inside the second element of the pair, and runs multiple optimization passes on that.
] ]
@@ -145,7 +138,7 @@
#section[ #section[
== Examples == Examples
MLIR's `pdl` dialect can be used to replace `arith.addi` with `my.add` like this: MLIR's `pdl` dialect can be used to replace `arith.addi` with `my.add` like this:
#context html-frame[```llvm #blocking-code(```llvm
pdl.pattern @replace_addi_with_my_add : benefit(1) { pdl.pattern @replace_addi_with_my_add : benefit(1) {
%arg0 = pdl.operand %arg0 = pdl.operand
%arg1 = pdl.operand %arg1 = pdl.operand
@@ -156,7 +149,7 @@
pdl.replace %op with %new_op pdl.replace %op with %new_op
} }
} }
```] ```)
] ]
#section[ #section[
@@ -273,7 +266,7 @@
The main problem is ordering the patterns. The main problem is ordering the patterns.
As an example, consider these three patterns: As an example, consider these three patterns:
#context html-frame[```lisp #blocking-code(```lisp
;; A ;; A
(add x:Const y) => (add y x) (add x:Const y) => (add y x)
@@ -282,19 +275,19 @@
;; C ;; C
(add x 1) => (inc x) (add x 1) => (inc x)
```] ```)
] ]
#section[ #section[
Now what should the compiler do when it sees this: Now what should the compiler do when it sees this:
#context html-frame[```lisp #blocking-code(```lisp
(sub (add 5 1) 2) (sub (add 5 1) 2)
```] ```)
] ]
#section[ #section[
All three patterns would match: All three patterns would match:
#context html-frame[```lisp #blocking-code(```lisp
;; apply A ;; apply A
(sub (add 5 1) 2) => (sub (add 1 5) 2) (sub (add 5 1) 2) => (sub (add 1 5) 2)
;; only B applies now ;; only B applies now
@@ -308,7 +301,7 @@
;; atlernatively apply C ;; atlernatively apply C
(sub (add 5 1) 2) => (sub (inc 5) 2) (sub (add 5 1) 2) => (sub (inc 5) 2)
;; nothing applies anymore ;; nothing applies anymore
```] ```)
] ]
#section[ #section[