<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: Jeaye</title><link>https://news.ycombinator.com/user?id=Jeaye</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 09:07:04 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Jeaye" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Jeaye in "Ask HN: Why is the HN crowd so anti-AI?"]]></title><description><![CDATA[
<p>There are three aspects of this which concern me the most: personal, open source, and business.<p>On the personal side, code is <i>art</i>, not a means to an end. Many of us <i>love</i> coding. For me, it's my favorite thing in the world to do and it has been that way for 20 years. That's why we enjoy going back over old game code, to see the clever tricks that people came up with. That's why we preserve code in archives, to last thousands of years. Sure, we can generate classic art, too, and it can be fun. But generating Rambrandt paintings is nothing like actually seeing the originals. And it's nothing like creating your own.<p>Code being art is exactly why coders are so opinionated about their tools. Just like artists are. "I only use vim and functional programming and Linux" says the coder. "I only use these paint brushes, and this type of paint, on this particular type of canvas" says the painter. People don't consider this enough, for coding, so they just say "Use the best tool for the job." But any paint brush will do, for most jobs. Any language will do, for most jobs. Why it all matters is <i>because we care.</i> We care because art is a form of personal expression.<p>On the open source side, maintainers now just get huge PRs full of slop changes. The submitters tend to feel like they're helping, but they're just wasting everyone's time. The trust landscape of contributing has been eroded. The security concerns of large changes are now more pressing than ever. The gross disregard for licensing spits in the face of both the nature of open source and the actual legal ground on which LLMs try to stand. And then so many projects trying to grow end up getting vibe-coded weekend projects as competitors and people actually think they're comparable. For the non-trivial cases, they're not, because of the business side.<p>On the business side, let's take a programming language for example, like Zig. A business will be hesitant to adopt a particular technology if it's just one guy working on it. But if the technology has a community, a foundation, and a handful of devs working on it full-time, it is a safer investment. A big reason here is that the bus factor will be higher than one. However, LLM-generated code is a black box. It has a bus factor of zero. Nobody understands all of the code. Probably, nobody ever will. If there is a critical bug at a critical time, there is nobody to call. We would have to rely on LLMs to find and fix the bug, but how much faith can we actually put into this? That covers third party technology, but the same applies to first party technology.<p>If a small business decides to use Claude to create their mobile app, rather than hire an experienced dev, they now suffer the same black box and bus factor problem. Even if they hire a dev, but they expect the dev to finish at vibe-coding speeds, we end up with the same problem.<p>---<p>In short, vibe coding removes everything I love about my favorite thing to do. It also creates heaps of blackbox code with no ownership, beholden to proprietary tech which is only getting more expensive. Why would I like that?</p>
]]></description><pubDate>Sun, 07 Jun 2026 01:43:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48430948</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48430948</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48430948</guid></item><item><title><![CDATA[New comment by Jeaye in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>Babashka's interop is with Java, since Babashka uses a Graal-compiled version of the JVM. It's still the JVM, just baked down.<p>This is different from interop with the native world. It's different from the host runtime actually being native, rather than a baked down version of a whole VM.<p>Graal's native images blur the line between the JVM and native, I would not say Babashka has a native runtime. Perhaps borkdude would disagree. Might be an interesting discussion.</p>
]]></description><pubDate>Wed, 03 Jun 2026 16:41:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48386346</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48386346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48386346</guid></item><item><title><![CDATA[New comment by Jeaye in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>I am developing a test suite for portability of clojure.core across dialects. You can find it here: <a href="https://github.com/jank-lang/clojure-test-suite" rel="nofollow">https://github.com/jank-lang/clojure-test-suite</a><p>Currently, we have Clojure, ClojureScript, ClojureCLR, Babashka, Basilisp, Phel, and jank running the test suite.<p>I have only used Clojure, ClojureScript, and Babashka in production. But I am the creator of jank.</p>
]]></description><pubDate>Wed, 03 Jun 2026 06:17:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=48380577</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48380577</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48380577</guid></item><item><title><![CDATA[New comment by Jeaye in "My thoughts after using Clojure for about a month"]]></title><description><![CDATA[
<p>Once you learn Clojure's syntax and semantics, you're no longer bound to the JVM. There's ClojureScript (JS), ClojureCLR, ClojureDart, jank (C++), Basilisp (Python), babashka (SCI), and many others. This means that, if you don't know Java or don't like the JVM, you can likely use Clojure wherever you already feel most comfortable.<p>For the most part, any Clojure code which doesn't use host interop will work on all dialects. Clojure also has support for conditional code, depending on the current dialect.<p>This is one of Clojure's superpowers.</p>
]]></description><pubDate>Wed, 03 Jun 2026 00:39:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48378185</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48378185</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48378185</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank now has its own custom IR"]]></title><description><![CDATA[
<p>jank's custom IR is completely separate and unrelated to LLVM IR, aside from both of them being SSA-based IRs. We go from jank's AST into jank's IR into C++, which we then give to Clang compile into the LLVM JIT runtime. So LLVM IR is used in the pipeline, but we don't touch it directly. More info on that, and a diagram, is here: <a href="https://book.jank-lang.org/dev/ir.html" rel="nofollow">https://book.jank-lang.org/dev/ir.html</a> (which I linked in the post)</p>
]]></description><pubDate>Tue, 19 May 2026 01:51:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48188311</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48188311</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48188311</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank now has its own custom IR"]]></title><description><![CDATA[
<p>As another said, jank is not replacing LLVM or LLVM IR. We still use LLVM IR! There is a diagram here which shows the pipeline: <a href="https://book.jank-lang.org/dev/ir.html" rel="nofollow">https://book.jank-lang.org/dev/ir.html</a><p>The main thing is that we just use our own IR first, to perform optimizations with contextual data which is gone by the time we get to LLVM IR. That's also why these optimizations are not practical to write in LLVM, since by the time we get to LLVM IR, we're too far separated from jank's AST with the high level semantics of Clojure.<p>So we just add an intermediate step. Once we have jank's AST, turn it into our own IR, do some optimizations on it for things that LLVM won't be able to see, and then hand it off to LLVM to do the rest.</p>
]]></description><pubDate>Mon, 18 May 2026 17:31:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48182661</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48182661</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48182661</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank now has its own custom IR"]]></title><description><![CDATA[
<p>The first three paragraphs here are on point! jank's IR passes will not worry much about things like load/store optimization, register allocation, inlining C++ functions, etc. These are in LLVM's domain. We just worry about the Clojure side of things. Polymorphic math is intense, but we do our best to avoid the extra work by unboxing whenever possible.<p>> A future optimisation might be to specialise for unboxed types: far more potential speed improvement over pointer tagging, and IMO quite amenable to analysis with the Jank IR<p>All of these math functions are templates with four specific categories:<p>1. Object and object<p>2. Primitive and primitive<p>3. Primitive and object<p>4. Object and primitive<p>We handle the difference between typed objects (like integer_ref) and type-erased objects (object_ref) as well. This template then gets inlined, which is exactly what the last step of the benchmark optimizations (adding annotations) ensured. The return type of these functions will prefer primitive types, rather than automatically boxing. jank's analyzer tracks all types used, at compile-time, and supports automatic boxing. This means that we're already using the most optimal primitive math whenever we can and that it will indeed inline to just an operator call when working on two primitives, or two typed objects, or a combination thereof.<p>You can see the code for this here: <a href="https://github.com/jank-lang/jank/blob/29c2adb344526d26c8e825f1ebed56a09c5f9aa2/compiler%2Bruntime/include/cpp/jank/runtime/core/math.hpp#L44" rel="nofollow">https://github.com/jank-lang/jank/blob/29c2adb344526d26c8e82...</a></p>
]]></description><pubDate>Mon, 18 May 2026 17:20:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=48182521</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48182521</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48182521</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank now has its own custom IR"]]></title><description><![CDATA[
<p>I spoke with a couple Clang and LLVM devs about MLIR when I was doing the original design for jank's IR. The general consensus was that MLIR added a great deal of complexity on top of designing/implementing an IR and nobody was confident it was actually worth the effort. Since I knew exactly what I wanted, I just built that.</p>
]]></description><pubDate>Mon, 18 May 2026 17:11:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48182402</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48182402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48182402</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank now has its own custom IR"]]></title><description><![CDATA[
<p>Hey lemming! You're right, which is why it should be used sparingly. Since clojure.core is compiled (on the JVM) with direct linking, reacting to var changes isn't an intended concern, since they're not going to work properly throughout any clojure.core code using that var. This makes it a good candidate ns for inlining things. But users shouldn't just be doing this for their normal application vars without giving it due consideration.</p>
]]></description><pubDate>Mon, 18 May 2026 17:08:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48182370</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=48182370</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48182370</guid></item><item><title><![CDATA[New comment by Jeaye in "Official Clojure Documentary page with Video, Shownotes, and Links"]]></title><description><![CDATA[
<p>I think they mean the video thumbnail, which may or may not be AI-generated.</p>
]]></description><pubDate>Thu, 16 Apr 2026 22:25:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47800315</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=47800315</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47800315</guid></item><item><title><![CDATA[New comment by Jeaye in "Ask HN: What Are You Working On? (April 2026)"]]></title><description><![CDATA[
<p>I'm working on the jank programming language!<p><a href="https://github.com/jank-lang/jank" rel="nofollow">https://github.com/jank-lang/jank</a><p>It's a native Clojure dialect which is also a C++ dialect, including a JIT compiler and nREPL server. I'm currently building out a custom IR so I can do optimization passes at the level of Clojure semantics, since LLVM will not be able to do them at the LLVM IR level.</p>
]]></description><pubDate>Sun, 12 Apr 2026 21:40:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47744843</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=47744843</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47744843</guid></item><item><title><![CDATA[Show HN: Glitchlings, Enemies for Your LLM]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/osoleve/glitchlings">https://github.com/osoleve/glitchlings</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46903800">https://news.ycombinator.com/item?id=46903800</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 05 Feb 2026 19:20:49 +0000</pubDate><link>https://github.com/osoleve/glitchlings</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46903800</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46903800</guid></item><item><title><![CDATA[How to stick with your projects, even when they're janky [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=Alfq8RG80Ns">https://www.youtube.com/watch?v=Alfq8RG80Ns</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46593615">https://news.ycombinator.com/item?id=46593615</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 12 Jan 2026 20:15:48 +0000</pubDate><link>https://www.youtube.com/watch?v=Alfq8RG80Ns</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46593615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46593615</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>As much as any C++ project would, yes. That includes either through the C ABI or through the various C++/Rust interop mechanisms.</p>
]]></description><pubDate>Sat, 03 Jan 2026 18:45:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46480067</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46480067</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46480067</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>jank is Clojure and will track upstream Clojure development. I'm working closely with the Clojure team and other dialect devs to ensure this remains the case. I am leading a cross-dialect clojure-test-suite to help ensure parity across all dialects: <a href="https://github.com/jank-lang/clojure-test-suite" rel="nofollow">https://github.com/jank-lang/clojure-test-suite</a> We have support or work ongoing for Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp, and jank.<p>With that said, jank will do some trail blazing down other paths (see my other comments here about Carp), but they will be optional modes which people can enable which are specific to jank. Clojure compatibility will remain constant.</p>
]]></description><pubDate>Sat, 03 Jan 2026 18:44:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46480058</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46480058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46480058</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>JIT compiling C++ is definitely the slowest thing we do. However, we're working on two different codegen modes.<p>1. C++<p>2. LLVM IR<p>The IR is much faster to compile, but its perf isn't nearly as good. This is meant to be a nice trade off, during iteration, so that you can use C++ codegen for your release artifact, but stick with IR when you're REPLing. The IR gen is still unstable right now, for the alpha, but we'll have both solidified this year.</p>
]]></description><pubDate>Sat, 03 Jan 2026 18:39:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=46480005</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46480005</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46480005</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>Carp is great and I would love to include a mode of jank which is very much Carp-esque. If you're interested in working together on this, please let me know.</p>
]]></description><pubDate>Sat, 03 Jan 2026 03:12:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46472439</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46472439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46472439</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>We have a working nREPL server, but it's not yet merged into the jank repo. <a href="https://github.com/kylc/try-jank" rel="nofollow">https://github.com/kylc/try-jank</a><p>There's a Clang bug getting in the way of the progress we want, so we'll need to work around. There's a lot I'm juggling, but this is high priority.<p>Thanks for the broken link report. That should be fixed now.</p>
]]></description><pubDate>Sat, 03 Jan 2026 03:11:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46472430</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46472430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46472430</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>No full-lang static type system. jank has seamless C++ interop and all interop is statically typed, but as soon as things get back into Clojure land, it's all dynamically typed and hella polymorphic.<p>I will be exploring optional static typing modes for jank in the future, a la Carp. That will not be this year, though.</p>
]]></description><pubDate>Fri, 02 Jan 2026 22:53:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46470512</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46470512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46470512</guid></item><item><title><![CDATA[New comment by Jeaye in "Jank Lang Hit Alpha"]]></title><description><![CDATA[
<p>Hi! I'm happy to accept grammatical PRs to the book. You could also report issues via Slack or Github issue. I will not be accepting larger PRs to the book, to maintain a consistent voice.</p>
]]></description><pubDate>Fri, 02 Jan 2026 21:32:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46469642</link><dc:creator>Jeaye</dc:creator><comments>https://news.ycombinator.com/item?id=46469642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46469642</guid></item></channel></rss>