Julia Community 🟣

The 800-pound Gorilla in the room

Charles Brauer on July 05, 2023

Hey guys, I’m going to turn a flame-thrower on. You guys may not like what I have to say. I’m writing this post because of a message that I just...
Collapse
 
wonner profile image
Joe

Well, there is another old saying, "horses for courses".

Julia is a mathematical language through and through. It was never designed to be a replacement for Swift, DotNet, QT, etc.

And if you like Julia but don't see something you like, why not build it yourself. Put all that experience to something good for the community?

Collapse
 
sschmidhuber profile image
Stefan Schmidhuber • Edited

In my opinion / experience Julia is not great for building GUI desktop applications however it is doable and might become better in future. I created a small one a few months back. I would suggest to use: Electron.jl or Gtk4.jl (if you don't want to use any JavaScript in the UI).

The major issue is that PackageCompiler is not working at all or producing gigantic binaries (> 1GB) for very simple applications with a small GUI.

So to run it on a client machine I would just write a setup script to install Julia and create a sysimage to get the startup time in an acceptable range.

However, if there will be good and reliable AOT compilation in future, Electron.jl and Gtk4.jl seem to be good solutions, to me.

Collapse
 
the_duke profile image
duke-of-spacingham

What about these GUI packages?
juliapackages.com/c/gui
One of them should give a decent alternative.

Considering these, the case sounds more like the decades-old issue of open source maintenance stability rather than Julia community's focus on GUI. According to the answer you got on the issue, the stability was lost since a team in Microsoft (Where Ran Gal works) deserted the project. If that will make you go back to Microsoft platform, it's just a bonus for them.

So I think Dash.jl has the best advice on this in their Github page: "Interested in getting involved with the project? Sponsorship is a great way to accelerate the progress of open source projects like this one;" 😉 Money is a stabilizer.

Collapse
 
petrkryslucsd profile image
Petr Krysl

No matter what you do, a GUI toolkit will not be Julia all the way down. Glimmer.jl was mostly JS, I believe...

Collapse
 
bambooxx profile image
BambOoxX

For sure, I'm more regreting the absence of a package for interop with .NET rather than a full julia capability to do this.

Collapse
 
palli profile image
Páll Haraldsson • Edited

There are many packages available for Julia to .NET integration, one for calling from Julia, and this one to call from .NET to Julia (previously allowed both ways), which seems appropriate for a GUI:
github.com/HyperSphereStudio/JdotNET

Since it's a .NET package, and C# the main language (F# etc I believe also supported) you should be able to use any C# code, and any C# GUI toolkits (and GUI designers for), native for Windows and/or cross-platform. The GUI parts, and C#, should be as smooth as anything available for C# at least (if not for any other language). I've not used any of the .NET integration packages for Julia (nor for Java, JavaCall.jl in not in-process; what I would like and I think that package provides, same as e.g. PythonCall.jl). .NET, and C# are now cross-platform, available for Ubuntu and macOS too. If the GUI stuff isn't good there then it's because of the .NET and/or GUI toolkit, not Julia.

You might think either C# (or any .NET language) needs to be the language you start, for a GUI, and the only other option starting with Julia calling .NET, but there's also a third option a fork of Julia for .NET:

github.com/HyperSphereStudio/Spinor

I see also a demo GUI:
github.com/PiResearchTech/Ayudha

Avalonia + Julia interface for cross platform Windows GUI

Currently Support
Windows
Ubuntu/Unix (need to update some predefined Commands)

Note also my first comment here on Mousetrap.jl in case native Julia better, based on GTK4. GTK4.jl is also available but claimed not as easy to use GTK4 directly, well through that. Qt.jl/QML.jl is another option, and using a game engine, i.e. Godot seems very intriguing (I just discovered it; i.e. using it for a GUI in this thread, not yet with Julia though). Makie.jl has been used for a game, a Minecraft clone, so also similarly an option for a GUI, though likely not yet well-developed for such use... Mousetrap seems very good already, and with Makie would be even better (which has been proposed). And web "GUI" options are already a possibility Genie.jl and related (and Dash.jl), even no-code UI designer most recent option, GenieBuilder.

Thread Thread
 
bambooxx profile image
BambOoxX

Yes, I know of these examples, they actually have been mentioned already in the thread I linked from the julia discourse. I do not say there are no interop examples. I just mean that for .NET there is no consolidated package such as PythonCall or CxxWrap which would facilitate adoption.

Thread Thread
 
palli profile image
Páll Haraldsson

You did state (and "regret") "the absence of a package for interop with .NET", and if you misspoke or found out later doesn't matter. I thought you didn't know and wanted to help you and others. I don't know which package for this is best yet (may depend on calling direction, I think I found best for either). I may find out (for sure) when I care. With .NET might be best or not for GUIs, but I'm not yet convinced .NET with or without Julia is best for that (it's plausible), I would like to know if some of the other Julia options are already very good or better. There was also a new QML.jl just recently announced (after I answered you), so not just Mousetrap.jl is new.

Thread Thread
 
bambooxx profile image
BambOoxX

Ha yes my bad, apologies for the "absence", that was a bit much indeed. I have no argument about the quality of .NET for GUIs, pro or con. But .NET is quite widespread and having a streamlined way to make julia and .NET work together would just be great. Who knows, maybe Microsoft will put some people on that !

Collapse
 
palli profile image
Páll Haraldsson • Edited

I signed up to answer this. You might not not know of the recently announced:

discourse.julialang.org/t/a-new-ju...

  • Choose from 40+ pre-made Widgets, or create your own widgets from scratch [..]

Background
So far, when wanting to create a GUI for Julia, options were limited to wrappers around frameworks in other language, or web-based front-ends. Mousetrap aims to bring Julia users a native, fully featured, well-documented GUI engine that contains everything one would need to create a proper desktop App. [..]
Julia packages sometimes have a problem with lacking documentation. Intending to lead by example [..]
While already fully featured, mousetrap just released, so some bugs or instability may be expected. [..] mousetrap will be stable and flawless, allowing Julia to become well suited for front-end development.

Mousetrap based on GTK4 (but simplifying, claimed better than GTK.jl) may be better than the alternative Qt/QML. I see it used, be a very intriguing project (seemingly from Julia QML/Qt is simpler, than from its native C++, just GUI/MVC difficult, and the concept would be for any beginner):

forem.julialang.org/janiserdmanis/...

Crafting a bridge between Julia and QML was challenging, but I ultimately succeeded when I understood the model-view-controller paradigm. I didn't have to touch a single C++ file or compile anything since QML.jl and Yggdrasi provided everything out of the box.

If web-based "GUI" is an option (some seem to prefer to traditional desktop GUIs, for good reasons or out of ignorance...?), then Julia is also covered, with e.g. Genie.jl (or Dash.jl, or Oxygen.jl), the first two projects at least with company support, and Stipple.jl and the no-code UI GenieBuilder designer.

Collapse
 
shalokshalom profile image
ShalokShalom

So first, Smalltalk did invent and revolutionize the GUI, both Microsoft and Apple copied that from Xerox Parc. en.wikipedia.org/wiki/Xerox_Alto

Secondly, one of the core reasons why I am interested into Julia, is because it has bindings to QML.

And not only that, but well documented, and actually maintained ones as such.
This is truly unique, since Qt/C++ frameworks are notoriously known for being hard to develop bindings for.

The way that Julia is structured, allows for relative ease, when it comes to calling other languages.

QML has a (well hidden) UI designer, that allows you to design the UI via drag and drop.

Image description

The only possible way, to increase the UI capabilities of Julia in a significant way, that I can see, is to create bindings to Godot.

medium.com/swlh/what-makes-godot-e...

Collapse
 
bambooxx profile image
BambOoxX

Hmm I know that problem too... I've been needing a .NET - julia interface since my very first days of julia, and we had a lot of discussions about this on the discourse (see e.g. discourse.julialang.org/t/correct-...).
So far there does not seem to be any streamlined way to interact, but damn that would be nice to have both julia flexibility and .NET interface robustness !

Collapse
 
youainti profile image
William King

I know this isn't how much Windows software works but a common (but imperfect) approach used in the Linux world is to shell out for analyses etc. Doesn't work with every workflow but it does "function".

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
Sloan, the sloth mascot
Comment deleted