Per TheKaneB:http://brinch-hansen.net/memoirs/photos ... c4000.htmlLui impiegò quasi due anni per assemblarselo, pensi di competere con un nerd del genere?
P.S. E' interessante notare come la stessa immagine sia sparita dalla versione inglese della voce GObject di Wikipedia (l'ho recuperata da quella spagnola). Si vede che qualcuno l'ha tolta dopo tutte le volte che l'ho citata come pessimo esempio di "emulazione" degli oggetti in C. :lol:
Attualmente invece ho approfondito il Java, perchè sviluppo su Android, e devo dire che mi piace così e così... Avrei aggiunto alcune caratteristiche come gli iteratori stile C++ (quelli stile Java mi fanno pena al cubo), e la possibilità di gestire la memoria manualmente con il "delete". Moltissimi programmatori Java sono erroneamente convinti che il Garbage Collector ti salvi il culo dai memory leaks.In realtà, con strutture complesse e intricate, capita molto spesso che alcuni oggetti si portino dietro un grafo di dipendenze con vari reference ad oggetti non più utili.Se non metti a "null" TUTTI i reference di un oggetto, questo rimarrà in memoria ovviamente. Con un bel "delete" esplicito invece risolverei molti problemi di memoria in modo molto più semplice. Potrei anche aumentare le performances dei programmi.
- causa diffusione, c'è tanta gente che lo usa anche per sviluppare applicazioni che si farebbero meglio (e prima) con altri linguaggi (sì, c'è anche gente che sviluppa applicazioni web in C/C++!);
Questo significa che GObject organizza i tipi in runtime ad albero, quindi per il method call il dynamic binding viene fatto in runtime traversando un albero, una lentezza spaventosa, al pari di un linguaggio dynamic typing (in realtà peggio, leggi sotto). Il C++ essendo un linguaggio static typing risolve il dynamic binding in compile time, quindi non hai un albero da traversare in runtime.Ma anche paragonandolo ad un linguaggio dynamic typing, la method table è un array di indirizzi fissi per le funzioni che non vanno dereferenziati, quindi a parte il traverse del tree il calling del metodo è veloce, come la chiamata di una funzione normale. Invece con il GObject hai dei puntatori a funzione, quindi la chiamata sarà più lenta perché avviene il dereferencing.