programmazione 2 15. macchine astra=e, linguaggi...

60
1 PR2 2017-2018 PROGRAMMAZIONE 2 15. Macchine astra=e, linguaggi, interpretazione e compilazione

Upload: ngomien

Post on 19-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

1PR22017-2018

PROGRAMMAZIONE215.Macchineastra=e,linguaggi,interpretazioneecompilazione

VonNeumann:Thefirstdra3report…

•  IlmodellodiVonNeumannèallabasedellastru<uradeicomputera<uali

•  Duecomponen?principali–  Memoria,dovesonomemorizza?iprogrammieida?–  Unitàcentraledielaborazione,chehailcompitodieseguirei

programmiimmagazzina?inmemoriaprelevandoleistruzioni(eida?rela?vi),interpretandoleedeseguendoleunadopol’altra

2 PR22017-2018

LamacchinadiVonNeumann

3

36 ◾ Introduction to Programming Language

is processed in the arithmetic and logical unit (ALU) within the CPU, and the resulting data are stored back to the memory, as shown in Figure 2.1. Frequently used data items or their references are stored in hardware registers for faster access time. The von Neumann machine has a program counter, which contains the memory address of the next instruc-tion to be executed. The program counter is incremented by one after fetching the current instruction. However, its value can be altered using conditional and unconditional jump statements.

The instructions could be categorized as loading from the memory (load); storing into the memory (store); performing arithmetic computations of addition, subtraction, multipli-cation, and division; logical computations such as logical-AND, logical-OR, exclusive-OR, and negation; comparing two values; conditionally or unconditionally jumping to another nonadjacent instruction by changing the value of the program counter and by checking the status of various system-level flags. The various flags are stored in a register called the program status word (PSW). In addition to these categories of instructions, instruction sets also support various addressing mechanisms to address the operands, depending upon the computer architecture.

2.1.1 Address MechanismsIn the von Neumann machine, data or addresses of memory locations can be temporarily stored in the registers or in the memory (RAM). Similarly, a memory location can also hold data, as well as address of another memory location. If a memory holds the data, then it is accessed by an instruction using a single memory access called direct access. However, if a memory location holds the address of another memory location, then two memory accesses are needed to load the data into the CPU, and this method is called indirect access. In addition to direct and indirect accesses, an offset can be added or subtracted to an address stored in a register or another address to calculate a new address. This offset-based method is used to access subfields of complex data structures, where one needs to store the base address of the first memory location of the data structure and compute the address of the subfields by adding the offset of the subfield to the base address.

A computer may support 0-address, 1-address, 2-address, or 3-addresses, depending upon the computer architecture. As summarized in Table 2.1, the number of addresses is given by the maximum number of arguments the set of assembly-level instructions in

Memory (instruction + data)(main storage)

Controller + ALU + registers(computation and temporary fast storage)

Load Store

FIGURE 2.1 A von Neumann machine.

PR22017-2018

CicloFetch-Execute

•  Fetch:L’istruzionedaeseguirevieneprelevatadallamemoriaetrasferitaall’internodellaCPU

•  Decode:L’istruzionevieneinterpretataevengonoavviateleazioniinternenecessarieperlasuaesecuzione

•  DataFetch:Sonopreleva?dallamemoriaida?suiqualieseguirel’operazioneprevistadallaistruzione

•  Execute:Èportataaterminel’esecuzionedell’operazioneprevistadall’istruzione

•  Store:Èmemorizzatoilrisultatodell’operazioneprevistadall’istruzione

4 PR22017-2018

5 PR22017-2018

6 PR22017-2018

ImplementareLinguaggidiProgrammazione

7

PROGRAMMATORELINGUAGGIOSORGENTE

COMPUTERCODICEMACCHINA

1.   Compilazione2.   Interpretazione3.   Miste

PR22017-2018

ImplementareLinguaggidiProgrammazione

8

PROGRAMMATORELINGUAGGIOSORGENTE

COMPUTERCODICEMACCHINA

Compilazione: traduce il codice sorgente in quello macchina

PR22017-2018

ImplementareLinguaggidiProgrammazione

9

PROGRAMMATORELINGUAGGIOSORGENTE

