Obecnie robię rekruta na uniwersytet o F #. Mam pytanie dotyczące interaktywnej konsoli F # i kompilatora F #.Czy F # Interpreter (fsi.exe) również tworzy pośredni kod języka, tak jak robi to F # Compiler (fsc.exe)?
Kompilator F # generuje kod języka MSLA (Intermediate Language) Microsoft podczas kompilowania zasobu F #. Jest to następnie tłumaczone przez kompilator JIT na kod maszynowy podczas wykonywania napisanego programu.
Co robi konsola tłumaczeń F #? Czy to także linia-na-linii tłumaczy F # Code na MSIL, a następnie JIT to na kod maszynowy? Czy też tłumaczy F # -Code bezpośrednio na kod maszynowy?
Jeśli najpierw konwertuje to do IL, to myślę, że prawdopodobnie będzie interpreter IL, ponieważ kompilator JIT kompiluje tylko kompletne programy. Czy nie?
Co myślisz, jak F # -interpreter obsługuje kod F # i tłumaczy go?
Pozdrowienia, Martin
Szybki plik źródłowy sugeruje, że AbsIL nie używa System.Reflection.Emit, ale generuje plik binarny bezpośrednio do strumienia BinaryWriter .NET. W niektórych miejscach wydaje się również używać niestandardowego ByterBuffer zdefiniowanego w bajtach.fs. Wierzę, że tak jest, ponieważ pierwotnie AbsIL musiał przejść kompilację z OCaml, ale odszedł od tego, jak kompilator był przywiązany do butów. – Robert
@Robert, spójrz na drugi link mojego posta, zobaczysz, że ma backend SRE, jak określono w nagłówku: "Napisz abstrakcyjne struktury IL w czasie wykonywania za pomocą Reflection.Emit» –
Ponadto, biorąc pod uwagę liczbę problemów, które fsi wywołało i nadal wyzwala w implementacji SRE Mono, mogę powiedzieć z doświadczenia :) –