Notepad/enter/Coding Tips (Classical)/Terminal Tips/2. CLI Tools/Languages/Low level - Back-end/Lisp/Unison in Racket Scheme.md

3.2 KiB

This directory contains libraries necessary for building and running unison programs via Racket Scheme.

Prerequisites

You'll need to have a couple things installed on your system:

  • libcrypto (you probably already have this installed)
  • Racket, with the executable racket on your path somewhere
  • BLAKE2 (you may need to install this manually)

In particular, our crypto functions require on both libcrypto (from openssl) and libb2. You may have to tell racket where to find libb2, by adding an entry to the hash table in your config.rktd file. This is what I had, for an M1 mac w/ libb2 installed via Homebrew:

(lib-search-dirs . (#f "/opt/homebrew/Cellar/libb2/0.98.1/lib/"))

You'll also need to install x509-lib with raco pkg install x509-lib

Running the unison test suite

To run the test suite, first stack build (or stack build --fast), then:

./unison-src/builtin-tests/jit-tests.sh

OR if you want to run the same tests in interpreted mode:

./unison-src/builtin-tests/interpreter-tests.sh

The above scripts fetch and cache a copy of base and the scheme-generating libraries, and copy this directory to $XDG_DATA_DIRECTORY/unisonlanguage/scheme-libs.

Iterating more quickly

If running the above transcripts is too slow for you, here's a few things you can do instead:

Run without needing to bounce ucm

First, tell UCM to load scheme files from this directory, by adding a SchemeLibs.Static item to your ~/.unisonConfig.

SchemeLibs.Static = "/path/to/unisoncode"

With this set, the compiler commands will look in /path/to/somewhere/scheme-libs/ for the subdirectories containing the library files.

Once that's done, you can load the testing library and tests:

.jit> load unison-src/builtin-tests/testlib.u
.jit> add
.jit> load unison-src/builtin-tests/tests.u
.jit> add

And then, without needing to bounce ucm every time you edit your scheme files, you can do:

.jit> run.native tests

Run without needing to regenerate the scheme

run.native produces a scheme file in $XDG_CACHE_DIRECTORY/unisonlanguage/scheme-tmp, so going one step further, you can grab these files and run them directly using Racket, bypassing ucm entirely.

~/unison » ls ~/.cache/unisonlanguage/scheme-tmp
testSuite.scm tests.scm

When running tests.scm directly with Racket, you'll need to add this scheme-libs directory and the generated builtins library to the path.

racket -S ~/.cache/unisonlanguage/scheme-libs/ -S ~/.local/share/unisonlanguage/scheme-libs/racket/ -S ~/.local/share/unisonlanguage/scheme-libs/common/  ~/.cache/unisonlanguage/scheme-tmp/tests.scm
``

## Loading in Racket

To load these libraries into a racket runtime, racket should be invoked like this:
```bash
$ racket -S scheme-libs/racket
Welcome to Racket v8.7 [cs].
> (require unison/core)
> ; now you can try out the definitions in core.ss!

You can then run racket tests with:

$ raco test scheme-libs/racket/unison/tests/your-test-file.rkt