COMPUTERCODICEMACCHINA

Interprete:Macchinavirtualeimplementatasuquellafisicacheesegueleistruzionidellinguaggio

INTERPRETE

PR22017-2018

ImplementareLinguaggidiProgrammazione

10

PROGRAMMATORELINGUAGGIOSORGENTE

COMPUTERCODICEMACCHINA

Compilazione+Interpretazione

CODICEINTERMEDIO

COMPILATORE

INTERPRETE

ImplementareLinguaggidiProgrammazione

11

PROGRAMMATOREJAVA

COMPUTERCODICEMACCHINA

Compilazione+Interpretazione

JAVABYTECODE

COMPILATORE

JVM

Macchineastra<e

•  Macchinaastra=a:unsistemavirtualecherappresentailcomportamentodiunamacchinafisicaindividuandoprecisamentel’insiemedellerisorsenecessarieperl’esecuzionediprogrammi

12PR22017-2018

Macchineastra<e

•  Unacollezionedistru<ureda?ealgoritmiingradodimemorizzareedeseguireprogrammi

•  Componen?dellamacchinaastra<a–  interprete–  memoria(da?eprogrammi)–  controllo–  operazioni“primi?ve”

13

Interprete

Programma

Da?

op1op2…

opnControllo

Op.primi?veMemoria

PR22017-2018

Componentedicontrollo

•  Unacollezionedistru<ureda?ealgoritmipero  acquisirelaprossimaistruzioneo  acquisireglioperandiememorizzareirisulta?delleoperazioni

o  ges?relechiamateeiritornidaiso<oprogrammio  ges?reithreado mantenereleassociazionifranomievaloridenota?o  ges?redinamicamentelamemoriao …

14 PR22017-2018

L’interprete

15

controllo

controllo

operazioni

start

stop

acquisiscilaprossimaistruzione

decodifica

acquisisciglioperandi

seleziona

eseguiop1 eseguiop2 eseguiopn eseguialt...

memorizzailrisultato

controllo

Illinguaggiomacchina

•  Mmacchinaastra<a•  LMlinguaggiomacchinadiM

o  èillinguaggiochehacomestringhelegalitu_iprogrammiinterpretabilidall’interpretediM

•  Iprogrammisonopar?colarida?sucuioperal’interprete•  Allecomponen?diMcorrispondonocomponen?diLM

o  ?pididatoprimi?vio  costru_dicontrollo

! percontrollarel’ordinediesecuzione! percontrollareacquisizioneetrasferimentoda?

16PR22017-2018

Implementaremacchineastra<e

•  Mmacchinaastra<a•  Icomponen?diMsonorealizza?mediantestru<ureda?e

algoritmiimplementa?nellinguaggiomacchinadiunamacchinaospiteMO,giàesistente(implementata)

•  Èimportantelarealizzazionedell’interpretediMo  puòcoincidereconl’interpretediMO

! MèrealizzatacomeestensionediMO! altricomponen?dellamacchinapossonoesserediversi

o  puòesserediversodall’interpretediMO! MèrealizzatasuMOinmodointerpreta\vo! altricomponen?dellamacchinapossonoessereuguali

17 PR22017-2018

Dalinguaggioamacchinaastra<a

•  M macchinaastra<aLM linguaggiomacchinadiM•  L linguaggioML macchinaastra<adiL•  ImplementazionediL=

realizzazionediMLsuunamacchinaospiteMO

•  SeLèunlinguaggioadaltolivelloeMOunamacchina“fisica”o  l’interpretediML ènecessariamentediversodall’interpretediMO

! MLèrealizzatasu MO inmodointerpreta?vo! l’implementazionediLsichiamainterprete! esisteunasoluzionealterna?vabasatasutecnicheditraduzione(compilatore?)

18 PR22017-2018

Implementareunlinguaggio

•  L linguaggioadaltolivello•  ML macchinaastra<adiL•  MO macchinaospite•  interprete(puro)

–  MLèrealizzatasuMOinmodointerpreta?vo–  scarsaefficienza,sopra<u<opercolpadell’interprete(ciclodi

decodifica)•  compilatore(puro)

–  iprogrammidiLsonotrado_inprogrammifunzionalmenteequivalen?nellinguaggiomacchinadiMO

