Smalltalk simplicity and consistency vs. other languages (2022) [video]

Smalltalk’s minimal syntax and unified “everything is an object” model are praised for conceptual elegance and powerful live development environments, where code, GUI, editor and debugger coexist in a single image. Commenters counter that this simplicity hides real trade-offs: complex VM and JIT implementations, performance challenges compared to JavaScript or Java, difficulties with packaging, version control and multithreading, and a heavy runtime that limits mainstream use. The conversation widens into how much language and tooling choices matter versus problem-solving, and why more expressive or experimental platforms like Smalltalk, Lisp, F#, or Elixir struggle to gain traction against dominant ecosystems such as Python, C++, and Java.

Simplicity, Syntax, and Trade-offs

  • Smalltalk’s syntax is extremely minimal and uniform, but commenters stress this doesn’t automatically make code easier to read/write or compilers easy to optimize.
  • Blocks and message-passing unify control structures with normal method calls, but require special compiler cases (e.g., inlining ifTrue: / whileTrue:) to avoid major slowdowns.
  • The “everything is a message to a receiver” model pushes design toward distributing behavior across class hierarchies/traits, which some see as elegant and others as adding complexity vs simple functions in other languages.
  • Familiarity strongly influences what feels “simple”; a language that is too minimal can complicate solutions.

Performance and VM Optimization

  • There is lively debate over why Smalltalk VMs historically lag high-performance JS engines.
  • One side attributes it partly to language/VM design (e.g., blocks, dynamic dispatch) being harder to JIT well, comparing Smalltalk’s trajectory to Python’s.
  • Others argue performance differences are mostly about investment: JS has large, well-funded teams; OpenSmalltalk is volunteer-driven. Using Squeak/Pharo as a performance benchmark is called misleading.
  • Examples are cited of high-performance Smalltalk-like systems (Self, Strongtalk, Truffle/Graal-based SOM variants, TruffleSqueak) that can match or beat JS on some benchmarks, challenging “Smalltalk is slow” claims.
  • For Python, the underlying reasons for optimization difficulty are described as unclear; CPython’s tight coupling to C extensions is mentioned but not resolved.

Live Programming Environments

  • Many are fascinated by Smalltalk’s image-based, live environment where code, GUI, debugger, and tools are all integrated and always running.
  • This is contrasted with mainstream workflows that require rebuilding/restarting, seen as a step backward.
  • Emacs and Lisp/Interlisp systems are mentioned as spiritually similar (extensible, live, image-based history) but not identical in experience; Smalltalk is seen as more coherent, Emacs more “kludgy.”
  • Downsides: modern Smalltalk environments can be heavy (e.g., 1GB+ RAM) and awkward to deploy because shipping the VM/image is required.

Practicality, Tooling, and Project Experience

  • Anecdotes describe impressive productivity and tooling in Smalltalk systems (OO databases, workflow engines, IDE-embedded automation).
  • Counter-anecdote: a large secret Smalltalk project that produced almost nothing demoable; language wasn’t the only issue, but secrecy, lack of vetting, and historical SCM/configuration difficulties in Smalltalk played a role.
  • Concerns raised about modern Smalltalk practicality: perceived lack of batteries-included libraries, weak or absent multithreading in common FOSS implementations, and clunky UIs (tiny editors, mouse-centric workflows).
  • Others note earlier commercial Smalltalks were “batteries included” for their era; what’s practical varies by decade.

Language Philosophy and Career Reality

  • Some participants feel mainstream languages (Python, C++, Java) are far less pleasant or expressive than Smalltalk, Lisp, F#, Elixir, etc., but are forced to use them for career reasons.
  • Advice given:
    • Prototype in your preferred language and demonstrate dramatic productivity/value to influence stack choices.
    • Be prepared to teach coworkers if you introduce a niche language.
    • Alternatively, embrace popular tools but apply ideas from “better” languages in design style and abstractions.
  • There’s tension between loving tools vs focusing on problem-solving:
    • One camp says tool aesthetics are a distraction; effectiveness is what matters.
    • Another argues high-quality tools “dissolve” problems and that mastery of tools is crucial.
    • Some suggest a middle ground: don’t be romantically attached to tools, but don’t ignore their impact either.

Comparisons to Other Languages and Systems

  • Smalltalk is repeatedly compared to:
    • Lisp and older Lisp machines/Interlisp systems (images, GC, interactive development).
    • JS, Python, Ruby, and dynamic dispatch models; dictionary-based method lookup is seen as both powerful and a performance drag.
    • Tcl and GNU Smalltalk as scripting options; GNU Smalltalk is characterized as more “Smalltalk-flavored scripting” than full Smalltalk environment, with questionable maintenance status.
  • “Homoiconicity” is debated:
    • Some claim Smalltalk is homoiconic like Lisp; others argue that in compiled Lisps and modern environments, the classic “code as data with same representation” notion doesn’t really apply.

Learning, Minimal Setups, and Experiments

  • People request more “live coding” Smalltalk videos; links are shared to Pharo tutorials, game/live-editing talks, and introductory Smalltalk demos.
  • Glamorous Toolkit (on Pharo) is highlighted as a modern “moldable development” environment where the documentation itself is live, editable code.
  • Some want ultra-minimal Squeak setups (no graphics/sound, REPL-only on small devices like Raspberry Pi Zero); this is described as non-trivial, with no simple, documented path in the thread.
  • Ideas are floated for:
    • A Smalltalk-like system on the Erlang/Elixir BEAM VM to gain concurrency and distribution.
    • Using JS VMs as deployment targets for Smalltalk (e.g., squeak.js).
    • Considering Objective-C (inspired by Smalltalk) as a more practical dynamic alternative today; this is mentioned but not substantially discussed.