crumb 36a17d092b 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!!!

![abstractionjak](https://media.discordapp.net/attachments/1101767463579951154/1200248978642567168/3877820-20SoyBooru.png?ex=65c57df8&is=65b308f8&hm=67da3acb61861cab6156df014b397d78fb8815fa163f2e992474d545beb668ba&=&format=webp&quality=lossless&width=880&height=868)

* 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>
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2023-12-04 19:52:35 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00
2024-02-13 13:22:23 -07:00

rl'

rlp (ruelang') will be a lazily-evaluated purely-functional language heavily imitating Haskell.

Architecture

rlpc architecture diagram

Build Info

  • rlp is built using Cabal
  • rlp's documentation is built using Sphinx
$ cabal build       # Build the rlpc compiler
$ cabal install     # Install rlpc to $PATH
$ cabal haddock     # Build the API docs w/ Haddock
$ make -C doc html  # Build the primary docs w/ Sphinx

# run the test suite
$ cabal test --test-show-details=direct

Use

TLDR

# 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

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
  • Typeclasses
  • Parametric polymorphism
  • 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
    • Core language
      • AST
    • Low-level execution model (TI)
      • Arithmetic
      • Conditionals
      • Structured data
      • Garbage collection
    • Low-level execution model (GM)
      • Arithmetic
      • Conditionals
      • Structured data
      • Garbage Collection
    • Emitter
      • Code-gen (target yet to be decided)
    • Core linter (Type-checker)
    • Core2Core pass (optimisations and misc. preprocessing)
      • GM prep
        • Non-strict case-floating
      • Let-floating
      • TCO
      • DCE
  • Frontend
    • High-level language
      • AST
      • Lexer
      • Parser
    • Translation to the core language
      • Constraint solver
      • do-notation
    • CLI
  • Documentation
    • State transition rules
    • How does the evaluation model work?
    • The Hindley-Milner type system
    • CLI usage
    • Tail call optimisation
    • Parsing rlp
    • Trees That Grow
  • Tests
    • Generic example programs
    • Parser

December Release Plan

  • Tests
    • Core lexer
    • Core parser
    • Evaluation model
  • Benchmarks
  • Stable Core lexer
  • Stable Core parser
  • Stable evaluation model
    • Garbage Collection
  • Stable documentation for the evaluation model

February Release Plan

  • Beta rl' to Core
  • UX improvements
    • Actual compiler errors -- no more unexceptional error calls
    • Better CLI dump flags
    • 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)
  • Compiler architecture diagram
  • 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
Description
No description provided
Readme 2.5 MiB
Latest
2024-02-16 14:20:14 -07:00
Languages
Haskell 83.8%
Yacc 10.7%
Logos 5.5%