Hello Verse Users!
In the 28.10 release of UEFN, we’re introducing Verse language versions, and deprecating some behavior that will change in a future version of the language. When your code uses deprecated behavior, it will still compile and work as it did before, but with a Verse compiler warning about the deprecated behavior.
As of 28.10, you can only target language version “0”. However, you might start to see some Verse warnings for code that uses deprecated behavior. While you do not need to immediately act on these warnings, we recommend that you do fix them, so that when we release a new language version, you will be ready to benefit from it. The idea is that if your project compiles without any warnings on an old language version, that you can upgrade it to the latest stable version of the language without anything breaking.
There are two classes of Verse code that we’re deprecating:
Failure of the right-hand subexpression of a ‘set e0 = e1’ expression.
This currently unwinds the failure to an outer failure context, but we would like to reserve this for situations where the left-hand subexpression’s fallibility can be mutated to unify e0 = e1. You can preserve the deprecated behavior by lifting the potential failure outside the set. e.g.:
set Map[Key] = FallibleCall[]
becomes:
Value := FallibleCall[]
set Map[Key] = Value
Failure of a key subexpression in a map literal expression.
This currently unwinds the failure to an outer failure context, but this is inconsistent with the meaning of => in other contexts, which is the notation for an anonymous function value. We would like to reserve failure in a key subexpression for interpretation by the map macro. You can preserve the deprecated behavior by lifting the potential failure outside the map macro. e.g.:
MyMap := map{FallibleCall[] => Value}
becomes:
Key := FallibleCall[]
MyMap := map{Key=>Value}
The Verse team will continue to make improvements to the Verse language that do not require updating to a new language version to benefit from. Only changes that require deprecating existing behavior will require upgrading to a new language version.
Best,
The Verse Team