View Full Version : Scegliere un linguaggio più portable, senza particolari pretese
Squall 94
02-06-2012, 00:05
Il titolo è un po' insolito, questo perchè al momento sto usando Visual C# e sinceramente mi sono stufato, sia perchè sto nell'ambiente microsoft sia perchè non ritengo che sia vera programmazione, nel senso che le funzioni che mi servono le copio dal manuale, insomma non è quella programmazione vera e propria che mi sarei aspettato come ad esempio con il C / C++, anche se è difficile preferisco un maggior controllo e una programmazione più seria, non so se rendo l'idea.
Comunque ho un libro di java pronto per essere utilizzato più pdf a valanghe altrettanto ben fatti.
Visto che mi sto orientando sempre di più sul mondo linux, sia lato server che client, mi chiedeo quale sia un linguaggio che giri ugualmente su entrambi.
Quì cado dalle nuvole, se non sbaglio la sintassi non dovrebbe cambiare di una virgola sia di Java sia di C / C++, stesso per PHP, sono solo gli ide che cambiano o c'è altro ?
A parte questo che di Java NetBeans ed Eclipse rilasciano versioni per tutti i sistemi operativi, per C / C++ come stiamo messi ?
Io usavo Dev, ma qualcosa di grafico che non sia Visual Studio non c'è ?
Voglio cominciare Java perchè credo che sia un ottimo linguaggio, mi piace la sintassi, poi si sa, se una cosa piace, piace e basta :) .
Certo se poi mi dite che C / C++ è più portatile ( ma non credo ), nel senso che è compatibile con più piattaforme, continuo su quella strada altrimenti dovrò cominciare a vedere Java, per il quale sono curiosissimo, almeno per cambiare ;) .
Da quello che so Java è più portatile grazie alla JVM e visto che non m'interessa creare videogiochi per il quale Java fa veramente pena, penso che per programmazione sia locale che su server con database sia ottimo, salvo requisiti particolari, su questo vorrei un attimo capire perchè dicono che è pesante.
Java m'interessa soprattutto per il suo potenziale sul web, con i database soprattutto che al momento non so niente al riguardo, conosco un po' di JavaScript ed è davvero potente, almeno per quello che serve a me.
Un ultima domanda curiosa, il Visual C++ richiama molto il C++ come sintassi oppure è proprio la sua ? Comunque sia non voglio essere legato a Microsoft, voglio assolutamente approdare su linux nella programmazione, Windows non mi appassiona, ci resto legato solo per i videogiochi, anche perchè Linux ha dietro una Community vastissima, già questo mi piace, se hai un problema solo il tempo per risolverlo è l'inconveniente, prima o poi ci riesci :D .
Il titolo è un po' insolito, questo perchè al momento sto usando Visual C# e sinceramente mi sono stufato, sia perchè sto nell'ambiente microsoft sia perchè non ritengo che sia vera programmazione, nel senso che le funzioni che mi servono le copio dal manuale, insomma non è quella programmazione vera e propria che mi sarei aspettato come ad esempio con il C / C++, anche se è difficile preferisco un maggior controllo e una programmazione più seria, non so se rendo l'idea.
Premesso che non è esiste una programmazione "vera" e una programmazione "falsa", esiste la programmazione in generale nel suo senso più ampio.
Se vuoi imparare a risolvere problemi ovvero a creare programmi che fanno ciò che devono fare e lo fanno correttamente forse è meglio usare un linguaggio di più alto livello.
Se vuoi approfondire invece il funzionamento della macchina vai su un linguaggio di basso livello.
A mio modo di vedere sono ENTRAMBI necessari.
Comunque ho un libro di java pronto per essere utilizzato più pdf a valanghe altrettanto ben fatti.
Visto che mi sto orientando sempre di più sul mondo linux, sia lato server che client, mi chiedeo quale sia un linguaggio che giri ugualmente su entrambi.
Quì cado dalle nuvole, se non sbaglio la sintassi non dovrebbe cambiare di una virgola sia di Java sia di C / C++, stesso per PHP, sono solo gli ide che cambiano o c'è altro ?
A parte questo che di Java NetBeans ed Eclipse rilasciano versioni per tutti i sistemi operativi, per C / C++ come stiamo messi ?
Io usavo Dev, ma qualcosa di grafico che non sia Visual Studio non c'è ?
Voglio cominciare Java perchè credo che sia un ottimo linguaggio, mi piace la sintassi, poi si sa, se una cosa piace, piace e basta :) .
Certo se poi mi dite che C / C++ è più portatile ( ma non credo ), nel senso che è compatibile con più piattaforme, continuo su quella strada altrimenti dovrò cominciare a vedere Java, per il quale sono curiosissimo, almeno per cambiare ;) .
Da quello che so Java è più portatile grazie alla JVM e visto che non m'interessa creare videogiochi per il quale Java fa veramente pena, penso che per programmazione sia locale che su server con database sia ottimo, salvo requisiti particolari, su questo vorrei un attimo capire perchè dicono che è pesante.
Java m'interessa soprattutto per il suo potenziale sul web, con i database soprattutto che al momento non so niente al riguardo, conosco un po' di JavaScript ed è davvero potente, almeno per quello che serve a me.
Hai un bel po' di confusione in testa...
Innanzitutto Java non è diverso concettualmente da .NET (tant'è che quest'ultimo ha preso ispirazione da Java), ovvero hai sempre una VM che ti interpreta e compila bytecode.
La sintassi è C-like, esattamente come quella di :NET, anche se quest'ultimo mette a disposizione molti più costrutti e funzionalità rispetto a Java.
Tant'è che anche .NET è portabile, vedi mono (http://www.mono-project.com/Main_Page).
Eclipse e NetBeans sono disponibili per molte piattaforme.
Quanto al discorso della portabilità è un falso mito anche questo... o meglio la portabilità esiste su due livelli:
1) la portabilità dell' "eseguibile" (ed è quello che ti offrono i linguaggi con VM)
2) la portabilità del codice sorgente
Puoi scrivere codice portabile anche in C/C++ se adotti alcuni accorgimenti. Chiaramente in questo caso non hai la portabilità dell'eseguibile, perché stai adottando un linguaggio nativo e ogni SO ha il suo formato per gli eseguibili.
In genere se fai tutto fatto bene basta ricompilare.
Nota, ho messo "eseguibile" tra virgolette perché nel caso di linguaggi puramente interpretati come Python, lanci un interprete che prende in input il codice sorgente e la VM si occupa del resto.
Un ultima domanda curiosa, il Visual C++ richiama molto il C++ come sintassi oppure è proprio la sua ? Comunque sia non voglio essere legato a Microsoft, voglio assolutamente approdare su linux nella programmazione, Windows non mi appassiona, ci resto legato solo per i videogiochi, anche perchè Linux ha dietro una Community vastissima, già questo mi piace, se hai un problema solo il tempo per risolverlo è l'inconveniente, prima o poi ci riesci :D .
Visual C++ è un IDE, non è un linguaggio.
C++ è uno standard, in particolare poi hai diversi compilatori su varie piattaforme che seguono più o meno lo standard.
Sia il compilatore Microsoft che GCC supportano alcune estensioni al linguaggio.
Detto ciò probabilmente se scrivi codice con taluni accorgimenti puoi compilare su entrambe le piattaforme, ma questa cosa varia caso per caso e dipende soprattutto dalle librerie utilizzate ed eventualmente da come vuoi interagirti con il sistema operativo.
Chiramente se vuoi usare chiamate di sistema o usi dei wrapper già fatti che funzionano per entrambe le piattaforme oppure devi farteli da solo.
Piccola nota di cronaca: Windows 8 introduce le api WinRT, programmabili nativamente attraverso una estensione del C++ che MS chiama C++/CX.
Squall 94
02-06-2012, 11:05
Una risposta più esaustiva non la potevi dare :D .
Premesso che non è esiste una programmazione "vera" e una programmazione "falsa", esiste la programmazione in generale nel suo senso più ampio.
Se vuoi imparare a risolvere problemi ovvero a creare programmi che fanno ciò che devono fare e lo fanno correttamente forse è meglio usare un linguaggio di più alto livello.
Se vuoi approfondire invece il funzionamento della macchina vai su un linguaggio di basso livello.
A mio modo di vedere sono ENTRAMBI necessari.
Esatto sono entrambi necessari, però mi viene un dubbio, con alto livello intendi il C e basso il Java ?
Cioè alla fine potrei anche solo usare C / C++, poi dipende da quanto voglio andare a fondo nei controlli dei programmi che faccio.
I controlli sono sempre la parte difficile, almeno per me, in C ce ne sono tanti e intendevo questo con programmazione seria, cioè sai perfettamente quello che fa il programma una volta compilato, non c'è quasi nulla di automatico che ti potrebbe portare a qualche errore irrisolvibile.
Hai un bel po' di confusione in testa...
Innanzitutto Java non è diverso concettualmente da .NET (tant'è che quest'ultimo ha preso ispirazione da Java), ovvero hai sempre una VM che ti interpreta e compila bytecode.
La sintassi è C-like, esattamente come quella di :NET, anche se quest'ultimo mette a disposizione molti più costrutti e funzionalità rispetto a Java.
Tant'è che anche .NET è portabile, vedi mono.
Questo bytecode per visual studio sicuramente non sarò riproducibile su Linux e Mac OS ( anche se quà non m'interessa affatto ), da come hai detto però c'è mono, non ne ero assolutamente a conoscienza, come le altre cose del resto :D . In questo caso posso importare un progetto C# ( fatto su Windows ) su Linux e poi ricompilarlo da la per tale sistema ?
Cerco proprio questa risposta.
Quanto al discorso della portabilità è un falso mito anche questo... o meglio la portabilità esiste su due livelli:
1) la portabilità dell' "eseguibile" (ed è quello che ti offrono i linguaggi con VM)
2) la portabilità del codice sorgente
Puoi scrivere codice portabile anche in C/C++ se adotti alcuni accorgimenti. Chiaramente in questo caso non hai la portabilità dell'eseguibile, perché stai adottando un linguaggio nativo e ogni SO ha il suo formato per gli eseguibili.
In genere se fai tutto fatto bene basta ricompilare.
Nota, ho messo "eseguibile" tra virgolette perché nel caso di linguaggi puramente interpretati come Python, lanci un interprete che prende in input il codice sorgente e la VM si occupa del resto.
Questi accorgimenti per un principiante diciamo che non è il massimo, sono problemi che mi porteranno non pochi problemi, me lo sento, come librerie non compatibili ad esempio, qualcuna ce ne sarà.
Per questo mi voglio orientare su Java e farlo bene, Java alla fine deve essere installato su ogni macchina per poter usufruire di molti servizi, da come la vedo io in ogni PC c'è java installato, anche in Linux e Mac, è dappertutto.
Il problema è sapere se ci sono accorgimenti da fare anche per java o basta semplicemente ricompilare il codice.
Visual C++ è un IDE, non è un linguaggio.
C++ è uno standard, in particolare poi hai diversi compilatori su varie piattaforme che seguono più o meno lo standard.
Questo lo sapevo solo che mi sono spiegato male, a questo punto mi viene da pensare che anche C# sia un IDE per C++ ( mi dicono che non è così ), le librerie che uso sono simili e le funzioni hanni gli stesi nomi, ora che si integrano con un interfaccia va bene è normale, ma la differenza e minima sotto pochi aspetti, gli operatori al massimo, per quello che ho potuto vedere io naturalmente :) .
Grazie per la risposta ;) ! ! !
DarwinNE
02-06-2012, 13:31
Il problema è sapere se ci sono accorgimenti da fare anche per java o basta semplicemente ricompilare il codice.
Se può essere utile, posso parlare un po' della mia esperienza. Mi limiterò a parlare di Java e del C++ non perché siano le soluzioni migliori, ma perché sono quelle di cui ho esperienza diretta e perché sono linguaggi che pratico da tempo, sia pure non a livelli professionali.
Da circa cinque anni, lavoro ad un programma in Java che ha appunto l'intenzione di essere completamente multipiattaforma.
Prima di tutto, come diceva WarDuck, Java richiede una macchina virtuale, quindi non c'è bisogno di ricompilare il codice passando da una piattaforma all'altra. In pratica, tu prendi il tuo programma, lo compili (pseudo-compili), metti tutto il necessario in un archivio .jar e distribuisci quello.
L'utente si scarica l'archivio .jar e se il runtime Java è installato sul suo sistema con un'operazione semplice come un doppio-click il programma parte.
Da quel punto di vista, è facile ottenere eseguibili (o pseudo-tali) che non richiedono competenze particolari per essere appunto usati su sistemi operativi diversi.
Detto questo ci sono delle cose da sapere:
- oltre al fatto che un programma possa fisicamente essere eseguito, ci sono regole di organizzazione dell'interfaccia utente molto diverse passando da un sistema operativo ad un altro
- le modalità con cui un software viene distribuito ed installato sono in generale diverse da un sistema operativo all'altro
- ogni utente tende a conservare le proprie abitudini.
Ogni piattaforma richiede quindi uno sforzo di adattamento più o meno marcato a seconda delle aspettative degli utenti anche se il programma funziona correttamente. Java fa un ottimo lavoro con i Look&Feel, ma non arriva a tutto. Mi sono accorto per esempio che l'ordine dei bottoni Ok e Annulla in una finestrina di messaggio non è la stessa a seconda delle piattaforme.
Per fare un altro esempio semplice, per anni ho distribuito il solo archivio .jar della mia applicazione, ma quando un collaboratore ha inizato ad occuparsi di un pacchetto che funzionava come un installer eseguibile sotto Windows, il numero di scaricamenti è aumentato. Questo perché la maggior parte degli utenti si aspetta qualcosa di simile, anche se sistemi più semplici senza nessuna installazione sono comunque disponibili.
Invece con MacOSX ho dovuto adottare un Look&Feel particolare (Quaqua) perché gli utenti si lamentavano dell'aspetto del programma, che risultava molto poco elegante (e da utente MacOSX non potevo che dar loro ragione).
Per quanto riguarda l'adagio "write once, debug everywhere", riferito a bug diversi su piattaforme diverse, è vero che qualcosa di strano mi è già capitato. Tuttavia i bug erano provocati da pratiche di programmazione sconsigliabili, oppure proprio sbagliate. In questo senso, credo che l'avere la possibilità di provare un programma su più piattaforme l'abbia reso più robusto e di qualità migliore.
Nella mia esperienza, Java funziona abbastanza bene e continuo ad esser soddisfatto della mia scelta. Ho notato che all'inizio molti mi scrivevano qualcosa tipo "programma carino, peccato che sia in Java", ma ultimamente sembra che ciò non sia poi tanto rilevante. Probabilmente, ciò grazie al fatto che molti non si accorgono quasi più di avere davanti un programma in Java, grazie a quei piccoli sforzi di personalizzazione su ogni piattaforma.
Sempre rimanendo in ambito multipiattaforma, mi occupo di un programma di calcolo scientifico scritto in C++. Il programma funziona da terminale ed è stato compilato con successo su MacOSX, Linux a 32 e 64 bit, Windows. Qui c'è bisogno come si diceva di ricompilare i sorgenti e la cosa è un tantinello delicata perché ci sono alcune librerie da fornire che devono essere compilate a parte (Lapack+Atlas, FFTW3, etc...). Nella mia esperienza, la compilazione è una delle difficoltà più grandi che i miei utenti incontrano, perché spesso non vengono da un'esperienza informatica di buon livello in ambito Unix. La scelta del C++ è stata motivata dal fatto che c'era bisogno di controllare molto in dettaglio la gestione della memoria, dovendo manipolare matrici di diversi GiB.
Anche qui ho notato come il test su più piattaforme tende a rendere più robusto il codice.
Sono stato un po' prolisso, scusate...
pabloski
02-06-2012, 14:16
non ritengo che sia vera programmazione
Dovresti approfondire questo punto, altrimenti viene difficile dare consigli validi.
C# come Java è molto ad alto livello e le rispettive librerie forniscono di tutto e di più. Alla fine è facile che ti ritrovi a dover "copiare" pezzi di codice da varie parti e sentirti un pò frustrato per non aver avuto la possibilità di reinventare la ruota.
Se è questa la tua frustrazione, allora C, C++, ma forse addirittura Assembly, sono i linguaggi adatti a te.
anche se è difficile preferisco un maggior controllo e una programmazione più seria, non so se rendo l'idea.
Il controllo è funzionale alle necessità. Spessissimo non serve tutto quel controllo, mentre a volte è fondamentale.
Comunque ho un libro di java pronto per essere utilizzato più pdf a valanghe altrettanto ben fatti.
Indipendentemente da simpatie, antipatie, ecc... Java è un linguaggio che bisogna conoscere. E' strausato ovunque ed è un pilastro fondamentale dell'attuale tecnologia informatica.
Visto che mi sto orientando sempre di più sul mondo linux, sia lato server che client, mi chiedeo quale sia un linguaggio che giri ugualmente su entrambi.
Linux ti crea l'imbarazzo della scelta, perchè ci girano una marea di linguaggi, dai più famosi ai più sconosciuti ed esoterici.
Il discorso lato server mi lascia perplesso. Lato server sono apprezzabili elevate performance, mentre lato client si preferisce la semplicità.
Ultimamente sta andando di moda javascript ( si, javascript!!!! ) grazie a node.js. Si sta diffondendo pure Haxe ( un dialetto ecmascript, simile a javascript e actionscript ), capace di tradurre i programmi in c++, php, java, c#, compilare per la vm neko e molto usato per creare applicazione nel campo mobile per android e ios.
Quì cado dalle nuvole, se non sbaglio la sintassi non dovrebbe cambiare di una virgola sia di Java sia di C / C++, stesso per PHP, sono solo gli ide che cambiano o c'è altro ?
Le sintassi di c++, php e java sono mutuate dal c. Però le differenze ci sono e, a volte, sono marcate. Però chi conosce il c si trova decisamente a casa con uno di questi linguaggi.
A parte questo che di Java NetBeans ed Eclipse rilasciano versioni per tutti i sistemi operativi, per C / C++ come stiamo messi ?
c e c++ sono compilabili su una marea di piattaforme, soprattutto grazie a gcc che supporta una valanga di sistemi operativi e microprocessori
Io usavo Dev, ma qualcosa di grafico che non sia Visual Studio non c'è ?
Dev purtroppo è obsoleto e non più aggiornato. Il suo sostituto è Codeblocks.
Certo se poi mi dite che C / C++ è più portatile ( ma non credo )
c fu definito "portable assembly", quindi fai tu :D
c e c++ li compili ovunque, ma chiaramente se cominci ad usare funzioni specifiche dell'api windows, sarà dura portare il programma su linux
finchè si usano le api della standard library, sei a cavallo....basta ricompilare ed è fatta
proprio per questo ti suggerisco di usare gcc, così da poter avere lo stesso compilatore su tutte le piattaforme ed evitare possibili errori di compilazione dovuti all'uso di compilatori differenti
nel senso che è compatibile con più piattaforme, continuo su quella strada altrimenti dovrò cominciare a vedere Java, per il quale sono curiosissimo, almeno per cambiare ;)
java ha il vantaggio di non richiedere una compilazione per ogni piattaforme su cui vuoi far girare il programma
però devi portarti dietro la virtual machine
penso che per programmazione sia locale che su server con database sia ottimo
principalmente la seconda, per la prima java è usato pochissimo, soprattutto negli ambiti non aziendali
salvo requisiti particolari, su questo vorrei un attimo capire perchè dicono che è pesante.
perchè c'hanno la mania dello start veloce...la jvm è lenta nel partire e lì si ferma la sua pesantezza
rispetto ad altre vm usa più memoria, ma è fuori luogo parlare di consumo di memoria al gionro d'oggi
Java m'interessa soprattutto per il suo potenziale sul web, con i database soprattutto che al momento non so niente al riguardo, conosco un po' di JavaScript ed è davvero potente, almeno per quello che serve a me.
ecco, java è molto molto più potente di javascript, ma non buttare a mare javascript, perchè è uno dei protagonisti della rivoluzione cloud
come già detto, grazie a haxe, node.js e progetti simili, javascript si sta imponendo come linguaggio tuttofare
Un ultima domanda curiosa, il Visual C++ richiama molto il C++ come sintassi oppure è proprio la sua ?
visual c++ è c++, ma il c++ è stato sottoposto a varie storpiature da parte di vari vendor
negli ultimi anni, ms sembra essersi allineata agli altri produttori di compilatori
in ogni caso visual c++ e c++ sono identici almeno al 90% :D
voglio assolutamente approdare su linux nella programmazione, Windows non mi appassiona,
non posso che approvare, essendo un linaro doc dal 1997 :D
anche perchè Linux ha dietro una Community vastissima, già questo mi piace, se hai un problema solo il tempo per risolverlo è l'inconveniente, prima o poi ci riesci :D .
però, visto che ti piace sperimentare, tieni in considerazione anche freebsd, netbsd, haiku, minix e hurd
non dico che devi provarli tutti, ma tienili a mente, perchè hanno caratteristiche interessanti
Squall 94
02-06-2012, 14:34
Detto questo ci sono delle cose da sapere:
- oltre al fatto che un programma possa fisicamente essere eseguito, ci sono regole di organizzazione dell'interfaccia utente molto diverse passando da un sistema operativo ad un altro
- le modalità con cui un software viene distribuito ed installato sono in generale diverse da un sistema operativo all'altro
- ogni utente tende a conservare le proprie abitudini.
1) Ci penserò alla fine modificado un po' il tema, niente di problematico però, mi interessava la parte del codice
2) Per windows ci sono programmi che ti creano il pacchetto come lo vuoi tu, includendo anche il supporto framework ad esempio oppure java.
3) Non l'ho capita, comunque credo sia qualcosa che riguardi l'interfaccia, penso non sia molto rilevante.
Per quanto riguarda la tua scelta sul C++ si capisco la sua potenza però Java mi serve anche per il Web, i suoi database credo siano fatti meglio di quelli di Windows, rimaniamo comunque sull'open source il che già mi piace.
Tipo usare il c# e sfruttare il database non mi piace proprio, poi con linux come lo adatto.
Per il momento ancora non ci arrivo ai database però mi sembra una cosa non conveniente.
Quindi per il momento sono orientato su Java, qualche altra delucidazione ?? :D
P.S.
Rispondo per DarwinNE
pabloski
02-06-2012, 14:52
i suoi database credo siano fatti meglio di quelli di Windows, rimaniamo comunque sull'open source il che già mi piace.
database??? i database non fanno parte di java, ma sono prodotti di terze parti
Tipo usare il c# e sfruttare il database non mi piace proprio, poi con linux come lo adatto.
dovresti programmare su mono
Squall 94
02-06-2012, 15:06
Rispondendo a pabloski : ( non quoto per non allungare troppo il thread )
Indipendentemente da simpatie, antipatie, ecc... Java è un linguaggio che bisogna conoscere. E' strausato ovunque ed è un pilastro fondamentale dell'attuale tecnologia informatica.
Questo lo volevo sentir dire :) .
Linux ti crea l'imbarazzo della scelta, perchè ci girano una marea di linguaggi, dai più famosi ai più sconosciuti ed esoterici.
Il discorso lato server mi lascia perplesso. Lato server sono apprezzabili elevate performance, mentre lato client si preferisce la semplicità.
Ultimamente sta andando di moda javascript ( si, javascript!!!! ) grazie a node.js. Si sta diffondendo pure Haxe ( un dialetto ecmascript, simile a javascript e actionscript ), capace di tradurre i programmi in c++, php, java, c#, compilare per la vm neko e molto usato per creare applicazione nel campo mobile per android e ios.
L'elevata performance lato server ti riferisci al fatto che non deve dare problemi in termini quantitativi di memoria o di calcolo affidato inutilmente ?
Io so che Java consuma Ram a pacchi, si vede dalle normali applicazioni, lasciamo stare i giochi :D . Lato Client se ho capito ti riferisci al fatto che l'utente non dovrebbe compilare quello che è dentro all'archivio che gli fornisco bensì portarsi dietro la VM, però mi chiedo, non è possibile rilasciare un .exe di quello che si è fatto in Java come in C# ? ( spero di non aver detto un'assurdità :D )
C e C++ sono compilabili su una marea di piattaforme, soprattutto grazie a gcc che supporta una valanga di sistemi operativi e microprocessori
Scusa l'ignoranza ma è un editor ? Sono andato al sito ma per scaricare il pacchetto è abbastanza inciampato, ho scaricato una versione per Linux credo perchè non c'è un .exe, sapresti darmi un link senza che mi ammattisco per trovare il download :D ? Almeno non sbaglio versione e pacchetto.
però, visto che ti piace sperimentare, tieni in considerazione anche freebsd, netbsd, haiku, minix e hurd
non dico che devi provarli tutti, ma tienili a mente, perchè hanno caratteristiche interessanti
Appena posso vedo cosa sono :D .
Per finire se volessi passare da C# a Visual C++, incontrerei delle forti diversità ? Intendo dire per l'interfaccia, come codice essendo quasi uguale al C++ non dovrei avere problemi.
Squall 94
02-06-2012, 15:08
database??? i database non fanno parte di java, ma sono prodotti di terze parti
dovresti programmare su mono
Ecco un'altra cosa che non sapevo :) .
Si lo sto provando, spero vada bene ;) .
Sto provando Code Block ed è così immenso che non so cosa selezionare, per il momento provo un applicazione studipa da console, l'interfaccia grafica come la metto ? Ci sono delle diverse opzioni che non conosco, ad esempio il Visual C++, possibile che abbia il Frameworlk .net ?
[Kendall]
02-06-2012, 16:32
Ecco un'altra cosa che non sapevo :) .
Si lo sto provando, spero vada bene ;) .
Sto provando Code Block ed è così immenso che non so cosa selezionare, per il momento provo un applicazione studipa da console, l'interfaccia grafica come la metto ? Ci sono delle diverse opzioni che non conosco, ad esempio il Visual C++, possibile che abbia il Frameworlk .net ?
Se vuoi realizzare programmi con interfaccia grafica, nel mondo c++ ti consiglierei il framework QT (che possiede tra l'altro un'ottima IDE per la programmazione, oltre a vari strumenti per il design delle interfacce, il debug, e un ottima documentazione).
Per Java invece Netbeans dispone di ottimi strumenti in tal senso.
Infine per c# hai l'imbarazzo della scelta, sia sotto windows che sotto linux (e pure su macosx se non erro).
Consiglio personale, comunque, visto che da quel che ho capito sei ancora agli inizi, ti consiglierei assolutamente di lasciar stare interfacce grafiche e quant'altro e di concentrarti prima sulle basi tramite i cari vecchi programmi console.
pabloski
02-06-2012, 16:39
Sto provando Code Block ed è così immenso che non so cosa selezionare, per il momento provo un applicazione studipa da console
è bene iniziare da applicazioni consolle, come suggerito da kendall
il problema è che se sotto windows hai un'api grafica specifica per l'interfaccia, sotto linux le interfacce grafiche sono gestite da librerie di terze parti ( gtk e qt principalmente )....quindi hai tante possibilità ma devi pure studiarti le api delle varie librerie
comincia a prendere confidenza con codeblocks, c++ e i programmi consolle, poi installati qtcreator e le librerie qt e vedrai la luce :D
codeblocks permette di fare tante cose, tra cui sviluppare applicazioni per i chip avr, che non c'entrano proprio nulla con i pc, e quindi molte di quelle opzioni semplicemente non t'interessano
ad esempio un progetto D è un progetto scritto nel linguaggio D, un progetto Ogre è un gioco realizzato tramite il motore grafico ogre, un progetto fltk è un'applicazione grafica che usa la libreria grafica fltk
a te interessa console application per ora
, l'interfaccia grafica come la metto ?
a quel punto passerai a qt, che è una libreria ( anche grafica ) multipiattaforma
possibile che abbia il Frameworlk .net ?
essendo c++ .net direi di si :D
Ho visto vari di voi scrivere che Visual C++ non è un linguaggio o che Visual C++ = C++, quando in realtà la sintassi adottata è differente da C++, e poi la memoria è gestita (se allocata con gcnew) dal CLR quindi è gestita automaticamente. Per non parlare del fatto che con Visual C++ (o managed C++ o C++/CLI, chiamatelo come volete :) ) è possibile utilizzare tutte le librerie del framework .NET... mi sembra che le differenze ci siano e non siano da poco... Ciò detto, lo conosco poco e non lo consiglierei per iniziare. Se si vuole dotnet meglio buttarsi sul linguaggio principe che è C#, altrimenti Java :)
pabloski
02-06-2012, 18:01
quando in realtà la sintassi adottata è differente da C++
no aspè, come sarebbe che la sintassi è differente? il c++ è standardizzato, non puoi implementarlo in maniera differente
e poi la memoria è gestita (se allocata con gcnew) dal CLR quindi è gestita automaticamente.
quindi parli di c++ .net, ovvero un'estensione proprietaria del c++
però se usi new e delete, si comporta esattamente come il c++
Per non parlare del fatto che con Visual C++ (o managed C++ o C++/CLI, chiamatelo come volete :) ) è possibile utilizzare tutte le librerie del framework .NET...
ma si tratta di un'estensione, nessuno ti vieta di usare visual c++ per scrivere un programma c++ classico
Se si vuole dotnet meglio buttarsi sul linguaggio principe che è C#, altrimenti Java :)
no no, per fortuna squall ha già chiarito che non intende sottomettersi al draga :D
ma si tratta di un'estensione, nessuno ti vieta di usare visual c++ per scrivere un programma c++ classico
Certo certo, ovvio che puoi farlo ma allora che senso ha usare il managed C++? Usi C++ liscio e finita lì! Presumo che chi programma con C++/CLI lo faccia per usarne i suoi costrutti peculiari... e si assume l'onere di passare dal CLR, con tutti i vantaggi e gli svantaggi...
pabloski
02-06-2012, 18:15
Certo certo, ovvio che puoi farlo ma allora che senso ha usare il managed C++? Usi C++ liscio e finita lì! Presumo che chi programma con C++/CLI lo faccia per usarne i suoi costrutti peculiari... e si assume l'onere di passare dal CLR, con tutti i vantaggi e gli svantaggi...
Sul perchè non lo sa nemmeno microsoft, visto che ha praticamente abbandonato c++. Hanno buttato lì un c++ con .net, ma era chiaro fin dall'inizio che puntavano su c#.
Un programmatore può decidere di usarlo, io non ne vedo il motivo. Squall però vuole il c++ e lo vuole senza .net.
Sul perchè non lo sa nemmeno microsoft, visto che ha praticamente abbandonato c++. Hanno buttato lì un c++ con .net, ma era chiaro fin dall'inizio che puntavano su c#.
Ah ma io infatti concordo tutta la vita su questo :)
Squall 94
02-06-2012, 18:30
no aspè, come sarebbe che la sintassi è differente? il c++ è standardizzato, non puoi implementarlo in maniera differente
quindi parli di c++ .net, ovvero un'estensione proprietaria del c++
però se usi new e delete, si comporta esattamente come il c++
ma si tratta di un'estensione, nessuno ti vieta di usare visual c++ per scrivere un programma c++ classico
no no, per fortuna squall ha già chiarito che non intende sottomettersi al draga :D
Sottomettersi al draga ? Cosa volevi dire ? :D
Comunque quando parla di sintassi differente credo si riferisca in particolar modo agli operatori, non so se tu hai provato C# ma sono molto differenti dal C++, ora non so se C# è nato per cavoli suoi ma vedendo già la storia di microsoft che ha voluto rispondere a Java con Visual Studio non mi stupisco se si sono inspirati a C++ e l'hanno modificato.
In C# ad esempio la conversione delle variabili avviene con sintassi differente, magari sarà pure la stessa libreria ma le funzioni hanno altri nomi.
Senza contare che non puoi metterli mano eheheh.
Questo è quello che ho visto io, quì c'è roba interessante a riguardo http://programmazioneedintorni.blogspot.it/2011/04/molto-spesso-si-e-portati-pensare-che-c.html .
Per Visual C++ so che è il top di Visual studio a livello avanzato, tant'è che i videogiochi moderni sono sviluppati tutti sotto di esso con il supporto di XNA e Open GL.
Il C# è un po' più semplice o comunque credo che contenga meno roba per questo lo rende più fruibile a giovani ignoranti come me :D .
Un po di sintassi Java l'ho vista, ho convertito alcuni programmi che ho fatto in C# e devo dire che mi è stato abbastanza facile.
Parlo già di classi e sottoclassi, devo dire che è veramente lo specchio solo un po appannato, leggermente diverso :D .
In rete ho trovato questo :
C# è per piattaforma .NET, ed è la risposta di microsoft a Java, solo che, ovviamente, non è portabile e funziona solo su windows(a patto che ci sia il framework, sono 23 mega da scaricarsi).
C++ non è proprietario di nessuno, è compilato, ed ha uno standar ANSI che gli concede una discreta portabilità(si parla di sorgente portabile ovviamnte, non di compilato come Java).
Il Visual C++ è, appunto, l'IDE di microsoft che usa il compilatore cl.exe e il linker linker.exe sempre di microsoft e fa parte del Visual Studio, quindi ci sono molti tool avanzati che però servono a chi conosce già il C++ ANSI, il Visual C++ mi sembra abbia un suo standar(e supporta anche l'ANSI ovviamente).
È vecchio il post, comunque da notare quando dice che il Visual C++ ha un suo standard, nulla da far pensare che non rispetti quello del C++ originario, ma da come mi hanno detto molti programmatori differisce non poco, un programma scritto in C++ non andrà bene sul Visual.
Devo fare una prova e vediamo, solo l'installazione mi durerà un'ora.
Ho visto vari di voi scrivere che Visual C++ non è un linguaggio o che Visual C++ = C++, quando in realtà la sintassi adottata è differente da C++, e poi la memoria è gestita (se allocata con gcnew) dal CLR quindi è gestita automaticamente. Per non parlare del fatto che con Visual C++ (o managed C++ o C++/CLI, chiamatelo come volete :) ) è possibile utilizzare tutte le librerie del framework .NET... mi sembra che le differenze ci siano e non siano da poco... Ciò detto, lo conosco poco e non lo consiglierei per iniziare. Se si vuole dotnet meglio buttarsi sul linguaggio principe che è C#, altrimenti Java :)
C++/CLI è una cosa, C++ è un'altra, e Visual C++ un'altra ancora.
In Visual Studio puoi scegliere se scrivere un programma nativo C++ o managed C++/CLI (ovvero C++ sopra la piattaforma .NET).
PS: con C++ classico non puoi accedere alle librerie .NET... C++/CLI è stato introdotto per portare più facilmente manageriali scritti in C++ al "nuovo" (all'epoca) .NET.
Squall 94
02-06-2012, 18:42
Sul perchè non lo sa nemmeno microsoft, visto che ha praticamente abbandonato c++. Hanno buttato lì un c++ con .net, ma era chiaro fin dall'inizio che puntavano su c#.
Un programmatore può decidere di usarlo, io non ne vedo il motivo. Squall però vuole il c++ e lo vuole senza .net.
Si il C++ lo ritengo come il C, nel senso che con Dev ho usato più volte printf insieme a cout, la prima mi da maggior controllo, tutta questa compatibilità mi rende simili i linguaggi, saranno comandi diversi ma fanno la stessa cosa, chi più chi meno, la sostanza è quella e puoi scegliere.
Alla fine è l'evoluzione del C no, o no ??? :D .
Intanto che risolviamo il problema Java :D pensiamo a questo.
Allora C# andato, quindi al momento rimaniamo su C++ usando quale IDE ?
CodeBlocks ok, però c'è pure NetBeans e forse Eclipse, sto prendendo in considerazione NetBeans perchè avendo pure il supporto Java dopo non avrei problemi con l'interfaccia, nel senso di famigliarità, o si presenterà in modo diverso ?
Probabilmente se usano librerie differenti gli strumenti a disposizione cambieranno.
Chiedo tante cose perchè mi prende già molto tempo imparare bene Java, almeno per quello che facevo in C#, se non ho un interfaccia buona o comunque intuitiva sarà una grossa perdita di tempo abituarsi ( C# mi ci trovo benissimo, e facile per qualsiasi principiante ) .
Stesso per C++, quindi un IDE che abbia qualcosa in comune con questi 2 linguaggi sarebbe il top !
Squall 94
02-06-2012, 18:56
C++/CLI è una cosa, C++ è un'altra, e Visual C++ un'altra ancora.
In Visual Studio puoi scegliere se scrivere un programma nativo C++ o managed C++/CLI (ovvero C++ sopra la piattaforma .NET).
PS: con C++ classico non puoi accedere alle librerie .NET... C++/CLI è stato introdotto per portare più facilmente manageriali scritti in C++ al "nuovo" (all'epoca) .NET.
Esatto, e aggiungo che sopra alla piattaforma .NET il codice non lo vedi perchè è di mamma Microsoft, per questo mi astengo da Visual Studio.
Java è open source, sarebbe un'ottima alternativa a C++ ma li metto sullo stesso piano, alla fine come ho detto in precedenza non ho avuto problemi nel convertire classe e sottoclassi in Java e farli girare correttamente, è breve e banale il programma però già ho fatto un grande passo.
con C++ classico non puoi accedere alle librerie .NET
È questo il problema, programmando con Visual C++ sei costretto a usare il Framework .Net e rispettare tale sintassi, non è possibile utilizzare i suoi strumenti se non ti adatti, quindi non credo sia C++, concettualmente lo è come lo è C# per il 90%.
Cioè lo stesso potrei fare con il C# importando un programma fatto in puro C++, ma devo riscrivere tutto per farlo girare, ma soprattutto neanche partirà perchè non interagisce proprio con il Form che ho creato ad esempio.
Posso copiare l'algoritmo e la struttura e poi convertirlo secondo la sua sintassi ma tengo a evidenziare ( anche secondo i suoi metodi, quali acquisizione dati, conversioni per farli entrare in memoria ecc. ).
Pensandoci un attimo neanche una classe, posso quindi dire che non è portable e che quindi scarto a priori le soluzioni grafiche di Microsoft.
pabloski
02-06-2012, 19:04
non so se tu hai provato C# ma sono molto differenti dal C++,
c# è differente da c++, ma lui si riferiva a c++ cli e c++ liscio
visual studio supporta una batteria di linguaggi tra cui c# e c++ cli e non cli
quest'ultimo è un normalissimo c++
Per Visual C++ so che è il top di Visual studio a livello avanzato, tant'è che i videogiochi moderni sono sviluppati tutti sotto di esso con il supporto di XNA e Open GL.
dipende dai videogiochi, ma in genere i titoli tripla A usano motori grafici e framework proprietari e sono scritti parzialmente in c++ ( da non confondere con visual c++ che è l'implementazione c++ della microsoft )
xna è usato principalmente per giochi indie sotto windows e, in genere, accoppiato a c#
Il C# è un po' più semplice o comunque credo che contenga meno roba per questo lo rende più fruibile a giovani ignoranti come me :D .
in gergo si dice che è a più alto livello, cioè astrae molto di più la gestione dei dettagli
Un po di sintassi Java l'ho vista, ho convertito alcuni programmi che ho fatto in C# e devo dire che mi è stato abbastanza facile.
lo è perchè c# si è ispirato moltissimo a java, tant'è che è stato creato proprio in funzione anti-java
È vecchio il post, comunque da notare quando dice che il Visual C++ ha un suo standard, nulla da far pensare che non rispetti quello del C++ originario, ma da come mi hanno detto molti programmatori differisce non poco, un programma scritto in C++ non andrà bene sul Visual.
Devo fare una prova e vediamo, solo l'installazione mi durerà un'ora.
dipende dal programma
se prendi
int main() {
cout << "Ciao mondo!" << endl;
return 0;
}
difficilmente non andrà sotto visual c++.....il punto è che i programmi gui sotto windows hanno convenzioni diverse, a partire dal main che si chiama WinMain
questo però è un problema di api ( cioè le funzioni che il sistema operativo offre ai programmatori ) e non di linguaggio
tutti i costrutti del c++ funzionano in visual c++ e tutte le funzioni dell'api standard del c++ sono supportate
pabloski
02-06-2012, 19:10
Alla fine è l'evoluzione del C no, o no ??? :D .
c++ è un'estensione del c
Allora C# andato, quindi al momento rimaniamo su C++ usando quale IDE ?
codeblocks è il migliore per iniziare, è semplice e potente
però c'è pure NetBeans e forse Eclipse, sto prendendo in considerazione NetBeans perchè avendo pure il supporto Java dopo non avrei problemi con l'interfaccia, nel senso di famigliarità, o si presenterà in modo diverso ?
eclipse e netbeans sono più complessi di codeblocks, ma è solo questione di abituarsi
eclipse è il più complesso di tutti
inoltre sia eclipse sia netbeans supportano pienamente java
Probabilmente se usano librerie differenti gli strumenti a disposizione cambieranno.
immaginavo che fosse questo a crearti confusione...usando visual c++ ti sei impelagato nella programmazione di app con gui e quindi hai usato tutte le varie librerie di windows
quelle però non sono librerie del c++ ma di windows, così come qt e gtk sono librerie grafiche per linux che non hanno niente da spartire con c++
da c++ puoi chiamare qualsiasi funzione presente in qualsiasi libreria, per cui ti sembrerà che il linguaggio cambia a seconda delle librerie che usi ma non è così
netbeans ed eclipse ( sotto linux ) usano il compilatore gcc per il c++
quali librerie usare lo deciderai tu nel programma, a parte la libreria standard del c++ che viene usata di default
solamente le funzioni presenti nella libreria standard vanno considerate funzioni del c++, tutte le altre cose che hai visto sotto windows vengono importare dalle librerie windows ( gdi soprattutto ) ma non fanno parte del c++
Chiedo tante cose perchè mi prende già molto tempo imparare bene Java, almeno per quello che facevo in C#, se non ho un interfaccia buona o comunque intuitiva sarà una grossa perdita di tempo abituarsi ( C# mi ci trovo benissimo, e facile per qualsiasi principiante ) .
java è altrettanto facile e ha una libreria standard piena di robe di ogni genere, compresa la grafica
Stesso per C++, quindi un IDE che abbia qualcosa in comune con questi 2 linguaggi sarebbe il top !
eclipse e netbeans supportano di tutto, ma sono solo ide, il resto dipende dai compilatori e dalle librerie che importerai nei tuoi programmi
C++/CLI è una cosa, C++ è un'altra, e Visual C++ un'altra ancora.
In Visual Studio puoi scegliere se scrivere un programma nativo C++ o managed C++/CLI (ovvero C++ sopra la piattaforma .NET).
PS: con C++ classico non puoi accedere alle librerie .NET... C++/CLI è stato introdotto per portare più facilmente manageriali scritti in C++ al "nuovo" (all'epoca) .NET.
Eh ma io ho scritto le stesse cose... L'unico errore è che ho il vizio di appellare il managed C++ col nome dell'ambiente...
Squall 94
02-06-2012, 19:21
c++ è un'estensione del c
Dai ne volevo dire una giusta :D .
immaginavo che fosse questo a crearti confusione...usando visual c++ ti sei impelagato nella programmazione di app con gui e quindi hai usato tutte le varie librerie di windows
quelle però non sono librerie del c++ ma di windows, così come qt e gtk sono librerie grafiche per linux che non hanno niente da spartire con c++
da c++ puoi chiamare qualsiasi funzione presente in qualsiasi libreria, per cui ti sembrerà che il linguaggio cambia a seconda delle librerie che usi ma non è così
netbeans ed eclipse ( sotto linux ) usano il compilatore gcc per il c++
quali librerie usare lo deciderai tu nel programma, a parte la libreria standard del c++ che viene usata di default
solamente le funzioni presenti nella libreria standard vanno considerate funzioni del c++, tutte le altre cose che hai visto sotto windows vengono importare dalle librerie windows ( gdi soprattutto ) ma non fanno parte del c++
Non ero confuso, solo mi sono espresso male.
Non avendo niente da spartire con il C++ è una cosa che non lo rende flessibile, cioè se faccio un programma in C# o Visual C++ usando gli open dialog di Windows con tutte le sue personalizzazioni, in linux me lo scordo.
Lo stesso con calendari, gestioni di date personalizzate ecc.
Vorrei usare il C++ con librerie che siano compatibili con entrambi, ho visto vari problemi nell'installare il Framework.NET su Linux, sempre se mamma Microsoft lo permetta, se non lo permette è ancora peggio.
Riassumendo per il C++ che oggi ho messo troppa carne al fuoco :D , una soluzione valida per Windows e Linux qual'è ?
Scusate ma adesso ho troppe cose per la testa, ho perso il filo.
pabloski
02-06-2012, 19:35
flessibile, cioè se faccio un programma in C# o Visual C++ usando gli open dialog di Windows con tutte le sue personalizzazioni, in linux me lo scordo.
In pratica è così. Per C#/.net ci sarebbe mono, ma lasciamo perdere per ora.
Riguardo Visual C++, invece, il problema non è in C++ ma nell'api win32. Un programma scritto in C++ per windows ( che sia scritto con visual c++, dev, codeblocks non cambia la sostanza ) non è portabile su linux senza modifiche. Ma questo non perchè Visual C++ è un C++ diverso da quello tradizionale ( infatti implementano lo stesso linguaggio ). Il problema sta nell'uso di funzioni specifiche di windows che non esistono su linux.
Vorrei che fosse chiaro che ( a parte C++ .net che effettivamente è un C++ diverso ), il C++ di Visual C++ è lo stesso C++ di gcc ad esempio. Solo che mentre in Java e C# si usa sempre la standard library ( perchè contiene quasi tutto quello che serve ), in C++ si usano moltissimo librerie esterne ( perchè quella standard non contiene roba grafica, audio, animazioni, ecc... ).
Vorrei usare il C++ con librerie che siano compatibili con entrambi
in questo caso non è più un problema di linguaggio ( che è compatibile su tutti i sistemi operativi ), ma diventa un problema di librerie
una libreria che gira su linux e windows è qt...è decisamente completa, non manca nulla e ti permette di far girare gli stessi programmi sia su windows che su linux
ho visto vari problemi nell'installare il Framework.NET su Linux, sempre se mamma Microsoft lo permetta, se non lo permette è ancora peggio.
.net per linux esiste e si chiama mono....mono è compatibile al 90% con .net, ma mancano delle cose ( mono è in genere indietro a .net in termini di novità )
Riassumendo per il C++ che oggi ho messo troppa carne al fuoco :D , una soluzione valida per Windows e Linux qual'è ?
Ribadisco che il C++ ( inteso come linguaggio + libreria standard ) è lo stesso sia su linux che su windows. La differenza che hai notato dipende dalle librerie esterne, soprattutto quelle che permettono di creare applicazioni grafiche ( perchè la libreria standard del C++ non supporta la grafica ).
Quindi l'obiettivo è scegliere una libreria che esista su windows e linux. Una famosa è qt, ma ci sono wxwidgets, ultimate++, fltk.
QT è la più completa sicuramente ed è quella migliore se vuoi creare programmi in c++ che girano senza modifiche sotto windows, linux e macos.
È questo il problema, programmando con Visual C++ sei costretto a usare il Framework .Net e rispettare tale sintassi, non è possibile utilizzare i suoi strumenti se non ti adatti, quindi non credo sia C++, concettualmente lo è come lo è C# per il 90%.
Ma anche no.
Ripeto: puoi creare codice C++ nativo con Visual Studio.
Se non ne sei convinto forse dovresti semplicemente studiare di più.
Cioè lo stesso potrei fare con il C# importando un programma fatto in puro C++, ma devo riscrivere tutto per farlo girare, ma soprattutto neanche partirà perchè non interagisce proprio con il Form che ho creato ad esempio.
Posso copiare l'algoritmo e la struttura e poi convertirlo secondo la sua sintassi ma tengo a evidenziare ( anche secondo i suoi metodi, quali acquisizione dati, conversioni per farli entrare in memoria ecc. ).
Pensandoci un attimo neanche una classe, posso quindi dire che non è portable e che quindi scarto a priori le soluzioni grafiche di Microsoft.
Eh?
Comunque sembra che le Windows Forms siano supportate da mono:
http://www.mono-project.com/WinForms
Comunque se vuoi qualcosa di nativo e portabile puoi optare per le librerie Qt come già ti hanno detto, che non sbaglio sono usabili tranquillamente con Visual Studio (se non erro serve un plugin).
Squall 94
02-06-2012, 20:11
Ma anche no.
Ripeto: puoi creare codice C++ nativo con Visual Studio.
Se non ne sei convinto forse dovresti semplicemente studiare di più.
Eh?
Comunque sembra che le Windows Forms siano supportate da mono:
http://www.mono-project.com/WinForms
Comunque se vuoi qualcosa di nativo e portabile puoi optare per le librerie Qt come già ti hanno detto, che non sbaglio sono usabili tranquillamente con Visual Studio (se non erro serve un plugin).
Si lo posso fare in Visual C++ ma se interagisco con i Form e tutte le strumentazioni che mi mette a disposizione non potrò mai esportarlo in Linux, non solo, dovrebbe essere in parte riscritto, immagina in un programma abbastanza complesso.
Indendevo questo quando ho detto : È questo il problema, programmando con Visual C++ sei costretto a usare il Framework .Net e rispettare tale sintassi, non è possibile utilizzare i suoi strumenti se non ti adatti, quindi non credo sia C++, concettualmente lo è come lo è C# per il 90%.
Costretto perchè altrimenti non userei un ambiente visuale, potevo continuare con Dev, sostituito adesso da Code Blocks da come ho visto oggi.
Cioè lo stesso potrei fare con il C# importando un programma fatto in puro C++, ma devo riscrivere tutto per farlo girare, ma soprattutto neanche partirà perchè non interagisce proprio con il Form che ho creato ad esempio.
Posso copiare l'algoritmo e la struttura e poi convertirlo secondo la sua sintassi ma tengo a evidenziare ( anche secondo i suoi metodi, quali acquisizione dati, conversioni per farli entrare in memoria ecc. ).
Pensandoci un attimo neanche una classe, posso quindi dire che non è portable e che quindi scarto a priori le soluzioni grafiche di Microsoft.
Dimmi cosa non ti è chiaro, io uso gli strumenti visuali ( textbox, button ecc...) , se importo un programma scritto in C++, in Visual C# lo dovrei riscrivere tutto, stesso in Visual C++ credo, come ho detto, già dall'acquisizione dei dati da TextBox è differente perchè devono essere sempre convertiti per acquisirli e riconvertiti per farli stampare dove serve, stesso per gli oggetti.
Già quì devi fare un bel pò di lavoro, contando anche la gestione dei dati immesi, specialmente se sono numeri.
In C / C++ e in C# questo è diverso, dovrebbe esserlo anche per Visual C++ usando IL Framework.NET che mi server per forza.
La soluzione che mi avete proposto voi 2 è la libreria Qt per risolvere tale problema, così posso avere lo stesso codice usando la libreria senza cambiare le cose.
Se non ne sei convinto forse dovresti semplicemente studiare di più.
Sono proprio indeciso cosa cominciare a studiare per bene, e comunque questo è semplice sapere non si tratta di studiare.
Purtroppo è un inciampo perchè noi che siamo giovani ci ritroviamo con un mondo immenso dove dobbiamo saper scegliere, qualcuno di voi l'ha vissuta graduale e si è evoluto con calma diciamo.
Noi quando programmiamo non c'interessiamo alla memoria che sprechiamo, ne tantomeno alle risorse salvo progetti grandi, nessuno ci da delle linee guida e tantomeno è facile farci caso visto l'hardware che ci ritroviamo oggi.
La nostra generazione saranno i programmatori del domani e stai tranquillo che se non ci viene insegnata la programmazione in modo corretto un sistema operativo tra 30 anni non si avvierà nemmeno con la mia configurazione :D .
AllerITA
02-06-2012, 20:30
Scusate se mi intrufolo, ma devo ringraziarvi per le utilissime indicazioni che state dando!!! :D
Sono un programmatore vengo dal lontano Borland Turbo C passato poi al Borland C++ per arrivare al Visual Basic 5.0 poi 6.0 e al Visual C++ 6.0 sono dopo molti anni approdato al C# 4.0 e ero incuriosito sulle potenzialità di portabilità del codice.
Anni fa (2003) avevo sentito parlare di .NET e del pseudo codice IL e dei primi tentativi di rendere .NET multi-piatta.
Non ero assolutamente a conoscenza che questi sforzi avevano partorito l'open-source "mono". Ottimo spunto per approfondire lo studio di questo sistema.
Comunque seguo con molto interesse ogni spunto di questa discussione, essendomi interessato anche (sporadicamente) di Java (sono un po in dietro conosco solo la 6 SE).
pabloski
02-06-2012, 20:35
Si lo posso fare in Visual C++ ma se interagisco con i Form e tutte le strumentazioni che mi mette a disposizione non potrò mai esportarlo in Linux, non solo, dovrebbe essere in parte riscritto, immagina in un programma abbastanza complesso.
Questo è vero, ma è una scelta che va fatta a monte ed indipendentemente dall'ambiente di sviluppo che si usa. L'esempio di qt è lampante in questo senso. Usi C++, usi visual c++, ma non usi nè .net e il suo framework nè win32. Il risultato è un programma scritto con visual c++ che è esportabile su linux e macos.
Chiaramente, dovendo usare qt, perchè non usare qtcreator visto che è fatto apposta? Così esporti verso linux pure i file di progetto e usi lo stesso ambiente su tutte le piattaforme. In questo senso non risulta difficile vedere visual c++ come un'ide a senso unico, legato a doppio filo con windows, .net e tutto il resto.
E' questione di gusti in fondo. C'è chi ama scrivere a mano pure le applicazioni grafiche. Ma ovviamente l'usare un'ide ha come scopo quello di semplificare la vita e non complicarla :D
Dimmi cosa non ti è chiaro, io uso gli strumenti visuali ( textbox, button ecc...)
Esatto, è qui che l'uso di visual studio diventa inutile. Programmare un'app grafica in c++ e fltk usando visual studio? Ovvero dover fare tutto da codice, quindi praticamente inutile usare visual studio.
La soluzione che mi avete proposto voi 2 è la libreria Qt per risolvere tale problema, così posso avere lo stesso codice usando la libreria senza cambiare le cose.
E aggiungo che è opportuno usare qtcreator, con tutti i suoi frizzi e lazzi grafici.
Purtroppo è un inciampo perchè noi che siamo giovani ci ritroviamo con un mondo immenso dove dobbiamo saper scegliere, qualcuno di voi l'ha vissuta graduale e si è evoluto con calma diciamo.
Ma sarà sempre così. Io sono preso in trappola tra google go, haxe, node.js e lua :D
La nostra generazione saranno i programmatori del domani e stai tranquillo che se non ci viene insegnata la programmazione in modo corretto un sistema operativo tra 30 anni non si avvierà nemmeno con la mia configurazione :D .
Non temere, ci sono abbastanza programmatori indiani scadenti che riescono a rovinare il software già oggi.
Altrimenti Vista chi l'avrebbe potuto scrivere? :D
pabloski
02-06-2012, 20:40
Sono un programmatore vengo dal lontano Borland Turbo C passato poi al Borland C++
molto bene :D
per arrivare al Visual Basic 5.0 poi 6.0 e al Visual C++ 6.0
molto male :D
sono dopo molti anni approdato al C# 4.0 e ero incuriosito sulle potenzialità di portabilità del codice.
accettabile :stordita:
Non ero assolutamente a conoscenza che questi sforzi avevano partorito l'open-source "mono". Ottimo spunto per approfondire lo studio di questo sistema.
ma non aspettarti la luna....mono ha qualche buggettino di troppo ed è perennemente indietro a .net
se proprio vuoi usarlo, allora scrivi il software sotto linux/mono e poi testalo su .net
il viceversa può essere costarti la riscrittura di parte del codice e la scoperta che avevi usato questa o quella funzionalità che in mono è buggata o nemmeno supportata.
Squall 94
02-06-2012, 21:31
Benvenuto al nuovo utente allora, impariamo un po' tutti ;) .
Allora
Esatto, è qui che l'uso di visual studio diventa inutile. Programmare un'app grafica in c++ e fltk usando visual studio? Ovvero dover fare tutto da codice, quindi praticamente inutile usare visual studio.
Quì non ho capito, sarebbe unutile scrivere un programma in C++ usando Visual C++ ? Mica faccio da codice, forse hai sbagliato a scrivere.
L'unica cosa buona di Visual Studio è la facilità, ma a costo di farmi piacere il peggior IDE voglio cambiare musica :D .
Quì non ho capito, sarebbe unutile scrivere un programma in C++ usando Visual C++ ? Mica faccio da codice, forse hai sbagliato a scrivere.
L'unica cosa buona di Visual Studio è la facilità, ma a costo di farmi piacere il peggior IDE voglio cambiare musica :D .
Preparati a farlo allora :asd:
Per quanto mi riguarda, anche se scrivo C++ 100% cross platform, VC++ rimane il miglior IDE in assoluto a parte qualche difettuccio, specie coi plugins, e se si sa quello che si fa è assolutamente falso che VC++ lega in qualsiasi modo a Windows... e la situazione su linux è abbastanza disastrosa dalle prove che ho fatto.
Ok, a parte VC11 express, che produce solo app metro :asd: 2010 for life!
PS: se ti interessa davvero il crossplatform e vuoi scrivere in un linguaggio moderno, e soprattutto vuoi scrivere programmi che usano l'interfaccia di sistema, C++ non è affatto il più adatto. C++ è adatto per giochi, simulazioni, middleware, sistemi operativi etc, ma per la tipica roba in cui clicchi tasti va da "terribile" a "quasi decente" :asd:
Vedo che qui è stato consigliato Qt, ma personalmente l'idea che una libreria contenga un proprio preprocessor per "rimediare" alle carenze del linguaggio mi incute terrore mistico.
Per cui, ti consiglierei linguaggi che comprendono quantomeno nella libreria standard un qualsiasi windowing, tipo Java, python, o pure JS+HTML sul web, etc.
E se proprio hai deciso di imparare C++, acchiappa SFML (http://www.sfml-dev.org/) e fai un videogioco!
pabloski
02-06-2012, 21:43
Quì non ho capito, sarebbe unutile scrivere un programma in C++ usando Visual C++ ? Mica faccio da codice, forse hai sbagliato a scrivere.
un programma in c++ e fltk diventa inutile scriverlo in visual studio, visto che useresti fltk come libreria grafica e visual studio non supporta il form designer per tale libreria
L'unica cosa buona di Visual Studio è la facilità, ma a costo di farmi piacere il peggior IDE voglio cambiare musica :D .
facilità a patto di usare le librerie predisposte, cioè win32 o .net
se vuoi usare una qualunque altra libreria grafica, visual studio non ti aiuta in nessun modo, devi fare tutto da codice ( creare le finestre, creare ed aggiungere i bottoni, ecc... )
Squall 94
02-06-2012, 22:26
un programma in c++ e fltk diventa inutile scriverlo in visual studio, visto che useresti fltk come libreria grafica e visual studio non supporta il form designer per tale libreria
facilità a patto di usare le librerie predisposte, cioè win32 o .net
se vuoi usare una qualunque altra libreria grafica, visual studio non ti aiuta in nessun modo, devi fare tutto da codice ( creare le finestre, creare ed aggiungere i bottoni, ecc... )
È questo il problema di Visual C++ e de suo maledetto .NET .
Squall 94
02-06-2012, 22:40
Preparati a farlo allora :asd:
Per quanto mi riguarda, anche se scrivo C++ 100% cross platform, VC++ rimane il miglior IDE in assoluto a parte qualche difettuccio, specie coi plugins, e se si sa quello che si fa è assolutamente falso che VC++ lega in qualsiasi modo a Windows... e la situazione su linux è abbastanza disastrosa dalle prove che ho fatto.
Ok, a parte VC11 express, che produce solo app metro :asd: 2010 for life!
PS: se ti interessa davvero il crossplatform e vuoi scrivere in un linguaggio moderno, e soprattutto vuoi scrivere programmi che usano l'interfaccia di sistema, C++ non è affatto il più adatto. C++ è adatto per giochi, simulazioni, middleware, sistemi operativi etc, ma per la tipica roba in cui clicchi tasti va da "terribile" a "quasi decente" :asd:
Vedo che qui è stato consigliato Qt, ma personalmente l'idea che una libreria contenga un proprio preprocessor per "rimediare" alle carenze del linguaggio mi incute terrore mistico.
Per cui, ti consiglierei linguaggi che comprendono quantomeno nella libreria standard un qualsiasi windowing, tipo Java, python, o pure JS+HTML sul web, etc.
E se proprio hai deciso di imparare C++, acchiappa SFML (http://www.sfml-dev.org/) e fai un videogioco!
So dei videogiochi perchè gioco diversi titoli famosi come Bf3, Assassin's Creed ecc.
Tutti su Visual C++ e XNA.
Torniamo a noi, mi stai dunque dicendo che il Java sarebbe una valida alternativa perchè reca meno problemi di compatibilità, non lasciando comunque una buona conoscienza di C++ che può sempre servire.
Fin quì penso che tutto fili :D .
Voglio imparare Java proprio per questo, per C++ non dimenticherò mai la sintassi come pure il C#.
Aggiungere Java e farlo meglio dei 2 secondo me è un'ottima scelta.
Se ho afferrato bene Java usa la sua VM che deve essere presente nel sistema operativo, così basta avere quella che interpreta il codice sorgente e siamo a posto.
Ma è davvero così anche per Linux ?
Se io scrivo un sorgente in un file di testo, su Linux verrà compilato correttamente oppure si posso incontrare problemi ?
È questo che mi preoccupa ...
pabloski
02-06-2012, 22:53
il Java sarebbe una valida alternativa perchè reca meno problemi di compatibilità, non lasciando comunque una buona conoscienza di C++ che può sempre servire.
E non solo. Occorre conoscere altri linguaggi e ti capiterà di dover necessariamente impararne altri. Semmai C++ e Java sono solo l'inizio!
Se ho afferrato bene Java usa la sua VM che deve essere presente nel sistema operativo
Funziona come .net, ovvero ci vuole una virtual machine che compili al volo il bytecode.
Ma è davvero così anche per Linux ?
Si, è così anche per linux.
Se io scrivo un sorgente in un file di testo, su Linux verrà compilato correttamente oppure si posso incontrare problemi ?
Un sorgente java si compila in bytecode su windows così come su linux. Non c'è nessunissima differenza.
So dei videogiochi perchè gioco diversi titoli famosi come Bf3, Assassin's Creed ecc.
Tutti su Visual C++ e XNA.
XNA è in C#, solo i giochi XBox Live Indie Games li usano! Live Arcade e gli altri usano XDK, che usa DirectX.
Ovviamente su XBox. Altrove, usano la libreria PS sulla PS, DX sul pc etc.
Ma si, molto probabilmente l'ide che hanno usato è VC++ per tutte.
Torniamo a noi, mi stai dunque dicendo che il Java sarebbe una valida alternativa perchè reca meno problemi di compatibilità, non lasciando comunque una buona conoscienza di C++ che può sempre servire.
Fin quì penso che tutto fili :D .
Voglio imparare Java proprio per questo, per C++ non dimenticherò mai la sintassi come pure il C#.
Aggiungere Java e farlo meglio dei 2 secondo me è un'ottima scelta.
Se ho afferrato bene Java usa la sua VM che deve essere presente nel sistema operativo, così basta avere quella che interpreta il codice sorgente e siamo a posto.
Ma è davvero così anche per Linux ?
Se io scrivo un sorgente in un file di testo, su Linux verrà compilato correttamente oppure si posso incontrare problemi ?
È questo che mi preoccupa ...
Sto dicendo che la libreria di Java (o altri) di windowing è fatta meglio ed è più coerente rispetto alle 209348 che esistono per C++, imho... e soprattutto C++ è "troppo vecchio" per esprimere bene "le finestre", da cui le varie estensioni di Qt. Con gli altri linguaggi è più elegante, tutto qua.
Per rispondere alla domanda su Java, la JVM è preinstallata su tutti gli OS eccetto iOS (quindi ti giochi del tutto iPhone) e le console.
La JVM non usa assolutamente il "file di testo". Il compilatore javac genera un file bytecode (http://en.wikipedia.org/wiki/Java_bytecode) che poi viene eseguito dalla JVM nello stesso modo su tutti gli OS. Quindi si, idealmente "compile once run everywhere"... in pratica spesso ci sono problemini assortiti, quindi sarebbe meglio controllare che tutto funga dappertutto.
bender86
03-06-2012, 09:12
Un po' di commenti in ordine sparso.
C++ è un linguaggio standardizzato, Visual C++ è un IDE, un programma che permette di scrivere codice, che include anche un compilatore C/C++, è sviluppato dalla Microsoft. GCC è un altro compilatore C/C++/altri linguaggi sviluppato dalla FSF. Esistono moltissimi altri IDE e altri compilatori.
C++/CLI è l'implementazione di C++ per la piattaforma .NET, che permette di programmare in modo indipendente dal linguaggio. Visual C++ supporta sia .NET che la programmazione nativa in C, C++. Su .NET girano molti altri linguaggi: C#, F#, Python, Ruby, Ada, Lisp, Prolog, Fortran, Cobol, Haskell...
Nell'ambito di C e C++ Visual C++ supporta più o meno completamente lo standard. Credo supporti completamente C89 e C++98, e parzialmente C99 e C++11. Poi offre estensioni allo standard nell'ambito dello stesso linguaggio. Il discorso è identico per GCC, che non supporta completamente gli standard (anche se forse un po' di più di Visual C++) ed offre delle estensioni, e anche per gli altri compilatori.
La sintassi di C#, C++, Java (e altri linguaggi) è ispirata a quella del C (anche ci sono comunque molte differenze). Ma la sintassi è solo una piccola parte di un linguaggio, tutto il resto può essere completamente diverso. Non credere di passare agevolmente da un linguaggio all'altro solo perché entrambi usano le graffe per delimitare i blocchi.
Per lo stesso motivo dire che C++ è un'estensione del C è corretto (quasi, a meno qualche differenza) ma anche ingannevole. Sono linguaggi molto diversi, soprattutto si usano in modo completamente diverso (idiomi).
Nessuno standard C o C++ dice niente riguardo alle interfacce grafiche (ma anche alla programmazione di rete, gestione processi, database, audio...). Quindi non c'è modo di scrivere un'interfaccia grafica in C/C++ standard. I vari sistemi operativi che implementano un'interfaccia grafica offrono anche delle API (ovviamente non standard) per usarla. Su Windows ci sono le API Win32 (che danno accesso a tutte le funzionalità del sistema, tra cui la grafica), su sistemi che usano il server X (Linux ad esempio) c'è la libreria XLib, su OSX c'è Cocoa (credo si chiami così, mai usato). Poi su Windows (ma anche su Linux) si possono usare i WinForm della piattaforma .NET, se presente.
Quindi quando dici:
Non avendo niente da spartire con il C++ è una cosa che non lo rende flessibile, cioè se faccio un programma in C# o Visual C++ usando gli open dialog di Windows con tutte le sue personalizzazioni, in linux me lo scordo.
Dovresti anche dire:
Non avendo niente da spartire con il C++ è una cosa che non lo rende flessibile, cioè se faccio un programma in Linux usando i controlli di XLib con tutte le sue personalizzazioni, in Windows me lo scordo.
L'unico modo per avere un'interfaccia grafica (rete, processi...) multipiattaforma è scrivere una versione per ogni piattaforma. Oppure usare librerie che esistono per ogni piattaforma. Mi associo a chi consiglia Qt (eventualmente utilizzabili anche con altri linguaggi come Python), per cui esiste anche l'IDE QtCreator su cui puoi disegnare l'interfaccia grafica come su Visual C++, e che in generale è un buon IDE (l'unico difetto veramente fastidioso è che il completamento automatico non supporta i template). Esiste un plugin anche per Visual C++, ma la versione Express non supporta i plugin.
Esistono diverse implementazioni per ogni linguaggio/piattaforma. Ad esempio per .NET c'è il framework Microsoft che funziona su Windows, Mono che funziona su Windows, Linux e forse altro, DotGnu e altri. Per Java c'è la JVM di Oracle, quella di Apache, tempo fa quella di Microsoft, il compilatore GCC (con GCC si può compilare Java in codice nativo) e altre. Per C/C++ c'è il compilatore Microsoft, quello Borland, quello Intel, GCC, CLang, qualche interprete (esatto, interpreti C/C++) e moltissimi compilatori proprietari.
L'ennesimo thread sull'argomento...
Ho l'impressione che la confusione sia dovuta dalla poca conoscenza dei linguaggi, dei tools e delle differenze fra loro.
1. Programmare è un hobby o vuoi farne una professione? Nel secondo caso, potresti orientarti verso i linguaggi piu richiesti ed abituarti a tecniche di software engineering (TDD, ...).
2. Quanto tempo puoi dedicare giornalmente allo studio del linguaggio? Ci son linguaggi, come il C, che richiedono inevitabilmente spender ore su GDB e sulla teoria di sistemi operativi (non puoi lavorare in C senza saper la differenza fra lo stack e l'heap).
3. Quanto in fretta vuoi ottener risultati visibili? Quanta meno pazienza hai, quanto piu di alto livello sceglielo...
Per quanto riguarda gli IDE... a meno che tu non faccia programmi realmente grossi, spesso un editor di testo con highlight è piu che sufficiente. Ed abituati a compilare/linkare da linea di comando. Non hai idea di quanti programmatori C non sappiamo creare un makefile a mano :D
tomminno
03-06-2012, 15:33
Vedo che qui è stato consigliato Qt, ma personalmente l'idea che una libreria contenga un proprio preprocessor per "rimediare" alle carenze del linguaggio mi incute terrore mistico.
Secondo me fai molto male :D
Per cui, ti consiglierei linguaggi che comprendono quantomeno nella libreria standard un qualsiasi windowing, tipo Java, python, o pure JS+HTML sul web, etc.
E se proprio hai deciso di imparare C++, acchiappa SFML (http://www.sfml-dev.org/) e fai un videogioco!
Python non mi risulta avere framework grafici nativi. Quello che va più di moda non a caso è PyQt...
Js+Html sul web è d'obbligo essendo l'unico standard supportato dai browser...
Inoltre secondo me è molto più produttivo utilizzare Qt che non Java per creare programmi desktop. Mi assumo pienamente la responsabilità di quello che dico.
Inoltre grazie a QML, Qt sono andate oltre il classico sviluppo di applicazioni GUI. L'unico altro framework paragonabile è WPF. Java non mi sembra offra altrettanto. Oltretutto ci sono già esempi di Qml su Metro.
Senza contare che volendo si può fare un'applicazione Android con Qt...
[Kendall]
03-06-2012, 15:35
L'ennesimo thread sull'argomento...
Ho l'impressione che la confusione sia dovuta dalla poca conoscenza dei linguaggi, dei tools e delle differenze fra loro.
1. Programmare è un hobby o vuoi farne una professione? Nel secondo caso, potresti orientarti verso i linguaggi piu richiesti ed abituarti a tecniche di software engineering (TDD, ...).
2. Quanto tempo puoi dedicare giornalmente allo studio del linguaggio? Ci son linguaggi, come il C, che richiedono inevitabilmente spender ore su GDB e sulla teoria di sistemi operativi (non puoi lavorare in C senza saper la differenza fra lo stack e l'heap).
3. Quanto in fretta vuoi ottener risultati visibili? Quanta meno pazienza hai, quanto piu di alto livello sceglielo...
Per quanto riguarda gli IDE... a meno che tu non faccia programmi realmente grossi, spesso un editor di testo con highlight è piu che sufficiente. Ed abituati a compilare/linkare da linea di comando. Non hai idea di quanti programmatori C non sappiamo creare un makefile a mano :D
Direi che la confusione è pure ammissibile. Nel senso, come hai detto tu se non conosci i linguaggi, i framework e gli strumenti a disposizione difficilmente all'inizio riesci ad orientarti (è successo a tutti noi credo...).
Per il resto secondo me Squall94 ha la cosiddetta cotta giovanile per il java e il c++ (visto che fin dall'inizio, consigli a parte, sapeva da subito che voleva andare a cozzare su questi due linguaggi). Io ho cominciato con il java, giusto per chiarire, mi sono fatto le ossa con il c++ (per più di due anni) e son maturato con il c# (sono un programmatore amatoriale, giusto per chiarezza).
Detto questo, credo che chiunque ami programmare se ne vedrebbe bene dal farlo in c++ se può evitarlo. E con questo non sto sminuendo il c++, credo sia un linguaggio fenomenale, ma semplicemente è troppo di basso livello per poter essere utilizzato come linguaggio da "tutti i giorni".
Infine, ultimo spunto per la discussione, credo che tarpare le ali al c# (come ha fatto Squall94) sia sbagliato. Il c# è un linguaggio altamente produttivo, migliore del java dal mero punto funzionale in quanto si ispira ad esso e lo migliora in tutto. Ha lo svantaggio di non avere la diffusione del fratellone (Java) e questo è l'unico suo punto debole perchè per il resto attualmente lo reputo uno de migliori linguaggi sulla piazza (nella sua tipologia, intendiamoci).
Voi cosa ne pensate? :)
[Kendall]
03-06-2012, 15:44
Secondo me fai molto male :D
Python non mi risulta avere framework grafici nativi. Quello che va più di moda non a caso è PyQt...
Js+Html sul web è d'obbligo essendo l'unico standard supportato dai browser...
Inoltre secondo me è molto più produttivo utilizzare Qt che non Java per creare programmi desktop. Mi assumo pienamente la responsabilità di quello che dico.
Inoltre grazie a QML, Qt sono andate oltre il classico sviluppo di applicazioni GUI. L'unico altro framework paragonabile è WPF. Java non mi sembra offra altrettanto. Oltretutto ci sono già esempi di Qml su Metro.
Senza contare che volendo si può fare un'applicazione Android con Qt...
QT è un framework assolutamente valido, e concordo al 100% sul fatto che sia molto più produttivo di java riguardo alla produzione di applicativi desktop. Semplicemente quest'ultimo non si è sviluppato nel tempo per fornire un supporto "pesante" a tale tipo di sviluppo, e quindi risulta anche normale un certo abbandono (se mi passate il termine) dell'ambiente desktop.
Detto questo, QT è il mio unico framework quando voglio programmare in c++, è efficiente, prestazionale e completo ma crea una struttura al di sopra del c++ che ti porta ad estraniarti dal c++ stesso. Intendiamoci, programmare in QT non è programmare C++, non nel senso comune del termine, perchè ti assuefa alle sue classi, al suo modello di sviluppo, e ti estranea da quello che effettivamente è il c++. (Opinione personalissima eh, e mi piacerebbe sentire la vostra al riguardo, per un bel confronto).
tomminno
03-06-2012, 15:46
Sto dicendo che la libreria di Java (o altri) di windowing è fatta meglio ed è più coerente rispetto alle 209348 che esistono per C++, imho... e soprattutto C++ è "troppo vecchio" per esprimere bene "le finestre", da cui le varie estensioni di Qt. Con gli altri linguaggi è più elegante, tutto qua.
Quando si parla per partito preso...
Java ha qualcosa di analogo a QML?
A me sembra che di recente il mondo che ruota intorno al C++ abbia ripreso un bel po' di spinta. Qt sono sicuramente un framework notevole quanto a completezza e supporto multipiattaforma, ma non dimentichiamo che anche Microsoft con l'introduzione Windows 8 ha parlato più di C++ che di .Net...
tomminno
03-06-2012, 15:59
;37568163']
Detto questo, credo che chiunque ami programmare se ne vedrebbe bene dal farlo in c++ se può evitarlo. E con questo non sto sminuendo il c++, credo sia un linguaggio fenomenale, ma semplicemente è troppo di basso livello per poter essere utilizzato come linguaggio da "tutti i giorni".
Per esperienza personale trovo che chi si è imbattuto nel C++ riesca a capire l'importanza di rilasciare le risorse, cosa che moltissime persone cresciute con linguaggi gestiti nemmeno prendono in considerazione e considerano come delle semplici sviste.
Troppe volte mi sono imbattuto in server che avevano esaurito il pool di connessioni perchè tanto c'è il Garbage Collector quindi la connessione al db la si può anche lasciare aperta, troppe volte ho vito file rimasti aperti in scrittura, file a cui il programma in fasi successive prova ad accedere ovviamente ottenendo un bell'errore, ma tanto c'è il GC che qualche volta fa in tempo a chiuderti il file prima dell'accesso successivo!
tomminno
03-06-2012, 16:14
;37568204']Detto questo, QT è il mio unico framework quando voglio programmare in c++, è efficiente, prestazionale e completo ma crea una struttura al di sopra del c++ che ti porta ad estraniarti dal c++ stesso. Intendiamoci, programmare in QT non è programmare C++, non nel senso comune del termine, perchè ti assuefa alle sue classi, al suo modello di sviluppo, e ti estranea da quello che effettivamente è il c++. (Opinione personalissima eh, e mi piacerebbe sentire la vostra al riguardo, per un bel confronto).
Non capisco perchè utilizzare Qt non sia programmare in C++. Alla fine sono sempre classi scritte in C++.
E il preprocessore è stato usato in maniera intelligente per creare dei metadati.
Windows 8 con Metro alla fine non fa altrettanto?
Oppure vogliamo dire che il "vero" C++ è quello schifo che possiamo ottenere con MFC?
Il C++ con l'ultima revisione dello standard si è dato una bella rinfrescata, andando a copiare a man bassa dalle funzionalità disponibili in C# (auto, lambda, future, nested constructor).
[Kendall]
03-06-2012, 16:14
Per esperienza personale trovo che chi si è imbattuto nel C++ riesca a capire l'importanza di rilasciare le risorse, cosa che moltissime persone cresciute con linguaggi gestiti nemmeno prendono in considerazione e considerano come delle semplici sviste.
Troppe volte mi sono imbattuto in server che avevano esaurito il pool di connessioni perchè tanto c'è il Garbage Collector quindi la connessione al db la si può anche lasciare aperta, troppe volte ho vito file rimasti aperti in scrittura, file a cui il programma in fasi successive prova ad accedere ovviamente ottenendo un bell'errore, ma tanto c'è il GC che qualche volta fa in tempo a chiuderti il file prima dell'accesso successivo!
Non posso che darti ragione. Credo che il c++ come il c siano linguaggi che ogni programmatore che possa definirsi tale DEVE sapere, o almeno conoscere. Perchè ti insegna a programmare con cura, con attenzione.
Detto questo, se un programmatore conosce il modus operandi del c/c++, passando ad un linguaggio a più alto livello non può che guadagnarci (a meno che non si entri nei campi per i quali il c++ è imprescindibile).
Infine piccola parentesi riguardo alle "risorse". Nel C# vi è un comando ben preciso per gestire tali situazioni, perfino una interfaccia dedicata (IDisposable). Il comando è il :
using(risorsa) {
bla bla bla
}
[Kendall]
03-06-2012, 16:26
Non capisco perchè utilizzare Qt non sia programmare in C++. Alla fine sono sempre classi scritte in C++.
E il preprocessore è stato usato in maniera intelligente per creare dei metadati.
Windows 8 con Metro alla fine non fa altrettanto?
Oppure vogliamo dire che il "vero" C++ è quello schifo che possiamo ottenere con MFC?
Il C++ con l'ultima revisione dello standard si è dato una bella rinfrescata, andando a copiare a man bassa dalle funzionalità disponibili in C# (auto, lambda, future, nested constructor).
Aspetta, non reputarmi un detrattore del c++ (sempre se l'hai fatto). Non lo sono!
Io credo che il c++ sia la migliore strada per imparare la programmazione. Dopo (e solo dopo!!) credo si debba pensare ad altri linguaggi, magari di più alto livello. Imparare il c++ ti insegna come funziona il motore sotto al cofano, ti insegna a comprendere i piccoli ingranaggi della programmazione, però non ti fornisce un modo davvero efficace per portarlo a termine.
L'MFC è un incubo, se vuoi la mia opinione, solo credo che il framework QT, non essendo standard, tenda ad estraniarti dalla programmazione C++. In C# come in ogni linguaggio della CLI hai una libreria condivisa, ed essa è imprescindibile. In QT invece essa non è parte integrante del c++, non è uno standard, giusto per capirsi, per questo dico che la programmazione QT è uno "strato" al di sopra al c++. Se io scrivo una classe in ottica QT non userò mai la classe String (per dirne una), userò la QString (essendo ben più funzionale) e lo stesso si può dire per molte altre classi e strutture. Hanno perfino realizzato una macro per il for_each, giusto per capirsi. E' questo che voglio dire, QT è quello che sarebbe dovuto essere C++, ma purtroppo non lo è...
pabloski
03-06-2012, 17:50
;37568385']solo credo che il framework QT, non essendo standard, tenda ad estraniarti dalla programmazione C++. In C# come in ogni linguaggio della CLI hai una libreria condivisa, ed essa è imprescindibile.
E' questione di percezione. Ed è quello che, penso, ha confuso Squall. L'ambiente microsoft ti pone all'interno di un sistema chiuso fatto di linguaggi e librerie.
In ambiente unix, invece, siamo da sempre abituati a considerare l'ambiente di programmazione come un insieme di tanti pezzi che vengono fatti lavorare insieme. Chiunque abbia lavorato in c++ sotto windows si trova stranamente confuso quando scopre che WinMain e tutti le funzioni win32 non sono in realtà parte dello standard c++.
Si potrebbe fare un esperimento, prendendo un programmatore alle prime armi ed insegnarli la programmazione su qt. Probabilmente concluderebbe che qt e c++ sono un blocco unico.
Ci sono molti esempi di framework che tendono a creare un superset del c++. Banalmente anche boost è una cosa del genere. Immagina di dover studiare il c++ e boost contemporaneamente e avere a disposizione un manuale che ti rimanda alle classi boost invece di quelle della stl del c++. Alla fine ti convincerei che c++ e boost sono un componente unico.
E' il bello ( o forse il brutto, non so ) del c e del c++. Sono linguaggi nati per essere estesi, mentre altri linguaggi, tipo java, sono nati non solo per fornire policy e costrutti ma pure tutte le classi che servono nel 90% degli usi. Basta guardare la libreria java per capire che ti serve ben poco di esterno per realizzare una qualsiasi applicazione ( spesso basta la sola libreria java ).
Chiaramente chi viene da un'esperienza di programmazione "chiavi in mano" ( tipo java, win32/c++, ecc.... ) trova alquanto strana che il c++ "liscio" non offra certe api che si credeva appartenere invece proprio al linguaggio.
Quando si parla per partito preso...
Java ha qualcosa di analogo a QML?
A me sembra che di recente il mondo che ruota intorno al C++ abbia ripreso un bel po' di spinta. Qt sono sicuramente un framework notevole quanto a completezza e supporto multipiattaforma, ma non dimentichiamo che anche Microsoft con l'introduzione Windows 8 ha parlato più di C++ che di .Net...
non volevo criticare C++ ci mancherebbe, è il linguaggio che uso il 99% del tempo :D
E' solo che per farci UI boh, non mi sembra adatto. ma non ho mai provato Qt!
Comunque, aggiungo che in termini di qualità il modo migliore per scrivere un'UI è usare le librerie "native" del sistema in questione (es: Cocoa su Mac, WPF/win32 su Windows, il DM che capita nella distro su Linux), possibilmente studiandosi il "linguaggio di interazione" (tutte le gestures etc che l'utente si aspetta che funzionino, tipo Mela+W o il drag & drop o il pinch to zoom su touch)... ma non sono un UI programmer, quindi è una mera opinione :D
Squall 94
03-06-2012, 19:09
Un po' di commenti in ordine sparso.
C++ è un linguaggio standardizzato, Visual C++ è un IDE, un programma che permette di scrivere codice, che include anche un compilatore C/C++, è sviluppato dalla Microsoft. GCC è un altro compilatore C/C++/altri linguaggi sviluppato dalla FSF. Esistono moltissimi altri IDE e altri compilatori.
C++/CLI è l'implementazione di C++ per la piattaforma .NET, che permette di programmare in modo indipendente dal linguaggio. Visual C++ supporta sia .NET che la programmazione nativa in C, C++. Su .NET girano molti altri linguaggi: C#, F#, Python, Ruby, Ada, Lisp, Prolog, Fortran, Cobol, Haskell...
Nell'ambito di C e C++ Visual C++ supporta più o meno completamente lo standard. Credo supporti completamente C89 e C++98, e parzialmente C99 e C++11. Poi offre estensioni allo standard nell'ambito dello stesso linguaggio. Il discorso è identico per GCC, che non supporta completamente gli standard (anche se forse un po' di più di Visual C++) ed offre delle estensioni, e anche per gli altri compilatori.
La sintassi di C#, C++, Java (e altri linguaggi) è ispirata a quella del C (anche ci sono comunque molte differenze). Ma la sintassi è solo una piccola parte di un linguaggio, tutto il resto può essere completamente diverso. Non credere di passare agevolmente da un linguaggio all'altro solo perché entrambi usano le graffe per delimitare i blocchi.
Concordo anche con quello che hai detto successivamente in merito alle librerie Linux e Windows,.
Quello che ho detto anche prima ma mi sembra sia sfuggito è che sarebbe inutile usare Visual C++ per scrivere in C++ nativo, il suo primo utilizzo credo sia proprio quello di scrivere C++ sulla piattaforma .NET, correggetemi se sbaglio.
Per la sintassi di Java, C# e C++ si hai ragione, l'ho detto proprio prima in merito all'acquisizione di dati e il rilascio in eventuali TextBox, in C# devono essere convertiti per essere caricati in memoria e poi riconvertiti per la stampa.
Squall 94
03-06-2012, 19:22
L'ennesimo thread sull'argomento...
Ho l'impressione che la confusione sia dovuta dalla poca conoscenza dei linguaggi, dei tools e delle differenze fra loro.
1. Programmare è un hobby o vuoi farne una professione? Nel secondo caso, potresti orientarti verso i linguaggi piu richiesti ed abituarti a tecniche di software engineering (TDD, ...).
2. Quanto tempo puoi dedicare giornalmente allo studio del linguaggio? Ci son linguaggi, come il C, che richiedono inevitabilmente spender ore su GDB e sulla teoria di sistemi operativi (non puoi lavorare in C senza saper la differenza fra lo stack e l'heap).
3. Quanto in fretta vuoi ottener risultati visibili? Quanta meno pazienza hai, quanto piu di alto livello sceglielo...
Per quanto riguarda gli IDE... a meno che tu non faccia programmi realmente grossi, spesso un editor di testo con highlight è piu che sufficiente. Ed abituati a compilare/linkare da linea di comando. Non hai idea di quanti programmatori C non sappiamo creare un makefile a mano :D
Professione un domani, stavo pensando a ingegneria informatica o scienze informatiche che comunque non mi quadra per niente, lo stesso ingegneria per la poca programmazione presente dopo addirittura i 3 anni, ma non andiamo in OT.
Pazienza ce l'ho, troppa. Risultati ? Beh penso che per il prossimo anno Java l'avro assimilato per bene visto che adesso mi trovo bene con classi e sottoclassi, ma questa sembra essere la base, i problemi sono gestione di problemi eventuali e controlli, la si che ci sta da perderci tempo, senza qualcuno che mi corregga sarà una bella impresa, anche se ci sono i forum, questi ti fanno arrivare a una soluzione non in tempi brevi, specialmente se devo risolvere un problema per un programma abbastanza complesso ( ne dubito per ora ).
Mi potresti spiegare " software engineering ", so cosa significa ma cosa intendi ? Se è come la penso io per il momento non credo sia necessario.
In C ci avviciano troppo a cose difficili, adesso mi devo preoccupare di sapermi muovere su Java e di migliorare un po' il C++, anche se quelle cose mi incuriosiscono proprio, è la che ti fai delle domande e vuoi le risposte a tutti i costi :D .
Gestire problemi di memoria, thread e quant'altro ...... non mi ci fa pensà, se mi ci focalizzo ora ci metto un secolo per muovermi poi su altri linguaggi :D , è roba difficile, o almeno vederseli da soli non richiede poco tempo.
Squall 94
03-06-2012, 19:36
Secondo me fai molto male :D
Python non mi risulta avere framework grafici nativi. Quello che va più di moda non a caso è PyQt...
Js+Html sul web è d'obbligo essendo l'unico standard supportato dai browser...
Inoltre secondo me è molto più produttivo utilizzare Qt che non Java per creare programmi desktop. Mi assumo pienamente la responsabilità di quello che dico.
Inoltre grazie a QML, Qt sono andate oltre il classico sviluppo di applicazioni GUI. L'unico altro framework paragonabile è WPF. Java non mi sembra offra altrettanto. Oltretutto ci sono già esempi di Qml su Metro.
Senza contare che volendo si può fare un'applicazione Android con Qt...
Qt sarebbe male er quale motivo ? Non ho capito cosa intende con il preprocessor.
PyQt sarebbe Python su Qt ?
Qt mi fa scegliere C++, Qt, QML ( mai sentito ), GLSL e General che sarebbe un file di testo.
Stessa cosa per Metro, cos'è ?
Spiegami pure cos'è Js+HTML5, sto cercando già troppe cose, alla fine del thread vorrei avere idee chiare :D .
Squall 94
03-06-2012, 19:52
E' questione di percezione. Ed è quello che, penso, ha confuso Squall. L'ambiente microsoft ti pone all'interno di un sistema chiuso fatto di linguaggi e librerie.
In ambiente unix, invece, siamo da sempre abituati a considerare l'ambiente di programmazione come un insieme di tanti pezzi che vengono fatti lavorare insieme. Chiunque abbia lavorato in c++ sotto windows si trova stranamente confuso quando scopre che WinMain e tutti le funzioni win32 non sono in realtà parte dello standard c++.
Si potrebbe fare un esperimento, prendendo un programmatore alle prime armi ed insegnarli la programmazione su qt. Probabilmente concluderebbe che qt e c++ sono un blocco unico.
Ci sono molti esempi di framework che tendono a creare un superset del c++. Banalmente anche boost è una cosa del genere. Immagina di dover studiare il c++ e boost contemporaneamente e avere a disposizione un manuale che ti rimanda alle classi boost invece di quelle della stl del c++. Alla fine ti convincerei che c++ e boost sono un componente unico.
E' il bello ( o forse il brutto, non so ) del c e del c++. Sono linguaggi nati per essere estesi, mentre altri linguaggi, tipo java, sono nati non solo per fornire policy e costrutti ma pure tutte le classi che servono nel 90% degli usi. Basta guardare la libreria java per capire che ti serve ben poco di esterno per realizzare una qualsiasi applicazione ( spesso basta la sola libreria java ).
Chiaramente chi viene da un'esperienza di programmazione "chiavi in mano" ( tipo java, win32/c++, ecc.... ) trova alquanto strana che il c++ "liscio" non offra certe api che si credeva appartenere invece proprio al linguaggio.
È proprio l'ambiente Miicrosoft per la sua chiusura che mi volevo astenere.
Ad esempio con Dev in C++ usavo Math.h, fstream, sono queste le librerie standard ? Se è così allora tutte quelle che ho usato in C# fanno parte del .NET, ora o accetto di aver perso tempo ma comunque a scuola lo dovevo fare, oppure ci trovo qualcosa di positivo, ma dove ??? :D
[Kendall]
03-06-2012, 19:57
Qt sarebbe male er quale motivo ? Non ho capito cosa intende con il preprocessor.
PyQt sarebbe Python su Qt ?
Qt mi fa scegliere C++, Qt, QML ( mai sentito ), GLSL e General che sarebbe un file di testo.
Stessa cosa per Metro, cos'è ?
Spiegami pure cos'è Js+HTML5, sto cercando già troppe cose, alla fine del thread vorrei avere idee chiare :D .
QML è un linguaggio di markup... Però, dimmi una cosa, perchè vuoi passare dal c# al Java? Nel senso, quale motivazione ti spinge? Perchè dalle tue parole sembra troverai nel Java l'illuminazione, ma invece rispetto al c# rimarrai deluso (almeno secondo me)
Squall 94
03-06-2012, 20:30
;37569392']QML è un linguaggio di markup... Però, dimmi una cosa, perchè vuoi passare dal c# al Java? Nel senso, quale motivazione ti spinge? Perchè dalle tue parole sembra troverai nel Java l'illuminazione, ma invece rispetto al c# rimarrai deluso (almeno secondo me)
La portabilità come ho detto all'inizio, lo so che C# è molto potente ma non versatile, poi comunque Java lo dovrò imparare per forza perche come mi hanno detto prima C++ e Java sono d'obbligo, almeno per conoscienza basilare.
In questi 2 giorni credo che abbiamo fatto il record di risposte in una discussione e io di conoscienza :D .
pabloski
03-06-2012, 20:44
Ad esempio con Dev in C++ usavo Math.h, fstream, sono queste le librerie standard ? Se è così allora tutte quelle che ho usato in C# fanno parte del .NET, ora o accetto di aver perso tempo ma comunque a scuola lo dovevo fare, oppure ci trovo qualcosa di positivo, ma dove ??? :D
Mi è chiaro adesso. In pratica, seguendo i manuali ufficiali, eri portato ad usare le api .net e win32 a discapito della standard library del c++.
In questo caso mi è anche chiaro perchè ti sembrasse un c++ strano quello di visual c++. Se aggiungiamo .net, di c++ rimane solo la sintassi, le classi e le parole chiave, mentre la stl viene completamente sostituita dalle librerie .net.
E' la stessa cosa che ti troveresti a fare con c++/qt. Ovviamente la stl puoi benissimo usarla, ma in genere si preferisce usare ciò che offre qt ( perchè offre di più e di meglio ). L'unica differenza è che qt gira su windows, linux, macos e altri sistemi operativi meno conosciuti.
Squall 94
03-06-2012, 21:01
Mi è chiaro adesso. In pratica, seguendo i manuali ufficiali, eri portato ad usare le api .net e win32 a discapito della standard library del c++.
Mi stai dicendo che quelle non sono le standard ?
In questo caso mi è anche chiaro perchè ti sembrasse un c++ strano quello di visual c++. Se aggiungiamo .net, di c++ rimane solo la sintassi, le classi e le parole chiave, mentre la stl viene completamente sostituita dalle librerie .net.
Quindi anche Qt avrà le sue librerie ?
Se ho capito bene posso continuare ad usare quelle standard ma è meglio usare quelle di Qt, perchè ?
Poi mi sembra strano, cioè c'erano già librerie che facevano il loro lavoro, perchè riscrivere tutto ? Oppure sono state solo modificate o addirittura migliorate ?
Non capisco l'esigenza di creare librerie proprietarie per un IDE, forse per legare l'utente all'uso di quell'IDE ?
Mi sembra lavoro in più, è ovvio che c'è una spiegazione :D .
pabloski
03-06-2012, 21:23
Mi stai dicendo che quelle non sono le standard ?
math e fstream lo sono
Quindi anche Qt avrà le sue librerie ?
si, ma puoi usarle insieme alla stl del c++
Se ho capito bene posso continuare ad usare quelle standard ma è meglio usare quelle di Qt, perchè ?
perchè uno degli obiettivi di qt è fornire funzionalità migliori rispetto alle librerie standard del c++
Poi mi sembra strano, cioè c'erano già librerie che facevano il loro lavoro, perchè riscrivere tutto ? Oppure sono state solo modificate o addirittura migliorate ?
internamente qt fa uso delle librerie standard del c++, ma le estende e, laddove necessario, le rende multipiattaforma
Non capisco l'esigenza di creare librerie proprietarie per un IDE, forse per legare l'utente all'uso di quell'IDE ?
qt non è un'ide, qt è un framework che offre una miriade di librerie che svolgono un mucchio di funzioni, tra cui la grafica che in c++ non esiste
lo stesso vale per le librerie windows, che sono state create per migliorare quelle del c++ ed offrire qualcosa in più
[Kendall]
03-06-2012, 22:13
Mi stai dicendo che quelle non sono le standard ?
Quindi anche Qt avrà le sue librerie ?
Se ho capito bene posso continuare ad usare quelle standard ma è meglio usare quelle di Qt, perchè ?
Poi mi sembra strano, cioè c'erano già librerie che facevano il loro lavoro, perchè riscrivere tutto ? Oppure sono state solo modificate o addirittura migliorate ?
Non capisco l'esigenza di creare librerie proprietarie per un IDE, forse per legare l'utente all'uso di quell'IDE ?
Mi sembra lavoro in più, è ovvio che c'è una spiegazione :D .
No aspetta, non confondere le cose. QT era, è e sempre sarà una libreria. Un framework. Ai ragazzi della Nokia non frega nulla di imporre la propria IDE (QT Creator) perchè tale IDE è e sempre sarà a meno di stravolgimenti legata al framework stesso.
Riguardo al riscrivere classi e funzionalità, il tutto ha senso... Perché? Perchè loro hanno costruito una piattaforma. Non possono basarsi su strumenti di altri ergo devono imbastire una infrastruttura tale da fornire tutte le funzionalità base, e queste devono essere tali per tutto il ciclo di vita del framework (o per gran parte). Per questo il team di QT ha riscritto una marea di classi. Per creare una loro base e una loro piattaforma di programmazione. E' per questo che dicevo che programmare in QT non è programmare in C++, non interamente almeno.
bender86
04-06-2012, 09:35
;37568163']Detto questo, credo che chiunque ami programmare se ne vedrebbe bene dal farlo in c++ se può evitarlo. E con questo non sto sminuendo il c++, credo sia un linguaggio fenomenale, ma semplicemente è troppo di basso livello per poter essere utilizzato come linguaggio da "tutti i giorni".
Mi sembra un po' esagerato, usando decentemente STL e Boost C++ ha molte caratteristiche di alto livello, a differenza del C. Certo che se lo si usa come "C con le classi" allora hai ragione, il problema principale è che è molto complicato da imparare. Comunque è vero che esistono molti altri linguaggi più semplici.
Chiunque abbia lavorato in c++ sotto windows si trova stranamente confuso quando scopre che WinMain e tutti le funzioni win32 non sono in realtà parte dello standard c++.
Io ho visto più persone iniziare su Unix (in università) e poi chiedersi come usare fork e exec su Windows.
Non ci si scappa, nella libreria standard C++ non c'è niente su GUI, processi, rete... Quindi per usare GUI, processi, rete... bisogna rivolgersi a librerie non standard.
Quello che ho detto anche prima ma mi sembra sia sfuggito è che sarebbe inutile usare Visual C++ per scrivere in C++ nativo, il suo primo utilizzo credo sia proprio quello di scrivere C++ sulla piattaforma .NET, correggetemi se sbaglio.
Sbagli.
Visual C++ è un IDE per C++, supporta il linguaggio standard e l'estensione per .NET. Non ha niente di meno di altri IDE per C++ (anzi è considerato uno dei migliori IDE disponibili). In C++ standard non permette di disegnare l'interfaccia grafica, ma nessun IDE lo permette dato che l'interfaccia grafica non fa parte del C++ standard. Se decidi di usare Qt puoi disegnare le finestre con Designer e programmare con Visual C++, oppure fare tutto con QtCreator.
Ad esempio con Dev in C++ usavo Math.h, fstream, sono queste le librerie standard ?
Libreria standard C++:
http://www.cplusplus.com/
http://en.cppreference.com/w/
Boost (la prima libreria che devi guardare se quello che ti serve non è nello standard):
http://www.boost.org/
Qt:
http://qt-project.org/doc/qt-4.8/
Comunque se il tuo obiettivo principale era trovare un linguaggio portabile forse dovresti davvero provare qualcosa di più alto livello, come Java, Python o Ruby.
Mi potresti spiegare " software engineering ", so cosa significa ma cosa intendi ? Se è come la penso io per il momento non credo sia necessario. In C ci avviciano troppo a cose difficili, adesso mi devo preoccupare di sapermi muovere su Java e di migliorare un po' il C++, anche se quelle cose mi incuriosiscono proprio, è la che ti fai delle domande e vuoi le risposte a tutti i costi :D .
Gestire problemi di memoria, thread e quant'altro ...... non mi ci fa pensà, se mi ci focalizzo ora ci metto un secolo per muovermi poi su altri linguaggi :D , è roba difficile, o almeno vederseli da soli non richiede poco tempo.
Per software engineering intendo quella disciplina che si occupa di tutto il processo di progettazione e sviluppo del software (progettazione, sviluppo, test, ...). Potresti dare una occhiata al testo di I. Sommerville. Se farai ingegneria informatica o informatica sul suo testo ci farai probabilmente uno o piu esami.
Potresti iniziare a far amicizia con le varie tecniche di sviluppo (test drivem development, agile, ...), cosi come con i vari software di test (cucumber, fitnesse, ...).
Per quanto riguarda i linguaggi, fai bene a sperimentarne piu di uno. Si tratta di trovare quello con cui ti trovi meglio. Potresti addirittura dare una occhiata a LISP.
Squall 94
04-06-2012, 15:56
Sbagli.
Visual C++ è un IDE per C++, supporta il linguaggio standard e l'estensione per .NET. Non ha niente di meno di altri IDE per C++ (anzi è considerato uno dei migliori IDE disponibili). In C++ standard non permette di disegnare l'interfaccia grafica, ma nessun IDE lo permette dato che l'interfaccia grafica non fa parte del C++ standard. Se decidi di usare Qt puoi disegnare le finestre con Designer e programmare con Visual C++, oppure fare tutto con QtCreator.
Comunque se il tuo obiettivo principale era trovare un linguaggio portabile forse dovresti davvero provare qualcosa di più alto livello, come Java, Python o Ruby.
Si ma io dicevo che è inutile scrivere C++ puro, intendo per la riga di comando usando Visual C++.
A meno che non ho capito male io, cioè se io voglio interfacciarmi con il C++ e ho intenzione di usare Visual C++, il codice non cambia ? Le modalita o convenzioni, e le librerie ?
Al momento su sta cosa sono confuso perchè C# rispecchia molto C++ ma molto di più Java, ora conoscendo C++ ero convinto che si era sviluppato su di esso, ereditando gran parte della sintassi, però ieri ho scoperto che è un codice a sè, scritto formalmente uguale al C++ ma opera in modo diverso usando come supporto il Framework.NET e librerie proprietarie.
Sapendo questo mi viene da pensare che C# sia un cosa totalmente a parte e che quando si programma con Visual C++ vuol dire un C++ diverso, o meglio dire riscritto ?
Sul C# la pensavo così perchè le diversità che incontarvo mi sembrava solo una scelta obbligatoria per far interagire C++ con il Form ( assurdità :D ), in Visual C++ quindi posso creare un normale programma in C++ da riga di comando, ma usando l'ambiente visuale la questione cambia o è sempre lo stesso C++ ? ( lasciando stare librerie del .NET )
Sono insistente e certamente provar non nuoce, ma sto smanettando con Java e altre cose, impiega molto tempo :D .
Comunque si sto imparando Java, poi veniamo agli altri ma vorrei fare per bene questo almeno, ma prima tutto vorrei avere più chiarezza su come funziona il mondo :D :D . Chiedo troppo dai :) .
pabloski
04-06-2012, 16:14
Si ma io dicevo che è inutile scrivere C++ puro, intendo per la riga di comando usando Visual C++.
A meno che non ho capito male io, cioè se io voglio interfacciarmi con il C++ e ho intenzione di usare Visual C++, il codice non cambia ? Le modalita o convenzioni, e le librerie ?
Al momento su sta cosa sono confuso perchè C# rispecchia molto C++ ma molto di più Java, ora conoscendo C++ ero convinto che si era sviluppato su di esso, ereditando gran parte della sintassi, però ieri ho scoperto che è un codice a sè, scritto formalmente uguale al C++ ma opera in modo diverso usando come supporto il Framework.NET e librerie proprietarie.
C++, Java e C# sono 3 linguaggi completamente differenti. Il fatto che abbiano delle similitudini sintattiche è dovuto alla volontà di chi li ha creati di favorire i programmatori nell'apprendimento.
Poi c'è il discorso Visual C++. Visual C++ è un IDE ed è un compilatore C++. Questo vuol dire che è in grado di interpretare la sintassi del C++ e alcune parole chiavi del linguaggi. A parte la sintassi e le parole chiavi fondamentali http://en.cppreference.com/w/cpp/keyword, i linguaggi propriamente detti non hanno nient'altro.
Poi ogni linguaggio viene fornito di un qualche meccanismo per eseguire funzioni presenti in librerie esterne al linguaggio. Tali librerie possono essere librerie standard create da chi ha creato il linguaggio stesso e allora parliamo di standard libraries. In caso contrario parliamo di librerie di terze parti.
C# è un linguaggio C-like ( sintassi simile, ma anche molte differenze ) ed è in grado di interfacciarsi con tutte le librerie che compongono .net. Ma .net non è C#, così come C# non è .net. Sono due entità separate che però possono interagire.
Lo stesso dicasi di C++/.net, ovvero è C++ ma si usano le librerie .net ( il programmatore decide di usare tali librerie, non è il linguaggio che lo fa, per il linguaggio non esistono librerie e api esterne ).
Su linux non esiste .net ( ok mono, ma facciamo finta che non esista ) e quindi puoi usare C++ ( sintassi, keywords, classi, ecc... ) ma quali librerie? Ovviamente le librerie della stl ( libreria standard del c++ ) perchè è obbligatorio fornire un compilatore c++ accoppiato alla stl. Per tutto il resto bisogna usare librerie esterne.
Per cui è fondamentale capire che il linguaggio e le librerie sono due cose completamente separate, ma i linguaggi ( tutti o quasi tutti ) hanno un meccanismo che permette di eseguire funzioni presenti in librerie esterne al linguaggio.
Sapendo questo mi viene da pensare che C# sia un cosa totalmente a parte e che quando si programma con Visual C++ vuol dire un C++ diverso, o meglio dire riscritto ?
C# è C# e non è un pezzo, un'estensione, un clone di C++. E' un altro linguaggio. Visual C++ ti permetti di programmare in C++ liscio, a patto che tu programmatore usi solo ed esclusivamente la stl come libreria. Nel momento in cui chiami una funzione .net o win32, il programma diventa non portabile ma non nel senso che non è più scritto in C++, bensì nel senso che stai usando librerie che non esistono su sistemi diversi da windows.
Sul C# la pensavo così perchè le diversità che incontarvo mi sembrava solo una scelta obbligatoria per far interagire C++ con il Form ( assurdità :D )
Form è una classe ed è un elemento presente in una libreria esterna. Nulla a che vedere con i due linguaggi citati. I linguaggi sono separati dalle librerie.
in Visual C++ quindi posso creare un normale programma in C++ da riga di comando, ma usando l'ambiente visuale la questione cambia o è sempre lo stesso C++ ? ( lasciando stare librerie del .NET )
In Visual C++ puoi benissimo creare un'applicazione console e metterci un bel main, tanti comandi C++ e usare solo ed esclusivamente le funzione della stl. Un programma del genere è compilabile anche per altri sistemi operativi. Il fatto che tu stia usando un ambiente visuale non vuol dire assolutamente niente. L'ambiente visuale esiste per agevolare il programmatore e rendergli più semplice l'aggiunta/programmazione di widget e classi standard ( in genere win32 e .net sono supportati da visual c++ ).
Sono insistente e certamente provar non nuoce, ma sto smanettando con Java e altre cose, impiega molto tempo :D .
Ecco, visto che stai studiando java fai una prova. Prova a creare un'applicazione java grafica usando il form designer di netbeans e fai la stessa cosa ma usando solo l'editor del codice ( cioè aggiungendo a mano i controlli, implementando i vari listener, ecc... ).
Questa esperienza ti tornerà utile per capire che, ad esempio, visual c++ non è necessariamente .net, non devi per forza usare le classi .net, non devi per forza usare il designer grafico per realizzare la gui e puoi benissimo realizzare applicativi c++ che usano la sola stl.
Squall 94
04-06-2012, 16:33
Per software engineering intendo quella disciplina che si occupa di tutto il processo di progettazione e sviluppo del software (progettazione, sviluppo, test, ...). Potresti dare una occhiata al testo di I. Sommerville. Se farai ingegneria informatica o informatica sul suo testo ci farai probabilmente uno o piu esami.
Potresti iniziare a far amicizia con le varie tecniche di sviluppo (test drivem development, agile, ...), cosi come con i vari software di test (cucumber, fitnesse, ...).
Per quanto riguarda i linguaggi, fai bene a sperimentarne piu di uno. Si tratta di trovare quello con cui ti trovi meglio. Potresti addirittura dare una occhiata a LISP.
Lisp se non sbaglio l'hanno usata per la mia cara PSP, tante minoranze non mi comvengono anche perchè adesso parlo però ho già un libro di circa 500 pagine da sfogliare e risfogliare per vedere gli errori dei miei programmi :D .
Penso che avrò il tempo di scegliere e per il momento devo provare quelli più famosi, cerco di imparare bene quelli, non che ci divento matto ma devo prima generalizzare per poi approfondire un linguaggio che credo mi servirà.
Per quanto riguarda software engineering beh penso sia complicato, a tempo perso gli darò sicuramente un occhiata ( in inglese mi richiede molto tempo anche se c'è scritto che usa un linguaggio semplice proprio per farlo comprendere a tutti ) , la curiosità mi spinge :D .
Squall 94
04-06-2012, 16:46
C++, Java e C# sono 3 linguaggi completamente differenti. Il fatto che abbiano delle similitudini sintattiche è dovuto alla volontà di chi li ha creati di favorire i programmatori nell'apprendimento.
Poi c'è il discorso Visual C++. Visual C++ è un IDE ed è un compilatore C++. Questo vuol dire che è in grado di interpretare la sintassi del C++ e alcune parole chiavi del linguaggi. A parte la sintassi e le parole chiavi fondamentali http://en.cppreference.com/w/cpp/keyword, i linguaggi propriamente detti non hanno nient'altro.
Poi ogni linguaggio viene fornito di un qualche meccanismo per eseguire funzioni presenti in librerie esterne al linguaggio. Tali librerie possono essere librerie standard create da chi ha creato il linguaggio stesso e allora parliamo di standard libraries. In caso contrario parliamo di librerie di terze parti.
C# è un linguaggio C-like ( sintassi simile, ma anche molte differenze ) ed è in grado di interfacciarsi con tutte le librerie che compongono .net. Ma .net non è C#, così come C# non è .net. Sono due entità separate che però possono interagire.
Lo stesso dicasi di C++/.net, ovvero è C++ ma si usano le librerie .net ( il programmatore decide di usare tali librerie, non è il linguaggio che lo fa, per il linguaggio non esistono librerie e api esterne ).
Su linux non esiste .net ( ok mono, ma facciamo finta che non esista ) e quindi puoi usare C++ ( sintassi, keywords, classi, ecc... ) ma quali librerie? Ovviamente le librerie della stl ( libreria standard del c++ ) perchè è obbligatorio fornire un compilatore c++ accoppiato alla stl. Per tutto il resto bisogna usare librerie esterne.
Per cui è fondamentale capire che il linguaggio e le librerie sono due cose completamente separate, ma i linguaggi ( tutti o quasi tutti ) hanno un meccanismo che permette di eseguire funzioni presenti in librerie esterne al linguaggio.
C# è C# e non è un pezzo, un'estensione, un clone di C++. E' un altro linguaggio. Visual C++ ti permetti di programmare in C++ liscio, a patto che tu programmatore usi solo ed esclusivamente la stl come libreria. Nel momento in cui chiami una funzione .net o win32, il programma diventa non portabile ma non nel senso che non è più scritto in C++, bensì nel senso che stai usando librerie che non esistono su sistemi diversi da windows.
Form è una classe ed è un elemento presente in una libreria esterna. Nulla a che vedere con i due linguaggi citati. I linguaggi sono separati dalle librerie.
In Visual C++ puoi benissimo creare un'applicazione console e metterci un bel main, tanti comandi C++ e usare solo ed esclusivamente le funzione della stl. Un programma del genere è compilabile anche per altri sistemi operativi. Il fatto che tu stia usando un ambiente visuale non vuol dire assolutamente niente. L'ambiente visuale esiste per agevolare il programmatore e rendergli più semplice l'aggiunta/programmazione di widget e classi standard ( in genere win32 e .net sono supportati da visual c++ ).
Ecco, visto che stai studiando java fai una prova. Prova a creare un'applicazione java grafica usando il form designer di netbeans e fai la stessa cosa ma usando solo l'editor del codice ( cioè aggiungendo a mano i controlli, implementando i vari listener, ecc... ).
Questa esperienza ti tornerà utile per capire che, ad esempio, visual c++ non è necessariamente .net, non devi per forza usare le classi .net, non devi per forza usare il designer grafico per realizzare la gui e puoi benissimo realizzare applicativi c++ che usano la sola stl.
Capito tutto il resto ma usare la stl non significherebbe creare un programma su riga di comando ? Cioè usando quelle standard di cui C++ è sprovvisto di GUI, usare Visual C++ è inutile a sto punto, torno sempre la, non mi voglio schiodà :D .
Comunque se non erro del tutto in Visual C++ posso programmare si in C++ però aggiungendo un plugin per la libreria Qt, ad esempio posso poi esportare il programma su Linux ? La compilazione ovviamente la faccio su Linux, ma il problema è quali file mi rilascia Visual C++, dovrei esportarli su un file di testo per farli compilare o devo semplicemente cambiare estensione ?
C# ad esempio ne rilascia non pochi di file, credo che dovrei tenere in consideraione solo quelli delle classi, la configurazione del progetto non serve giusto ?
Scusa ma non mi ricodro ora il fatto della libreria Qt, sfogliare tutto il thread e seguire il discorso è troppo per oggi dopo aver studiato 40 pagine sulla sintassi Java, e provato in parte, mi sono bloccato a Try e Catch perchè non ho ben capito il BufferReader, differente o forse assente in C#, comunque sia non l'ho mai usato o forse fa qualcosa del genere in automatico.
pabloski
04-06-2012, 17:08
Capito tutto il resto ma usare la stl non significherebbe creare un programma su riga di comando ?
Essendo C++ e stl sprovvisti di funzioni grafiche, si. Ma questo non vale per tutti i linguaggi. Java ha la grafica nella sua libreria standard. Quindi occhio che non sempre è vero che libreria standard = riga di comando.
Cioè usando quelle standard di cui C++ è sprovvisto di GUI, usare Visual C++ è inutile a sto punto, torno sempre la, non mi voglio schiodà :D .
Non vedo perchè. Se tu sei uno che deve creare dei programmi in C++ multipiattaforma e ti piace usare windows e visual studio, perchè dovrebbe essere inutile?
C'è genere che usa visual c++ perchè gli piace, non perchè ci fai i programmi con gui. Che poi pure con Dev potevi fare un programma con gui.
Comunque se non erro del tutto in Visual C++ posso programmare si in C++ però aggiungendo un plugin per la libreria Qt
No, il plugin QT serve per programmare col framework QT. Con Visual C++ puoi programmare in C++ già adesso, semplicemente perchè Visual C++ supporta C++ e in più facilita l'integrazione con le librerie win32 e .net.
ad esempio posso poi esportare il programma su Linux ?
Il programma si, gli script per compilarlo no. Linux non ha Visual C++, per cui se vuoi esportare i programmi su Linux, allora usa QtCreator. E' fatto apposta per programmare in C++/QT.
La compilazione ovviamente la faccio su Linux, ma il problema è quali file mi rilascia Visual C++, dovrei esportarli su un file di testo per farli compilare o devo semplicemente cambiare estensione ?
I file .cpp ovviamente vanno bene, il problema sono i file .vcproj.
C# ad esempio ne rilascia non pochi di file, credo che dovrei tenere in consideraione solo quelli delle classi, la configurazione del progetto non serve giusto ?
C# è strettamente integrato con .net, per cui su linux devi usare mono per poter gestire i programmi in c#.
Squall 94 hai in testa una confusione che dire bestiale è poco?
cosa è che non ti è chiaro?
ormai te l'hanno ripetuto molte volte tutto il discorso ma sembra che tu non riesca ad afferrare le differenze tra linguaggio, compilatore editor e librerie esterne
AllerITA
05-06-2012, 08:45
Scusate se mi inserisco di nuovo nella discussione.
Credo di aver capito che il sorgente del linguaggio è la base di tutte le problematiche multipiatta di trasportabilità.
Mentre in java con la virtual machine le cose sembrano più semplici perché puoi compilare in metalinguaggio su un dispositivo es PC Windows,
per poi portarlo così come è trasferirlo su un qualsiasi altro es android senza nessun altra accortezza ,
e dovrebbe funzionare (giusto adattandolo alle diverse proprietà del sistema col minimo sforzo).
Con il C++:
primo ti devi basare sule stl e su un api multi sistema tipo QT indipendentemente dal IDE o compilatore utilizzato.
Il codice dell'eseguibile così creato non sarà possibile trasferirlo su tutti i sistemi perchè non e' un metalinguaggio e non c'e' la virtual machine che lo interpreta al volo sul sistema.
Mentre il codice sorgente cioe' i vari file cpp o c saranno compilabili sul dispositivo, con l'accortezza di ricreare il make file e quindi creando l'eseguibile
ad ok utilizzando il compilatore sul dispositivo.
Nel caso del C# mi sfugge una cosa.
Se si utilizza il sistema mono con il suo framework.
So che il compilatore trasforma il codice in IL
che dovrebbe essere un metalinguaggio ma non so se esiste una relativa virtual machine
per ogni dispositivo oppure si deve ricompilare su ogni dispositivo utilizzando il compilatore del dispositivo.
Comunque quest'ultimo sistema me lo studierò attentamente perché è molto interessante.
Poi ci sono i linguaggi interpretati tipo il pyton e altri, e questi devono avere solo
l'accortezza di essere supportati da un interprete del linguaggio sul dispositivo.
Correggetemi se ho peso un'abbaglio.:)
cdimauro
05-06-2012, 08:55
E' la sagra della confusione e non vorrei aggiungerne altra, ma purtroppo qualcosa la devo precisare:
- Python (non Pyton) è compilato (come molti linguaggi; qui ci starebbe una digressione fra linguaggi, compilatori, interpreti, ecc., ma è meglio lasciar perdere);
- l'eseguibile creato da un compilatore C++ non è molto diverso da quello prodotto da compilatori Java, C# (.NET in generale), Python, ecc. ecc. ecc.; volendo, quindi, lo si potrebbe far girare su altri sistemi con un'apposita virtual machine.
Per il resto credo che Squall 94 avrebbe bisogno di un po' di studio per chiarirsi BENE le idee prima di buttarsi a pesce su qualunque cosa.
[Kendall]
05-06-2012, 09:34
Nel caso del C# mi sfugge una cosa.
Se si utilizza il sistema mono con il suo framework.
So che il compilatore trasforma il codice in IL
che dovrebbe essere un metalinguaggio ma non so se esiste una relativa virtual machine
per ogni dispositivo oppure si deve ricompilare su ogni dispositivo utilizzando il compilatore del dispositivo.
Comunque quest'ultimo sistema me lo studierò attentamente perché è molto interessante.
Poi ci sono i linguaggi interpretati tipo il pyton e altri, e questi devono avere solo
l'accortezza di essere supportati da un interprete del linguaggio sul dispositivo.
Correggetemi se ho peso un'abbaglio.:)
C# segue bene o male la logica del Java. L'unica problematica è che il frame work stesso evolve, pertanto i ragazzi di mono, che curano l'implementazione del .net che è appunto mono devono restare al tempo con l'implementazione ufficiale di Microsoft se vogliono avere una portabilità totale. Questo cosa significa a conti fatti? Beh, che attualmente mono supporta il framework .net in buona parte delle sue funzionalità fino alla versione 3.5, e non supporta la libreria grafica wpf. Quindi tutti i programmi compilati con questa versione, pure i programmi Windows Form (un'altra libreria grafica per .net), dovrebbero girare senza troppi problemi anche su mono.
AllerITA
05-06-2012, 10:43
E' la sagra della confusione e non vorrei aggiungerne altra, ma purtroppo qualcosa la devo precisare:
- Python (non Pyton) è compilato (come molti linguaggi; qui ci starebbe una digressione fra linguaggi, compilatori, interpreti, ecc., ma è meglio lasciar perdere);
- l'eseguibile creato da un compilatore C++ non è molto diverso da quello prodotto da compilatori Java, C# (.NET in generale), Python, ecc. ecc. ecc.; volendo, quindi, lo si potrebbe far girare su altri sistemi con un'apposita virtual machine.
Per il resto credo che Squall 94 avrebbe bisogno di un po' di studio per chiarirsi BENE le idee prima di buttarsi a pesce su qualunque cosa.
Scusami ancora per l'errore ortografico,
Quindi Python e' compilato, avevo letto diversamente ma probabilmente la discussione che ne parlava si riferiva ad altro.
Per quanto riguarda il C++ mi sembra che il compilatore che crea il codice per costruire l'eseguibile lo faccia attenendosi esattamente al linguaggio macchina e quindi anche al sistema del dispositivo dove viene creato.
Mentre Java, ma correggetemi se sbaglio, crea un meta codice che non centra niente col codice macchina del dispositivo dove viene fatto girare, ma si attiene ad uno standard riconosciuto su tutte le macchine virtuali che lo interpretano e lo gestiscono.
Senza questo sistema il codice no può essere direttamente eseguito.(poi se sbaglio correggetemi)
Un'altra cosa è parlare di eseguire tramite macchina virtuale un programma es compilato in c++ per windows su linux perchè uso un programmino che mi permette di emularlo.
Poi ogni critica costruttiva e' ben accetta.:D
cdimauro
05-06-2012, 12:14
Scusami ancora per l'errore ortografico,
Quindi Python e' compilato, avevo letto diversamente ma probabilmente la discussione che ne parlava si riferiva ad altro.
Ogni file .py viene compilato o in un file .pyc che contiene il bytecode del sorgente. Se non è possibile generare il file .pyc, in ogni caso il sorgente viene compilato in bytecode.
La VM di Python internamente esegue soltanto bytecode.
Per quanto riguarda il C++ mi sembra che il compilatore che crea il codice per costruire l'eseguibile lo faccia attenendosi esattamente al linguaggio macchina e quindi anche al sistema del dispositivo dove viene creato.
Mentre Java, ma correggetemi se sbaglio, crea un meta codice che non centra niente col codice macchina del dispositivo dove viene fatto girare, ma si attiene ad uno standard riconosciuto su tutte le macchine virtuali che lo interpretano e lo gestiscono.
Senza questo sistema il codice no può essere direttamente eseguito.(poi se sbaglio correggetemi)
Un'altra cosa è parlare di eseguire tramite macchina virtuale un programma es compilato in c++ per windows su linux perchè uso un programmino che mi permette di emularlo.
Qual è la differenza fra una macchina virtuale Java e una macchina virtuale che consente di eseguire i binari delle applicazioni C++ compilate per Windows?
Astrattamente nessuna.
La JVM definisce un'architettura "virtuale" (e un insieme di API & ABI) in cui vengono compilati i sorgenti Java.
Il compilatore C++ fa lo stesso, ma su un'architettura reale e un altro insieme di API e ABI.
A runtime la JVM compila porzioni del bytecode nel codice macchina per l'architettura della CPU su cui sta girando, e il runtime della JVM si occupa di "convertire" le chiamate alle API Java in apposite chiamate alle API del s.o. ospite.
Una virtual machine per i binari C++ farebbe esattamente la stessa cosa: compilare al volo porzioni dell'eseguibile (ad esempio x86) in codice macchina per la CPU ospite (es. ARM), convertendo anche le chiamate alle API del s.o. per il quale è stato compilato il binario C++ nelle chiamate alle API del s.o. ospite.
Poi ogni critica costruttiva e' ben accetta.:D
Siamo qui apposta per confrontarci e scambiare opinioni. :)
AllerITA
05-06-2012, 13:47
Ecco un punto di vista molto azzeccato che mi porta a considerare in modo più aperto a nuove possibilità la visione del problema.
Ma come dico sempre non si smette mai di imparare nella vita.:)
Questo lo apprezzo molto.:D
DarwinNE
05-06-2012, 22:46
Mentre in java con la virtual machine le cose sembrano più semplici perché puoi compilare in metalinguaggio su un dispositivo es PC Windows,
per poi portarlo così come è trasferirlo su un qualsiasi altro es android senza nessun altra accortezza, e dovrebbe funzionare
Quanto detto è vero, ma mi permetto una piccola precisazione. Mi piacerebbe tanto sbagliarmi, ma l'ultima volta che avevo controllato mi pare proprio che su Android non fosse disponibile Swing, che è la libreria Java che spesso e volentieri si utilizza invece per disegnare le finestrine, i bottoni ed i menu nelle applicazioni desktop (l'interfaccia, insomma). Quindi è vero che si può passare da Windows a Linux ed a MacOSX senza ricompilare e cambiare una virgola nel codice, tuttavia per Android, c'è un indispensabile adattamento dell'interfaccia grafica a paradigmi e librerie differenti, con modifiche anche pesanti al codice e conseguente ricompilazione :(
Come ho detto, sarei quanto mai felice di esser smentito su questo punto.
Se la situazione attuale degli strumenti software sembra complicata, inciterei l'OP a non preoccuparsi: è peggio! :muro:
tomminno
06-06-2012, 08:39
Quanto detto è vero, ma mi permetto una piccola precisazione. Mi piacerebbe tanto sbagliarmi, ma l'ultima volta che avevo controllato mi pare proprio che su Android non fosse disponibile Swing, che è la libreria Java che spesso e volentieri si utilizza invece per disegnare le finestrine, i bottoni ed i menu nelle applicazioni desktop (l'interfaccia, insomma). Quindi è vero che si può passare da Windows a Linux ed a MacOSX senza ricompilare e cambiare una virgola nel codice, tuttavia per Android, c'è un indispensabile adattamento dell'interfaccia grafica a paradigmi e librerie differenti, con modifiche anche pesanti al codice e conseguente ricompilazione :(
Come ho detto, sarei quanto mai felice di esser smentito su questo punto.
Se la situazione attuale degli strumenti software sembra complicata, inciterei l'OP a non preoccuparsi: è peggio! :muro:
Esatto! Su android esiste solo un limitato subset (http://www.zdnet.com/blog/burnette/java-vs-android-apis/504) di api Java supportate, tra quelle escluse dal supporto anche Swing e Awt.
Credo sia uno dei motivi per cui Oracle ha fatto causa, in pratica hanno "copiato" Java solo dove serviva, senza utilizzarne l'intero standard.
Non per essere monotono :D ma paradossalmente con Qt puoi usare i widget standard desktop anche su Android :sofico:
Ovviamente l'applicazione deve essere pensata per schermi minuscoli, un'interfaccia desktop completa diventa inusabile.
L'utopia del Write Once Run Everywhere fallisce clamorosamente quando si tratta di mettere insieme device troppo differenti.
DioBrando
11-06-2012, 16:09
ecco, java è molto molto più potente di javascript,
Definisci "molto più potente".
Sono linguaggi entrambi Turing-completi.
ma non buttare a mare javascript, perchè è uno dei protagonisti della rivoluzione cloud
Il cloud computing non c'entra una mazza con Javascript.
come già detto, grazie a haxe, node.js e progetti simili, javascript si sta imponendo come linguaggio tuttofare
Di framework ne stanno uscendo a pacchi (quanti ne sopravviveranno vedremo), io avrei più citato jQuery che è un progetto maturo e ormai utilizzato anche nel mobile.
Fatto sta che affermare che si sta imponendo un po' ovunque ora, vuol dire dimenticarsi gli ultimi 10 anni dell'evoluzione di Internet.
Il Web 2.0 o come lo vogliamo chiamare, nasce di fatto con il paradigma AJAX e JSON ad oggi è uno dei formati di scambio dati più comuni.
Sul perchè non lo sa nemmeno microsoft, visto che ha praticamente abbandonato c++. Hanno buttato lì un c++ con .net, ma era chiaro fin dall'inizio che puntavano su c#
Talmente abbandonato che Microsoft è stata, negli ultimi anni, uno dei nomi a contribuire maggiormente per il nuovo aggiornamento, C++0x, divenuto standard ISO nemmeno troppi mesi fa.
Inference type, lambda expression, hash table sono solo alcuni dei grossi miglioramenti che C# (a sua volta ereditati dai paradigmi funzionali) ha portato in dote e sicuramente faciliteranno la vita ai dev che usano C++ come strumento di lavoro.
Al solito, quando si tratta di Redmond, parli con superficialità e spesso senza cognizione di causa.
Per quanto riguarda il thread, trovo che la prima domanda affacciandosi al mondo della programmazione non debba essere "qual è il linguaggio più portabile", anche perché sulla portabilità potremmo far partire dei pistolotti che non finiscono più.
Anche su Java stesso è stato uno dei vari miti perpetrati "write once, run everywhere" già ampiamente smentiti dalla pratica.
Semmai, IMHO, dovrebbe essere: "qual è quello che mi consente di imparare più rapidamente e nel modo più chiaro possibile", quindi bisogna tenere conto anche degli altri strumenti utilizzati nel proprio percorso...
pabloski
11-06-2012, 17:20
Definisci "molto più potente".
ma non hanno la stessa standard library
Il cloud computing non c'entra una mazza con Javascript.
evidentemente sei rimasto fuori dall'ambiente per troppo tempo e perciò non lo sai
Di framework ne stanno uscendo a pacchi (quanti ne sopravviveranno vedremo), io avrei più citato jQuery che è un progetto maturo e ormai utilizzato anche nel mobile.
infatti io ho elencato quelli con cui ho maggiormente a che fare
Fatto sta che affermare che si sta imponendo un po' ovunque ora, vuol dire dimenticarsi gli ultimi 10 anni dell'evoluzione di Internet.
ma in 10 anni nessuna microsoft ha pensato di dargli l'importanza che avrà con windows 8, ad esempio!!!
di certo vedremo molto più javascript rispetto a prima e in posti dove prima non l'avremmo mai visto
Talmente abbandonato che Microsoft è stata, negli ultimi anni, uno dei nomi a contribuire maggiormente per il nuovo aggiornamento, C++0x, divenuto standard ISO nemmeno troppi mesi fa.
di certo per ms è più importante ( molto di più ) c# che c++ e lo si è visto negli ultimi anni di evoluzione di visual studio
Al solito, quando si tratta di Redmond, parli con superficialità e spesso senza cognizione di causa.
tu invece riesumo un thread di una settimana per darmi addosso? fatti una vita
Semmai, IMHO, dovrebbe essere: "qual è quello che mi consente di imparare più rapidamente e nel modo più chiaro possibile", quindi bisogna tenere conto anche degli altri strumenti utilizzati nel proprio percorso...
qualcosa di sensato ogni tanto la riesci a scrivere :rolleyes:
DioBrando
11-06-2012, 18:28
ma non hanno la stessa standard library
ma deo gratias che non sia la stessa...
In ogni caso affermare che un linguaggio è più potente di un altro così a spot non ha alcun significato ed è fuorviante per chi non lavora nel settore.
A meno che tu non lo precisi prima.
evidentemente sei rimasto fuori dall'ambiente per troppo tempo e perciò non lo sai
Evidentemente non sai di cosa stai parlando.
Mi fai un esempio, per favore, di cosa intendi per "Javascript è un protagonista della rivoluzione cloud" e di come questo si differenzi dall'uso di JS precedente?
infatti io ho elencato quelli con cui ho maggiormente a che fare
Ok, ma il vero boom riguarda il mobile.
Poi bisognerebbe anche capirsi su cosa significa citare 10 framework differenti che magari servono al medesimo scopo.
La frammentazione non è sempre un bene (anzi, secondo me non lo è mai).
Sviluppando un prodotto ed utilizzando un framework ti leghi inevitabilmente e quasi indissolubilmente ad esso.
Se questo muore o non viene più supportato o altro ancora, ne paghi le conseguenze.
Per PHP ci sono 37 framework MVC.
Ruby sostanzialmente ne ha solo uno, RoR.
ma in 10 anni nessuna microsoft ha pensato di dargli l'importanza che avrà con windows 8, ad esempio!!!
Dieci anni fa le applicazioni touch non erano certo così pervasive come lo sono ora, dieci anni fa non esistevano i servizi che ci sono ora e soprattutto, dieci anni fa, non si vendevano più dispositivi mobili che pc.
Gli strumenti ed il loro utilizzo va di pari passo con la tecnologia e le esigenze del momento.
E da dieci anni almeno Javascript è sempre stato protagonista, nel bene e nel male.
Io ho criticato solo la tua affermazione che sembrava dire "Javascript ora è in un boom di utilizzo", quando, di fatto, la sua crescita è sempre stata progressiva fin dall'inizio del nuovo millennio.
Anzi è stato il protagonista principale insieme ai nuovi linguaggi di markup e server-side.
Tutto qua.
Se poi ho frainteso il senso della tua affermazione, mea culpa.
di certo vedremo molto più javascript rispetto a prima e in posti dove prima non l'avremmo mai visto
Beh normale, basta anche solo Metro a fare la differenza :)
di certo per ms è più importante ( molto di più ) c# che c++ e lo si è visto negli ultimi anni di evoluzione di visual studio
Questa è una tua errata supposizione.
La comunità si è lamentata alcuni anni fa, è vero, ma dal punto di vista della ricerca, soprattutto, non si sono mai fermati.
Basta pensare ai miglioramenti di MinWin e delle prestazioni degli ultimi sistemi operativi MS, sono dovuti in gran parte al rework nel kernel e delle porzioni scritte in C++.
Oppure si possono citare le Parallel Extension e tutto il lavoro fatto da Luke Hoban e gli altri ragazzi del team in simbiosi soprattutto con F#.
Se ne parla poco (perché poi associare MS ad "open" da sempre abbastanza fastidio) ma ad inizio anno le specifiche per le estensioni C++Amp che vengono/verranno utilizzate soprattutto nel GPGPU computing sono state aperte e rese disponibili anche per altri prodotti che non siano il VC++ compiler.
Poi, che tutto questo sia stato poco pubblicizzato è un altro paio di maniche, ma non puoi uscirtene con "C++ è stato dimenticato ecc.", perché sono delle emerite fregnacce.
C# è il linguaggio principe della piattaforma .NET, non si discute.
Ma se abbiamo un C++11 standardizzato è opera in gran parte di Microsoft.
Questo è un fatto.
tu invece riesumo un thread di una settimana per darmi addosso? fatti una vita
Il discorso della portabilità mi interessava e sono capitato per caso nella sezione che tra l'altro non frequento da mesi.
Se dovessi correggere tutte le vaccate che vai dicendo su Microsoft&co. una vita non ce l'avrei di sicuro, questo è certo.
Come quando ogni tanto vengono fuori news sulla pratica del patent trolling e di difendere a spada tratta Google "cipiacelOSSmasolosenonsitoccailsoftwarechegenerapiurevenue" mettendo in croce Microsoft piuttosto che Apple.
Ma ho deciso scientemente di evitare le news da anni.
Per il resto fai la cortesia, resta fuori dall'ambito personale, non ti compete e non ho alcuna intenzione di discuterlo con te.
Io mi limito a riportare che ogni volta che si citi (oppure non si citi ma tu per qualche astrale motivo debba tirare in ballo) Microsoft, tu sei uno di quelli che al solito deve riportare informazioni parziali e/o superficiali.
E non mi fare tirare fuori vecchi thread perché la realtà è questa.
Lo so io, lo sai tu, lo sanno altri che frequentano il forum.
Ed è una pratica piuttosto noiosa.
Attieniti ai fatti.
qualcosa di sensato ogni tanto la riesci a scrivere :rolleyes:
Tu nemmeno ogni tanto :)
http://24.media.tumblr.com/tumblr_lts0cu3qMA1r22325o2_500.gif
Squall 94
13-06-2012, 17:35
Alla fine è diventato uno scontro di opinioni al posto di uno " scambio " :) , mi piace.
Mi accorgo che parlo con gente che ne sa a valanghe più di me e che ogni mia affermazione è buona per essere giudicata male, fatto sta che sono così tante opinioni che sono stato spinto a crederle tutte inizialmente eprchè sembravano fondate, poi sono stato io a scegliere da solo quelle corrette, un po' d'informazioni le ho reperite in giro e confrontate più volte, almeno qualcosa di buono è uscito :D .
Quando è intervenuto il moderatore !Fazz :
Squall 94 hai in testa una confusione che dire bestiale è poco?
cosa è che non ti è chiaro?
ormai te l'hanno ripetuto molte volte tutto il discorso ma sembra che tu non riesca ad afferrare le differenze tra linguaggio, compilatore editor e librerie esterne
Se permetti su questi piccoli concetti sono intervenute molte persone.
Chi la diceva uguale, chi uguale ma in maniera diversa e chi proprio la pensa al contrario.
Facendo il punto credo sia normale avere confusione in testa ma non su linguaggio, editor e compilatore.
Per le Librerie esterne forse si perchè io le utilizzo senza preoccuparmi da dove provengono ( se sono standard o no ), il mio thread era soprattutto per chiarirmi su questo fatto e mi serviva qualcuno ( non in massa :D , scherzo ) che me lo spiegasse in modo semplice.
Per questo il problema della portabilità, con librerie esterne questo è un problema e a quanto pare lo è in piccoli casi anche per quelle standard.
Grazie a tutti e non prendetevela fra di voi :D ! ! !
banryu79
14-06-2012, 13:03
Facendo il punto credo sia normale avere confusione in testa ma non su linguaggio, editor e compilatore.
Per le Librerie esterne forse si perchè io le utilizzo senza preoccuparmi da dove provengono ( se sono standard o no ), il mio thread era soprattutto per chiarirmi su questo fatto e mi serviva qualcuno ( non in massa :D , scherzo ) che me lo spiegasse in modo semplice.
Per questo il problema della portabilità, con librerie esterne questo è un problema e a quanto pare lo è in piccoli casi anche per quelle standard.
E' difficile illustrare/spiegare in modo generale e "semplice" la questione della portabilità e farne capire le implicazioni: il diavolo sta nei dettagli.
Se poi ti mancano i concetti E le esperienze di base, la difficoltà aumenta.
In questo caso è più facile fare confusione.
Secondo me, preoccuparsi specificamente di "portabilità" all'inizio del proprio percorso nella programmazione è prematuro, per tante ragioni.
Grazie a tutti e non prendetevela fra di voi :D ! ! !
Di questo non ti preoccupare: se entrerai a fare parte di questo mondo scoprirai che le "discussioni accese" spesso sono parte del divertimento :asd:
Squall 94
17-06-2012, 10:45
Bella banryn79 :D .
Si infatti è proprio questo che mi manca.
Il titolo del mio thread si riferiva principalmente al problema di un programma con interfaccia grafica che essendo fatto in C# non era possibile esportarlo su Linux perchè come mi hanno fatto notare io ho usato librerie Windows Form, in Linux non ci sono, per cui dovrei trovare librerie che possono essere utilizzate da entrambi ma non credo ci siano.
Questa era la mia preoccupazione iniziale, poi mi preoccuperò delle altre librerie e del codice da modificare, mi sono accorto che è si un bel problema ma con le conocienze che ho non posso farci nulla al momento se non aprire discussioni dove qualcuno cercherà di darmi una mano.
Per questo volevo passare a Java così da poter compilare lo stesso codice sorgente anche su Linux senza particolari problemi.
Per il momento mi limiterò a compilare su entrambe le piattaforme con programmi a riga di comando e vediamo cosa ne esce fuori, poi vedrò di buttarmi con interfacce grafiche quando ne saprò qualcosa di più :) .
pabloski
17-06-2012, 11:56
per cui dovrei trovare librerie che possono essere utilizzate da entrambi ma non credo ci siano.
per esserci ci sono e hanno pure i binding per c#
qt ad esempio è una di queste, wxd ne è un'altra, wxnet ne è un'altra ancora...tutte utilizzabili con c#...se poi vai sul c++, ce ne sono a vagonate
potresti usare mono e sviluppare sotto linux, così sei sicuro che poi girerà pure su windows
ingframin
18-06-2012, 13:21
Io credo che porsi il problema della portabilita' prima di saper scrivere Hello world sia come porsi il problema dei settaggi del motore di un'auto da corsa prima ancora di prendere la patente A.
Impara a programmare con un linguaggio qualunque!
Poi alla portabilita' e alle seghe mentali ci penserai quando si presentera' il problema! :rolleyes:
Squall 94
18-06-2012, 20:15
Io credo che porsi il problema della portabilita' prima di saper scrivere Hello world sia come porsi il problema dei settaggi del motore di un'auto da corsa prima ancora di prendere la patente A.
Impara a programmare con un linguaggio qualunque!
Poi alla portabilita' e alle seghe mentali ci penserai quando si presentera' il problema! :rolleyes:
Non sono al livello pensato da te, certo sono alla base ( gestione classi e sottoclassi ) ma visto che me lo sto ponendo ora il problema perchè non pensarci ora.
Certo ancora non incontro problemi complessi in programmazione però uno fondamentale è questo, potrei poi rimanere un pochino deluso :) .
pabloski
18-06-2012, 20:46
Certo ancora non incontro problemi complessi in programmazione però uno fondamentale è questo, potrei poi rimanere un pochino deluso :) .
Non è sbagliato il ragionamento di ingframin, perchè per apprezzare il multi platform e per capire quali sono i problemi e come vengono risolti e quindi poi decidere cosa usare, è importante incappare in quei problemi.
Ognuno di noi potrebbe dirti teoricamente quali sono i problemi, come vengono risolti, perchè questo approccio è meglio di quello, ecc... ma ti creeremmo solo confusione.
E' importante fare esperienza, per capire quali elementi compongono un framework, che nesso c'è con i linguaggi, perchè il C++ di win32 sembra diverso da quello di linux, ecc...
Chiaramente potrei consigliarti qt ( perchè piace a me e lo trovo conveniente in moltissime situazioni ed è usabile sia da c++ che da python, che sono i due linguaggi che uso di più ) e non farei male. In fondo con qt impareresti a programmare in c++ ( perchè sembri molto intressato a questo linguaggio in particolare ), creeresti applicazioni grafiche, molto belle, sofisticate e complessivamente "fatte bene". Poi potresti cominciare a guardare ad altro e quindi capire le differenze, i perchè, le problematiche.
In sostanza bisogna trovare un punto da cui iniziare e poi perderci intere giornate. Non esiste una strada facile o teorica o da "leggi il libro e hai imparato".
Poi si può discutere sui vari linguaggi, su quale sia più indicato per iniziare, quale dà maggiori skill sul fronte tecnologico e quale invece ti aiuta e facilita nello sviluppo della mentalità teorica utile a progettare il software. Ma l'importante resta cominciare e buttarcisi a capofitto.
ingframin
19-06-2012, 16:41
Non sono al livello pensato da te, certo sono alla base ( gestione classi e sottoclassi ) ma visto che me lo sto ponendo ora il problema perchè non pensarci ora.
Certo ancora non incontro problemi complessi in programmazione però uno fondamentale è questo, potrei poi rimanere un pochino deluso :) .
Allora ti do un esercizio semplice semplice da svolgere.
Prendi un linguaggio qualunque che ti consente la OOP senza sbattimenti.
Fai una rubrica telefonica:
1) Per ogni contatto tieni nome, cognome, indirizzo e numero di telefono
2) Salva e rileggi da file i dati salvati
3) Prova a farla usando liste concatenate, array, e alberi SENZA USARE QUELLI CHE TI FORNISCE LA LIBRERIA STANDARD
3.1) Implementa l'inserimento dati nelle liste concatenate sia in modo iterativo che ricorsivo
4) Implementa la funzione di ordinamento dei contatti per nome e per citta' (nel senso ordinali in ordine alfabetico dopo averli raggruppati per citta' col gruppo delle citta' sempre ordinato in ordine alfabetico)
4.1) Cambia l'algoritmo di ricerca o ordinamento in base alla struttura dati che usi, ovviamente NON USARE LA LIBRERIA STANDARD
Fatti questo esercizio in Java o in C++ o in C# o in Python o in LUA o in Pascal... in quello che vuoi.
Quando sei in grado di fare questo puoi cominciare ad andare avanti.
Finche' non sei in grado di completare questo scegli un linguaggio e risolvi questo.
Sbattersi ora con il multiplatform, la gui, la portabilita', l'ottimizzazione, ecc... e' controproducente, ti fa perdere di vista i concetti di base e non ti fa apprezzare i pregi e i difetti dei vari linguaggi.
E' come voler progettare un processore al primo anno di ing. elettronica... prima impara cosa e' un transistor!
:muro:
ingframin
19-06-2012, 16:56
Aggiungo un'altra cosa...
Questa storia della produttivita'a tempo 0 non funziona.
Se uno non si sbatte per apprendere le basi non potra' mai fare il salto di qualita'.
La differenza si vede poi sul posto di lavoro, ve lo posso assicurare.
La teoria e' importante almeno quanto la pratica e sono due cose che devono andare di pari passo.
Mettersi a smanacciare coi framework senza avere un minimo di basi e' completamente inutile, porta ad apprendere vizi e cattive pratiche che poi e' difficile perdere col tempo e soprattutto porta a non avere la percezione di quello che si fa.
Ti faccio un esempio sulla mia pelle, fresco fresco di giornata...
Sto scrivendo un programma per analizzare dei dati che acquisisco da una scheda.
Siccome va molto piano scritto in python oggi mi sono messo con tanta pazienza e l'ho riscritto in C e su 2 ore di esecuzione sai quanto ho guadagnato? Praticamente nulla perche' il problema sta nel fatto che non posso allocare un array di 34 milioni di double e quindi anche in C devo sempre giocare a saltelli coi puntatori e quindi l'algoritmo che ho "inventato" ha una complessita' altissima == il problema sta tra la sedia e la tastiera, non nel linguaggio, nel framework o nel pc.
Prima di metterti a fare cose avanzate impara bene le basi.
Capisci come funziona un calcolatore, come e' fatta la memoria, cosa succede quando scrivi "int c = 0;" su una JVM piuttosto che una CLI o un processore hardware.
Altrimenti sarai bravissimo a seguire i tutorial ma quando si trattera' di uscire dai binari sarai fregato!
Squall 94
20-06-2012, 18:28
Ottima infagrim, va bene farò la rubrica.
Voglio dire però che non sono messo così male come stai pensando.
La maggiorparte del programma lo saprei fare in C++ e C# senza troppi problemi, semmai mi rivedo un attimo qualcosa perchè non ho tutto in testa.
In Java adesso ho iniziato a vedere la sintassi ma lo farò dopo perchè di sicuro incontrerò qualche divergenza se non molte, quindi per non averle adesso vediamo di pensarci dopo.
In Phyton non ho fatto mai nulla, quindi lo lascerei per ultimo, dici che poi imparando un po anche questo, almeno finalizzato per questo programma, riuscirò a fare una scelta in questi linguaggi ? È questo che vuoi dire oppure lo devo fare solo in un linguaggio come hai detto ?
Faccio questo appena posso e posto i risultati, adesso le domande :) :
1) Io sono abituato ai file di testo, intendi un altro tipo di file ?
2) Per liste concatenate cosa intendi ? Io probabilmente userò una classe, se poi mi dici di farla strutturale quindi con una struttura va bene lo stesso però dovrò riprendere alcuni esempi :) .
3) Ricorsivo e iterativo non credo sia necessario, ma pensandoci è meglio, così mi vedo la differenza in questi linguaggi in entrambi i modi, al massimo lo commenterò e lo lascio nello stesso file così lo vedo veramente bene in parallelo.
4) Per quanto riguarda la ricerca e l'ordinamento, la ricerca ok, ma l'ordinamento l'ho sempre fatto a mano quindi non mi rimarrà difficile.
Non ho mai usato funzioni di librerie per la ricerca e l'ordinamento.
Poi ovviamente lo adatto a ogni elemento della classe se usero le classi.
ingframin
20-06-2012, 19:44
Ottima infagrim, va bene farò la rubrica.
Voglio dire però che non sono messo così male come stai pensando.
La maggiorparte del programma lo saprei fare in C++ e C# senza troppi problemi, semmai mi rivedo un attimo qualcosa perchè non ho tutto in testa.
In Java adesso ho iniziato a vedere la sintassi ma lo farò dopo perchè di sicuro incontrerò qualche divergenza se non molte, quindi per non averle adesso vediamo di pensarci dopo.
In Phyton non ho fatto mai nulla, quindi lo lascerei per ultimo, dici che poi imparando un po anche questo, almeno finalizzato per questo programma, riuscirò a fare una scelta in questi linguaggi ? È questo che vuoi dire oppure lo devo fare solo in un linguaggio come hai detto ?
Faccio questo appena posso e posto i risultati, adesso le domande :) :
1) Io sono abituato ai file di testo, intendi un altro tipo di file ?
2) Per liste concatenate cosa intendi ? Io probabilmente userò una classe, se poi mi dici di farla strutturale quindi con una struttura va bene lo stesso però dovrò riprendere alcuni esempi :) .
3) Ricorsivo e iterativo non credo sia necessario, ma pensandoci è meglio, così mi vedo la differenza in questi linguaggi in entrambi i modi, al massimo lo commenterò e lo lascio nello stesso file così lo vedo veramente bene in parallelo.
4) Per quanto riguarda la ricerca e l'ordinamento, la ricerca ok, ma l'ordinamento l'ho sempre fatto a mano quindi non mi rimarrà difficile.
Non ho mai usato funzioni di librerie per la ricerca e l'ordinamento.
Poi ovviamente lo adatto a ogni elemento della classe se usero le classi.
Fallo in tutti i linguaggi che vuoi,
basta che lo porti a termine almeno in uno.
1) Puoi usare sia i binari che i file di testo, non è importante, basta che impari che sbattimenti ci sono per l'I/O.
2) Quando dico di studiare la teoria...
- http://it.wikipedia.org/wiki/LinkedList
- http://it.wikipedia.org/wiki/Albero_%28grafo%29
- http://it.wikipedia.org/wiki/Hash_table
- e così via...
La lista sarà la classe di un contenitore che conterrà una raccolta di istanze di altri oggetti, così come le altre strutture dati che ti ho suggerito di guardare. Cerca di capire i pro e i contro di ognuna.
3) Implementarlo in entrambi i modi ti fa apprezzare cosa accade nella memoria in base all'approccio che usi. Alcuni problemi sono più facili ricorsivamente, altri lo sono iterativamente. Hai mai provato a chiederti cosa accade sullo stack quando usi un metodo ricorsivo? Sai che differenza c'è tra uno stack e una coda?
4) Prova diversi tipi di ordinamento e ricerca. Magari parti da cose facili come la ricerca binaria e l'ordinamento a bolla (o bubble sort) e poi prova altri algoritmi sia di ricerca che di ordinamento. Che differenza c'è tra provare la ricerca binaria su un array o su una lista concatenata? E l'ordinamento? Si può guadagnare qualcosa in velocità mettendo gli oggetti da ricercare in un albero invece che in una lista? E che algoritmi si usano per cercare un nodo in un albero?
Visto che non sei proprio a terra rilancio anche un poco la difficoltà dell'esercizio:
E se ti chiedessi di salvare i dati su file codificandoli secondo l'algoritmo di Huffman?
Studia, fai tanto esercizio e ti accorgerai che anche la semplice rubrica telefonica può essere un esercizio non banale da affrontare.
[Kendall]
21-06-2012, 00:37
Ottima infagrim, va bene farò la rubrica.
Voglio dire però che non sono messo così male come stai pensando.
La maggiorparte del programma lo saprei fare in C++ e C# senza troppi problemi, semmai mi rivedo un attimo qualcosa perchè non ho tutto in testa.
In Java adesso ho iniziato a vedere la sintassi ma lo farò dopo perchè di sicuro incontrerò qualche divergenza se non molte, quindi per non averle adesso vediamo di pensarci dopo.
In Phyton non ho fatto mai nulla, quindi lo lascerei per ultimo, dici che poi imparando un po anche questo, almeno finalizzato per questo programma, riuscirò a fare una scelta in questi linguaggi ? È questo che vuoi dire oppure lo devo fare solo in un linguaggio come hai detto ?
Faccio questo appena posso e posto i risultati, adesso le domande :) :
1) Io sono abituato ai file di testo, intendi un altro tipo di file ?
2) Per liste concatenate cosa intendi ? Io probabilmente userò una classe, se poi mi dici di farla strutturale quindi con una struttura va bene lo stesso però dovrò riprendere alcuni esempi :) .
3) Ricorsivo e iterativo non credo sia necessario, ma pensandoci è meglio, così mi vedo la differenza in questi linguaggi in entrambi i modi, al massimo lo commenterò e lo lascio nello stesso file così lo vedo veramente bene in parallelo.
4) Per quanto riguarda la ricerca e l'ordinamento, la ricerca ok, ma l'ordinamento l'ho sempre fatto a mano quindi non mi rimarrà difficile.
Non ho mai usato funzioni di librerie per la ricerca e l'ordinamento.
Poi ovviamente lo adatto a ogni elemento della classe se usero le classi.
Usa il linguaggio con il quale più hai pratica. Se conosci c# trovo davvero inutile e dispendioso studiarti java. Prima impara vita, morte e miracoli di quel linguaggio e poi dilettati in altro, altrimenti non saprai mai per bene un linguaggio, e ne saprai diversi in maniera mediocre. Ergo pressapoco inutile.
La lista concatenata, se ho compreso bene il concetto di ingframin, è la classica linked list presente in molti linguaggi. Il concetto è sempre quello, è una lista che conosce sempre il primo e l'ultimo dei nodi. Ogni nodo poi, di suo, conosce il precedente e il successivo (nel senso che la classe nodo ha sempre i parametri "precedente" e "successivo" che sono puntatori, o riferimenti per il c#/java che conosci, all'istanza del nodo precedente e del nodo successivo. Ne deriva che non può esistere un riferimento all'elemento i-esimo tramite indice, ma devi scorrere ogni nodo fino all'iesimo.
ingframin
21-06-2012, 08:39
;37674666']Usa il linguaggio con il quale più hai pratica. Se conosci c# trovo davvero inutile e dispendioso studiarti java. Prima impara vita, morte e miracoli di quel linguaggio e poi dilettati in altro, altrimenti non saprai mai per bene un linguaggio, e ne saprai diversi in maniera mediocre. Ergo pressapoco inutile.
La lista concatenata, se ho compreso bene il concetto di ingframin, è la classica linked list presente in molti linguaggi. Il concetto è sempre quello, è una lista che conosce sempre il primo e l'ultimo dei nodi. Ogni nodo poi, di suo, conosce il precedente e il successivo (nel senso che la classe nodo ha sempre i parametri "precedente" e "successivo" che sono puntatori, o riferimenti per il c#/java che conosci, all'istanza del nodo precedente e del nodo successivo. Ne deriva che non può esistere un riferimento all'elemento i-esimo tramite indice, ma devi scorrere ogni nodo fino all'iesimo.
Eh hai centrato in pieno. Ma per imparare la programmazione bisogna che il nostro amico non usi le linked list delle varie librerie standard ma se la implementi da solo. Una volta capito come funziona poi e' facile da implementare se manca o e' immediato capirne il funzionamento se e' gia' nella libreria.
Al corso di POO dell'universita' il professore ce la fece implementare in Java (me la chiese anche all'esame: implementa l'interfaccia List). E' un bell'esercizio che ti fa giocare con le classi, i puntatori o riferimenti, ecc...
Imparare a gestire la memoria e' importantissimo! Anche per questo suggerivo di fare un confronto tra liste, alberi e array. Inoltre il linguaggio come ho detto piu' volte non e' importante. L'importante e' sceglierne uno e portare a termine questo esercizio (e molti altri che si trovano facilmente in giro).
Partire dal difficile non va bene, e' come voler fare atletica e partire preparando la maratona... magari prima meglio fare gli 800m che poi a 42km c'e' tempo di arrivare!
Squall 94
21-06-2012, 18:22
infagrim fai atletica ? Io la facevo e ora corro giusto così :) .
Comunque credo che avrò difficoltà per il momento a fare " le liste " , perchè non le ho mai fatte e sto vedendo ora cosa sono.
Per il resto credo che farò in Java ( C# non lo voglio sentire per il discorso iniziale, se poi mi danno problemi allora sarò costretto ), in C++ ad esempio con Codeblocks mi dice che String non è dichiarato, la libreria l'ho inclusa ma non saprei.
Forse non ha la libreria " string ", si chiamerà in un altro modo ma se non sbaglio quella dovrebbe essere la standard, ho visto che appaiono altre cose qundo scrivo string, sono un po' arrugginito in C++ ma se già cominciamo con ste cavolate :) .
Spero che non stiamo andando in OT .
pabloski
21-06-2012, 18:28
Per C++ tieni sotto mano questo http://www.cplusplus.com/reference/clibrary/cstdlib/
La libreria è cstring oppure metti string.h. Vanno bene entrambe.
Forse non ha la libreria " string ", si chiamerà in un altro modo ma se non sbaglio quella dovrebbe essere la standard, ho visto che appaiono altre cose qundo scrivo string, sono un po' arrugginito in C++ ma se già cominciamo con ste cavolate :) .
Spero che non stiamo andando in OT .
è
#include <string>
std::string str;
oppure se non vuoi scrivere std:: ogni volta
#include <string>
using namespace std;
string str;
La libreria è cstring oppure metti string.h. Vanno bene entrambe.
:doh:
Sono entrambi lo stesso header di C, quello che contiene strcpy, strcat, memcpy e compagnia.
Per includere std::string di C++ serve di includere <string> e basta.
Squall 94
21-06-2012, 19:12
In effetti ho fatto " #include <string> " ma non va.
Usando DEV non mi è mai successo, ho provato maiuscolo la prima lettera, non si sa mai, ma niente.
Provo cstring, penso che farò tutto nel fine settimana, per il momento sto leggendo le cose che mi hai inviato, interessante ma è completamente nuovo per me ...
pabloski
21-06-2012, 19:21
:doh:
Sono entrambi lo stesso header di C, quello che contiene strcpy, strcat, memcpy e compagnia.
Per includere std::string di C++ serve di includere <string> e basta.
dipende dal compilatore
pabloski
21-06-2012, 19:30
In effetti ho fatto " #include <string> " ma non va.
Come ho detto, dipende dal compilatore. Ad esempio nel mio caso vado in /usr/include/c++/4.6 e trovo i file string e cstring. E sono quelli che vengono inclusi.
In alcuni compilatori possono mancare o ne manca solo uno. Varie combinazioni insomma.
Altro esempio banale. La libreria math.h ( cmath ). Nel mio caso c'è cmath ma non math, per cui posso includere solo cmath o math.h ma non math.
tomminno
21-06-2012, 21:11
dipende dal compilatore
Ma anche no, da quanto è standard il C++.
la classe string è definita nell'header "string" senza alcuna estensione.
tomminno
21-06-2012, 21:13
Altro esempio banale. La libreria math.h ( cmath ). Nel mio caso c'è cmath ma non math, per cui posso includere solo cmath o math.h ma non math.
Sarà perchè non esiste proprio "math"?
Squall 94
21-06-2012, 21:19
Ma anche no, da quanto è standard il C++.
la classe string è definita nell'header "string" senza alcuna estensione.
Cosa intendi ?
Comunque non può dipendere dal compilatore perchè le librerie sono sempre quelle, al massimo avranno nomi leggermente diversi ma non vedo il bisogno di rinominare le librerie, specialmente math e string che se non erro sono standard.
Se ogni compilatore ha le sue librerie o gli da i nomi a piacimento è un bel casino ...
Comunque credo siamo in OT, aprirò una nuova discussione per la rubrica e vedremo cosa combinerò :) .
tomminno
21-06-2012, 21:36
Cosa intendi ?
Esattamente quello che ho scritto ovvero che std::string è definita nel file "string" e non può esserci compilatore C++ che la definisca in un altro header come invece sostenuto da pabloski.
pabloski
21-06-2012, 21:49
Si è vero, ho confuso la stl del c++ con la libreria del c.
String.h appartiene al c.
String è la classe string del c++.
Cstring è un'alias di string.h per c++.
Secondo me il tuo problema è che hai detto a codeblocks che volevi creare un progetto in c e non in c++.
bender86
21-06-2012, 22:31
Comunque non può dipendere dal compilatore perchè le librerie sono sempre quelle, al massimo avranno nomi leggermente diversi ma non vedo il bisogno di rinominare le librerie, specialmente math e string che se non erro sono standard.
Il compilatore ha molta più libertà di quanto non si creda nell'implementazione delle librerie standard. Leggevo su SO qualche tempo fa che lo standard non richiede nemmeno che i vari file di inclusione string, iostream, vector... siano file fisici, finché il compilatore riesce a gestire correttamente l'inclusione. Comunque l'interfaccia delle varie classi standard è fissa e i nomi sono quelli, ma l'implementazione può essere parecchio diversa.
Si è vero, ho confuso la stl del c++ con la libreria del c.
String.h appartiene al c.
String è la classe string del c++.
Cstring è un'alias di string.h per c++.
In C e C++ c'è differenza tra maiuscole e minuscole:
"string.h" è un header C che dichiara funzioni su stringhe C-like (es. "strlen").
"string.h" è anche un header C++ che dichiara funzioni su stringhe C-like (es. "strlen") nel namespace globale e opzionalmente nel namespace "std" (quindi è leggermente diverso tra C e C++).
"cstring" è l'header C++ equivalente, che dichiara funzioni su stringhe C-like dentro il namespace "std" e opzionalmente in quello globale (quindi dovresti usare "std::strlen").
"string" è l'header C++ che definisce la classe "std::string" (cioè la classe "string" dentro il namespace "std").
La relazione tra string.h e cstring è la stessa per tutti gli header *.h => c*. Anche math.h dichiara funzioni nel namespace globale e opzionalmente nel namespace "std", e cmath viceversa. "Opzionalmente" vuol dire che dipende dal compilatore (o dalla libreria standard, se ne usi una diversa da quella fornita col compilatore).
Squall 94
23-06-2012, 19:13
Ok posso dire che siamo in OT, quindi per chiudere posso dire che non ho abbastanza esperienza per decidere questo e non devo pensare a questa sorta di problema adesso.
Seguirò il consiglio di creare una rubrica e posterò in seguito il codice, certo è che scegliendo Java e avendoci messo le mani adesso non mi è facile per niente, molto diverso da C#, ho il manuale di Java sempre con me ma a parte la sintassi, anche per il debug per farlo partire ho dovuto smanettarici un po'.
A questo punto procedo fino a quando la pazianza non mi finisce :D e posto qua se ho dei problemi, saranno soprattutto banali :D .
Mi scuso per l'OT .
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.