Releases: sourceryinstitute/dag
3.0.1 Fix example and improve documentation
This release works around a gfortran
bug that prevented correct execution of example/read-from-json.f90, adjusts the README.md accordingly and fixes some broken links or outdated information in README.md.
What's Changed
Full Changelog: 3.0.0...3.0.1
3.0.0 Update dependencies
This release updates the DAG dependencies, including one breaking change: replacing jsonff with rojff.
What's Changed
- Routine Maintenance by @everythingfunctional in #61
Full Changelog: 2.1.1...3.0.0
Remove non-conforming code
The 2.1.0 release introduced concurrent
in two places where it is disallowed by the Fortran 2018 standard. 🩹
For details, see PR #58
Concurrent topological sorting
This release provides a refactored topological_sort
function that
- Converts the internal subroutine
depth_first_search
to a function, which means 👀
a. all procedures in dag are now functions except Vegetable'srun
subroutine in the test suite 💯
b. every function ispure
except those that call jsonff (which was already true before this release). ❄️ - Use the resulting clarity in information flow to eliminate several unnecessary local variables, ℹ️
- Changes several remaining local declarations to associations, which 🎏
a. avoids unnecessary temporary copies and ©️
b. prevents some potential uses of uninitialized variables (none were present). 😨 - Converts
do
loops todo concurrent
, opening opportunities for future optimization 🚀 via
a. vectorization, 🏹
b. multithreading, or 🧵
c. GPU acceleration. 🎮
Bugfix for elemental vertex getters
Fix a bug where the getters for vertex_t
were elemental, but returned a character with length equal to a component of the type. This would produce an array of characters with different lengths, which is not possible in Fortran. The fix is to return a varying_string
.
Functional programming interface, improved documentation, and new examples
This release refactors dag significantly and so that
- All type-bound procedures are functions with intent(in) dummy arguments.
- All type-bound procedures are pure except those that use jsonff. ❄️
- The examples demonstrate a pattern that liberates the user from thinking about vertex identifiers. 🗽
- FORD-style comments have been added or updated on each module, derived type, constructor, and type-bound procedure. 🚗
- The README.md file has been updated to reflect the changes and to show how to build serial and parallel versions of the library and how to run the new examples.
Vertex identifiers are no longer stored internally, but the interface still has something similar: the user designates dependencies by passing each dependency's position in the vertex_t
array that is the lone argument of the component-wise dag_t
constructor. 🥪 Two programs in the example
subdirectory show how to discover the positions automatically by passing a character array of vertex names to findloc
. 🔍
Fixes and documentation update
Fixes
- Update the jsonff dependency,
- Switch from the sourcery dependency to the assert dependency, and
- Remove a ford bug workaround.
Documentation Update
Generating HTML documentation now requires ford 6.1.1.
Add get_num_vertices
This release adds a new type-bound procedure for getting the number of vertices in a dag
.
New build system, test harness, unit tests, documentation, assertions, and JSON I/O
Changes since the original fork of daglib:
- Add a build system and test harness automated by fpm, 🏗️ 🧪
- Add unit tests written with Vegetables, 🥔 🥒 🍚 🍈 🍆
- Add continuous-integration testing and documentation deployment via GitHub Actions,
- Generate documentation by FORD,
- Runtime assertion-checking using Sourcery, and 🎩 🐇
- JSON file input/output using jsonff.