I need some help understanding some of the points from Paul Graham’s What Made Lisp Different.
A new concept of variables. In Lisp, all variables are effectively pointers. Values are what have types, not variables, and assigning or binding variables means copying pointers, not what they point to.
A symbol type. Symbols differ from strings in that you can test equality by comparing a pointer.
A notation for code using trees of symbols.
The whole language always available. There is no real distinction between read-time, compile-time, and runtime. You can compile or run code while reading, read or run code while compiling, and read or compile code at runtime.
What do these points mean? How are they different in languages like C or Java? Do any other languages other than Lisp family languages have any of these constructs now?