Istnieje wiele sposobów na rozróżnienie języków programowania. Na początek wpadają w różne paradygmaty: funkcjonalne, obiektowe i nie tylko.
Możesz także sklasyfikować język programowania za pomocą metody tłumaczenia, co ma duży wpływ na wydajność języka. Skompilowane języki programowania są zwykle szybsze niż języki interpretowane. Tak więc w sytuacjach takich jak tworzenie gier, które wymagają szybkości, programiści zwykle używają języków skompilowanych.
Co to jest tłumaczenie?
Proces tłumaczenia konwertuje kod napisany przez programistę na kod maszynowy, który może wykonać komputer. Kod maszynowy to rodzaj języka niskiego poziomu, który ma jedynki i zera. Tłumacz konwertuje więc kod wysokiego poziomu, który tworzysz w języku programowania, na kod maszynowy.
Bez tłumaczy musiałbyś kodować w języku maszynowym. Każdy znany Ci język programowania wysokiego poziomu wykorzystuje jedną z trzech metod tłumaczenia: kompilator, interpreter lub hybrydę tych dwóch.
Co to jest kompilator?
Kompilator to oprogramowanie, które konwertuje kod źródłowy napisany w języku wysokiego poziomu na kod niskiego poziomu w celu wykonania.
Powyższy diagram przedstawia kompilator w jego najbardziej podstawowej formie. Kompilator ma kilka faz. Każda faza przekształca kod z jednego stanu do drugiego. Celem każdej fazy kompilatora jest utworzenie danych wyjściowych, którymi łatwiej będzie manipulować w kolejnej fazie. Ogólna struktura kompilatora jest następująca:
- Skaner: ta faza pobiera strumień znaków i grupuje je w tokeny reprezentujące identyfikatory, literały ciągów i tak dalej.
- Parser: ta faza grupuje tokeny na podstawie gramatyki źródłowego języka programowania. Tworzy abstrakcyjne drzewo składni, które jest zbiorem wyrażeń składających się na program.
- Semantyka: w tej fazie przeprowadzana jest analiza semantyczna abstrakcyjnego drzewa składni (AST). Wykorzystuje reguły języka źródłowego, aby dodać znaczenie, przypisując typy wyrażeniom AST i sprawdzając ich poprawność. AST staje się wtedy reprezentacją pośrednią.
- Reprezentacja pośrednia (IR): ta faza konwertuje oryginalny kod źródłowy programu na kod maszynowy. Tworzy uproszczoną wersję kodu asemblera. IR wykorzystuje jeden lub więcej optymalizatorów do ulepszania kodu IR i zbierania informacji o maszynie, na której działa. Optymalizator może sprawić, że program będzie bardziej wydajny, szybszy lub nawet mniejszy.
- Generator kodu: ta faza wykorzystuje zoptymalizowany kod IR i konwertuje go na kod maszynowy.
Które języki programowania używają kompilatorów?
Niektóre popularne skompilowane języki programowania to:
- C
- C++
- Iść
- Ada
- Fortran
- COBOL
- Seplenienie
- Cel C
- Szybki
Jedną z zalet korzystania z języka kompilowanego jest to, że identyfikuje błędy podczas kompilacji. Pozwala to naprawić takie błędy, a następnie ponownie spróbować skompilować program. Języki skompilowane są mniej podatne na niepowodzenie po rozpoczęciu wykonywania. Te języki nie wygenerują nawet programu do uruchomienia, jeśli kod źródłowy zawiera błędy składniowe. Ale błędy semantyczne i inne rodzaje błędów w czasie wykonywania ominą to.
Języki skompilowane również działają bardzo szybko po skompilowaniu.
Kim jest tłumacz?
Interpreter to program, który tłumaczy i wykonuje pojedynczą linię kodu na raz. Proces ten powtarza się, dopóki interpreter nie dotrze do ostatniej linii kodu w danym programie lub skrypcie.
Jak widać na powyższym diagramie, interpreter pobiera dwa wejścia. Najpierw zajmuje cały kod źródłowy (program). Następnie odczytuje pierwszy wiersz programu (jako dane wejściowe), tłumaczy i wykonuje go. Jeśli ten wiersz działa poprawnie, przechodzi do następnego wiersza w programie lub skrypcie.
W przeciwieństwie do kompilatora, interpreter nie tłumaczy całego programu na kod maszynowy. Zamiast tego analizuje i analizuje dany wiersz kodu przed jego wykonaniem. Interpreter powinien zacząć uruchamiać program — zwłaszcza większy — zanim kompilator skończy go tłumaczyć.
Które języki programowania używają tłumaczy?
Niektóre popularne interpretowane języki programowania to:
- Pyton
- JavaScript
- Perl
- MATLAB
- PODSTAWOWY
Chociaż interpreter zaczyna wykonywać kod szybciej, nadal nie powiedzie się, jeśli napotka błąd. Jako programista musiałbyś naprawić taki błąd i zrestartować program. To zdarzenie występuje za każdym razem, gdy interpreter napotka nowy błąd. Niektóre błędy mogą być uśpione, jeśli dotyczą rzadkiego zestawu okoliczności. W takich sprawach, testowanie jest ważniejsze niż kiedykolwiek.
Interpretery są zwykle łatwiejsze do opracowania niż kompilatory, a ich programy są z założenia bardziej przenośne.
Co to jest tłumaczenie hybrydowe?
Tłumaczenie hybrydowe wykorzystuje kompilator i tłumacz. Tłumaczenie hybrydowe kompiluje kod źródłowy wysokiego poziomu do postaci niższego poziomu, takiej jak kod bajtowy. Następnie używa interpretera do uruchomienia tego kodu bajtowego.
Tłumaczenie hybrydowe może różnić się w zależności od języka programowania, ale będzie korzystać z tej ogólnej struktury. Jednym z bardziej popularnych języków programowania wykorzystujących translację hybrydową jest Java. Kompilator Java tłumaczy swój kod źródłowy na Kod bajtowy wirtualnej maszyny Java (JVM). Interpreter następnie tłumaczy kod bajtowy maszyny JVM na kod maszynowy.
Które języki programowania używają tłumaczenia hybrydowego?
Niektóre popularne hybrydowe języki programowania to:
- Jawa
- C#
- Visual Basic
- Erlang
- F#
Dzięki tłumaczeniu hybrydowemu otrzymujesz to, co najlepsze z obu światów. Kompilacja kodu w pierwszej kolejności pozwala naprawić błędy przy najbliższej okazji. Kod bajtowy tworzony przez kompilatory hybrydowe jest łatwiejszy do interpretacji niż kod źródłowy programu wysokiego poziomu.
Wartość znajomości różnych metod tłumaczenia
Powinieneś zrozumieć konkretną metodę tłumaczenia używaną przez język, szczególnie jeśli używasz go do nowego projektu. Metoda tłumaczenia języka jest główną częścią tożsamości języka programowania. Może mieć wpływ na sposób rozpowszechniania programu i sposób uruchamiania go przez użytkowników.
Każde podejście do tłumaczenia ma swoje zalety. Najlepsze języki programowania, takie jak C++, Python i Java, używają różnych metod tłumaczenia. Oprócz paradygmatu języka, jego metoda tłumaczenia jest jedną z najważniejszych cech, o których powinieneś wiedzieć.
Istnieje kilka paradygmatów, z których może korzystać język programowania. Większość czołowych języków programowania to języki wieloparadygmatyczne; wspierają stosowanie dwóch lub więcej odrębnych paradygmatów. Trzy z najpopularniejszych paradygmatów to programowanie imperatywne, obiektowe i funkcjonalne.