Reposted by Alice ✨teo @doublenegation.bsky.social · 9hBlog post about instrumenting Lix evaluation with Tracy informal.codes/posts/tracy-lix 0113
Alice ✨ @welltypedwit.ch · 8hright?? the only reason I ever use it is to get to the download button (that is of course unclickable until the reader has finished loading lol) 010
Alice ✨ @welltypedwit.ch · 19hmy favorite is how if it breaks (which it does pretty regularly because of course it does), the button it shows you on the error message to navigate away is also unclickable 010
Alice ✨ @welltypedwit.ch · 19hit's genuinely impressive how often the acm pdf reader thing makes every button unclickable i would not know how to do that intentionally without putting in a lot of extra effort 4111
Alice ✨ @welltypedwit.ch · 30/09/2026yes. it's also older than rust ^^ e.g. i found a random haskell cafe thread from 2008 that mentions it: mailman.haskell.org/archives/lis...mailman.haskell.org Re: [Haskell-cafe] Fighting the monad stack, MonadIO - Haskell-Cafe - Haskell.org 180
Alice ✨ @welltypedwit.ch · 30/09/2026(that one does come up occasionally though since `case x of Blah y -> y` has different semantics depending on whether that Blah is a newtype pattern or a regular data constructor pattern) 030
Alice ✨ @welltypedwit.ch · 30/09/2026it's very common in haskell as well. i don't think i've heard "newtype pattern" before, aside from like, a pattern that matches on a newtype 2100
Alice ✨ @welltypedwit.ch · 29/09/2026idk, maybe it's not that bad though. one nice advantage i have is that boxing twice doesn't actually do anything so you at least couldn't accidentally pessimize your code that already explicitly boxed things 020
Alice ✨ @welltypedwit.ch · 29/09/2026yeah but if you decide that this thing should be boxed at that stage, then that might have a pretty serious performance cost since it now suddenly needs to insert box/unbox operations everywhere and that cost is very hard to see from the user's perspective 220
Alice ✨ @welltypedwit.ch · 29/09/2026well it is strictly faster than even your working solution here so... ^^ (it's also definitely a moving gc. currently it's entirely generational copying but i would maybe like a concurrent non-moving major heap later, depending on how much i want future alice to hate me when she has to debug it) 120
Alice ✨ @welltypedwit.ch · 29/09/2026(if i do it entirely as an optimization in the backend, you will get very subtle heap allocations and if i do it on the frontend where it impacts types, i need to decide what "too large" means and that gets very messy once you involve abstract types that don't expose how large they actually are) 120
Alice ✨ @welltypedwit.ch · 29/09/2026(i'd like to auto-box large representations automatically at some point, i'm just not really sure how to do it in a way that is transparent) 120
Alice ✨ @welltypedwit.ch · 29/09/2026and you wouldn't need any downcasting tricks since the string stored inside the JSON is also just its own heap object that you can share however you want without copying anything 211
Alice ✨ @welltypedwit.ch · 29/09/2026if we assume that the `JSON` enum itself is large, you can just put it behind a Box and get something similar to your Arc solution, except a lot more efficient (no actual RC, bump pointer allocation) 110
Alice ✨ @welltypedwit.ch · 29/09/2026✨garbage collection✨ ^^ so, your first approach would already Just Work because copying the json object would only do a shallow copy of a few bytes (since all the large values (strings, maps, arrays) are already behind a pointer and vega doesn't have ownership) 130
Reposted by Alice ✨PolyWolf @wolf.girl.technology · 29/09/2026New blog post: "Pining for Arc Downcasting in Rust" wolfgirl.dev/blog/2026-09-29-pining… #programming #rust 6243
Alice ✨ @welltypedwit.ch · 27/09/2026but it also makes my goal of beating rustc in at least one benchmark seem much easier to achieve than i thought ^^ 0110
Alice ✨ @welltypedwit.ch · 27/09/2026i was really concerned for a second why my (naive, non-gc) vega code was so much slower but no, rust is exactly as slow lol (which makes sense since it's really just LLVM at that point and the entire benchmark is dominated by allocation performance anyway (which is why ghc is so fast)) 1100
Alice ✨ @welltypedwit.ch · 27/09/2026funny how if you pick the right benchmark, ghc can beat rustc by a factor of 10 1130
Alice ✨ @welltypedwit.ch · 26/09/2026"idris2 promised to be systems level but the betrayal is now evident and it is slower than haskell" okay, insane phrasing aside, when did idris2 (the language that deliberately compiles to chez scheme so it doesn't need to implement its own complex backend) promise to be "systems level" 1130
Alice ✨ @welltypedwit.ch · 26/09/2026"[ghci] is responsive since it only type checks and reloads byte code" ah yes, ghci type checks bytecode. that's absolutely how interpreters work, mr compiler engineer 190
Alice ✨ @welltypedwit.ch · 26/09/2026"haskell compilation times are almost as bad as rust's" they're quite a lot worse actually lol. you missed the one opportunity where you could have given an actually applicable criticism and you still missed it 1140
Alice ✨ @welltypedwit.ch · 26/09/2026"last time i was running cachegrind on a ghc profile it was spending some 99% in the evacuate function" well yeah if you use a tool that ghc doesn't support you will get bullshit outputs. (you can use `+RTS -s` to see the actual gc time and it's usually closer to ~10%) 1110
Alice ✨ @welltypedwit.ch · 26/09/2026"that sentence only makes sense to me if you wanted ever parameter to be lazy and have decided to encode every program as a graph" no, it literally doesn't. the entire point is that encoding it as a graph is the solution to this 180
Alice ✨ @welltypedwit.ch · 26/09/2026omg how can you call yourself a "type theorist and compiler engineer" and then struggle to understand this trivial sentence from SPJ's "implementation of functional programming languages" that says literallly nothing other than that naively substituting variablles in a syntax tree is inefficient" 1100
Alice ✨ @welltypedwit.ch · 26/09/2026"the hope that [due to laziness] unused values can be skipped is mostly wishful thinking. programmers already use if statements pretty intelligently for that" how did they watch this back and come to the conclusion "yes, this is something that should be uploaded to youtube for everyone to see" 1130
Alice ✨ @welltypedwit.ch · 26/09/2026"Haskell's least forgivable misstep is performance [including] a gargabe collector that cannot be removed" oh no that would have been on the bingo card 2130
Alice ✨ @welltypedwit.ch · 26/09/2026ok nevermind, don't take shots to this, you might not survive bsky.app/profile/well... 190
Alice ✨ @welltypedwit.ch · 26/09/2026"i don't like do syntax" i should have made a bingo card... 1110
Alice ✨ @welltypedwit.ch · 26/09/2026"note that simply dependent types provide a much more solid approach to meta programming since you can write derivation functions directly in the core language" dependent types mentioned in a context where they're not applicablle at all. take a shot 2130
Alice ✨ @welltypedwit.ch · 26/09/2026it (*optionally*) gives you wrappers that work in a monad so that you can use them in combination with operations that query the environment (reify), but how on earth do you get to "little control over what gets generated" from that 1110
Alice ✨ @welltypedwit.ch · 26/09/2026"It's very difficult to reason with [TemplateHaskell] since it's a monadic DSL so we're dealing with imperative order-dependent generation with very little control over what gets generated" omfg TH literally makes you write out the syntax tree. 1140
Alice ✨ @welltypedwit.ch · 26/09/2026"type classes are a foreign mechanism that doesn't share a theory with hindley milner" i... don't even know what to say to that lol 1160
Alice ✨ @welltypedwit.ch · 26/09/2026"ocaml which steadfastly refused to go off the rails [..]" lmaoo 190
Alice ✨ @welltypedwit.ch · 26/09/2026funny how like, almost every claim is just wrong or at least massively misleading 2100
Alice ✨ @welltypedwit.ch · 26/09/2026oh that stupid incorrect haskell video is made by the guy that made that stupid incorrect rust video. that makes sense. 6370
Alice ✨ @welltypedwit.ch · 25/09/2026> In addition, premature promotion will increase the incidence of nepotism, as ‘tenured’ garbage objects in the old generation preserve their offspring in the young generation, artificially inflating the survival rate as those dead children will also be promoted. we have... interesting terminology 1400
Alice ✨ @welltypedwit.ch · 25/09/2026lol fair. i'm just curious because this is something i don't think i've ever even considered wanting to do ^^ (and i guess the reason it's not there anymore is probably that it caused more harm by people accidentally reloading their important tabs than good in the 1% case where it might be useful) 120
Alice ✨ @welltypedwit.ch · 24/09/2026for all their flaws, sometimes i really wish i could have either an ocaml-style interface file or haskell-style export list in rust. it's so nice to be able to specify the interface cleanly in one place before worrying about the actual implementation 3280
Reposted by Alice ✨waffle .-. @waffle.pet · 23/09/2026I'm giving a talk titled "breaking changes are a social construct" tomorrow at the Amsterdam Rust meetup. You should come if you can! www.meetup.com/rust-amsterd...meetup.comRust Meetup @ BlockTech, Thu, Sep 24, 2026, 6:30 PM | MeetupJoin us for an evening of cutting-edge Rust talks, real-world use cases and great conversations hosted at BlockTech. This meetup is open to anybody who has an interest in t 2354
Alice ✨ @welltypedwit.ch · 21/09/2026but ocaml doesn't actually get the benefits of either one (and in practice it doesn't matter anyway since all your dependencies are going to break in 5 years) 030
Alice ✨ @welltypedwit.ch · 21/09/2026i also find it so unfortunate how half-assed everyone's approach to backwards compatibility is. you can either actually commit to not breaking code (like c# where every new keyword is a conditional keyword for this exact reason) or you can do some actual meaningful breaking changes from time to time 360
Alice ✨ @welltypedwit.ch · 21/09/2026(also I think the number of people that use effect as a variable is not much lower than the number that use it as a keyword ^^) 120
Alice ✨ @welltypedwit.ch · 21/09/2026and yet all the guarantees that should have bought go out the window because of some dumb triviality like adding syntax for a language feature 99% of users are never going to touch 120
Alice ✨ @welltypedwit.ch · 21/09/2026i just find it funny that lots of genuinely good changes (like changing the horrible type variable behavior) will probably never happen because of backwards compatibility concerns... 120