I find it hard to develop in Julia

JETLS.jl is already a big step forward, even though it is still a work-in-progress.

And Flexible Julia might become an alternative for professional developers, because development is very fast, and bug reports and feature requests are often addressed within a few days.

5 Likes

Setting a topic timer — we prefer focused threads on specific topics, and this thread is just turning into a grab bag (documented vs undocumented APIs, allocation tracking, REPL tab completion, TTFX, debugging tools, … ?).

5 Likes

Why is precompilation time a problem? LangArena - Programming Languages Benchmark Comparison When you think of the overall workflow, precompilation time feels just as safe and sound as Rust and Cpp compile time. And the Revise experience is much better.

2 Likes

Wanted to write a long response, but I realize it’s just all the obvious things again. The main one for me is unit testing, we are a long way from the convenience of pytest and TDD in Julia is practically impossible due to precompilation (yes Revise.jl helps). Then there is the language server, which fortunately is much better now thanks to the development of JETLS. Then static type checking, fortunately there is now JET.jl which has helped me a lot. And lastly, I think we need some tooling to help make stacktraces more readable/actionable. You could make a separate topic about tooling because there is a lot to say…

2 Likes

No we didn’t, we just had a few threads 2-3 weeks ago complaining about precompilation that didn’t have any new insights since the last complaint, so people probably just didn’t have anything to add for now. Something interesting then that seemed to have gotten glossed over is a Pluto notebook appeared to be updating dependencies relative to its stored manifest and forcing repeated precompilation, which stood out to me as unusual and problematic.

That’s only partially a precompilation issue. Scripts and notebooks themselves don’t make package images from precompilation workloads, so part of the latency is just JIT compilation. I’ve taken to making a local ā€œpackageā€ just to cache a custom workload for a finished script, but that wouldn’t help any work in progress. I’m not sure how JIT compilation latency can be mitigated there; some code edits to a script or notebook invalidate methods, and recompiling them is the point.

If you mean that all compiled languages have to compile at some point, then there’s some truth to that. However, it’s far easier to distribute and reuse distinct AOT-compiled binaries with moderately different versions of dependencies, whereas we’re locally making very particular Julia environments where a dependency can only reasonably have 1 version because compilation is ongoing by design.

3 Likes

For specific tasks, there is a Small Development Grants system via NumFOCUS:

SciML also has their own listing:

While I think small development grants are nice to have, I also think that having companies that use Julia donate developer or non-developer time to address general community issues may be more sustainable over time than a gig-work approach. For example, for documentation, it may make sense to pay a professional technical writer.

In the agentic agent era, it may be especially helpful to make it clear what the outstanding tasks are, what the succcess criteria are, and how to contribute. Directly or indirectly a donation of agent tokens may be useful and able to handle some of the tasks.

1 Like

It is not clear to me that every stable release needs to have less or equal startup times and a less or equal memory footprint than the previous release. I do understand why that might be desirable.

To me the issue is communication. What are the goals of the next release? Is the goal to add new features or to optimize compile times and memory footprint. If I understand these goals, I might be able to make decisions for myself better about whether I care about the new features more than I care about optimized behavior. I can then make an informed decision whether to use the LTS release or not.

Addressing the issue of compile times itself, I think we may need to consider binary distribution for some packages and architectures. Could we precompile packages for common architectures and distribute those precompile caches? Can we build tools that would allow us to do this locally?

2 Likes

My opinion, as a simple programmer/coder/designer, is that ā€œinternalsā€ be not only disallowed, but completely removed from the Julia world.
I only started programming in 1977 commercially, and this entire thread makes my brain hurt. Further, I cannot recommend a language I have huge investment in yet still have yet to write more than 3 lines of code in the REPL, to anyone searching for better tools.
To be blunt.

what does that mean?

12 Likes

I believe that is part of what has been proposed for strict mode:

3 Likes

Sometimes it helps to rethink the boundaries.

A refactoring approach that has worked for me is to move that instability into a single shim layer:
– specify the exact behavior you rely on (via tests),
– isolate it behind a small interface,
– vendor/duplicate only the minimal internal logic needed there,
– and confine Julia-version adaptations to that boundary.

In similar situations, this reduced patch churn and clarified ownership of the contract.

14 Likes

This approach also has the benefit that it lets you potentially share the maintenance burden of the shim with other people who have similar problems to you.

3 Likes

This topic was automatically closed after 3 days. New replies are no longer allowed.