–  iprogrammitrado_sonoesegui?dire<amentesuMO•  MLnonvienerealizzata

–  ilproblemaèquellodelladimensionedelcodiceprodo<o•  Casilimitechenellarealtànonesistonoquasimai

19 PR22017-2018

•  Llinguaggioadaltolivello•  MLmacchinaastra<adiL•  MImacchinaintermedia•  LMIlinguaggiointermedio•  MOmacchinaospite

–  traduzionedeiprogrammidaLallinguaggiointermedioLMI–  realizzazionedellamacchinaintermediaMIsuMO

20

ML MI MO

Programma in L Programma in LMI

realizzazione

traduzione

Lamacchinaintermedia

PR22017-2018

21

ML MI MO

Programma in L Programma in LMI

realizzazione

traduzione

Lamacchinaintermedia

•  ML =MIinterpretazionepura•  MO=MItraduzionepura

–  possibilesoloseladifferenzafraMOeMLèmoltolimitata•  LlinguaggioassemblerdiMO

–  intu_glialtricasi,c’èsempreunamacchinaintermediacheestendeeventualmentelamacchinaospiteinalcunicomponen?

PR22017-2018

Ilcompilatore

•  Quandol’interpretedellamacchinaintermediaMIcoincideconquellodellamacchinaospiteMO

•  ChedifferenzaesistetraMIeMO?–  ilsupportoatempodiesecuzione(rts)

•  collezionedistru<ureda?eso<o-programmichedevonoesserecarica?suMO(estensione)perperme<erel’esecuzionedelcodiceprodo<odaltradu<ore(compilatore)

–  MI=MO+rts

•  IllinguaggioLMIèillinguaggiomacchinadiMOestesoconchiamatealsupportoatempodiesecuzione

22 PR22017-2018

Acosaserveilrts?

•  Unesempiodaunlinguaggioan?co:inlineadiprincipioèpossibiletradurretotalmenteunprogrammaFORTRANinunlinguaggiomacchinapuro,senzachiamatealrts,ma...–  latraduzionedialcuneprimi?veFORTRAN(peres.rela?veall’ingresso

uscita)produrrebbecen?naiadiistruzioniinlinguaggiomacchina•  seleinserissimonelcodicecompilato,lasuadimensionecrescerebbeadismisura

•  inalterna?va,possiamoinserirenelcodiceunachiamataaunarou?ne(indipendentedalpar?colareprogramma)

•  talerou?nedeveesserecaricatasuMOedentraafarpartedelrts•  Neiverilinguaggiadaltolivello,questasituazionesipresentaper

quasitu_icostru_dellinguaggio–  meccanismidicontrollo–  nonsolorou?nemaanchestru<ureda?

23

IlcompilatoreC

•  Ilsupportoatempodiesecuzionecon?ene–  variestru<ureda?

•  lostack–  ambiente,memoria,so<oprogrammi,…

•  lamemoriaaheap–  puntatori,...

–  iso<o-programmicherealizzanoleoperazioninecessariesutalistru<ureda?

•  Ilcodiceprodo<oèscri<oinlinguaggiomacchinaestesoconchiamatealrts

24 PR22017-2018

Implementazionimiste

•  Quandol’interpretedellamacchinaintermediaMIèdiversodaquellodellamacchinaospiteMO

•  EsisteunciclodiinterpretazionedellinguaggiointermedioLMIrealizzatosuMOo  pero<enereuncodicetrado<opiùcompa<oo  perfacilitarelaportabilitàsupiùmacchineospi?o  sidevereimplementarel’interpretedellinguaggiointermedioo  nonènecessarioreimplementareiltradu<ore

25 PR22017-2018

Compilatoreoimplementazionemista?

•  Nelcompilatorenonc’èdimezzounlivellodiinterpretazionedellinguaggiointermedioo  sorgentediinefficienza

! ladecodificadiunaistruzionenellinguaggiointermedio(elasuatrasformazionenelleazioniseman?checorrisponden?)vieneeffe<uataognivoltachesiincontral’istruzione

