iced tea, la macchina virtuale java libera

34
IcedTea La macchina virtuale Java libera Vitalij Zadneprovskij [email protected] @vitalijzad Java User Group Roma @JugRoma Immagine: Iced Tea di Melissa Doroquez

Upload: vitalij-zadneprovskij

Post on 30-Jun-2015

833 views

Category:

Software


2 download

DESCRIPTION

Si parla di IcedTea, della macchina virtuale Java completamente libera e degli altri strumenti. Vengono spiegate le differenze tra l’approccio con interprete, compilatore e macchina virtuale. Si racconta di quali macchine virtuali ci sono per quali linguaggi. Vengono descritte le peculiarità di IcedTea e si prendono in esame le differenze tra HotSpot Zero Assembly con la macchina virtuale di Oracle, HotSpot. Si parla di quali linguaggi possano essere compilati per macchina virtuale Java.

TRANSCRIPT

Page 1: Iced tea, la macchina virtuale Java libera

IcedTeaLa macchina virtuale

Java libera

Vitalij [email protected]

@vitalijzad

Java User Group Roma@JugRoma

Immagine: Iced Tea di Melissa Doroquez

Page 2: Iced tea, la macchina virtuale Java libera

Mi presento● Nato in Kyrgyzstan, cresciuto a

Santa Marinella● Appassionato di computer da

sempre● Ho scoperto GNU/Linux nei primi

anni 2000● Leader del Java User Group

Roma da un anno● Studio informatica al corso di

laurea magistrale della Sapienza● Lavoro come consulente

informatico da sei anni

Foto: http://skillstorm.com

Page 3: Iced tea, la macchina virtuale Java libera

Cosa si può fare con Java: FreeCol

Page 4: Iced tea, la macchina virtuale Java libera

Cosa si può fare con Java: Vuze

Page 5: Iced tea, la macchina virtuale Java libera

Cosa si può fare con Java: NASA World Wind

Page 6: Iced tea, la macchina virtuale Java libera

Di cosa parlerò● Compilatori, macchine virtuali ed

intepreti● Quali macchine virtuali ci sono e

come sono fatte● Quali compilatori e quali macchine

virtuali ci sono per Java● L’evoluzione della Java Virtual

Machine da proprietaria a quasi libera

● Arriva IcedTea per completare la liberazione di Java

● Quali linguaggi possono essere compilati per la JVM American Storytellers di Andy Thomas

Page 7: Iced tea, la macchina virtuale Java libera

Come faccio a districarmi con tutti questi linguaggi?

Page 8: Iced tea, la macchina virtuale Java libera

Esempio di codice macchina● L’unica cosa che un computer può eseguire direttamente è il codice

macchina● Il codice macchina è una sequenza di comandi ed argomenti● Per una persona, scrivere in codice macchina può essere molto difficile

Page 9: Iced tea, la macchina virtuale Java libera

Configure, make, install:il compilatore

● Il codice sorgente è comprensibile dagli esseri umani

● Il codice macchina è comprensibile ed eseguibile direttamente dai computer

● L’assembly è appena più leggibile del codice macchina

● Di solito il compilatore trasforma il codice sorgente in codice macchina

● Può fare ottimizzazioni per uno specifico processore

● Cambiando tipo di processore o sistema operativo, il codice macchina smette di funzionare

● Alcuni compilatori producono codice macchina, altri producono codice per macchine virtuali

Logo della GNU Compilers Collection

Page 10: Iced tea, la macchina virtuale Java libera

Immagine: Principles of computer organization and Assembly language : using the Java virtual machine / Patrick Juola

Il codice macchina e i tipi di processore

Page 11: Iced tea, la macchina virtuale Java libera

Esempio di linguaggio di programmazione

Page 12: Iced tea, la macchina virtuale Java libera

Che cosa fa un interprete● Legge il codice sorgente e lo esegue:

– Direttamente

– Producendo una rappresentazione intermedia

– Compilandolo al volo appena prima di eseguirlo

● Tra i linguaggi che hanno un interprete ci sono PHP, Python, Ruby, Perl, Groovy e Scala

● Per alcuni linguaggi, c’è sia l’interprete che la macchina virtuale

● Avere un interprete non esclude la possibilità di produrre linguaggio macchina

● C’è un transpilatore da PHP a C++ e poi codice macchina, detto HipHop

● Un interprete può eseguire anche il bytecode

Page 13: Iced tea, la macchina virtuale Java libera

Cosa è una macchina virtuale?

● Il computer, dagli specialisti, viene detto “macchina”

● Una macchina virtuale è una astrazione di una macchina reale

● I dettagli della macchina reale vengono nascosti

● Un programma “compilato” può girare su macchine diverse e su sistemi operativi diversi

● Il sistema operativo astrae driver, lettura e scrittura di file, ed altro

● Di fatto, una macchina virtuale è un interprete, perché esegue il bytecode

● Le VM hanno prestazioni inferiori rispetto al codice macchina

Immagine: BMW Car Wireframe di hasansgrafix

Page 14: Iced tea, la macchina virtuale Java libera

La macchina virtuale ei tipi di processore

