PDA

View Full Version : [C++ Vs JAVA] Come programmare in modo veloce/agile anche C++?


shang84
14-11-2005, 23:54
Ciao a tutti,
ultimamente sto lavorando ad un progetto in C++... ho scelto questo linguaggio in quanto è enormemente più efficente di java in termini di tempi di esecuzione.. lavoro con linux usando emacs, g++ e Makefile (..anche se quasi sicuramente è più comodo usare C++Builder o DevC++ :) ).

il punto è questo, quando mi è capitato invece di dover fare progetti in java, nonostante allora ero proprio alle prime armi col linguaggio e con la programmazione OO, ho usato JBuilderX come tool e mi sono trovato benissimo... questo perchè oltre all'uso di JBuilderX Java dispone delle API.

Perchè Java ha le API mentre C++ no? Esiste un modo per ottenere in C++ la stessa praticità-agilità nella programmazione che c'è con Java?

Grazie!

Black imp
15-11-2005, 01:06
scusa mi interessa il topic ma non riesco a capire bene il problema: cioè vuoi sapere perchè java prevede come 'standard' tutte le librerie necessarie anche per le finestre mentre C++ no?

beh semplice, perchè c++ deve essere compilato ad hoc per ciascuna piattaforma, e questa usa le sue API con le quali è stata fatta l'interfaccia del SO. quindi è inutile fornire delle api standard: usi quelle fornite dal SO. mentre java, in quanto seminterpretato, e quindi svincolato dalla piattaforma, può fornire delle API sue.

Se programmi sotto linux puoi usare le Qt, sotto windows invece puoi usare le sue API - che casualmente mi sto studiando adesso - importando window.h


ho capito bene dunque?

shang84
15-11-2005, 08:40
Si ora ho capito meglio..

come posso usare - scaricare Qt e windows.h per C++? Basta fare un include?
Perdona l'ignoranza....

Black imp
15-11-2005, 11:52
Si ora ho capito meglio..

come posso usare - scaricare Qt e windows.h per C++? Basta fare un include?
Perdona l'ignoranza....


sotto windows includi la window.h che a sua volta include una marea di header. ti consiglio un tutorial per windows per le winapi 32 perchè non è proprio immediato fare finestre ecc. se non leggi il meccanismo con cui funziona.

per le qt non le ho mai usate ma se vai sul sito della trolltec - non mi ricordo come si scrive - trovi anche un tutorial o un reference. le qt sono scritte in c++ se non ricordo male. quelle di windows in C invece.

Braccop
15-11-2005, 13:19
Se programmi sotto linux puoi usare le Qt, sotto windows invece puoi usare le sue API - che casualmente mi sto studiando adesso - importando window.h


scusate l'ot, ma hai del materiale sulle api di windows? magari anche sul winsock... perche' io sto cercando ma non trovo nulla

fek
15-11-2005, 13:58
Ciao a tutti,
ultimamente sto lavorando ad un progetto in C++... ho scelto questo linguaggio in quanto è enormemente più efficente di java in termini di tempi di esecuzione.. lavoro con linux usando emacs, g++ e Makefile (..anche se quasi sicuramente è più comodo usare C++Builder o DevC++ :) ).

Stai basando una scelta di design importante come il linguaggio sulla base di considerazioni prestazionali su un sistema che non hai ancora costruito?
Hai un requisito esplicito che ti richiedere un certo vincolo prestazionale?

Altrimenti la tua e' una scelta molto sbagliata.

Perchè Java ha le API mentre C++ no? Esiste un modo per ottenere in C++ la stessa praticità-agilità nella programmazione che c'è con Java?

Grazie!

Anche il C++ ha API, in realta' ogni linguaggio ha a disposizione delle API. Il discorso e' da spostarsi sui tool. Esistono tool per C++ tali da ottenere la stessa produttivita' che si ha con linguaggi come C# e Java?
No, non esistono, altrimenti non esisterebbero quei linguaggi :)

