AbelianGrape

joined 1 year ago
[–] [email protected] 1 points 2 weeks ago* (last edited 2 weeks ago) (1 children)

"Monadic type" has something like three meanings depending on context, and it's not clear which one you mean. One of them is common in math, but not so common in programming, so probably not that. But neither "parametric types with a single argument" nor "types that encode a category-theoretic monad" have the property you say, as far as I know.

I imagine you're probably referring to the latter, since the optional monad exists. That's very different from returning null. The inhabitants of Integer in Java, for example, are the boxed machine ints and null. The inhabitants of Optional[Integer] (it won't let me use angle brackets here) are Optional.of(i) for each machine int i, Optional.empty(), and null.

Optional.empty() is not null and should not be called a "Null object." It's also not of type Integer, so you're not even allowed to return it unless the function type explicitly says so. Writing such function types is pretty uncommon to do in java programs but it's more normal in kotlin. In languages like Haskell, which don't have null at all, this is idiomatic.

[–] [email protected] 10 points 2 weeks ago

Which, to be fair, is also derived from a word which would be most accurately (with English vowels) pronounced as mah-nuh. Although at this point "manna" is definitively also a word of English whose correct pronunciation is with /æ/.

[–] [email protected] 4 points 1 month ago* (last edited 1 month ago) (1 children)

I've only ever seen "one-time" in cryptography to refer to One-Time Pads (OTP). They are literally uncrackable (because every possible plaintext could be encoded by every possible ciphertext) but they achieve that by using a shared private key. The cipher becomes attackable if the key is re-used, hence the "one-time."

But that key has to be exchanged somehow, and that exchange can be attacked instead. Key exchange algorithms can't necessarily transfer every possible OTP which means eavesdropping on the exchange would make an OTP attackable. So the best option we know of that doesn't require secret meetings to share OTPs* really is to use RSA encryption. Once we have efficient quantum-resistant schemes, they'll be the best option we know.

* and let's be honest, secret meetings can be eavesdropped on as well.

[–] [email protected] 6 points 1 month ago

Bril is the only compiler IL I know of that is specifically designed for education.

R. Kent Dybvig's compilers course has had approximately 15 "intermediate" representations designed for his course since at least 2004 -- a consequence of teaching the course using the nanopass compiler framework for scheme. You could broadly divide these into "representations that are restrictions of scheme," and "representations that are increasingly-annotated versions of UIL" where UIL is the underlying intermediate representation. As far as I know, UIL was also designed for this course.

[–] [email protected] 5 points 6 months ago* (last edited 4 months ago) (1 children)

How does this compare with GumTree? It's weird that the page doesn't even mention existing state-of-the-art tools for this task.

edit: I've compared GumTree and difftastic myself while working on a project this past week. Difftastic is harder to use programatically (the JSON format is unstable and leaves something to be desired) but other than that it's miles and miles better.

[–] [email protected] 1 points 6 months ago

Most recently, KeyWe and modded Keep Talking with friends. Solo, still ol' reliable slay the spire.

I have a plan to teach someone how to play schnapsen and crazyhouse chess tomorrow so that's exciting.

[–] [email protected] 4 points 7 months ago

I find there's a lot less variety in my monster train runs. Most classes have a distinctly best strategy and the artifacts generally also funnel you towards that strategy. For example, I can't remember the last time I played an Umbra run that didn't set up a morsel engine behind a warden or alloyed construct - as far as I'm concerned, those are the same strategy, it doesn't feel different. The only other build I think is viable is just "play Shadowsiege," which rarely happens early enough to build for it.

Every class in STS has at least three viable archetypes and almost every run within those archetypes still feels different to me.

[–] [email protected] 11 points 7 months ago

I almost exclusively play for A20 heart kills. I play all 4 classes but in a "whichever I feel like today" way. I tried rotating between the characters for a while and really didn't enjoy playing silent or watcher while in the wrong mood for those classes.

My favorite deck in recent memory was probably a silent discard combo with Grand Finale as the only damage-dealing card in the deck. My favorite archetype in general is probably ice defect. A good all-you-can-eat ironclad run is great too.

I don't think I agree that STS is especially well balanced - some regular hallway combats do irrationally more damage on average even to players much better than me (for example, floor one jaw worms or any act 3 darklings). In general, the game could be quite a bit harder on A20 and still be fun for players who want a challenge. It's also weird to me that A1 makes the game easier compared to A0. Between the classes, there is a class which is clearly stronger than the others. However I also don't think this is a bad thing. Imbalances create more opportunities for new experiences, and for different kinds of players to have different kinds of fun. And that certainly agrees with "infinite replayability." I'm sure in 5 years' time I will still be seeing interactions I've never seen before.