Skip to content

Road Map

Tim Atherton edited this page Feb 16, 2023 · 44 revisions

This page describes some of the features we're planning for future releases.

Next major version (0.6.0)

Areas of focus

  1. Error Handling
  2. Language Features
  3. Debugger
  4. Performance
  5. Geometry
  6. Interface
  7. Code cleaning
  8. Morphoview improvements

Error Handling

  • User-defined error handles.
  • Raising errors from within user code.
  • try...catch to handle errors from within user code.
  • Improve re-entrant use of the VM with respect to errors.

Language Features

  • Variadic arguments in user code such as fn foo(a,b... , option = 1) where b is a variadic argument. The argument b would work like a list in user code.
  • Improve Array implementation.
  • List and Array slices using Range objects.
  • Mutually recursive functions
  • Support for Complex Numbers
  • Improve import
  • Mixins [class ... is ... with]

Debugger

  • Properly support modules
  • Single stepping
  • Set and remove breakpoints
  • Print expressions
  • Set expressions

Performance

  • Profiler.
  • Parallelization of force and energy calculations.
  • Low-level tuning of the VM
    • Test performance of redesigned instruction set eliminating constant flags.
    • Alternative call procedure to reduce register wipes.
  • Optimizer
    • Various code transformations
  • A System class.

Geometry

  • Mesh pruning.
  • Support for volume integration
  • A mesh generator
  • Delaunay triangulations

Code cleaning

  • Improve code modularity by defining new objects types through a common interface. This would simplify object.c considerably

Morphoview improvements

  • Text support.
  • Improved graphics module to support text

Future versions

  • Support for multiple types of element and discretization.
  • Provide orientation information for meshes
  • Stability eigenanalysis
  • GPU accelerated algorithms.
  • Sub-virtual machines, promises etc.
  • Multiple dispatch.
  • Multiple return values.
  • Switch statements (maybe?)
  • Map/table/sum (maybe?)
  • Improvements to Linear Algebra [complex matrices, additional Sparse formats etc.]
  • Support for Multivector arithmetic.
  • Permit compilation with alternative libraries such as Librsb Intel math kernel libraries and PetSc.
  • Jupyter interface.
  • Interface debugger with VSCode.
  • A more modular integrator.
  • Dynamically linked extensions compiled in C, loaded with import and compiled with headers.
    • libcurl
    • zeromq
    • Transpile morpho functions to C and dynamically bind.
  • Package versioning
  • Simple package manager
  • Plotting library; More sophisticated graphics.
  • 2D plots
  • VR integration in morphoview
  • Morphoview interactivity. In order to do this, morpho must link with morphoview over ZeroMQ
  • More control over shading. Ability to choose per vertex (interpolated) or per element (flat) shading.
  • Improved optimizer
    • Conversion of method calls to function calls where the class is unambiguous
    • Moving properties to slots to avoid dictionary lookup
    • Additional opcodes, e.g. test-and-branch instructions to improve performance
Clone this wiki locally