Natomiast te same instrukcje, w pseudo-assamblerze wyglądają zupełnie inaczej [6]:
0 iload_1
1 iload_2
2 iadd
3 istore_3
W celu ułatwienia życia programistom stworzone zostały języki tzw. wysokiego rzędu jak np. C, C++, Pascal w których pojedyncza linia komend może być zamieniona na kilka linii kodu maszynowego dla danej platformy. Cały proces konwertowania kodu źródłowego języka wysokiego rzędu do kodu wykonywalnego nazwano kompilacją statyczną i w przypadku technologii Java sprowadza się do kompilacji kodu źródłowego do B-kodu. Proces kompilacji składa się z siedmiu podstawowych procesów wymienionych w poprzednim rozdziale, tłumaczenie kodu źródłowego
• generacja kodu maszynowego/B-kodu
• optymalizacja kodu maszynowego/B-kodu
Pierwszym etapem jest tłumaczenie kodu źródłowego, które polega na wydobyciu z tekstu poszczególnych elementów języka np. „if”, „)”, „class”; a w kolejnym etapie połączenie w wyrażenia języka. W momencie gdy zostaną napotkane elementy niezrozumiałe dla danego języka, które nie są zgodne z jego wzorcami, to kompilator przerywa pracę i zwraca użytkownikowi błąd, co zazwyczaj niesie za sobą konieczność skorygowania elementów powodujących konflikty. Jeżeli tłumaczenie całego kodu przebiegnie pomyślnie to następuje konwersja do B-kodu, który w kolejnym kroku zostaje zoptymalizowany. Celem procesu optymalizacji jest zmniejszenie rozmiarów kodu oraz poprawa szybkości jego działania. Wyrażenia języka są bardzo często kompilowane i tworzą biblioteki czyli gotowe zbiory kodów, które możemy wykorzystać podczas konstrukcji własnego programu. Podczas kompilacji programu korzystamy więc z gotowych wcześniej skompilowanych kodów. Zbiór bibliotek stanowi niezbędną część zasobów danego języka programowania, jednak mogą być też wytwarzane przez użytkowników środowiska tworzenia programów. Krótko podsumowując
16