Paradigmi di programmazione Flashcards
Differenza tra un sistema di tipi e il type checking
Il sistema di tipi specifica il comportamento i/o delle funzioni mentre il type cheching verifica l’adeguatezza del comportamento i/o
Quali sono le componenti di una macchina astratta?
Interprete, controllo, operazioni primitive e memoria
Definizione di interprete
L’interprete è quel programma che prende in input il programma da eseguire e ispeziona la sua struttura per capire che cosa c’è da fare (A partire dal testo genera l’albero di sintassi astratta)
Che cos’è il RTS?
Il run time support sono una serie di strutture dati e sottoprogrammi che devono essere caricati sulla macchina host per permettere l’esecuzione del codice generato dal compilatore
Come si dividono le fasi del compilatore?
Front end (Scanner, Parser, Type checker) e Back end
Parla della structural Operational Semantics
E’ la relazione di transizione per descrivere il comportamento dei programmi, si divide in 3 parti:
1) Semantica -> descrizione del significato del linguaggio
2) Operazioni -> descrive il comportamento del programma attraverso i passi di valutazione
3) Strutturale -> definisce la relazione di transizione usando regole di inferenza strutturali
Small-step e Big-step
Small-step esegue ogni singola operazione mentre il Big-step descrive in un unico passo l’intera computazione
Come si possono memorizzare i campi nei record?
Allineamento dei campi alla parola (ovvero un campo per ogni parola) o memorizzazione in un packet record
Che cosa significa polimorfismo per sottotipo?
Il polimorfismo per sottotipo si basa sul fatto che un dato di tipo t1 possa essere usato al posto di un dato di tipo t2 secondo questa regola:
- se S<:T allora ogni valore di tipo S può anche essere di tipo T
Qual è la differenza tra covariante e contravariante?
Nel subtyping delle funzioni la relazione di tipo è contravariante inverte la relazione d’ordine mentre covariante la rispetta
Cos’è un ADT e quali sono le sue caratteristiche
Un ADT consiste in un insieme di dati e una collezione di operazioni per operare su questi dati
Abbiamo tre caratteristiche principali:
-Estendibili
-Astratti
-Incapsulati
Da che cosa sono caratterizzati gli oggetti?
Da uno stato (proprietà), funzionalità (metodi), identità, ciclo di vita e locazione di memoria
Quali sono i concetti fondamentali dell’OOP?
Incapsulamento, Astrazione, Interfaccia, Ereditarietà, Principio di sostituzione e polimorfismo
Quali sono le principali differenze tra Object based e Class based?
Object based: permette di creare e manipolare oggetti senza implementare classi, rende difficile determinare il tipo dell’oggetto a tempo di esecuzione, ogni oggetto mantiene una lista di prototipi e structural subtyping
Class based: si devono implementare le classi prima di creare gli oggetti ma gli oggetti hanno il tipo denominato dalla classe, permette di definire estensioni di classi e superclassi e subtyping nominale
Cosa si intende per type Weakening e come si può risolvere?
il tipo della variabile non è chiaro al momento della dichiarazione e il type checker indebolisce temporaneamente il tipo inferito che viene ricalcolato appena possibile a tempo di esecuzione e si risolve facendo una type annotation ovvero una forzatura del tipo che preferiamo
Cosa si intende per type coercion?
Si esegue una forzatura di tipo e si tratta l’espressione come se fosse di quel tipo