<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: ChrisRackauckas</title><link>https://news.ycombinator.com/user?id=ChrisRackauckas</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Jul 2026 09:18:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ChrisRackauckas" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[GPT-5.6 vs. Claude Fable 5 for Physical AI, which performs best?]]></title><description><![CDATA[
<p>Article URL: <a href="https://juliahub.com/blog/frontier-models-physical-ai-evaluation">https://juliahub.com/blog/frontier-models-physical-ai-evaluation</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48990514">https://news.ycombinator.com/item?id=48990514</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 21 Jul 2026 10:42:26 +0000</pubDate><link>https://juliahub.com/blog/frontier-models-physical-ai-evaluation</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=48990514</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48990514</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Julia: Performance Tips"]]></title><description><![CDATA[
<p>Are you using Polyester.jl? Large numbers of threads are not optimized with Base threads usage due to GC interactions + the hierarchical threading adds overhead vs "unsafe" thread techniques which don't support the worksharing. Polyester is thus required to get very low overhead threading matching performance of non-worksharing scenarios.</p>
]]></description><pubDate>Fri, 27 Feb 2026 17:27:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47183038</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=47183038</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47183038</guid></item><item><title><![CDATA[Dyad 2.0: What Agentic AI Means for the Future of Computer Languages]]></title><description><![CDATA[
<p>Article URL: <a href="https://juliahub.com/blog/announcing-dyad-2.0">https://juliahub.com/blog/announcing-dyad-2.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46993229">https://news.ycombinator.com/item?id=46993229</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 12 Feb 2026 18:49:49 +0000</pubDate><link>https://juliahub.com/blog/announcing-dyad-2.0</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=46993229</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993229</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Julia 1.12 brings progress on standalone binaries and more"]]></title><description><![CDATA[
<p>The caveat to mention here is that this is with the standard IO interface. If you use Core.println instead of println you get something substantially smaller. A limitation of v1.12 is that the handling of IO is not that great, and this is something that IIUC is being addressed in the v1.13 updates.</p>
]]></description><pubDate>Tue, 18 Nov 2025 22:31:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=45973146</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45973146</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45973146</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "The state of SIMD in Rust in 2025"]]></title><description><![CDATA[
<p>No it only uses the same LLVM compiler passes and you enable certain optimizations locally via macros if you want to allow reordering in a given expression.</p>
]]></description><pubDate>Thu, 06 Nov 2025 00:06:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45829773</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45829773</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45829773</guid></item><item><title><![CDATA[Agentic AI for Model-Based Engineering: How Dyad Ensures Correctness]]></title><description><![CDATA[
<p>Article URL: <a href="https://juliahub.com/blog/agentic-ai-dyad">https://juliahub.com/blog/agentic-ai-dyad</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45601970">https://news.ycombinator.com/item?id=45601970</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 16 Oct 2025 06:11:52 +0000</pubDate><link>https://juliahub.com/blog/agentic-ai-dyad</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45601970</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45601970</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Julia 1.12 highlights"]]></title><description><![CDATA[
<p>v1.13 already has a good number of improvements to trim in the cases which are less analyzable, but even then I think the best thing for the package ecosystem is to start to become really good for trim, JETLS, etc. through statically checking things.</p>
]]></description><pubDate>Thu, 09 Oct 2025 07:29:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45524615</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45524615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45524615</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Julia 1.12 highlights"]]></title><description><![CDATA[
<p>We use it for binary deployments via building simulations into the FMI standard (i.e. building FMUs) <a href="https://fmi-standard.org/" rel="nofollow">https://fmi-standard.org/</a>. We still need to get libraries updated for getting the smallest possible trim when using the more computationally difficult implicit methods, but at least the stack is matured for simple methods like explicit RK and Rosenbrock-type solvers already. For folks interested in --trim on SciML, the PR to watch is <a href="https://github.com/SciML/NonlinearSolve.jl/pull/665" rel="nofollow">https://github.com/SciML/NonlinearSolve.jl/pull/665</a> which is currently held up by <a href="https://github.com/SciML/SciMLBase.jl/pull/1074" rel="nofollow">https://github.com/SciML/SciMLBase.jl/pull/1074</a> which is the last remaining nugget to get the vast majority of the SciML solver set trimming well. So hopefully very soon for anyone interested in this part of the world. Note that does not include inverse problems in the binary as part of small trim.<p>But all of this is more about maturing the ecosystem to be more amenable to static compilation and analysis. The whole SciML stack had an initiative starting at the beginning of this summer to add JET.jl testing for type inference everywhere and enforcing this to pass as part of standard unit tests, and using AllocCheck.jl for static allocation-free testing of inner solver loops. With this we have been growing the surface of tools that have static and real-time guarantees. Not done yet, some had to be marked as `@test_broken` for having some branch that can allocate if condition number hits a numerical fallback and such, but generally it's getting locked down. Think of it as "prototype in Julia, deploy in Rust", except instead of re-writing into Rust we're just locking down the behavior with incrementally enforcing the package internals to satisfy more and more static guarantees.</p>
]]></description><pubDate>Thu, 09 Oct 2025 07:26:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=45524599</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45524599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45524599</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Top Programming Languages 2025"]]></title><description><![CDATA[
<p>Julia v1.12, the unreleased version which is currently in release candidate stage (and has had a longer RC stage than expected but should be done at least by the end of the year) has the ability to fully ahead of time compile and generate binaries, like you would expect from a language like C. It also trims these binaries so that they are a reasonable size given the elements of the runtime that are used. Thus for good type-stable code you get callable binaries without JIT overhead, and this leads to a much better CLI experience. It will take a bit of time so that there's more package tooling and support built around this feature, but this is the path a lot of the ecosystem CLI tooling is now going and that will be a pretty dramatic shift in the usability for these kinds of use cases which Julia had traditionally ignored.</p>
]]></description><pubDate>Wed, 24 Sep 2025 20:14:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=45365443</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45365443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45365443</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Automatic differentiation can be incorrect"]]></title><description><![CDATA[
<p>This has nothing to do with floating point error accumulation or numerical stability in the floating point sense. You can do this with arbitrary sized floating point values and you will still get the same non-convergence result.</p>
]]></description><pubDate>Sun, 21 Sep 2025 01:24:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=45319189</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45319189</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45319189</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Automatic differentiation can be incorrect"]]></title><description><![CDATA[
<p>This tool already exists in Python and R. See <a href="https://cran.r-project.org/web/packages/diffeqr/index.html" rel="nofollow">https://cran.r-project.org/web/packages/diffeqr/index.html</a> and <a href="https://anaconda.org/conda-forge/diffeqpy" rel="nofollow">https://anaconda.org/conda-forge/diffeqpy</a>. Julia has language bindings that make it simple enough to bind to other high level languages that these projects are maintained by the core team and supports lots of the library, including forms of automatic differentiation and GPU kernel generation. See for example the bindings that allow for usage within PyTorch <a href="https://github.com/SciML/juliatorch" rel="nofollow">https://github.com/SciML/juliatorch</a> and the Python-based Collab notebooks showing the GPU usage <a href="https://colab.research.google.com/drive/1bnQMdNvg0AL-LyPcXBiH10jBij5QUmtY?usp=sharing" rel="nofollow">https://colab.research.google.com/drive/1bnQMdNvg0AL-LyPcXBi...</a>.<p>With Julia v1.12's small binary generation, we plan to release forms via binaries with C ABIs over the next year as well.<p>Are those sufficient or should we consider supporting other deployments?</p>
]]></description><pubDate>Sun, 21 Sep 2025 01:22:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=45319178</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45319178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45319178</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Automatic differentiation can be incorrect"]]></title><description><![CDATA[
<p>Interesting to see this here! This example is one of the ones mentioned in the appendix of <a href="https://arxiv.org/abs/2406.09699" rel="nofollow">https://arxiv.org/abs/2406.09699</a>, specifically "4.1.2.4 When AD is algorithmically correct but numerically wrong".<p>If people want a tl;dr, the main idea is you can construct an ODE where the forward pass is trivial, i.e. the ODE solution going forwards is exact, but its derivative is "hard". An easy way to do this is to make it so you have for example `x' = x - y, y' = y - x`, with initial conditions x(0)=y(0). If you start with things being the same value, then the solution to the ODE is constant since `x' = y' = 0`. But the derivative of the ODE solution with respect to its initial condition is very non-zero: a small change away from equality and boom the solution explodes. You write out the expression for dy(t)/dy(0) and what you get is a non-trivial ODE that has to be solved.<p>What happens in this case though is that automatic differentiation "runs the same code as the primal case". I.e., automatic differentiation has the property that it walks through your code and differentiates the steps of your code, and so the control flow always matches the control flow of the non-differentiated code, slapping the derivative parts on each step. But here the primal case is trivial, so the ODE solver goes "this is easy, let's make dt as big as possible and step through this easily". But this means that `dt` is not error controlled in the derivative (the derivative, being a non-trivial ODE, needs to have a smaller dt and take small steps in order to get an accurate answer), so the derivative then gets error due to this large dt (or small number of steps). Via this construction you can make automatic differentiation give as much error as you want just by tweaking the parameters around.<p>Thus by this construction, automatic differentiation has no bound to the error it can give, and no this isn't floating point errors this is strictly building a function that does not converge to the correct derivative. It just goes to show that automatic differentiation of a function that computes a nice error controlled answer does not necessarily give a derivative that also has any sense of error control, that is a property that has to be proved and is not true in general. This of course is a bit of a contrived example to show the point that the error is unbounded, but then it points to real issues that can show up in user code (in fact, this example was found because a user opened an issue with a related model).<p>Then one thing that's noted in here too is that the Julia differential equation solvers hook into the AD system to explicitly "not do forward-mode AD correctly", incorporating the derivative terms into the time stepping adaptivity calculation, so that it is error controlled. The property that you get is that for these solvers you get more steps to the ODE when running it in AD mode than outside of AD mode, and that is a requirement if you want to ensure that the user's tolerance is respected. But that's explicitly "not correct" in terms of what forward-mode AD is, so calling forward-mode AD on the solver doesn't quite do forward mode AD of the solver's code "correctly" in order to give a more precise solution. That of course is a choice, you could instead choose to follow standard AD rules in such a code. The trade-off is between accuracy and complexity.</p>
]]></description><pubDate>Thu, 18 Sep 2025 16:22:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=45291554</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45291554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45291554</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Implicit ODE solvers are not universally more robust than explicit ODE solvers"]]></title><description><![CDATA[
<p>B-S is just a (bad) explicit Runge-Kutta method. You can see this formally since if you take any order of the B-S method, you can write out its computation as a Runge-Kutta tableau. If you do this, you'll see it ends up being an explict RK method that has much higher f evaluations to achieve the leading truncation error coefficients and order that the leading RK methods get. For example, 9th order B-S  uses IIRC about 2-3 times as many f evaluations as Vern9, while Vern9 gets like 3 orders of magnitude less error (on average w.r.t. LTE measurements). If you're curious about details of optimizing RK methods, check out <a href="https://www.youtube.com/watch?v=s_t6dIKjUUc" rel="nofollow">https://www.youtube.com/watch?v=s_t6dIKjUUc</a>.<p>That isn't to say B-S methods aren't worth anything. The interesting thing is that they are a way to generate arbitrary order RK methods (even if no specific order is efficient, it gives a general scheme) and these RK methods have a lot of parallelism that can be exploited. We really worked through this a few years ago building parallelized implementations. The results are here: <a href="https://ieeexplore.ieee.org/abstract/document/9926357/" rel="nofollow">https://ieeexplore.ieee.org/abstract/document/9926357/</a> (free version <a href="https://arxiv.org/abs/2207.08135" rel="nofollow">https://arxiv.org/abs/2207.08135</a>) and are part of the DifferentialEquations.jl library. The results are a bit mixed though, which is why they aren't used as the defaults. For non-stiff equations, even with parallelism it's hard to ever get them to match the best explicit RK methods, they just aren't efficient enough.<p>For stiff equations, if you are in the regime where BLAS does not multithread yet (basically <256 ODEs, so 256x256 LU factorizations but this is BLAS/CPU-dependent), then you can use parallelization in the form of the implicit extrapolation methods in order to factorize different matrices at the same time. Because you're doing more work than something like an optimized Rosenbrock method, you don't get strictly better, but using this to get a high order method that exploits parallelism where other methods end up being serial, you can get a good 2x-4x if you tune the initial order and everything well. This is really nice because 4 ODEs - 200 ODEs, where this ends up being the fastest method for stiff ODEs that we know of right now according to the SciMLBenchmarks <a href="https://docs.sciml.ai/SciMLBenchmarksOutput/stable/" rel="nofollow">https://docs.sciml.ai/SciMLBenchmarksOutput/stable/</a>, and this ends up being a sweet spot where "most" user code online tends to be. However, since it does require tuning a bit to your system, setting threads properly, having your laptop plugged in, using more memory, and possibly upping the initial order manually, it's not the most user-friendly method. Therefore it doesn't make a great default since you're putting a lot more dependencies into the user's mind for a 2x-4x... but it's a great option to have for the person really trying to optimize. This also shows different directions that would be more fruitful and beat this algorithm pretty handedly though... but that research is in progress.</p>
]]></description><pubDate>Tue, 16 Sep 2025 18:11:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=45265730</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45265730</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45265730</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Implicit ODE solvers are not universally more robust than explicit ODE solvers"]]></title><description><![CDATA[
<p>The whole point of the article is that "methods are considered more robust and practical if they have larger stability regions" isn't (or at least shouldn't be) necessarily true :-/.</p>
]]></description><pubDate>Tue, 16 Sep 2025 18:00:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45265600</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45265600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45265600</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "Implicit ODE solvers are not universally more robust than explicit ODE solvers"]]></title><description><![CDATA[
<p>Yeah, that's a separate post <a href="https://scicomp.stackexchange.com/questions/29149/what-does-symplectic-mean-in-reference-to-numerical-integrators-and-does-scip" rel="nofollow">https://scicomp.stackexchange.com/questions/29149/what-does-...</a>. I wanted to keep this post as simple as possible. If you could show cases where explicit Runge-Kutta methods outperform (by some metrics) implicit Runge-Kutta methods, then it leads to a whole understanding of "what matters is what you're trying to measure". And then yes, symplectic integrators are for long time integrations (explicit RK methods will how lower error for shorter time, so its specifically longer time integrations on symplectic manifolds, though there are implicit RK methods which are symplectic but ... tradeoff tradeoff)</p>
]]></description><pubDate>Tue, 16 Sep 2025 17:58:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45265567</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45265567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45265567</guid></item><item><title><![CDATA[Why No Ode Solver Is Best]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.stochasticlifestyle.com/implicit-ode-solvers-are-not-universally-more-robust-than-explicit-ode-solvers-or-why-no-ode-solver-is-best/">https://www.stochasticlifestyle.com/implicit-ode-solvers-are-not-universally-more-robust-than-explicit-ode-solvers-or-why-no-ode-solver-is-best/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45124609">https://news.ycombinator.com/item?id=45124609</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 04 Sep 2025 07:34:14 +0000</pubDate><link>https://www.stochasticlifestyle.com/implicit-ode-solvers-are-not-universally-more-robust-than-explicit-ode-solvers-or-why-no-ode-solver-is-best/</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45124609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45124609</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "A guide to Gen AI / LLM vibecoding for expert programmers"]]></title><description><![CDATA[
<p>I mean this for simple devops tasks, like if you need it to write you a Bash script that will clean out some empty caches or something it will one shot it most of the time. And for figuring out standard tasks like setting up deploy keys for some new doc system or updating the make files to handle some new build dependency. I still have devops engineers for anything difficult, but they get pestered with a lot less things they would find trivial that the rest of the teams would have asked them for help on before.</p>
]]></description><pubDate>Sun, 24 Aug 2025 13:21:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45004076</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=45004076</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45004076</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "WebR – R in the Browser"]]></title><description><![CDATA[
<p>The part that made it much more feasible is that WASM's "new" GC ended up working nicely with Julia's GC, so WebAssemblyCompiler.jl was able to hook into it. With that, a lot more codes suddenly work because array allocations are fine. It means that in this state if someone took it seriously I think a pretty good version could be had in like 6 months, but it would take a real effort to make that something actually part of the "normal" maintained compiler stack.</p>
]]></description><pubDate>Sat, 23 Aug 2025 20:13:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44998764</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=44998764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44998764</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "WebR – R in the Browser"]]></title><description><![CDATA[
<p>Yeah the WebAssemblyCompiler.jl works on things that are StaticCompiler-able <a href="https://tshort.github.io/WebAssemblyCompiler.jl/stable/examples/lorenz/" rel="nofollow">https://tshort.github.io/WebAssemblyCompiler.jl/stable/examp...</a>, plus a little bit more since it supports the GC. It's not an "official" compiler and it has some things that mean it's on the "not really maintained list", but it shows it's not too difficult. You can also just retarget LLVM yourself to WASM (it's just a backend of LLVM) without too much difficulty if you're using a limited part of the Julia runtime. So... with a bit of effort a good chunk of the language could do this, we just haven't had much of the effort since most of it has been going towards AOT binary building.</p>
]]></description><pubDate>Sat, 23 Aug 2025 20:11:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44998754</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=44998754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44998754</guid></item><item><title><![CDATA[New comment by ChrisRackauckas in "A guide to Gen AI / LLM vibecoding for expert programmers"]]></title><description><![CDATA[
<p>I'm sure there's lots of slop being generated by this stuff, but at least for my work it's mostly solving the simple issues. Maybe it's the slop of "hey can you find out why my code isn't working?" and "closed issue 268 because it works on the latest versions, and we made your code into an MWE for the future". If you check any open source project that gets traction, there's tens of thousands of issues to handle. A good thousand of them are just "unit conversion would be good here", "this docstring is missing this option", etc. Those little PRs are the slop of Github that someone has to do, and I'd prefer not telling my interns to do that because otherwise they'd just quit. Good thing Claude doesn't quit, he's a good boy.</p>
]]></description><pubDate>Fri, 22 Aug 2025 22:11:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=44990474</link><dc:creator>ChrisRackauckas</dc:creator><comments>https://news.ycombinator.com/item?id=44990474</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44990474</guid></item></channel></rss>