I find this slow march in &quot;modern&quot; language design toward completely static compilation models troublesome to the extreme. It feels like a significant historical regression; they speak as if Smalltalk and the Metaobject Protocol are things to revile and shun, not elegant programming models that we as programmers should aspire to understand and use in our own programs.<p>To elide these features as a matter of principle implies that you believe your compilation model is perfect, and is able to deduce all information necessary for optimal compilation of your program statically, perhaps augmented with profiling information you have obtained from earlier runs. It also makes upgrading programs for users more difficult since patches must be applied in a non-portable manner across programs. I shan&#x27;t mention the fact that they make iterative, interactive development an ordeal. The Swift REPL is progress (although REPLs for static languages are nothing new), but it still pales in comparison to the development and debugging experience in any Smalltalk or Lisp system.<p>There is no reason why the typing disciplines Swift is designed to support should demand the eradication of all dynamism in the runtime and object model.<p>If you have never heard of the Metaobject Protocol or similar concepts before, here is the standard reference: <a href="https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;books&#x2F;art-metaobject-protocol" rel="nofollow">https:&#x2F;&#x2F;mitpress.mit.edu&#x2F;books&#x2F;art-metaobject-protocol</a><p>This discussion also reminds me of this essay by Richard P. Gabriel: <a href="https:&#x2F;&#x2F;www.dreamsongs.com&#x2F;SeatBelts.html" rel="nofollow">https:&#x2F;&#x2F;www.dreamsongs.com&#x2F;SeatBelts.html</a>