Copyright (C) 2016-2025 Luca Saiu
Written by Luca Saiu

This file is part of GNU Jitter.

GNU Jitter is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Jitter is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Jitter.  If not, see <https://www.gnu.org/licenses/>.


About GNU Jitter
================

GNU Jitter is a software automatically generating a portable, very efficient
language virtual machine with performance close to native code, starting from a
relatively high-level specification provided by the user.

The VM state may include registers, stacks or a combination of both along with
any runtime structure defined by user code; whenever possible the generator
attempts to map such state data structures into hardware machine registers.

The specification contains some C code associated to every VM instruction; the
generator takes care of combining such small blocks of C into a whole body of
code with low---usually zero---dispatching and branching overhead.

The generated code includes a simple C API to dynamically emit and execute VM
code, an optional self-contained driver program for running VM routines from
text files, and development features such as disassembling and profiling.  The
Jitter runtime also features efficient support for conditional branching
operations difficult to implement using just C such as value tag checking, as
required by dynamically typed languages, and overflow checking.

The generated C code is heavily conditionalised and can be configured to run
using different dispatching techniques, of varying sophistication; the most
efficient dispatching techniques rely on some architecture-specific---but not
VM-specific---assembly support already included in this software; every
dispatch but one also relies on GNU C extensions.

As a fallback case, in the interest of portability, one dispatching technique is
provided, switch dispatching, requiring nothing more than standard C.

Configuration parameters are transparent with respect to the VM semantics and
even the C API: a VM routine will always behave in the same way independently
from the dispatching technique and other configuration parameters, the only
observable difference being execution speed.

A new garbage collector featuring precise pointer finding is in preparation.
Garbage collection is compatible with Jittery VMs but optional; alternatives
such as the Boehm-Demers-Weiser garbage collector are also supported.


Online resources
================

The Jitter home page is at https://www.gnu.org/software/jitter .
A public git repository is available at the URL
https://git.ageinghacker.net/jitter .

Discussions about Jitter, which spawned off as a sub-project of GNU epsilon,
are always considered on topic on the GNU epsilon mailing list.  See
https://lists.gnu.org/mailman/listinfo/epsilon-devel .
The mail address bug-jitter@gnu.org is in fact an epsilon-devel alias.

A new separate mailing list for Jitter will be added if needed.


About the author
================

GNU Jitter was written by Luca Saiu.  His personal web site, which includes
contact information, is https://ageinghacker.net .


About compact copyright notices
===============================

A copyright notice specifying two years saparated by a dash, for example as in
"2019-2021", is intended as an abbreviation of a notice specifying every year in
the range, inclusive.  For example
  Copyright (C) 2016-2020 Foo
is an abbreviation of
  Copyright (C) 2016, 2017, 2018, 2019, 2020 Foo
Abbreviated notices may be combined, for example in
  Copyright (C) 2014-2016, 2018, 2020-2022 Foo
which is an abbreviation of
  Copyright (C) 2014, 2015, 2016, 2018, 2020, 2021, 2022 Foo