•  Seillinguaggiointermedioèproge<atobene,ilcodiceprodo<odaunaimplementazionemistahadimensioniinferioriaquelledelcodiceprodo<odauncompilatore

•  Un’implementazionemistaèpiùportabilediuncompilatore•  Ilsupportoatempodiesecuzionediuncompilatoresiritrova

quasiugualenellestru<ureda?erou?neu?lizzatedall’interpretedellinguaggiointermedio

26

L’implementazionediJava

•  Èunaimplementazionemista–  traduzionedeiprogrammidaJavaabytecode,linguaggiomacchinadiunamacchinaintermediachiamataJavaVirtualMachine

–  iprogrammibytecodesonointerpreta?–  l’interpretedellaJavaVirtualMachineoperasustru<ureda?(stack,heap)similiaquelledelrtsdelcompilatoreC•  ladifferenzafondamentaleèlapresenzadiunages?oneautoma?cadelrecuperodellamemoriaaheap(garbagecollector)

–  suuna?picamacchinaospite,èpiùsemplicerealizzarel’interpretedibytecodechel’interpreteditu<oillinguaggio•  ilbytecodeèpiù“vicino”al?picolinguaggiomacchina

27 PR22017-2018

Trefamigliediimplementazioni

•  Interpretepuro–  ML=MI

–  interpretediLrealizzatosuMO–  alcuneimplementazioni(vecchie!)dilinguaggilogiciefunzionali(LISP,

PROLOG)•  Compilatore

–  macchinaintermediaMIrealizzataperestensionesullamacchinaospiteMO(rts,nessuninterprete)(C,C++,PASCAL)

•  Implementazionemista–  traduzionedeiprogrammidaLaLMI–  iprogrammiLMIsonointerpreta?suMO

•  Java•  i“compilatori”perlinguaggifunzionalielogici(LISP,PROLOG,ML)•  alcune(vecchie!)implementazionidiPascal(Pcode)

28 PR22017-2018

Implementazionimisteeinterpre?puri

•  Latraduzionegeneracodiceinunlinguaggiopiùfaciledainterpretaresuuna?picamacchinaospite

•  Masopra<u<opuòeffe<uareunavoltapertu<e(atempoditraduzione,sta?camente)analisi,verificheeo_mizzazionichemigliorano–  l’affidabilitàdeiprogrammi–  l’efficienzadell’esecuzione

•  Varieproprietàinteressate–  inferenzaecontrollodei?pi–  controllosull’usodeinomielororisoluzione“sta?ca”–  …

29 PR22017-2018

Analisista?ca

•  Dipendedallaseman?cadellinguaggio•  Cer?linguaggi(LISP)nonperme<onoinpra?caalcun?podi

analisista?ca–  acausadellaregoladiscopingdinamiconellages?onedell’ambientenonlocale

•  Linguaggifunzionalipiùmoderni(ML)perme<onodiinferireeverificaremolteproprietà(?pi,nomi,…)durantelatraduzione,perme<endodi–  localizzareerrori–  eliminarecontrolliatempodiesecuzione

•  typecheckingdinamiconelleoperazioni–  semplificarecerteoperazioniatempodiesecuzione

•  cometrovareilvaloredenotatodaunnome30 PR22017-2018

Analisista?cainJava

•  Javaèfortemente?pato–  iltypecheckingpuòessereingranparteeffe<uatodaltradu<oree

sparirequindidalbytecodegenerato•  Lerelazionidisubtypingperme<onocheunaen?tàabbiaun?povero

(actualtype)diversodaquelloapparente(apparenttype)–  ?poapparentenotoatempoditraduzione–  ?poveronotosoloatempodiesecuzione–  ègaran?tocheil?poapparentesiaunsupertypediquellovero

•  Diconseguenza,alcuneques?onilegateai?pipossonoessererisoltesoloatempodiesecuzione–  sceltadelpiùspecificofradiversimetodioverloaded–  cas?ng(tenta?vodiforzareil?poapparenteaunpossibileso<o-?po)–  dispatchingdeimetodi(sceltadelmetodosecondoil?povero)

•  Controlliesimulazioniatempodiesecuzione

31 PR22017-2018

Seman?caformaleerts

•  Dueaspe_essenzialinellanostravisione(intendendoquelladelcorso)deilinguaggidiprogrammazioneo  seman\caformale