Il C++ e' una brutta bestia e non potrai mai aspettarti la stessa produttivita' di un linguaggio ad alto livello, come non potrai mai aspettarti da un linguaggio ad alto livello le prestazioni che ottieni in C++. Ma le prestazioni sono sempre il fattore meno importante, perche' i vincoli prestazionali sono i piu' facili da rispettare quando e dove necessario.

Perche' pagare i limiti in termini di produttivita' del C++ su tutto il codice, quando i vantaggi prestazionali si godono solo su una minima percentuale del codice stesso mentre nel resto e' del tutto ininfluente?

Io ti consiglio di scrivere tutto in Java/C#, poi, quando hai il sistema funzionante, isolare le parti di codice che hanno bisogno di migliorare le prestazioni a seguito di un profiling attento e, quindi, scrivere solo queste parti in C++, ma non prima di aver cercato ottimizzazioni algoritmiche. Nel 99% dei casi ti accorgerai che non ti servira' neppure usare il C++.

shang84
15-11-2005, 14:35
Arrrgh!! :muro: :muro: :muro: :muro: :muro: :muro:


Merda! Avevo l'impressione di aver sbagliato scelta. Il punto è questo:

ho inziato uno stage in un centro di ricerca dove si studia la proteomica.
Loro utilizzano Perl per il loro sw. Io conoscevo bene Java e abbastanza bene C++. Mi sono detto:"facciamo tutto in C++ in quanto se si deve fare l'analisi della struttura delle proteine i tempi di calcolo sono lunghi con un linguaggio interpretato.. quindi è meglio darsi al C++!" tra l'altro loro mi han detto: "fallo nel linguaggio che vuoi basta che funzioni." E qui arriva il masochismo, ho scelto il C++ con l'illusione fare una cosa più facile rispetto ad usare il Perl che non conoscevo... illusione "condita" anche dall'idea che il C++ è + efficente.

Ora come ora ho scritto circa 1000 righe di codice, non moltissime ma cmq 1000!

Mi consigli di trasportare il tutto sotto Java? o a sto punto è meglio sotto Perl?

....cacchio che cavolata... io avrei continuato a sbattere la testa contro il muro :muro: ... pensati che quando mi chiedevano di fare una minima cazzata nel programma ci mettevo una vita perchè dovevo star li ad impararmi le varie librerie del C++....

PS: a livello di crescita personale nell'informatica pensi sia meglio ammettere l'errore e passare ad un altro linguaggio (Java ad esempio) o continuare ad impare le librerie di C++, pur sapendo che ci metto + temp?

cionci
15-11-2005, 15:00
shang84 non puoi dire che uno sia migliore dell'altro se non hai provato...
Se le prestazioni sono un punto cruciale del tuo lavoro è chiaro che tu debba valutare bene la scelta...
Scrivi due esempi.. Uno in C++ ed uno in Java... Implementa un algoritmo tipo di quelli che devi usare nel programma finale...
A quel punto valuta le differenze prestazionali (sfrutta anche tutte le ottimizzazioni messe a disposizione dai compialtori)...

C++ ha comunque a disposizioni molte librerie multipiattaforma...ad esempio wxWidgets...e molte librerie multipiattaforma anche per altro (Boost ad esempio)...

shang84
15-11-2005, 15:14
Ok, dato che finora ho fatto solo la prima parte di 3 del lavoro potrei riscriverla in toto in Java e come dici tu confrontare i tempi di esecuzione...

il dubbio è che non so quanto tempo potrebbe richiedermi l'imparare le librerie che mi consigli.. boh... sono un pò confuso ora come ora :confused:

.... il java mi alletta perchè un minimo di interfaccia grafica la so fare, mentre in c++ no... so che è da pigri dire così ma è quel che mi frulla in testa ora.. trovare la via + facile per fare questo programma.. mettersi a studiare le librerie del c++ rischia di farmi "perdere" tempo con i corsi che sto seguendo e prolungare il tempo dello stage che purtroppo è a Milano, città dove ho alloggio solo fino a 1/2 febbraio..

