The core processing functions of each program (and all libraries) are written mostly with the basic ISO C90 standard. We do make lots of use of the GNU additions to the C language in the GNU C library267, but these functions are mainly used in the user interface functions (reading your inputs and preparing them prior to or after the analysis). The actual algorithms, which most scientists would be more interested in, are much more closer to ISO C90. For this reason, program source files that deal with user interface issues and those doing the actual processing are clearly separated, see Program source. If anything particular to the GNU C library is used in the processing functions, it is explained in the comments in between the code.
All the Gnuastro programs provide very low level and modular operations
(modeled on GNU Coreutils). Almost all the basic command-line programs like
rm on GNU/Linux operating systems
are part of GNU Coreutils. This enables you to use shell scripting
languages (for example, GNU Bash) to operate on a large number of files or
do very complex things through the creative combinations of these tools
that the authors had never dreamed of. We have put a few simple examples in
for example, all the analysis output can be saved as ASCII tables which can be fed into your favorite plotting program to inspect visually. Python’s Matplotlib is very useful for fast plotting of the tables to immediately check your results. If you want to include the plots in a document, you can use the PGFplots package within LaTeX, no attempt is made to include such operations in Gnuastro. In short, Bash can act as a glue to connect the inputs and outputs of all these various Gnuastro programs (and other programs) in any fashion. Of course, Gnuastro’s programs are just front-ends to the main workhorse (Gnuastro library), allowing a user to create their own programs (for example, with BuildProgram). So once the functions within programs become mature enough, they will be moved within the libraries for even more general applications.
The advantage of this architecture is that the programs become small and transparent: the starting and finishing point of every program is clearly demarcated. For nearly all operations on a modern computer (fast file input-output) with a modest level of complexity, the read/write speed is insignificant compared to the actual processing a program does. Therefore the complexity which arises from sharing memory in a large application is simply not worth the speed gain. Gnuastro’s design is heavily influenced from Eric Raymond’s “The Art of Unix Programming”268 which beautifully describes the design philosophy and practice which lead to the success of Unix-based operating systems269.
Gnuastro uses many GNU additions to the C library. However, thanks to the GNU Portability library (Gnulib) which is included in the Gnuastro tarball, users of non-GNU/Linux operating systems can also benefit from all these features when using Gnuastro.
Eric S. Raymond, 2004, The Art of Unix Programming, Addison-Wesley Professional Computing Series.
KISS principle: Keep It Simple, Stupid!