# DifferentialEquations.jl v4.0.0 Incoming Breaking Changes

**URL:** <https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587>\
**Category:** Community\
**Tags:** diffeq\
**Created:** [January 25, 2018, 3:23am UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587 "2018-01-25T03:23:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 25, 2018, 3:23am UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/1 "2018-01-25T03:23:20Z")

</div>

The v4.0.0 release blog post lists all of the breaking changes. We are now no longer the only largely used package that breaks Julia’s “mutation first” convention! Also, parameters are always explicit. That and now the API is consistent across the domains. While this is a very rough change to handle, we hope everyone will appreciate it in the long run.

[http://juliadiffeq.org/2018/01/24/Parameters.html](http://juliadiffeq.org/2018/01/24/Parameters.html)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [January 25, 2018, 3:38pm UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/2 "2018-01-25T15:38:05Z")

</div>

Why did you decide to break with the Julia convention of `f!` for mutating functions? At least it seems like you did from the description of the breaking changes…

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [January 25, 2018, 4:06pm UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/3 "2018-01-25T16:06:02Z")

</div>

I think you missunderstod. Now they will respect this convention.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 25, 2018, 4:12pm UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/4 "2018-01-25T16:12:40Z")

</div>

> [@PetrKryslUCSD](#):
>
> Why did you decide to break with the Julia convention of f! for mutating functions? At least it seems like you did from the description of the breaking changes…

No, mutation is in the front. That’s the Julia convention.

Do you mean the function name? You can name a function however you want. The way the function is called internally has no bearing on how the user names things. In fact, I would expect most users to (continue) to name there function with `!`. On the other hand, changing argument ordering is a massively breaking (un-deprecatable) change, and all users have to follow our API for the argument order. This change is all that’s required to allow users to name their functions with a `!` and fully follow the convention.

This kind of naming choice though is purely a documentation thing and requires no deprecation or code renaming. So we probably do want to go back here:

[http://docs.juliadiffeq.org/latest/tutorials/ode\_example.html#Example-2:-Solving-Systems-of-Equations-1](http://docs.juliadiffeq.org/latest/tutorials/ode_example.html#Example-2:-Solving-Systems-of-Equations-1)

and change the naming of that function to `lorenz!`, but that has no bearing on actual usage. And going around and adding some `!` to the docs wouldn’t require anyone to update or error, so making the documentation clearer and more concise can be an on-going project.

One other thing to note is that we have a single type for the integrators and so we have to choose a single `integrator.f` name, and it just makes more sense to do that with the `!` since we support both cases and naming with `!` can have parsing issues (example: keyword arguments). But with `.`-overloading, we can definitely alias `integrator.f!` to mean the same thing as `integrator.f` so the user can choose this more appropriate naming when necessary.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [January 25, 2018, 4:13pm UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/5 "2018-01-25T16:13:35Z")

</div>

Clarification: I mean to attach the bang to the name of the mutating function name.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 27, 2018, 6:29am UTC](https://discourse.julialang.org/t/differentialequations-jl-v4-0-0-incoming-breaking-changes/8587/6 "2018-01-27T06:29:17Z")

</div>

The changes are now live. When you update, you will get the version with the new syntax.