fek
15-11-2005, 15:37
PS: a livello di crescita personale nell'informatica pensi sia meglio ammettere l'errore e passare ad un altro linguaggio (Java ad esempio) o continuare ad impare le librerie di C++, pur sapendo che ci metto + temp?

A livello di crescita personale di consiglio di svolgere il compito imparando un nuovo linguaggio. Perl e' un po' 'na schifezza. Ti consiglio di scriverlo in Python o Ruby (cosi' impari anche qualcosina di nuovo :)). Se proprio non ti vuoi staccare da i linguaggi C-like, vai su Java o C#, a seconda che il tuo programma debba essere portabile o solo per Win32. Nel secondo caso con C# ti sara' ancora piu' semplice integrare codice C++ qualora fosse necessario.

Infine, quando tutto funziona, guarda le performance. Se vanno bene hai finito, se e' troppo lento, cronometra le varie parti del programma e isola quelle che spendono piu' tempo e scrivile in C++.

fek
15-11-2005, 16:33
so che è da pigri dire così ma è quel che mi frulla in testa ora..

La pigrizia e' il migliore amico del programmatore, perche' ti costringe a cercare soluzioni piu' semplici e pragmatiche al problema ;)

shang84
15-11-2005, 17:18
A livello di crescita personale di consiglio di svolgere il compito imparando un nuovo linguaggio. Perl e' un po' 'na schifezza. Ti consiglio di scriverlo in Python o Ruby (cosi' impari anche qualcosina di nuovo :)). Se proprio non ti vuoi staccare da i linguaggi C-like, vai su Java o C#, a seconda che il tuo programma debba essere portabile o solo per Win32. Nel secondo caso con C# ti sara' ancora piu' semplice integrare codice C++ qualora fosse necessario.

Infine, quando tutto funziona, guarda le performance. Se vanno bene hai finito, se e' troppo lento, cronometra le varie parti del programma e isola quelle che spendono piu' tempo e scrivile in C++.

E' un programma per Win32 e Linux... quindi Java.
La mia amica pigrizia mi dice: "No no! Lascia perdere manuali nuovi.. metti prima in pratica quello che sai già.. e poi +avanti, in un giorno di pioggia, mettiti ad imparare qualcos'altro..."

Quindi mi sa che mi annoto i linguaggi che hai detto nel mio taccuino dei "buoni propositi" :)

cionci
15-11-2005, 17:22
E' un programma per Win32 e Linux... quindi Java.
Se conosci già la programmazione di GUI in Java sicuramente... Al limite se hai problemi di prestazioni puoi implementare in C++ il motore di calcolo e metterlo in una libreria...

shang84
15-11-2005, 17:29
Se conosci già la programmazione di GUI in Java sicuramente... Al limite se hai problemi di prestazioni puoi implementare in C++ il motore di calcolo e metterlo in una libreria...

Grande! Si può davvero includere una libreria "fai da te" fatta in c++ in Java?
Sarebbe davvero la soluzione a tutto!
Scusa la domanda, ma come si fa?

Thnks!

cionci
15-11-2005, 17:31
Cerca JNI... Ovviamente poi te la devi compilare su tutte le piattaforme e ti limita la portabilità...
Intanto comincia a svilupaprlo in Java, se poi ti servono ulteriori prestazioni puoi sempre portare il codice del motore di calcolo in C++ (portare codice che fa operazioni di calcolo e poco più è molto semplice)...

shang84
15-11-2005, 17:37
Ok thanks...

cdimauro
16-11-2005, 10:40
Personalmente ti consiglio Python: puoi sviluppare MOLTO velocemente l'applicazione, concentrandoti inizialmente sulla "correttezza" della sua implementazione.

Quando avrai finito, potrai riscrivere le parti critiche in C++. Con Python è particolarmente semplice (anzi, è proprio una sua caratteristica :D) estenderne le funzionalità usando il C++.

Qui http://docs.python.org/ext/ext.html c'è una guida che ti spiega come fare, fornendoti anche degli esempi molto semplici da capire. ;)

shang84
16-11-2005, 11:18
Thnks!