1
Języki Programowania
Podstawy Java. Maszyny wirtualne.
2
Kompilacja
Kompilator
tłumaczy program zapisany w języku
wysokiego poziomu na język maszynowy
my_prog.c
my_prog.exe
program wykonywalny
2
3
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
4
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
3
5
Koncepcja VM
Niezależnie od liczby platform, dla n języków potrzeba n
kompilatorów
Maszyna wirtualna
– VM
PC + UNIX
PC + Windows
PC + MacOS
6
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++
4
7
JVM
– wirtualna maszyna Java
Java
Maszyna wirtualna Java
JVM
PC + UNIX
PC + Windows
PC + MacOS
Maszyna wirtualna Java (
Java Runtime Engine
) jest dostępna dla niemal
wszystkich platform
JVM dla Windows to
java.exe
8
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
5
9
Wielojęzyczne JVM
Współczesne implementacje JVM są zdolne do interpretacji
bytecode
generowanego przez różne języki
10
Kompilacja programu Java
Program źró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
Source code
Hello.java
Hello.class
Hello.java
Hello.class
6
11
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
Hello.class
Hello.class
12
JDK
– główne elementy
Java Virtual Machine
java.exe
Narzędzia dokumentacji
javadoc.exe
Kompilator Java
javac.exe
7
13
Środowisko JDK / DOS
Utworzyć program źródłowy
hello.java
W linii poleceń DOS wywołać
kompilator
javac
i skompilować
program
hello.java
Powstanie bytecode o nazwie
hello.class
Uruchomić program w JVM
public class hello{
public static void
main(String[] args)
{ System.out.println
("Hello World"); }
}
C:>javac hello.java
C:>java hello
Hello World
14
Środowisko JDK / Windows
Utworzyć program źró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
8
15
Ś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