Update the dev.org with completed TODOs
This commit is contained in:
parent
146e68670a
commit
5974fb52cf
176
dev.org
176
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:
|
||||
|
|
Loading…
Reference in New Issue