NEURON 9.0 marks a major milestone with significant under-the-hood
updates. This release features a redesign of internal data structures
using the Structure-Of-Arrays (SoA) memory layout, replacement of
pointers by DataHandles that are automatically updated when internal
memory layout changes, migration of the
codebase and translation of MOD files to C++, and the introduction of
random number generator construct natively in the NMODL (and legacy but still default nocmodl) language.
Additionally, many legacy NMODL constructs have been removed, and legacy
code and libraries have been replaced with modern alternatives like
Eigen, ensuring improved performance and maintainability.
What follows are a selection of the ~1500 pull request squash/merge
commits to the master branch since
the start of the 9.0a tag on 17-07-2023
What's New
Use of SoA memory layout for internal data structures (#2027, #2381, #2712)
This is a prerequisite for adopting CoreNEURON GPU functionality natively into NEURON.
Replace pointers with DataHandles. DataHandles pointing to RANGE variables
always point to the correct value when memory is permuted or reallocated.
Support for random number generator language construct () in NMODL (#2627)
RANDOM
Replace pthread-based threading implementation with std::thread (#1859)
Introduce meaningful Python types: HOC classes associated with Python types (#1858)
Formalization of C API for NEURON (first version) (#2357, #3557)
Introduce nanobind to gradually replace C Python API usage (#2545)
Requires C++17 compiler and flex >= 2.6 (#1893)
CoreNEURON repository is merged into NEURON (#2055)
CoreNEURON report extensions (#3507, #3542)
Modern implementation of NMODL (eventually to replace the nocmodl MOD file translator) is merged into NEURON (#3333)
Support for numpy>=2 added (#3040)
Replace legacy Meschach source copy with Eigen library (#2470)
Breaking Changes
MOD files are compiled as C++ instead of C (see migration guide for VERBATIM blocks)
API changes in the functions related to random numbers, see #2618
Restored usage of TABLE statement in hh.mod, results are now same as 8.0.2 (see #1764)
NMODL: Disallow use of ion variable in the CONSTANT block (#1955)
NMODL: Disallow declaring variables and functions with the same name (#1992)
Usage of Eigen library could introduce floating point differences, but they are very small, validated and can be ignored
Removal / Deprecation
Removed HOC function parent_node (Issue 3571) (#3576)
Removed usage of legacy OS X carbon libraries (#1869)
Removed legacy LINDA code and Java bindings (#1919, #1937)