Il mio suggerimento riguardo il test con c proviene dall'esperienza fatta in campo realtime, e come vedi le differenze sono tangibili.
Il tutto riporta a come sono state costruite le librerie cui fai uso.
A suo tempo, quando avevo iniziato a programmare in C++, meravigliato dalle nuove potenzialità di una programmazione ad oggetti, avevo iniziato a lavoraci sopra, scoprendo poi quanta differenza e quanti problemi dava questa trasformazione. La cosa ovviamente era ed è di poca importanza quando un'applicazione aveva il solo scopo di fornire un'interfaccia con un utente, ma diventava problematica quando si dovevavo fare calcoli e rispondere ad un evento entro tempi strettissimi (nell'ordine del microsecondo e addirittura molto minori). Il discorso assumeva aspetti preoccupanti quando ci si accorgeva che l'accumulo di un ritardo (anche del millisecondo) dipendeva ovviamente dal numero di eventi, che portava di conseguenza a ritardi mostruosi...
Quando si ha a che fare con applicazioni, la cui interazione è dipendente dalla reazione umana, i ritardi assumono un'importanza marginale. Tenendo conto che, nella migliore delle ipotesi, la reazione umana ha un velocità di circa 300ms, il fatto che poi un'operazione ci metta 50/100ms non crea preoccupazione. Se già il numero minimo di fotogrammi necessari per non far notare all'occhio la transazione è di circa 25/sec, ovvero 40ms a fotogramma, questo ti dà un'idea della cosa (e stiamo parlando dell'occhio, che è sicuramente superiore come velocità di una mano su una tastiera...).
A parte i piccoli ritocchi che uno può fare su un codice per migliorarne le prestazioni, si possono intraprendere anche altre tecniche, ma questo discorso credo vada oltre a questa discussione.
Da quello che ho notato nella nuova libreria, è che la stessa và a sostituire quasi completamente alcune funzioni base di gambas, traducendole direttamente e trasferendole alle funzioni di llvm. Queste trasformazioni riguardano principalmente le funzioni e le operazioni di calcolo (ovvero la parte matematica), e di certo non possono influire sulle logiche più ad alto livello, come ad esempio l'interfacciamento di un database e/o l'i/o verso/da fonti esterne. Anche le classi sono esclude da questa trasformazione, in quanto oggetti facenti parte di uno strato software complesso e altamente dinamico.