Building a Brainfuck DSL in Forth using code generation: venko.blog/articles/for...
#programming #brainfuck #forth
Building a Brainfuck DSL in Forth using code generation: venko.blog/articles/for...
#programming #brainfuck #forth
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...
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.
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
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...
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
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?
In that an enum is represented under the hood as a sealed class hierarchy. Am I following?
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
Its interesting that Dada uses the class keyword for records. Do you plan to support inheritance?
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)?
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?
New Blog Post: "So I've Been Thinking About Static Site Generators"
wolfgirl.dev/blog/2026-02...
#programming
New post begging for more teaching material on query based compilation 🥺
thunderseethe.dev/posts/compil...
Should be updated now. Please let me know if it is clearer.
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.
Thank you! It was a lot of work, so I appreciate the love
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...
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
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?
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.
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.
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.
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.
The title of the post should read "desugaring" 🙇
Fresh making a language series post talking about desugaring: thunderseethe.dev/posts/desuga...
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!
There's a neat bonus post included because I realized I need to rewrite type inference to support the full compiler 🥹
New post in the making a language series about parsing. What have I become thunderseethe.dev/posts/parser...