diff --git a/dev.org b/dev.org index 30964e1..ad12ab6 100644 --- a/dev.org +++ b/dev.org @@ -1,65 +1,75 @@ -* Serene's Development Resources -This document is dedicated to collecting useful resources to help us in the development process. -Any thing that might be useful, tools, other languages to look at, inspirations literally anything. Just -try to find the best heading for them. IF your not familiar with the org mode markup checkout -[[https://emacsclub.github.io/html/org_tutorial.html#sec-7][this cheatsheet]]. +#+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} -* 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 -- Rust parser combinator framework :: https://github.com/Geal/nom/ -- LR(1) parser generator for Rust :: https://github.com/lalrpop/lalrpop -- A parser combinator library for Rust :: https://github.com/Marwes/combine -- Parsing Expression Grammar (PEG) parser generator for Rust :: https://github.com/kevinmehall/rust-peg -- General purpose parser :: https://pest.rs/ -* 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 +* 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/ -https://www.reddit.com/r/ProgrammingLanguages/comments/8ggx2n/is_llvm_a_good_backend_for_functional_languages/ +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 -- Make a Lisp :: https://github.com/kanaka/mal/blob/master/process/guide.md +- [[https://github.com/kanaka/mal/blob/master/process/guide.md][Make a Lisp]] *** Quasiquotation -- Backquote in CL :: http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm -- Backquote spec in Common Lisp the Language, 2nd Edition :: https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node367.html -- Backquote and pretty printing :: http://christophe.rhodes.io/notes/blog/posts/2014/backquote_and_pretty_printing/ +- [[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 -- The Rust book :: https://doc.rust-lang.org/book/ https://www.reddit.com/r/rust/comments/2s1zj2/the_rust_programming_language_book_as_epub/ +- [[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 -- Brief overview of LLVM :: https://www.infoworld.com/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html -- A bit in depth details on LLVM :: https://aosabook.org/en/llvm.html -- Official LLVM tutorial C++ :: https://llvm.org/docs/tutorial/ -- Interactive C++ with Cling :: https://blog.llvm.org/posts/2020-11-30-interactive-cpp-with-cling/ -- My First LLVM Compiler :: https://www.wilfred.me.uk/blog/2015/02/21/my-first-llvm-compiler/ -- A Complete Guide to LLVM for Programming Language Creators :: https://mukulrathi.co.uk/create-your-own-programming-language/llvm-ir-cpp-api-tutorial/ +- [[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 -- Pure functional datastructures papaer :: https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf -- Dynamic typing: syntax and proof theory :: https://reader.elsevier.com/reader/sd/pii/0167642394000042?token=CEFF5C5D1B03FD680762FC4889A14C0CA2BB28FE390EC51099984536E12AC358F3D28A5C25C274296ACBBC32E5AE23CD -- Representing Type Information in Dynamically Typed Languages :: https://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.4394 -- An empirical study on the impact of static typing on software maintainability :: https://www.researchgate.net/publication/259634489_An_empirical_study_on_the_impact_of_static_typing_on_software_maintainability +- [[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 -- Julia: A Fresh Approach toNumerical Computing :: https://julialang.org/research/julia-fresh-approach-BEKS.pdf +- [[https://julialang.org/research/julia-fresh-approach-BEKS.pdf][Julia: A Fresh Approach toNumerical Computing]] ** Cranelift -- Source tree :: https://github.com/bytecodealliance/wasmtime/tree/master/cranelift +- [[https://github.com/bytecodealliance/wasmtime/tree/master/cranelift][Source tree]] ** Memory management -- Visualizing memory management in Golang :: https://deepu.tech/memory-management-in-golang/ -- TCMalloc : Thread-Caching Malloc :: http://goog-perftools.sourceforge.net/doc/tcmalloc.html -- A visual guide to Go Memory Allocator from scratch (Golang) :: https://medium.com/@ankur_anand/a-visual-guide-to-golang-memory-allocator-from-ground-up-e132258453ed +- [[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 -- Scheduling In Go (Series) :: https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html +- [[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 -- Perceus: Garbage Free Reference Counting with Reuse :: https://www.microsoft.com/en-us/research/uploads/prod/2020/11/perceus-tr-v1.pdf +- [[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/ +- [[https://asmjit.com/][Machine code generator for C++]] ** Compiler -- Stack frame layout on x86-64 :: https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64 +- [[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* @@ -76,63 +86,71 @@ the program by using the usual passes alonge side with some extra passes that op on ADF ** Lang *** Scheme -- Chicken Scheme - Easy-to-use compiler and interpreter, with lots of libraries :: https://call-cc.org -- Stalin - Brutally optimizing Scheme compiler, with lots of optimization flags :: https://github.com/barak/stalin +- [[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 -- Pointers Are Complicated :: https://www.ralfj.de/blog/2020/12/14/provenance.html +- [[https://www.ralfj.de/blog/2020/12/14/provenance.html][Pointers Are Complicated]] *** Emacs mode -- Adding A New Language to Emacs :: https://www.wilfred.me.uk/blog/2015/03/19/adding-a-new-language-to-emacs/ -- The Definitive Guide To Syntax Highlighting :: https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-guide-to-syntax-highlighting/ +- [[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 -*** TODO A proper List implementation - It should be a proper linked list -*** TODO Vector implementation -*** TODO Hashmap implementation -*** TODO Call stack +*** 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 -- [ ] Handle TCO in the call stack -- [ ] Integration with the Error handling -*** TODO Meta data support +- [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 +*** TODO Docstring support :DOCS:BOOTSTRAP: - [ ] For functions and macros - [ ] For namespaces and projects - [ ] API to interact with docstrings and helps -*** TODO FFI interface +*** 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 -*** TODO nREPL -*** TODO Emacs mode -*** TODO Number implementation +*** 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 +*** TODO String implementation :BOOTSTRAP: +- [X] Basic implementation - [ ] Basic operations - [ ] Numer <-> String - [ ] Interpolation -*** TODO Enum implementation +*** TODO Enum implementation :BOOTSTRAP: - [ ] Embedded data in a variant - [ ] Generate functions based on variants -*** TODO Protocol +*** TODO Protocol :BOOTSTRAP: - [ ] Polymorphic functions -*** TODO Struct implementation -*** TODO Error handling -- [ ] Integration with callstacks +*** TODO Struct implementation :BOOTSTRAP: +*** TODO Error handling :BOOTSTRAP: +- [X] Integration with callstacks - [ ] Stackable errors -*** TODO Multi arity functions -*** TODO QuasiQuotation -*** TODO Linter -*** TODO Document generator -*** TODO Spec like functionality -*** TODO Laziness implementation +*** 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 -**** TODO Test library +**** TODO IO library :BOOTSTRAP: +**** TODO Test library :BOOTSTRAP: