Awesome
This is a platform-native compiler backend for PureScript. It attempts to generate "sane", debuggable, and portable C++11 (or later) or Go code as an intermediate language, which is then compiled to a native executable binary. This also enables easy interoperability with existing C/C++ or Go frameworks and libraries on a number of platforms.
There are two utilities in the purescript-native "suite": pscpp
and psgo
. The source code in this branch is for pscpp
, the purescript-to-C++ transpiler. For the source code of the psgo
purescript-to-Go transpiler / build tool, please see the golang branch.
Platforms
- Although purescript-native should work on any platform supporting PureScript and modern C++ or Go, the generated code and resulting binary executables have been tested on:
- macOS Mojave 10.14.5 – full test suite
- For C++, Xcode 10.2.1's
clang
was used - For Go,
go
version 1.12.7 was used
- For C++, Xcode 10.2.1's
- Windows 10 x64 – full test suite
- C++: Visual Studio 2017 and
clang
- Go:
go
version 1.12.7
- C++: Visual Studio 2017 and
- Linux Debian 9.5 amd64 – full test suite (C++)
- Default versions of
clang
andgcc
- Default versions of
- Linux Debian 10 amd64 – full test suite (Go)
- Default version of
go
- Default version of
- Raspberry Pi 3 B+ Raspbian official build (ARM), default versions of
clang
andgcc
- macOS Mojave 10.14.5 – full test suite
Requirements for building pscpp
and psgo
- Haskell Stack (if you're running macOS 10.14.5+, you can use pre-built binaries from here)
Requirements for using PureScript + purescript-native
-
A recent version (0.13+) of purescript.
-
For
pscpp
, a C++11-capable toolchain, e.g. recent versions of clang, gcc, Microsoft Visual Studio- GNU Make +
psc-package
is the default supported build tool, but you should be able to use your favorite package manager, C++ build system, tools, debuggers, etc.
- GNU Make +
-
For
psgo
, the Go toolchain for your system- You can use your favorite PureScript package manager and build tools – but for simplicity,
spago
is recommended.
- You can use your favorite PureScript package manager and build tools – but for simplicity,