{"id":22843394,"url":"https://github.com/milahu/treepipes","last_synced_at":"2026-02-06T04:02:49.518Z","repository":{"id":109861513,"uuid":"571943627","full_name":"milahu/treepipes","owner":"milahu","description":"incremental tree transformers","archived":false,"fork":false,"pushed_at":"2022-11-29T14:03:45.000Z","size":46,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-12T19:48:12.998Z","etag":null,"topics":["concept","differential-dataflows","durchgriff","hot-reload","hot-reloading","incremental","incremental-codegen","incremental-compilation","incremental-compiler","incremental-computing","incremental-evaluation","incremental-semantics","live-coding","low-latency","program-transformation","term-rewriting"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/milahu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-29T08:15:25.000Z","updated_at":"2025-05-20T16:16:28.000Z","dependencies_parsed_at":"2023-04-09T21:02:23.409Z","dependency_job_id":null,"html_url":"https://github.com/milahu/treepipes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/milahu/treepipes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milahu%2Ftreepipes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milahu%2Ftreepipes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milahu%2Ftreepipes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milahu%2Ftreepipes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milahu","download_url":"https://codeload.github.com/milahu/treepipes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milahu%2Ftreepipes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29149594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T02:39:25.012Z","status":"ssl_error","status_checked_at":"2026-02-06T02:37:22.784Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concept","differential-dataflows","durchgriff","hot-reload","hot-reloading","incremental","incremental-codegen","incremental-compilation","incremental-compiler","incremental-computing","incremental-evaluation","incremental-semantics","live-coding","low-latency","program-transformation","term-rewriting"],"created_at":"2024-12-13T02:14:33.742Z","updated_at":"2026-02-06T04:02:49.476Z","avatar_url":"https://github.com/milahu.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# treepipes\n\nincremental tree transformers\n\n## status\n\nconcept\n\n## example\n\n```\n┌──────────┐              ┌──────────┐\n│ TSX Text │ ── Parse ──► │ TSX Tree │\n└──────────┘              └──────────┘\n                               |\n                            Compile\n                               │\n                               ▼\n                          ┌──────────┐\n                          │ JSX Tree │\n                          └──────────┘\n                               |\n                            Compile\n                               │\n                               ▼\n┌──────────┐              ┌──────────┐\n│ JS  Text │ ◄── Print ── │ JS  Tree │\n└──────────┘              └──────────┘\n```\n\nevery arrows is an **incremental** transformer, aka \"pipe\"\n\ncompiler 1 is typescript (tsc)\n\ncompiler 2 is a web framework like svelte, solid, qwik ...\n\ngoal: low latency between input and output\n\n## incremental parsing\n\n- http://tree-sitter.github.io/tree-sitter/\n- https://lezer.codemirror.net/\n  - https://github.com/lezer-parser\n  - https://github.com/lezer-parser/lr - lezer runtime\n  - https://github.com/lezer-parser/generator - lezer parser generator\n\n## incremental transforming\n\n### term rewriting\n\n- https://en.wikipedia.org/wiki/Rewriting\n  - rewriting covers a wide range of methods of replacing subterms of a formula with other terms.\n  - https://en.wikipedia.org/wiki/Rewriting#Term_rewriting_systems\n- http://rewriting.loria.fr/systems.html\n- http://homepages.math.uic.edu/~jan/mcs320/mcs320notes/lec15.html\n- https://github.com/kovasb/combinator - Experiments with fast term-rewriting in clojure\n- https://github.com/joshrule/term-rewriting-rs - term-rewriting in Rust\n- https://github.com/cisco/ChezScheme - fast Scheme interpreter\n- https://github.com/topics/term-rewriting\n- https://github.com/noprompt/meander - 800 stars - Clojure\n- https://github.com/usethesource/rascal - 300 stars - Java\n\n### incremental computing\n\n- https://en.wikipedia.org/wiki/Incremental_computing\n- https://github.com/janestreet/incremental - A library for incremental computations, in OCaml\n- https://github.com/adapton/adapton.rust - General-purpose abstractions for incremental computing, in Rust\n- https://github.com/carlssonia/adaptive - Library for incremental computing, in Haskell\n- https://doi.org/10.1007/978-3-642-04652-0_1 at https://sci-hub.ru/ - Delta ML - Self-adjusting Computation with Delta ML\n- https://github.com/MetaBorgCube/IceDust - A language for data modeling and incremental computing of derived values, with Java backend\n- https://github.com/vmware/differential-datalog - 1K stars - Java, Rust, Haskell - programming language for incremental computation\n  - based on https://github.com/TimelyDataflow/differential-dataflow - 2K stars - Rust - implementation of differential dataflow using timely dataflow on Rust\n\n### incremental compilers\n\n- https://www.geeksforgeeks.org/incremental-compiler-in-compiler-design/\n\n#### incremental compiler generators\n\n- https://github.com/nfomon/shok/tree/master/statik - http://statik.rocks/ - https://doi.org/10.1145/2814189.2817278 at https://sci-hub.ru/ - Statik: an incremental compiler generator, Michael Biggs, 2015. Statik allows you to write a compiler as a sequence of \"phases\" of parsing. Each phase incrementally translates an input list to an output list. For example, your compiler might be constructed as the pipeline: lexer -\u003e parser -\u003e code-generator. The lexer incrementally translates source-code characters to tokens. The parser translates incremental changes to the token list, to an incrementally-updating parse tree. The code-generator responds to the changing parse tree by generating the bytecode for those changes, and emits the bytecode changes incrementally.\n\n### incremental code generators\n\naka: incremental codegen\n\n- https://github.com/dotnet/roslyn/blob/main/docs/features/incremental-generators.md - C# compiler\n- https://andrewlock.net/creating-a-source-generator-part-1-creating-an-incremental-source-generator/\n\n### differential dataflows\n\nfocus on GraphQL\n\n- https://github.com/topics/differential-dataflows\n- https://github.com/comnik/declarative-dataflow - 300 stars - Rust - A reactive query engine built on differential dataflow\n  - https://www.nikolasgoebel.com/2018/09/13/incremental-datalog.html - a method of continuously executing Datalog queries over data streams, by compiling them to differential dataflows\n  - https://github.com/sixthnormal/clj-3df - 300 stars - Clojure - Clojure(Script) client for Declarative Dataflow\n\n### reactive programming\n\n- https://en.wikipedia.org/wiki/Reactive_programming\n- https://github.com/ReactiveX - a library for composing asynchronous and event-based programs using observable sequences\n  - https://github.com/ReactiveX/rxjs - 30K stars - javascript\n- https://github.com/sveltejs/svelte - 60K stars - javascript - compiler for reactive user interfaces\n- https://github.com/solidjs/solid - 20K stars - javascript - compiler for reactive user interfaces\n\n#### functional reactive programming\n\n- https://en.wikipedia.org/wiki/Functional_reactive_programming\n- https://github.com/search?o=desc\u0026q=functional+reactive+programming\u0026s=stars\u0026type=Repositories\n- https://github.com/baconjs/bacon.js - 6K stars - javascript\n- https://github.com/paldepind/flyd - 2K stars - javascript\n- https://github.com/SodiumFRP/sodium-rust - 50 stars - rust - A Functional Reactive Programming (FRP) library for Rust\n- https://github.com/staltz/xstream - 2K stars - javascript - functional reactive stream library\n- https://github.com/cyclejs/cyclejs - 10K stars - javascript - functional and reactive JavaScript framework\n  - based on: [most](https://github.com/cujojs/most), [rxjs](https://github.com/ReactiveX/rxjs), [xstream](https://github.com/staltz/xstream)\n  \n### program-transformation\n\n- https://github.com/topics/program transformation\n- https://github.com/comby-tools/comby - 2K stars - ocaml - A code rewrite tool for structural search and replace that supports ~every language\n\n### source to source compilers\n\n- https://github.com/topics/source-to-source\n- https://github.com/topics/transpiler\n- https://github.com/topics/refactoring-tools\n- https://github.com/onelang/OneLang - 1K stars - javascript - TypeScript, C#, Ruby \u0026rarr; C++, C#, Go, Java, JS, Perl, PHP, Python, Ruby, Swift, TypeScript\n  - https://github.com/onelang/OneLang/wiki/OneLang-vs.-Haxe-vs.-Progsbase-comparison\n- https://github.com/jarble/transpiler - 400 stars - javascript - A universal translator for programming languages\n- https://github.com/usethesource/rascal - 300 stars - java\n- https://haxe.org - haxe \u0026rarr; AS2, AS3, C++, C#, Java, JS, Lua, Neko, PHP, Python\t\n- https://www.progsbase.com/ - java \u0026rarr; Java, C, C++, JavaScript, C#, R, PHP, Python, Visual Basic\n- https://github.com/pfusik/cito - cito \u0026rarr; C, C++, C#, Java, JavaScript, Python, Swift, TypeScript, OpenCL C\n- https://github.com/oven-sh/bun - 40K stars - Zig - JavaScript runtime, bundler, transpiler, package manager. TS, TSX, JSX, MJS, CJS \u0026rarr; JS\n- https://github.com/pseudo-lang/pseudo - 700 stars - python - Pseudo \u0026rarr; JS, Go, C#, Ruby\n- https://github.com/jtransc/jtransc - Java, Kotlin, Scala \u0026rarr; X\n- https://github.com/akameco/s2s - 300 stars - javascript - based on Babel\n- https://github.com/LangTrans/LangTrans - 20 stars - python\n\n### hot module reload\n\n- https://figwheel.org/docs/reloadable_code.html - live coding system in clojurescript, based on google closure compiler\n- https://github.com/solidjs/solid-refresh\n\n## incremental printing\n\nTODO\n\n## electrical engineering\n\n\"durchgriff\" is a german term in electrical engineering\n\nin english: reachthrough, punchthrough, passthrough, passage, control ratio, penetration factor\n\n- https://de.wikipedia.org/wiki/Durchgriff\n  - https://de.wikipedia.org/wiki/Durchgriff_(Elektrotechnik)\n  - https://de.wikipedia.org/wiki/Zustandsraumdarstellung\n    - https://en.wikipedia.org/wiki/State-space_representation\n\nwe can reduce complex (non-linear) systems to simple (linear) systems,\nby limiting the range of input parameters\n\nexample: amplifier\n\nfor high-fidelity signal amplfication,\nyou want to run the amplifier in its linear range\n\nif you make it too loud then you get clipping,\nif you make it too silent then you get no output\n\nin the linear range, the amplifier has a linear \"durchgriff\" from input to output:\na small change on the input will produce a small change on the output\n\n## see also\n\n- https://github.com/milahu/nix-eval-js/blob/main/docs/incremental-computing.md\n- https://github.com/milahu/nix-eval-js/blob/main/docs/normal-form.md\n- https://github.com/milahu/nix-eval-js/tree/main/docs#lazy-evaluation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilahu%2Ftreepipes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilahu%2Ftreepipes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilahu%2Ftreepipes/lists"}