Co to jest kompilator?

Kompilator to specjalny rodzaj programu komputerowego, który tłumaczy plik tekstowy czytelny dla człowieka na postać łatwiejszą do zrozumienia przez komputer. Na najbardziej podstawowym poziomie komputer może zrozumieć tylko dwie rzeczy, jedynkę i 1. Na tym poziomie człowiek będzie działał bardzo wolno i uzna informacje zawarte w długim ciągu jedynek i zer za niezrozumiałe. Kompilator to program komputerowy, który wypełnia tę lukę.

Na początku kompilatory były bardzo prostymi programami, które potrafiły tłumaczyć symbole tylko na bity, jedynki i zera, jak rozumiał komputer. Programy były również bardzo proste, składały się z szeregu kroków, które zostały pierwotnie ręcznie przetłumaczone na dane zrozumiałe dla komputera. Było to bardzo czasochłonne zadanie, więc fragmenty tego zadania zostały zautomatyzowane lub zaprogramowane, a pierwszy kompilator został napisany. Ten program składał lub kompilował kroki wymagane do wykonania programu krok po kroku.

Te proste kompilatory zostały użyte do napisania bardziej wyrafinowanego kompilatora. W nowszej wersji do programu kompilatora można dodać więcej reguł, aby umożliwić programistom pracę z bardziej naturalną strukturą języka. Ułatwiło to pisanie programów i umożliwiło większej liczbie osób rozpoczęcie pisania programów. W miarę jak coraz więcej osób zaczynało pisać programy, pojawiało się coraz więcej pomysłów na pisanie programów i wykorzystywano je do tworzenia bardziej wyrafinowanych kompilatorów. W ten sposób programy kompilacyjne wciąż ewoluują, ulepszają się i stają się łatwiejsze w użyciu.

Programy kompilacyjne mogą być również wyspecjalizowane. Niektóre struktury językowe są lepiej dopasowane do określonego zadania niż inne, dlatego opracowano specjalne kompilatory do określonych zadań lub języków. Niektóre kompilatory są wielostopniowe lub wieloprzebiegowe. Pierwsze przejście może zająć bardzo naturalny język i zbliżyć go do języka zrozumiałego dla komputera. Drugi lub nawet trzeci przebieg może doprowadzić go do ostatniego etapu, czyli do pliku wykonywalnego.

Wyjście pośrednie w kompilatorze wielostopniowym jest zwykle nazywane pseudokodem, ponieważ nie może być używane przez komputer. Pseudokod jest bardzo ustrukturyzowany, jak program komputerowy, a nie płynny i gadatliwy jak bardziej naturalny język. Ostateczne dane wyjściowe nazywa się plikiem wykonywalnym, ponieważ jest on faktycznie wykonywany lub uruchamiany przez komputer. Podział zadania w ten sposób ułatwił pisanie bardziej wyrafinowanych kompilatorów, ponieważ każde podzadanie jest inne. Ułatwiło to również komputerowi wskazanie, gdzie miał problem ze zrozumieniem, o co został poproszony.

Błędy, które ograniczają kompilatorowi zrozumienie programu, nazywane są błędami składniowymi. Błędy w sposobie działania programu nazywane są błędami logicznymi. Błędy logiczne są znacznie trudniejsze do wykrycia i poprawienia. Błędy składniowe są jak błędy ortograficzne, podczas gdy błędy logiczne są trochę bardziej jak błędy gramatyczne.
Opracowano także programy kompilatorów krzyżowych. Kompilator krzyżowy umożliwia skompilowanie i uruchomienie zestawu instrukcji napisanych dla jednego komputera przez określonego producenta na innym komputerze przez innego producenta. Na przykład program, który został napisany do działania na komputerze Intela, może czasami być skompilowany krzyżowo, aby uruchomić na komputerze opracowanym przez Motorolę. To często nie działa zbyt dobrze. Na poziomie, na którym działają programy komputerowe, sprzęt komputerowy może wyglądać zupełnie inaczej, nawet jeśli może wyglądać podobnie do Ciebie.
Kompilacja krzyżowa różni się od emulacji jednego komputera na innym. Jeśli komputer emuluje inny komputer, to udaje, że jest tym innym komputerem. Emulacja jest często wolniejsza niż kompilacja krzyżowa, ponieważ dwa programy działają jednocześnie, program udający inny komputer i program, który jest uruchomiony. Jednak aby kompilacja krzyżowa działała, potrzebny jest zarówno oryginalny tekst w języku naturalnym opisujący program, jak i komputer wystarczająco podobny do oryginalnego komputera, na którym program może działać w celu uruchomienia na innym komputerze. Nie zawsze jest to możliwe, dlatego w użyciu są obie techniki.