Rewrite README.

* README: Rewrite with more information.
This commit is contained in:
Timothy Sample 2019-05-20 14:12:16 -04:00
parent 38c832a8e2
commit d257dac0c6
1 changed files with 56 additions and 17 deletions

73
README
View File

@ -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!