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

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 of Iced tea, la macchina virtuale Java libera

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