I find it hard to develop in Julia

I remain optimistic that the existence of Base.ispublic will slowly but surely improve the state of affairs. Prior to 1.11, it was really difficult (borderline impossible at times) to know if something was considered public or private.

9 Likes

I think the general rule was that anything exported or documented in the manual was public, and everything else was private?

The public keyword gave us a programmatic way of detecting whether a non-exported symbol is public. Unfortunately, it also helped turn up some cases of undocumented public/exported symbols: Missing docstrings for public/exported symbols ¡ Issue #52725 ¡ JuliaLang/julia ¡ GitHub

5 Likes

Why unfortunately? That’s good right?

It’s good that we found them—this is indeed a benefit of the public keyword—but it is unfortunate that the omissions existed in the first place.

(This is a “help wanted” issue, by the way: it should be relatively easy to contribute missing docstrings.)

2 Likes

But, at least anecdotally, it seems like many packages break after upgrading to a new Julia version. I am still on 1.11 since a bunch of my stuff broke on 1.12. Are packages really use that many undocumented functions? Or do the internals change significantly?

yes to the former, many packages use internals they “shouldn’t” all the time. for the latter in the case of 1.12 there were also quite significant internal changes to accommodate all the binding partition (const / struct redefinition) stuff.

another example of packages relying on things they shouldn’t that will almost certainly break things on 1.13 is that most hash values will change. even though the docs specifically have warnings to call this out as a possibility, in practice hash values have been very stable for a long time and some packages have come to rely on them.

For a longer time, my main hope has been that Tim Holy has stated improvements on Julia’s lowering mechanism could bring one or more order of magnitude improvements to the speed at which Julia can be interpreted.

Another possible solution is tiered compilation. No idea how much work it is (probably a lot…) but it would be really nice to have. Maybe it’d even be possible to have interpretation be the first tier if that’s faster than -O0 or whatever.

2 Likes