# Dependency problem with FIllArrays

**URL:** <https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238>\
**Category:** General Usage\
**Tags:** pkg\
**Created:** [April 17, 2019, 12:34pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238 "2019-04-17T12:34:38Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 18, 2019, 6:13am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/21 "2019-04-18T06:13:48Z")

</div>

[https://github.com/JuliaLang/Pkg.jl/pull/1163](https://github.com/JuliaLang/Pkg.jl/pull/1163)

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [April 18, 2019, 9:34am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/22 "2019-04-18T09:34:49Z")

</div>

> [@dlfivefifty](#):
>
> But when it’s 0.x a package is experimental, and so practically _every_ version is “breaking” and often it’s breaking in a very small way where very few dependencies have to be changed.

Ok, so tag by just bumping by a patch then? The whole point of bumping a minor version in \< 1.0 is to indicate that it is breaking release and that packages that depend on it shouldn’t automatically use that version without checking if it is compatible with the breaking changes.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 10:28am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/23 "2019-04-18T10:28:37Z")

</div>

I tagged FillArrays.jl as v0.6 because `transpose`/`adjoint`/`vec` now return an immutable `Fill`. This is “breaking” because code that assumed these functions are mutable would be broken. But it is very unlikely that any code was actually broken.

Should this have been a patch then?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [April 18, 2019, 10:32am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/24 "2019-04-18T10:32:39Z")

</div>

> [@dlfivefifty](#):
>
> Should this have been a patch then?

It sounds like a breaking change so packages that depend on the package should thus not automatically be compatible with this version but instead verify that that they are either not affected by the breaking change, or update their package to be compatible with the new release. When that is done, they release a new version, adding compatibility with the breaking release of the dependency and thus `Pkg.update()` will not break anyone’s code. I don’t see any other way of doing it.

Assuming that breaking changes do not apply to you and then changing the registry in hindsight when you start getting bug reports about the package not working anymore seems like a much worse way of doing it. `Pkg.update()` is then very likely to just flat out break users previously working setup of packages.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 10:46am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/25 "2019-04-18T10:46:24Z")

</div>

But this has been and still is up to the package developer: we can still do `FillArrays = "≥ 0.5.0"` and automatically use new versions with breaking changes.

The issue is that users have said they want this behaviour by writing

```julia
FillArrays 0.5

```

in REQUIRE, which has been reinterpreted as `FillArrays 0.5 0.6` without the package developers input.

Worrying about users setup breaking is premature before a package is tagged as `1.x`. It seems like you are trying to reinvent `0.1.x` as the new `1.x`.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [April 18, 2019, 10:53am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/26 "2019-04-18T10:53:02Z")

</div>

> [@dlfivefifty](#):
>
> But this has been and still is up to the package developer: we can still do `FillArrays = "≥ 0.5.0"` and automatically use new versions with breaking changes.

Yes, you can but for now we have a correct start. Upper bounds was too annoying in the REQUIRE format for anyone to use it. Now it is the easiest to use. For the pain this have caused, start going through [Pull requests · JuliaLang/METADATA.jl · GitHub](https://github.com/JuliaLang/METADATA.jl/pulls?utf8=%E2%9C%93&q=is%3Apr+upper+bound+is%3Aclosed+). Accepting stuff like that is very much up to the maintainers of the registry.

> [@dlfivefifty](#):
>
> It seems like you are trying to reinvent `0.1.x` as the new `1.x` .

How Pkg interprets semver pre 1.0 is documented and is consistent with how Julia itself has been developed and how many other package managers do it (like Cargo).

---

<div class="post-metadata">

**Author:** ![piever](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/piever/32/1815_2.png) [@piever](https://discourse.julialang.org/u/piever)\
**Post date:** [April 18, 2019, 11:40am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/27 "2019-04-18T11:40:34Z")

</div>

This is just to make sure I understand (I don’t have a strong opinion either way but would like to understand what will happen). In a few packages I have put “relaxed” compatibility requirements (as a practical decision, I accepted that in 0.x versions there would be occasional breakage and planned to be stricter when packages get closer to 1.0 releases). Can I assume that versions were “strictified” according to semver in the registries and will stay strict until I tag a new release, in which case they will respect what I wrote in Project.toml?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [April 18, 2019, 11:54am UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/28 "2019-04-18T11:54:57Z")

</div>

> [@piever](#):
>
> Can I assume that versions were “strictified” according to semver in the registries and will stay strict until I tag a new release, in which case they will respect what I wrote in Project.toml?

As far as I know, that sounds correct.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 12:00pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/29 "2019-04-18T12:00:58Z")

</div>

Ok I get it: you are assuming most packages didn’t put upper bounds not intentionally but because it was too hard. Fair enough. I suppose this will sort itself out over time.

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 18, 2019, 12:17pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/30 "2019-04-18T12:17:38Z")

</div>

Can you clarify why you prefer adding bounds manually afterwards instead of having them be correct from the start? e.g. [https://github.com/JuliaLang/METADATA.jl/pull/19766](https://github.com/JuliaLang/METADATA.jl/pull/19766), [https://github.com/JuliaLang/METADATA.jl/pull/19308](https://github.com/JuliaLang/METADATA.jl/pull/19308), [https://github.com/JuliaLang/METADATA.jl/pull/19120](https://github.com/JuliaLang/METADATA.jl/pull/19120), [https://github.com/JuliaLang/METADATA.jl/pull/18841](https://github.com/JuliaLang/METADATA.jl/pull/18841), [https://github.com/JuliaLang/METADATA.jl/pull/15386](https://github.com/JuliaLang/METADATA.jl/pull/15386), [https://github.com/JuliaLang/METADATA.jl/pull/15210](https://github.com/JuliaLang/METADATA.jl/pull/15210), [https://github.com/JuliaLang/METADATA.jl/pull/13524](https://github.com/JuliaLang/METADATA.jl/pull/13524), [https://github.com/JuliaLang/METADATA.jl/pull/7584](https://github.com/JuliaLang/METADATA.jl/pull/7584) etc. From these it looks like the current behaviour is what you really want? But maybe I am missing something?

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 12:31pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/31 "2019-04-18T12:31:14Z")

</div>

Good point, perhaps I’ll start putting upper bounds in. Though it depends on the package: FillArrays.jl is unlikely to change much in between versions.

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 18, 2019, 12:34pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/32 "2019-04-18T12:34:39Z")

</div>

> [@dlfivefifty](#):
>
> Good point, perhaps I’ll start putting upper bounds in.

Upper bounds are “built-in” in the new system in the sense that the next breaking (as defined in the docs) is not allowed. Therefore, something

```julia
[compat]
Package = "0.1"

```

means compatibility with the 0.1-series of releases, but not 0.2 since that is considered breaking.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 12:40pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/33 "2019-04-18T12:40:13Z")

</div>

And “0.1.1” means “0.1.1 \<= VERSION \< 0.2”?

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [April 18, 2019, 12:41pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/34 "2019-04-18T12:41:05Z")

</div>

Yes, see [6. Compatibility · Pkg.jl](https://julialang.github.io/Pkg.jl/v1/compatibility/)

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 12:46pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/35 "2019-04-18T12:46:24Z")

</div>

By the way, if you want to encourage this behaviour, perhaps @StefanKarpinski’s gen\_project.jl script should be changed as well to not produce `≥ 0.x.y` by default?

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [April 18, 2019, 12:53pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/36 "2019-04-18T12:53:08Z")

</div>

The script conservatively translates your REQUIRE bounds as literally as possible. Otherwise I’m sure you can see that someone would be complaining that their package which previously installed just fine now won’t install because the generated compat section is much more restrictive than the REQUIRE file was.

It seems like some degree of human judgement about compat bounds is required here which is why I’m not very enthusiastic about automatic translation of the old bounds to the new ones—I think there’s a hard limit on how well it can be done completely automatically and package authors will need to start thinking about and understanding semantic versioning.

---

<div class="post-metadata">

**Author:** ![dlfivefifty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dlfivefifty/32/1959_2.png) [@dlfivefifty](https://discourse.julialang.org/u/dlfivefifty)\
**Post date:** [April 18, 2019, 12:55pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/37 "2019-04-18T12:55:50Z")

</div>

That argument also applies to the original translation that caused this thread…

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [April 18, 2019, 12:56pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/38 "2019-04-18T12:56:57Z")

</div>

Yes, I’m damned if I do and damned if I don’t, which is why I’m mostly ignoring complaints.

---

<div class="post-metadata">

**Author:** ![yakir12](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yakir12/32/297_2.png) [@yakir12](https://discourse.julialang.org/u/yakir12)\
**Post date:** [April 18, 2019, 1:08pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/39 "2019-04-18T13:08:20Z")

</div>

> [@StefanKarpinski](#):
>
> package authors will need to start thinking about and understanding semantic versioning.

Fair enough. Same goes for git knowledge. I see it as an opportunity to learn and improve in something I suck at.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [April 18, 2019, 1:08pm UTC](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238/40 "2019-04-18T13:08:24Z")

</div>

> [@StefanKarpinski](#):
>
> Yes, I’m damned if I do and damned if I don’t

Please don’t be disheartened by complaints. The discussions, coding, and conceptual design devoted to the new Pkg system by you and others is highly appreciated.

[Previous page](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238.md?page=1)

[Next page](https://discourse.julialang.org/t/dependency-problem-with-fillarrays/23238.md?page=3)
