Implementation
SEGUL is a compiled, single executable, command-line application with no
dependencies. This version supports Windows (native and Windows
Subsystem for Linux), MacOS, and Linux. We provide a static executable
for old Linux distributions and a dynamically linked executable to GLIBC
(https://www.gnu.org/software/libc/) for more optimized
performance in newer Linux distributions. Users can install the
pre-compiled executable provided in the source code repository or
compile the application from the source code (see the Software
Availability section below). The latter installation method expands
SEGUL platform support to any operating system supported by Rust
(https://doc.rust-lang.org/nightly/rustc/platform-support.html).
The compiler also fine-tunes the resulting executable for the user’s
computer.
The GUI version is written in Dart using the Flutter framework. All
expensive computation uses the same Rust code base as our CLI and
library. The application is available in beta supporting Windows, MacOS,
iOS, iPadOS, and Android. We anticipate future support for Linux. The
current version is available to test using Apple TestFlight for iOS,
iPadOS, and macOS, and by downloading the application at the GitHub
repository page for other operating systems (see Software Availability
below). We expect to distribute the stable version via the official
store of each operating system, such as AppStore for iOS and PlayStore
for Android.
SEGUL is also available as a Rust library (called crates in the Rust
programming term), allowing developers to access SEGUL functions through
the application programming interface (API). For Rust, the installation
process is as easy as typing “cargo add segul” or by manually adding
segul as a dependency in the Rust cargo.toml file. The versality of the
Rust programming language and the performance of our library will be
attractive for usage in slower programming languages (e.g., Python and
R). For these languages, programmers can bind SEGUL via the C
programming interface. In R and Python, however, Rust support is growing
due its value for developing high-performance software without the
challenging aspects of C/C++ memory management models. Packages exist to
simplify the binding of Rust. In R, programmers can use rextendr
package; in Python, PyO3 is available. Python or R code can also
interact with the SEGUL CLI using the operating system process. While
SEGUL CLI is a single executable with no dependency, for published
software, interacting through SEGUL API yields a cleaner application
design and avoids common dependency issues, such as improper setup of
environment variables. We used a similar approach to develop the GUI
version. We provide more detailed instructions in our application
documentation (https://docs.page/hhandika/segul-docs/).