! eseguibile,implementazioneadal?ssimolivelloo  implementazioniomacchineastra=e

! interpre?esupportoatempodiesecuzione

32 PR22017-2018

Perché?

•  Perchélaseman?caformale?–  definizioneprecisadellinguaggioindipendentedall’implementazione•  ilproge_staladefinisce•  l’implementatorelau?lizzacomespecifica•  ilprogrammatorelau?lizzaperragionaresulsignificatodeipropriprogrammi

•  Perchélemacchineastra<e?•  ilproge_stadevetenercontodellecara<eris?chepossibilidell’implementazione

•  l’implementatorelarealizza•  ilprogrammatoreladeveconoscereperu?lizzarealmeglioillinguaggio

33 PR22017-2018

Perché?

•  Diventareunprogrammatoreconsapevoleo migliorecomprensionedellecara<eris?chedeilinguaggidiprogrammazione

o  comprensionedelletecnichediimplementazioneo miglioreintuizionesulcomportamentodelpropriocodice

34 PR22017-2018

Perché?

•  Miscelaaffascinantediteoriaepra?cao  applicazioneimmediataedire<adellateoria

! tecnichedianalisista?ca:inferenzadei?pio  tecnichealgoritmiche(problemiNP-hard)

! allocazionedellerisorsearun?me

35 PR22017-2018

Eilcompilatore?

•  Lamaggiorpartedeicorsiedeilibrisuilinguaggisioccupanodicompilatori

•  Perchénoino?o  ilpuntodivistadeicompilatoriverràmostratoinuncorsofondamentaledellalaureamagistrale

o  dellecosetradizionalmentetra<ateconilpuntodivistadelcompilatore,pochesonoquellecherealmenteciinteressano

•  Guardiamolastru<uradiun?picocompilatore

36 PR22017-2018

Compilatore

37

Sorgente CodiceFrontEnd BackEnd

Frontend:fasidianalisiLeggeilprogrammasorgenteedeterminalasuastru<urasiasinta_cacheseman?caBackend:sintesiGenerailcodicenellinguaggiomacchina,programmaequivalentealprogrammasorgente

PR22017-2018

Compilatore

38

Aspeacri\ciRiconoscereiprogrammilegali(sinta_camentecorre_)Ges?relastru<uradei?piGenererarecodicecompa?bileconilSOdellamacchinaospite

Sorgente CodiceFrontEnd BackEnd

PR22017-2018

FrontEnd

•  Duefasiprincipalio  scanner:trasformailprogrammasorgentenellessico(token)

o  parser:leggeitokenegenerailcodiceintermedio(IR)

•  Lateoriaaiutao  lateoriadeilinguaggiformali:automi,gramma?cheo  strumen?automa?cipergenerarescannereparser

Scanner Parsersource tokens IR

PR22017-2018 39

Token

•  Token:lacos?tuentelessicaledellinguaggioo  operatori&punteggiatura:{}[]!+-=*;:…o  parolechiave:if,while,return,class,…o  iden?ficatori:…o  costan?:int,floa?ng-pointcharacter,string,…

PR22017-2018 40

Scanner:unesempio

•  Input//codicestupidoif(x>=y)y=42;

•  Token

IF LPAREN ID(x) GEQ ID(y)

RPAREN ID(y) BECOMES INT(42) SCOLON

PR22017-2018 41

Parser:output(IR)

•  Forma?differen?•  Formato?picoriconosciuto:alberodisintassiastra<a(abstractsyntaxtree)o  lastru<urasinta_caessenzialedelprogrammasenzagliaspe_dizuccherosinta_co

o  neparleremoanchenelseguito

PR22017-2018 42

Parser:AST

•  AbstractSyntaxTree(AST)

ifStmt

>=

ID(x) ID(y)

assign

ID(y) INT(42)

IF LPAREN ID(x) GEQ ID(y)

RPAREN ID(y) BECOMES INT(42) SCOLON

PR22017-2018 43

AST

•  Glialberidisintassiastra<asonopar?colarmenterilevan?perchémostranolastru<uraseman?casignifica?vadeiprogrammi

