Zanim Jawa pojawiły się języki programowania C #, programy komputerowe były tylko skompilowany lub interpretowane. Języki takie jak asembler, C, C ++, Fortran, Pascal prawie zawsze były kompilowane w kodzie maszynowym. Języki takie jak Basic, VbScript i JavaScript były zwykle interpretowane.
Jaka jest zatem różnica między programem skompilowanym a interpretowanym?
Kompilacja
Aby napisać program, wykonaj następujące kroki:
- Edytuj program
- Skompiluj program do plików kodu maszynowego.
- Połącz pliki kodu maszynowego z programem uruchamialnym (znanym również jako exe).
- Debuguj lub uruchom program
W przypadku niektórych języków, takich jak Turbo Pascal i Delphi, kroki 2 i 3 są połączone.
Pliki kodu maszynowego to samodzielne moduły kodu maszynowego, które wymagają połączenia ze sobą w celu zbudowania końcowego programu. Powodem posiadania oddzielnych plików kodu maszynowego jest wydajność; kompilatory muszą się tylko ponownie skompilować kod źródłowy które się zmieniły. Pliki kodu maszynowego z niezmienionych modułów są ponownie wykorzystywane. Nazywa się to tworzeniem aplikacji. Jeśli chcesz ponownie skompilować i odbudować cały kod źródłowy, jest to znane jako Kompilacja.
Łączenie jest technicznie skomplikowanym procesem, w którym wszystkie wywołania funkcji między różnymi modułami są połączone, dla których przydzielane są miejsca w pamięci zmienne a cały kod jest zapisywany w pamięci, a następnie zapisywany na dysku jako kompletny program. Jest to często wolniejszy krok niż kompilacja, ponieważ wszystkie pliki kodu maszynowego muszą zostać wczytane do pamięci i połączone ze sobą.
Interpretacja
Kroki, aby uruchomić program za pośrednictwem tłumacza to:
- Edytuj program
- Debuguj lub uruchom program
Jest to znacznie szybszy proces i pomaga początkującym programistom w szybszym edytowaniu i testowaniu kodu niż przy użyciu kompilatora. Wadą jest to, że interpretowane programy działają znacznie wolniej niż programy skompilowane. Aż 5-10 razy wolniej, ponieważ każdy wiersz kodu musi zostać ponownie odczytany, a następnie ponownie przetworzony.
Wpisz Java i C #
Oba te języki są częściowo skompilowane. Generują kod pośredni zoptymalizowany pod kątem interpretacji. Ten język pośredni jest niezależny od podstawowego sprzętu, co ułatwia portowanie programy napisane w innych procesorach, o ile został do tego napisany interpreter sprzęt komputerowy.
Po skompilowaniu Java tworzy kod bajtowy interpretowany w czasie wykonywania przez wirtualną maszynę Java (JVM). Wiele maszyn JVM korzysta z kompilatora Just-In-Time, który konwertuje kod bajtowy na natywny kod maszynowy, a następnie uruchamia ten kod, aby zwiększyć szybkość interpretacji. W efekcie kod źródłowy Java jest kompilowany w procesie dwuetapowym.
C # jest kompilowany w Common Intermediate Language (CIL, który wcześniej był znany jako Microsoft Intermediate Language MSIL). Jest to uruchamiane przez Common Language Runtime (CLR), część środowiska .NET, środowisko zapewniające usługi wsparcia, takie jak wyrzucanie elementów bezużytecznych i kompilacja Just-In-Time.
Zarówno Java, jak i C # wykorzystują techniki przyspieszania, więc efektywna prędkość jest prawie tak duża, jak czysty skompilowany język. Jeśli aplikacja spędza dużo czasu, wykonując dane wejściowe i wyjściowe, takie jak czytanie plików na dysku lub uruchamianie Baza danych pyta wtedy różnica prędkości jest ledwo zauważalna.
Co to dla mnie znaczy?
O ile nie potrzebujesz szczególnej prędkości i nie musisz zwiększać liczby klatek na sekundę o kilka klatek na sekundę, możesz zapomnieć o prędkości. Dowolny z C, C ++ lub C # zapewni wystarczającą szybkość dla gier, kompilatorów i systemów operacyjnych.