JWE Project Ideas: Difference between revisions

From Octave
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
<!-- This file should be edited at https://wiki.octave.org/JWE_Project_Ideas -->
<!-- This file should be edited at https://wiki.octave.org/JWE_Project_Ideas -->


'''2021-11-19: This page is out of date -- jwe'''
The following are projects that I would like to work on, roughly prioritized by my level of interest.  I intend to provide expanded explanations for each of these items.


== Project Ideas ==
== Comment parsing ==
 
The following are projects that I'm interested in working on, roughly
prioritized by my level of interest.  I intend to provide expanded explanations of each project.
 
=== Comment parsing ===


Refactor comment handling in lexer and parser.
Refactor comment handling in lexer and parser.


=== MException object ===
== MException object ==


=== FTLK graphics widget ===
== FTLK graphics widget ==


Eliminate fltk graphics widget or move to external package.
Eliminate fltk graphics widget or move to external package.


=== gnuplot graphics widget ===
== gnuplot graphics widget ==


Eliminate gnuplot graphics widget or move to external package.
Eliminate gnuplot graphics widget or move to external package.


=== Function objects ===
== Function objects ==


Refactor function objects.
Refactor function objects.


=== arguments blocks ===
== arguments blocks ==


Finish implementation of Mmatlab-compatible argument validation blocks.
Finish implementation of Matlab-compatible argument validation blocks.


=== local functions ===
== local functions ==


Implement Matlab-compatible local functions in script files.
Implement Matlab-compatible local functions in script files.


=== string object ===
== string object ==


=== load_path class ===
== load_path class ==


Refactor (or rewrite) load_path class.
Refactor (or rewrite) load_path class.


=== Broadcasting ===
== Broadcasting ==


* Refactor broadcasting.
* Refactor broadcasting.
* Make broadcasting work for sparse matrices.
* Make broadcasting work for sparse matrices.


=== GUI command widget ===
== GUI command widget ==


Make common command widget for Windows and Unixy systems work well enough to become the default command line interface for the GUI.
Make common command widget for Windows and Unixy systems work well enough to become the default command line interface for the GUI.


=== OpenGL graphics ===
== OpenGL graphics ==


Modernize our use of OpenGL graphics to use shader programs instead of the legacy OpenGL API.
* Modernize our use of OpenGL graphics to use shader programs instead of the legacy OpenGL API.
* Scaling plot data values/ranges to fit in single-precision OpenGL values


=== classdef ===
== classdef ==


Refactor (or rewrite) classdef implementation.
Refactor (or rewrite) classdef implementation.


=== Qt graphics widget ===
== Qt graphics widget ==


Refactor (or rewrite) Qt graphics widget.
Refactor (or rewrite) Qt graphics widget.


=== graphics properties ===
== graphics properties ==


Refactor graphics properties classes.
Refactor graphics properties classes.


=== graphics threading issues ===
== graphics threading issues ==


Fix handling of graphics properties to be properly thread safe.
Fix handling of graphics properties to be properly thread safe.


=== HDF5 load and save ===
== HDF5 load and save ==


Implement Matlab compatible HDF5-based load and save functions.
Implement Matlab compatible HDF5-based load and save functions.


