For a full list of releases, see github.
0.4 / 2024-01-04
Release 0.4 extends from
syntax, adding
suchthat
,
take
and skip
clauses; allows identifiers to be
quoted using backticks;
improves pretty-printing of
tuples and
long lines.
Contributors: Julian Hyde, Rette66
- [MOREL-204]
Add
take
andskip
relational operators - [MOREL-209] File reader, and progressive types
- [MOREL-210] Fold long types when printing
- Rename
Option.flatten
toOption.join
- [MOREL-71] Allow identifiers to be quoted using backticks
- [MOREL-206] Indent tuples when printing
- [MOREL-129]
Define relations via constrained iterations, and introduce a
suchthat
keyword to use them
- Add
directory
property toSession
- Add type parameter to
Core.Literal.unwrap()
method - [MOREL-208]
FromBuilder
should remove trivialyield
step between two scan steps - [MOREL-205] Pattern that uses nested type-constructors should not be considered redundant
- Add utility methods
Static.transform
andtransformEager
- [MOREL-203]
Cannot deduce type for
from b in [SOME true, NONE]
- Refactor: In
Unifier.Variable
, store ordinal rather than computing it - Refactor: Rename
Ord.forEach
toforEachIndexed
- In
CoreBuilder
, addtuple(TypeSystem, Exp...)
, a more convenientapply
- Simplify
EnvShuttle
,EnvVisitor
by addingpush
method - Add
interface PairList
andinterface ImmutablePairList
- Add method
Static.nextPowerOfTwo
- [MOREL-201]
Real.signBit
gives different result on JDK 19/ARM
- Run
script.sml
in tests - [MOREL-207] Detect and fix flaky tests
- Disallow static star import
- [MOREL-200] In the test suite, run arbitrary "lint" checks on code
- [MOREL-198] Idempotent mode for test scripts
- Add a test for various closure and recursion scenarios
- Allow CI runs to be triggered manually, and monthly
- Bump build-helper-maven-plugin from 3.3.0 to 3.5.0
- Bump calcite from 1.32.0 to 1.36.0
- Bump checkstyle from 10.3.4 to 10.12.7
- Bump guava from 31.1-jre to 33.0.0-jre; increase minimum guava version from 19.0 to 21.0
- Bump hsqldb from 2.7.0 to 2.7.2
- Bump javacc from 7.0.12 to 7.0.13
- Bump jdk to 21; minimum jdk is still 8
- Bump jline from 3.21.0 to 3.25.0
- Bump junit-jupiter from 5.9.1 to 5.10.1
- Bump maven-checkstyle-plugin from 3.2.0 to 3.3.1
- Bump maven-compiler-plugin from 3.10.1 to 3.12.1
- Bump maven-enforcer-plugin from 3.1.0 to 3.4.1
- Bump maven-javadoc-plugin from 3.4.1 to 3.6.3
- Bump maven-project-info-reports-plugin from 3.4.1 to 3.5.0
- Bump maven-release-plugin from 2.4.2 to 3.0.1
- Bump maven-scm-provider-gitexe from 1.9.1 to 2.0.1
- Bump maven-site-plugin from 3.12.1 to 4.0.0-M13
- Bump maven-source-plugin from 3.2.1 to 3.3.0
- Bump maven-surefire-plugin from 2.22.2 to 3.2.3
- Bump slfj from 2.0.3 to 2.1.0-alpha1
- Add versions-maven-plugin version 2.16.2
- [MOREL-199] Support JDK 19 and 20
- [MOREL-211] Release 0.4
- Add Maven Central badge to
README.md
0.3 / 2022-10-02
Release 0.3 extends from
syntax, adding an
order
clause,
allowing multiple
yield
,
group
and where
steps in any order,
variable =
value,
patterns in in
.
The compiler now detects
redundant and exhaustive matches,
and supports
views and inlining.
We add the
use function
and standard structures
Math and
Real
to the standard library.
Integration with
Apache Calcite
allows us to translate whole programs to relational algebra.
Contributors: Gabriel Tejeda, Gavin Ray, Julian Hyde, Sergey Nuyanzin
- [MOREL-165] Improve message when type resolution cannot deduce full record type
- [MOREL-159]
from
should not have a singleton record type unless it ends with a singleton recordyield
- [MOREL-147] Allow Calcite schemas to contain sub-schemas
- [MOREL-138] Type annotations in patterns, function declarations and expressions
- [MOREL-55] Analyze match coverage, detecting redundant and exhaustive matches
- Satisfiability prover
- [MOREL-118] Report positions in error messages and exceptions
- [MOREL-105]
Allow identifiers to contain prime characters (
'
) - [MOREL-70] Polymorphic datatype
- [MOREL-104] Make functions top-level
- [MOREL-103]
Layered patterns (
as
), and compositeval
- [MOREL-102]
Real
structure - Allow quick eager evaluation for functions/operators with more than one argument
- [MOREL-96] Print control
- [MOREL-100] Allow double-quote and backslash in string and char literals
- [MOREL-88]
Math
structure - Floating point:
posInf
,negInf
,NaN
, and negative zero - [MOREL-94] Wordle solver
- [MOREL-95] Mutually recursive functions
- Add
Relational.iterate
, which allows "recursive queries" such as transitive closure - [MOREL-69]
Add
compute
clause, for monoid comprehensions - [MOREL-86]
Add
use
function, to read and execute source from a file - [MOREL-72] Join
- [MOREL-11]
In
from
clause, allow 'variable = value' - [MOREL-62]
Add function
Relational.only
, which allows scalar sub-queries - [MOREL-65]
In the shell (REPL), use prompt '
-
' and continuation '=
' - [MOREL-51]
Add
Relational.exists
function, and push it down to Calcite - Add
morel.lang
, Morel language definition for the Linux 'highlight' command - [MOREL-60]
Push
elem
,notelem
andnot ... elem
down to Calcite (as SQLIN
andNOT IN
) - [MOREL-52]
Allow multiple
yield
steps infrom
- [MOREL-45]
Translate
List.filter
as if user had writtenwhere
; andList.map
toyield
- [MOREL-57]
group
with empty key should emit one row - [MOREL-54] Views (parameterized functions that return a relation) and inlining
- [MOREL-53] Optimize core language by inlining expressions
- [MOREL-42]
Add a
morel
Calcite UDF, to allow hybrid plans with a mixture of relational and non-relational - [MOREL-40] Translate to full Calcite algebra
- [MOREL-46] Core language
- [MOREL-48] Deduce types when a function is applied to a record selector
- [MOREL-44] Session variables
- [MOREL-41]
Add
Sys.plan ()
function, to display plans from the shell - [MOREL-39]
Implement built-in
vector
andorder
data types - [MOREL-38]
Implement built-in
option
datatype and supporting functions - [MOREL-37] Raise exceptions in built-in functions
- [MOREL-25]
Add
o
(function composition) and@
(list concatenation) operators - [MOREL-36]
In record pattern, make labels optional, and disallow
...
anywhere but end - [MOREL-34] Functions in relations
- [MOREL-27]
Create objects for built-in structures
List
andString
, and allowstructure.name
references - [MOREL-33]
Add
elem
,notelem
operators - [MOREL-30]
Add
union
,intersect
,except
operators - [MOREL-31]
In
from
expression, allowin
to assign to pattern - [MOREL-29]
Overload
+
operator to allow bothint
andreal
arguments - [MOREL-24]
Use
=
rather thanas
for assigning column aliases ingroup
andcompute
- [MOREL-23] Default arguments for aggregate functions
- [MOREL-17]
Allow
from
clause that defines 0 sources - [MOREL-20]
Add
order
clause - In
compute
clause ofgroup
, applyof
expression to each row - [MOREL-21]
In
from
, allow multiplegroup
andwhere
clauses in any order, optionally followed byyield
- [MOREL-179] In compilation environment, use name + ordinal as the key, not just name, to accommodate variable copies caused by inlining
- Refactor: Move list methods into
Static
- In
CoreBuilder
, add methods for frequently used operations:equals
,lessThan
,only
etc. - Allocate
bool
literals (true
andfalse
) once inCoreBuilder
- Keywords should be lower case
- [MOREL-101] Join variables are out of order in the rows sent to an aggregate function
- [MOREL-99] Script parser hangs if it encounters invalid syntax, and ignores comments at ends of files
- Refactor:
Array
toList
,List
toConsumer
- Refactor: move
Shell
state into newinterface Config
- Tuning
- Rename
Option.join
toflatten
(to make way for thejoin
keyword) - [MOREL-73] Keywords must be lower case
- [MOREL-64]
order
afteryield
gives 'unbound variable' error - [MOREL-67]
In
compute
clause, the key value should be available but is null - During inlining, use '_' as delimiter for qualified variable names
- [MOREL-59] Converting an empty list to relational algebra throws
- Add
Core.Yield
step, and obsoleteCore.yieldExp
- Rationalize order of Java 'import' statements
- Always inline atomic variables
- Add method
Static.shorterThan(Iterable, int)
- [MOREL-49]
Function argument
()
should have typeunit
, not 0-tuple - [MOREL-50] Type resolver does not resolve all fields of record types
- Improve field names, e.g. rename
Exp e
toExp exp
- Remove overrides of
toString()
method inEnvironment
andEvalEnv
- Factor
Converter
out ofCalciteForeignValue
- Refactor: rename
let
fields - Add
enum Prop
, for strongly-typed properties - [MOREL-13] Garbage-collect obscured variables
- AST that contains a call to
op +
is unparsed incorrectly - Refactor
DataSet
TypeVisitor
should visit parameter types insideDataType
- [MOREL-35]
Record pattern in
from
mixes up fields if not in alphabetical order - Deduce type of polymorphic field in tuple or record
- Add tracing to
Unifier
- Move
class TypeResolver.TypeMap
to top-level - Correct order of numeric labels in records, and allow 0 as a label
- A record with a field named "1" is a record, not a tuple
- During validation, replace
From.sources
if rewrites occur - [MOREL-28]
The
sum
aggregate function only works onint
values - [MOREL-26]
Cannot parse
()
as pattern - Morel shell should work even if Apache Maven is not installed
- [MOREL-19]
AssertionError: unknown FUN_DECL
- [MOREL-22]
Character literal should unparse as
#"a"
, not"a"
- Bump
slf4j-api
from 2.0.2 to 2.0.3 - Bump
hsqldb
from 2.5.1 to 2.7.0 - Add
hsqldb-version
parameter to CI - Add
interface Tracer
, so that tests can check for several events during the lifecycle - Bump
git-commit-id-plugin
from 2.1.9 to 4.9.10 - Bump
checkstyle
from 7.8.2 to 10.3.4,maven-checkstyle-plugin
from 3.0.0 to 3.1.2,maven-source-plugin
from 2.2.1 to 3.2.1,maven-compiler-plugin
from 2.3.2 to 3.10.1,build-helper-maven-plugin
from 1.9 to 3.3.0 - Bump
calcite-core
from 1.29.0 to 1.32.0 - Make
ShellTest
more robust - Turn off Travis CI
- Bump
hsqldb
from 2.3.1 to 2.5.1,foodmart-data-hsqldb
from 0.4 to 0.5,scott-data-hsqldb
from 0.1 to 0.2 - Bump
maven-project-info-reports-plugin
from 2.9 to 3.4.1 - Bump
maven-enforcer-plugin
from 3.0.0-M1 to 3.1.0 - Bump
maven-javadoc-plugin
from 3.0.1 to 3.4.1 - Bump
javacc-maven-plugin
from 3.0.0 to 3.0.3 - Test Guava versions 19.0 to 31.1-jre in CI
- Bump
guava
from 21.0 to 23.0 - Bump
jline
from 3.16.0 to 3.21.0 - Bump
maven-surefire-plugin
from 3.0.0-M3 to 3.0.0-M7 - Bump
jsr305
from 1.3.9 to 3.0.2 - Bump
slf4j-api
from 1.7.25 to 2.0.2 - Bump
junit-jupiter.version
from 5.7.2 to 5.9.1 - Bump
javacc
from 7.0.5 to 7.0.12 - Enable Dependabot
- Run CI on multiple Java versions, with Javadoc
- [MOREL-107]
ShellTest
is non-deterministic - Add GitHub workflow to build and test
- Move project to 'hydromatic' GitHub organization
- Bump
maven
from 3.6.3 to 3.8.4 - Upgrade
calcite-core
to 1.29 - In parser tests, make sure there are no characters after the expression being parsed
- Refactor: Test fixture for
ShellTest
- Refactor: Move
ScriptTest.Utils
to top-levelclass TestUtils
- Bump
jline
from 3.12.1 to 3.16.0, to give support forxrvt
terminals - Add tests for 'StrangeLoop 2021' talk
- Travis: quote variables, skip install
- Split
hybrid.sml
out offoreign.sml
- Docker login
LearningMatcher
makes it easier to ensure that two queries have the same plan or same results- In tests, move implementations of
interface Matcher
into new utilityclass Matchers
- Bump
calcite-core
to 1.27 - Run tests in parallel
- [MOREL-47]
Bump
junit
from 4.11 to 5.7.2,hamcrest
from 1.3 to 2.2 - Add tests for blog post 'Aggregate queries in Morel'
- Add tests for blog post 'Word Count revisited'
- Bump
javacc
from 4.0 to 7.0.5,maven-javacc-plugin
from 2.4 to 3.0.0
- [MOREL-181] Release 0.3
- Update operator list in
README
- In reference, re-order the
String
andVector
built-in functions - Add example of matching regular expressions using combinators
- Add missed brackets and semicolons in
README
- Improve Morel picture on home page
- Add functions and types to Morel language reference
- Add build status to home page
- Another example of a recursive query: Floyd-Warshall algorithm for shortest path in a weighted graph
- Add examples of recursive queries and fixed-point algorithms
- Add Morel logo and square image
0.2 / 2020-03-10
The first release since smlj was renamed to Morel includes major improvements to the type system and relational extensions. Some highlights:
- Functions and values can have polymorphic types, inferred as part of a Hindley-Milner type system;
- Relational expressions may now include a
group
clause, so you can evaluate aggregate queries (similar to SQLGROUP BY
); - Foreign values allow external data, such as the contents of a JDBC database, to be handled as if it is in memory;
- Add built-in functions based on the
String
andList
structures in the Standard ML basis library; - Postfix field reference syntax makes Morel more familiar to SQL users;
- Add Morel language reference.
- [MOREL-15] Improve pretty-printing: wrap long lines, and abbreviate long lists and deep structures
- [MOREL-12]
In
from
clause, allow initializers to reference previous variables - In
group
,as alias
is optional - [MOREL-10] Implicit labels in record expressions
- [MOREL-9]
Allow
<expr>.<field>
as an alternative syntax for#<field> <expr>
- [MOREL-7] Rename project from 'smlj' to 'morel'
- [SMLJ-5] Foreign values, including record values based on the contents of a JDBC schema
- [SMLJ-6]
Add
group
clause (andcompute
sub-clause) tofrom
expression, to support aggregation and aggregate functions - Polymorphic types
- Add
String
andList
basis functions
- [MOREL-16] Ensure that types derived for REPL expressions have no free type variables
- [MOREL-14]
Tuple should equal record, and both equal
unit
when empty - Add macros (special built-in functions that are 'called' at compile time to generate a new AST)
- Add
interface MutableEvalEnv
, for code that wants to mutate the last binding in an environment - Make
EvalEnv
immutable - Recursive functions in closures use the wrong environment
- Unit literal's
toString()
should be()
, not[]
- For built-ins, add their alias to the compile-time environment
- In parallel declarations (
let
...and
) add variables to compilation environment - Refactor special type constructors (list, tuple, record)
- [SMLJ-4]
let fun
insidefrom
expression fails - Move built-in constants and functions into new
enum BuiltIn
- In
Shell
, fix parsing single-quote in line comments, and line endings in multi-line statements
- Test expressions used in documentation and blog posts
- Example of a user-defined aggregate function in a query
- Add a test with a temporary function in a query that takes a record-valued argument
- In
ScriptTest
, only loadDictionary
if script isforeign.sml
- Enable some
group
tests - Add
Sys_env ()
function, that returns the current environment - Upgrade maven: 3.5.4 → 3.6.3
- Add maven wrapper jar
- Use correct
maven-javadoc-plugin
version - Before launching repl, build test as well as main
- Convert
MainTest
to use fluent style - In
Shell
, add optional pause, which seems to makeShellTest
deterministic
- Add Morel language reference
- Add image to README
- Add javadoc to site
- Generate an asciinema demo
0.1 / 2019-07-24
Initial release features the core language (primitive types, lists,
tuples, records; let
, if
, fn
and case
expressions; val
,
fun
and datatype
declarations), an interactive shell smlj
, and
relational extensions (from
).