parent
38c832a8e2
commit
d257dac0c6
73
README
73
README
|
@ -1,20 +1,59 @@
|
|||
This project aims to produce at least a POSIX compliant sh replacement
|
||||
or even implement GNU bash. On top of that it also intends to make
|
||||
scheme available for interactive and scripting application. The
|
||||
approach also intends to allow capturing the intermediate scheme
|
||||
representation of the "original" shell script to offer a migration
|
||||
path away from [ba]sh. On top of this GNU make could similarly be
|
||||
replaced, as make turns out to be fraught with limitations and
|
||||
complexities. One of the features I personally desire is not be
|
||||
forced to keep doing what was done in the past, i.e. once an object
|
||||
file is produced, it does not have to be produced again as long as the
|
||||
original is kept around. The orignal must be replaced when any of its
|
||||
dependencies change (source, compiler options, linker, etc.)
|
||||
Gash --- Guile As SHell
|
||||
***********************
|
||||
|
||||
I feel that the shell has been instrumental on my path to embracing
|
||||
functional programming, however now I mostly experience that the
|
||||
language itselfs folds on functional expression, pun intended.
|
||||
Gash is a POSIX-compatible shell written in Guile Scheme. It provides
|
||||
both the shell interface, as well as a Guile library for parsing shell
|
||||
scripts. Gash is designed to bootstrap Bash as part of the Guix
|
||||
bootstrap process. We are planning to develop Gash into a
|
||||
general-purpose shell and tool for building interfaces between Scheme
|
||||
and the shell.
|
||||
|
||||
It is still early days for Gash. At the moment, Gash is extremely
|
||||
limited and extremely slow, so we cannot recommend using it as your
|
||||
shell. It does its bootstrapping job, and the parser works well for
|
||||
POSIX-compatible scripts, but that's about it.
|
||||
|
||||
* history flattened vs full, i.e. navigate interactively without
|
||||
redundancy vs export as script
|
||||
Installing
|
||||
==========
|
||||
|
||||
This package uses GNU Autotools for building and installing. For
|
||||
details on how to configure, build, and install it, see the file named
|
||||
'INSTALLING'.
|
||||
|
||||
If you have GNU Guix, you can skip all that and install the package
|
||||
by running:
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
Gash is designed to work with Guile versions as early as 2.0.9.
|
||||
|
||||
Normally, you should build Gash using 'configure' and 'make'.
|
||||
However, it can be built with nothing but Guile. There is an example
|
||||
of this in the file 'tests/bootstrap/bash-without-bash.scm'.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Gash includes a number of unit and integration tests that can be run
|
||||
using 'make check'. If you are using Guile 2.0.9, you will have to
|
||||
make SRFI 64 available to run the unit tests. To do this, you can
|
||||
copy 'module/srfi/srfi-64.scm' and the 'module/srfi/srfi-64' directory
|
||||
from a newer version of Guile into a directory named 'srfi' in the
|
||||
Gash source code directory.
|
||||
|
||||
If you have GNU Guix, you can also run the following extra tests.
|
||||
|
||||
The bootstrap test can be run using 'make check-bootstrap'. It builds
|
||||
Gash using nothing but Guix's bootstrap Guile, then uses Gash to build
|
||||
Bash using Guix's bootstrap toolchain. This test is designed to make
|
||||
sure that Gash is suitable for bootstrapping.
|
||||
|
||||
The specification tests can be run using 'make check-spec'. These
|
||||
tests get copied and adapted from Oil <https://www.oilshell.org/>, and
|
||||
then run against Gash.
|
||||
|
||||
Copying
|
||||
=======
|
||||
|
||||
Gash is free software released under the GNU GPLv3 (or later). See
|
||||
'COPYING' for the full license. Enjoy!
|
||||
|
|
Loading…
Reference in New Issue