2013-03-07 15 views
10

Podczas badania typowania strukturalnego znalazłem następujący wpis opisujący how interfaces in Go are translated to method lookup tables at runtime. Proces opisany w poście wydaje się znacznie odmienny od opisanego w reflective and generative techniques dla opcjonalnego systemu strukturalnego Scala i dla rozszerzenia języka White Oak w języku Java.Implementacja typowania strukturalnego OCaml, Scala i Go

Czy są jakieś szczegółowe zasoby, które omawiają, w jaki sposób typowanie strukturalne jest realizowane w OCaml? Szczególnie interesuje mnie dyskusja na temat optymalizacji lub porównania wydajności w czasie pracy z systemami nominalnymi.

+0

ciekawe pseudo. – didierc

Odpowiedz

8

Możesz znaleźć dość szczegółowy opis elementów wewnętrznych obiektu OCaml w this blog post autorstwa Jake'a Donhama. Istotą jest to, że obsługa obiektów jest w większości realizowana jako an internal library, z tylko odrobiną logiki w samym kompilatorze (i oczywiście logiką typowania obiektu w systemie typu), głównie wokół wydajnego wysyłania wiadomości.

Nie jestem ekspertem w tej części języka, ale po pobieżnej inspekcji wygląda na to, że OCaml polega na wyszukiwaniu metod w posortowanym typie metody (rozwiązane w slotach w tabeli metod), z buforowaniem dla metoda zwana last i optymalizacja statycznie znanych wywołań, w szczególności self-call w implementacjach metod. Na koniec niektóre powszechnie używane funkcje (na przykład zmienne pobierające i ustawiające zmienne) są rozpoznawane i kodowane specjalnie (typ impl w wewnętrznej bibliotece OO), aby poprawić wydajność i, co ważniejsze, zmniejszyć rozmiar kodu.