14

Le mie domande sono più di natura storica che pratica:Chi ha inventato il metodo throw/try/catch [/ finally]?

  1. Chi l'ha inventato?
  2. Quale lingua ha utilizzato prima (e fino a che punto)?
  3. Qual è stata l'idea originale, il concetto di base (quali problemi effettivi dovevano essere risolti in questi giorni, i documenti sono i benvenuti)?
  4. È LISPs condition system l'antenato della gestione delle eccezioni corrente?
+2

In un modo un po 'riconfezionato, questo è principalmente un duplicato di http://stackoverflow.com/questions/1449951/what-language-was-the-first-to-implement-exception-handling – mjv

+0

Grazie! Ma apprezzerei anche le risposte alle domande 3 e 4. – Frunsi

+0

+1 per il bel post .. –

risposta

5

Il sistema di condizioni Lisp comune di oggi è relativamente nuovo. Il progetto era basato su sistemi precedenti, ma non è stato incluso come parte del linguaggio Common Lisp fino alla fine degli anni '80 intorno al tempo di CLTL2

Credo che il capitolo sulle condizioni in quel libro abbia un discreto commento sulla storia e background del design e riferimenti alla ricerca correlata e alle precedenti implementazioni di sistemi simili.

4

Le CPU VAX disponevano di un sistema di gestione delle eccezioni basato su stack. In ogni frame di chiamata, una cella a 32 bit è stata allocata e riempita con uno zero. Se la subroutine che si chiamava voleva gestire le eccezioni, tutto quello che doveva fare era riempire quella cella con l'indirizzo della routine di gestione delle eccezioni.

Quando si è verificata un'eccezione, si è verificata una ricerca di stack. Questo è stato facile, dal momento che i telai dello stack erano tutti incatenati insieme. Il primo frame dello stack con una voce diversa da zero determinerebbe lo svolgimento di uno stack a quel punto e il gestore di eccezioni verrebbe chiamato.

Ricordo che questa era una delle caratteristiche del processore che erano indirizzate ai linguaggi di livello superiore, ma non so se esistesse un linguaggio di livello superiore che sfruttasse la funzionalità. Credo che sia stato usato dal codice della libreria, che probabilmente sarebbe stato scritto in assembler.

0

Non torna alle funzioni setjmp, longjmp in C? Richie, Kernighan, et al?

Problemi correlati