Różnica między językami skompilowanymi a interpretowanymi?

Jakie są względne mocne i słabe strony języków skompilowanych i interpretowanych?

Author: Community, 2016-07-20

1 answers

Żadne podejście nie ma wyraźnej przewagi nad drugim-jeśli jedno podejście było zawsze lepsze, są szanse, że zaczniemy go używać wszędzie!

ogólnie rzecz biorąc, , Kompilatory oferują następujące zalety:

  1. Ponieważ mogą zobaczyć cały kod z góry, mogą wykonać szereg analiz i optymalizacji podczas generowania kodu, który sprawia, że ostateczna wersja kodu wykonywana jest szybciej niż tylko interpretacja każdej linii indywidualnie

  2. Kompilatory mogą często generować niskopoziomowy kod, który wykonuje odpowiednik idei wysokiego poziomu, takich jak "dynamiczna wysyłka" lub "dziedziczenie" pod względem wyszukiwania pamięci wewnątrz tabel. Oznacza to, że wynikowe programy muszą pamiętać mniej informacji o oryginalnym kodzie, zmniejszając zużycie pamięci wygenerowanego programu.

  3. skompilowany kod jest na ogół szybszy od kodu interpretowanego, ponieważ wykonywane instrukcje są zwykle tylko dla sam program, a nie sam program plus koszty z tłumacza.

ogólnie rzecz biorąc, Kompilatory mają następujące wady:

  1. niektóre funkcje językowe, takie jak dynamiczne pisanie, są trudne do wydajnego skompilowania, ponieważ kompilator nie może przewidzieć, co się wydarzy, dopóki program nie zostanie uruchomiony. Oznacza to, że kompilator może nie generować zbyt dobrego kodu.
  2. Kompilatory zazwyczaj mają długi czas" uruchamiania" ze względu na koszty przeprowadzenia wszystkich analiz, które wykonują. Oznacza to, że w ustawieniach takich jak przeglądarki internetowe, w których ważne jest szybkie ładowanie kodu, Kompilatory mogą być wolniejsze, ponieważ optymalizują krótki kod, który nie będzie uruchamiany wiele razy.

Ogólnie rzecz biorąc [[4]}, tłumacze mają następujące zalety:

  1. Ponieważ mogą odczytać kod tak, jak został napisany i nie muszą wykonywać kosztownych operacji, aby wygenerować lub zoptymalizować kod, Zwykle uruchamiają się szybciej niż Kompilatory.

  2. Ponieważ interpretatorzy mogą zobaczyć, co program robi podczas jego działania, interpreterzy mogą użyć wielu dynamicznych optymalizacji, których Kompilatory mogą nie być w stanie zobaczyć.

Ogólnie rzecz biorąc , tłumacze mają następujące wady:

  1. Tłumacze zazwyczaj zużywają więcej pamięci niż Kompilatory, ponieważ tłumacz musi przechowywać więcej informacji o programie na stronie runtime.

  2. Interpreterzy zazwyczaj spędzają trochę czasu w kodzie interpretera, co może spowolnić uruchamianie programu.

Ponieważ interpretery i kompilatory mają uzupełniające się mocne i słabe strony, coraz powszechniejsze staje się łączenie elementów obu. Dobrym tego przykładem jest JVM Javy - sam kod Javy jest kompilowany i początkowo interpretowany. JVM może następnie znaleźć kod, który jest uruchamiany wiele, wiele razy i skompilować go bezpośrednio do kodu maszynowego, co oznacza, że" gorący "kod czerpie korzyści z kompilacji, podczas gdy" zimny " kod nie. JVM może również wykonywać wiele dynamicznych optymalizacji, takich jak wbudowane buforowanie, aby przyspieszyć wydajność w sposób, którego Kompilatory zwykle nie robią.

Wiele współczesnych implementacji JavaScript używa podobnych sztuczek. Większość kodu JavaScript jest krótka i nie robi tyle, więc zazwyczaj zaczynają używać interpretera. Jeśli jednak stanie się jasne, że kodeks jest uruchamiany wielokrotnie, wiele silników JS kompiluje kod - lub przynajmniej kompiluje jego fragmenty - i optymalizuje go przy użyciu standardowych technik. Wynikiem netto jest to, że kod jest szybki przy starcie (przydatne do szybkiego ładowania stron internetowych), ale staje się szybszy im bardziej działa.

Ostatni szczegół jest taki, że języki nie są kompilowane ani interpretowane. Zazwyczaj kod C jest kompilowany, ale dostępne są interpretery C, które ułatwiają debugowanie lub wizualizację kodu, który jest są uruchamiane (są często używane w początkowych klasach programowania-a przynajmniej kiedyś były.) JavaScript był uważany za język interpretowany, dopóki niektóre silniki JS nie zaczęły go kompilować. Niektóre implementacje Pythona są wyłącznie interpreterami, ale można uzyskać Kompilatory Pythona, które generują natywny kod. Niektóre języki są łatwiejsze do kompilacji lub interpretacji niż inne, ale nic nie stoi na przeszkodzie, aby stworzyć kompilator lub interpreter dla konkretnego programowania język. Istnieje teoretyczny wynik zwany projekcjami Futamury , który pokazuje, że wszystko, co może być interpretowane, może być skompilowane, na przykład.

 73
Author: templatetypedef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 22:05:35