1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 03:30:27 +02:00

Flesh out README

This commit is contained in:
Andy Wingo 2019-03-25 15:36:12 +01:00
parent f0cecc45d4
commit 02ce8952ef
2 changed files with 29 additions and 3 deletions

3
README
View file

@ -1,3 +0,0 @@
GNU lightning is a library to aid in making portable programs
that compile assembly code at run time. For more information,
look at the info documentation.

29
README.md Normal file
View file

@ -0,0 +1,29 @@
# Lightening
Lightening is a just-in-time code generation library derived from GNU
Lightning, adapted to the purposes of the GNU Guile project.
## Use
```
gcc -flto -O2 -g -o jit.o -c jit/jit.c
gcc -flto -O2 -g -o my-program jit.o my-program.c
```
See the GNU Lightning manual for more on how to program against
Lightening (much of the details are the same).
## What's the difference with GNU Lightning?
This project is called Lightening because it's lighter-weight than GNU
Lightning. When you go to generate code at run-time with GNU Lightning,
what happens is that you build up a graph of nodes which GNU Lightning
"optimizes" before finally emitting machine code. These optimizations
can improve register allocation around call sites. However they are not
helpful from a Guile perspective, as they get in the way of register
allocation that we need to do; and they actually prevent access to all
the registers that we would like to have.
Guile needs a simple, light-weight code generation library. The GNU
Lightning architecture-specific backends provide the bulk of this
functionality, and Lightening wraps it all in a lightweight API.