On Thu, Jun 5, 2014 at 2:42 AM, Jonathan M Davis via Digitalmars-d-announce <digitalmars-d-announce@puremagic.com> wrote:

Though I confess what horrifies me the most about dynamic languages is code
like this

if(cond)
    var = "hello world";
else
    var = 42;

The fact that an if statement could change the type of a variable is just
atrocious IMHO. 

Yeh, that's possible, but that doesn't look like something anyone with any sense would do.

The things I found most enjoyable about working on javascript were
1) REPL / fully interactive debugger
    When you hit a break point you can just start typing regular js code into the console to poke the state of your system.
    And the convenience of the REPL for seeing what bits of code do as you write them.
2) Duck typing / introspection ability
    If you have a bunch of objects that have a .width property, and that's all you care about, you can just look for that.  No need to declare an IWidthHaver interface and make all of your objects declare that they implement it.
3) Relative ease of writing tests
    We used the Closure compiler for the js I worked on, so it wasn't totally wild west.  It has a fair amount of static type checking.
    But when it comes to tests, it's very convenient to just be able to fake any object by slapping some dummy functions in between curly braces.  For example if I want a fake "IWidthHaver" instance, I just have to write x = { width: 10 }, and I'm done.  Plus I can monkey patch things in tests, replacing whatever method I want with a wrapper that does some custom monitoring before or after calling the real method.  Writing tests for C++ is a pain in the butt in comparison.

--bb