Releases: plume-lang/plume
Plume 0.9.4
Minor version to revert some new features that caused bugs with interfaces. Implying that str
yet becomes a concrete type instead of just being a type synonym for list<char>
. Planning on adding some standard functions to easily convert to iterable.
Full Changelog: 0.9.3...0.9.4
Plume 0.9.3
This version brings possibility to express extension priority. This is useful for overlapping some extensions.
This just results in sorting extensions when resolving them.
Full Changelog: 0.9.2...0.9.3
Plume 0.9.2
This Plume version brings fixes to compiler issues, especially in ANF conversion.
Compiler was using
desugarANF
instead ofdesugarExpr
for desugaring with declarations (mut declarations included too).
Full Changelog: 0.9.1...0.9.2
Plume 0.9.1
This new minor version brings fixes to existing features and introduces asynchronous inference:
- Prelude is now imported according to the backend (
std:prelude-js
for JavaScript backend, andstd:prelude
for native one). - Asynchronous calls are now partially inferred (in ambiguous cases, the
async
keyword helps to resolve most of the issues).
Before
test = await read_file("my-file.plm")
println(test)
After
test = read_file("my-file.plm")
println(test)
Full Changelog: 0.9.0...0.9.1
Plume 0.9.0
This new major Plume version brings some new exciting features, such as a correct module resolution (letting the compiler throw errors when external variables shouldn't be used in modules), support for functional dependencies, enabling new possibilities for instance with the indexable interface:
interface<T, A> indexable<T, A> with T => A {
fn get_index(xs: T, idx: int): Option<A>
}
Here with T => A
means that from type T
, we may deduce type A
. There is also a new while statement for building loops easily. However, they lack support for control flow statements such as break
and continue
.
What's Changed
- Feat/module resolution by @thomasvergne in #29
- Added support for functional dependencies by @thomasvergne in #32
- Added support for while statements by @thomasvergne in #31
Full Changelog: 0.8.0...0.9.0
Plume 0.8.0
This new Plume version brings a brand-new backend, replacing the existing one temporarily. This backend enables compiling Plume code to JavaScript.
Plume includes obviously new features related to asynchronous development: this new version introduces async
data-type and await
expression.
What's Changed
- Feat/clean compiler by @thomasvergne in #27
- Feat/javascript backend by @thomasvergne in #28
Full Changelog: 0.7.4...0.8.0
Plume 0.7.4
This new Plume minor version should try to fix an issue with the GetDirname
function on Windows systems.
Full Changelog: 0.7.3...0.7.4
Plume 0.7.3
This version brings little fixes for the extension resolution system and some fixes in the runtime with equal comparison (causing string pattern matching to fail).
What's Changed
- Improved and added some documentation in the codebase by @sisypheus-dev in #25
Full Changelog: 0.7.2...0.7.3
Plume 0.7.2
Major fixes are brought with this new version such as extensions and interface fixes. Also seems to fix closure conversion
What's Changed
Full Changelog: 0.7.1...0.7.2
Plume 0.7.1
Return security
Plume now has a security test for missing returns in blocks of expressions, meaning you can no longer write a function without specifying a return value in its body. However, this still does not include conditional exhaustiveness, so this Plume version might not cover any missing return cases.
The following code throws an error:
fn welcome(name: str): int {
println("Hello $name!")
}
Because welcome
should return an integer but returns nothing
Extension critical issue
This version also brings a fix for extension discharging: extension constraints were discharged in a non-correct order, leading to misplacement issues with instance dictionaries.
Discharging is the step where for instance
equality<(A, B)>
is discharged intoequality<A>
, andequality<B>
, to check if these extensions exist too or to create a new instance dictionary.
Full Changelog: 0.7...0.7.1