<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: ngoldbaum</title><link>https://news.ycombinator.com/user?id=ngoldbaum</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 15 Aug 2026 16:09:40 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ngoldbaum" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ngoldbaum in "Scaling NumPy on Free-Threaded Python"]]></title><description><![CDATA[
<p>I’m saying that it’s a new issue on the free-threaded build.</p>
]]></description><pubDate>Fri, 07 Aug 2026 13:07:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49209835</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49209835</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49209835</guid></item><item><title><![CDATA[New comment by ngoldbaum in "Scaling NumPy on Free-Threaded Python"]]></title><description><![CDATA[
<p>There’s also the fact that INCREF and DECREF on shared objects is a lot more expensive than plain integer addition, so stuff becomes a bottleneck that was never a bottleneck. Kumar also fixed a bottleneck caused by a lock added only for safety on the free-threaded build. It’s hard to tell in advance than a fancy lock-free data structure is needed for something.</p>
]]></description><pubDate>Thu, 06 Aug 2026 11:14:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=49195178</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49195178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49195178</guid></item><item><title><![CDATA[New comment by ngoldbaum in "Scaling NumPy on Free-Threaded Python"]]></title><description><![CDATA[
<p>I’m not sure why it took me, a NumPy developer, looking at the benchmark numbers and saying “hmm, this is a bug”. But that is what it took. People are sometimes slow to treat behavior in dependencies like NumPy as bugs.</p>
]]></description><pubDate>Thu, 06 Aug 2026 11:11:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=49195148</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49195148</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49195148</guid></item><item><title><![CDATA[Scaling NumPy on Free-Threaded Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python">https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49112023">https://news.ycombinator.com/item?id=49112023</a></p>
<p>Points: 114</p>
<p># Comments: 24</p>
]]></description><pubDate>Thu, 30 Jul 2026 16:09:39 +0000</pubDate><link>https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49112023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49112023</guid></item><item><title><![CDATA[New comment by ngoldbaum in "What Every Python Developer Should Know About the CPython ABI"]]></title><description><![CDATA[
<p>I’m glad you enjoyed the post. It really helped me to crystallize my understanding. I was also confused about the API/ABI distinction for a long time.</p>
]]></description><pubDate>Sun, 26 Jul 2026 17:22:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49060220</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49060220</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49060220</guid></item><item><title><![CDATA[New comment by ngoldbaum in "What Every Python Developer Should Know About the CPython ABI"]]></title><description><![CDATA[
<p>Thanks for pointing that out, I’ll fix that.</p>
]]></description><pubDate>Sun, 26 Jul 2026 17:17:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=49060171</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=49060171</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49060171</guid></item><item><title><![CDATA[What Every Python Developer Should Know About the CPython ABI]]></title><description><![CDATA[
<p>Article URL: <a href="https://labs.quansight.org/blog/python-abi-abi3t">https://labs.quansight.org/blog/python-abi-abi3t</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48862673">https://news.ycombinator.com/item?id=48862673</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 10 Jul 2026 17:18:48 +0000</pubDate><link>https://labs.quansight.org/blog/python-abi-abi3t</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=48862673</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48862673</guid></item><item><title><![CDATA[Scaling Asyncio on Free-Threaded Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://labs.quansight.org/blog/scaling-asyncio-on-free-threaded-python">https://labs.quansight.org/blog/scaling-asyncio-on-free-threaded-python</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45211102">https://news.ycombinator.com/item?id=45211102</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 11 Sep 2025 13:02:58 +0000</pubDate><link>https://labs.quansight.org/blog/scaling-asyncio-on-free-threaded-python</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=45211102</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45211102</guid></item><item><title><![CDATA[New comment by ngoldbaum in "GitHub was having issues"]]></title><description><![CDATA[
<p>I wonder why the github status page has an atlassian cookie request pop-up.</p>
]]></description><pubDate>Tue, 12 Aug 2025 15:27:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=44877560</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=44877560</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44877560</guid></item><item><title><![CDATA[Python Free-Threading Guide]]></title><description><![CDATA[
<p>Article URL: <a href="https://py-free-threading.github.io/">https://py-free-threading.github.io/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44658334">https://news.ycombinator.com/item?id=44658334</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 23 Jul 2025 12:14:50 +0000</pubDate><link>https://py-free-threading.github.io/</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=44658334</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44658334</guid></item><item><title><![CDATA[The first year of free-threaded Python]]></title><description><![CDATA[
<p>Article URL: <a href="https://labs.quansight.org/blog/free-threaded-one-year-recap">https://labs.quansight.org/blog/free-threaded-one-year-recap</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43976886">https://news.ycombinator.com/item?id=43976886</a></p>
<p>Points: 16</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 13 May 2025 19:47:35 +0000</pubDate><link>https://labs.quansight.org/blog/free-threaded-one-year-recap</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=43976886</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43976886</guid></item><item><title><![CDATA[New comment by ngoldbaum in "Ty: A fast Python type checker and language server"]]></title><description><![CDATA[
<p>Either something about beanie babies or something riffing on "thank you". Couldn't ever make up my mind then basically forgot about it.</p>
]]></description><pubDate>Thu, 08 May 2025 14:46:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=43926553</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=43926553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43926553</guid></item><item><title><![CDATA[New comment by ngoldbaum in "Ty: A fast Python type checker and language server"]]></title><description><![CDATA[
<p>I gave away the “ty” project name on pypi to Astral a week or so ago. I wanted to use it for a joke a few years ago but this is a much better use for a two letter project name. They agreed to make a donation to the PSF to demonstrate their gratefulness.</p>
]]></description><pubDate>Wed, 07 May 2025 20:10:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43920112</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=43920112</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43920112</guid></item><item><title><![CDATA[New comment by ngoldbaum in "Branchless UTF-8 Encoding"]]></title><description><![CDATA[
<p>You could do two passes over the string, first get the total length in bytes, then fill it in codepoint by codepoint.<p>You could also pessimistically over-allocate assuming four bytes per character and then resize afterwards.<p>With the API in the linked blog post it's up to the user to decide how they want to use the output [u8;4] array.</p>
]]></description><pubDate>Fri, 17 Jan 2025 21:47:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=42743614</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=42743614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42743614</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>The main difference is the strings are stored in a single contiguous arena buffer (with some minor caveats if you mutate the array in-place). With object strings each string has its own heap allocation.<p>More details in NEP 55: <a href="https://numpy.org/neps/nep-0055-string_dtype.html" rel="nofollow">https://numpy.org/neps/nep-0055-string_dtype.html</a><p>This post is based on the content of a 25 minute talk and it’s hard to explain everything fully…</p>
]]></description><pubDate>Thu, 24 Oct 2024 13:43:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=41935414</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41935414</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41935414</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>Ah I could see how that’s confusing. I was trying to indicate that the size stored for the string in the example is 28, but it’s stored in a 64 bit uint.</p>
]]></description><pubDate>Thu, 24 Oct 2024 13:40:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=41935377</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41935377</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41935377</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>They’re stored on the DType instance. This requires that there’s only one DType instance per “owned” array buffer, which I figured out how to do along with Sebastian Berg and others using the new DType system.</p>
]]></description><pubDate>Thu, 24 Oct 2024 13:37:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=41935353</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41935353</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41935353</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>That is something I’d like to see but I don’t want to wade into the already very complicated discussion around arrow strings in pandas. If a Pandas developer wanted to take this on I think that would make things easier since there’s so much complexity around strings in Pandas.<p>That said there is a branch that gets most of the way there: <a href="https://github.com/pandas-dev/pandas/pull/58578">https://github.com/pandas-dev/pandas/pull/58578</a>. The remaining challenges are mostly around getting consensus around how to introduce this change.<p>If NumPy had StringDType in 2019 instead of 2024 I think Pandas might have had an easier time. Sadly the timing didn’t quite work out.</p>
]]></description><pubDate>Thu, 24 Oct 2024 00:23:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=41930637</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41930637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41930637</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>This was a case of convergent evolution, both projects ended up working simultaneously on similar ideas.<p>One issue with using Arrow directly in NumPy is PyArrow exposes an immutable 1D array, while NumPy exposes a mutable ND array.<p>See also <a href="https://numpy.org/neps/nep-0055-string_dtype.html#related-work" rel="nofollow">https://numpy.org/neps/nep-0055-string_dtype.html#related-wo...</a></p>
]]></description><pubDate>Wed, 23 Oct 2024 20:41:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=41929095</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41929095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41929095</guid></item><item><title><![CDATA[New comment by ngoldbaum in "My NumPy year: Creating a DType for the next generation of scientific computing"]]></title><description><![CDATA[
<p>Well, there <i>was</i> no concept of sidecar storage. Now we have the hack we came up with for StringDType to store data on the DType instance and also make it so StringDType arrays don't share StringDType instances, unless the array is a view.<p>EDIT: looking back at the NEP, I'm not sure it does a great job explaining exactly how the per-array descriptor works. Ultimately it's powered by a hook in the DType API: <a href="https://github.com/numpy/numpy/pull/24988">https://github.com/numpy/numpy/pull/24988</a>. There is only one spot in NumPy where array buffers are allocated, so we hooked there and made sure any arrays with newly allocated buffers get a new DType instance.</p>
]]></description><pubDate>Wed, 23 Oct 2024 20:39:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=41929082</link><dc:creator>ngoldbaum</dc:creator><comments>https://news.ycombinator.com/item?id=41929082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41929082</guid></item></channel></rss>