view etc/ROADMAP.md @ 33532:5157dd5a6c9a default tip

exp. term. widget: allow running files from editor and file browser * main-window.cc (run_file_in_terminal): if using experimental terminal widget, emit the related signal for executing a command in the widget instead of using the command-editor
author Torsten Lilge <ttl-octave@mailbox.org>
date Sun, 05 May 2024 11:30:05 +0200
parents 82ae00b40c2c
children
line wrap: on
line source

Octave Roadmap (version 10 onwards)

This roadmap is intended to be a living document, and serves multiple purposes:
* For developers to agree on activities and large-scale features,
* To decide priorities,
* To inform new contributors where they can contribute and feel ownership,
* To allow easier parcelling of smaller activities into GSoC etc,
* To be a transparent basis for any financial decisions to spend project money.

This document is different from a wishlist of features, such as those
present on the Octave wiki, in that this document lists names of people
willing to work on specific activities, whether they are contributors writing code
themselves, or existing Octave maintainers soliciting / reviewing / accepting code
from new contributors.

* For new contributors, this is a way to get your contribution
reviewed and merged into the Octave codebase with more confidence, and a way
to work with a more experienced Octave developer on a named activity so you too
can become an Octave developer over time.

* For existing maintainers, this is a way to get new developers and
contributors in, which helps Octave development scale.

If you want to take ownership of some activity below, or create a new activity,
please edit the list as necessary, add your name, and post about it on Discourse.
If you can, please split up a large activity into smaller pieces that can then
be specifically written by new contributors, GSoC interns, etc. The aim is to
allow anyone to jump in to start contributing to a topic.

This roadmap process starts from Octave 10. As has been the practice for many
years, a major version of Octave is released each year, and no single feature
will be "required" for any given version to be released, but it is good to have
target versions for this list of features so that certain long-pending activities
get more priority.

- Better support for classdef. (LEAD?)
  - Matlab-compatible classdef behavior.
  - (Needs to be split up into smaller activities.)
  - Target: Octave 10.

- HDF5 compatibility with Matlab: (LEAD?)
  - Deprecate Octave's native savefile formats in favor of Matlab-compatible HDF5.
  - Decide how to handle backwards compatibility with older savefiles.
  - Needs h5read/h5write as well as v7.3 MAT-file load/save support.
  - Influenced by classdef decision above.
  - Note: Examine Nelson's implementation.
  - Target: Octave 10.

- String class "foo" as distinct from array of characters 'foo'. (LEAD?)
  - See https://octave.discourse.group/t/implementation-of-a-string-class/1089
  - Depends on HDF5.
  - Note: Examine Nelson's implementation.
  - Target: Octave 10.

- Dictionaries (aka associative arrays / hashmaps).  (LEAD? GUILLAUME?)
  - See https://octave.discourse.group/t/adding-hashmaps-to-octave/3306
  - Depends on HDF5 and string.
  - Target: Octave 10.

- Release bytecode interpreter.  (PETTER, JWE)
  - First question: When Octave is released with the bytecode interpreter,
    will it *replace* the tree-walker or will it sit alongside it? Once that
    question is answered and agreed upon, these activities follow.
  - Behavior compatibility with tree-walking interpreter.
  - Code clarity and documentation.
  - Style check.
  - Performance experiments.
  - Target: Octave 10

- New command window widget.  (LEAD?)
  - In Octave 9, this widget is available but experimental. It can be invoked
    with the runtime argument `--experimental-terminal-widget`. To make it
    production quality (i.e., not experimental), the following features and
    more need to be added:
    - readline-like command line editing: recall history with up/down arrow keys
    - capture output written to stdout/stderr
    - a pager to enable `more on` to work
    - search the contents of the command window
    - clear the command window for `clc`
  - Background: https://wiki.octave.org/GUI_terminal_widget
  - Discussion: https://octave.discourse.group/t/new-command-window-widget/501
  - Target: Octave 11

- Graph theory routines (ARUN)
  - These need a full overhaul and in some cases ground-up implementation.
  - Matlab switched to graph objects some versions ago, as opposed to the
    traditional approach (pre-2016) of directly manipulating adjacency matrices
    and edge lists.
  - Octave needs to implement / import many classical graph functions
    (e.g. all-pairs shortest paths, transitive closure, betweenness centrality, etc).
    These are not difficult to write, but have mostly been written by end users
    for their own work, so the first effort is to converge on a usable function API.
  - Possible dependency on HDF5 if graph classes are written as classdefs,
    so graph objects will not be saved until then, but the rest of the
    development can start and proceed.
  - Target: Octave 10-11, potential GSoC project for 2024.

- Argument blocks implementation. (LEAD?)
  - Some work has already been done, but needs to be completed.
  - Target: Octave 11.

- Assess OpenGL role and improvements.  (RIK?)
  - May possibly need a paid consultant.
  - Target: Octave 11

- Replace GLPK with more performant solver for LP / MILP. (ARUN)
  - Candidate: HiGHS.
  - More generally, provide a usable API for optimization routines so that
    users can drop in their own favorite solver. The idea is that the user
    should be able to switch backend solvers with just a simple change
    like changing this:
    `linprog (... , "solver", "glpk")`
    to this:
    `linprog (... , "solver", "highs")`
    without changing any other user-written code. Can this sort of thing
    be done properly so that new solvers are easy to add to Octave by their
    respective authors?
  - Target: Octave 11