I'm not sure about moral per se, but LLVM is practically a painful dependency—it doesn't have API compatibility between versions, release builds are rapidly approaching a gigabyte, you are given some franken-version by the system, and you won't have a good time if you end up linking/loading more than one version for whatever reason.
IIRC there was also some case where an LLVM bump caused tcmalloc to explode inside wine.
It's impossible to take a bad picture of crater lake, it's still the single most photogenic anything I've ever seen, there may be equals but nothing superior.
I feel like there are lots of places in Central Oregon that are on the same level. Anything near the 3 sisters - McArthur Rim Trail, Highway 242, McKenzie River, Clear Lake, Sparks Lake.
And Newberry Crater - it's like Crater Lake, but without the crowds. You can drive up to the top of East Paulina Peak and you're probably the only person up there. The Great Obsidian Flow is nearby. And there's a trail going all the way around the top of the crater. You can spend 2 hours riding a MTB along that trail, and probably meet 0 other people.
> One hypothetical approach I could imagine, is that a dependency major-version release of a package can ship with AST-rewriting-algorithm code migrations
Jane Street has something similar called a "tree smash" [1]. When someone makes a breaking change to their internal dialect of OCaml, they also push a commit updating the entire company monorepo.
It's not explicitly stated whether such migrations happen via AST rewrites, but one can imagine leveraging the existing compiler infrastructure to do that.
This is more of less how Facebook developed PHP -> Hack on the fly. Each new language feature would be patched in, and at the same time, a whole-monorepo transform would be run to adopt the feature. Pretty neat, if a logistical nightmare
Z3 is fine with it--its job is to find any satisfying model. The possible outcomes are "the puzzle is solvable and here's a solution" or "the puzzle isn't solvable."
When using minizinc or other constraint programming tools to solve puzzles that require a single solution, I typically run them asking for 2 solutions. If I get 1 solution only, I know the puzzle is well formed, if I get more than one solution I know the puzzle is mal-formed.
Normally this kind of thing would be absolutely ripe for abuse, but with the guardrails in place for the mainstream SOTA models, it might actually be okay. Maybe I'll be proven wrong.
It defines a new infix data constructor. So if `it` and `ct` are values of type `ITerm` and `CTerm` respectively, `it :@: ct` is a value of type `ITerm`. (It could have been written using a prefix operator like `ITerm`'s other data constructors.)
For what moral reasons would I avoid linking LLVM? I’m not familiar.