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
- 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-dependenciesfield to package.yaml for pinning module hashes - fix typechecking for aliases of numeric literals
- bug fixes in let/do-block code gen
- 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
Intvariable 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
- 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?)
- add
morloc-manager new --include <path>src:dest syntax - make stderr/stdout mim principles more consistent
- cleaner morloc-manager
- fixed --print bug in nexus
0.79.1-5 [2026-04-19]
- lot's morloc-manager updates
- add @datafile intrinsic for finding installed files
- default to including all files when installing
- parse
.morlocignoreto find non-install files - allow
includein package.yaml for strict file inclusion
- parse
- add
morloc-manage doctorsubcommand for health checks - add additional
freeze/unfreezevalidation - fix unfreezing bugs
- 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
- resurrected
morloc-manager logsubcommand
- many many deployment fixes
- fix docstring groups
- add module docstrings
- fix bug in unfreeze
- allow effectful final do-notation statements
- lots of bug fixes
- make changelog version source of truth
- unify morloc-manager env, workspace, and version
- allow docstrings before declarations
- allow literal leading spaces in docstrings
- allow escaped
<word>:syntax
- fix @load error on missing file
- fix error reporting on failed
morloc-manager install
- fix unicode support in comments and literal strings
- many fixes to the morloc-manager
- port morloc-manager to rust
- fix portability for libmorloc and morloc-nexus on darwin and linux-arm64
- python flushing face condition
- port libmorloc and morloc-nexus from C to Rust
- port morloc-manager from shell to Haskell
- share it as a static binary
- remove explicit universal quntifiers
- before:
id a :: a -> a - now:
id :: a -> a
- before:
- add
morloc uninstall --alloption - do not require repeated
letterms
- add missing Nat kind annotation to root modules
- better test coverage of Nat kinds
- add
morloc uninstall --alloption - add
stdlibmodule that simplifies recursive install of everything
- 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
- no more
- inline when packet data is smaller than 65kb
- this avoids fragmenting the shared memory with many small single-use values
- fix propagation of errors from crashed pools
- fix shm memory alignment (inefficiency on x86, crashes on ARM)
- add
--sanitizeoption tomorloc initfor strict memory - replace megaparsec with parsec
- fix label and remote handling
morloc evalfor 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
- replace thunks with more granular effect system
- add intrinsics
- disambiguate local module imports
- change null to Null
- add optionals with implicit coercion
- for
?Strwithliteral: true, forcedefault: null - add daemon args to nexus
- term recursion support
- conditional guards
- nexus pretty printing option (-p/--print)
- print defaults in usage statements
- more bug fixes
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 --buildoption for installing both executable modules - add
morloc uninstall - add
morloc listwith -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 typecheckoutput - 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
- 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 installdeletion 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
- 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
- fix record docstring inheritance
- fix minor bug optional versus positional
- fix minor bug in record unrolling
- 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
- minor bug fixes
- 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 "."
New file organization
- Change file layout to conform to XDG spec;
replaced
~/.morlocwith~/.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 moduleroot@hash:abcdef1234- specific core instanceroot@tag:v1.0.0- specific tag/versioncodeberg:weena/calendar@hash:abcdef1234- 3rd party with source and ref
- Support for install of local modules
- Bug fixes
- 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
- Enforce lowercase module name rule
- Fix handling of executable file name option
- Fix record handling
- Fix pickle bug in Python multiprocessing
- Replace asprintf non-standard C function
- Partially fix interop for C structs
- Fix bug in unqualified imports
- 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
- Fix bug in parameterized type definition concrete type inference
- Improve container instructions in README
- Fix all README examples
- Make Dockerfiles more portable
- Fix bug in implicit typeclass instance inheritance
- Fixed unnecessary copying in C libs
- Fixed double let-binding in code gen
- Replace C daemon forking with thread pooling (4X speedup)
- Fix bugs related to 0-length array memory allocation
- Fix handling of empty vectors
- Fix bug in JSON parsing
- Update containers
- Update github actions
- Fix bug in type scoping (sort of)
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
futureparallelism scheme with builtinparallellibrary
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
morloccommands now return proper exit codes
- Add python native bytes and bytearray support
Type evaluation and specialization
- Delayed general alias evaluation
- Add strict numeric types (
int8,uint8,int16etc) - 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, andset(I know, they're a tad different) - Add Python support for
numpyvectors 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)
- Do not catch STDOUT and STDERR
- Fix NULL return errors
- Fix container setup
Shared memory
- Allow processes to communicate through shared memory
Setup
morloc initcommand will now build themorlocecosystem, writing all required headers tomorlochome 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
Better installation
morloc install --commit 45d8df12- for github retrieval by commit hashmorloc install --branch dev- to retrieve latest from specific branchmorloc install --tag 0.1.0- to retrieve specific tag
Better containers
- Use podman rather than docker in Makefile
morloc-tiny:<version>- everything needed to compile morloc projectsmorloc-full:<version>- an environment for running projects
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 initcommand to configure morloc ecosystem
Second PeerJ submission (after return by editor for technical reasons)
- Made type parameters explicit as type arguments:
id a :: a -> arather than either ofid :: a -> aid :: forall a . a -> a. - Pass-by-reference in generated C++ code
- Simplify generated C++ code by using function template arguments rather than type casting.
- 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
First PeerJ submission
- Add value checker
- Raise error when implementations have equal score (no arbitrary choice)
- Fix precedence of '@' operator - it binds tightest
- Update flu demo
- Fix github actions
- Fix Dockerfile
- Address all compiler warnings
- 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
Add support for ad hoc polymorphism.
- Support sources and declarations in classes
- Support multiple parameters
- Support overlapping instances
- Packers are now implemented through the
Packabletypeclass
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?)
New features
- Allow a module to explicitly export packers
- Show pool pseudocode for
typecheck -r - Add
typecheck dumpsubcommand 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
- 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
- For
ForeignInterfaceMconstructor of ExprM, store the full call type, not just the return type - Parameterize
ExprMwith the type type (e.g.,Maybe TypePorTypeM) - Replace
ArgumentandPreArgumentwith a parameterizedArgtype. - Fix broken
ForeignInterfaceMandPoolCallMcases intypeOfExprM - Refactor backend
Testing and documentation:
- Complete flu demo - it builds now, just need to implement the library code for align and other functions.
- Print nothing if "null" is returned
- Fix the import of working directory modules
- Resolve bug in occur check
- Streamline github actions script
- Fix
morloc installpath download for core modules - Raise type error for untyped concrete term
- Fix bug in concrete type synthesis
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
Nullliteral 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
- 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
- Add compose operator
- Allow eta-reduction
- 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
typechecksubcommand output - Add option to typecheck backend (concrete types and language selection)
- 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
- Separate reals from integers
- Remove global haskell extensions from package.yaml
- Separate reals from integers
- Remove global haskell extensions from package.yaml
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
- 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
wherestatements - Add
-ooption to compiler to specify output executable names - Acceptable syntax error messages
First hackage release
- Haddock documentation
- Update README
- In help statements write universal, not concrete, types
- Make default containers non-existential (probably a bad decision?)
- 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
- Fix anonymous records in C++
- Distinguish 'record', 'object', and 'table'
- Add object handling
- Add table handling
- Add
objectkeyword for defining record types - Add full record serialization handling (C++, py, R)
- Add AST directed (de)serialization framework
- Add type constructors for parameterized types
- Allow import/export of type aliases
- Refactor with DAGs all through the parser and typechecker
- Add systematic tests for data serialization
- Fix bug in C++ serialization
- Move to serialize to dedicated libraries that require no import
Add type keyword for defining type aliases
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)
Allow integration of many instances
0.23.0 [2020.05.14]
Bug fixes and code cleanup
Bug fixes / tests
- [x] github issue #7 - new Var=> typechecking rule
- [x] github issue #9 - rewire container type inference
- [x] github issue #10
- [x] github issue #11
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
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)
- Add composable default types
- bug fixes
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
- Fix travis
- Use C++11 for C++ builds
- Make .morloc/config optional
- Fix bug in parsing unit type:
()
- 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)
- 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
-
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.
Pycon release
- Fix output serialization in generate code
- Fix module linking in generated code
- Add morloc home
- Load modules from
$MORLOCHOME/lib - Create monad stack
- Add Zenodo badge making the project citable
- Move to
morloc-project/morlocgithub repo
Minor release consisting of internal refactoring
- Pruned unnecessary code
- Pruned unnecessary imports
- Compliance with stricter compile flags
- 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)
- Add error handling and reporting to pools
- Add type signature comments to generated pools
- Richer internal data structures
- 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