Releases: metaindu/MetaphysicsIndustries.Solus
Evaluators
What's Changed
- New Evaluator framework: By far the most significant change is the new way expressions are evaluated. The
Expression
class hierarchy no longer has anEval
method. Instead, evaluation is performed by classes implementingIEvaluator
which are responsible for the details of evaluation. There are currently two evaluator classes:BasicEvaluator
, which includes all of the straight-forward evaluation code previously emplyed by the expression classesCompilingEvaluator
, which converts an expression into a .NET dynamic method composed of CIL intsructions, and executes that
SolusEnvironment
has been re-worked to have a unified namespace. Variable names can now refer to a value, a function, or a macro; the different kinds of objects don't have separate namespaces. Commands have been separated from the environment completely. Environment objects also have a parent/child mechanism.- In line with the above, the parser has been cleaned up considerably. It no longer resolves variable or function names before returning an expression tree to the caller. Also, function calls and component accesses can now be intermixed.
- There is a new value and expression types to represent intervals
- The library now targets multiple .NET/dotnet framework versions, instead of just 4.0.
Merged PR's
- Intervals by @izrik in #27
- Evaluator by @izrik in #28
- Unified namespace by @izrik in #29
- Clean up parsing by @izrik in #30
- Evaluator 2 storage and aggregate ops by @izrik in #31
- Evaluator 3: Split the tests into separate files. by @izrik in #32
- Evaluator 4: Duplicate the tests for the new functions. by @izrik in #33
- Evaluator 5: more storage and aggregate op improvements by @izrik in #34
- Evaluator 6: clean up component access by @izrik in #35
- Evaluator 7: fold eval into evaluator by @izrik in #36
- Evaluator 8: fold functions into evaluator by @izrik in #37
- Evaluator 9: fold macros into evaluator by @izrik in #38
- Eval to fixed length vector by @izrik in #39
- Evaluator 10: re-org by @izrik in #40
- Evaluator 11: Compiling evaluator by @izrik in #41
- Evaluator 12: IlExpression by @izrik in #42
- Evaluator 13: Nascent Method by @izrik in #43
- Evaluator 14: Clean up instructions by @izrik in #45
- Evaluator 15: Branching by @izrik in #46
- Evaluator 16: Locals and Params by @izrik in #47
- Evaluator 17: Tests by @izrik in #48
- Evaluator 18: Expression checker by @izrik in #49
- Evaluator 19: More expression checking by @izrik in #50
- Evaluator 20: Component access for tensors by @izrik in #51
- Evaluator 21: tensor expressions by @izrik in #52
- Evaluator 22: Function arg checks by @izrik in #53
- Evaluator 23: Component access for strings by @izrik in #54
- Evaluator 24: Re-org by @izrik in #55
- Evaluator 25: moar functions by @izrik in #56
- Evaluator 26: Re-work how variables are used by @izrik in #57
- Evaluator 27: clean up by @izrik in #58
- Evaluator 28: User-defined functions by @izrik in #59
- Evaluator 29: Intervals and misc fixes by @izrik in #60
- Disable CI by @izrik in #61
- Dotnet by @izrik in #62
- Update dotnet.yml by @izrik in #44
- Prep release by @izrik in #63
Full Changelog: v0.8...v0.9
Interrogation and performance improvements
This release adds a new feature to interrogation. Interrogees can now return null
to any question, which indicates that the answer is unknown, not applicable, or in some other way not available. For example, calling GetDimension
on a scalar wouldn't make sense, so that will now return null
. This release also includes a few minor improvements to memory usage, in an effort to reduce the number of memory allocations during evaluation.
What's Changed
Full Changelog: v0.7...v0.8
Expression and function interrogation
The release adds initial support for interrogation, the ability to discover information about a particular object without having to evaluate anything. The goal is to be able to make assertions about an object, such as what kind of object it is (number, vector, string, etc), what properties it has (tensor rank, dimensions, "is divisable by"). This would be very useful in making "type assertions" or "property" assertions about the arguments to a function, for example.
Vector and Matrix evaluation
This release adds proper implementations for the VectorExpression.Eval
and MatrixExpression.Eval
methods, so that they return non-scalar values.
Re-work commands and environment
This release makes changers to the internal API. The changes will be visible to assemblies that consume MetaphysicsIndustries.Solus
as a dependency, but do not affect users of soluscli
. In particular, commands are separated from the SolusEnvironment
, as they don't typically change over time. Also, command objects are no longer instantiated by the parser; the parser instead instantiates data objects that are then passed to the command objects. The SolusEnvironment
class has been redesigned so as to be more usable to inheriting classes.
Math object, redo
The previous release had a problem when uploading to nuget.org. This is a re-release of that one.
This release adds support for evaluating expression that result in things other than scalar numbers. In particular, support has been added for strings, vectors, and matrices, including syntax for specifying literal (x := [1,2,3]
) and accessing components (x[2]
). This release includes a new load_image
function that reads an image from disk and treats it as a matrix. This release also includes a lot of testing and some improved error handling.
Math object, etc
This release adds support for evaluating expression that result in things other than scalar numbers. In particular, support has been added for strings, vectors, and matrices, including syntax for specifying literal (x := [1,2,3]
) and accessing components (x[2]
). This release includes a new load_image
function that reads an image from disk and treats it as a matrix. This release also includes a lot of testing and some improved error handling.
Commands
This release introduces the ability in the repl to execute commands. In the previous version, the repl would only evaluate expressions. The new changes allow the repl to run help
, vars
, and delete
commands, as well as assign variables and functions using a :=
operator. There were some macros for managing variables, called assign
and delete
. Those still work, but the new mechanisms are a bit more flexible.
Initial release
This is the first official release. Of note, recent improvements include a change of license, use of nuget
packages for dependencies, and early support for handling strings.