As i am quite interested in having julia create binaries, and I have been snippets here and there about the juliac development I wanted to ask where exactly (on which branch, or github) juliac is developed such that i could sneak a peak in.
I have not been able to find it thus far, maybe I am also searching for the wrong keywords.
Hi,
Others can add more information, but as far as I know, the term juliac appeared in this pr:
Then there was this pr:
which got merged as a different take on 51417
I think the better reference is separate `julia-compile` from `julia` · Issue #15864 · JuliaLang/julia · GitHub. But the thing is… juliac
isn’t really “one” feature. It’s a snowballing of core compiler features and behaviors (and performance). It’s stripping the IR and metadata. It’s improving the static compile-ability of Base and the stdlibs. It’s figuring out what’s needed for that and improving tooling for figuring out what’s not static.
I consider interesting that a word named a couple of times deep down into PR discussions is generating so much interest and questions in this forum…
I like that it sounds like ENIAC.
I think the recent wave of juliac
discussion where triggered by overinterpreting the last sentence of this post
Edit: This preview looks very odd if you don’t expand it
For convenience, the sentence was:
thats very intersting, I will admit that i only skim the discourse once or twice a month. The Juliac name just caught my eyes and I thought that it was something specific. Thank you for enlightening me more on this subject.
this is what prompted me to be interested as such you are correct.
just reminding:
I prepared a brief documentation for those who want to become more familiar with the juliac
stuff.
Interesting, I had assumed that the hello world executable mentioned in the Github issue was relatively large because it was standalone, but you showed it uses a dozen or so shared libraries. “Hello world” executables do tend to be larger when standalone, but the size varies a lot whether or not shared libraries are used. Hopefully the upcoming documentation explains what users can expect to be in the executable.
" I prepared a brief documentation for those who want to become more familiar with the juliac
stuff.
A brief step-by-step introduction to juliac "
Is this thing production ready? Can I build a text-only tic-tac-toe game using it?
Definitely not. It will come with Julia 1.12 which might be released in a year or so (wild guess).
It’s not production ready, but you totally could build a text-only tic-tac-toe game using it. The only tricky part likely would be that you need to use Core.stdout
to write and I’m not actually sure if we have a Juliac compatible way to read from stdin
. (I know this sounds crazy but for annoying reasons, julia’s stdin and stdout aren’t type stable because they are remappable).
The combination of the Juliaup installer and jbytecode’s write up made this fairly straightforward to test. After getting the hello world example working, I jumped in feet first and decided to try a heavy linear algebra example we ultimately would like to have as an exe. The biggest hurdle was fixing some of the dynamic dispatch issues. In my example I needed to call the eigen function. That didn’t work at first, but realizing I should convert the matrix into a Symmetric
matrix worked. My exe was 1.2MB. Runtime was 0.08 seconds.
Very nice!
" The combination of the Juliaup installer and jbytecode’s write up made this fairly straightforward to test. After getting the hello world example working, I jumped in feet first and decided to try a heavy linear algebra example we ultimately would like to have as an exe. The biggest hurdle was fixing some of the dynamic dispatch issues. In my example I needed to call the eigen function. That didn’t work at first, but realizing I should convert the matrix into a Symmetric
matrix worked. My exe was 1.2MB. Runtime was 0.08 seconds.
Very nice!"
Have you tried copying only the exe file to another machine and test if it would run?
What about copying the file to another machine that NEVER had Julia installed?
I don’t have a second computer to test on but I’m sure your second scenario is not supported yet. See the section in jbytecode’s write up about the linked libraries.
Very exciting, indeed! Is the error you had because the eigen
function dispatches on different specialised methods at runtime depending on the matrix structure? How easy was it to discover the solution?
Probably you can. I built a code formatter compatible with it.
You can use Runic.jl/src/main.jl at 78ee7fbe2691c7e7ea05c92d286dc643f83e3f4b · fredrikekre/Runic.jl · GitHub + Runic.jl/src/juliac.jl at 78ee7fbe2691c7e7ea05c92d286dc643f83e3f4b · fredrikekre/Runic.jl · GitHub + Runic.jl/src/juliac.jl at 78ee7fbe2691c7e7ea05c92d286dc643f83e3f4b · fredrikekre/Runic.jl · GitHub.
I’ve seen in your juliac PR that you needed to change some occurrences of all
or map
to more verbose, explicit code in order to “help inference”. Do you know why juliac struggles with those higher order functions even if they’re type-stable?