zeolite-lang v0.9.0.0 Release Notes
Release Date: 2020-11-23 // over 4 years ago-
Compiler CLI
[breaking] Major changes to C++ extensions:
- [breaking] Corrects hole in
$ModuleOnly$
visibility in C++ extensions. Previously, C++ extensions could directly access categories defined in$ModuleOnly$
sources in dependencies. - [breaking] Randomizes cache paths and
namespace
s for generated C++ code so that C++ extensions cannot use static#include
paths to circumvent the visibility rules of a dependency. - [breaking] Makes
TypeInstance
s shared in generated C++ and in C++ extensions, to allow for better memory management of@type
s in the future. - [breaking] Adds guards to C++ headers for
$TestsOnly$
categories, to prevent them from being used in non-$TestsOnly$
C++ extensions.
- [breaking] Corrects hole in
[fix] Fixes regression where calling
zeolite
with-p
would overwrite an existing.zeolite-module
.
Language
[breaking] Syntax changes:
- [breaking] Changes the syntax for calling
@category
functions from$$
to:
, e.g.,Foo:create()
instead ofFoo$$create()
. A new error message (to be removed later) will remind the user to stop using$$
. - [breaking] Changes the syntax for calling
@type
functions from$
to.
, e.g.,Foo.create()
instead ofFoo$create()
. A new error message (to be removed later) will remind the user to stop using$
.
- [breaking] Changes the syntax for calling
[breaking] Changes to param usage:
- [breaking] Updates param inference to be more accurate. The new algorithm will infer a param type iff the best choice is unambiguous given the expected and actual function arguments.
- [breaking] Disallows bounding a single param both above and below, e.g.,
having both
#x requires Foo
and#x allows Bar
. This is primarily to prevent cycles and contradictions in the type system.
Previously, the best case for such restrictions was that there are extremely few choices for
#x
, and the worst case was that it impliesBar
converts toFoo
when it isn't true, thus making#x
unusable. Having either of those requirements likely indicates a design flaw.[breaking] Prohibits having a
$TestsOnly$
definition for a non-$TestsOnly$
category. Previously, aconcrete
category declared in a non-$TestsOnly$
.0rp
could bedefine
d in a$TestsOnly$
.0rx
, which creates a loophole that allows binaries to utilize$TestsOnly$
code.[fix] Fixes a latent type-checking bug that could occur when attempting to assign a value with an intersection type to a variable with a union type, if one or both types has another nested type, e.g.,
[A&B]
→[[A&B]|C]
or[[A|B]&C]
→[A|B]
. This change shouldn't cause new type-checking failures.
Libraries
- [fix] Implements
subSequence
forArgv
inlib/util
. This is required byReadPosition
but was forgotten. Calling it prior to this would cause a failure.