Skip to content

Commit f6ebe4b

Browse files
committed
Fix dates on the initial C4 posts
1 parent dd94be2 commit f6ebe4b

File tree

5 files changed

+18
-16
lines changed

5 files changed

+18
-16
lines changed

_posts/2025-09-30-classic-clojure-compiler-contemplation.md renamed to _posts/2025-08-31-classic-clojure-compiler-contemplation.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: C4 - Classic Clojure Compiler Contemplation
4-
date: 2025-09-30 00:00:00 -0500
4+
date: 2025-08-31 00:00:00 -0500
55
categories: general
66
---
77

@@ -10,13 +10,15 @@ In this post, we look at the overall structure of the compiler.
1010

1111
The other posts in the series are:
1212

13-
- [C4: AST me anything]({{site.baseurl}}{% post_url 2025-10-01-AST-me-anything}) - A tour of the AST nodes produced by the compiler
14-
- [C4: Symbolic of what?]({{site.baseurl}}{% post_url 2025-10-02-symbolic-of-what}) - A little digression on what symbols represent
15-
- [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-10-03-iseq-clarity}) - How to analyze an `ISeq`
16-
- [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-10-04-functional-anatomy}) - How functions are implemented in Clojure
13+
- [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything}) - A tour of the AST nodes produced by the compiler
14+
- [C4: Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what}) - A little digression on what symbols represent
15+
- [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity}) - How to analyze an `ISeq`
16+
- [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}) - How functions are implemented in Clojure
1717
- __C4: The fn*: talkin' 'bout my generation__ - Code-gen for functions
1818
- __C4: How type-ical__ - Type analysis by the compiler
1919
- __C4: I have something to emit__ - More on code generation
20+
- __C4: A time for reflection__ -- Reflection and dynamic callsites
21+
- __C4: Is there a protocol for that?__ -- Protocols
2022

2123
## The terms of discussion
2224

_posts/2025-10-01-AST-me-anything.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: C4 - AST me anything
4-
date: 2025-10-01 00:00:00 -0500
4+
date: 2025-09-01 00:00:00 -0500
55
categories: general
66
---
77

@@ -245,5 +245,5 @@ The main body of the `Compiler.Analyze` method just steps through a series of te
245245
The node types mentioned in this list from a very small subset of the all the node types.
246246
Here we see pretty much a few data-oriented node types. Clearly the `Symbol` and `ISeq` analyzers are doing the heavy lifting. Enough that each gets its own post:
247247

248-
- [Symbolic of what?]({{site.baseurl}}{% post_url 2025-10-02-symbolic-of-what})
249-
- [ISeq clarity]({{site.baseurl}}{% post_url 2025-10-03-iseq-clarity})
248+
- [Symbolic of what?]({{site.baseurl}}{% post_url 2025-09-02-symbolic-of-what})
249+
- [ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity})

_posts/2025-10-02-symbolic-of-what.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: C4 - Symbolic of what?
4-
date: 2025-10-02 00:00:00 -0500
4+
date: 2025-09-02 00:00:00 -0500
55
categories: general
66
---
77

@@ -258,7 +258,7 @@ private static object ResolveIn(Namespace n, Symbol symbol, bool allowPrivate)
258258

259259
To finish of this code, some brief comments on a few of the auxiliary methods mentioned above.
260260

261-
`Compiler.ReferenceLocal` is called when we have identified a reference to a local binding. It does some bookkeeping needed for code-gen. Specifically, it notes the usage of the local binding in the containing function (if there is one) and any functions above that is might be nested in. This is so that we know to close over those variables when creating an instance of the function. It also notes if the local variable is the `this` variable; reference to `this` precludes static linking. But more about that in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-10-04-functional-anatomy}).
261+
`Compiler.ReferenceLocal` is called when we have identified a reference to a local binding. It does some bookkeeping needed for code-gen. Specifically, it notes the usage of the local binding in the containing function (if there is one) and any functions above that is might be nested in. This is so that we know to close over those variables when creating an instance of the function. It also notes if the local variable is the `this` variable; reference to `this` precludes static linking. But more about that in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
262262