Immagine: Principles of computer organization and Assembly language : using the Java virtual machine / Patrick Juola

Page 15: Iced tea, la macchina virtuale Java libera

Quali macchine virtuali ci sono?● Dot Net

– Common Language Runtime di Microsoft

– Mono, sulla quale Gnome ha puntato

● Java– HotSpot ed HotSpot Zero

– Jikes Research Virtual Machine

– Dalvik, per Android

● Low Level Virtual Machine, usato da Mac OS X ed iOS, parte di XCode

● Parrot per linguaggi dinamici● Dis per il sistema operativo Inferno, è una

macchina virtuale a registri, con un set di istruzioni complesso ed a tre operandi

● Squeak, dialetto di Smalltalk

Page 16: Iced tea, la macchina virtuale Java libera

Approcci a confronto

Codicesorgente

Editor di testoo IDE

Compilatore perCodice macchina

InterpreteCompilatore per

bytecode

Codicemacchina

Bytecode perMacchina virtuale

Macchinavirtuale

Sistema operativo: GNU/Linux, BSD, OpenIndiana, Android, OSX, Windows

Page 17: Iced tea, la macchina virtuale Java libera

L’approccio di Android

Edvard Munch, L’urlo, Museo Munch di Oslo

Editor di testo o IDE

Codice sorgente

Compilatore per bytecode

CompilatorePer Dalvik

CompilatoreAndroid Runtime

Codicemacchina

MacchinaVirtuale Dalvik

Android

Page 18: Iced tea, la macchina virtuale Java libera

Come è fatto il bytecode?

Page 19: Iced tea, la macchina virtuale Java libera

Ricapitoliamo● Un listato di codice sorgente può

essere interpretato, compilato in codice macchina o compilato in bytecode

● Per diversi linguaggi di programmazione c’è più di una opzione

● La macchina virtuale è una alternativa interessante per la portabilità del compilato su processori e sistemi operativi diversi

● Ci sono tante macchine virtuali molto diverse tra di loro, anche se l’approccio a pila è il più diffuso

Page 20: Iced tea, la macchina virtuale Java libera

Il linguaggio Java● Linguaggio orientato ad oggetti e

recentemente anche funzionale● Linguaggio statico● Secondo linguaggio più diffuso al

mondo, dopo il C● Moltissime librerie open source● Diverse aziende hanno realizzato

prodotti e ci sono vari progetti di ricerca● Inizialmente pensato per piccoli

dispositivi, lavatrici, etc● Utilizzato come linguaggio web

soprattutto nelle medie e grandi imprese

Page 21: Iced tea, la macchina virtuale Java libera

La macchina virtuale a pila● C’è una pila della quale possiamo conoscere

ed eseguire operazioni solo sugli elementi che stanno in cima

● Non possiamo sapere nulla degli altri elementi che sono nella pila

● Ogni volta che viene eseguito un metodo, viene creato un frame con le variabili di quel metodo, frame che poi alla fine viene distrutto

● L’alternativa è quella della macchina a registri detta anche a nastro

● L’approccio a pila permette di avere del bytecode molto compatto e dei compilatori più semplici

● I difetti sono più accessi alla memoria, più istruzioni da eseguire e degli interpreti leggermente più lenti

Immagine: mypuzzlecollection.blogspot.com

Page 22: Iced tea, la macchina virtuale Java libera

Hotspot e OpenJDK

● Java era completamente closed fino al 2006, quindi nacque il progetto Classpath per creare una JVM open

● Nel 2007 quasi tutto il sorgente di compilatore e macchina virtuale viene rilasciato sotto licenza GPL: nasce OpenJDK

● OpenJDK è scritto in C++ ed ha 10mila righe di codice assembly, che ne limita la portabilità, supporta i processori x86, x86-64, SPARC e ARM

● Alcuni componenti di OpenJDK sono comunque proprietari, come i font, elementi grafici, software per la crittografia

Page 23: Iced tea, la macchina virtuale Java libera

GNU Classpath e IcedTea● Gnu Classpath aveva lo scopo di

reimplementare per intere le librerie Java prima che diventassero open source

● Iced Tea: rimozione delle 10mila righe di codice assembly da HotSpot creando HotSpot Zero

● Fornire degli strumenti di build che possano essere usati dalle varie distribuzioni GNU/Linux

● Implementare una versione open di Java Web Start, dei componenti per il suono, dei font e degli elementi grafici

● IcedTea supporta Alpha, ARM, IA-64, MIPS, PowerPC, x86, x86-64 e zSeries

Fonte: https://duke.kenai.com/SunRIP/

Page 24: Iced tea, la macchina virtuale Java libera

Zero, Shark e la LLVM

HotSpot ZeroCompilatore

Shark

Rappresentazione intermedia

CompilatoreJust in Time

LLVM

Bytecode Java

Codice macchina

Page 25: Iced tea, la macchina virtuale Java libera

Altre caratteristiche di IcedTea● IcedTea-Web per le applet● IcedTea-Sound con integrazione con

PulseAudio● La macchina virtuale si chiama Zero Hotspot● Compilatore just-in-time chiamato Shark e

