Another thing that comes to mind is the pervasive use of a single ubiquitous data structure throughout the language and the libraries: cons lists in the case of Scheme maps (called objects ) in the case of ECMAScript Then there is not just the fact that ECMAScript has first-class procedures, but that those procedures are the only abstraction mechanism. (Or more precisely encapsulation mechanism. ).
Another thing that comes to mind is the pervasive use of a single ubiquitous data structure throughout the language and the libraries: cons lists in the case of Scheme, maps (called objects) in the case of ECMAScript. Then there is not just the fact that ECMAScript has first-class procedures, but that those procedures are the only abstraction mechanism. (Or more precisely encapsulation mechanism.).
Well I guess ES5 will get that too. – Pointy Mar 12 at 14:49 @Pointy: You mean ES6? Yes, AFAIK, let is already in ES-Harmony.
Basically, var is going to be abandoned, and is replaced with let (properly lexically scoped) and const (cannot be rebound). – Jörg W Mittag Mar 12 at 16:14 @Pointy, let is just a syntax sugar. You can do the same in js: (function (x) { ... })( ... ) instead of (let ((x ...)) ...).
– SK-logic Mar 14 at 10:17 @SK-logic well yes I understand that, but it's a little more than just sugar; instantiating a function object is somewhat costly. (Of course, I suppose that creating a new scope via "let" might be non-trivial too.) – Pointy Mar 14 at 11:04 @Pointy, I believe that any decent functional (or nearly-functional) language compiler or interpreter must optimise these trivial application cases out, so it should be safe to resort to a function application. I'll check how V8 perform in such cases... – SK-logic Mar 14 at 11:10.
One thing that should be high on this list is having a REPL. Seems like a technicality, especially when these repls are usually hidden behind some "developer tools" thing, but it has a huge effect on the language. (For example, it's natural to have a real eval when there's a repl, etc.) It basically puts dynamic evaluation of code have first class status, which is extremely useful for something like JS, and probably has contributed much more to its success than first class functions (which really were hardly used until a few years ago).
Wow, I missed the elephant in the room. This is obviously related to other features (runtime inspection, eval, no explicit compilation), but arguably more important that any of them individually. – Ken Mar 13 at 18:15.
Off the top of my head, plus glancing at Wikipedia: Block structure Runtime inspection Eval No (explicit) compilation step Small but rich stdlib Shared namespace for procedures and variables.
Well, JavaScript lacks homoiconicity, and this is one of the main properties of Lisp dialects.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.