mirror of
https://github.com/alex-s168/website.git
synced 2025-09-10 09:05:08 +02:00
small refactor
This commit is contained in:
18
build.sh
18
build.sh
@@ -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"
|
||||||
|
23
common.typ
23
common.typ
@@ -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
18
components/header.typ
Normal 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[, ]
|
||||||
|
]
|
@@ -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 {
|
||||||
stroke: black,
|
// TODO: after typst fix html exporter breaking line :sob:
|
||||||
radius: 2pt,
|
// context html-frame(context
|
||||||
inset: if is-html() { 1.4pt } else { 4pt },
|
|
||||||
outset: 0pt,
|
box(
|
||||||
baseline: 3.1pt,
|
stroke: black,
|
||||||
text(it)
|
radius: 2pt,
|
||||||
)
|
inset: if is-html() { 1.4pt } else { 5pt },
|
||||||
|
outset: 0pt,
|
||||||
|
baseline: 3.1pt,
|
||||||
|
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;
|
||||||
|
}
|
||||||
")
|
")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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,))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@@ -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,))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@@ -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[
|
||||||
|
Reference in New Issue
Block a user