Releases: dfinity/motoko
0.13.3
-
motoko (
moc
)- typing: suggest conversions between primitive types from imported libraries
and, with--ai-errors
, all available package libraries (#4747).
- typing: suggest conversions between primitive types from imported libraries
-
motoko-base
- Add modules
OrderedMap
andOrderedSet
to replaceRBTree
with improved functionality, performance
and ergonomics avoiding the need for preupgrade hooks (thanks to Serokell) (#662).
- Add modules
0.13.2
0.13.1
-
motoko (
moc
)-
Improved error messages for unbound identifiers and fields that avoid reporting large types and use an edit-distance based metric to suggest alternatives (#4720).
-
Flag
--ai-errors
to tailor error messages to AI clients (#4720). -
Compilation units containing leading type definitions are now rejected with an improved error message (#4714).
-
bugfix:
floatToInt64
now behaves correctly in the interpreter too (#4712).
-
0.13.0
-
motoko (
moc
)-
Added a new primitive
cyclesBurn : <system> Nat -> Nat
for burning the canister's cycles
programmatically (#4690). -
For beta testing: Support enhanced orthogonal persistence, enabled with new
moc
flag--enhanced-orthogonal-persistence
(#4193).This implements scalable and efficient orthogonal persistence (stable variables) for Motoko:
- The Wasm main memory (heap) is retained on upgrade with new program versions directly picking up this state.
- The Wasm main memory has been extended to 64-bit to scale as large as stable memory in the future.
- The runtime system checks that data changes of new program versions are compatible with the old state.
Implications:
- Upgrades become extremely fast, only depending on the number of types, not on the number of heap objects.
- Upgrades will no longer hit the IC instruction limit, even for maximum heap usage.
- The change to 64-bit increases the memory demand on the heap, in worst case by a factor of two.
- For step-wise release handling, the IC initially only offers a limited capacity of the 64-bit space (e.g. 4GB or 6GB), that will be gradually increased in future to the capacity of stable memory.
- There is moderate performance regression of around 10% for normal execution due to combined related features (precise tagging, change to incremental GC, and handling of compile-time-known data).
- The garbage collector is fixed to incremental GC and cannot be chosen.
Float.format(#hex prec, x)
is no longer supported (expected to be very rarely used in practice).- The debug print format of
NaN
changes (originallynan
).
To activate enhanced orthogonal persistence under
dfx
, the following command-line argument needs to be specified indfx.json
:... "type" : "motoko" ... "args" : "--enhanced-orthogonal-persistence" ...
BREAKING CHANGE (Minor): changes some aspects of
Float
formatting.For more information, see:
- The Motoko design documentation
design/OrthogonalPersistence.md
- The Motoko user documentation
doc/md/canister-maintenance/upgrades.md
.
-
Candid decoding: impose an upper limit on the number of values decoded or skipped in a single candid payload,
as a linear function,max_values
, of binary payload size.max_values(blob) = (blob.size() * numerator)/denominator + bias
The current default settings are
{numerator = 1; denominator = 1; bias = 1024 }
, allowing a maximum
of 1024 values plus one additional value per byte in the payload.While hopefully not required, the constant factors can be read/modified using system functions:
- Prim.setCandidLimits:
<system>{numerator : Nat32; denominator : Nat32; bias : Nat32 } -> ()
- Prim.getCandidLimits:
<system>() -> {numerator : Nat32; denominator : Nat32; bias : Nat32 }
- Prim.setCandidLimits:
-
0.12.1
-
motoko (
moc
)-
Added a new command-line flag
--print-source-on-error
to print source code context on error (#4650). -
debugging:
__motoko_runtime_information()
as privileged query for runtime statistics (#4635).Exposing a privileged system-level query function
__motoko_runtime_information()
that reports the current runtime statistics of the canister, such as the heap size,
the total number of allocated objects, the total amount of reclaimed memory and more.
This is useful because several statistics of the reported information cannot be
inspected on the IC replica dashboard as they are internal to the Motoko runtime system.
This query is only authorized to the canister controllers and self-calls of the canister.__motoko_runtime_information : () -> { compilerVersion : Text; rtsVersion : Text; garbageCollector : Text; sanityChecks : Nat; memorySize : Nat; heapSize : Nat; totalAllocation : Nat; reclaimed : Nat; maxLiveSize : Nat; stableMemorySize : Nat; logicalStableMemorySize : Nat; maxStackSize : Nat; callbackTableCount : Nat; callbackTableSize : Nat; }
-
-
motoko-base
- Added
Iter.concat
function (thanks to AndyGura) (dfinity/motoko-base#650).
- Added
0.12.0
-
motoko (
moc
)-
feat:
finally
clauses fortry
expressions (#4507).A trailing
finally
clause totry
/catch
expressions facilitates structured
resource deallocation (e.g. acquired locks, etc.) and similar cleanups in the
presence of control-flow expressions (return
,break
,continue
,throw
).
Additionally, in presence offinally
thecatch
clause becomes optional and
and any uncaught error from thetry
block will be propagated, after executing thefinally
block.Note:
finally
-expressions that are in scope will be executed even if an execution
path following anawait
-expression traps. This feature, formerly not available in Motoko,
allows programmers to implement cleanups even in the presence of traps. For trapping
execution paths prior to anyawait
, the replica-provided state roll-back mechanism
ensures that no cleanup is required.The relevant security best practices are accessible at
https://internetcomputer.org/docs/current/developer-docs/security/security-best-practices/inter-canister-calls#recommendationBREAKING CHANGE (Minor):
finally
is now a reserved keyword,
programs using this identifier will break. -
bugfix:
mo-doc
will now generate correct entries forpublic
variables (#4626).
-
0.11.3
0.11.2
-
motoko (
moc
)-
deprecation: Deprecate the use of base library's
ExperimentalStableMemory
(ESM) (#4573).
Newmoc
flag--experimental-stable-memory <n>
controls the level of deprecation:- n < 0: error on use of stable memory primitives.
- n = 0: warn on use of stable memory primitives.
- n > 1: warning-less use of stable memory primitives (for legacy applications).
Users of ESM should consider migrating their code to use isolated regions (libraryRegion.mo
) instead.
-
bugfix: Fix the detection of unused declarations in
switch
andcatch
alternatives (#4560). -
improvement: Only warn on unused identifiers if type checking is error-free (#4561).
-
0.11.1
-
motoko (
moc
)-
feat: Custom error message for unused, punned field bindings (#4454).
-
feat: Don't report top-level identifiers as unused (#4452).
-
bugfix: Declaring
<system, ...>
capability on a class enables system capabilities in its body (#4449). -
bugfix: Fix crash compiling actor reference containing an
await
(#4418, #4450). -
bugfix: Fix crash when compiling with flag
--experimental-rtti
(#4434).
-
0.11.0
-
motoko (
moc
)-
Warn on detection of unused identifiers (code
M0194
) (#4377).- By design, warnings are not emitted for code imported from a package.
- A warning can be suppressed by replacing the identifier entirely by a wildcard
_
,
or by prefixing it with an_
, e.g. replacex
by_x
.
Limitations: recursive and mutually recursive definitions are considered used,
even if never referenced outside the recursive definition. -
Remove
__get_candid_interface_tmp_hack
endpoint. Candid interface is already stored as canister metadata, this temporary endpoint is redundant, thus removed. (#4386) -
Improved capability system, introducing a synchronous (
system
) capability (#4406).actor
initialisation body,pre
/postupgrade
hooks,async
function bodies (and
blocks) possess this capability. Functions (and classes) can demand it by prependingsystem
to the type argument list. The capability can be forwarded in calls by mentioning<system, …>
in the instantiation parameter list.BREAKING CHANGE (Minor): A few built-in functions have been marked with demand
for thesystem
capability. In order to call these, the full call hierarchy needs to be
adapted to pass thesystem
capability. -
Introduced the feature for precise tagging of scalar values (#4369).
Controlled by flag
--experimental-rtti
(off by default). Minor performance changes for
arithmetic expected. We advise to only turn on the feature for testing, as currently no
productive upsides exist (though future improvements will depend on it), and performance
of arithmetic will degrade somewhat. See the PR for the whole picture.
-
-
motoko-base
- Added
Option.equal
function (thanks to ByronBecker) (dfinity/motoko-base#615).
- Added