...

Iced tea, la macchina virtuale Java libera

by vitalij-zadneprovskij

on

Report

Category:

Software

Download: 0

Comment: 0

826

views

Comments

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

Transcript

  • 1. IcedTeaLa macchina virtualeJava liberaVitalij Zadneprovskijvitalij_zad@libero.it@vitalijzadJava User Group Roma@JugRomaImmagine: Iced Tea di Melissa Doroquez
  • 2. Mi presento● Nato in Kyrgyzstan, cresciuto aSanta Marinella● Appassionato di computer dasempre● Ho scoperto GNU/Linux nei primianni 2000● Leader del Java User GroupRoma da un anno● Studio informatica al corso dilaurea magistrale della Sapienza● Lavoro come consulenteinformatico da sei anniFoto: http://skillstorm.com
  • 3. Cosa si può fare con Java: FreeCol
  • 4. Cosa si può fare con Java: Vuze
  • 5. Cosa si può fare con Java: NASAWorld Wind
  • 6. Di cosa parlerò● Compilatori, macchine virtuali edintepreti● Quali macchine virtuali ci sono ecome sono fatte● Quali compilatori e quali macchinevirtuali ci sono per Java● L’evoluzione della Java VirtualMachine da proprietaria a quasilibera● Arriva IcedTea per completare laliberazione di Java● Quali linguaggi possono esserecompilati per la JVM American Storytellers di Andy Thomas
  • 7. Come faccio a districarmi con tutti questi linguaggi?
  • 8. Esempio di codice macchina● L’unica cosa che un computer può eseguire direttamente è il codicemacchina● Il codice macchina è una sequenza di comandi ed argomenti● Per una persona, scrivere in codice macchina può essere molto difficile
  • 9. Configure, make, install:il compilatore● Il codice sorgente è comprensibile dagliesseri umani● Il codice macchina è comprensibile edeseguibile direttamente dai computer● L’assembly è appena più leggibile del codicemacchina● Di solito il compilatore trasforma il codicesorgente in codice macchina● Può fare ottimizzazioni per uno specificoprocessore● Cambiando tipo di processore o sistemaoperativo, il codice macchina smette difunzionare● Alcuni compilatori producono codicemacchina, altri producono codice permacchine virtualiLogo della GNU Compilers Collection
  • 10. Il codice macchina ei tipi di processoreImmagine: Principles of computer organization and Assembly language : using the Java virtual machine / Patrick Juola
  • 11. Esempio di linguaggio diprogrammazione
  • 12. 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 cisono PHP, Python, Ruby, Perl, Groovy eScala● Per alcuni linguaggi, c’è sia l’interprete chela macchina virtuale● Avere un interprete non esclude lapossibilità di produrre linguaggio macchina● C’è un transpilatore da PHP a C++ e poicodice macchina, detto HipHop● Un interprete può eseguire anche ilbytecode
  • 13. Cosa è una macchina virtuale?● Il computer, dagli specialisti, viene detto“macchina”● Una macchina virtuale è una astrazione diuna macchina reale● I dettagli della macchina reale vengononascosti● Un programma “compilato” può girare sumacchine diverse e su sistemi operatividiversi● Il sistema operativo astrae driver, lettura escrittura di file, ed altro● Di fatto, una macchina virtuale è uninterprete, perché esegue il bytecode● Le VM hanno prestazioni inferiori rispettoal codice macchinaImmagine: BMW Car Wireframe di hasansgrafix
  • 14. La macchina virtuale ei tipi di processoreImmagine: Principles of computer organization and Assembly language : using the Java virtual machine / Patrick Juola
  • 15. 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 MacOS X ed iOS, parte di XCode● Parrot per linguaggi dinamici● Dis per il sistema operativo Inferno, è unamacchina virtuale a registri, con un set diistruzioni complesso ed a tre operandi● Squeak, dialetto di Smalltalk
  • 16. Approcci a confrontoCodicesorgenteEditor di testoo IDECompilatore perCodice macchina Interprete Compilatore perbytecodeCodicemacchinaBytecode perMacchina virtualeMacchinavirtualeSistema operativo: GNU/Linux, BSD, OpenIndiana, Android, OSX, Windows
  • 17. L’approccio di AndroidEdvard Munch, L’urlo, Museo Munch di OsloEditor di testo o IDECodice sorgenteCompilatore per bytecodeCompilatorePer DalvikCompilatoreAndroid RuntimeCodicemacchinaMacchinaVirtuale DalvikAndroid
  • 18. Come è fatto il bytecode?
  • 19. Ricapitoliamo● Un listato di codice sorgente puòessere interpretato, compilato incodice macchina o compilato inbytecode● Per diversi linguaggi diprogrammazione c’è più di unaopzione● La macchina virtuale è unaalternativa interessante per laportabilità del compilato suprocessori e sistemi operativi diversi● Ci sono tante macchine virtuali moltodiverse tra di loro, anche sel’approccio a pila è il più diffuso
  • 20. Il linguaggio Java● Linguaggio orientato ad oggetti erecentemente anche funzionale● Linguaggio statico● Secondo linguaggio più diffuso almondo, dopo il C● Moltissime librerie open source● Diverse aziende hanno realizzatoprodotti e ci sono vari progetti di ricerca● Inizialmente pensato per piccolidispositivi, lavatrici, etc● Utilizzato come linguaggio websoprattutto nelle medie e grandiimprese
  • 21. La macchina virtuale a pila● C’è una pila della quale possiamo conoscereed eseguire operazioni solo sugli elementiche stanno in cima● Non possiamo sapere nulla degli altrielementi che sono nella pila● Ogni volta che viene eseguito un metodo,viene creato un frame con le variabili di quelmetodo, frame che poi alla fine viene distrutto● L’alternativa è quella della macchina a registridetta anche a nastro● L’approccio a pila permette di avere delbytecode molto compatto e dei compilatoripiù semplici● I difetti sono più accessi alla memoria, piùistruzioni da eseguire e degli interpretileggermente più lentiImmagine: mypuzzlecollection.blogspot.com
  • 22. Hotspot e OpenJDK● Java era completamente closed fino al2006, quindi nacque il progettoClasspath per creare una JVM open● Nel 2007 quasi tutto il sorgente dicompilatore e macchina virtuale vienerilasciato sotto licenza GPL: nasceOpenJDK● OpenJDK è scritto in C++ ed ha 10milarighe di codice assembly, che ne limitala portabilità, supporta i processori x86,x86-64, SPARC e ARM● Alcuni componenti di OpenJDK sonocomunque proprietari, come i font,elementi grafici, software per lacrittografia
  • 23. GNU Classpath e IcedTea● Gnu Classpath aveva lo scopo direimplementare per intere le librerieJava prima che diventassero opensource● Iced Tea: rimozione delle 10mila righe dicodice assembly da HotSpot creandoHotSpot Zero● Fornire degli strumenti di build chepossano essere usati dalle variedistribuzioni GNU/Linux● Implementare una versione open diJava Web Start, dei componenti per ilsuono, dei font e degli elementi grafici● IcedTea supporta Alpha, ARM, IA-64,MIPS, PowerPC, x86, x86-64 e zSeriesFonte: https://duke.kenai.com/SunRIP/
  • 24. Zero, Shark e la LLVMBytecode JavaHotSpot Zero CompilatoreSharkRappresentazione intermediaCompilatoreJust in TimeLLVMCodice macchina
  • 25. Altre caratteristiche di IcedTea● IcedTea-Web per le applet● IcedTea-Sound con integrazione conPulseAudio● La macchina virtuale si chiama Zero Hotspot● Compilatore just-in-time chiamato Shark ebasato su Low Level Virtual Machine cheper determinati pezzi di bytecode genera delcodice macchina anziché interpretare● Per usare IcedTea non bisogna accettarenessun contratto EULA● IcedTea viene usato da altre VM comeCacaoVM e JamVM● Qualsiasi linguaggio che ha un compilatoreche produce bytecode JVM può essereeseguito su IcedTea
  • 26. Portare un linguaggio sulla JVM?● Abbiamo visto che la macchina virtualeesegue il bytecode● Basterebbe un compilatore che a partireda un altro linguaggio creasse bytecode● E’ stato fatto in diversi casi e parecchilinguaggi hanno un compilatore perbytecode● Alcuni di questi compilatori non sonomolto attivi e mantenuti frequentemente● La JVM è pensata originariamente perlinguaggi statici● Per permettere una buona esecuzionedei linguaggi dinamici sono state fattemodifiche alla JVM Pieter Brueghel il Vecchio, La torre di BabeleKunsthistorisches Museum di Vienna
  • 27. Il linguaggio di programmazione Groovy● Linguaggio dinamico, caratteristichesimili a Smalltalk, Python, Perl eRuby● Ha anche delle funzionalità dellaprogrammazione funzionale chepermettono di fare alcune cose inmodo molto più compatto● "I can honestly say if someone hadshown me the Programming in Scalabook [...] back in 2003 I'd probablyhave never created Groovy."● James Strachan che ha fondato illinguaggio, ha silenziosamentelasciato il progetto
  • 28. Il linguaggio funzionale Clojure● Linguaggio funzionale puro● Un dialetto del linguaggio diprogrammazione Lisp● Stati immutabili e modifiche deivalori espliciti lo rendono moltoutile per lo sviluppo di programmiconcorrenti● I problemi di concorrenza nasconoquando c’è uno stato condivisoche viene modificato da diversiagenti● Notazione di Lisp, molto diversa daquella usata da C e Java
  • 29. Il linguaggio multi-paradigmaScala● Scala sta per Scalable Language● Linguaggio che cerca di unire ilparadigma ad oggetti a quellofunzionale● Il progetto di questo linguaggionasce dalle critiche allaprogettazione di Java● Anche se Java 8 ha introdottoalcuni elementi dei linguaggifunzionali, rimane moltoconservativo rispetto a Scala● Parecchie librerie e frameworkJava sono stati sviluppati in Scala
  • 30. Jython: Python sulla JVM● Il Python è nato nel 1991 conl’obiettivo di essere compatto eleggibile● Jython nasce nel 2001 sopratutto peril codice che richiede alte prestazioni● Il progetto fratello si chiamaIronPython e gira su CLR, cioè .net /mono● Ha un IDE chiamato PyDEV● Lo sviluppo non è molto attivo,richiede persone che conoscanocontemporaneamente Python e laJVM
  • 31. Jruby: il porting di Ruby● Ruby nasce a metà degli anni ‘90 comelinguaggio dinamico e multi paradigma● Ruby è ispirato a Perl e Python e cercadi essere un linguaggio semplice dausare ed orientato ad oggetti● JRuby nasce nel 2001 e dimostra subitodi avere delle prestazioni migliori diRuby, poi Ruby farà dei progressi edoggi hanno prestazioni simili● Rispetto a Ruby, JRuby ha il vantaggiodi avere dei thread reali che permettonoesecuzioni più veloci, ma non è l’unico,anche IronRuby, che gira su CLR (dotnet o mono) ce li ha
  • 32. Facciamo il punto● C’è una versione libera della JDK, maha dei componenti proprietari, codiceassembly e necessita di strumenti dicompilazione proprietari● IcedTea nasce per risolvere questiproblemi ed è diventato la macchinavirtuale Java predefinita in tutte ledistribuzioni● La componente di build viene usataanche da altre macchine virtuali● E’ una macchina virtuale a pila● Supporta diversi linguaggi oltre a Java,alcuni dinamici, altri con elementi diprogrammazione funzionale Immagine: Ice Milk and Lemon Teas - Chilli Cafe di Alpha
  • 33. Libri e siti internet per approfondire● Randall Hyde, Write Great Code, Volume 2 , No starch press● Wallace Wang, Beginning Programming All-In-One DeskReference For Dummies, Wiley● DonaldOJDK Blog, Understanding the various JDKs● Gary Benson, Zero and Shark● Jan S. Rellermeyer, Ramon Küpfer: Co-managing Softwareand Hardware Modules through the Juggle Middleware.Middleware 2011: 431-450● Linux Applications And Administration, Ashok Kumar Arnal● Neal Ford, Functional thinking O'Reilly Media
  • 34. Grazie! Domande?George Wyllie - question mark sculptures on the River Clyde
  • Fly UP