REPL Driven Development
Table of Contents
- 1. REPL Driven Development
- 1.1. On repl-driven programming
- 1.2. Attempting REPL-Driven Development in Python
- 1.3. REPL Python programming and debugging with IPython process
- 1.4. Debugging
- 1.5. “Stop Writing Dead Programs” by Jack Rusher (Strange Loop 2022) process
- 1.6. “Computational Physics, Beyond the Glass” by Sam Ritchie (Strange Loop 2023) - YouTube
- 1.7. Marimo
- 1.8. REPLs All The Way Up: A Rubric For Better Feedback Loops • Avdi Grimm • GOTO 2023 - YouTube process
- 1.9. I’m Re-Imagining the Command Line Interpreter - YouTube process
- 1.10. REPL Workflow - Practicalli Neovim
- 1.11. Let’s Rethink Debugging - laike9m’s blog
- 1.12. manim 3brown1blue library
- 1.13. MathBox² — Acko.net
- 1.14. scrapscript
- 1.15. Try PureScript!
- 1.16. Interactive Code Cells | Hacker News
- 1.17. repl.it
- 1.18. wasmer.io
- 1.19. Mechanical Watch – Bartosz Ciechanowski
- 1.20. Debugging by starting a REPL at a breakpoint is fun
- 1.21. alternative interfaces
- 1.22. Static Types vs Dynamic Types
1. REPL Driven Development
- ↑ Faster feedback loop speeds up development
- ↓ Hard to setup in some languages/environments (compiled languages, hardware devices)
1.1. On repl-driven programming
1.2. Attempting REPL-Driven Development in Python
1.3. REPL Python programming and debugging with IPython process
1.4. Debugging
1.5. “Stop Writing Dead Programs” by Jack Rusher (Strange Loop 2022) process
- https://news.ycombinator.com/item?id=33251799
Maria https://www.maria.cloud/
Glamorous Toolkit https://gtoolkit.com/
Data Rabbit https://datarabbit.com/
Nextjournal https://nextjournal.com/
Clerk https://github.com/nextjournal/clerk
Enso https://enso.org/ - https://threadreaderapp.com/thread/1552941552401522689.html
- 🎪 Clerk Demo on GitHub
- Clerk: Moldable Live Programming for Clojure
1.5.1. What’s Wrong with Jupyter Notebooks process
https://github.com/nextjournal/clerk
For a good overview of problems users encounter in traditional notebooks like Jupyter, see I don’t like notebooks and What’s Wrong with Computational Notebooks? Pain Points, Needs, and Design Opportunities.
1.5.2. Transcript
1.6. “Computational Physics, Beyond the Glass” by Sam Ritchie (Strange Loop 2023) - YouTube
- Emmy / SICMUtils + Nextjournal Quick Start – Nextjournal
- https://emmy.mentat.org/
- https://reality.mentat.org/essays/reality/introduction
- Clerk seems self-hosted, nextjournal is not
1.7. Marimo
1.8. REPLs All The Way Up: A Rubric For Better Feedback Loops • Avdi Grimm • GOTO 2023 - YouTube process
1.9. I’m Re-Imagining the Command Line Interpreter - YouTube process
1.9.2. Translate what you do in nix shell (imperative) to nix
1.11. Let’s Rethink Debugging - laike9m’s blog
1.11.1. laike9m/Cyberbrain: Python debugging, redefined.
:ID: bfbb5ea5-925b-47c8-8d72-41c7a87e0eb4
1.12. manim 3brown1blue library
- JazonJiao/Manim.js: Replicating 3Blue1Brown’s math animation engine in JavaScript (p5.js)
- Jazon Jiao · Projects
- Animaciones programáticas con Manim como soporte a la docencia universitaria
- RickDW/manim-revealjs: Plugins for using Manim animations in Reveal.js slide decks.
- Elteoremadebeethoven/manim-revealjs-example: Manim RevealJS example
- stevenpetryk/mafs: React components for interactive math
1.14. scrapscript
Scrapscript is best understood through a few perspectives:
- it’s JSON with types and functions and hashed references
- it’s tiny Haskell with extreme syntactic consistency
- it’s a language with a weird IPFS thing
Scrapscript solves the software sharability problem.
Modern software breaks at boundaries. APIs diverge, packages crumble, configs ossify, serialization corrupts, git tangles, dependencies break, documentation dies, vulnerabilities surface, etc.
1.14.1. scrapscript
1.14.2. scrapscript.py | Max Bernstein
1.14.3. The Unison language
1.14.4. scrapscript.py | Hacker News
1.15. Try PureScript!
1.17. repl.it
1.18. wasmer.io
1.21. alternative interfaces
1.22. Static Types vs Dynamic Types
Statically and dynamically typed scripts
For more than a decade I’ve preferred F# or Haskell for ad-hoc scripting. Note that while these languages are statically typed, they are low on ceremony. Types are inferred rather than declared. This means that for scripts, you can experiment with small code blocks, iteratively move closer to what you need, just as you would with a language like Python. Change a line of code, and the inferred type changes with it; there are no type declarations that you also need to fix.