Diminishing returns of static typing
What amuses me in all &quot;static typing versus...&quot; discussions, is that it usually it is the comparison between two camps:<p>Camp A: Languages with mediocre static typing facilities, for example:<p><pre><code>     -- C (weakly typed)
     -- C++ (weakly typed in parts, plus over-complicated
        type features) 
     -- TypeScript (the runtime is weakly typed, 
        because it&#x27;s Javascript all the way down)
</code></pre>
Camp B: Languages with mediocre dynamic typing facilities, for example:<p><pre><code>     -- Javascript (weakly typed) 
     -- PHP 4&#x2F;5 (weakly typed) 
     -- Python and Ruby (no powerful macro system to 
        help you keep complexity well under control 
        or take fulll advantage of dynamicism)


</code></pre>
Both camps are not the best examples of static or dynamic typing. A good comparison would be between:<p>Camp C: Languages with very good static typing facilities, for example:<p><pre><code>     -- Haskell
     -- ML
     -- F#
</code></pre>
Camp D: Languages with very good dynamic typing facilities, for example:<p><pre><code>     -- Common Lisp
     -- Clojure
     -- Scheme&#x2F;Racket
     -- Julia
     -- Smalltalk

 </code></pre>
I think that as long as you stay in camp (A) or (B), you&#x27;ll not be entirely satisfied, and you will get criticism from the other camp.