Newsgroup: it.comp.lang.c++
Titolo: proposizione per un C++ più rapido

Ciao tutti,
Come molta gente, trovo che il C++ è troppo lento per i calculi
numerici. Ma, da vero, il C++ è molto più gradevole che il C u el
Fortran, dunque che cosa fare?
Ho una proposizione, con 2 nuove parole chiavi per fare del C++ un
lenguaje molto più rapido per i calculi numerico. Chiamo questo
"Direct C++".
Per favore, si puo leggere la mia proposiziones, escrita oggi, non
esiste en versione italiano (perche non parlo italiano u casi niente),
ma se pue leggere in francese, spagnolo, u inglese, pue interesarla:
 
http://mjulier.free.fr/directcxx
E dimi ciò che ne pensa
Michel (fisico, ma ora ingenero in elettronica)
Montpellier, Francia

 ha scritto nel messaggio
news:20030525000832....@camembertfree.fr...


 sorgenti.
E` vero che l'assembly è il più rapido de tutti, ma penso che se la
gente usa il C++ più dell'assembly, è perchè la gente ve una
necessità! Chè ne pensa la gente di questo foro?
Il problema se tutto sta ottimizzato molto, è che risulta dificilisimo
modificare. Per esemplo, ho un codice ottimizzato de "matrix", e ora
bisogno cualcosa per i tensori con 3 dimensioni: se tutto sta scritto
in assembly, penso che esserà più dificile adattarli che se sta
scritto en codice semplice in C++.
E` vero che la portabilità à il problema più grande se cualcuno define
nuove parole chiavi. Ma si può parlare del tema, partando con il punto
de vista teorico.
Michel

 Michel
dal punto teorico se ci fossero nuove parole chiave (ovviamente riconosciute
dallo standard e quindi accettate da tutti i compilatori) che aumenterebbero
la velocità del calcolo, ovviamente ci sarebbe solo da guadagnare. Bisogna
inoltre assicurare che queste nuove funzionalità non entrino in conflitto
con la gestione del calcolo "vecchio stile". Risolti questi 2 problemi penso
che allora sia tutto possibile.

 
Effettivamente è un grosso problema di efficienza che avevo trovato anch'io.
Purtroppo la soluzione non è semplice. Penso che la tua idea possa dare 
molti problemi con un eventuale overload dell'operatore =.
Una soluzione radicale al problema sarebbe Java (che passa e ritorna per 
reference, senza copia), che però è poco efficiente per molti altri motivi.
Hai già visto se C# va bene per quello che devi fare (sempre che non sia 
troppo lento).
Per risolvere la questione in C++ ci sono questi modi:
1. ritornare un auto_ptr quando la classe è grande e una sua copia porta 
via molto tempo (attenzione però che molte volte il tempo di copia di 
una grande quantità di dati è comunque minore del tempo usato per la 
gestione di auto_ptr).
Questo ha lo svantaggio di una sintassi più complicata, dovresti 
scrivere invece di ad esempio : (a+b)-(c+d)
*(*(a+b) - *(c+d)) che non è molto bello
2. usare un sistema usato in molte librerie di gestione stringhe che 
incorporano nella classe la gestione di un reference count.
Questo però dà molti problemi per il multi-thread
3. in vecchie versioni di g++ c'era la possibilità di dichiarare la 
variabile di ritorno esterna :
Matrix operator + (const Matrix & a, const Matrix & b) return c
{
	/* qui metti il codice che scrive l'output in c*/
}
con l'uso
c = a + b
non veniva chiamato alcun costruttore di copia
questa estensione del linguaggio molto comoda (molto simile a quella che 
proponi) è stata deprecata, non so esattamente perchè, ma posso 
immaginare perchè dava problemi di semantica ambigua per l'operatore =
Come vedi tutti i problemi nascono dalla possibilità/necessità di fare 
l'overload di = e del costruttore di copia.
Cosa che in Java e C# non è consentita ma nemmeno necessaria, a prezzo 
però di altre limitazioni.