Hacker News new | ask | show | jobs
by gavinray 1681 days ago
I hear this amazement and fascination with REPL's that people have and I don't understand.

In a REPL, you're given a buffer to enter text into, and it evaluates it as you submit this buffer.

This is fine if you live in an age before graphical editors, but today we have tools with a better REPL-like experience.

In VS Code, I can use extensions to show realtime values next to every line of my program, and indicators of whether a branch/code path was ever hit.

This allows me to use an entire file as a visual REPL with instant feedback.

Using an actual REPL sucks compared to being able to regularly edit a file in your editor and get all of this + more without being handicapped to a terminal buffer.

Notebooks are also a worse experience for the same reason. You need to manually trigger "cells", which return a single value/visualization, or add a bunch of print statements.

JavaScript:

https://quokkajs.com/

Python:

https://marketplace.visualstudio.com/items?itemName=xirider....

Scala:

https://scalameta.org/metals/docs/editors/vscode/#worksheets

You can find something like this for most languages, either in VS Code or Jetbrains IDE's

3 comments

Agreed. I dislike all REPLs except maybe the Lisp one. In SML, OCaml, F# they are less useful anyway since the strength of these languages is to build up huge (but sound) abstractions.

I think the fascination with REPLs, especially in the Python world, is that it allows one to produce flashy web page snippets or Jupiter notebooks that look like work while they are really trivial (there is a similarity here to pg's remark that Java is partly popular because the boilerplate looks like work).

These things are just the editor plugin executing the code in a background REPL and showing the output inside the editor, no? While for example real-time updates are pretty cool, I don't see how that makes it not REPL driven development. Nothing is stopping you from having this in Common Lisp (and I'm kind of sure CL already has this in emacs).

Also, this doesn't really allow for everything else Lisp has that go well with the REPL: conditions and restarts, interactive inspection of values and stack frames, etc.

does it fire the missles? how does it handle IO? what if we are poking global mutable state?