Fn Ordine superiore

Questa parte è strettamente collegata conl a parte di Astrazione sul controllo. Si parla di passare le funzioni come dati. e quindi possono essere passati come se fossero dei parametri. un linguaggio di programmazione è di ordine superiore qualora ammetta funzioni sia come parametro che come risultato di altre funzioni. La parte molto simile alla precedente è il fatto di valutare la funzione nell’ambiente iniziale, quindi bisogna utilizzare un sistema simile a quello del passaggio per nome. ...

3 min · Xuanqiang 'Angelo' Huang

Fondamenti teorica

https://virtuale.unibo.it/pluginfile.php/1295166/mod_resource/content/0/Lez18-Gorrieri.pdf Halting problem Questo asserisce che non esiste nessun programma che sia in grado di decidere la terminazione di un altro programma Questo è un problema che ci è interessante perché vorremmo costruire un compilatore che sia in grado di osservare tutti gli errori possibili del programma. Come vedremo tra poco la risposta sarà negativa. Dimostrazione tesi 🟨++ Supponiamo che questo programma esista, lo chiamiamo check(P) che restituisce 0 se termina 1 se non termina, allora devo poter essere in grado di scrivere un programma di questo genere ...

6 min · Xuanqiang 'Angelo' Huang

Garbage Collection

On dangling pointers Tombstones 🟩 Slides tombstones Quando alloco, alloco anche una tombstone, e tutti i riferimenti passano per quella. (quindi ho due dereference per l’accesso) quando vado a deallocare segno la tombstone come RIP, NULL. Dopo molto tempo ho il problema del cimitero che diventa molto grande. Anche se non punta più a niente, il cimitero. Keys and locks 🟩 Un pò di overhead in più dal punto di vista della memoria, che è doppio ...

2 min · Xuanqiang 'Angelo' Huang

Gestione delle eccezioni

Introduzione Metodi alternativi di gestione degli errori (3) 🟩 A volte le computazioni falliscono. Potremmo gestirle con i result come accennato in Polimorfismo, però diventa molto macchinoso fare tutte le funzioni che debbano inoltrare solamente delle results. bisogna trovare un modo più naturale. Ecco che arriva una gestione delle eccezioni direttamente nel linguaggio. Si tratta un sistema di comunicazione degli errori. ALTRI METODI Results, stile monadico, vedi sopra. definire dei valori eccezionali (questo si va spesso in C) Il chiamato dice al chiamante una cosa da chiamare quando fallisce. Diciamo inversione del controllo perché in questo caso è il chiamato che dice cosa fare. Ma rende il codice poco composizionale, quindi difficile da seguire. (Questa è la soluzione molto più simile alla gestione effettiva degli errori). Ma nelle eccezioni vere non è il chiamato che ritorn al’indirizzo da eseguire ma è il runtime che decide cosa andare ad eseguire. Questa cosa non interrompe il flusso del calcolo Con le eccezioni vogliamo trasferire il controllo a un gestore delle eccezioni questo gestore solitamente si trova sulla stack (va a risalire tutta la stack di chiamata fino a raggiungere questo gestore). ...

3 min · Xuanqiang 'Angelo' Huang

Grammatiche Regolari

Introduzione Definizione grammatica regolare 🟩 Definizione In pratica posso avere solamente come terminali a, oppure un suffisso a su un non terminale. Queste grammatiche sono interessanti perché è molto facile costruire un automa che sia in grado di riconoscere questo linguaggio. Seguendo una definizione più lasca possono anche accettare dei nonterminali epsilon Espressione regolare a NFA 🟩 Questa sezione è anche presente in Automi e Regexp, però è riportata qui così c’è l’insieme di tutte le cose in un unico posto. ...

6 min · Xuanqiang 'Angelo' Huang