Języki programowania ogólnie należą do jednego z dwóch rodzajów języków - języków skompilowanych lub języków interpretowanych. Różnica nie dotyczy jednak języka; jest we wdrażaniu. Nie jest błędem stwierdzenie, że obie są właściwościami implementacji języka, ale nie właściwościami samego języka. Implementacja języka programowania oznacza wypełnienie luki między myśleniem programisty na wysokim poziomie a zerami i zerami maszyny. Jeśli zostanie to wykonane skutecznie, programiści mogą skoncentrować się na rzeczywistych problemach, a nie na szczegółach maszyn. Język programowania można więc kompilować lub interpretować na podstawie implementacji.
Oba rodzaje języków programowania mają swoje zalety. Niektóre języki wymagają skompilowania całego kodu przed wykonaniem dowolnego kodu. Inne języki interpretują każdą instrukcję w momencie wykonywania kodu. W rzeczywistości skompilowane języki są na ogół kompilowane przez programistę na komputerze programisty; gdy programista udostępnia oprogramowanie, on / ona udostępnia skompilowane zera i jedynki, ale nie kod źródłowy. Jednak w języku interpretowanym kod jest zapisywany w tym samym formacie, który wprowadziłeś i musi być przetłumaczony w czasie wykonywania. Rzućmy okiem na szczegółowe porównanie języków skompilowanych i interpretowanych.
Komputery mogą wykonywać tylko język maszynowy, który jest językiem jednostki centralnej (CPU) i jest bardzo prosty. Celem każdej implementacji języka programowania jest przetłumaczenie programu źródłowego na język maszynowy, aby mógł zostać wykonany przez CPU. Wszystkie implementacje językowe tłumaczą program źródłowy na pewną reprezentację pośrednią przed przetłumaczeniem reprezentacji pośredniej na język maszynowy. Najbardziej bezpośrednią metodą tłumaczenia programu na język maszynowy jest kompilacja. Program napisany w skompilowanym języku musi zostać przekonwertowany na inny format przed uruchomieniem. Kod źródłowy musi zostać przekształcony w instrukcje do odczytu maszynowego przed wykonaniem. Krótko mówiąc, języki, których implementacjami są zwykle kompilatory, a nie tłumacze, nazywane są językami skompilowanymi.
Tłumacz to program napisany w innym języku i skompilowany w języku do odczytu maszynowego. Sam interpreter jest programem w języku maszynowym i jest napisany w celu czytania programów źródłowych z tłumaczonego języka i ich interpretacji. W przeciwieństwie do tego język interpretowany nie kompiluje kodu źródłowego na język maszynowy przed uruchomieniem programu. Po prostu interpretuje kod w locie. Nie ma więc zalet ani wad błędów kompilacji. Języki interpretowane wymagają oprogramowania zwanego tłumaczem, który pobiera kod źródłowy i wykonuje jedną instrukcję na raz. Kiedy uruchamiasz zinterpretowany program źródłowy, faktycznie uruchamiasz interpreter. Tłumacz jest programem w języku maszynowym, który wykonuje wszystkie programy, które piszesz w tłumaczonym języku.
- Program napisany w skompilowanym języku musi zostać przekonwertowany na inny format przed uruchomieniem. Kod źródłowy musi zostać przekształcony w instrukcje do odczytu maszynowego przed wykonaniem. W przeciwieństwie do tego język interpretowany nie kompiluje kodu źródłowego na język maszynowy przed uruchomieniem programu. Po prostu interpretuje kod w locie. Języki interpretowane wymagają oprogramowania zwanego tłumaczem, który pobiera kod źródłowy i wykonuje jedną instrukcję na raz.
- W przypadku języków skompilowanych należy wykonać co najmniej dwa kroki od kodu źródłowego do wykonania, natomiast w przypadku języków interpretowanych jest tylko jedno - wykonanie. Program napisany w języku interpretowanym nie jest kompilowany - podczas działania jest interpretowany przez inny program. Program napisany w skompilowanym języku przechodzi proces zmieniania go z formatu tekstowego czytelnego dla człowieka na format czytelny dla komputera. Program zwany kompilatorem dokonuje tego przejścia.
- Skompilowane programy działają szybciej niż interpretowane programy, ale interpretowane programy można modyfikować podczas działania programu. To sprawia, że interpretowane programy są idealne do pisania programów na żywo. Praca ze skompilowanymi językami może być przyjemna, ponieważ podczas kompilacji kodu źródłowego można znaleźć wiele błędów. Te błędy, zwane błędami kompilacji, uniemożliwiają kompilację kodu. Wręcz przeciwnie, języki interpretowane nie są kompilowane, więc nie ma korzyści ani wad błędów kompilacji.
- W przypadku języków interpretowanych wszystkie debugowanie odbywa się w czasie wykonywania. Nie ma kroku kompilacji, w którym można wyrzucić wszystkie błędy składniowe w kodzie; zamiast tego musisz uruchomić program, aby znaleźć w nim jakiekolwiek błędy. Staje się to problemem, gdy interpretowany program modyfikuje pliki lub wprowadza zmiany w zasobach stałych. To sprawia, że niektóre błędy są trudniejsze do wykrycia, ponieważ kod nie wymaga kompilacji. Języki interpretowane stwarzają również pewne obawy dotyczące bezpieczeństwa w środowisku online, ponieważ złośliwy kod może zostać wstrzyknięty w trakcie wykonywania.
Krótko mówiąc, zarówno języki kompilowane, jak i interpretowane mają swoje zalety. Niektóre języki wymagają skompilowania całego kodu przed wykonaniem dowolnego kodu. Inne języki interpretują każdą instrukcję w momencie wykonywania kodu. Główną różnicą między nimi jest to, że istnieją co najmniej dwa kroki od kodu źródłowego do wykonania przy użyciu skompilowanych języków. Jednak w przypadku języków interpretowanych jest tylko jeden krok - wykonanie. Skompilowane programy działają szybciej niż interpretowane programy, ale interpretowane programy można modyfikować podczas działania programu.