Type inference in the presence of OOP-style subtyping was largely considered to be impossible in 2005; there had been a lot of research results with System F:&lt; and System Fw, along with a well-known undecidability result [1].  Attempts to introduce subtyping into research languages like Haskell and Ocaml gave us records [2] and objects [3], but neither of these were something that an ordinary mainstream programmer would want to use.  Haskell&#x27;s type system made it frustratingly easy to construct types that would force the typechecker into an infinite loop [4].<p>And now Swift not only allows these in a way that&#x27;s familiar to existing mainstream programmers, it interoperates fully with Objective-C and offers additional features like polymorphic literals.  And when polymorphic literals (previously <i>allowed</i> only by Haskell, and then not with user-defined types) makes typechecking take 12 hours [5], it&#x27;s widely decried for being poorly implemented.<p>On the Rust end - the whole concept of the borrow checker was borrowed (sorry) from Cyclone [6][7], a research language of the early 2000s.  I remember seeing it occasionally pop up on Lambda: the Ultimate [8] around 2004-2005, people seemed intrigued, but few people really took notice.  Rust&#x27;s big accomplishment is to generalize this to an &quot;industrial strength&quot; programming language, figuring out all the corner cases around mutability, traits, move-semantics, boxes, etc. that you need for this to work in real programming.<p>[1] <a href="http:&#x2F;&#x2F;repository.cmu.edu&#x2F;cgi&#x2F;viewcontent.cgi?article=3059&amp;context=compsci" rel="nofollow">http:&#x2F;&#x2F;repository.cmu.edu&#x2F;cgi&#x2F;viewcontent.cgi?article=3059&amp;c...</a><p>[2] <a href="http:&#x2F;&#x2F;research.microsoft.com&#x2F;en-us&#x2F;um&#x2F;people&#x2F;simonpj&#x2F;Haskell&#x2F;records.html" rel="nofollow">http:&#x2F;&#x2F;research.microsoft.com&#x2F;en-us&#x2F;um&#x2F;people&#x2F;simonpj&#x2F;Haskel...</a><p>[3] <a href="https:&#x2F;&#x2F;realworldocaml.org&#x2F;v1&#x2F;en&#x2F;html&#x2F;objects.html" rel="nofollow">https:&#x2F;&#x2F;realworldocaml.org&#x2F;v1&#x2F;en&#x2F;html&#x2F;objects.html</a><p>[4] <a href="https:&#x2F;&#x2F;downloads.haskell.org&#x2F;~ghc&#x2F;latest&#x2F;docs&#x2F;html&#x2F;users_guide&#x2F;type-class-extensions.html#undecidable-instances" rel="nofollow">https:&#x2F;&#x2F;downloads.haskell.org&#x2F;~ghc&#x2F;latest&#x2F;docs&#x2F;html&#x2F;users_gu...</a><p>[5] <a href="https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;programming&#x2F;comments&#x2F;4givdg&#x2F;go_home_swift_compiler_youre_drunk&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;programming&#x2F;comments&#x2F;4givdg&#x2F;go_home...</a><p>[6] <a href="http:&#x2F;&#x2F;www.bennetyee.org&#x2F;ucsd-pages&#x2F;Courses&#x2F;cse227.w03&#x2F;handouts&#x2F;cyclone-regions.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bennetyee.org&#x2F;ucsd-pages&#x2F;Courses&#x2F;cse227.w03&#x2F;hando...</a><p>[7] <a href="https:&#x2F;&#x2F;www.cs.umd.edu&#x2F;~mwh&#x2F;papers&#x2F;ismm.pdf" rel="nofollow">https:&#x2F;&#x2F;www.cs.umd.edu&#x2F;~mwh&#x2F;papers&#x2F;ismm.pdf</a><p>[8] <a href="http:&#x2F;&#x2F;lambda-the-ultimate.org" rel="nofollow">http:&#x2F;&#x2F;lambda-the-ultimate.org</a>