thunderseethe's Avatar

thunderseethe

@thunderseethe.dev

45
Followers
56
Following
86
Posts
27.10.2023
Joined
Posts Following

Latest posts by thunderseethe @thunderseethe.dev

Building a Brainfuck DSL in Forth using code generation

Building a Brainfuck DSL in Forth using code generation: venko.blog/articles/for...

#programming #brainfuck #forth

25.12.2025 01:27 👍 2 🔁 2 💬 0 📌 0
Preview
Size, Stride, Alignment - Swift Unboxed The basics on the memory layout of Swift struct instances.

Swift splits up size and stride so that types can be laid out differently in Arrays for aligned memory accesses. See more at swiftunboxed.com/internals/si...

05.03.2026 15:11 👍 3 🔁 0 💬 1 📌 0

Yes that matches my understanding. There's also the more mundane problem that e en outside these degenerate cases executing all the administrative nodes can just be slower than leftmost outermost reduction.

01.03.2026 20:23 👍 1 🔁 0 💬 0 📌 0

In theory kind and hvm include an elementary checker to exclude these degenerate terms but I've never found prior art for what that is or docs on how its implemented

01.03.2026 19:44 👍 2 🔁 0 💬 0 📌 0

Interaction nets include nodes to duplicate and erase values that very much mirror linear types in their functionality. It's part of what causes optimal reduction to have degenerate cases that perform poorly depsite doing the minimal number of beta reductions: dl.acm.org/doi/abs/10.1...

01.03.2026 19:43 👍 3 🔁 0 💬 2 📌 0

It had led me to move from excitement about the project to skepticism until its seen some real usage by folks not directly involved on producing it

01.03.2026 19:10 👍 4 🔁 0 💬 1 📌 0

In general that kind of rhetoric has seemed to surround kind and the hvm. They gave an example showing how the hvm was faster than ghc on a synthetic benchmark, but then that benchmark is a binary tree shaped operation that perfectly saturated every core, so like what's the takeaway supposed to be?

01.03.2026 19:09 👍 5 🔁 0 💬 1 📌 0

In that an enum is represented under the hood as a sealed class hierarchy. Am I following?

27.02.2026 16:44 👍 0 🔁 0 💬 1 📌 0
Preview
Reachability types: tracking aliasing and separation in higher-order functional programs | Proceedings of the ACM on Programming Languages Ownership type systems, based on the idea of enforcing unique access paths, have been primarily focused on objects and top-level classes. However, existing models do not as readily reflect the finer a...

I'd recommend checking out reachability types: dl.acm.org/doi/abs/10.1...

They overlap with places in framing the problem as where does my borrow come from rather than what is its lifetime

27.02.2026 16:43 👍 2 🔁 0 💬 1 📌 0

Its interesting that Dada uses the class keyword for records. Do you plan to support inheritance?

27.02.2026 16:01 👍 0 🔁 0 💬 1 📌 0

Interesting. Is ghci sophisticated enough to determine that on your own? Is that something you configure in your cabal file by specifying what's loaded into ghci (vs what's a transitive dependency)?

23.02.2026 16:57 👍 0 🔁 0 💬 1 📌 0

I'd be curious to hear more about this. I was under the impression a lot of GHCs incremental stuff was at a module granularity through hi files. Does it do per item incremental builds within a module?

23.02.2026 16:43 👍 1 🔁 0 💬 1 📌 0
Preview
So I've Been Thinking About Static Site Generators My current one is _fine_, but the rebuilds are a bit too long for my tastes (>10s) so I'd like to change that.

New Blog Post: "So I've Been Thinking About Static Site Generators"

wolfgirl.dev/blog/2026-02...

#programming

23.02.2026 15:12 👍 21 🔁 3 💬 7 📌 0
Compiler Education Deserves a Revolution How we teach compilers and why it's gotta change

New post begging for more teaching material on query based compilation 🥺
thunderseethe.dev/posts/compil...

