~jojo/Carth

7831fa401967cb57f2ad7a9ebcfc5235a08ee04e — JoJo a month ago 6b4681f
Change README to markdown

More portable. .org doesn't work on sourcehut.
2 files changed, 114 insertions(+), 99 deletions(-)

A README.md
D README.org
A README.md => README.md +114 -0
@@ 0,0 1,114 @@
Purely functional programming with lisp-syntax. Less infix, more parens!

Visit <https://carth.pink/> 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.

Features
========

- Scheme-inspired syntax and feel
- Static, Hindley-Milner typechecking à la ML
- Currying
- Closures
- Algebraic datatypes
- LLVM backend

Roadmap
=======

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.

- Typeclasses
- Higher kinded types
- Effect system
- Linear types

Building Carth
==============

The compiler is written in [Haskell](https://haskell.org) and uses the
[Stack](https://www.haskellstack.org/) build system, while the
core-library is written in [Rust](https://rust-lang.org). The external
dependencies required are [LLVM](https://llvm.org/) 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.

Running
=======

```bash
# General help
carth help
carth -h
carth --help

# Help for a specific subcommand
carth help c

# Compile and run a program with default output filename
carth c examples/fizzbuzz.carth
./out

# 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
./examples/fizzbuzz
```

License
=======

Carth is released under the AGPL license, version 3 or later. See
[LICENSE](./LICENSE).

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! ;)

Notice
------

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/>.

D README.org => README.org +0 -99
@@ 1,99 0,0 @@
#+TITLE: The Carth programming language

Purely functional programming with lisp-syntax. Less infix, more parens!

Visit [[https://carth.jo.zone/][https://carth.pink/]] 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.

* Features
  - Scheme-inspired syntax and feel
  - Static, Hindley-Milner typechecking à la ML
  - Currying
  - Closures
  - Algebraic datatypes
  - LLVM backend

* Roadmap
  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.

  - Typeclasses
  - 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.

* Running
  #+BEGIN_EXAMPLE bash
  # General help
  carth help
  carth -h
  carth --help

  # Help for a specific subcommand
  carth help c

  # Compile and run a program with default output filename
  carth c examples/fizzbuzz.carth
  ./out

  # 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
  ./examples/fizzbuzz
  #+END_EXAMPLE

* License
  Carth is released under the AGPL license, version 3 or later. See
  [[./LICENSE][LICENSE]].

  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! ;)

** Notice
   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/>.