On How We Respond to Ex-MAGA [curr ev, pols/Ω, p/a/s, morality/ethics]
Jul. 23rd, 2025 12:02 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I think this is important, and really insightful. Video and slightly excerpted transcript below.
Of note, Parkrose Permaculture is a crunchy secular leftist who is, herself, an ex-evangelical, and speaks with some personal authority about the world-view and culture.
2025 July 17: ParkrosePermaculture on YT: "MAGA mom apologizes for supporting Trump. Regrets her vote. How do we respond?" [9 min 43 sec]:
Of note, Parkrose Permaculture is a crunchy secular leftist who is, herself, an ex-evangelical, and speaks with some personal authority about the world-view and culture.
2025 July 17: ParkrosePermaculture on YT: "MAGA mom apologizes for supporting Trump. Regrets her vote. How do we respond?" [9 min 43 sec]:
[0:00] Can we talk about that viral video of that young woman who got on here and was like, "Y'all, I'm really sorry that I voted for Trump. I'm really sorry that I was MAGA. I realize now that I was wrong"? This this video:
[0:12] [stitched video, white woman speaking to camera, with title "Official apology: I voted for Trump"]I voted for Trump and I'm sorry. I am uneducated. I grew up in, um, public school system. I believed anything a teacher and a principal told me, and I didn't question it. And I walked in a straight line and I didn't use critical thinking skills, okay? I didn't read Project 2025, I have a disabled child, I'm a single mom of three. I believed what he said in his campaigns and I fucked up. And I'm sorry, okay?I find the responses to that video on social media quite interesting, because on one hand you have folks who are like, I don't forgive you. And I understand that. People are angry. Trumpers did incredible damage to this country. Getting Trump and Elon Musk put in positions of power in the United States is killing millions of people, right? We know that just the cancellations to USAID are going to kill 14 million people according to a new piece out in the Lancet. Trump and Steven Miller are now freely enacting an ethnic cleansing in the United States. People have a right to be really, really angry about those things.
[1:21] I've also seen a lot of other creators who have my complexion [i.e. white -- S.] and most of them are women, who have said, "It's okay, girlfriend. We all make mistakes. We all have been hoodwinkedked in the past. Yeah, people in America are very much indoctrinated. And we forgive you. We forgive you."
[1:38] And I guess I, I disagree fundamentally with both of those takes. And here's why.
We need to give Trumpers a place to land as they are deconstructing. Maybe the Epstein files [...] [2:14] And so everybody's going to have– everybody who ends up walking away from MAGA is going to have the beginning of that journey. [...] Not everybody starts from the same baseline. I guarantee you for folks watching that woman, if you wanted to judge her, then you probably didn't start with the same level of intense indoctrination, you're probably not from the same kind of subculture that she's from. And you didn't start from the same place that she's starting at. Every journey of a thousand miles begins with a single step. And you've got to give her space to take that step.
[3:02] So, I, I do want to give her all of the praise for getting online with her real face and doing something that's very hard to do. She was willing to swallow her pride in a culture where we very much center the self and we're not good at taking responsibility. We are not good at eating crow. We're not good at facing the music, right? She did that. [...] She deserves all the praise for that. I don't want to in any way minimize the work, the risk that she undertook in being willing to own it and being willing to say, "I was deeply wrong." Again, especially because we live in a culture where people taking accountability is not something that we are particularly good at or used to.
[4:04] And so I very much appreciate the other creators who are saying, "Come over here with us," – Right? – "I'll be a safe landing spot for you. It is never too late to admit that you were wrong."
But I also think when we're looking at MAGA, who has caused tremendous, tremendous harm in this country, right? They have contributed to the rise of fascism. They have supported the takeover of this nation by a fascist dictator. I understand a lot of them were ignorant. They chose to be willfully ignorant. I understand a lot of them come from a background where they are taught to deny their own intuition, to subvert their own will, to listen to and unconditionally obey what an authority figure is telling them. I know that so many of these folks go to churches that are telling them that Donald Trump is God's anointed, that he has God's favor, that he is doing the Lord's work. I understand the heaviness, the intense pressure, the hard sell of the subcultures that these folks belong to, and I understand the strength of character that it takes in that context to admit that you were wrong and say, "I shouldn't have done this, and I'm sorry."
[5:11] But I would encourage all of those mostly white women creators who are telling this young woman, "It's okay, girl. We forgive you. Everybody makes mistakes": this was not a mistake. And it doesn't really matter that there were extenduating circumstances and indoctrination. Doesn't matter that somebody caused great harm without understanding the full depth and breadth of the trauma and the suffering they would inflict by supporting this regime.
I know I have brought it up many times since the election and it continues to be one of the most relevant books when we are discussing people leaving MAGA, when we are discussing people deconstructing from Trumperism, when we are discussing how it is that we fold these folks back into society, and that book is called The Sunflower by Simon Visenthal. It is an incredibly important and relevant book in these times.
The subtitle of the book is "On the Possibilities and Limits of Forgiveness." It is a book about a young Nazi soldier who is dying and he wants to be forgiven the sins that he committed in the Holocaust. But he is asking forgiveness of somebody who is not his victim. And the question that is being posed to all kinds of faith leaders and philosophers in this book is who has the right to extend forgiveness, and what does it mean to extend forgiveness and what does it mean to ask for forgiveness?
[6:35] And I know I've said this in other videos and I just I think it's so important to continue to reiterate it when we're looking at ex-Maga. I appreciate their apology. I appreciate their contrition. I appreciate that they have realized how much harm they've caused and that they want people to know they no longer support the things that they once voted for. Really important.
But at the same time, if we are not the injured party, do we have a right to forgive? And also, there's so much more to earning forgiveness, working to be forgiven, than just saying, "I'm sorry."
[7:12] I know in evangelical Christian culture it's like if somebody says "I'm sorry", it's like, "oh, we forgive you! That's what Jesus would do!" Other religions don't view it that way. But also I personally think if somebody is truly truly sorry for what they've done, they need to work to repair the harm that they've inflicted.
If somebody voted for Donald Trump and they now realize that they were wrong, [if] they now are asking you to forgive them, they need to demonstrate changed behavior. They need to now go volunteer for a Democratic campaign in the midterms. They need to commit to evangelizing on behalf of democracy and against the fascist regime of Donald Trump to all of the people in their subculture, in their community, all of the MAGA that they know. They need to go actively work for immigrants rights. They need to contribute financially to organizations like the ACLU, to progressive Democrats in the midterms, to organizations that are engaged in mutual aid for all of the people who are suffering because of what MAGA has done.
[8:27] It takes a measure of risk to get on the internet and say, "I'm so sorry. I regret my vote for Donald Trump." Yeah. And we want to acknowledge that they have taken that risk. We want to acknowledge the work that is done. We want to acknowledge how hard it is to take that first step on that journey. Absolutely true. But at the same time, they need to put their money where their mouth is.
They need to work to repair the harm that they have done. They need to work now. They need to sacrifice now. They need to demonstrate changed behavior because at the end of the day, words are cheap. People are suffering and dying. Now, if you truly understand the ramifications of what you have supported and what you have done, you must work to fix it.
[9:10] So, to that young woman and any other person who has left MAGA, who has taken that first step on your deconstruction journey: I applaud you. That's wonderful, that's wonderful. If your conscience is eating you up? If you have loads of regrets? The best way you can work to find peace in your heart, to find peace with the people you have harmed, is to get to work – fixing it. Because there's so much work for everybody to do. Join the resistance. Yep, come join the party. Yeah, we'll take you. We are a safe landing spot. We have lots of work for you to do here.
(no subject)
Jul. 22nd, 2025 10:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I am having a lovely evening with Austin!
We ate dinner outside in the nice weather, and then we began a cooking adventure, and we watched an episode of Leverage while the shortbread cooled (it was the Ho Ho Ho Job, which is...a little uneven (Parker being THAT enthusiastic only kinda rings true to characterization; Chaos is a complicated part of the plotline) but ultimately a stupid fun episode, as opposed to a clever fun episode. I like both, and Leverage does both well!).
Now I am doing words and Austin is making caramel to put on the shortbread.
I have lots of things I should write about here, but I am somehow out of the habit. I would like to start that again, and especially to start reading here again. (I have picked up a little bit of Tumblr again, and that feels marvelous --it appears to be in order, and doesn't insert people I don't follow now that I figured out what settings to turn off. And saving images is just...easy, unlike Facebook. So that's grand!)
I hope you're well, and I will write more soon.
~Sor
MOOP!
We ate dinner outside in the nice weather, and then we began a cooking adventure, and we watched an episode of Leverage while the shortbread cooled (it was the Ho Ho Ho Job, which is...a little uneven (Parker being THAT enthusiastic only kinda rings true to characterization; Chaos is a complicated part of the plotline) but ultimately a stupid fun episode, as opposed to a clever fun episode. I like both, and Leverage does both well!).
Now I am doing words and Austin is making caramel to put on the shortbread.
I have lots of things I should write about here, but I am somehow out of the habit. I would like to start that again, and especially to start reading here again. (I have picked up a little bit of Tumblr again, and that feels marvelous --it appears to be in order, and doesn't insert people I don't follow now that I figured out what settings to turn off. And saving images is just...easy, unlike Facebook. So that's grand!)
I hope you're well, and I will write more soon.
~Sor
MOOP!
kites in the sky
Jul. 22nd, 2025 08:22 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
The only birds of prey I see here in my tiny town in south-eastern Sweden are Red Kites (Milvus milvus). They're usually soaring far too high up and away over the forest to get acceptable photos of. This morning however a pair was kind enough to come down low enough I could take
( these... )
Birds in Flight
Jul. 21st, 2025 06:13 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)

I interrupt my travel series to share some photos from the last months of birds. This barn swallow was caught almost by accident as it headed off, coming towards us in the parking lot.
(no subject)
Jul. 21st, 2025 12:08 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I haven't been doing counselling as much lately as before. Not just because of the financial cost, but in part because of the energy cost. When any activity counts as several full days worth of energy I find I want to guard some for myself: if there's a disability update, a financial discussion, a doctor's visit, a specialist's visit, I want some of that week left over for myself.
For the last few years I've been using this counselor for practical things: help me come up with a list for the disability tax credit, help me figure out how to support my need to do community work despite my disability, that sort of thing. But I've also been using her for the validation and person to talk to about things I love that I wasn't getting from Tucker.
At this point Josh has come in to fill that last space, the space of someone who likes to hear about what makes me happy and what I'm interested in. He's been making time regularly, once a week, to talk. That's left me talking more about harder things in counseling and so it takes more energy and the return doesn't feel as good. So, less counseling.
At this point I need to figure out a way to introduce positive stuff into it if I want to keep doing it. I do very much appreciate this counselor's ability to understand my PDA -- most people in my life overcompensate once they think they know what it is, removing choice from me, instead of just accepting that I'll say no to things. They also don't know how to laugh about the truly incredible things my brain can get up to.
But she can't quite follow me to the space I'm missing now, which is I guess spiritual. I do know a counselor who can do that, though I'm reluctant to step back into a dual-counselor space that may be what I do: the PDA counselor for solid, practical advice and understanding, the other one for helping re-find my place in the world. The world needs proactive love more than reactivity now more than ever, and that needs to start with internal assonance, with a full understanding of my own values and how they fit into this very complicated species.
That really is important. I probably need to look her up.
For the last few years I've been using this counselor for practical things: help me come up with a list for the disability tax credit, help me figure out how to support my need to do community work despite my disability, that sort of thing. But I've also been using her for the validation and person to talk to about things I love that I wasn't getting from Tucker.
At this point Josh has come in to fill that last space, the space of someone who likes to hear about what makes me happy and what I'm interested in. He's been making time regularly, once a week, to talk. That's left me talking more about harder things in counseling and so it takes more energy and the return doesn't feel as good. So, less counseling.
At this point I need to figure out a way to introduce positive stuff into it if I want to keep doing it. I do very much appreciate this counselor's ability to understand my PDA -- most people in my life overcompensate once they think they know what it is, removing choice from me, instead of just accepting that I'll say no to things. They also don't know how to laugh about the truly incredible things my brain can get up to.
But she can't quite follow me to the space I'm missing now, which is I guess spiritual. I do know a counselor who can do that, though I'm reluctant to step back into a dual-counselor space that may be what I do: the PDA counselor for solid, practical advice and understanding, the other one for helping re-find my place in the world. The world needs proactive love more than reactivity now more than ever, and that needs to start with internal assonance, with a full understanding of my own values and how they fit into this very complicated species.
That really is important. I probably need to look her up.
Sunshine Revival/Challenge 2025 #6: Games!
Jul. 21st, 2025 09:27 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Sixth prompt time! The
sunshine_revival team has been providing some different topics to ruminate on.
Looks like there's also a new writing community at
fan_writers and some of my older December Days posts appeared as writing meta, so hello to anyone new poking around.
Let's get to the prompt.
( What games do we play? Many. )
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Looks like there's also a new writing community at
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Let's get to the prompt.
It’s game night! Whether for you that means getting together with a group of friends or a quiet evening chilling out on your own with video games, this is where you get to tell us all about it. If you have a favourite game, tell us what you love about it.
Challenge #6:
Journaling prompt: What games do you play, if any? Are you a solo-gamer or do you view games as a social activity?
Creative prompt: Write a story/fic around the theme "game night".
Cross-season cliffhangers, again
Jul. 19th, 2025 07:36 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Now Star Trek: Strange New Worlds is back with us, I was reminded by the first episode that apparently something is going on. Lots happened and we are in the middle of something and I forgot so much that I didn't even realize we were still with the … well, the relevant alien race. As it is, I started off mostly being happy that I kind of recognized most of the regular crew and had half an idea who most were. At least it mostly made sense as it went on.
Regular readers will know that this isn't the first time I've mentioned this issue. It's been happening at least as far back as the first season of Star Trek: Enterprise which they ended in the middle of some plot involving time travel and changing the timeline and whatnot which I had no hope of jumping right back into so very many months later. Still, goodness, why are the programme makers still doing this? Or is it just me who starts the new season finding myself in the middle of some long-forgotten multi-threaded plot?
At least, the consolation is that, had such shows been cancelled, I wouldn't have been troubled by the lack of resolution because I didn't remember what was going on anyway.
Regular readers will know that this isn't the first time I've mentioned this issue. It's been happening at least as far back as the first season of Star Trek: Enterprise which they ended in the middle of some plot involving time travel and changing the timeline and whatnot which I had no hope of jumping right back into so very many months later. Still, goodness, why are the programme makers still doing this? Or is it just me who starts the new season finding myself in the middle of some long-forgotten multi-threaded plot?
At least, the consolation is that, had such shows been cancelled, I wouldn't have been troubled by the lack of resolution because I didn't remember what was going on anyway.
(no subject)
Jul. 19th, 2025 09:41 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Rain in the afternoons. Our wildfire danger system is a 4 point scale (which is calculated through a series of amazing other scales that all lead into each other). Low, moderate, high, extreme. The last several summers we've sat at extreme all summer pretty much. Right now we're at moderate. There's not even smoke here, though the center of the continent is still burning up. I can leave my windows open. I can relax in ways I haven't for years during the summertime, knowing it's deeply unlikely I'll need to evacuate. I don't need to keep all the animal crates prepped and the trailer ready. It's so beautiful and peaceful.
The garden is slow; there are beautiful lettuces and fennel and kale and the kohlrabi is sizing up and the tomatoes are growing well, but the peppers are in stasis and the corn isn't doing much. This is the Fort I remember.
On the other hand, the KARMA miracle/sweet cheriette cross I made is in the F2 now and it's ripening here and there already. I made the cross because sweet cheriette is super early and miracle is tasty and fairly cool-tolerant, and I do seem to have successfully created a bunch of early plants. I'm tasting them as they ripen, I think I've tasted 5 now of the maybe 20 I've planted. They're very good! I'm discarding the ones that are too sweet but I'm still left with lots to proceed with. I also have a set of zesty green/silvery fir but they're a bit slower.
I discovered a place the next town over that sells 4' long trim ends, usually pretty checked or with wane on them, but it's a 4x4x4' cube for $50 so I get to play with that. At that price it's actually cheaper than firewood, although it won't burn long enough to use exclusively it's still going to be a help this winter if I can get several of them squirreled away. Anything that's good enough to make dog houses, duck houses, garden chairs, etc with is a bonus.
I've also been doing some fabric dyeing. Scentless chamomile most recently, horsetail, willow and yarrow are on the list. The tansy I did last year was gorgeous, I'm going to try some goldenrod, and I want to do rhubqarb root but getting it means being mean to my plants so it's hard. I'm also very curious what aspen does. I've been dyeing cotton shirts since they're cheap and I can easily test for wash/lightfastness by wearing them a bunch, and linen is so expensive.
I met the person who's been doing a spinning residency in the art studio yesterday. She has a bunch of light wool so we're going to play with some dyeing. That will be fun.
I need to be very careful not to overload myself right now. It's so tempting to think that the internet can combine with rest, and even audiobooks do take some energy -- much less than the internet. It's a learning thing.
I've been spending a ridiculous amount of money on fresh fruit but it means I've been eating the most delicious peaches and apricots. It's so luxurious. I make up for it from the garden or eating the cheapest canned sardines on rice the rest of the time. My easy canned food has tripled in price with the weirdness going on with the US, trade war or whatever. Cleaning the rice cooker isn't no work, but it's what I got.
Meanwhile I follow some folks in gaza, kids who reminded me of me at that age who used to do little videos about things they loved to do. People talk about the bombing and famine as being traumatic, and of course it is. But kids watching their cats slowly starve and die, feeding the cats lentils and watermelon, that's... the cruelty administered to that population, the level of care put to considering every type of indignity that can be inflicted, the goal is very clearly to craft a forever war, a set of folks who can never heal but only return what they have been so skillfully taught. The kids I follow don't seem like that at all, but.
It's a dark note to end on, but these are dark times.
The garden is slow; there are beautiful lettuces and fennel and kale and the kohlrabi is sizing up and the tomatoes are growing well, but the peppers are in stasis and the corn isn't doing much. This is the Fort I remember.
On the other hand, the KARMA miracle/sweet cheriette cross I made is in the F2 now and it's ripening here and there already. I made the cross because sweet cheriette is super early and miracle is tasty and fairly cool-tolerant, and I do seem to have successfully created a bunch of early plants. I'm tasting them as they ripen, I think I've tasted 5 now of the maybe 20 I've planted. They're very good! I'm discarding the ones that are too sweet but I'm still left with lots to proceed with. I also have a set of zesty green/silvery fir but they're a bit slower.
I discovered a place the next town over that sells 4' long trim ends, usually pretty checked or with wane on them, but it's a 4x4x4' cube for $50 so I get to play with that. At that price it's actually cheaper than firewood, although it won't burn long enough to use exclusively it's still going to be a help this winter if I can get several of them squirreled away. Anything that's good enough to make dog houses, duck houses, garden chairs, etc with is a bonus.
I've also been doing some fabric dyeing. Scentless chamomile most recently, horsetail, willow and yarrow are on the list. The tansy I did last year was gorgeous, I'm going to try some goldenrod, and I want to do rhubqarb root but getting it means being mean to my plants so it's hard. I'm also very curious what aspen does. I've been dyeing cotton shirts since they're cheap and I can easily test for wash/lightfastness by wearing them a bunch, and linen is so expensive.
I met the person who's been doing a spinning residency in the art studio yesterday. She has a bunch of light wool so we're going to play with some dyeing. That will be fun.
I need to be very careful not to overload myself right now. It's so tempting to think that the internet can combine with rest, and even audiobooks do take some energy -- much less than the internet. It's a learning thing.
I've been spending a ridiculous amount of money on fresh fruit but it means I've been eating the most delicious peaches and apricots. It's so luxurious. I make up for it from the garden or eating the cheapest canned sardines on rice the rest of the time. My easy canned food has tripled in price with the weirdness going on with the US, trade war or whatever. Cleaning the rice cooker isn't no work, but it's what I got.
Meanwhile I follow some folks in gaza, kids who reminded me of me at that age who used to do little videos about things they loved to do. People talk about the bombing and famine as being traumatic, and of course it is. But kids watching their cats slowly starve and die, feeding the cats lentils and watermelon, that's... the cruelty administered to that population, the level of care put to considering every type of indignity that can be inflicted, the goal is very clearly to craft a forever war, a set of folks who can never heal but only return what they have been so skillfully taught. The kids I follow don't seem like that at all, but.
It's a dark note to end on, but these are dark times.
Generative AI as a computer programming assistant
Jul. 19th, 2025 06:57 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
When people talk about using generative AI for writing software, they often liken it to getting help from a junior developer. For me, the bulk of the cost is in reviewing the generated code: for anything that is to reach customers of a reliable product, I want to be sure of what the code means and does. From that perspective, it seems worth noting to me that there's an important distinction among kinds of junior developer.
There are junior developers who are variously confused or careless and, at least until those issues are addressed, they are little use for anything more than rapid prototyping. Separately, there are developers who, while they lack knowledge and experience in software development, they are already disposed toward mathematical engineering: they are analytical, clever, and precise in their work. Code from that kind of junior developer is much more welcome because, as a reviewer, I don't have to spend as much time covering for various kinds of mistake. Their code already makes some sense even if it could be better.
Additionally, if coding assistance is coming from a static AI model rather than from a person then I can't incrementally get better results. With a real person, they can learn from constructive feedback about how they could have written the code differently.
There are junior developers who are variously confused or careless and, at least until those issues are addressed, they are little use for anything more than rapid prototyping. Separately, there are developers who, while they lack knowledge and experience in software development, they are already disposed toward mathematical engineering: they are analytical, clever, and precise in their work. Code from that kind of junior developer is much more welcome because, as a reviewer, I don't have to spend as much time covering for various kinds of mistake. Their code already makes some sense even if it could be better.
Additionally, if coding assistance is coming from a static AI model rather than from a person then I can't incrementally get better results. With a real person, they can learn from constructive feedback about how they could have written the code differently.
Hood River
Jul. 18th, 2025 08:06 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)

