A perfectable programming language
Writing style and presentation
- Several comments focus on the article’s lowercase-first-word style and heavy swearing.
- Some see it as an informal chat/IM style imported into blogs; others find it painful to read in longform.
- A few deliberately use all-lowercase as a personal or aesthetic choice; others call for more conventional grammar for readability (including for machine readers).
- Capitalization is also described as a tone marker (e.g., to signal sarcasm or dismissiveness).
Lean tooling, docs, and distribution
- The interactive site is praised for hover-based code documentation, attributed to the Verso system.
- Lean is commonly installed via VS Code; some find this amusing, others say it’s sensible to polish that path.
- Emacs and Neovim integrations are reported as solid alternatives.
- A major complaint is Lean 4’s distribution size (≈2.5 GiB unpacked vs ~15 MiB for Lean 3), mostly due to compiled IR/environment files (.olean/.ilean/.ir).
- Suggestions like compressing IR files have been floated but (per comments) not effectively realized. Some see this as bloat and a regression.
Lean’s role among proof-oriented languages
- Lean 4 is praised as an expressive, high-quality functional language; some want it to eventually replace Haskell for typed FP in production.
- Others feel its “perfectability” is limited by non-constructive axioms in the standard library.
- F* is recommended as more practical for proof-oriented programming and low-level verified code; Agda and Idris2 are preferred by some for “mathy” or program-oriented dependent types.
Types, safety, and language evolution
- There is debate over the claim that dynamically typed languages “tend to grow types.”
- One side stresses that all values already have types; exposing them helps tooling and linters, explaining trends in PHP/Python.
- Others argue this is driven by a vocal pro-type minority and that type advocates understate trade-offs.
- Some note dynamic languages accreting static features, while static languages rarely move toward dynamism.
Semantics surprises and Lean “footguns”
- Examples: converting 256 to
UInt8and subtracting4 - 5 : Natboth yield 0 instead of compile-time errors. - Critics call this surprising and unsafe; they want safe-by-default operations with explicit “unchecked/saturating” variants and distinct notation.
- Defenders argue these total, saturating/wrapping semantics are reasonable defaults and avoid burdensome proof obligations for every subtraction, while strict proofs are still possible where needed.
- This is used both as criticism of Lean’s API design and as a discussion of the practical limits of encoding invariants in types.
Lisp, homoiconicity, and culture
- Some equate Lean’s “perfectable” self-description with Lisp-style homoiconicity.
- The “Lisp Curse” (power causing fragmentation and odd local cultures) is raised; others counter that modern Lisp ecosystems can be highly productive and unify disparate runtimes.
- There’s debate over how much Lisp is actually used in everyday software, with one commenter noting we lack visibility into much infrastructure code.
Dependently typed languages compared
- Idris2 is highlighted as particularly well-designed and program-centric, with an interactive “hole-driven” workflow that feels like Haskell with stronger types and good editor support.
- F* and similar systems integrate heavy SMT solving; commenters find these powerful but cognitively taxing for complex software because of constant context switching.
- Lean is described as proof-goal–centric: work is framed around adjusting proof strategies and lemmas, suiting mathematics but feeling less like ordinary programming.
- Some feel there is still no dependently typed language that is clearly aimed at everyday software development first.
“Perfect language” wishlists and trade-offs
- One detailed wishlist combines Go’s speed and single-binary deployment, Kotlin-like types, OCaml-style result/option and pattern matching, Elixir-like docs/tests, strong REPL, and minimal transitive dependencies, without a heavy VM.
- Others respond that such a “one size fits all” language conflicts with the reality that languages are designed for specific contexts (e.g., Go for Google-scale services, Erlang for telecoms).
- Examples like Common Lisp/SBCL and Delphi are proposed as already meeting many wishlist items; differing opinions remain on type-system sophistication (Kotlin vs Scala/Haskell) and VM trade-offs.
Practical use and ecosystem
- Questions arise about whether Lean and other provers run real-world businesses.
- Replies cite use of Isabelle and Lean at a major cloud provider, and formally verified compilers (like CompCert) in regulated industries, plus tools like TLA+ for practical design work.
- Some express fatigue with Lean 4 due to regressions (e.g., unification issues) and the default reliance on GitHub-based packaging.