=== External editors ===
* Make the load and save commands compatible with Matlab's HDF5-based file format.  Matlab users expect this and we need something like this to support large arrays anyway.  As much as possible, the initial implementation should be written in Octave's scripting language and the proposed Low-level interface to HDF5 functions so that it can easily be updated and patched as needed while we are still working out the details.  Only later should we consider translating performance-critical parts to C++, and then, only if really necessary.
* Phase out Octave's own text and binary formats.  Too much effort is required to maintain the code to support all the various formats.
* Low-level interface to HDF5 functions.  Create a thin wrapper for the HDF5 library.  As much as possible, make it compatible with the [https://www.mathworks.com/help/matlab/low-level-functions.html Matlab interface to HDF5].  However, we may support newer functions (as of 2020/10/30, the list of Matlab functions appears to correspond to an older version of the library than is presently available in the HDF5 library itself) and support for legacy functions has a low priority.
 
== External editors ==


Make it possible to use external editors such as Emacs, vim, or others with the GUI in addition to Octave's built-in code editor.
Make it possible to use external editors such as Emacs, vim, or others with the GUI in addition to Octave's built-in code editor.


=== who -file ===
== who -file ==


Fix who -file to just read file and list info, not create dummy scope.
Fix who -file to just read file and list info, not create dummy scope.


=== import ===
== import ==


Make "import" work in a matlab-compatible way ===
Make "import" work in a matlab-compatible way ==


=== Code quality ===
== Code quality ==


** Better and more complete use of C++ namespaces.
** Better and more complete use of C++ namespaces.
Line 101: Line 101:
** Complete use of dispatch types for functions (search for "classes:" to find the few current examples).
** Complete use of dispatch types for functions (search for "classes:" to find the few current examples).
** Tag for built-in functions to specify maxiumum number of inputs.
** Tag for built-in functions to specify maxiumum number of inputs.
== Windows distribution ==
Eliminate the following msys packages.  Some might be removed
entirely if they are unnecessary for running Octave or building
Octave Forge packages.  Otherwise, we should be building them from
source as we do all other tools and libraries that are distributed
with Octave.  The difficulty is that although the msys packges are
typically based on old versions of these packages, they sometimes
have fixes that are needed to allow them to run properly on
Windows systems.  Note also that we distribute a termcap library,
but the msys version of less depends on the msys termcap library.
* bash
* coreutils
* diffutils
* dos2unix
* file
* findutils
* gawk
* grep
* gzip
* less
* libcrypt
* libiconv
* libintl
* libmagic
* libopenssl
* make
* msys-core
* patch
* perl
* regex
* sed
* tar
* termcap
* unzip
* wget
* zip
* zlib

Revision as of 17:58, 27 March 2024


The following are projects that I would like to work on, roughly prioritized by my level of interest. I intend to provide expanded explanations for each of these items.

Comment parsing

Refactor comment handling in lexer and parser.

MException object

FTLK graphics widget

Eliminate fltk graphics widget or move to external package.

gnuplot graphics widget

Eliminate gnuplot graphics widget or move to external package.

Function objects

Refactor function objects.

arguments blocks

Finish implementation of Matlab-compatible argument validation blocks.

local functions

Implement Matlab-compatible local functions in script files.

string object

load_path class

Refactor (or rewrite) load_path class.

Broadcasting

  • Refactor broadcasting.
  • Make broadcasting work for sparse matrices.

GUI command widget

Make common command widget for Windows and Unixy systems work well enough to become the default command line interface for the GUI.

OpenGL graphics

  • Modernize our use of OpenGL graphics to use shader programs instead of the legacy OpenGL API.
  • Scaling plot data values/ranges to fit in single-precision OpenGL values

classdef

Refactor (or rewrite) classdef implementation.

Qt graphics widget

Refactor (or rewrite) Qt graphics widget.

graphics properties

Refactor graphics properties classes.

graphics threading issues

Fix handling of graphics properties to be properly thread safe.

HDF5 load and save

Implement Matlab compatible HDF5-based load and save functions.

  • Make the load and save commands compatible with Matlab's HDF5-based file format. Matlab users expect this and we need something like this to support large arrays anyway. As much as possible, the initial implementation should be written in Octave's scripting language and the proposed Low-level interface to HDF5 functions so that it can easily be updated and patched as needed while we are still working out the details. Only later should we consider translating performance-critical parts to C++, and then, only if really necessary.
  • Phase out Octave's own text and binary formats. Too much effort is required to maintain the code to support all the various formats.
  • Low-level interface to HDF5 functions. Create a thin wrapper for the HDF5 library. As much as possible, make it compatible with the Matlab interface to HDF5. However, we may support newer functions (as of 2020/10/30, the list of Matlab functions appears to correspond to an older version of the library than is presently available in the HDF5 library itself) and support for legacy functions has a low priority.

External editors

Make it possible to use external editors such as Emacs, vim, or others with the GUI in addition to Octave's built-in code editor.

who -file

Fix who -file to just read file and list info, not create dummy scope.

import

Make "import" work in a matlab-compatible way ==

Code quality

    • Better and more complete use of C++ namespaces.
    • Better use of C++ features. Especially standard library features as their implementation becomes more widely available. For example, we might be able to simplify some things in Octave by using the C++17 filesystem and special functions libraries, if they provide results that are at least as good what we are using now.
    • Eliminate C preprocessor macros where possible.
    • Use const in more parse tree functions.
    • remove, replace, or at least rename the "added static" concept in the symbol_record class.
    • Should not expose symbol_record in call_stack functions if possible.
    • Remove unused symbol_table/scope/record functions.
    • Do recursive functions work properly with load/save now?
    • Use enums for options internally (typically to replace bool values).
    • Audit global variables and eliminate them where possible.
    • Audit use of panic_* functions and replace with calls to error where possible.
    • Fix symbol visibility so we are mostly tagging namespace decls, not individual functions.
    • Complete use of dispatch types for functions (search for "classes:" to find the few current examples).
    • Tag for built-in functions to specify maxiumum number of inputs.

Windows distribution

Eliminate the following msys packages. Some might be removed entirely if they are unnecessary for running Octave or building Octave Forge packages. Otherwise, we should be building them from source as we do all other tools and libraries that are distributed with Octave. The difficulty is that although the msys packges are typically based on old versions of these packages, they sometimes have fixes that are needed to allow them to run properly on Windows systems. Note also that we distribute a termcap library, but the msys version of less depends on the msys termcap library.

  • bash
  • coreutils
  • diffutils
  • dos2unix
  • file
  • findutils
  • gawk
  • grep
  • gzip
  • less
  • libcrypt
  • libiconv
  • libintl
  • libmagic
  • libopenssl
  • make
  • msys-core
  • patch
  • perl
  • regex
  • sed
  • tar
  • termcap
  • unzip
  • wget
  • zip
  • zlib