Version 0.17.0 has been released on 2021-12-10, 4 months after 0.16.0, bringing new features and bugfixes.
As usual, prebuilt binaries are offered for most common platforms.
Breaking changes
-
Attempting to assign to a read-only variable (e.g.
set nil = x) is now a compile-time error rather than an exception.
Deprecated features
Deprecated features will be removed in 0.18.0.
The following deprecated features trigger a warning whenever the code is parsed or compiled, even if it is not executed:
-
The
dir-historycommand is deprecated. Usestore:dirsinstead. -
The legacy assignment form is deprecated. Depending on whether the left-hand variable already exists or not, use
varorsetinstead. Use the upgrader to migrate scripts. -
The lambda syntax that declares arguments and options within
[]before{has been deprecated. The new syntax now declares arguments and options within a pair of|, after{. Use the upgrader to migrate scripts. See (#664). -
Use of the special namespace
local:is deprecated.-
If you are using
local:to reference variables (e.g.echo $local:x),local:is never necessary in the first place since Elvish always resolves local variables first, so just remove it. -
If you are using
local:when assigning variables (e.g.local:x = foo),local:makes sure that a new variable is created; use thevarspecial command instead.
-
-
Use of the special namespace
up:is deprecated.-
If you are using
up:to access a non-shadowed variable in an outer scope,up:is not necessary; just remove it. -
If you are using
up:to access a shadowed variable in an outer scope, rename the variables to have different names.
-
-
Use of a leading empty namespace in a variable name (e.g.
$:x) is deprecated. Since$:xis always equivalent to$xanyway, just remove the:prefix.
Notable new features
New features in the language:
-
A new special command
pragma. The only supported pragma now isunknown command; usingpragma unknown command = disallowturns off the default behavior of treating unknown commands as external commands. -
A new special command
coalesce.
New features in the interactive editor:
-
Editor modes now form a stack, instead of being mutually exclusive. For example, it is now possible to start a minibuf mode within a completion mode, and vice versa.
New features in the standard library:
-
The
store:module now exposes all functionalities of Elvish’s persistent store. -
New
comparecommand to compare numbers, strings, and lists (#1347), in a consistent way as theorderbuiltin. -
The
rangecommand now supports counting down.
Performance improvements:
-
The overhead of executing pipelines consisting of a single form (i.e. a simple command with no pipes) has been reduced. A code chunk containing just
nopcommand now executes 4 times as fast as before. Thanks to kolbycrouch for suggesting this optimization!