Our destination for day 2 was Hood River. We loved this spot, both because of the view and the convenience of its location, parking and our rooms over the breakfast area.
This photo was the view from one of our rooms. It was not only a pretty view but one that changed all day long, as people at the inlet end point took kayaking, paddleboard and canoeing classes. I'd never seen a motorized paddleboard before but they were in use too, along with jet skis out on the river and parasailers.
We also got to watch birds diving for food, and trains and cargo barges go by on the river. We even saw a cruise ship once!
losing language features: some stories about disjoint unions
Jul. 17th, 2025 11:56 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
A long time ago I wrote on twitter (now erased): "surprising how much computer stuff makes sense viewed as tragic deprivation of sum types".
Sum types (a.k.a. disjoint unions a.k.a. tagged unions a.k.a. safe variant types) are of course wonderful and nice and everyone should have them. ML and Haskell have them, and now Rust has them, as does Swift, and Scala with case classes, and C++ kinda with std::variant, and .. lots of modern languages are growing them. Great, hurrah.
But there is just a little bit of subtlety to doing them right. The subtlety is that you have to build the language to couple together two pieces of data -- a tag (or "discriminant") and an unsafe union -- with mandatory syntactic constructs (switch or match expressions) so that you only get to access the unsafe union elements when you've already checked the tag, and the type system and name resolution systems know you're in a given case-block, and so only let you access to the union-fields (properly typed) corresponding to the tag case. It's not a hugely complex thing to get right, but you have to get it right.
There are three main degenerate ways you can fail to get it right.
Ok so .. Casey Muratori gave a great recent talk on the origin of, well, certain OOP-y habits of encapsulation, which is mostly about Entity-Component-System organization, but .. also a bit about sum types. He spent a lot of time digging in the PL literature and reconstructing the history of idea transmission. I just watched it, and it's a great talk and you should go watch it, it's here:
One of the things he discusses in here is that safe and correctly-designed disjoint unions aren't just an ML thing, they were around in the early 60s at least. Wikipedia thinks Algol 68. Muratori places their origin in Doug Ross and/or Tony Hoare talking about amendments to Algol 60, linking to this Tony Hoare paper but of course Hoare references PL/I there and I'm honestly not sure about the exact origin, it's somewhere around there. Point being it predates ML by probably a decade.
But another thing Muratori points out is that is that Dahl and Nygaard copied the feature in safe working form into Simula, and Stroustrup knew about it and intentionally dropped it from C++, thinking it inferior to the encapsulation you get from inheritance. This is funny! Because of course C already had case #3 above -- completely unchecked/unsafe unions, they only showed up in 1976 C, goodness knows why they decided on that -- and the safe(ish) std::variant type has taken forever to regrow in C++.
I was happy to hear this, because it mirrors to some extent another funny story I have reconstructed from my own digging in the literature. Namely about the language Mesa, a Butler Lampson project from PARC, very far ahead of its time too. There's far too much to discuss about Mesa to get into here -- separate compilation, interface/implementation splits, etc. -- but it did also have safe variant types (along with a degenerate form called "computed" which is unsafe). Presumably it picked them up from Algol 68, or Simula 67, or one of probably dozens of languges in the late 60s / early 70s it emerged from. No big deal.
Where that relatively unremarkable fact turns into a funny story is during a "technology transfer" event that happened during Mesa's life: Niklaus Wirth took a sabbatical to PARC, and became quite enamoured with Mesa, and went back home to work on what became Modula and eventually Modula 2. But Modula 2 had only degenerate variant types! He copied them not from Mesa, but in the same busted form they existed in Pascal, completely missing that Mesa did them correctly. Modula 2 variants are degenerate case #1 above (if you turn on a special checking compilation mode) otherwise case #2: tags declared but no checking at all! He even writes it up in the report on Modula 2 and Oberon, criticizing its lack of safety while simultaneously citing all the ways Mesa influenced his design. Evidently not enough.
Anyway, all this is to say: language features are easily broken, mis-copied, forgotten or intentionally omitted due to the designer's pet beliefs. Progress is very circuitous, if it exists at all!
Sum types (a.k.a. disjoint unions a.k.a. tagged unions a.k.a. safe variant types) are of course wonderful and nice and everyone should have them. ML and Haskell have them, and now Rust has them, as does Swift, and Scala with case classes, and C++ kinda with std::variant, and .. lots of modern languages are growing them. Great, hurrah.
But there is just a little bit of subtlety to doing them right. The subtlety is that you have to build the language to couple together two pieces of data -- a tag (or "discriminant") and an unsafe union -- with mandatory syntactic constructs (switch or match expressions) so that you only get to access the unsafe union elements when you've already checked the tag, and the type system and name resolution systems know you're in a given case-block, and so only let you access to the union-fields (properly typed) corresponding to the tag case. It's not a hugely complex thing to get right, but you have to get it right.
There are three main degenerate ways you can fail to get it right.
- You can give users syntactically unguarded access to union members, say by using container.field syntax, in which case all you can do if the tag doesn't match that field at runtime is to raise a runtime error, which you can at least do systematically, but the ergonomics are lousy: it's inefficient (you wind up checking twice) and it doesn't help the user avoid the runtime error by statically forcing cases to be handled.
- You can do #1 but then also fail to even raise a runtime error when the tag is wrong. At which point the tag is basically "advisory", so then...
- You can even go a step further than #2 and not even require users to declare a tag. Just let the user "know the right case" using some unspecified method, an invariant they have to track themselves. They can use a tag if they like, or some bits hidden somewhere else, who knows.
Ok so .. Casey Muratori gave a great recent talk on the origin of, well, certain OOP-y habits of encapsulation, which is mostly about Entity-Component-System organization, but .. also a bit about sum types. He spent a lot of time digging in the PL literature and reconstructing the history of idea transmission. I just watched it, and it's a great talk and you should go watch it, it's here:
One of the things he discusses in here is that safe and correctly-designed disjoint unions aren't just an ML thing, they were around in the early 60s at least. Wikipedia thinks Algol 68. Muratori places their origin in Doug Ross and/or Tony Hoare talking about amendments to Algol 60, linking to this Tony Hoare paper but of course Hoare references PL/I there and I'm honestly not sure about the exact origin, it's somewhere around there. Point being it predates ML by probably a decade.
But another thing Muratori points out is that is that Dahl and Nygaard copied the feature in safe working form into Simula, and Stroustrup knew about it and intentionally dropped it from C++, thinking it inferior to the encapsulation you get from inheritance. This is funny! Because of course C already had case #3 above -- completely unchecked/unsafe unions, they only showed up in 1976 C, goodness knows why they decided on that -- and the safe(ish) std::variant type has taken forever to regrow in C++.
I was happy to hear this, because it mirrors to some extent another funny story I have reconstructed from my own digging in the literature. Namely about the language Mesa, a Butler Lampson project from PARC, very far ahead of its time too. There's far too much to discuss about Mesa to get into here -- separate compilation, interface/implementation splits, etc. -- but it did also have safe variant types (along with a degenerate form called "computed" which is unsafe). Presumably it picked them up from Algol 68, or Simula 67, or one of probably dozens of languges in the late 60s / early 70s it emerged from. No big deal.
Where that relatively unremarkable fact turns into a funny story is during a "technology transfer" event that happened during Mesa's life: Niklaus Wirth took a sabbatical to PARC, and became quite enamoured with Mesa, and went back home to work on what became Modula and eventually Modula 2. But Modula 2 had only degenerate variant types! He copied them not from Mesa, but in the same busted form they existed in Pascal, completely missing that Mesa did them correctly. Modula 2 variants are degenerate case #1 above (if you turn on a special checking compilation mode) otherwise case #2: tags declared but no checking at all! He even writes it up in the report on Modula 2 and Oberon, criticizing its lack of safety while simultaneously citing all the ways Mesa influenced his design. Evidently not enough.
Anyway, all this is to say: language features are easily broken, mis-copied, forgotten or intentionally omitted due to the designer's pet beliefs. Progress is very circuitous, if it exists at all!
Miscellany
Jul. 17th, 2025 06:49 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Again, a small update with unconnected trivia:
Some while ago, I noted that I should read Joseph Conrad's The Secret Agent. (I never attach actual reasons to such notes.) I finally got around to starting it and found the story to increasingly match details of a series we had started recently on Netflix. R. helpfully reminded me that the latter's named … The Secret Agent. The plots don't match each other wholly; I have yet to learn how far they diverge.
Previously, I read Iain Banks' Raw Spirit, a book about travelling around Scotland trying different whiskies. I had not read it before, the subject matter not greatly appealing to me. Still, I am glad I did: it was generally entertaining, and mixed whisky notes with driving and car thoughts, also tellings of all manner of anecdotes. It is strange to get a sense of the author from his quite personal writing, and to have him travel so many now-familiar places, given that he passed away some time ago. Belatedly, I get to know a local whom I shall never meet.
Last weekend, R. and I went camping with our dog L. It was a rather hot weekend, which R. found draining. I was surprised not to have to wrap up very well overnight. On the first evening, I managed to slip on loose moss and face-plant onto a rock; I still sport a fine black eye. Also, my leg remains rather stiff, I suppose it will sort itself out in time.
My in-the-office days continue to be tiring. Annoyingly, I remain in a poor position to use the transit time well: I feel up to reading people's journals here, etc., and the free newspaper on the train home, but little more. I often feel fairly tired and just want to rest instead. Perhaps cooler weather will help, or I will get more used to the new routine. Until now, I hadn't had much of a commute since high school and my previous two jobs were wholly remote. In my last couple of years of school, I got into the habit of napping on the bus home.
( I grumble about Uber. )
Some while ago, I noted that I should read Joseph Conrad's The Secret Agent. (I never attach actual reasons to such notes.) I finally got around to starting it and found the story to increasingly match details of a series we had started recently on Netflix. R. helpfully reminded me that the latter's named … The Secret Agent. The plots don't match each other wholly; I have yet to learn how far they diverge.
Previously, I read Iain Banks' Raw Spirit, a book about travelling around Scotland trying different whiskies. I had not read it before, the subject matter not greatly appealing to me. Still, I am glad I did: it was generally entertaining, and mixed whisky notes with driving and car thoughts, also tellings of all manner of anecdotes. It is strange to get a sense of the author from his quite personal writing, and to have him travel so many now-familiar places, given that he passed away some time ago. Belatedly, I get to know a local whom I shall never meet.
Last weekend, R. and I went camping with our dog L. It was a rather hot weekend, which R. found draining. I was surprised not to have to wrap up very well overnight. On the first evening, I managed to slip on loose moss and face-plant onto a rock; I still sport a fine black eye. Also, my leg remains rather stiff, I suppose it will sort itself out in time.
My in-the-office days continue to be tiring. Annoyingly, I remain in a poor position to use the transit time well: I feel up to reading people's journals here, etc., and the free newspaper on the train home, but little more. I often feel fairly tired and just want to rest instead. Perhaps cooler weather will help, or I will get more used to the new routine. Until now, I hadn't had much of a commute since high school and my previous two jobs were wholly remote. In my last couple of years of school, I got into the habit of napping on the bus home.