basato su Low Level Virtual Machine che per determinati pezzi di bytecode genera del codice macchina anziché interpretare

● Per usare IcedTea non bisogna accettare nessun contratto EULA

● IcedTea viene usato da altre VM come CacaoVM e JamVM

● Qualsiasi linguaggio che ha un compilatore che produce bytecode JVM può essere eseguito su IcedTea

Page 26: Iced tea, la macchina virtuale Java libera

Portare un linguaggio sulla JVM?● Abbiamo visto che la macchina virtuale

esegue il bytecode● Basterebbe un compilatore che a partire

da un altro linguaggio creasse bytecode ● E’ stato fatto in diversi casi e parecchi

linguaggi hanno un compilatore per bytecode

● Alcuni di questi compilatori non sono molto attivi e mantenuti frequentemente

● La JVM è pensata originariamente per linguaggi statici

● Per permettere una buona esecuzione dei linguaggi dinamici sono state fatte modifiche alla JVM

Pieter Brueghel il Vecchio, La torre di BabeleKunsthistorisches Museum di Vienna

Page 27: Iced tea, la macchina virtuale Java libera

Il linguaggio di programmazione Groovy● Linguaggio dinamico, caratteristiche

simili a Smalltalk, Python, Perl e Ruby

● Ha anche delle funzionalità della programmazione funzionale che permettono di fare alcune cose in modo molto più compatto

● "I can honestly say if someone had shown me the Programming in Scala book [...] back in 2003 I'd probably have never created Groovy."

● James Strachan che ha fondato il linguaggio, ha silenziosamente lasciato il progetto

Page 28: Iced tea, la macchina virtuale Java libera

Il linguaggio funzionale Clojure● Linguaggio funzionale puro● Un dialetto del linguaggio di

programmazione Lisp● Stati immutabili e modifiche dei

valori espliciti lo rendono molto utile per lo sviluppo di programmi concorrenti

● I problemi di concorrenza nascono quando c’è uno stato condiviso che viene modificato da diversi agenti

● Notazione di Lisp, molto diversa da quella usata da C e Java

Page 29: Iced tea, la macchina virtuale Java libera

Il linguaggio multi-paradigmaScala

● Scala sta per Scalable Language● Linguaggio che cerca di unire il

paradigma ad oggetti a quello funzionale

● Il progetto di questo linguaggio nasce dalle critiche alla progettazione di Java

● Anche se Java 8 ha introdotto alcuni elementi dei linguaggi funzionali, rimane molto conservativo rispetto a Scala

● Parecchie librerie e framework Java sono stati sviluppati in Scala

Page 30: Iced tea, la macchina virtuale Java libera

Jython: Python sulla JVM● Il Python è nato nel 1991 con

l’obiettivo di essere compatto e leggibile

● Jython nasce nel 2001 sopratutto per il codice che richiede alte prestazioni

● Il progetto fratello si chiama IronPython e gira su CLR, cioè .net / mono

● Ha un IDE chiamato PyDEV● Lo sviluppo non è molto attivo,

richiede persone che conoscano contemporaneamente Python e la JVM

Page 31: Iced tea, la macchina virtuale Java libera

Jruby: il porting di Ruby● Ruby nasce a metà degli anni ‘90 come

linguaggio dinamico e multi paradigma● Ruby è ispirato a Perl e Python e cerca

di essere un linguaggio semplice da usare ed orientato ad oggetti

● JRuby nasce nel 2001 e dimostra subito di avere delle prestazioni migliori di Ruby, poi Ruby farà dei progressi ed oggi hanno prestazioni simili

● Rispetto a Ruby, JRuby ha il vantaggio di avere dei thread reali che permettono esecuzioni più veloci, ma non è l’unico, anche IronRuby, che gira su CLR (dot net o mono) ce li ha

Page 32: Iced tea, la macchina virtuale Java libera

Facciamo il punto● C’è una versione libera della JDK, ma

ha dei componenti proprietari, codice assembly e necessita di strumenti di compilazione proprietari

● IcedTea nasce per risolvere questi problemi ed è diventato la macchina virtuale Java predefinita in tutte le distribuzioni

● La componente di build viene usata anche da altre macchine virtuali

● E’ una macchina virtuale a pila ● Supporta diversi linguaggi oltre a Java,

alcuni dinamici, altri con elementi di programmazione funzionale Immagine: Ice Milk and Lemon Teas - Chilli Cafe di Alpha

Page 33: Iced tea, la macchina virtuale Java libera

Libri e siti internet per approfondire● Randall Hyde, Write Great Code, Volume 2 , No starch press● Wallace Wang, Beginning Programming All-In-One Desk

Reference For Dummies, Wiley● DonaldOJDK Blog, Understanding the various JDKs● Gary Benson, Zero and Shark● Jan S. Rellermeyer, Ramon Küpfer: Co-managing Software

and Hardware Modules through the Juggle Middleware. Middleware 2011: 431-450

● Linux Applications And Administration, Ashok Kumar Arnal● Neal Ford, Functional thinking O'Reilly Media

Page 34: Iced tea, la macchina virtuale Java libera

Grazie! Domande?

George Wyllie - question mark sculptures on the River Clyde