@dubiousdisc wrote:
«The killer feature of Lisps is not macros or structural editing (though those are nice too). The killer feature is REPL-driven development. Writing and testing code are not separate stages; they are intertwined. It's a completely different way to program.»

The latter two sentences are true (we can add exploration to writing and testing).
I don't think that there is a _single_ killer feature, though.
For example, REPLs are available for quite a few languages nowadays, but these languages still don't "feel like" Lisp.

What is usually called homoiconicity is also important, for example, not so much by itself, but by the way it affects directly or indirectly many aspects of using a language.
A lot has been said about homoiconicity, of course, but still, let me add an illustration.
Define a quine as an expression Q in a programming language such that Q is equal to eval(Q).
Obviously, the precise representation of Q and the precise notion of equality will be language-dependent.
Now, compare a quine (in the above sense) in a Lisp to a quine in Python.

With regards to another aspect of the big topic, see also an old paper by Guy Steele called Growing a Language (or Making a Language that Can Grow, or something like that).

#ComputerProgramming
#GrowingALanguage
#Homoiconicity
#Lisp
#Programming
#ProgrammingLanguages
#Quines
#ReadEvalPrintLoop
#REPL

Growing a Language, by Guy Steele

YouTube