Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/racketscript/racketscript
Racket to JavaScript Compiler
https://github.com/racketscript/racketscript
compiler javascript programming-language racket
Last synced: about 2 months ago
JSON representation
Racket to JavaScript Compiler
- Host: GitHub
- URL: https://github.com/racketscript/racketscript
- Owner: racketscript
- License: mit
- Created: 2016-02-25T02:38:38.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-09-02T16:34:00.000Z (over 1 year ago)
- Last Synced: 2024-08-01T19:55:43.556Z (5 months ago)
- Topics: compiler, javascript, programming-language, racket
- Language: Racket
- Homepage:
- Size: 1.19 MB
- Stars: 708
- Watchers: 34
- Forks: 32
- Open Issues: 79
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: COPYING.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-racket - racketscript - A lightweight Racket to JavaScript compiler with some batteries included. (Compilers)
README
# RacketScript
[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](COPYING.md)
[![Tests](https://github.com/racketscript/racketscript/actions/workflows/racket.yml/badge.svg)](https://github.com/racketscript/racketscript/actions/workflows/racket.yml)
[![ESLint](https://github.com/racketscript/racketscript/actions/workflows/node.js.yml/badge.svg)](https://github.com/racketscript/racketscript/actions/workflows/node.js.yml)
[![Coverage Status](https://codecov.io/gh/racketscript/racketscript/coverage.svg?branch=master)](https://codecov.io/gh/racketscript/racketscript?branch=master)
[![Try Online](https://img.shields.io/badge/try_it-online!-ff9900.svg)](http://play.racketscript.org)[![Racket](https://img.shields.io/badge/-Racket-darkred?logo=racket)](https://racket-lang.org)
[![Discourse users](https://img.shields.io/discourse/users?label=Discuss%20on%20Racket%20Discourse&logo=racket&server=https%3A%2F%2Fracket.discourse.group)](https://racket.discourse.group/)
[![Racket Discord](https://img.shields.io/discord/571040468092321801?label=Chat%20on%20Racket%20Discord&logo=racket)](https://discord.gg/6Zq8sH5)RacketScript is an **experimental** lightweight Racket to JavaScript (ECMAScript 6)
compiler. RacketScript aims to leverage both JavaScript and Racket's ecosystem,
and make interoperability between them clean and smooth.RacketScript takes in Racket source files, uses Racket's macro expander to
produce [Fully Expanded
Programs](https://docs.racket-lang.org/reference/syntax-model.html#%28part._fully-expanded%29),
and then compile these fully expanded programs to JavaScript. RacketScript
currently supports only a subset of Racket.## Try RacketScript
You can try RacketScript in your browser
at [RacketScript Playground](http://play.racketscript.org).You may alo be interested in [Rackt](https://rackt-org.github.io) - An ultrasmall (~70 loc) React wrapper written in RacketScript.
## Disclaimer
RacketScript is **work-in-progress** and is not mature and stable. Several
Racket features and libraries are not yet implemented (eg. number pyramid,
contracts, proper tail calls, continuations). There are also quite a few missing
primitive functions. That said, we encourage experimentation, user feedback,
discussions, bug reports and pull requests.## Installation
Following system packages are required:
- [Racket](http://www.racket-lang.org/) 6.12 or higher
- [NodeJS](https://nodejs.org/) (14.0 or higher) and NPM
- Make### Quick Install
RacketScript can be installed using the Racket package manager `raco`:
```sh
raco pkg install racketscript
```See [Basic Usage](#basic-usage) to get started.
### Install from Github
```sh
# Clone RacketScript
git clone [email protected]:racketscript/racketscript.git`
cd racketscript# Build and install
make setup
```If you do not wish to pollute your root NPM directory, you can set a
custom global location by changing your `npmrc` (eg. `echo "prefix =
$HOME/.npm-packages" >> ~/.npmrc`. Then add `/prefix/path/above/bin`
to your `PATH`.## Basic Usage
RacketScript compiler is named `racks`.
```sh
racks -h # show help
```To compile a Racket source file:
```sh
# Installs all NPM dependencies and compile file.rkt
racks /path/to/file.rkt
```The above command will create a output build directory named
`js-build`, copy RacketScript runtime, copy other support files,
install NPM dependencies, compile `file.rkt` and its dependencies.The compiled JavaScript modules typically goto one of following three
folders:- "modules": The normal Racket files.
- "collects": Racket collects source files.
- "links": Other third party packages.
- "dist": Contains sources compiled to ES6 or bundled JavaScript ready
for distribution.Here are few other examples that would come in handy:
```sh
# To skip `npm install` step. Useful when building
# for second time.
racks -n /path/to/module-name.rkt# Run the assembled JavaScript module.
node js-build/modules/module-name.rkt.js# Use `-b` to format the assembled JavaScript code use `-b`. Assumes
# `js-beautify` is available in `$PATH`.
racks -b /path/to/module-name.rkt# Override default output directory
racks -d /path/to/output/dir /path/to/module-name.rkt# Print JavaScript output to stdout
racks --js --js-beautify /path/to/module-name.rkt
```By default tail call optimization is turned off. To enable translation
of self recursive tail calls to loop, pass `--enable-self-tail` flag.```sh
racks --enable-self-tail /path/to/source.rkt
```### Browser
Most browsers can load RacketScript modules directly without any external
dependencies ``.### Module Bundler (Webpack)
For deployment, you may want to bundle all generated modules into single
JavaScript file. RacketScript can generate some boiler-plate for using
Webpack/Babel, however we recommend you to use your own configuration.```sh
# Use `--target` or `-t` flag.
racks --target webpack /path/to/source.rkt# Call webpack to bundle in `js-build` directory. Will produce
# single JavaScript bundle in `js-build/dist` directory.
npx webpack
```## Contributing to RacketScript
Please read [Contribution Guidelines](CONTRIBUTING.md).
## Troubleshooting
Please read the [Troubleshooting Wiki](https://github.com/racketscript/racketscript/wiki/Troubleshooting).
## Related Work
- [Whalesong](https://github.com/soegaard/whalesong)
- [Urlang](https://github.com/soegaard/urlang)