rc (#13)
* update readme * Literal -> Lit, LitE -> Lit * commentary * infer * hindley milner inference :D * comments and better type errors * type IsString + test unification error * infer nonrec let binds infer nonrec let binds * small * LitE -> Lit * LitE -> Lit * TyInt -> TyCon "Int#" * parse type sigs; program type sigs * parse types * parse programs (with types :D) * parse programs (with type sigs :D) * Name = Text Name = Text * RlpcError * i'm on an airplane rn, my eyelids grow heavy, and i forgot my medication. should this be my final commit (of the week): gootbye * kinda sorta typechecking * back and medicated! * errorful (it's not good) * type-checked quasiquoters * fix hm tests * Compiler.JustRun * lex \ instead of \\ * grammar reference * 4:00 AM psychopath code * oh boy am i going to hate this code in 12 hours * application and lits appl * something * goofy * Show1 instances * fixation fufilled - back to work! * works * labels * infix decl * expr fixups * where * cool * aaaaa * decls fix * finally in a decent state * replace uses of many+satisfy with takeWhileP * layout layouts oh my layouts * i did not realise my fs is case insensitive * tysigs * add version bounds * grammar reference * 4:00 AM psychopath code * oh boy am i going to hate this code in 12 hours * application and lits appl * something * goofy * Show1 instances * fixation fufilled - back to work! * works * labels * infix decl * expr fixups * where * cool * aaaaa * decls fix * finally in a decent state * replace uses of many+satisfy with takeWhileP * layout layouts oh my layouts * i did not realise my fs is case insensitive * tysigs * its fine * threaded lexer * decent starting point * man this sucks * aagh * okay layouts kinda * kitten i'll be honest mommy's about to kill herself * see previous commit and scale back the part where i'm joking * version bounds * we're so back * fixy * cool * FIX REAL * oh my god * works * now we're fucking GETTING SOMEWHERE * i really need to learn git proper * infix exprs * remove debug flags * renamerlp * rename rlp * compiles (kill me) man * RlpcError -> IsRlpcError * when the "Test suite rlp-test: PASS" hits i'm like atlas and the world is writing two lines of code * errorful parser * errorful parser small * msgenvelope * errors! * allow uppercase sc names in preperation for Rlp2Core * letrec * infer letrec expressions * minor docs * checklist * minor docs * stable enough for a demo hey? * small fixups * new tag syntax; preparing for Core patterns new tag syntax; preparing for data names * temporary pragma system * resolve named data in case exprs * named constr tests * nearing release :3 * minor changes putting this on hold; implementing TTG first * some * oh my god guys!!! `Located` is a lax semimonoidal endofunctor on the category Hask!!!  * it's also a comonad. lol. * idk * show * abandon ship * at long last more no more undefineds * i should've made a lisp man this sucks * let layout * ttg boilerplate * fixup! ttg boilerplate * fixup! ttg boilerplate * organisation and cleaning organisation and tidying * error messages * driver progress * formatting * *R functions * -ddump-ast * debug tags * -ddump-eval * core driver * XRec fix * rlp2core base * ccoool * something * rlp TH * sc * expandableAlt * expandableAlt * fix layout_let * parse case exprs * case unrolling * rose * her light cuts deep time and time again ('her' of course referring to the field of computer science) * tidying * NameSupply effect * tidy * fix incomplete byTag * desugar * WIP associate postproc corecursive * sigh i'm gonna have to nuke the ast again in a month * remove old files * remove old files * fix top-level layout * define datatags * diagram * diagram * Update README.md * ppr debug flags ddump-parsed * ppr typesigs * ppr datatags * remove unnecessary comment * tidying * .hs -> .cr update examples * fix evil parser bug (it was a fucking typo) * fix evil lexer bug (it was actually quite subtle unlike prev.) * examples * examples * letrec + typechecking core * Update README.md * Rlp2Core: simple let binds * Rlp2Core: pattern let binds * small core fixes * update examples * formatting * typed coreExpr quoter * typechecking things * lt * decent state! * constants for bool tags * print# gm primitive * bind VarP after pats * fix: tag nested data names * gte gm prim * more nightmare GM fixes * QuickSort example works i'm gonig to cry * remove debug code * remove debug tracers * ready? * update readme * remove bad, incorrct, outdated docs --------- Co-authored-by: crumbtoo <crumb@disroot.org>
This commit was merged in pull request #13.
This commit is contained in:
128
README.md
128
README.md
@@ -3,6 +3,10 @@
|
||||
`rlp` (ruelang') will be a lazily-evaluated purely-functional language heavily
|
||||
imitating Haskell.
|
||||
|
||||
### Architecture
|
||||
|
||||

|
||||
|
||||
### Build Info
|
||||
* rlp is built using [Cabal](https://www.haskell.org/ghcup/)
|
||||
* rlp's documentation is built using [Sphinx](https://www.sphinx-doc.org/en/master/)
|
||||
@@ -18,32 +22,57 @@ $ cabal test --test-show-details=direct
|
||||
```
|
||||
|
||||
### Use
|
||||
|
||||
#### TLDR
|
||||
|
||||
```sh
|
||||
# Compile and evaluate t.hs
|
||||
$ rlpc t.hs
|
||||
# Compile and evaluate t.hs, with evaluation info dumped to stderr
|
||||
$ rlpc -ddump-eval t.hs
|
||||
# Compile and evaluate t.hs, with evaluation info dumped to t.log
|
||||
$ rlpc -ddump-eval -l t.log t.hs
|
||||
# Print the raw structure describing the compiler options and die
|
||||
# (option parsing still must succeed in order to print)
|
||||
$ rlpc -ddump-opts t.hs
|
||||
# Compile and evaluate examples/rlp/QuickSort.rl
|
||||
$ rlpc examples/QuickSort.rl
|
||||
# Compile and evaluate t.cr, with evaluation info dumped to t.log
|
||||
$ rlpc -ddump-eval -l t.log t.cr
|
||||
# Compile and evaluate t.rl, dumping the desugared Core
|
||||
$ rlpc -ddump-desugared t.rl
|
||||
# Compile and evaluate t.rl with all compiler messages enabled
|
||||
$ rlpc -dALL t.rl
|
||||
```
|
||||
|
||||
#### Options
|
||||
|
||||
```sh
|
||||
Usage: rlpc [-l|--log FILE] [-d DEBUG FLAG] [-f COMPILATION FLAG]
|
||||
[-e|--evaluator gm|ti] [--heap-trigger INT] [-x|--language rlp|core]
|
||||
FILES...
|
||||
```
|
||||
|
||||
Available debug flags include:
|
||||
* `-ddump-desugared`: dump Core generated from rl'
|
||||
* `-ddump-parsed-core`: dump raw Core AST
|
||||
* `-ddump-parsed`: dump raw rl' AST
|
||||
* `-ddump-eval`: dump evaluation logs
|
||||
* `-dALL`: disable debug message filtering. enables **all** debug messages
|
||||
|
||||
### Potential Features
|
||||
Listed in order of importance.
|
||||
- [ ] ADTs
|
||||
- [ ] First-class functions
|
||||
- [ ] Higher-kinded types
|
||||
- [x] ADTs
|
||||
- [x] First-class functions
|
||||
- [x] Higher-kinded types
|
||||
- [ ] Typeclasses
|
||||
- [ ] Parametric polymorphism
|
||||
- [ ] Hindley-Milner type inference
|
||||
- [x] Parametric polymorphism
|
||||
- [x] Hindley-Milner type inference
|
||||
- [ ] Newtype coercion
|
||||
- [ ] Parallelism
|
||||
|
||||
### Milestones
|
||||
(This list is incomplete.)
|
||||
|
||||
Items are marked off not as they are 100% implemented, but rather once I
|
||||
consider them stable enough that completion is soley a matter of getting
|
||||
around to it -- no tough design decisions, theorising, etc. remain. For
|
||||
example, as of writing this, the rl' frontend parser is not fully featured,
|
||||
yet it is marked off on this list; finishing it would require cranking out
|
||||
the remaining grammatical rules, and no work on complex tasks like layout
|
||||
parsing remains.
|
||||
|
||||
- [ ] Backend
|
||||
- [x] Core language
|
||||
- [x] AST
|
||||
@@ -59,41 +88,78 @@ Listed in order of importance.
|
||||
- [x] Garbage Collection
|
||||
- [ ] Emitter
|
||||
- [ ] Code-gen (target yet to be decided)
|
||||
- [ ] Core language emitter
|
||||
- [ ] Core linter (Type-checker)
|
||||
- [ ] Core2Core pass
|
||||
- [x] Core linter (Type-checker)
|
||||
- [ ] Core2Core pass (optimisations and misc. preprocessing)
|
||||
- [x] GM prep
|
||||
- [x] Non-strict case-floating
|
||||
- [ ] Let-floating
|
||||
- [ ] TCO
|
||||
- [ ] DCE
|
||||
- [ ] Frontend
|
||||
- [ ] High-level language
|
||||
- [ ] AST
|
||||
- [ ] Lexer
|
||||
- [ ] Parser
|
||||
- [ ] Translation to the core language
|
||||
- [x] High-level language
|
||||
- [x] AST
|
||||
- [x] Lexer
|
||||
- [x] Parser
|
||||
- [x] Translation to the core language
|
||||
- [ ] Constraint solver
|
||||
- [ ] `do`-notation
|
||||
- [x] CLI
|
||||
- [ ] Documentation
|
||||
- [ ] State transition rules
|
||||
- [x] State transition rules
|
||||
- [ ] How does the evaluation model work?
|
||||
- [ ] The Hindley-Milner type system
|
||||
- [ ] CLI usage
|
||||
- [ ] Tail call optimisation
|
||||
- [x] Parsing rlp
|
||||
- [ ] Parsing rlp
|
||||
- [ ] Trees That Grow
|
||||
- [ ] Tests
|
||||
- [x] Generic example programs
|
||||
- [ ] Parser
|
||||
|
||||
### December Release Plan
|
||||
- [ ] Tests
|
||||
### ~~December Release Plan~~
|
||||
- [x] Tests
|
||||
- [ ] Core lexer
|
||||
- [ ] Core parser
|
||||
- [ ] Evaluation model
|
||||
- [x] Evaluation model
|
||||
- [ ] Benchmarks
|
||||
- [ ] Stable Core lexer
|
||||
- [ ] Stable Core parser
|
||||
- [ ] Stable evaluation model
|
||||
- [ ] Garbage Collection
|
||||
- [x] Stable Core lexer
|
||||
- [x] Stable Core parser
|
||||
- [x] Stable evaluation model
|
||||
- [x] Garbage Collection
|
||||
- [ ] Stable documentation for the evaluation model
|
||||
|
||||
### ~~February Release Plan~~
|
||||
- [x] Beta rl' to Core
|
||||
- [x] UX improvements
|
||||
- [x] Actual compiler errors -- no more unexceptional `error` calls
|
||||
- [x] Better CLI dump flags
|
||||
- [x] Annotate the AST with token positions for errors (NOTE: As of Feb. 1,
|
||||
this has been done, but the locational info is not yet used in error messages)
|
||||
- [x] Compiler architecture diagram
|
||||
- [x] More examples
|
||||
|
||||
### March Release Plan
|
||||
- [ ] Tests
|
||||
- [ ] rl' parser
|
||||
- [ ] rl' lexer
|
||||
- [ ] Ditch TTG in favour of a simpler AST focusing on extendability via Fix, Free,
|
||||
Cofree, etc. rather than boilerplate-heavy type families
|
||||
|
||||
### Indefinite Release Plan
|
||||
|
||||
This list is more concrete than the milestones, but likely further in the future
|
||||
than the other release plans.
|
||||
|
||||
- [ ] Overall codebase cleaning
|
||||
- [ ] Complete all TODOs
|
||||
- [ ] Replace mtl with effectful
|
||||
- [ ] rl' type-checker
|
||||
- [ ] Stable rl' to Core
|
||||
- [ ] Core polish
|
||||
- [ ] Better, stable parser
|
||||
- [ ] Better, stable lexer
|
||||
- [ ] Less hacky handling of named data
|
||||
- [ ] Less hacky pragmas
|
||||
- [ ] Choose a target. LLVM, JS, C, and WASM are currently top contenders
|
||||
- [ ] https://proglangdesign.net/wiki/challenges
|
||||
|
||||
|
||||
Reference in New Issue
Block a user