- Do not catch STDOUT and STDERR
- Fix NULL return errors
- Fix container setup
Shared memory
- Allow processes to communicate through shared memory
Setup
morloc init
command will now build themorloc
ecosystem, writing all required headers tomorloc
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
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 init
command to configure morloc ecosystem
Second PeerJ submission (after return by editor for technical reasons)
- Made type parameters explicit as type arguments:
id a :: a -> a
rather than either ofid :: 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.
- 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
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?)
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
- 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
ForeignInterfaceM
constructor of ExprM, store the full call type, not just the return type - Parameterize
ExprM
with the type type (e.g.,Maybe TypeP
orTypeM
) - Replace
Argument
andPreArgument
with a parameterizedArg
type. - Fix broken
ForeignInterfaceM
andPoolCallM
cases 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 install
path 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
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
- 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
typecheck
subcommand 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
where
statements - Add
-o
option 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
object
keyword 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/morloc
github 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