Keep this directory in the repository. It's personal notes. Don't review the file.
- Browser Test
- FunctionalScript
- AST to EDAG
- EBNF
- LL1 parser should support
Metapropagation: the metadata channel offjs/ebnf/ast. - Check the
repeatrule:repeatassertsisRepeatBounds. - Rule Transformers in the flow style (SHA2 and the rewrite set).
- Map creation helpers.
- A build-time check of a rewrite set's alphabets — what
checkMapwas for;tscchecks a mapping typed from its rule, and the rest is mapping-precheck. - Parser that applies map rules: the rewrite set
fjs/ebnf/ll1folds. - LL1 parser preparation should fail on non-LL1 grammar.
-
Ast<R extends Rule>, the AST result type for aRule:fjs/ebnf/ast. - Workflow: create EBNF rules and their rewrite set, then create a parser from a root rule. The parser is a
StateFoldover one input symbol at a time, RTTI-free. Design and open questions: 43. Stateful parser. - A special repeat0+ rule:
repeatFrom0.
- LL1 parser should support
- Website Module Browsing
- Demo pages.
- Investigate using Git Commits instead of Evo
- Replace CHANGELOG with a generated from a Website.
- Proposal: Create changelog during release.
- Reformulate "grab and implement" task. It should focus on priorities.
- Generated-file conventions and clean CI regeneration (
gen.*,npm run gen:clean; see CONTRIBUTING.md). - we may try to use
BoundedArray<2, 4, T>instead ofOptionTailArray<2, 4, T>in EDAG and RTTI for[t, t, option(t), option(t)] - NiX and Rust eDSL should follow the same conventions as RTTI, new EBNF, HTML and EDAG. Use plain objects to define normal objects.
- Specify what is
unknownin FJS. The set is smaller than in JS.Map and Settype Primitive = boolean | null | number | string | undefined | bigint type Object = StringMap<Value> type Array = readonly Value[] // DataJS type Value = Primitive|Object|Array // FJS. v1 type Value = Primitive|Object|Array|Function // FJS. v2 (+object identification) type Value = Primitive|Object|Array|Function|Map|Set // FJS. v3 (+generators) type Value = Primitive|Object|Array|Function|Map|Set|IterableGenerators:// declaration new Map(...) new Set(...) // detection value instanceof Map value instanceof Set// declaration. operation `{*[Symbol.iterator]() { ${exp} }} {*[Symbol.iterator](){ ... }} // detection. operation `typeof ${exp}?.[Symbol.iterator]` typeof value?.[Symbol.iterator] === 'function' - If a standard property or property method is not implemented, it should be banned in the property accessor. For example,
obj.hasOwnProperty(prop). - One NiX.
- Module references:
a/module.f.jsimport { x } from './b/module.f.js'a/b/module.f.jsimport { y } from './c/module.js' export const x = y * 2a/b/c/module.f.jsexport const y = 3
- Document about DAG
- EDAG: Object.is
- EDAG implicit function frame can't be done because the exp may contain wrong
arg,selfandframe. - Remove
Result<>fromnanvmand replace it with panic. The idea is that engines can span processes if needed and control memory and time of the process outside. It can work on a normal OS and also in WebAssembly, see Worker. - DISOT in Git. It looks like we have more and more features that we would like to have in the DISOT. For example:
.disot/name.json- a name of the object, it can be just a JSON string.lock.json- mapping. We also need to investigate submodules.tts.json- a set of trusted time stamp for previous commits.
- Git Submodules vs Subtree
- store:
- submodule:
.gitmodulefile contains a path and repository URL, not pinned commit ID.gitlinkhas a specific commit ID
- subtree: use the files directly but
git subtreeprovides a workflow for importing upstream changes and exporting your changes back.
- submodule:
- workflow
- store:
- FJS serializer
- Website - visited links look terrible.