~jojo/Carth

ref: 504c4e6c7761242ea533c507fb7b02022a2e25ec Carth/README.org -rw-r--r-- 2.6 KiB
504c4e6cJoJo Setup a rudimentary website at jo.zone/carth/ 2 years 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
77
78
79
80
81
82
83
84
85
86
#+TITLE: The Carth programming language
#+INCLUDE: "./page.org"

Rewrite of [[https://github.com/bryal/kvasir][kvasir]] in Haskell.

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

** Features
   - Scheme-inspired syntax and feel
   - Static, Hindley-Milner typechecking à la ML
   - Currying
   - Compiled with LLVM-based backend
   - [[file:REFERENCE.org::#Literate-Carth][Native support for literate programming in Org-mode]]

** Examples
   Not much is working yet, but here's an example of something simple
   that compiles and runs today. Note that impure functions like
   ~printInt~ only temporarily exist for development purposes.

   #+BEGIN_SRC scheme
   (define (main _)
     (seq (printInt (id 1337))
          (seq (printInt 42)
               (printInt 69))))
   (define (id x) x)
   (define (seq _ b) b)
   #+END_SRC

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

   - Algebraic datatypes
   - 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 8. To
   build the project, simply run ~stack build~. To install (copy the
   binary), run ~stack install~.

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

   # Help for a specific subcommand
   carth help interpret
   carth help c

   # Interpret a file
   carth i examples/test.carth

   # 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]]