Alice ✨

@welltypedwit.ch

There’s no sense crying over every mistake. You just keep on trying ’til you run out of cake - GLaDOS

I was interviewing someone with 4 years of OCaml experience, and said: "The language solved problems I didn't know I had, but the tooling invented problems I didn't know were possible"

I thought that now that i'm writing more rust i could maybe make my peace with method syntax but no. it's so dumb, why are you all doing this to yourselves

it's so strange how like at least 60% of the time when someone makes a claim about "making invalid states unrepresentable", what they actually mean is using a representation with many perfectly representable invalid states that are just hidden behind an abstract type and a smart constructor

it's interesting how every few months half of bluesky gets outraged at the platform's fascist leadership practices (banning people for sending death threats)

you know, i don't love that there is a massive difference between let x = blah(); f(x); g(); and { let x = blah(); f(x); } g(); in rust

i think there is something a little unsatisfying about the explanation that rust's never is not a bottom type and I think it's that it *is* the bottom element of a slightly modified subtyping relation where every type constructor is invariant.

i have so many ideas for vega features that i would really like to implement eventually™ but just haven't had the time for. in no particular order: - bit based layouts: i want layouts to be done on bits instead of bytes so that i can stuff booleans into any unused spaces (e.g. lower pointer bits)

omfg bluesky just deleted like 7 posts because i bumped my mouse against my keyboard and accidentally pressed the back button there is literally a web feature to warn you if you're about to close a tab that contains unsaved work

i just realized that a really cute consequence of the way i would like to re-do layout generation for vega (based on bit sizes rather than byte sizes) is that it's going to give you bitfields for free.

so, what is the intended™ way of doing this in rust? BlockList is an intrusive list of blocks, so it contains lots of pointers and doesn't implement Send. i know what i'm doing though so i *can* get the warning to shut up by making the global mutable (which means that any access is unsafe anyway)

struct BlockAllocator {
    free_blocks: Mutex<BlockList>,
}

static mut GLOBAL_BLOCK_ALLOCATOR: BlockAllocator = BlockAllocator {
    free_blocks: Mutex::new(BlockList::new()),
};

it'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