(doc new) Adding a prominent link to the IRC channel.
[Paws.c.git] / README.markdown
blobd5a19edb7d6c0a1dfeedee132cf9c42b38ca0e8f
1 `Paws.c`
2 ========
3 Paws is [@elliottcable][]’s programming language. The design is over a year old, but has gone through
4 [many iterations][Strata] and changes. There is no working implementation, though several separate codebases are
5 underway.
7 This project is my reference implementation. It’s going to be absolutely non-performant at the outset; it is
8 primarily intended to be an easy-to-peruse codebase that provides a *clean* API for embedding the interpreter
9 into other projects (statically linked.)
11 **If you’re interested in Paws, you should join the IRC channel.** There’s no coherent documentation on the
12 underlying paradigm online; we’ve tried several times to compile such, and had no luck. It’s quite difficult to
13 explain without an example interpreter to point people to, even on a one-on-basis; nearly impossible to do so
14 with no example implementation *and* in a generalized anybody-who-reads-this form. (Yes, we know this situation
15 sucks!)
17 We’re always available in [**##Paws**][##Paws] on the Freenode IRC network ([click here][webchat] to immediately
18 open a temporary IRC client.)
20   [@elliottcable]: http://twitter.com/elliottcable
21   [strata]: https://github.com/Paws/Paws.c/wiki/Strata
22   [##Paws]: irc://chat.freenode.net/##Paws
23   [webchat]: http://webchat.freenode.net?channels=%23%23Paws
25 Spelunking
26 ----------
27 This distribution includes a file that describes many points of interest within the codebase, and should help you
28 have an easier time exploring it.
30 If you’re the sort who learns best by reading code instead of docs, head over to the [SPELUNKING][] file!
32   [SPELUNKING]: /elliottcable/Paws.c/blob/Master/SPELUNKING.markdown
34 Compiling
35 ---------
36 Using the `C99` function below, you can use the following (compatible with `$CC` set to either `clang` or `gcc`,
37 right now):
38     
39     # Compiling library (TODO)
40     #   (I’ll admit it. I have no idea how to compile a shared library, or even how to make Paws capable of being
41     #    compiled as a shared library.)
42     
43     # Compiling executable (TODO)
44     #C99 -ISource \
45     #  Source/Types/fork/ll.tests.c \
46     #  Source/Types/fork/fork.tests.c \
47     #Source/Executable/Paws.c.c && ./Paws.c.o
48     
49     # Compiling and running all tests
50     C99   -IVendor -DCEST__NO_AUTO Vendor/Cest.c/Source/Cest.c   -ISource \
51       Source/Types/fork/ll.tests.c \
52       Source/Types/fork/fork.tests.c \
53     Source/Paws.tests.c && ./Paws.tests.o
54     
55     # Compiling and running all tests with gdb
56     C99 -ggdb   -IVendor -DCEST__NO_AUTO Vendor/Cest.c/Source/Cest.c   -ISource \
57       Source/Types/fork/ll.tests.c \
58       Source/Types/fork/fork.tests.c \
59     Source/Paws.tests.c && gdb -q -batch -x =(echo -e "run\nquit") -se ./Paws.tests.o
60     
61 ### Makefile
62 This project will almost certainly never have a makefile. I love ISO C, and I love the CPP, so don’t
63 misunderstand me for simply being too pandered-to by modern toolsets to handle the complexity:
65 **GNU make sucks.**
67 Just to be clear, SCons sucks too. So do Rake, CMake, and Waf. They all suck, they’re all bloated and overly
68 verbose, and they all solve the wrong problem (at least for me. To each their own, and all that.)
70 When it becomes a big enough issue, I’ll probably write a custom buildtool for my C code. Something sleek and
71 small, with file watchers, SHA1 comparison, git integration, and in-file dependency declaration.
73 Until then…
74     
75     zsh; # I’m not very familiar with bash.
76     C99() { eval local last="\$$#"; last=${last##*/}; $CC -std=c99 -pedantic-errors -Wall -O0 -o "${last%.*}.o" "$@" }
77     
78 (-;