D
Dave Herman
calculist.org · Personal blog · on HN since 2011
Dave Herman, a Mozilla researcher and W3C TAG candidate, writes about JavaScript, Rust, macros, and web platform design.
What HN saysCommenters describe him as a high signal-to-noise contributor and cite his post arguing homoiconicity is not the point when discussing Lisp macros.
25HN people shared it
14linked it in comments
14stories submitted
712story points
3 years agolast shared
2011people per year2026
Most-shared posts
- 1Homoiconicity isn’t the point (2012)12 people · 246 points · first shared 2012 · 76 comments on HN
- 2Neon: Node plus Rust4 people · 338 points · first shared 2015 · 69 comments on HN
- 3Why Coroutines Won't Work on the Web3 people · 6 points · first shared 2011 · discussion on HN
- 4On “On Asm.js”2 people · 98 points · first shared 2013 · 61 comments on HN
- 5Toolchains as Code1 people · 8 points · first shared 2020 · 1 comments on HN
- 6I'm Running for W3C TAG & I'd Like Your Support (David Herman)1 people · 7 points · first shared 2014 · discussion on HN
- 7The little-endian web?1 people · 5 points · first shared 2012 · discussion on HN
- 8Native JavaScript classes in Neon1 people · 3 points · first shared 2016 · discussion on HN
- 9Homoiconicity isn’t the point1 people · 1 points · first shared 2013 · discussion on HN
- 10Homepage1 people · first shared 2021
What HN people wrote when they linked it
chalst · 2021-05-03
Dave Herman has been a high signal-to-noise contributor to Lambda the Ultimate over the years; if you want to get an idea as to where he is coming from, looking at his contributions there [1], his slightly active blog [2], and on his now pretty much inactive joint blog [3] are good places to start.
[1]: http://lambda-the-ultimate.org/user/825/track?sort=desc&order=auth…
[2]: http://calculist.org/
[3]: https://www.thefeedbackloop.xyz/
steveklabnik · 2016-02-16
While this is true in some sense, there are also advantages. A ruby gem written in Rust via C FFI was one of the earliest production uses of Rust; the Skylight people still thought (and think) that it was very, very worth it.
https://www.youtube.com/watch?v=2BdJeSC4FFI is a further exploration of this idea and how it works. Yes, you do need that small layer, but future libraries will make it even easier. There's the Neon work, for example: http://calculist.org/blog/2015/12/23/neon-node-rust/
samth · 2014-09-22
Homoiconicity is either a trivial property (we can define an AST!) or a not-relevant-to-macros one (probably best expressed as "we have quote", which is basically true of JS).
This post by Dave Herman nicely expresses the problems with homoiconicity as a concept: http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/
soegaard · 2023-07-05
> I used to like Lisp's homoiconicity. These days, I'm not even sure the concept makes any sense? What is it even supposed to mean?
You are not alone:
http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/
pcwalton · 2018-05-20
S-expressions aren't actually necessary for macros to work. You just have to be able to separate "READ" from "EXPAND" (to use Lisp-ish terminology).
I believe, but am not sure, that this is possible for Go. (Of course, whether this is a good idea is another thing entirely. I probably wouldn't have included macros if I had been put in charge of Go 1.0, given Go's goals of simplicity.)
More on this from my former colleague Dave Herman, who did his dissertation on macros: http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/
acchow · 2016-11-10
But most compilers have a parser. Scheme doesn't need one ;)
http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/
indatawetrust · 2016-07-21
mseri · 2016-01-12
With specific C++ features there is still a lot of work to do, however the C FFI is solid and simple to use if that is enough for you (see e.g. https://doc.rust-lang.org/book/ffi.html).
Interfacing Rust and python, ruby, node can be quite simple in fact (micro demo for node: http://calculist.org/blog/2015/12/23/neon-node-rust/)
kibwen · 2015-09-04
Macro systems are becoming increasingly popular (e.g. Rust and Sweet.js), but arguably neither of those languages is homoiconic in the Lisp sense (though see also Dave Herman's "Homoiconicity isn't the point" http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/ ).
JimmyM · 2014-04-04
Homoiconicity is a neat thing when you just get started, although there's some interesting discussion around that subject here - http://calculist.org/blog/2012/04/17/homoiconicity-isnt-the-point/
msl09 · 2013-11-29
This feels almost like a parody to http://calculist.org/blog/2013/11/27/on-on-asm-js/
BrendanEich · 2012-01-11
Delimited continuations are not gonna happen. See http://wiki.ecmascript.org/doku.php?id=strawman:shallow_continuations, http://calculist.blogspot.com/2010/04/single-frame-continuations-for-h… and http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-w…
domenicd · 2016-08-13
> Why even bother with such half-baked solutions? In almost every case it's utterly transparent that these solutions exist for the benefit of the compiler and runtime author, usually because of intentional or unintentional technical debt--a direct or indirect dependency on the C or kernel stack.
There is a significant faction of language designers that disagree, and think that keeping coroutines shallow is important for developers writing and reading the code. This post from Dave Herman<(involved in JavaScript and Rust) sums it up: http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-w… (The comment from Tom van Cutsem is also a good rephrasing: http://disq.us/p/9jcee9.) Note that the argument is not as applicable in languages with racy multithreading (like C/C++ or Java).
I don't think it's necessarily a knockout argument, but it at least helps me sleep with what we've chosen for JavaScript.