263263
`Compiler.RegisterVar` is similar. It just notes the reference to the `Var` in the containing function (if there is one). A field in the class implementing the function will be created and initialized to the `Var` in question.
264264

@@ -288,7 +288,7 @@ These are when the symbol does not have a namespace:
288288
- `ns` -- treated as a special case -- always found
289289
- name found in current namespace (return var) (there are variants in the resolve/lookup code that will create the `Var` if not found)
290290

291-
Several kinds of AST nodes can be created from symbols. The details of node types are covered in [C4: AST me anything]({{site.baseurl}}{% post_url 2025-10-01-AST-me-anything}). For symbols with a namespace:
291+
Several kinds of AST nodes can be created from symbols. The details of node types are covered in [C4: AST me anything]({{site.baseurl}}{% post_url 2025-09-01-AST-me-anything}). For symbols with a namespace:
292292

293293
- ns/name, ns names a `Type`, that type has a field or property with the given name => `StaticFieldExpr` or `StaticPropertyExpr`
294294
- ns/name, ns names a `Type`, no field or property found, name does not start with a period => `QualifiedMethodExpr`, Static

_posts/2025-10-03-iseq-clarity.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: C4 - ISeq clarity
4-
date: 2025-10-03 00:00:00 -0500
4+
date: 2025-09-03 00:00:00 -0500
55
categories: general
66
---
77

@@ -94,13 +94,13 @@ The following special cases are handled:
9494
- we are not in an 'evaluation context' (more on that some other day).
9595
- the `Var` is not marked as dynamic, does not have metatdata `:redef` = true, and does not have metadata ':declared' = true
9696
- The Var is bound to a class that has an `invokeStatic` method with a matching number of arguments
97-
I discussed static invocation in another blog post, [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming}). It also will be discussed in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-10-04-functional-anatomy}).
97+
I discussed static invocation in another blog post, [The function of naming; the naming of functions]({{site.baseurl}}{% post_url 2025-02-28-function-naming}). It also will be discussed in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
9898

9999
- primitive invocation. We create an AST node of type `InstanceMethodExpr` to invoke the `.invokePrim` method of the function. The conditions are:
100100
- `fexpr` is a `VarExpr`
101101
- the `Var` is bound to a class that has an `invokePrim` method with a matching number of arguments (determined by looking at the `:arglists` metadata on the `Var`)
102102
- we are not in an 'evaluation context' (more on that some other day).
103-
We will discuss this in more detail in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-10-04-functional-anatomy}).
103+
We will discuss this in more detail in [C4: Functional anatomy]({{site.baseurl}}{% post_url 2025-09-04-functional-anatomy}).
104104

105105
- keyword invocation. When our form looks like `(:keyword coll)`, we create an AST node of type `KeywordInvokeExpr`. The conditions are:
106106
- `fexpr` is a `KeywordExpr`

_posts/2025-10-04-functional-anatomy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
layout: post
33
title: C4 - Functional anatomy
4-
date: 2025-10-04 00:00:00 -0500
4+
date: 2025-09-04 00:00:00 -0500
55
categories: general
66
---
77

@@ -288,7 +288,7 @@ I'll leave `applyTo` as an exercise.
288288

289289
## Static invocation
290290

291-
In the previous post [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-10-03-iseq-clarity}), I touched upon the notion of static invocation of functions. Static invocation is an efficiency hack. It allows a call such as
291+
In the previous post [C4: ISeq clarity]({{site.baseurl}}{% post_url 2025-09-03-iseq-clarity}), I touched upon the notion of static invocation of functions. Static invocation is an efficiency hack. It allows a call such as
292292

293293
```Clojure
294294
(f 1 2 3)

0 commit comments

Comments
 (0)