...az eredetihez viszonyítva, legalábbis :P
Közben előkerestem egy másik kapcsolódó posztot is:
Mikor ezt még 2014ben olvastam, semennyire sem vágtam a type inference-et, és így nem is értettem sokat belőle.
Akkortájt amikor az eredeti algebraic subtyping cikk+disszertáció megjelent, és említve volt benne ez a "structural subtyping" megszorítás (amikor különböző típuskonstruktorok nem lehetnek altípusozási relációban, és csak a paraméterek közötti viszony a meghatározó), visszakerestem, mert észrevettem, hogy ez a megszorítás igaz a Rust-ra: "csak a lifetimeokra" van subtyping a Rustban. És felderengett hogy volt régen egy poszt vmi furcsa új type inference eljárásukról, lehet-e vajon köze.... és a leírt algoritmus számomra valóban úgy tűnik, hogy kihasználja a tulajdonságot. (És emiatt is kerestem most elő megint.)
És most hogy újból olvasom, látom, hogy használ postponing-ot is (amiről azóta már azt is tudom, hogy így neveznek), meg szerepel benne a típus-alapú rezolúció problémája is. Meg most már kíváncsi vagyok arra is, hogy milyen lehetett vajon a korábbi algoritmusuk, amiről erre tértek át... állítólag valami Hindley-Milneres, ugyanakkor meg "we track a
lower- and upper-bound over time", szóval nem is csak.
Lábjegyzetek:
* Nem tudom, hogy ma is ezt használják-e még, de nincs is ezzel ellenkező értesülésem.
* Amit az előadásban említettem "glitcheket" azok a Rustban nem a lifetimeoknál jönnek elő, hanem az egyéb automatikus konverzióknál, mint az &mut T-ről az &T-re való. (Ők ez utóbbiakat nem hívják "subtypingnak", mert típuskonstruktorok alatt nem működik (nincs rá variance), hanem csak 'elsőrendű' esetekben; helyette a "coercion" szót használják, ami megint más, mint amit a Haskellesek értenek azalatt, és nem tudom hányféle jelentése lehet még. De mindenesetre ők ezekre használják a tárgyalt bidirectional checking + subtypingos módszert.)
* A posztban említi, hogy "If we wanted to extend the scheme to handle more kinds of inference
beyond lifetimes, it can be done by adding new kinds of inference
variables. For example, if we wanted to support subtyping between
structs, we might add struct variables", amiben én most kételkedek, mivel ez már nem férne bele abba a megszorításba. De aztán könnyen lehet, hogy ő tudja jobban.