None of this is actually inherit to dynamic languages. After all type is just another spec but one that can be used during compilation to generate more more efficient machine code. Another more concerete pontentionally runtime specs can than be added like done in closure. Its interesting to me how each different language eventually naturally encounteres and implements something akin to this. I see huge paralels between specs and C++ concepts which act exactly the same but are only limited to conpile time predicates (which as this talk demonstrates is very limiting factor). It is also interesting that only because of the fact that closure is dynamically typed language people were able to think outside the box and focus on the more general problem without being limited by the traditional concept of types.