#+TITLE: The Carth programming language
Purely functional programming with lisp-syntax. Less infix, more parens!
Visit [[https://carth.jo.zone/][https://carth.jo.zone/]] for an overview of the language and more info.
* /WORK IN PROGRESS/
Just as a little disclaimer: this project is in the very early
stages of development, so there are no guarantees of stability etc.
- Scheme-inspired syntax and feel
- Static, Hindley-Milner typechecking à la ML
- Algebraic datatypes
- LLVM backend
This is a high-level overview of what is planned for the language, and
some of the points are just tentative. See [[./TODO.org][TODO.org]] for more extensive
list of planned features and more detailed descriptions.
- Higher kinded types
- Effect system
- Linear types
* Building Carth
The compiler is written in [[https://haskell.org][Haskell]] and uses the [[https://www.haskellstack.org/][Stack]] build system,
while the core-library is written in [[https://rust-lang.org][Rust]]. The external dependencies
required are [[https://llvm.org/][LLVM]] version 9.
To build the project and install the ~carth~ binary, the core
library, and the standard library, simply run ~make install~, which
defaults to installing the binary in =~/.local/bin=, the core
library in =~/.local/lib=, and the modules of the Carth standard
library in =~/.carth/mod=.
* Building with Carth
At compiler runtime, the dependencies are ~libsigsegv~, ~libdl~,
~libpthread~, ~libm~, and ~libgc~, which are linked into the
executables produced by Carth.
Carth must further be able to find the core library and standard
library modules, so you must have added the directory of the
installed core library (default =~/.local/lib=) to your
~LIBRARY_PATH~ environment variable, the directory of the installed
standard library (default =~/.carth/mod=) to your
~CARTH_MODULE_PATH~ environment variable.
# General help
# Help for a specific subcommand
carth help c
# Compile and run a program with default output filename
carth c examples/fizzbuzz.carth
# Run with the JIT compiler
carth run examples/fizzbuzz.carth
# Compile a program with a specific output filename
carth c -o examples/fizzbuzz examples/fizzbuzz.carth
Carth is released under the AGPL license, version 3 or later. See
Note that by default, all programs written in Carth will have to be
distributed under the AGPLv3 license as well, as not just the
compiler itself, but also the standard library you include and the
core library you link with are AGPLv3 licensed. Technically you
could write your own standard library and core library with some
non-copyleft license to avoid this, but I hope you won't! ;)
Copyright (C) 2020 Johan Johansson
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program 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
Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.