<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: pg threads</title><link>https://news.ycombinator.com/threads?id=pg</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss </generator><lastBuildDate>Fri, 17 Apr 2026 22:10:36 +0000</lastBuildDate><atom:link href="https://hnrss.org/threads?id=pg" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by pg in "The Best Essay"]]></title><description><![CDATA[
<p>In earlier drafts I wrote "the existence of some set of best
essays follows necessarily" but it sounded so pedantic that it didn't seem worth keeping just to protect myself from being accused of not understanding the distinction between a partial and total order. I assumed anyone reading it in good faith would understand what I was saying.</p>
]]></description><pubDate>Mon, 11 Mar 2024 12:57:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=39667625</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=39667625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39667625</guid></item><item><title><![CDATA[New comment by pg in "If you're interested in eye-tracking, I'm interested in funding you"]]></title><description><![CDATA[
<p>It's not available yet. And in any case if this is the future there should be multiple companies doing it, not just Apple.</p>
]]></description><pubDate>Sun, 27 Aug 2023 01:29:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=37278578</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=37278578</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37278578</guid></item><item><title><![CDATA[New comment by pg in "Paul Graham is leaving Twitter for now"]]></title><description><![CDATA[
<p>Thanks, but as I learned when I was running HN, being a regular user of a forum (which the moderator necessarily is) and writing essays are fundamentally incompatible.<p>If you're known to be a regular user of a forum, then when someone says something about you and you don't reply, it reads as a tacit admission that they're correct. And when you write essays people say all kinds of things about you. The combination is a disaster. Forum users can sense that you're compelled to respond, and it encourages them to pick fights with you.<p>Back when I used to moderate HN, hitting publish on an essay was usually followed by several hours of saying various forms of "No, what I said was..." Life is much better now that I never look at the HN threads on them.</p>
]]></description><pubDate>Sun, 18 Dec 2022 21:09:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=34043420</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=34043420</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34043420</guid></item><item><title><![CDATA[New comment by pg in "Paul Graham is leaving Twitter for now"]]></title><description><![CDATA[
<p>I'm not leaving Twitter. It seems more likely than not that Elon will reverse the ban on links to other social media sites. I just don't want to hang out there in the meantime. Plus given the way things are going, it seemed like a good time to learn about alternatives.<p>I still think Elon is a smart guy. His work on cars and rockets speaks for itself. Nor do I think he's the villain a lot of people try to make him out to be. He's eccentric, definitely, but that should be news to no one. Plus I don't think he realizes that the techniques that work for cars and rockets don't work in social media. Those two facts are sufficient to explain most of his behavior.<p>He could still salvage the situation. He's the sort of person it would be a big mistake to write off. And I hope he does. I would be delighted to go back to using Twitter regularly.</p>
]]></description><pubDate>Sun, 18 Dec 2022 20:38:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=34042993</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=34042993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34042993</guid></item><item><title><![CDATA[New comment by pg in "Paul Graham donates to flexport.org for healthcare worker protective gear in SF"]]></title><description><![CDATA[
<p>Yes. The root of the problem is that the hospitals' supply chain is brittle, and broke under the stress. One hopes it will get redesigned to be more robust. But in the meantime Flexport can get PPE now, and now is when it's needed.</p>
]]></description><pubDate>Sun, 22 Mar 2020 12:04:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=22654365</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=22654365</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22654365</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel language guide and source code with formatting"]]></title><description><![CDATA[
<p>This looks pretty good. The only thing I don't like is the coloring of tokens in the examples. It doesn't make them easier to read; it's just distracting.</p>
]]></description><pubDate>Mon, 11 Nov 2019 15:47:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=21505741</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21505741</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21505741</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>As names, car and cdr are great: short, and just the right visual distance apart. The only argument against them is that they're not mnemonic. But (a) more mnemonic names tend to be over-specific (not all cdrs are tails), and (b) after a week of using Lisp, car and cdr mean the two halves of a cons cell, and languages should be designed for people who've used them for more than a week.</p>
]]></description><pubDate>Tue, 15 Oct 2019 09:01:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=21256727</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21256727</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21256727</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>This was something I'd meant to do for a long time, and wanting to work on it was one of the reasons I retired from YC. Being overtly ambitious would have provoked haters, but few will see this thread now, so I'll tell you: the goal was to discover the Platonic form of Lisp, which is something I could always sense lurking beneath the surface of the many dialects I've used, but hidden by mistaken design choices. (T was probably the best in this respect.)<p>I don't know how much my experience translates to other people, because my "career" has been unusually random, but when I retired from YC what I was thinking was that at 49, if there was something I'd been meaning to do, I'd better do it.</p>
]]></description><pubDate>Tue, 15 Oct 2019 08:32:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=21256581</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21256581</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21256581</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>It would not be clearer to use 1 instead of car when you were using a pair to represent a tree, rather than a list, and you were traversing the left and right branches using car and cdr.</p>
]]></description><pubDate>Mon, 14 Oct 2019 10:51:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=21246823</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21246823</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21246823</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>An infinite number, in theory. Even (sign n d) does, since you can have anything in d.</p>
]]></description><pubDate>Sun, 13 Oct 2019 10:29:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239630</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239630</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239630</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>What this<p><pre><code>  (def typecheck ((var f) arg env s r m)
    (mev (cons (list (list f (list 'quote arg)) env)
               (fu (s r m)
                 (if (car r)
                     (pass var arg env s (cdr r) m)
                     (sigerr 'mistype s r m)))
               s)
         r
         m))
</code></pre>
says is, first create a function call<p><pre><code>  (list f (list 'quote arg))
</code></pre>
in which the function describing the type (e.g. int) is called on the argument that came in for that parameter. Its value will end up on the return value stack, r. So in the next step you look at the first thing on the return value stack<p><pre><code>  (car r)
</code></pre>
If it's true, you keep going as if the parameter had been a naked one, with no type restriction<p><pre><code>  (pass var arg env s (cdr r) m)
</code></pre>
and if it's false, you signal an error<p><pre><code>  (sigerr 'mistype s r m)</code></pre></p>
]]></description><pubDate>Sun, 13 Oct 2019 08:37:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239251</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239251</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>You wouldn't learn much more from reading it, because (to an almost comical extent in retrospect) the internal code was just like HN. In fact, not just like; it was mostly the same code.</p>
]]></description><pubDate>Sun, 13 Oct 2019 08:27:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239226</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239226</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>One answer to this question (and an exciting idea in itself) is that the difference between conciseness and many of these apparently unrelated matters approaches zero. E.g. that all other things being equal, the debuggability of a language, and the pleasure one feels in using it, will be inversely proportional to the length of programs written in it.<p>I'm not sure how true that statement is, but my experience so far suggests that it is not only true a lot of the time, but that its truth is part of a more general pattern extending even to writing, engineering, architecture, and design.<p>As for the question of catching errors at compile time, it may be that there are multiple styles of programming, perhaps suited to different types of applications. But at least some programming is "exploratory programming" where initially it's not defined whether code is correct because you don't even know what you're trying to do yet. You're like an architect sketching possible building designs. Most programming I do seems to be of this type, and I find that what I want most of all is a flexible language in which I can sketch ideas fast. The constraints that make it possible to catch lots of errors at compile time (e.g. having to declare the type of everything) tend to get in the way when doing this.<p>Lisp turned out to be good for exploratory programming, and in Bel I've tried to stick close to Lisp's roots in this respect. I wasn't even tempted by schemes (no pun intended) for hygienic macros, for example. Better to own the fact that you're generating code in its full, dangerous glory.<p>More generally, I've tried to stick close to the Lisp custom of doing everything with lists, at least initially, without thinking or even knowing what types of things you're using lists to represent.</p>
]]></description><pubDate>Sun, 13 Oct 2019 08:16:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239188</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239188</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>It's still the case. bel.bel is generated by software. Most of the actual code is Arc that I turn into Bel in generating it. E.g. the interpreter and anything called by it, and the reader. But code that's only used in Bel programs, rather than to interpret or read Bel programs, can be and is written in Bel.<p>I had to change Arc a fair amount to make this work.<p>Curiously, enough, though, I found doing development in Bel was sufficiently better that I'd often edit code in bel.bel, then paste a translated version into the file of Arc code, rather than doing development in the latter. This seemed a good sign.</p>
]]></description><pubDate>Sun, 13 Oct 2019 07:51:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239082</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239082</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>Initially I would have preferred that. I did it that way in Arc. But since functions are lists in Bel, I couldn't do that, or you wouldn't be able to call a function on a number.<p>As often happened with things I was forced into, though, I not only got used to putting numbers first but started to prefer it. It means for example you can compose them with other callable things.</p>
]]></description><pubDate>Sun, 13 Oct 2019 07:42:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239042</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239042</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>I don't expect implementations to be compliant. Starting with an initial phase where you care just about the concepts and not at all about efficient implementation almost guarantees you're going to have to discard some things from that phase when you make a version to run on the computers of your time. But I think it's still a good exercise to start out by asking "what would I do if I didn't count the cost?" before switching to counting the cost, instead of doing everything in one phase and having your thinking constrained by worries about efficiency.<p>So cleverness in implementation won't translate into compliance, but rather into inventing declarations that programmers can use that will make their programs dramatically faster. E.g. if programmers are willing to declare that they're not going to look inside or modify literals, you don't have to actually represent functions as lists. And maybe into making really good programming tools.<p>As I said elsewhere, half jokingly but also seriously, this language is going to give implementors lots of opportunities for discovering new optimization techniques.</p>
]]></description><pubDate>Sun, 13 Oct 2019 07:39:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=21239023</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21239023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21239023</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>(where (cadr x)) would be ((b c) a).<p>where tells you what to set, and setting the cadr of (a b c) means setting the car of (b c).</p>
]]></description><pubDate>Sun, 13 Oct 2019 07:26:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=21238968</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21238968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21238968</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>In the same way it's an improvement over other Lisp dialects. There's no huge hole in Arc that Bel fixes. Just a lot of things that are weaker or more awkward or more complicated than they should be.</p>
]]></description><pubDate>Sat, 12 Oct 2019 18:17:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=21235071</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21235071</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21235071</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>I talk about this in the first section of the The Bel Language: <a href="http://paulgraham.com/lib/paulgraham/bellanguage.txt" rel="nofollow">http://paulgraham.com/lib/paulgraham/bellanguage.txt</a></p>
]]></description><pubDate>Sat, 12 Oct 2019 17:28:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=21234736</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21234736</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21234736</guid></item><item><title><![CDATA[New comment by pg in "Show HN: Bel"]]></title><description><![CDATA[
<p>Because falsity is also the empty list.</p>
]]></description><pubDate>Sat, 12 Oct 2019 17:22:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=21234693</link><dc:creator>pg</dc:creator><comments>https://news.ycombinator.com/item?id=21234693</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21234693</guid></item></channel></rss>