# Does Julia Create a "1.5" Language Problem?

**URL:** <https://discourse.julialang.org/t/does-julia-create-a-1-5-language-problem/107984>\
**Category:** Teaching & Outreach\
**Tags:** question, discussion\
**Created:** [December 23, 2023, 6:44pm UTC](https://discourse.julialang.org/t/does-julia-create-a-1-5-language-problem/107984 "2023-12-23T18:44:23Z")\
**Posts on this page:** 1\
**Showing post:** 104

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [December 29, 2023, 1:52pm UTC](https://discourse.julialang.org/t/does-julia-create-a-1-5-language-problem/107984/104 "2023-12-29T13:52:52Z")

</div>

> [@Benny](#):
>
> What implementation are you talking about here? The reference implementation CPython has no JIT.

There’s actually a PR from 4 days ago to add a JIT compiler to CPython:

> <https://github.com/python/cpython/pull/113465>
>
> 'Twas the night before Christmas, when all through the code
> Not a core dev was …merging, not even Guido;
> The CI was spun on the PRs with care
> In hopes that green check-markings soon would be there;
> The buildbots were nestled all snug under desks,
> Even PPC64 AIX;
> Doc-writers, triage team, the Council of Steering,
> Had just stashed every change and stopped engineering,
> 
> When in the "PRs" tab arose such a clatter,
> They opened GitHub to see what was the matter.
> Away to CPython they flew like a flash,
> Towards sounds of \`PROT\_EXEC\` and \`\_\_builtin\_\_\_clear\_cache\`.
> First \[LLVM was downloaded, unzipped\](https://github.com/brandtbucher/cpython/blob/justin/Tools/jit/README.md)
> Then the Actions were running \[a strange new build script\](https://github.com/brandtbucher/cpython/blob/justin/Tools/jit/build.py),
> When something appeared, they were stopped in their tracks,
> \[\`jit\_stencils.h\`\](https://gist.github.com/brandtbucher/d6397b1d106c55164b32df27d53eb7b8), generated from \[hacks\](https://github.com/brandtbucher/cpython/blob/justin/Tools/jit/template.c),
> With their spines all a-shiver, they muttered "Oh, shit...",
> They knew in a moment it must be a JIT.
> 
> More rapid than interpretation it came
> And it copied-and-patched every stencil by name:
> "Now, \`\_LOAD\_FAST\`! Now, \`\_STORE\_FAST\`! \`\_BINARY\_OP\_ADD\_INT\`!
> On, \`\_GUARD\_DORV\_VALUES\_INST\_ATTR\_FROM\_DICT\`!
> To the top of the loop! And down into the call!
> Now cache away! Cache away! Cache away all!"
> But why now? And how so? They needed a hint,
> Thankfully, Brandt gave a great talk at the sprint;
> So over to \[YouTube\](https://youtu.be/HxSHIpEQRjs) the reviewers flew,
> They read \[the white paper\](https://dl.acm.org/doi/10.1145/3485513), and \[the blog post\](https://sillycross.github.io/2023/05/12/2023-05-12) too.
> 
> And then, after watching, they saw its appeal
> Not writing the code themselves seemed so unreal.
> And the platform support was almost too easy,
> ARM64 Macs to 32-bit PCs.
> There was \[some runtime C\](https://github.com/brandtbucher/cpython/blob/justin/Python/jit.c), not too much, just enough,
> Basically a loader, relocating stuff;
> It ran every test, one by one passed them all,
> With not one runtime dependency to install.
> Mostly build-time Python! With strict static typing!
> For maintenance ease, and also nerd-sniping!
> 
> Though dispatch was faster, the JIT wasn't wise,
> And the traces it used still should be optimized;
> The code it was JIT'ing still needed some thinning,
> With code models small, and some register pinning;
> Or \[new calling conventions\](https://discourse.llvm.org/t/rfc-exposing-ghccc-calling-convention-as-preserve-none-to-clang/74233), shared stubs for paths slow,
> Since this JIT was brand new, there was fruit hanging low.
> It was awkwardly large, parsed straight out of the ELFs,
> And they laughed when they saw it, in spite of themselves;
> 
> A \`configure\` flag, and no merging this year,
> Soon gave them to know they had nothing to fear;
> It wasn't much faster, at least it could work,
> They knew that'd come later; no one was a jerk,
> But they were still smart, and determined, and skilled,
> They opened a shell, and configured the build;
> \`--enable-experimental-jit\`, then made it,
> And away the JIT flew as their "+1"s okay'ed it.
> But they heard it exclaim, as it traced out of sight,
> "Happy JIT-mas to all, and to all a good night!"
> 
> 
> \* Issue: gh-113464

See also [JIT Compiler for CPython](https://discourse.julialang.org/t/jit-compiler-for-cpython/108055)

---

_[View the full topic](https://discourse.julialang.org/t/does-julia-create-a-1-5-language-problem/107984)._