•  Noinelseguitoconsideremosemprelasintassiastra<a!!o  Senzaconsideraregliaspe_dide<aglioqualiprecedenzaoperatori,ambiguità,etc.

44 PR22017-2018

AST:esempi

45

G: L→ L;E|EE→ a|b

L

E

a

L

E

a

L

; E L

E

a

L

; E

b

L

E

b

;

PR22017-2018

DerivazionieAST

46 PR22017-2018

Ambiguità

•  Programmacorre<oconASTdiversi•  Esempio

–  E→E+E|E*E|id

47

E

E

E

E

E

id id

id+

*

E

E

EE

Eid

id id

+

*

PR22017-2018

Comesirisolve?

•  Esistonopiùmetodi•  Adesempio,codificarenelleregoledellagramma?cala

precedenzadeglioperatori

48 PR22017-2018

Morale

•  Lateoria(gramma?cheelinguaggiformali)aiutaastru<urarelegramma?cheinmodotaledaevitareproblemicomequellodell’ambiguitào  …etan?altriancora

•  Tu<equesteproblema?chelevedretenellamagistrale…

49 PR22017-2018

Sintassiastra<a

•  Lasintassiastra<adiunlinguaggioèespressafacilmentecoi?pididatoalgebricidiOcamlo  ognicategoriasinta_cadiventaun?podidatoalgebricodiOcaml

50

AlgebraicDataTypeTypeBoolExp=|True|False|NotofBoolExp|AndofBoolExp*BoolExp

BNFBoolExp=|True|False|NOTBoolExp|BoolExpANDBoolExp

PR22017-2018

Esempio

51

Nome Produzionegramma?caleEAdd Exp::=Exp"+"Exp1;ESub Exp::=Exp"-"Exp1;EMul Exp1::=Exp1”*"Exp2;EDiv Exp1::=Exp1"/"Exp2;EInt Exp2::=Integer;

typeexp= EAddofexp*exp |ESubofexp*exp |EMulofexp*exp |EDivofexp*exp |EIntofint

PR22017-2018

ASTinJava

•  Potremmocodificarelasintassiastra<adiunlinguaggioancheinJava

•  Inchemodo?o  ognicategoriasinta_caèunaclasseastra<ao  ognicostru<oresinta_coèunaso<o-classecheestendelaclasseastra<a

52 PR22017-2018

ASTinJava(esempio)

•  publicabstractclassExp{…}

•  publicclassESubextendsExp{publicfinalExpexp_1,exp_2;publicESub(Expp1,Expp2){exp_1=p1;exp_2=p2;}:}

53 PR22017-2018

Analisiseman?ca(sta?ca)

•  Tipicamentedopolafasediparsingo  typecheckingo  usoeallocazionedellerisorseo  o_mizzazionedelcodice

PR22017-2018 54

BackEnd

•  Cosafa?o  traduceilcodiceintermedionellinguaggiodellamacchinaospite

o  usalerisorsedellamacchinaospiteinmodoeffe_vo

PR22017-2018 55

Ilrisultatocomplessivo

•  Inputif(x>=y)y=42;

•  Output

moveax,[ebp+16]cmpeax,[ebp-8]jlL17mov[ebp-8],42L17:

ifStmt

>=

ID(x) ID(y)

assign

ID(y) INT(42)

PR22017-2018 56

Meaamoinsiemelecose

57 PR22017-2018

Stru<uradiuncompilatore

58 PR22017-2018

Cosaciinteressa?

59

Analisilessicale

Analisisinta_ca

Analisiseman?ca

O_mizzazione1

Generazionecodice

O_mizzazione2

Supportoarun?me

nonciinteressano:aspe/sinta/ci

nonciinteressano:aspe/digenerazionecodice

Sololaparteingiallo!!

PR22017-2018

JITcompiler

•  Idea:compilareilbytecodenelcodicena?vodurantel’esecuzione

•  Vantaggi–  programmacon?nuaaessereporta?le–  esecuzioni“o_mizzate”(codeinlining)

•  Svantaggi–  rtsmoltocomplesso(o_mizzalong-runningac?va?on)–  costodellacompilazioniJIT

•  Noinonneparliamo!

60 PR22017-2018