<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: keithasaurus</title><link>https://news.ycombinator.com/user?id=keithasaurus</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 11 Aug 2026 15:27:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=keithasaurus" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by keithasaurus in "Ask HN: What are you working on? (August 2026)"]]></title><description><![CDATA[
<p>Blorp. <a href="https://blorp-lang.org" rel="nofollow">https://blorp-lang.org</a><p>It takes inspiration from Python, Rust, Go, and functional programming. It's oriented toward readability, safety, and speed.<p>I'm finishing up the journey of completely self-hosting. Then I'll be tidying it up for an initial release.</p>
]]></description><pubDate>Sun, 09 Aug 2026 21:57:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49236507</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=49236507</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49236507</guid></item><item><title><![CDATA[New comment by keithasaurus in "Ask HN: What Are You Working On? (July 2026)"]]></title><description><![CDATA[
<p><a href="https://blorp-lang.org" rel="nofollow">https://blorp-lang.org</a><p>Taking a bit of a detour with self-hosting the language, now that the syntactic surface, standard library, and initial dependency strategy are on a decent footing.<p>With any luck, by the end of the week, I'll start prepping for a 0.0.1 release.</p>
]]></description><pubDate>Mon, 13 Jul 2026 03:42:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48887627</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48887627</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48887627</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>The memory management model is automatic reference counting, with some optimizations, such as perseus for compile time reference counting where possible, and copy-on-write at runtime.</p>
]]></description><pubDate>Wed, 03 Jun 2026 03:41:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379618</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379618</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379618</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>I'm the creator of Blorp -- this made me chuckle a bit. I hadn't even considered that possibility.</p>
]]></description><pubDate>Wed, 03 Jun 2026 03:36:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379585</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379585</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Yes, it's python-inspired. Some notable differences are:
- no return keyword
- match/if are expressions
- it's functional
- =? is used for early returns or binding, depending on the variant of an Option or Result that is returned<p>There's a lot of other differences -- it's a smaller language surface than Python overall.</p>
]]></description><pubDate>Wed, 03 Jun 2026 02:58:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379376</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379376</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Yeah, this is the idea. This chaining is exactly the same as the pipeline operator in some some function languages, except that it hopefully reads in a more familiar way to programmers of non-functional languages.</p>
]]></description><pubDate>Wed, 03 Jun 2026 02:42:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379285</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379285</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Yes, blorp does that. And it also allows local mutation and loops inside pure functions, so performance doesn't need to be left on the table in most cases.</p>
]]></description><pubDate>Wed, 03 Jun 2026 02:40:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379273</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379273</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379273</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Hi, maintanier of blorp here. I think you mean that [1,2,3].map(func(x): x *2).filter(func(x): x > 5) would iterate twice, correct? Under the hood blorp  optimizes that away for the functions we can. It constructs a loop and combines logic into a single iteration where possible.<p>Of course, blorp also allows local mutation in loops (even in pure functions, so long as the logic is contained to the function), so if there's a specific algorithm you'd rather express in a loop, you can.</p>
]]></description><pubDate>Wed, 03 Jun 2026 02:39:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48379261</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48379261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48379261</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Hey - I'm the creator of Blorp, and like a lot of the ideas you have in Roc! Did you consider having opt-in purity? Or some other means of conveying impurity other than "!"?</p>
]]></description><pubDate>Wed, 03 Jun 2026 00:02:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48377903</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48377903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48377903</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>It's called blorp because it's the name of a stegosaurus my kids and I made up.</p>
]]></description><pubDate>Tue, 02 Jun 2026 22:16:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=48377083</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48377083</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48377083</guid></item><item><title><![CDATA[New comment by keithasaurus in "Blorp Language"]]></title><description><![CDATA[
<p>Hey... I'm the maintainer and had no idea this was posted. The reason pure is required is because it's clear and opt-in. There's a CLI subcommand called purify that will help identify pure functions that haven't been deemed so if that's desired.<p>But there can be many (small) applications where pure doesn't even matter, so I don't really want to force someone to write "impure" for the main function, for example.</p>
]]></description><pubDate>Tue, 02 Jun 2026 22:15:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48377068</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48377068</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48377068</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>Still incomplete there. But yeah performance should be decent. Not aiming for parity either rust or go entirely but in the same ball park is the expectation.</p>
]]></description><pubDate>Mon, 01 Jun 2026 03:28:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48352302</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48352302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48352302</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>Yeah, no shared mutable memory; coordination is done via channels.</p>
]]></description><pubDate>Sun, 31 May 2026 14:36:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48346002</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48346002</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48346002</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>How is compiling to zig? I considered doing it but chose C instead because of how much zig is still changing. I've considered using it's C compiler for targeting multiple platforms locally.</p>
]]></description><pubDate>Sun, 31 May 2026 07:08:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48343680</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48343680</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48343680</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>No, blorp doesn't use affine types (one or zero uses). In blorp, ownership is not explicitly controlled by users at all, so it's opaque. Under the hood, it's perceus for compile-time ownership and borrowing and automatic reference counting with copy-on-write optimizations for the runtime. This is made reasonably easy for the compiler to reason about in blorp because semantically it doesn't _really_ have in-place mutation -- `var` really means "re-bindable" to a new value; and then under the hood we'll mutate in place where we can.</p>
]]></description><pubDate>Sun, 31 May 2026 06:51:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48343594</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48343594</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48343594</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>I have some similar goals. Have you considered leaning more into inference than gradual typing? One pattern I like is allowing the compiler to develop a more complex mental model, but keeping it straightforward for users -- you can do that with inference, ownership, purity, effect types, etc. What I actually think is really tantalizing is using tooling to fill in some of those gaps -- for instance, the editor could know types, required capabilities etc, without the user ever needing to type anything, but when the user needs it, they can find it, query it, test against it.</p>
]]></description><pubDate>Sat, 30 May 2026 23:54:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48341740</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48341740</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48341740</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>Yeah, concurrency in blorp doesn't allow shared mutable references, so deadlocks aren't really a concern. Otherwise it's meant to be simple-ish -- virtual threads, channels, no async/await. Pure functions allow safe parallelism naturally, so that's fairly straightforward, though the API is still incomplete, for example the "Parallel" section here: <a href="https://blorp-lang.org/docs/lists/" rel="nofollow">https://blorp-lang.org/docs/lists/</a>.  It's still under heavy development (working on it right now).<p>What are the over-arching goals of your language?</p>
]]></description><pubDate>Sat, 30 May 2026 23:32:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48341614</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48341614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48341614</guid></item><item><title><![CDATA[New comment by keithasaurus in "Zig ELF Linker Improvements Devlog"]]></title><description><![CDATA[
<p>Working on something kinda similar. No GC, Python feel, managed memory, performance approaching C. It's here: <a href="https://blorp-lang.org" rel="nofollow">https://blorp-lang.org</a> if you want to compare approaches.</p>
]]></description><pubDate>Sat, 30 May 2026 22:03:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48341043</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=48341043</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48341043</guid></item><item><title><![CDATA[New comment by keithasaurus in "Ask HN: What are you working on? (September 2025)"]]></title><description><![CDATA[
<p>It's not the core of koda-validate, and yeah lots of libraries have a similar  capacity. Feedback I'd be interested in is if there are gaps.<p>In general the value prop of koda-validate is that it turns validation into typesafe building blocks, which makes validators very re-usable -- and flexible. Some other notable differences from pydantic are that it doesn't `raise` on validation errors, you don't need a typing plugin, and it's fully asyncio-compatible.</p>
]]></description><pubDate>Tue, 30 Sep 2025 03:44:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=45421682</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=45421682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45421682</guid></item><item><title><![CDATA[New comment by keithasaurus in "Ask HN: What are you working on? (September 2025)"]]></title><description><![CDATA[
<p>Updating my validation library for python, koda-validate (<a href="https://github.com/keithasaurus/koda-validate" rel="nofollow">https://github.com/keithasaurus/koda-validate</a>).<p>Focusing on ergonomics improvements. Just released an improvement to the __repr__ for Invalid types.<p>Potentially working on expanding the ability to generate validators from arbitrary typehints, ie `get_typehint_validator(list[str | int])`. It has good coverage, but I suspect I'm blind to some obvious holes. Would love feedback!</p>
]]></description><pubDate>Tue, 30 Sep 2025 02:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=45421291</link><dc:creator>keithasaurus</dc:creator><comments>https://news.ycombinator.com/item?id=45421291</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45421291</guid></item></channel></rss>