In the article, Mitchel mentions how this doesn’t always work. In fact, as someone who’s worked in compiler development, I can say it’s a small miracle when it does work.
HN user
ashton314
Programming languages researcher
Codeberg: https://codeberg.org/ashton314
GitHub: https://github.com/ashton314
Blog: https://lambdaland.org
More tasteless business bros completely missing the point of art. Fitting that they centered the text on this page.
A few years ago, I was working on an interpreter implemented in elixir for a domain specific language. It was a pretty basic metacircular interpreter. It relied heavily on function signature dispatch. When I tried breaking up the massive “interpret” function across modules, performance tanked. I got it all back by using some macro shenanigans, but understandably the team did not like this.
Knowing what I know now, I would’ve tried to push for a threaded interpreter to get rid of the runtime overhead of dispatching altogether. I don’t know if they’ve changed the architecture of that module much since I left :-)
A (relatively) new way to create a super optimizer is to use an egraph: https://egraphs-good.github.io/
These are nifty data structures that can quickly search the space of equivalent programs.
"You can't complain about being require to take a 100-level history course because our job is to turn out renaissance scholars who can debate philosophy at cocktail parties before going to work doing something that has absolutely nothing to do with that."
All the while, those additional credit hours cost students a shitload of money and debt and take focus away from their actual fields of study.
This is a straw-man. The purpose is not to turn people into renaissance scholars. It's to inculcate appreciation for what makes life worth living. An educated populace is also a requirement for a healthy democracy. Everyone ought to know some history at a minimum.
This is not great. The purpose of higher education is not to get you a job. That's certainly a nice side-effect and I hope that all my students will be able to support themselves through good employment. The university is there to educate you, not train you. It's to turn you into a better thinker, a better person, and someone more capable of living well.
Making art and humanities programs demonstrate some kind of pecuniary benefit is disgusting and myopic. My wife pursued English because she loves writing. She's earned about 0 dollars from that degree because she's home with our kids. And that's OK! Our lives are so much richer because of her degree—as well as the classes I took from the English department. So we should penalize the humanities because it merely makes people better thinkers and doesn't have as high of an ROI as an MBA? Yuck!
(EDIT: the article does mention that this bar is low—so not too bad—but the fact that this is a metric and criteria in the first place opens this up to abuse in the near future.)
I get that it's intended to cut down on ballooning tuition and fees, but *this is not the right way to do that.* (Actually, if we eliminated half the administration, I wonder how much we could cut costs…)
I’m rather partial to Plankalkül actually
I'm in Emacs 99% of my day, and I don't think I've ever used the function keys inside Emacs.
All my volume/brightness/etc functions are handled on a separate layer. I've got function keys on another layer as well, but I don't ever use them.
If you use function keys a lot, then you could do something like putting the function keys on one layer all on the right hand like it's a num pad and then adding a key on the left hand to switch to that layer. You could add combo-taps on your main layer to trigger the function key (e.g. press `q` and `1` at the same time to hit `f1`, `w` and `2` at the same time to send `f2`, etc.), etc. etc.
QMK gives you a lot of options to do what you want. There's also 3 keys towards the center of the keyboard on each side that I rarely hit (in fact, they're used for some layer switching some times!) that you could easy bind to function keys directly.
Note that a key can do like 4 different things depending if you tap, hold, double tap, or tap and hold if you want to get really fancy.
Typing this on a Moonlander right now. Love it to pieces. The tenting kit is pricey but incredibly stable and, to me, is worth every penny. I've gotten used to the ortholinear so much so that I hate other layouts now.
I've looked at some other more minimal boards and, while they look nice, I actually make good use of pretty much all my keys and I would not like going down to a smaller layout.
In my mind, the most important pieces of a good keyboard are, in this order:
1. QMK/ZMK firmware so you can add stuff like mod-taps and whatnot
2. Split & tented to avoid bad wrist angles
3. Lots of buttons for your thumb to press: it's your strongest finger so you should put it to work
4. Ortholinear layout for more natural finger movement
ZSA (the maker of the Ergodox, Moonlander, and Voyager) is a great company—I've had incredibly positive experiences with their support team whenever I've needed help. One time I was having trouble using their online configuration tool (https://layout.new) and so I emailed support. I got an email back within the hour from a developer asking for more details. After I supplied this, it was just another hour until I heard back saying that they had found a bug and that the fix was live. So awesome!!
This is Rhombus’ native data type! Such a nice data structure.
More like the Knights who say Nil
)
There matched your paren for you.
Matthew Flatt picked “shrubbery” because it’s tree-like but not fully expanded, so it tends to be more broad/flat than deep like a tree. Hence also the term “enforrestation” when you fully expanded it.
I think the Monty Python reference is just a happy coincidence.
Here's the paper I wrote: https://lambdaland.org/files/2024_ecoop_type_tailoring.pdf
Lots and lots of documentation, some experimentation, and asking people. :)
I’ve written a little library Rhombus.
I think my favorite thing is the `…` operator. Go check it out. It’s not like the splat operator in other languages, though it does give that feel initially. It’s much more general: it works with nested data structures and can take the place of a `map` operation.
The best part of `…` is that it is not a built-in thing—it’s just a macro! The magic is that Rhombus lets you define different macros depending on whether or not the macro identifier appears in binding context (left side of `=`), expression context, or some other contexts. IIRC you can even define your own contexts too.
Rhombus takes the best-in-class macro system of Racket and somehow finds a way to improve upon it. I say this after researching and comparing detailed metaprogramming features across a dozen different languages. Rhombus is a very neat little language.
Last thing: Rhombus’ main data type, the list, is implemented with an RRB tree. RRB trees support structural sharing, functional updates, and have O(log n) iterate, insert, delete, append, and arbitrary read operations. The constant factor on that is tiny: I think it’s like log_16 or log_32. They’re designed to be very cache friendly. Super cool data structure.
This needs a flag to insert random blank pages
I think that this needs an application of Bayes Rule against the ¼ chance I guessed and got it right by luck.
If you find yourself wanting to try out Emacs but are (understandably) turned off by some of its archaic defaults, I encourage you to check out my Emacs Bedrock [1] project. It is not a framework like Doom Emacs or Spacemacs. Instead, it's just a bunch of better defaults, plus some example configuration for some of the most popular packages. It's meant to just be a starting point, and not a framework to keep up-to-date in the long run.
Emacs has come a long way in terms of in-built features. The only problem is that, in the name of not breaking backwards-compatibility (or something like that), the archaic defaults have remained. Just a little bit of simple config (either from Bedrock or, heck, even an LLM) will get you very far.
I'm working on a new version of Bedrock for Emacs 31. If you're using the release candidate (which, because it's Emacs, is more stable than most other operating systems) then check out the `emacs31` branch.
I spoke to the couple (it’s like a single married couple + a bunch of scripts they’ve wrote) who handle the formatting for a bunch of the programming language-related conferences around the world (and others too maybe) and they are interested in Typst and are looking into it! (They’re also super nice folks.)
100% Elixir is much more a Lisp than Ruby is.
But are you wearing it slip-shod, like the natives do?
No, it’s actually the right word. I’m saying you see past syntax and get to the underlying semantics of PLs after learning Racket. (And modulo is a perfectly acceptable word to express this.)
Racket gets in your head like nothing else. Once you learn it, (Scheme does this too) you get x-ray vision to see every other language modulo syntax.
I have been writing Elixir professionally for the bulk of my career. (It’s been pretty awesome!) Despite this, I consider Racket to be my native language because it’s so easy for me to think in Racket. It’s the perfect bridge between my brain and the problem domain.
All power to you!
As an aside, have you seen Typst? It’s got LaTeX-level typesetting quality but the markup syntax is a lot friendlier (close to Markdown) and the scripting language is a Real Language™ with sensible error messages and sub-second compilation times even for big documents.
Pangram flags this as 100% AI generated with high confidence.
I have a Kindle with KOReader on it and it’s awesome. I recently bought a book directly from the author (Isles of the Emberdark, Brandon Sanderson) and the author, being excellent, provided it without DRM so I had no trouble reading it.
But for less-excellent authors, where’s a good place besides Amazon to get ebooks?
This is so cool! I'm going to have to try building this. Thanks for sharing!
reasoning about program correctness is not possible
Not possible for all problems. We cannot decide correctness (ie adherence to a specification) for all programs, but we can definitely recognize a good chunk of cases (both positive and negative) that are useful.
The Halting Problem itself is recognizable. The surprising result of Turing’s work was that we can’t decide it.
Maybe in your corner of the world but not mine.
Amaze, amaze, amaze!
Loved the Project Hail Mary quote from one of the mission controllers. :)
This bright spot in world news has been good for my mental health and general motivation. Thank you NASA!