Chris Fallin

Nerd-of-all-trades, happiest when hacking deep innards of a compiler or runtime.

2025-06-18

Just presented weval at PLDI -- talk is at youtube.com/watch?v=ubfPyMCvhX in the livestream (2:26:00 or thereabouts if timestamp doesn't work). Tons of great discussions about this and many other things -- wish I could spend more time at conferences! (I suppose I wouldn't have any time to do the work to present here, then.) Thanks to coauthor @tekknolagi for the help getting this published.

2025-06-09

@regehr @bartcopp @MonniauxD feeling this right now! (I’m on the way to the other Dagstuhl seminar that is concurrent with @regehr ’s) currently on a regional train from Frankfurt airport to a pre booked taxi that will hopefully be there. Not to complain, it’s a good intro to parts of .de I haven’t seen before, at least the first time…

2025-06-08

Off to Germany for a Dagstuhl conference (dagstuhl.de/en/seminars/semina) on the intersection of Wasm and academic interests. Then straight from there to PLDI in Seoul for the weval paper. Somewhat surreal to be embarking on a "Wasm world tour" but here we are -- very grateful for the chance to do this!

Chris Fallin boosted:
CF Bolz-Tereickcfbolz
2025-06-02

Just saw the coolest demo Boris Shingarov, Jan Vraný on the MPLR stream: a instruction-stepping debugger of a RISC-V core, but it was integrated with the Sail specification so you could step *into* the RISC-V instruction to see what the specification says the instruction should do.

2025.programming-conference.or

screenshot of a smalltalk-built risc-v debugger, showing disassembled risc-v instructions and register values. the debugger has "over instruction" and "into instruction" buttons.screenshot of Sail source code after clicking "into instruction" button
Chris Fallin boosted:
2025-05-30

I've probably mentioned this before but a neat thing to add to union-find is another array of integers that is also initialized to 0,1,2... but you update it differently than the array of parents: for the union, when the roots aren't the same, swap the corresponding entries of the array.
That gives you a bunch of cyclic linked lists that let you enumerate any given set in the UF without scanning the whole UF, and you still have a cheap union (unlike maintaining explicit lists)

2025-05-27

@pervognsen @j2kun @regehr

One can still have the blowup inherent in, say, adding commutativity/associativity rules and storing all permutations of a big sum or running into timeouts or limits. In Cranelift we have limits but we've also picked a path where we don't do all this -- because of the ISLE DSL's pattern-match compiler, "rules are cheap and nodes are expensive" so we write multiple versions of a left-hand side if we need to do so. Or, yes, pick a canonical direction to rewrite.

2025-05-27

@pervognsen @j2kun @regehr

It's possible I'm missing some nuance here too but aegraphs do permit multiple representation (concise version: they keep multi-nodes-per-class and cost-based extraction, and single fixpoint, but canonicalize once at creation and never recanonicalize if a new equivalence "comes in by the side door").

2025-05-27

@pervognsen @j2kun @regehr

More in the talk that was linked above of course; but also I haven't ever formally published all of these tricks (and it's one of those hypothetical papers I'm not sure would make sense or be easy to get past reviewers -- a lot of interlocking design decisions, no single academic insight). At some point I should at least do a mega-blogpost. Someday!

2025-05-27

@pervognsen @j2kun @regehr

At the time we cut over (2+ years ago) compile time was at parity and we saw a small improvement in code quality. Hard to compare because at the same time I built aegraphs I built the integration with ISLE (our DSL for rewrites) so our rewrite database has grown significantly since then.

But there was a *ton* of engineering to get that: tricks so our SSA dataflow is implicitly a trivial aegraph, and "pay-as-you-go" in general. And pervasive single-pass thinking.

2025-05-27

@pervognsen @j2kun @regehr Yes to all of the above: we do "egraphs in name and halfway in spirit" in the sense that we address the pass ordering problem with the One True Fixpoint Loop, but we don't "go back and recanonicalize" ever -- with lots more nuance about why that's generally OK for the sorts of rewrite rules that we use.

2025-04-24

@wingo yeah that's a real issue with a lot of reviews; definitely been there. It's tricky of course... one wants some measure of "how good it is" -- unfortunately the more accessible option of "I disable parts of my system to try to approximate other design points / show benefit of each step" gets pretty mixed reviews IME. Seems a lot of reviewers live in an abstract world of toy implementations rather than real systems with engineer-years of work (even in very systems-y fields!).