19.02.2026 14:24 👍 0 🔁 0 💬 0 📌 0
How to Choose Between Hindley-Milner and Bidirectional Typing A false dichotomy that hides the real request

thunderseethe.dev/posts/how-to...

15.02.2026 18:04 👍 5 🔁 0 💬 0 📌 0

Should be updated now. Please let me know if it is clearer.

22.01.2026 18:55 👍 0 🔁 0 💬 0 📌 0

Yes that's definitely a possibility. In the name resolved AST an undefined variable becomes a hole, so it would be weeded out by our check that we have a variable under cursor. I'll try to clarify that passage when I'm at a keyboard.

22.01.2026 15:33 👍 0 🔁 0 💬 0 📌 0

Thank you! It was a lot of work, so I appreciate the love

21.01.2026 16:45 👍 2 🔁 0 💬 0 📌 0
Making an LSP for great good Implementing an LSP from our query-based compiler passes

Get in loser, we're making an LSP! thunderseethe.dev/posts/lsp-ba...

You can see the final product live and in color in the playground: thunderseethe.dev/making-a-lan...

21.01.2026 15:12 👍 5 🔁 1 💬 2 📌 0

Hijacking, as I do not know the original intent. But I see a common misconception that HM=unification and bidir=no unification that leads people to a false dichotomy when really you can (and probably should) tack unification onto whatever type rules you pick

13.01.2026 13:44 👍 2 🔁 0 💬 0 📌 0

I think the IsInteger constraints will work in so far as type checking goes but I'm not sure how they'd be lowered into executable code down the line. Perhaps you could monomorphize and determine the primitive needed based on the constraint?

01.01.2026 02:36 👍 0 🔁 0 💬 0 📌 0

Or you could do like Rust and treat literals as their own kind of variable until they're coerced to a known type by inference, defaulting to i32 if they're never coerced.

01.01.2026 02:35 👍 0 🔁 0 💬 1 📌 0

A little bit the answer depends on the other features you have planned for the language. For example, if you have type classes they support this feature out of the box. See haskells Num class, specifically the fromInteger method.

01.01.2026 02:33 👍 0 🔁 0 💬 1 📌 0
Resolving Names Once and for All Resolving scoping and shadowing to produce unique variables for our names

Unprecedented post in the making a language series, talking about resolving names: thunderseethe.dev/posts/namere...

This is the keystone to complete our compilation arch.

27.12.2025 23:39 👍 2 🔁 1 💬 0 📌 0

I dont think that's the case for trait bounds, is it? Once you convert to dictionary passing they can be monomorphized like any other function parameter. Similar to what Swift does for their witness tables.

16.12.2025 16:43 👍 1 🔁 0 💬 1 📌 0

The title of the post should read "desugaring" 🙇

02.12.2025 17:15 👍 0 🔁 0 💬 0 📌 0
Desugarging the Relationship Between Concrete and Abstract Syntax Converting our CST into our AST and desugarging let expressions

Fresh making a language series post talking about desugaring: thunderseethe.dev/posts/desuga...

02.12.2025 16:15 👍 1 🔁 0 💬 1 📌 0

This is the blog post I wish I'd read before starting the KCL parser. I think someday we'll rewrite the parser to use this approach. KCL parser has to be more error-tolerant, and I think this would help a lot. If you're keen on parsers or PLs, read this tutorial!

12.11.2025 14:49 👍 11 🔁 1 💬 0 📌 0

There's a neat bonus post included because I realized I need to rewrite type inference to support the full compiler 🥹

12.11.2025 14:48 👍 3 🔁 0 💬 0 📌 0
Reproachfully Presenting Resilient Recursive Descent Parsing Parsing syntax for our base language with error recovery

New post in the making a language series about parsing. What have I become thunderseethe.dev/posts/parser...

12.11.2025 14:47 👍 6 🔁 0 💬 2 📌 1