Implementacja języka programowania - Programming language implementation

Implementacja języka programowania to system do wykonywania programów komputerowych . Istnieją dwa ogólne podejścia do implementacji języka programowania: interpretacja i kompilacja .

Interpretacja to metoda wykonywania programu. Program jest odczytywany jako dane wejściowe przez interpreter , który wykonuje czynności zapisane w programie.

Kompilacja to inny proces, w którym kompilator odczytuje program, ale zamiast go uruchamiać, kompilator tłumaczy go na inny język, taki jak kod bajtowy lub kod maszynowy . Przetłumaczony kod może być wykonywany bezpośrednio przez sprzęt lub służyć jako dane wejściowe dla innego interpretera lub innego kompilatora.

Interpretator

Interpreter składa się z dwóch części: parser i oceniającego . Po odczytaniu programu jako danych wejściowych przez interpreter, jest on przetwarzany przez parser. Parser dzieli program na komponenty języka, tworząc drzewo analizy . Oceniający następnie używa drzewa parsowania do wykonania programu.

Maszyna wirtualna

Maszyna wirtualna jest specjalnym rodzajem tłumacza, który interpretuje kod bajtowy. Kod bajtowy to przenośny kod niskiego poziomu podobny do kodu maszynowego, chociaż zazwyczaj jest wykonywany na maszynie wirtualnej zamiast na maszynie fizycznej. Aby poprawić ich wydajność, wiele języków programowania, takich jak Java , Python i C#, jest kompilowanych do kodu bajtowego przed interpretacją.

Kompilator just-in-time

Niektóre maszyny wirtualne zawierają kompilator just-in-time (JIT), który poprawia wydajność wykonywania kodu bajtowego. Podczas gdy kod bajtowy jest wykonywany przez maszynę wirtualną, jeśli kompilator JIT ustali, że część kodu bajtowego będzie używana wielokrotnie, kompiluje tę konkretną część do kodu maszynowego. Kompilator JIT następnie przechowuje kod maszynowy w pamięci, aby mógł być używany przez maszynę wirtualną. Kompilatory JIT starają się zachować równowagę między dłuższym czasem kompilacji a szybszym czasem wykonania.

Kompilator

Kompilator tłumaczy program napisany w jednym języku na inny język. Większość kompilatorów jest podzielona na trzy etapy: frontend , optymalizator i backend . Za zrozumienie programu odpowiada frontend. Upewnia się, że program jest prawidłowy i przekształca go w pośrednią reprezentację , strukturę danych używaną przez kompilator do reprezentowania programu. Optymalizator poprawia pośrednią reprezentację, aby zwiększyć szybkość lub zmniejszyć rozmiar pliku wykonywalnego, który jest ostatecznie tworzony przez kompilator. Zaplecze konwertuje zoptymalizowaną reprezentację pośrednią na język wyjściowy kompilatora.

Jeśli kompilator danego języka wysokiego poziomu tworzy inny język wysokiego poziomu, nazywa się to transpilerem . Transpilery mogą być użyte do rozszerzenia istniejących języków lub uproszczenia rozwoju kompilatora poprzez wykorzystanie przenośnych i dobrze zoptymalizowanych implementacji innych języków (takich jak C ).

Możliwych jest wiele kombinacji interpretacji i kompilacji, a wiele nowoczesnych implementacji języka programowania zawiera elementy obu. Na przykład język programowania Smalltalk jest konwencjonalnie implementowany przez kompilację do kodu bajtowego , który jest następnie interpretowany lub kompilowany przez maszynę wirtualną . Ponieważ kod bajtowy Smalltalk jest uruchamiany na maszynie wirtualnej, można go przenosić na różne platformy sprzętowe.

Wiele wdrożeń

Języki programowania mogą mieć wiele implementacji. Różne implementacje mogą być napisane w różnych językach i mogą używać różnych metod do kompilowania lub interpretowania kodu. Na przykład implementacje Pythona obejmują:

Bibliografia

Zewnętrzne linki