Kompilacja
Kompilacja to proces tłumaczenia kodu źródłowego, napisanego przez programistę w czytelnym dla człowieka języku programowania, na postać zrozumiałą i wykonywalną dla komputera — kod maszynowy lub kod pośredni. Program, który to realizuje, nazywa się kompilatorem. To jeden z podstawowych etapów wytwarzania oprogramowania w językach kompilowanych, takich jak C, C++, Rust czy Go.
Na czym polega proces kompilacji?
Kompilacja nie jest pojedynczym krokiem, lecz sekwencją faz, przez które przechodzi kod źródłowy:
- analiza leksykalna — rozbicie kodu na najmniejsze jednostki znaczeniowe (tokeny);
- analiza składniowa — sprawdzenie, czy tokeny układają się zgodnie z gramatyką języka, i zbudowanie drzewa składniowego;
- analiza semantyczna — weryfikacja poprawności logicznej, np. zgodności typów;
- optymalizacja — przekształcenie kodu tak, by działał szybciej i zajmował mniej zasobów;
- generowanie kodu — wytworzenie finalnego kodu maszynowego lub pośredniego.
Jeśli na którymkolwiek etapie kompilator napotka błąd (np. składniowy), przerywa pracę i zgłasza go programiście, zanim program w ogóle powstanie. Znacząco wspomaga to debugowanie. Warto odróżnić kompilację od interpretacji: interpreter wykonuje kod na bieżąco, wiersz po wierszu, bez tworzenia osobnego pliku wykonywalnego, co daje większą elastyczność kosztem szybkości działania.
Zastosowanie w praktyce
Kompilacja jest codziennością wytwarzania aplikacji desktopowych, systemowych, gier i usług serwerowych pisanych w językach kompilowanych. Skompilowany plik wykonywalny jest zoptymalizowany i uruchamia się bez potrzeby posiadania kompilatora — dlatego programy dostarcza się użytkownikowi w postaci binarnej, a nie źródłowej.
Pojęcie ma też szersze znaczenie w rozwoju webowym. Pokrewny transpiler tłumaczy kod z jednego języka wysokiego poziomu na inny (np. TypeScript na JavaScript), a technologia WebAssembly pozwala kompilować kod z języków takich jak C++ czy Rust do postaci uruchamianej w przeglądarce z niemal natywną wydajnością. W procesach wdrożeniowych etap kompilacji (build) jest jednym z pierwszych kroków pipeline'u CI/CD.
Powiązane pojęcia
Najczęstsze pytania
Czym różni się kompilacja od interpretacji?
Kompilator tłumaczy cały kod źródłowy na postać wykonywalną z wyprzedzeniem, przed uruchomieniem programu. Interpreter wykonuje kod wiersz po wierszu w trakcie działania, bez etapu tłumaczenia całości. Kompilacja daje zwykle szybsze programy, interpretacja — większą elastyczność i łatwiejsze testowanie.
