JÄ™zyki Programowania Podstawy Java. Maszyny wirtualne. Kompilacja żð Kompilator tÅ‚umaczy program zapisany w jÄ™zyku wysokiego poziomu na jÄ™zyk maszynowy my_prog.c my_prog.exe program wykonywalny 2 1 Kompilacja i platformy żð Każda platforma (procesor + system operacyjny) ma wÅ‚asne unikatowe wymagania odnoÅ›nie postaci kodu programu wykonalnego żð Dla n jÄ™zyków i m platform potrzebne jest n ´ð m kompilatorów PC + UNIX PC + Windows PC + MacOS 3 Maszyna wirtualna (VM) żð Maszyna wirtualna (VM % virtual machine) jest hipotetycznym (wirtualnym) komputerem żð VM można uruchomić na dowolnym rzeczywistym komputerze jako symulator (emulator) żð JÄ™zyk maszyny wirtualnej jest jÄ™zykiem poÅ›redniczÄ…cym miÄ™dzy oprogramowaniem a rzeczywistym komputerem. Zapis programu w tym jÄ™zyku nosi nazwÄ™ bytecode żð Dla dowolnego jÄ™zyka wystarczy tylko jeden kompilator tego jÄ™zyka na jÄ™zyk VM 4 2 Koncepcja VM żð Niezależnie od liczby platform, dla n jÄ™zyków potrzeba n kompilatorów PC + UNIX PC + Windows Maszyna wirtualna VM PC + MacOS 5 Wady koncepcji VM żð Utrata efektywnoÅ›ci żð StosujÄ…c wspólnÄ… maszynÄ™ wirtualnÄ… VM dla różnych platform sprzÄ™towych nie można wykorzystać w peÅ‚ni jej unikatowych cech przyspieszajÄ…cych wykonanie niektórych operacji żð akceleratory graficzne żð operacje DSP ... żð Sprowadzenie zapisu programu do zunifikowanego bytecode prowadzi do utraty efektywnoÅ›ci jÄ™zyków w zakresie pewnych konstrukcji programistycznych żð rekursja itp.. żð Idealna maszyna wirtualna w praktyce nie istnieje żð W praktyce decydujÄ…c siÄ™ na okreÅ›lonÄ… VM dokonuje siÄ™ kompromisu, godzÄ…c siÄ™ na utratÄ™ efektywnoÅ›ci żð StÄ…d szybkość programów interpretowanych przez VM jest zwykle mniejsza od szybkoÅ›ci programów kompilowanych bezpoÅ›rednio na danÄ… platformÄ™ żð programy napisane w jÄ™zyku Java sÄ… wolniejsze od programów napisanych w jÄ™zyku C/C++ 6 3 JVM wirtualna maszyna Java żð Maszyna wirtualna Java (Java Runtime Engine) jest dostÄ™pna dla niemal wszystkich platform żð JVM dla Windows to java.exe PC + UNIX Java PC + Windows Maszyna wirtualna Java JVM PC + MacOS 7 Maszyny wirtualne żð Maszyny wirtualne żð dla jednego jÄ™zyka żð wielu platform byÅ‚y znane już wczeÅ›niej, ale nie zdobyÅ‚y wiÄ™kszej popularnoÅ›ci żð Najbardziej dojrzaÅ‚e rozwiÄ…zania wczeÅ›niejszych VM to żð Pascal: p-Machine (poÅ‚owa lat 80-tych XX w.) żð Smalltalk: Smalltalk Bytecode Interpreter żð Prolog: WAM żð Smalltalk 80 może być uważany za protoplastÄ™ jÄ™zyka Java. Rynek nie byÅ‚ w roku 1980 przygotowany na takÄ… ideÄ™. Smalltalk wyprzedziÅ‚ swój czas o ponad 20 lat 8 4 WielojÄ™zyczne JVM żð Współczesne implementacje JVM sÄ… zdolne do interpretacji bytecode generowanego przez różne jÄ™zyki 9 Kompilacja programu Java żð Program zródÅ‚owy z rozszerzeniem .java jest kompilowany przez kompilator javac na plik o tej samej nazwie, ale z rozszerzeniem .class żð Plik ten zawiera bytecode dla JVM Hello.java Hello.class Source code Hello.java Hello.class 10 5 Wykonanie programu Java żð Bytecode jest wykonywany przez JVM żð Bytecode może również pochodzić z innych kompilatorów, np.. JPython, JBasic lub Smalltalk/JVM Hello.class Hello Hello.class 11 JDK główne elementy Kompilator Java NarzÄ™dzia dokumentacji Java Virtual Machine javac.exe javadoc.exe java.exe 12 6 Åšrodowisko JDK / DOS żð Utworzyć program zródÅ‚owy public class hello{ hello.java public static void main(String[] args) żð W linii poleceÅ„ DOS wywoÅ‚ać { System.out.println kompilator javac i skompilować program hello.java ("Hello World"); } } żð Powstanie bytecode o nazwie hello.class C:>javac hello.java żð Uruchomić program w JVM C:>java hello Hello World 13 Åšrodowisko JDK / Windows żð Utworzyć program zródÅ‚owy hello.java żð WywoÅ‚ać konsolÄ™ cmd żð WywoÅ‚ać kompilator >javac hello.java Powstanie bytecode o nazwie hello.class żð Uruchomić program w JVM >java hello żð Na konsoli pojawi siÄ™ tekst Hello World 14 7 Åšrodowisko JDK / Windows żð Metoda pisania, kompilowania i uruchamiania programów podana na poprzednim slajdzie dziaÅ‚a, ale jest anachroniczna żð DziÅ› nie posÅ‚ugujemy siÄ™ już liniÄ… poleceÅ„, bo jest to niewygodne żð Stosuje siÄ™ specjalnie zaprojektowane graficzne Å›rodowiska uruchomieniowe żð Interaktywne, graficzne Å›rodowiska uruchomieniowe dla jÄ™zyka Java żð JBuilder (Borland) żð NetBeans (Sun Microsystems) żð Swing do budowy GUI żð Eclipse żð ZaletÄ… (ale też i wadÄ…) wymienionych narzÄ™dzi jest bogactwo opcji, funkcji żð Nauka jest dÅ‚uga i żmudna żð Dokumentacja jest bardzo obszerna żð Dlatego opracowano uproszczone Å›rodowiska uruchomieniowe, przeznaczone głównie do celów dydaktycznych żð BlueJ (University of Kent, Deakin University) żð jGRASP 15 8