Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    E

    Eric Kidd

    randomhacks.net · Personal blog · on HN since 2007

    Eric Kidd writes about programming languages and techniques, including Ruby, Haskell, probability monads, and Rust kernels.

    Visit blogRSSHN submissions
    Languages & CompilersProgrammingMath
    What HN says

    Commenters often cite his essay "Why Ruby is an acceptable Lisp" and his work on probability monads and McCarthy's amb operator.

    Stats for nerds
    65HN people shared it
    35linked in comments
    1.2Kstory points
    Jun 2026last shared
    2009people per year2026

    Top posts on HN

    1. 1
      Rust lifetimes: Getting away with things that would be reckless in C++
      1 person · 231 points · first shared 2014 · 90 comments on HN
    2. 2
      McCarthy's Ambiguous Operator (2005)
      8 people · 190 points · first shared 2019 · 42 comments on HN
    3. 3
      Bayes' rule in Haskell (2007)
      5 people · 184 points · first shared 2007 · 77 comments on HN
    4. 4
      Why Ruby is an acceptable Lisp (2005)
      14 people · 148 points · first shared 2014 · 113 comments on HN
    5. 5
      Bare Metal Rust 2: Retarget your compiler so interrupts are not evil
      1 person · 140 points · first shared 2015 · 16 comments on HN
    6. 6
      Jim Hefferon's Linear Algebra: A free textbook with fascinating applications
      1 person · 97 points · first shared 2008 · 18 comments on HN
    7. 7
      Build Your Own Probability Monads
      2 people · 66 points · first shared 2015 · 15 comments on HN
    8. 8
      Why Ruby is an acceptable Lisp (2005)
      12 people · 54 points · first shared 2008 · 31 comments on HN
    9. 9
      Why Hygienic Macros Rock
      1 person · 26 points · first shared 2008 · 16 comments on HN
    10. 10
      Bare Metal Rust: Low-Level CPU I/O Ports
      1 person · 16 points · first shared 2015 · Discussion on HN

    What HN people wrote when they linked it

    • jerfSep 2015

      Even as someone who knows Haskell, it isn't actually possible to read this article and figure out what specifically about Haskell is helping.

      My suspicion is that it is Haskell's great support for domain-specific languages. This is both in the sense of languages that are really "just" Haskell APIs but work in such an different manner that they are quite different, and in the sense of writing a full compiler [1] (or any subset of a compiler) for a new language.

      For an example of the former, one of my favorite demonstrations is the "probability monad", in which one ends up with a sort of sublanguage inside of Haskell that is probability aware: http://www.randomhacks.net/2007/02/22/bayes-rule-and-drug-tests/ [2] If you want to start to really grasp the power of Haskell, you could do worse than meditate on how you'd implement that in your $FAVORITE_LANGUAGE... and then, most likely, burst into tears when someone shows you just how much of Haskell still works, unchanged, even in that environment (e.g., everything in Control.Monad), rather than having to be implemented in a parallel type hierarchy (or, put another way, producing a new "color" of functions [3]).

      While I doubt they use something exactly like that, it's not hard to see how that sort of thing could make it fairly easy to write spam classification code with a lot of the basic plumbing abstracted away entirely.

      There's a lot of examples of the latter, but I'm not sure of a really solid open source example to point…

    • progJul 2010

      When I started to learn Lisp, the "Which Lisp?" problem was the first thing to hit me. Same with Scheme. I eventually went with CLISP and PLT (Racket).

      Issues like hygiene didn't really bother me too much. As long as you are aware of it its not an issue.

      While I really like the power of Lisp/Scheme (especially macros), I find that for most programming task Python or Ruby are good enough. There was an interesting post along similar lines 'Why Ruby is an acceptable Lisp'[1].

      One thing I am really interested is in seeing how Perl 6 works out. It supports Lisp style macros (by making the parser available to the programmer) while using conventional syntax. While I am a Python fanboy myself I would seriously consider Perl 6 once there is a CPython grade implementation available.

      [1] http://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp

    • gmfawcettFeb 2018

      > In Haskell, functions do not fail in traditional sense - they just return indication of failure.

      That's too general a statement. Haskell functions certainly can fail in the traditional sense. As a trivial example, "head []" is a well-typed Haskell expression that will raise an exception when evaluated; if the exception is not caught (using a traditional exception handler), then it propagates to an error, and the program exits.

      This article [1] about the many ways to handle errors in Haskell is a bit old, but as far as I know, all his points are still relevant. The conclusion (for me) is that if modern Haskell tends to use return-values on failure, it's due to convention (and good taste) among developers, and not due to a design constraint of the language.

      [1] http://www.randomhacks.net/2007/03/10/haskell-8-ways-to-report-errors/

    • SyzygiesAug 2022

      I love Ruby so much as a scripting language, I ask myself why I don't just use it as an "acceptable lisp" [1] for my research, rather than Haskell. Haskell is more easily parallelized than any other language I've experienced. Alas, my experiments with Ruby 3.1 parallel extensions flunked. Who cares about single core speed?

      I was always put off by Rust syntax (it's a fly-pollinated flower, to attract C programmers), but I'm starting to get the genius in its machine model. Learning Rust forces one to understand what's happening at the machine level, but offers better control as a reward. Its expressiveness is a lot closer to Ruby than I had imagined, it won't put me back in the C99 stone ages. So my provisional answer is that Rust is a Faster Ruby.

      [1] http://www.randomhacks.net/2005/12/03/why-ruby-is-an-acceptable-lisp/

    • wichtounetAug 2016

      You can write a kernel in pretty much every language. There are some experiments with Rust: http://www.randomhacks.net/bare-metal-rust/

      There are several reasons to choose a language rather than another. I personally don't like Rust at all, so I don't see any reason to use it, neither do I see any advantage in using it. But that's only my opinion. A lot of osdev currently is made by hobbyist (not counting the handful of really succesful kernels), so the main argument is simply personal and there is nothing wrong with it. Moreover, keep in mind that Rust is pretty new while C/C++ are decades old, this means more support, more portability, more people that know how to use it, ... This is not negligible at all.

    • fnlNov 2016

      Standard "canned" reply: Java doesn't force you to annotate exceptions or even to handle them all. Typed returns do. And as to the "where", well, in the originating function.

      But that gets us to some real criticism here: You run the danger of getting an Either Monad out of about every function in your code-base... So maybe throwing exceptions isn't the worst thing after all. (/me ducks all the stuff being thrown my way from hardcore [EDIT:] ~Haskell~ functional programming fans :-))

      EDIT: s/Haskell/functional programming/
      (because its unfair - Haskell can throw stuff: http://www.randomhacks.net/2007/03/10/haskell-8-ways-to-report-errors/)

    Related

    Niko Matsakissmallcultfollowing.com221 people

    Towards a Rust Foundation

    Niko Matsakis
    Personal · last shared 2026
    The Incredible Holkblog.theincredibleholk.org23 people

    Booting to Rust

    The Incredible Holk
    Personal · last shared 2022
    Ralf Jungralfj.de99 people

    There is no memory safety without thread safety

    Ralf Jung
    Personal · last shared 2026
    Edward Z. Yangblog.ezyang.com165 people

    PyTorch Internals: Ezyang's Blog

    Edward Z. Yang
    Personal · last shared 2026
    FP Complete Blogfpcomplete.com201 people

    Monads and GATs in Nightly Rust

    FP Complete Blog
    Company · last shared 2025
    matkladmatklad.github.io237 people

    Architecture.md

    matklad
    Personal · last shared 2026
    Manish Goregaokarmanishearth.github.io97 people

    Picking Apart the Crashing iOS String

    Manish Goregaokar
    Personal · last shared 2026
    Chris Smithcdsmith.wordpress.com34 people

    What to Know Before Debating Type Systems (2008)

    Chris Smith
    Personal · last shared 2026