On 03/06/2015 16:55, Gian Uberto Lauri wrote:
Federico Di Gregorio writes: > On 03/06/2015 14:28, Gian Uberto Lauri wrote: > > Federico Di Gregorio writes: > > > > > 1) il compilatore tiene traccia della "vita" dei dati e in fase di > > > compilazione da errori se fai qualcosa di inconsistente (tipo usare > > > della memoria dopo averla liberata). > > > > Questa era una delle cose buone introdotte da Java... > > Si, ma Java e tutti gli altri linguaggi, sia precedenti (LISP, per dirne Ti devo correggere. Java fa moltissimi controlli a compile time, compresa l'inizializzazione dei riferienti agli oggetti.
Si, si, in questo senso hai ragionissimo. Quello che intendevo è che Java delega al runtime la garbage collection - ovvero il compilatore in generale non sa quando la memoria puntata da un riferimento (un oggetto) verrà liberata. Un programma Java "sano e normale" non rischia SIGSEGV perché il runtime garantisce che la memoria venga liberata solo quando non più raggiungibile.
Il bello di Rust è che questi controlli vengono fatti al momento della compilazione. Da un punto di vista pratico Rust, come il C, non ha un "runtime": ha solo una libreria di base che puoi anche eliminare del tutto, se preferisci (che è come compilare senza libc).
federico -- Federico Di Gregorio federico.digregorio@dndg.it Di Nunzio & Di Gregorio srl http://dndg.it When people say things are a lot more complicated than that, they means they're getting worried that they won't like the truth. -- Granny Weatherwax