All The Latest Gash News
************************

Noteworthy changes in release 0.3.1 (2025-05-05)
================================================

Bug fixes

  - Fix a non-deterministic error whereby sub-shells could fail, in a
    non-deterministic fashion, with:
      In procedure scm_fdes_to_port: Bad file descriptor
    See <https://issues.guix.gnu.org/75658>.
  - Fix case where failure to execute a program due to a wrong
    interpreter (either shebang or ELF interpreter) would leave a child
    process behind it.

Noteworthy changes in release 0.3.0 (2022-02-11)
================================================

New features

  - Arithmetic expansion.
  - Simple asynchronous commands.
  - A language specification is now provided, allowing you to use the
    evaluator from the Guile REPL by typing ",L sh".
  - Redirects now honor the 'noclobber' option.
  - The 'wait' built-in.
  - The 'umask' built-in can now display the current umask.

Bug fixes

  - An empty command will now reset the status.
  - The 'read-sh' procedure now reads from 'current-input-port' by
    default (before it used 'current-output-port').

Miscellaneous improvements

  - Various performance improvements.
  - Word expansion has been split into two steps, paving the way for a
    compiler.
  - Guile 3.0 is now explicitly supported.

Noteworthy changes in release 0.2.0 (2019-12-15)
================================================

New features

  - Pattern-based and asserting variable operators ('#', '##', '%',
    '%%', and '?') are now supported.
  - Errors are now handled in the 'break', 'continue', and 'return'
    special built-ins.
  - Temporary variable assignments are now passed into function calls
    and invocations of regular built-ins.
  - The 'read' special built-in now supports field splitting and
    logical lines.
  - The IFS variable is now initialized with a value.
  - The 'trap' special built-in now uses '-' if no action is given.
  - The 'noglob' option can be used to turn off globbing.

Bug fixes

  - Subshells no longer continue executing code from the parent shell.
  - The 'exit' special built-in now runs the exit handler.
  - Patterns can now contain malformed, unterminated bracket
    expressions (e.g., '[-foo').
  - Nested variable references that are interpreted as strings now
    work (e.g., 'x=${y+${z+foo}}').
  - Backtick command substitutions in double quotes are now parsed
    "correctly" (i.e., in the same bizarre way as other shells).
  - Case statements that have unbalanced parentheses and are nested
    inside of command substitutions are now parsed correctly.
  - The behavior of the '+' and ':+' variable operators are no longer
    reversed.
  - Pathname expansion now works for absolute paths, paths with quoted
    slashes, paths with repeated slashes, and paths with dot and
    dot-dot components.
  - Files opened for redirect are now closed immediately after they
    are used.
  - Processes spawned for pipelines are now reaped.

Miscellaneous improvements

  - Gash is now installed into Guile's 'site' directories.
  - The source tarball can now be generated reproducibly from a Git
    checkout.

Noteworthy features of release 0.1 (2019-06-01)
===============================================

Features of the shell

  - Sophisticated enough to be used to build Bash.
  - Has a nice colorized prompt.
  - Includes all of the POSIX-specified "special" built-ins except for
    'times'.
  - Includes about half of the POSIX-specified "regular" built-ins
    (see 'gash/built-ins.scm' for details).

Features of the programming interface

  - Parses Shell scripts into an AST.
  - Provides a rudimentary interface for writing Shell-like Scheme
    scripts.

Copying this file
=================

This file was written by Timothy Sample <samplet@ngyro.com>.

To the extent possible under law, the author(s) have waived all
copyright and related or neighboring rights to this file.

You should have received a copy of the CC0 legalcode along with this
work.  If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
