~jojo/Carth

ref: ee81b9201377e00dc01a0a1c48d11474deb61c8b Carth/README.org -rw-r--r-- 2.4 KiB
ee81b920JoJo Un-hardcode lib and mod dir paths. Configurable at compiletime now 1 year, 6 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#+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.

* Features
  - Scheme-inspired syntax and feel
  - Static, Hindley-Milner typechecking à la ML
  - Currying
  - Closures
  - Algebraic datatypes
  - LLVM-based 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
  This project is written in [[https://haskell.org][Haskell]] and uses the [[https://www.haskellstack.org/][Stack]] build
  system. The external dependencies required are [[https://llvm.org/][LLVM]] version 9.

  To build the project, simply run ~stack build~. To install (copy the
  binary), run ~stack install~.

  The Carth compiler needs to link with a foreign core library of
  functions that can't be defined in Carth itself, to do things like
  input/output and pointer manipulation etc. This library is written
  in Rust and is located in "foreign-core/". Just build with ~cargo
  build~.

* 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/test.carth
  ./out

  # Compile a program with a specific output filename
  carth c -o examples/test.bin examples/test.carth
  ./examples/test.bin
  #+END_EXAMPLE

* License
  AGPLv3

  Copyright (C) 2019  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.

  See [[./LICENSE][LICENSE]]