157 lines
9.5 KiB
Org Mode
157 lines
9.5 KiB
Org Mode
#+TITLE: Serene Development
|
|
#+AUTHOR: Sameer Rahmani
|
|
#+SEQ_TODO: TODO(t/!) NEXT(n/!) BLOCKED(b@/!) | DONE(d%) WONT_DO(c@/!) FAILED(f@/!)
|
|
#+TAGS: DOCS(d) EXAMPLES(e) BOOTSTRAP(b) Old(o) Misc(m)
|
|
#+STARTUP: logdrawer logdone logreschedule indent content align constSI entitiespretty nolatexpreview
|
|
#+OPTIONS: tex:t
|
|
#+HTML_MATHJAX: align: left indent: 5em tagside: left font: Neo-Eule
|
|
#+LATEX_CLASS: article
|
|
#+LATEX_CLASS_OPTIONS: [a4paper]
|
|
#+LATEX_HEADER: \usepackage{tcolorbox}
|
|
#+LATEX_HEADER: \usepackage{mathabx}
|
|
#+LATEX_HEADER: \newtcolorbox{infobox}[2][]{colback=cyan!5!white,before skip=14pt,after skip=8pt,colframe=cyan!75!black,sharp corners,title={#2},#1}
|
|
|
|
* Serene's Development Resources
|
|
This document is dedicated to the process of developing *Serene*. It contains a collection of resources
|
|
from the early days of the project and resources that need to be studied and A list of tasks and features
|
|
that needs to be done. This document is written using [[https://orgmode.org/][org-mode]]. You can use [[https://emacsclub.github.io/html/org_tutorial.html#sec-7][this cheatsheet]] as a quick guide
|
|
for the format but you will get more out of it using org-mode.
|
|
|
|
* Resources
|
|
For a generic list of resources on compiler design take a look at
|
|
[[https://tomassetti.me/resources-create-programming-languages/][the list of resource to create a programming language]] and [[https://www.reddit.com/r/ProgrammingLanguages/comments/8ggx2n/is_llvm_a_good_backend_for_functional_languages/][this list]]
|
|
** Parser
|
|
First of all you need to read [[https://tomassetti.me/guide-parsing-algorithms-terminology/][All you need to know about Parser algorithms]].
|
|
Then here is the list or parsers that we have considered
|
|
|
|
- [[https://github.com/Geal/nom/][Rust parser combinator framework]]
|
|
- [[https://github.com/lalrpop/lalrpop][LR(1) parser generator for Rust]]
|
|
- [[https://github.com/Marwes/combine][A parser combinator library for Rust]]
|
|
- [[https://github.com/kevinmehall/rust-peg][Parsing Expression Grammar (PEG) parser generator for Rust]]
|
|
- [[https://pest.rs/][General purpose parser]]
|
|
|
|
** Lisp
|
|
- [[https://github.com/kanaka/mal/blob/master/process/guide.md][Make a Lisp]]
|
|
*** Quasiquotation
|
|
- [[http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm][Backquote in CL]]
|
|
- [[https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node367.html][Backquote spec in Common Lisp the Language, 2nd Edition]]
|
|
- [[http://christophe.rhodes.io/notes/blog/posts/2014/backquote_and_pretty_printing/][Backquote and pretty printing]]
|
|
** Rust
|
|
- [[https://doc.rust-lang.org/book/][The Rust book]] (in [[https://www.reddit.com/r/rust/comments/2s1zj2/the_rust_programming_language_book_as_epub/][EPUB]] format)
|
|
** LLVM
|
|
- [[https://www.infoworld.com/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html][Brief overview of LLVM]]
|
|
- [[https://aosabook.org/en/llvm.html][A bit in depth details on LLVM]]
|
|
- [[https://llvm.org/docs/tutorial/][Official LLVM tutorial C++]]
|
|
- [[https://blog.llvm.org/posts/2020-11-30-interactive-cpp-with-cling/][Interactive C++ with Cling]]
|
|
- [[https://www.wilfred.me.uk/blog/2015/02/21/my-first-llvm-compiler/][My First LLVM Compiler]]
|
|
- [[https://mukulrathi.co.uk/create-your-own-programming-language/llvm-ir-cpp-api-tutorial/][A Complete Guide to LLVM for Programming Language Creators]]
|
|
** Data structures
|
|
- [[https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf][Pure functional datastructures papaer]]
|
|
- [[https://reader.elsevier.com/reader/sd/pii/0167642394000042?token=CEFF5C5D1B03FD680762FC4889A14C0CA2BB28FE390EC51099984536E12AC358F3D28A5C25C274296ACBBC32E5AE23CD][Dynamic typing: syntax and proof theory]]
|
|
- [[https://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.4394][Representing Type Information in Dynamically Typed Languages]]
|
|
- [[https://www.researchgate.net/publication/259634489_An_empirical_study_on_the_impact_of_static_typing_on_software_maintainability][An empirical study on the impact of static typing on software maintainability]]
|
|
|
|
** Other languages
|
|
- [[https://julialang.org/research/julia-fresh-approach-BEKS.pdf][Julia: A Fresh Approach toNumerical Computing]]
|
|
** Cranelift
|
|
- [[https://github.com/bytecodealliance/wasmtime/tree/master/cranelift][Source tree]]
|
|
** Memory management
|
|
- [[https://deepu.tech/memory-management-in-golang/][Visualizing memory management in Golang]]
|
|
- [[http://goog-perftools.sourceforge.net/doc/tcmalloc.html][TCMalloc : Thread-Caching Malloc]]
|
|
- [[https://medium.com/@ankur_anand/a-visual-guide-to-golang-memory-allocator-from-ground-up-e132258453ed][A visual guide to Go Memory Allocator from scratch (Golang)]]
|
|
** Concurrency
|
|
- [[https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html][Scheduling In Go (Series)]]
|
|
|
|
** Garbage collection
|
|
- [[https://v8.dev/blog/high-performance-cpp-gc][GC on V8]]
|
|
- [[https://www.microsoft.com/en-us/research/uploads/prod/2020/11/perceus-tr-v1.pdf][Perceus: Garbage Free Reference Counting with Reuse]]
|
|
|
|
** JIT
|
|
- [[https://asmjit.com/][Machine code generator for C++]]
|
|
** Compiler
|
|
- [[https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64][Stack frame layout on x86-64]]
|
|
*** Branch instructions
|
|
It would be cool to have macro to instruct the compiler about the likelyhood
|
|
of a branch in a conditional. Something similar to kernel's *likely* and *unlikely*
|
|
macros
|
|
*** Execution Instrumentation
|
|
The compiler should be able to embed some code in the program to collect data about
|
|
the different execution paths or function instrumentation and other useful data the
|
|
can help the compiler to optimize the program even further. For example Imagine a
|
|
scenario which we compile a program with out any optimization ( in debug mode ) and
|
|
using some test cases or real usage of the program in several iteration we collect
|
|
data about the compiled application in a file (let's call it the ADF short for Analytic
|
|
Data File), and the we can pass that ADF file to the compiler to let it compile and optimize
|
|
the program by using the usual passes alonge side with some extra passes that operate
|
|
on ADF
|
|
** Lang
|
|
*** Scheme
|
|
- [[https://call-cc.org][Chicken Scheme - Easy-to-use compiler and interpreter, with lots of libraries]]
|
|
- [[https://github.com/barak/stalin][Stalin - Brutally optimizing Scheme compiler, with lots of optimization flags]]
|
|
** Utilities
|
|
- [[https://www.ralfj.de/blog/2020/12/14/provenance.html][Pointers Are Complicated]]
|
|
*** Emacs mode
|
|
- [[https://www.wilfred.me.uk/blog/2015/03/19/adding-a-new-language-to-emacs/][Adding A New Language to Emacs]]
|
|
- [[https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-guide-to-syntax-highlighting/][The Definitive Guide To Syntax Highlighting]]
|
|
|
|
* Considerations
|
|
** Hashmaps
|
|
*** DOS attack
|
|
- https://www.anchor.com.au/blog/2012/12/how-to-explain-hash-dos-to-your-parents-by-using-cats/
|
|
- https://en.wikipedia.org/wiki/Collision_attack
|
|
|
|
* TODOs
|
|
** Bootstrap
|
|
*** TODO Language Spec :DOCS:
|
|
*** TODO A proper List implementation :BOOTSTRAP:
|
|
It should be a proper linked list
|
|
*** TODO Vector implementation :BOOTSTRAP:
|
|
*** TODO Hashmap implementation :BOOTSTRAP:
|
|
*** TODO Call stack :BOOTSTRAP:
|
|
- [ ] Thread local call stack
|
|
- [X] Handle TCO in the call stack
|
|
- [X] Integration with the Error handling
|
|
*** TODO Meta data support :BOOTSTRAP:
|
|
- [ ] Attachable meta data to any expression
|
|
- [ ] Spec for special meta data that mean something to the interpreter. E.g: docstrings
|
|
- [ ] Meta data API
|
|
*** TODO Docstring support :DOCS:BOOTSTRAP:
|
|
- [ ] For functions and macros
|
|
- [ ] For namespaces and projects
|
|
- [ ] API to interact with docstrings and helps
|
|
*** TODO FFI interface :BOOTSTRAP:
|
|
- [ ] Convertion of Serene types to C types
|
|
- [ ] Shared libraries dynamic loading
|
|
- [ ] Integration with namespaces and requirement set
|
|
- [ ] Necessary API and checks for library and ABI Availability
|
|
*** TODO Load path and namespace loading :BOOTSTRAP:
|
|
*** TODO nREPL :BOOTSTRAP:
|
|
*** TODO Emacs mode :Misc:
|
|
*** TODO Number implementation :BOOTSTRAP:
|
|
- [ ] Basic operations
|
|
- [ ] Standard functions in Serene itself
|
|
- [ ] Type infer and conversion
|
|
*** TODO String implementation :BOOTSTRAP:
|
|
- [X] Basic implementation
|
|
- [ ] Basic operations
|
|
- [ ] Numer <-> String
|
|
- [ ] Interpolation
|
|
*** TODO Enum implementation :BOOTSTRAP:
|
|
- [ ] Embedded data in a variant
|
|
- [ ] Generate functions based on variants
|
|
*** TODO Protocol :BOOTSTRAP:
|
|
- [ ] Polymorphic functions
|
|
*** TODO Struct implementation :BOOTSTRAP:
|
|
*** TODO Error handling :BOOTSTRAP:
|
|
- [X] Integration with callstacks
|
|
- [ ] Stackable errors
|
|
*** TODO Multi arity functions :BOOTSTRAP:
|
|
*** TODO QuasiQuotation :BOOTSTRAP:
|
|
*** TODO Linter :Misc:
|
|
*** TODO Document generator :DOCS:Misc:
|
|
*** TODO Spec like functionality :BOOTSTRAP:
|
|
*** TODO Laziness implementation :BOOTSTRAP:
|
|
*** Standard libraries
|
|
**** TODO IO library :BOOTSTRAP:
|
|
**** TODO Test library :BOOTSTRAP:
|