0.100.0 [2026-08-29] -------------------- - Add macOS native support - Split dev-apt and dev-conda env dependencies 0.99.1 [2026-08-25] ------------------- Remove absolute paths 0.99.0 [2026-08-24] ------------------- Dependency management * Manage all dependencies for an environment through conda via pixi * New native backend: build, run, and serve without a container (just Linux) * Define all language-specific build requirements explicitly * Each package declares its source (conda, pypi, cran, crates, pkg, ...) * Per-dependency conda channel support (e.g. bioconda) * Remove the bundled containerized solutions New morloc compiler subcommands * `morloc versions` - print contracts between the compiler, runtime, and manager * `morloc envspec ` - prints the dependencies for a morloc program * `morloc lang-support` - prints supported languages and their dependencies Morloc manager (mim) updates * Rename `morloc-manager` to `mim` and move it to dedicated repo * Expand `mim new` interactive mode to cover all options and add checks * Allow creation of dev environments with all morloc build tools * `mim doctor` - read-only health checks for an environment * Create dev environments with all morloc build tools (`mim new --dev`) * Per-environment `$HOME` and `--dotfiles` * `mim ... --system-packages foo,bar` - add OS packages to an environment * Add `--env` to all * `mim shell` to directly enter an environment shell * `mim modify` alter an existing environment without changing morloc version * `mim update` alter an environment's morloc version * Removed `mim select`, now there is a default 0.98.2 [2026-08-17] ------------------- More bug fixes 0.98.1 [2026-08-16] ------------------- Bug fixes 0.98.0 [2026-08-15] ------------------- Refactor morloc-manager around install/expose/start subcommands * `morloc-manager install ` - build and install a module * `morloc-manager expose` * `add --as mcp,api` * `rm ` * `eval [--allow foo,bar] [--off] [--env ]` * `morloc-manager start []` * --mcp * --auth-token * --expose * --allow-plaintext * --allow-no-auth * --unsafe 0.97.0 [2026-08-10] ------------------- Language support * Build Rust pools as Cargo projects * Allow Rust dependencies to be specified in package.yaml (rust-deps) Build system * Generate `-build` folder rather than `pools` * Separate the manifest JSON into a single JSON file in `*-build/manifest.json` * Generated executables are now simple shell wrappers around `morloc-nexus` * Directly generate daemon and MCP executables from `morloc make` * `-o/--cli-out EXE` - name of the CLI executable * `--daemon-out EXE` - name of the daemon executable * `--mcp-out EXE` - name of the MCP server executable * Per-language build parameters * `-X lang:key=value` pass to the language-specific compilers Backends * --json-help and --mcp-tool outputs * Add `@mime` type docstring annotations -- used in MCP and HTTP * Generate MCP Servers * Safer `eval` * Require module allow-list * Ban IO intrinsics in eval expressions Other * Fix cross-pool recursion * Fix exponential blow-up in realization algorithm * Tail-call optimization via native-loop lowering * Many bug fixes 0.96.0 [2026-08-02] ------------------- Language support * Orient pools around language families rather than independent languages * Add full Rust * Add Futhark support as C++ guest Docstring grammar rewrite * `@` as initial sigil, replacing ":" * Allow `@default` flag to make a formatter the default output * Allow `-f json` to over-ride the default output * Move `render.buffer` and `with.buffer` to `@buffer @stream` * Allow output formatters to be passed arguments, e.g.: `--' @render -t/--tabulate=foo(@offset, $1, $3) Other * Full support for passing nested closures between languages * Add `@streamLayout` intrinsic for better parallelization design * Many bug fixes 0.95.0 [2026-07-23] ------------------- * Add `stdin: true` docstring field to let positional optionally use STDIN * Let `@open` read morloc packets from STDIN * Refutable patterns with '|' syntax * Streamed output now honors nexus formatting and compression directives * New `@collect` intrinsic for marshalling data to stdout * New reformatting handles: - `with:` - `with-buffer:` - `render:` - `render-buffer:` * Allow auto-detected offset to handlers * Gradual kinds - allows `Vector a` to be used in place of `Vector n a`. Allows `[Vector a]` where each vector may have a different length 0.94.0 [2026-07-15] ------------------- * Switch label syntax from ":" to "@" * Add `@catch` and `@throw` intrinsics * Convert from optional returns in intrinsics to `` effects * Convert fixed size numeric naming convention to Rust style (U8 ... U64 / I8 ... I64, F32, and F64) * Reintroduce `!` as eval-sugar for do-blocks * Allow arbitrary infix strings in backticks in import statement * Allow docstring forms in records * Include names, srcloc, and lang in all tracebacks * Fix literal type promotion 0.93.0 [2026-07-11] ------------------- * Irrefutable patterns - `foo (a, b) = b` - `foo {a=x, b=y} = y` - `(\(a, b) -> b)` - works for tuples and records (but not lists) * Cleaner model separating nexus and command args: - ALL nexus args are on the left of the separator (@ or subcommand) - ALL command args are on the right - this include -h, and --help is no longer the special nexus help * Several bug fixes 0.92.0 [2026-07-08] ------------------- * add `with:` docstring field for terminal action * allow stream-packet files as CLI arguments - [a] types slurp the packet into memory - `IStream a` types open the file for streaming 0.91.0 [2026-07-03] ------------------- Many bug fixes and morloc-nexus streaming and pattern support * switch argument orders in savem, savej and write intrinsics * fix several bugs * add stream support to `morloc-nexus file` * add stream support to `morloc-nexus view` - rewrite flags (-s/-d/-p for stream, data, or auto output packets) - allow getter patterns to be applied to the view - support jsonl output for better streaming * in check.path docstring field, replace r/w/c with python-style r/w/x/rw 0.90.0 [2026-07-03] ------------------- Packet compression, file random access, and streaming Packet compression with zstd * `-z ` morloc-nexus argument with 0 being no compression and 9 max * add compression level to `@write` intrinsic as first argument * multi-threaded compression and decompression Add streaming support * Add a new morloc streaming packet type * No length is specified in the header * The streaming type MUST be `[a]` * Sub-packets of type `[a]` are written contiguously, a temp footer is updated at each write * When an output stream closes, a final footer is written with an index for looking up sub-packets. * New input stream type: `IStream a` - open with the intrinsic `@open`, for example: `open "path/to/file" :: IStream Str`` - type annotations are required (usually) at open time - the `@next` intrinsic returns a list of type `[a]` representing all elements in one subpacket; it returns an empty list when the end of the stream is reached - close the input with `@close` * New output stream type: `OStream a` - open with the intrinsic `@open`, for example: `@open "path/to/file" :: OStream Str`` - write one or more results to the output stream with `@write c xs`, where `c` is the compression level. - the `OStream a` output is buffered - force the buffer to be written to a subpacket (if non-empty) with `@flush` - close the input with `@close` * `@concat` intrinsic to concat stream files * `@append` to open a stream packet and continue writing to it Add stdio streaming * `@stdin` - open STDIN file and stream morloc packets * `@stdout`/`@stderr` - open STDOUT/STDERR files and write packets to them Add random-access file support * New read-only random-access file type `IFile a` * Randomly query data or stream packets via patterns Docstring shape directives * JSON user input as CLI arguments is now exclusively for structured data (JSON arrays and objects); strings are now primitives that do not need extra JSON quoting. * `literal` docstring field is deprecated * introduce `source`, `form` and `check.*` fields to direct how data is read in (see the new doc section) * `@flen` to get the length of a file with type `[a]` * `@fschema` to get the file type schema New utility functions in `morloc-nexus` * `morloc-nexus file` - print information about a morloc packet * `morloc-nexus view` - convert morloc packets into other forms Other changes * Mostly deprecate MessagePack; compressed voidstar is better * Thorough `morloc install` help message 0.89.0 [2026-06-13] ------------------- Observability * add logging for labeled terms with start/pass/fail log entries with ANSI coloring syntax support and placeholders * add prologue/epilogue logging with ANSI coloring syntax and placeholders * add start.json / summary.json sentinels distinguish in-progress, completed, and crashed runs * add morloc-nexus options * --log-dir / `MORLOC_LOG_DIR` for specifying logging directory * --summary FILE for path of summary file * --quiet / `MORLOC_QUIET=1` to silence logging Content-addressed caching * Opt-in via `cache:true` on a labeled group; calls are memoized to disk. * Freshness based on hashes of args, manifold id, and source code * Equal return values dedup across labels and across Python/R/C++ pools. * Honors `MORLOC_CACHE_BASE`, then `XDG_CACHE_HOME`, then HOME. Debug traceback dumps * `morloc make --debug` to cache arguments on exception in traceback frames * New nexus options * `--debug-cache-depth` - how many frames to cache args for * `--debug-cache-max` - max size of any cached argument * `--debug-recursion-cap` - number of recursive frames to represent Nexus CLI overhaul * switched help text and argv parsing to clap-derive across run/daemon/router * daemon and router are now subcommands of morloc-nexus * `@` zone separator disambiguates nexus options from user arguments. * Single-export programs accept the full set of nexus options (short and long forms). Argument source handling * clean handling of STDIN in arguments through `-` * better error messages 0.88.0 [2026-06-07] ------------------- Slurm support - add support for containerized SLURM job submission Apptainer support - add support to `morloc-manager` for Apptainer/Singularity Slicer syntax - add support for array indexing patterns for any type with an Indexable instance - add support for full Python-style list slicing patterns for any type with a Sliceable or SliceableDim instance - indices may be any type with an Indexlike instance Add newtype semantics - `newtype` creates a type that may inherit wire format from a parent but does not inherit typeclasses or native type relations - now `type` creates genuine aliases that are guaranteed to be compatible with the parent apart from docstrings Numerics - fix numeric type inference (now `4 + 4.0` typechecks) Other - add `cxx-flags` field to package.yaml - propagate cross-pool errors as tracebacks 0.87.0 [2026-05-25] ------------------- Allow control over data transfer approaches for a build - `--no-shm` - completely disable shm - `--inline-size` - set the threshold below which data is inlined (default 64k) - `--tmpdir` - determine where intermediate files are written 0.86.1 [2026-05-23] ------------------- Type system - allow recursive data types (Rose trees, binary trees, linked lists, etc) Updated `eval` subcommand - make script positional and inline use `-e` flag - make `source` fully inaccessible without --allow-local-modules Error messages - check language-specific legality of sourced terms - better error when using the "default" docstring on a positional - replace naked `error` calls in Haskell with dedicated throwCompilerBug when presumably unreachable expressions are reached (real compiler bugs) - add clear error for multi-root modules - fix still more error messages that point to the module export line Effects - require explicit effect declarations - make effects inescapable (effects always propagate to the return value) - allow effects to be explicitly declared as `escapable` - remove effect coercion and explicit forcing (the `!` operator) - fix parsing of do-blocks within parentheses in expressions Other - allow empty import (e.g., for typeclass instances) - fix value checking across instances - fix bug in aliased recursive functions Installation - add a `setup` field to morloc package.yaml files - this calls a bash script in the cwd after a module is installed - script has access to `MORLOC_HOME`, `MORLOC_MODULE_NAME`, `MORLOC_MODULE_VERSION`, `MORLOC_MODULE_DIR`, `MORLOC_PLANE`, and `MORLOC_PLANE_DIR`. - setup script failure always removes the broken module Bugs - Fixed many bugs and added many tests for tensors and vectors 0.85.0 [2026-05-12] ------------------- New behavior: * add support for all intrinsics to pure morloc code * support ephemeral daemon ports (port=0) and the --port-file option * clearer daemon exit codes String issues * accept NUL as \000 instead of emitting a raw NUL byte * allow NUL support to be specified in language yaml files * allow NUL checks to be skipped with --unsafe-skip-null-check flag * do not trim space in triple-quoted strings Bug fixes * fix bug in nested record patterns * fix missing valuecheck in where blocks * raise error is where block shadows an input parameter * stricter rule for conflicting instances (same lang, diff source) * fix representation of `[?a]` * fix kind-specific variable substitution in typedef expansion * fixed multi-line strings in recursive cases Shm * Fix bug in volume growth algorithm - now back to geometric growth * Fix shm memory leaks on foreign calls 0.84.0 [2026-05-10] ------------------- Numeric handling * add float Inf/-Inf/NaN support * add literal int and float overflow error * add proper negation operator * fix silent integer overflow errors * fix errors on illegal hex/oct/bin literals (e.g., "0x4dzzz") String processing * raise error on illegal string escapes Modules * fix parser bug preventing multi-module files * allow empty module export lists SHM * inline small data packets (under 64kb) * fix leaked shm memory on pool crash * in daemon-mode, do full restart of all pools if any crash Nexus * do not write JSON null for Unit of Optional Nothing * add --keep-null to nexus to print JSON null * fix --output-file argument to properly write files for all output types * reject unknown CLI options Typechecking * enforce typechecking of effects * propagate effect when `!` is used outside do-block Other bug fixes * fix segfault in pure morloc @load intrinsic * fix bugs in pure morloc patter getters/setters * fix pure morloc tuple pattern getters * fix guards with mixed effects across branches * fix bug in parsing guards in do-blocks * fix segfault in ?(?x) double optionals * raise error on repeated keys in records 0.83.2 [2026-05-07] ------------------- * add tensor support through Packable class * many fixes to the phantom types * open-world Arrow-based table support * native CSV, Parquet, Arrow, JSON, and voidstar inputs/outputs * Arrow on the wire * Nat checking over row number * Rec kind for checking/inferring column name/types * remove all old table support * fix internal quoting and extra newlines in multi-line strings * add dimensional validation * build type schemas at compile time and cache (performance optimization) * add `morloc-dependencies` field to package.yaml for pinning module hashes * fix typechecking for aliases of numeric literals * bug fixes in let/do-block code gen 0.82.0 [2026-04-26] ------------------- * remove parenthesis requirement in binops - can write (< 2) rather than ((<) 2) * allow left and right operator sections - filter (< 2) [1,2,3] --> [1] - filter (2 <) [1,2,3] --> [3] * make `Int` variable length - represents the default int in any language - supports arbitrary sized ints * remove holes syntax * pretty type printing in `morloc list` * fix shared memory leak * fix typeclass resolution no respects type hierarchies 0.81.0 [2026-04-22] ------------------- * fix type inference for type families * extend intrinsic support for language-agnostic code * do shell-expansion of flagfile lines in morloc-manager * fix loss of pool stderr on crash (maybe?) 0.80.1 [2026-04-21] ------------------- * add `morloc-manager new --include ` src:dest syntax * make stderr/stdout mim principles more consistent 0.80.0 [2026-04-20] ------------------- * cleaner morloc-manager * fixed --print bug in nexus 0.79.1-5 [2026-04-19] * lot's morloc-manager updates 0.79.0 [2026-04-17] ------------------- * add @datafile intrinsic for finding installed files * default to including all files when installing - parse `.morlocignore` to find non-install files - allow `include` in package.yaml for strict file inclusion * add `morloc-manage doctor` subcommand for health checks * add additional `freeze/unfreeze` validation * fix unfreezing bugs 0.78.0 [2026-04-17] ------------------- * clean up CLI usage statements * suppress "null" outpput in Unit-returning CLIs * fix string escape bugs * fix where parsing after do-block * fix many small morloc-manager issues * fix paths in installed morloc programs 0.77.1 [2026-04-16] ------------------- * resurrected `morloc-manager log` subcommand 0.77.0 [2026-04-15] ------------------- * many many deployment fixes 0.76.0 [2026-04-13] ------------------- * fix docstring groups * add module docstrings * fix bug in unfreeze 0.75.0 [2026-04-12] ------------------- * allow effectful final do-notation statements * lots of bug fixes * make changelog version source of truth 0.74.0 [2026-04-06] ------------------- * unify morloc-manager env, workspace, and version * allow docstrings before declarations * allow literal leading spaces in docstrings * allow escaped `:` syntax 0.73.0 [2026-04-01] ------------------- * fix @load error on missing file * fix error reporting on failed `morloc-manager install` 0.72.0 [2026-03-30] ------------------- * fix unicode support in comments and literal strings * many fixes to the morloc-manager 0.71.0-2 [2026-03-29] ------------------- * port morloc-manager to rust 0.70.1 to 0.70.6 [2026-03-29] ----------------------------- * fix portability for libmorloc and morloc-nexus on darwin and linux-arm64 * python flushing face condition 0.70.0 [2026-03-29] ------------------- * port libmorloc and morloc-nexus from C to Rust 0.69.0 [2026-03-27] ------------------- * port morloc-manager from shell to Haskell * share it as a static binary 0.68.0 [2026-03-22] ------------------- * remove explicit universal quntifiers - before: `id a :: a -> a` - now: `id :: a -> a` * add `morloc uninstall --all` option * do not require repeated `let` terms 0.67.1 [2026-03-17] ------------------- * add missing Nat kind annotation to root modules * better test coverage of Nat kinds * add `morloc uninstall --all` option * add `stdlib` module that simplifies recursive install of everything 0.67.0 [2026-03-17] ------------------- * add Arrow tables with zero-copy between language sharing * add tensors and * remove explicit qualifiers - no more `id a :: a -> a` - now `id :: a -> a` - this does not require C++ be more explicit in their typing * inline when packet data is smaller than 65kb - this avoids fragmenting the shared memory with many small single-use values 0.66.0 [2026-03-12] ------------------- * fix propagation of errors from crashed pools * fix shm memory alignment (inefficiency on x86, crashes on ARM) * add `--sanitize` option to `morloc init` for strict memory * replace megaparsec with parsec * fix label and remote handling 0.65.0 [2026-03-10] ------------------- * `morloc eval` for running anonymous morloc expressions * add %inline pragma to skip manifold gen * allow batch syntax for instances * add @show and @read intrinsics * add namespaces for morloc imports 0.64.0 [2026-03-03] ------------------- * replace thunks with more granular effect system * add intrinsics * disambiguate local module imports * change null to Null 0.63.0 [2026-02-25] ------------------- * add optionals with implicit coercion * for `?Str` with `literal: true`, force `default: null` * add daemon args to nexus 0.62.0 [2026-02-24] ------------------- * term recursion support * conditional guards * nexus pretty printing option (-p/--print) * print defaults in usage statements * more bug fixes 0.61.0 [2026-02-21] ------------------- Build updates * make nexus a constant binary (not recreated and recompiled) * add install handling and portable scripts * add morloc daemon mode accessible through HTTP/TCP and sockets * add `morloc install --build` option for installing both executable modules * add `morloc uninstall` * add `morloc list` with -v option for listing types of all exports Typesystem updates * add let syntax that enforces execution order * class constraints (e.g., unique :: Eq a => [a] -> [a]) * superclasses (e.g., class Semigroup => Monoid a where ...) * add effect system for delayed execution * add do-syntax for imperative programming with effects Better errors and UI * cleaner error messages * error message localization * clean `morloc typecheck` output * add CLI subcommand tested grouping * Add shell TAB-completion * fix haddock for future hackage release Bug fixes * cleaned up memory issues in all C code * replaced mcparallel in R with forked pool of workers * fix bug in `morloc install .` Testing * added stress test for zombies and memory issues * added daemon tests Performance * Split the monolithic (~7000 line) morloc.h file * Use a libmorloc.so shared library rather than importing all as header * Removed all the zombie swarms that where killing heavy morloc projects * Remove mcparallel from R, move most of the pool to C, 4X interop speed * Compile and reuse a single nexus (reduce compile costs) Language onboarding * Added codegen IR that greatly simplifies new language addition * Factor all language-specific material out of main Haskell codebase * Move all grammar into template yaml specs * Created MessagePack bridge to bypass voidstar, making lang onboard almost trivial (at a performance penalty). Other * Transitioned parser from recursive descent to LR1 0.60.0 [2026-02-07] ------------------- * add infix operator support Testing * Generate many new tests with Claude * Extensive testing of infix operators and module inheritance Cleanup * add formatting with fourmulo * add metric and benchmarking Bug fixes * Fix several memory issues in morloc.h and lang bindings * Fixed indexing bug in Generator.hs * Fix missing space in git module cp * Make missing folders in install path * Fix `morloc install` deletion of mod folder when install has trailing '/' * Disallow space between sign and number Performance * Fixed exponential case hit on eta resolution * Fixed quadratic case in subtype algorithm Claude memory * Added claude memory files 0.59.0 [2026-01-23] ------------------- * allow functions in data structures * allow source functions to return functions * allow application of expressions that evaluate to functions * fix bug in C++ bool deserialization 0.58.3 [2026-01-03] ------------------- * fix record docstring inheritance 0.58.2 [2025-12-29] ------------------- * fix minor bug optional versus positional 0.58.1 [2025-12-28] ------------------- * fix minor bug in record unrolling 0.58.0 [2025-12-28] ------------------- * add hex, octal, and binary numeric representations * new record syntax * generate CLI from docstrings * resolve records into groups of arguments * allow literal strings without the extra JSON quoting * change to Apache-2.0 0.57.1 [2025-11-12] ------------------- * minor bug fixes 0.57.0 [2025-11-11] ------------------- * re-allow underscores in variable names * add placeholder syntax / lambda lifting from holes * multi-line strings * string interpolation * getter patterns * setter patterns * write full Morloc nexus evaluator * Fix bug in local installs with "." 0.56.0 [2025-10-08] ------------------- New file organization * Change file layout to conform to XDG spec; replaced `~/.morloc` with `~/.local/share/morloc` * Move standard library to `$MORLOC_HOME/src/morloc/plane/default/morloclib` * src/ - stores any source code morloc needs, not just modules * morloc/ - stores morloc modules * plane/ - stores morloc modules that are part of a plane * default/ - the current default plane * morloclib/ - the org name for the core modules in the default plane New `morloc install` subcommand functionality * Multiple imports may be chained on one command * Source and ref can be included per install, for example: * `root` - install a core module * `root@hash:abcdef1234` - specific core instance * `root@tag:v1.0.0` - specific tag/version * `codeberg:weena/calendar@hash:abcdef1234` - 3rd party with source and ref * Support for install of local modules 0.55.1 [2025-09-29] ------------------- * Bug fixes 0.55.0 [2025-09-27] ------------------- * Allow general types to be declared and imported/exported * Allow undirected dependencies * Allow dashes in module names * Fix many bugs in native Morloc code handling * Fix bug in certain higher order foreign functions * Simplify internal unique naming conventions * Move all tests to use the new root module (rather than base) * Slightly improved error messages Breaking changes: * Move to reverse tree model of dependency handling * Allow exactly one type signature for each term and class * Require explicit typeclass import/export * Fix handling of Python builtin imports Now builtins must not be imported from Python source. Instead import directly from Python, for example: `source Py ("len")` * More efficient Haskell Map usage 0.54.2 [2025-08-09] ------------------- * Enforce lowercase module name rule * Fix handling of executable file name option * Fix record handling 0.54.1 [2025-07-26] ------------------- * Fix pickle bug in Python multiprocessing * Replace asprintf non-standard C function * Partially fix interop for C structs * Fix bug in unqualified imports 0.54.0 [2025-07-13] ------------------- * Add full MessagePack and VoidStar IO to nexus * Fixed type pretty printing in usage and typechecking output * Add nexus option and usage info * Add support for one-line command docstrings 0.53.7 [2025-05-31] ------------------- * Fix bug in parameterized type definition concrete type inference 0.53.6 [2025-05-31] ------------------- * Improve container instructions in README * Fix all README examples * Make Dockerfiles more portable * Fix bug in implicit typeclass instance inheritance 0.53.5 [2025-05-12] ------------------- * Fixed unnecessary copying in C libs * Fixed double let-binding in code gen 0.53.4 [2025-05-08] ------------------- * Replace C daemon forking with thread pooling (4X speedup) * Fix bugs related to 0-length array memory allocation 0.53.3 [2025-05-06] ------------------- * Fix handling of empty vectors 0.53.2 [2025-05-06] ------------------- * Fix bug in JSON parsing 0.53.1 [2025-05-06] ------------------- * Update containers * Update github actions * Fix bug in type scoping (sort of) 0.53.0 [2025-05-04] ------------------- Unify backend under shared C library * Replace python nexus with C nexus * Move packets to little-endian format * Move all packet handling, binary protocol specs, socket handling, JSON parsing from pool code into the shared morloc.h library * Replace R `future` parallelism scheme with builtin `parallel` library Add remote worker and resource management support * Add conventions for specifying caching and evaluation strategy * Add xxhash hashing for caching * Add remote handling with experimental slurm support Other * `morloc` commands now return proper exit codes 0.52.1 [2025-02-16] ------------------- * Add python native bytes and bytearray support 0.52.0 [2025-02-09] ------------------- Type evaluation and specialization * Delayed general alias evaluation * Add strict numeric types (`int8`, `uint8`, `int16` etc) * Allow concrete alias specialization * Add type hints allowing concrete type conservation across foreign calls Bug fixes * Fix bug in opening existing shared memory volumes Language support * Add C++ support for std template list-like types (`list`, `forward_list`, `deque`, `stack`, and `set` (I know, they're a tad different) * Add Python support for `numpy` vectors and arrays * Allow raw R vectors to be interpreted as strings * Nexus no longer creates python objects from returned data, instead writes results directly through C library (`morloc.h`) 0.51.1 [2024-12-04] ------------------- * Do not catch STDOUT and STDERR * Fix NULL return errors * Fix container setup 0.51.0 [2024-12-02] ------------------ Shared memory * Allow processes to communicate through shared memory Setup * `morloc init` command will now build the `morloc` ecosystem, writing all required headers to `morloc` home and compiling any required shared libraries. Other * Fix cases where morloc stalls when errors are transmitted across languages * Moved demos to the dedicated example repo 0.50.0 [2024-11-08] ------------------- Better installation * `morloc install --commit 45d8df12` - for github retrieval by commit hash * `morloc install --branch dev` - to retrieve latest from specific branch * `morloc install --tag 0.1.0` - to retrieve specific tag Better containers * Use podman rather than docker in Makefile * `morloc-tiny:` - everything needed to compile morloc projects * `morloc-full:` - an environment for running projects 0.49.0 [2024-11-04] ------------------- New backend with better performance * Mediate inter-process communication with UNIX domain sockets * Transmit data with MessagePack rather than JSON * Added a benchmarking suite * Added `morloc init` command to configure morloc ecosystem 0.48.0 [2024-05-10] ------------------- Second PeerJ submission (after return by editor for technical reasons) * Made type parameters explicit as type arguments: `id a :: a -> a` rather than either of `id :: a -> a` `id :: forall a . a -> a`. * Pass-by-reference in generated C++ code * Simplify generated C++ code by using function template arguments rather than type casting. 0.47.2 [2024-04-28] ------------------- * made the build static * fixed the dockerfile * exported the vim-syntax file out to its own repo * added a --version option * upgraded to LTS 22.18 0.47.2 [2024-04-28] ------------------- First PeerJ submission 0.47.0 [2024.03.10] ------------------- * Add value checker * Raise error when implementations have equal score (no arbitrary choice) 0.46.0 [2024.03.06] ------------------- * Fix precedence of '@' operator - it binds tightest * Update flu demo * Fix github actions * Fix Dockerfile * Address all compiler warnings 0.45.0 [2024.02.14] ------------------- * Allow explicit import of polymorphic terms * Fix infinite loop bug when two many arguments are applied to a function * Synchronise tests with new core libraries type classes 0.44.0 [2024.02.08] ------------------- Add support for ad hoc polymorphism. * Support sources and declarations in classes * Support multiple parameters * Support overlapping instances * Packers are now implemented through the `Packable` typeclass Some missing features: * No support typeclass constraints in the type signatures. * No support for parameterized class variables * No support for polymorphic recursion (does anyone want that?) 0.43.0 [2024.01.14] ------------------- New features * Allow a module to explicitly export packers * Show pool pseudocode for `typecheck -r` * Add `typecheck dump` subcommand to show expressions and indices * Allow nexus inputs to be files * Remove concrete type signatures - always infer * Make fields in language-specific table decs optional Rather than this: table (Person a) = Person {name :: Str, info :: a} table R (Person a) = "data.frame" {name :: Str, info :: a} Allow this: table (Person a) = Person {name :: Str, info :: a} table R (Person a) = "data.frame" Really, I need to totally redo the table/record/object handling. * Remove support for anonymous records in type signatures I will re-add this possibly at a future time when I refactor Infrastructure changes * Pass all data between pools as files rather than string arguments * Raise an error if any general type cannot be translated to a concrete type Fixes * Fix record type inference * Fix bug in collecting packers (missed packers required by root manifold) * Fix C++ handling of quotes and special characters in JSON strings 0.42.0 [2023.10.11] ------------------- * Infer concrete types from inferred general types when necessary and possible * More informative error messages * Fix template resolution in generated C++ code * Fix include name shadowing conflict in generated C++ code * Partially fix naming conflict in Python and R pools caused by use of "f". My solution was name mangling, though we need a more permanent solution to our problem. * Let user write correct "list" R types for lists, tuples, and records * Fix bug in code generation of lets ## Internal * For `ForeignInterfaceM` constructor of ExprM, store the full call type, not just the return type * Parameterize `ExprM` with the type type (e.g., `Maybe TypeP` or `TypeM`) * Replace `Argument` and `PreArgument` with a parameterized `Arg` type. * Fix broken `ForeignInterfaceM` and `PoolCallM` cases in `typeOfExprM` * Refactor backend Testing and documentation: * Complete flu demo - it builds now, just need to implement the library code for align and other functions. 0.41.1 [2023.05.26] ------------------- * Print nothing if "null" is returned * Fix the import of working directory modules * Resolve bug in occur check * Streamline github actions script * Fix `morloc install` path download for core modules * Raise type error for untyped concrete term * Fix bug in concrete type synthesis 0.41.0 [2023.04.16] ------------------- Language updates * Add check to avoid infinite typechecker recursion * Synthesize concrete types from general types when possible * Improve exports * Move exports to module list (as in Haskell) * Add `*` wildcard to export every top-level named term or type * Raise an error if a non-existing term is exported from a module * Allow concrete (un)packers to vary in number of generic terms * Set functions with empty inputs (e.g., `()`) to have empty lists of arguments * Replace the `Null` literal term with `()` Package updates * Default to c++17, rather than c++11 * Restructure library to avoid name conflicts with pre-existing packages * Replace Perl nexus with Python nexus and remove Perl dependencies Better error messages and logs * Resolve "shit output" error message (map index to export name) * Tidy up the verbose diagnostics * Print general and concrete types for typecheck with -r option * Add multiple levels of verbosity (quiet by default) Bug fixes * Typechecking bug in record access * Fix bug allowing undefined things in module export lists * Fix cousin module imports * Fix unparameterized (un)packer serialization * Fix error raised when a module exporting a type is compiled * Fix out of order record fields in nexus output 0.40.0 [2023.02.04] ------------------- * Infer types of records * Fix bug in concrete type inference * Fix bugs in foreign higher order function code generation * Simplify generator code * Add many tests 0.39.0 [2023.01.03] ------------------- * Add compose operator * Allow eta-reduction 0.38.0 [2022.12.23] ------------------- * Choose casing convention * camel case for terms (for now, underscore is illegal) * pascal case for types * Fix sub-module handling * Fix import/export of type definitions * Better error messages for import/export errors * Somewhat formatted `typecheck` subcommand output * Add option to typecheck backend (concrete types and language selection) 0.37.0 [2022.12.11] ------------------- * Remove extra space printed at the end of R JSON * Clarify error message for missing exports * Clarify error message for missing concrete signature * Fix exponential time bug in parser * Allow prime characters in names after first position * Allow '.' to separate namespaces in imports/modules * Fix infinite loop bug when module name != import name 0.36.0 [2022.02.17] ------------------- * Separate reals from integers * Remove global haskell extensions from package.yaml 0.36.0 [2022.02.17] ------------------- * Separate reals from integers * Remove global haskell extensions from package.yaml 0.35.0 [2021.10.24] ------------------- Where scoping and a total architecture refactor * Fix handling for generic parameterized types * Improve whitespace handling * Statements are order invariant * Thread link from expression to source expression down to generators * Typecheck over final abstract syntax trees rather than expressions * Separate general and concrete typechecking * Pretty instances for all data types * More testing * Agonized over deep and wide structures 0.34.0 [2021.03.05] ------------------- * Add handling for C++ float primitives * Let C++ programs be imported through a header and shared library * Remove semicolon requirement * Add hie.yaml for compatibility with hsl * Update dependency set to LTS-17.4 * Add subparsers to CLI with pcapriotti/optparse-applicative * Remove brace requirement for modules and `where` statements * Add `-o` option to compiler to specify output executable names * Acceptable syntax error messages 0.33.0 [2020.11.03] ------------------- First hackage release * Haddock documentation * Update README * In help statements write universal, not concrete, types * Make default containers non-existential (probably a bad decision?) 0.32.0 [2020.11.01] ------------------- * Add record/table field access * Fix JSON handling in nexus * Fix nexus bug necessitated escaping quotations and braces * Print general types in nexus help * Resolve most GHC warnings 0.31.0 [2020.10.29] ------------------- * Fix anonymous records in C++ * Distinguish 'record', 'object', and 'table' * Add object handling * Add table handling 0.30.0 [2020.10.23] ------------------- * Add `object` keyword for defining record types * Add full record serialization handling (C++, py, R) 0.29.0 [2020.10.21] ------------------- * Add AST directed (de)serialization framework * Add type constructors for parameterized types 0.28.0 [2020.10.12] ------------------- * Allow import/export of type aliases * Refactor with DAGs all through the parser and typechecker 0.27.0 [2020.10.04] ------------------- * Add systematic tests for data serialization * Fix bug in C++ serialization * Move to serialize to dedicated libraries that require no import 0.26.0 [2020.09.27] ------------------- Add `type` keyword for defining type aliases 0.25.0 [2020.09.26] ------------------- No explicit forall. Instead use Haskell convention of generics being lowercase and non-generics being uppercase. * no more explicit "forall" * generics are lowercase in type signatures * non-generic types are uppercase * normal functions are lowercase * class constructors are uppercase (though handling for this is not yet implemented) 0.24.0 [2020.09.22] ------------------- Allow integration of many instances 0.23.0 [2020.05.14] Bug fixes and code cleanup Bug fixes / tests - [x] [x] github issue #7 - new Var=> typechecking rule - [x] [x] github issue #9 - rewire container type inference - [x] [x] github issue #10 - [x] [x] github issue #11 0.22.0 [2020.04.28] ------------------- Implement a schema-directed composable serialization system Major changes * Fully composable serialization over containers and primitives * Improved C++ support of generic functions * Record support for R and Python3 (not C++ yet) * Refactor generator - replace old grammar system * Allow arguments to be passed to general functions (e.g., `foo x = [x]`, where no specific language is needed) Minor changes * change default python3 interpreter from "python" to "python3" * add default library and tmp paths to config handler * test composable serialization functions in all supported languages * allow wrapped comments in R Testing - grammar directed testing * test record handling * remove and replace out-of-date golden tests * systematic argument handling tests * systematic manifold form tests * systematic interop testing 0.21.0 [2020.03.31] ------------------- Major - add handling and test for many many corner cases * Allow export of data statements * Allow export of non-functions * Allow functions with containers at the root * Allow export of 0-argument functions Minor * proof-of-concept composable serialization functions in C++ (cppbase) * add python tests * make the test output look pretty (no weird whitespace) 0.20.0 [2020.03.23] ------------------- * Add composable default types 0.19.1 [2020.02.22] ------------------- * bug fixes 0.19.0 [2020.02.20] ------------------- Major changes * Allow currying * Add realization optimizations * Refactor generator into series of clear transformations * Added handling for dealing with ambiguous ASTs Minor bug fixes and updates * Prettier code generation for C++, Python and R * More detailed comments in generated code * Allow tags on parenthesized types * Fix bug in functions with multiple parameters * Fix bug preventing loading of package metadata 0.18.1 [2019.11.08] ------------------- * Fix travis * Use C++11 for C++ builds * Make .morloc/config optional * Fix bug in parsing unit type: `()` 0.18.0 [2019.11.04] ------------------- * Add bidirectional type system * Allow parameterized concrete types * Allow higher-order functions * Allow properties to contain multiple terms * Add many tests * Add module system * Allow non-primitive types in lists, tuples, and records * Removed arq and SPARQL dependency (very fast compilation) 0.17.4 [2019.06.29] ------------------- * Add C and C++ handling * Define Ord intance for MTypeMeta * Allow pools to be called as executables * Add type handling to generators * Remove redundant SPARQL queries (better performance) * New RDF list semantics * Use strings to represent concrete types (e.g. "char\*") * Write pretty-printed diagnostic files to `$MORLOC_HOME/tmp` * Handling for multiple concrete type signatures (e.g., definition of a function in multiple languages). * Handling for multiple abstract type signatures * Handling for multiple function declarations 0.17.3 [2019.06.14] ------------------- * Partial C support - execution of sourced functions - no composition - no foreign calls * Partial transition to typed generators - bound arguments are still not typed correctly * Use integer IDs to identify manifolds in pools and the nexus (can to make calls between them) instead of long, mangled names. * Replace string names of languages (e.g., "python") with a sum type. 0.17.2 [2019.05.05] ------------------- Pycon release 0.17.1 [2019.04.26] ------------------- * Fix output serialization in generate code * Fix module linking in generated code 0.17.0 [2019.04.16] ------------------- * Add morloc home * Load modules from `$MORLOCHOME/lib` * Create monad stack 0.16.2 [2018.03.05] ------------------- * Add Zenodo badge making the project citable * Move to `morloc-project/morloc` github repo 0.16.1 [2018.09.24] ------------------- Minor release consisting of internal refactoring * Pruned unnecessary code * Pruned unnecessary imports * Compliance with stricter compile flags 0.16.0 [2018.09.14] ------------------- * Write RDF bools in lowercase ("true", rather than "True"), as per specs * Stricter node typing (replace ad hoc names with elements from an ADT) * Add very rudimentary typechecking * Remove SPARQL server dependency (now there's a sluggish Jena dependency) 0.15.1 [2018.09.10] ------------------- * Add error handling and reporting to pools * Add type signature comments to generated pools * Richer internal data structures 0.15.0 [2018.09.05] ------------------- * Generalize code generators using grammar records * Add Python compatibility * Replace unit tests with golden tests * Use docopt and USAGE template for argument handling * Report number of arguments in nexus usage statements