Chris Fallin boosted:

My cartoon for this week's @newscientist.com

A Caroll diagram consisting of four rectangles arranged in a square.
The Y axis is labelled MOVE and split into FAST and SLOW.
The X axis is labelled THINGS and split into BREAK and FIX

Top left image: (Move Fast and Break Things) Tech Bro 
Bottom left image: (Move slow and break things) Runaway Steamroller 
Top right image: (Move fast and fix things) Emergency Plumber
Bottom left image: (Move slow and fix things) Grandpa with a toolbox
2025-04-10

@tekknolagi and I have put together our camera-ready version of our PLDI 2025 paper, "Partial Evaluation, Whole-Program Compilation": cfallin.org/pubs/pldi2025_weva

This paper is on weval, which I worked on for two years and previously wrote up on my blog (cfallin.org/blog/2024/08/28/we). In brief, it's a way to get a compiler from an interpreter "for free". Unlike past Futamura-like systems we're aware of, this one works on existing industrial interpreters (SpiderMonkey).

Enjoy! Looking forward to Seoul...

Chris Fallin boosted:
2025-04-09

I am delighted to announce that @cfallin and I have given the ACM permission to distribute our PLDI 2025 paper on laserdisc. See us in Seoul for a copy (or a beer).

2025-04-09

Note: I do not own a laserdisc player; this is irrelevant to the appeal honestly

2025-04-09

Doing ACM copyright paperwork and I apparently grant permission to distribute our paper "in print and electronic form [yup] ... broadcast, cablecast [hmm, ok] ... laserdisc [?!]"

where can I buy the laserdisc compilation of the best PLDI hits? this is something I would actually spend money on

Chris Fallin boosted:
Markus de Medeirosmarkusde@mathstodon.xyz
2025-04-04

A nice letter from @wilbowma with some parts redacted for security:

"To whom it may concern:
I'd recommend Markus de Medeiros .
Markus was so cool
For context, he is stud at compiler both conceptually and in terms of software engineering.
Markus did well in the course, receiving an 895182%.

In office hours, I did interact with Markus.
Man kills in research.
Overall, Markus was a pal.

Sincerely,
William J Bowman"

A heavily redacted, generic letter of recommendation from William Bowman (UBC). The un-redacted text is described in the post.
Chris Fallin boosted:
George Constantinidesgconstantinides@mathstodon.xyz
2025-03-28

This is going to be so much fun. "Program Optimisation with E-Graphs", a Dagstuhl workshop organised by @mwillsey, @cfallin, @michel and me. Max has done a fantastic job driving this proposal. It will be great to be back at Dagstuhl again.
dagstuhl.de/en/seminars/semina

Chris Fallin boosted:
casey@GPN will bark 4 headpatscas@treehouse.systems
2025-03-16

I'm proud to announce 6502.sh, because the world needs another 6502 emulator!

6502.sh is about 3k lines of busybox ash compatible shell script, it provides an emulated ACIA serial port and is capable of running BASIC

It has an integrated interactive debugger, with breakpoints, single stepping, and a myriad of other features

Check it out here: codeberg.org/calebccff/6502.sh

; ./6502.sh ./progs/basic/basic.bin
Loading ./progs/basic/basic.bin...
Reset vector: $E836

6502 EhBASIC [C]old/[W]arm ?

Memory size ? 32768

31999 Bytes free

Enhanced BASIC 2.22p5

Ready
10 PRINT "HI FROM 6502.SH"
20 GOTO 10
RUN
HI FROM 6502.SH
HI FROM 6502.SH
HI FROM 6502.SH
HI FROM 6502.SH
Status: $36
    negative : 0
    overflow : 0
    constant : 1
    break    : 1
    decimal  : 0
    interrupt: 1
    zero     : 1
    carry    : 0
Registers:
    A : $00
    X : $DF
    Y : $02
    SP: $FF
    PC: $C4C3
Ran 31204 instructions
65sh>
Chris Fallin boosted:
2025-03-08

tyler durden: the things you own end up owning you
rustc: actually, that’s impossible

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst