|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Scegliere un linguaggio più portable, senza particolari pretese
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 ![]() |
![]() |
![]() |
![]() |
#2 | |||
Senior Member
Iscritto dal: May 2001
Messaggi: 12814
|
Quote:
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. Quote:
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. 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. Quote:
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. |
|||
![]() |
![]() |
![]() |
#3 | ||||
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Una risposta più esaustiva non la potevi dare
![]() Quote:
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. Quote:
![]() Cerco proprio questa risposta. Quote:
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. Quote:
![]() Grazie per la risposta ![]()
__________________
Acquisti conclusi egregiamente con : TH4N4TOS --- Ramius83ITA Venduto a : Baio77 --- tonymax --- kris89 --- steee Ultima modifica di Squall 94 : 02-06-2012 alle 11:07. |
||||
![]() |
![]() |
![]() |
#4 | |
Bannato
Iscritto dal: May 2012
Messaggi: 7
|
Quote:
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... |
|
![]() |
![]() |
![]() |
#5 | ||||||||||||||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
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. Quote:
Quote:
Quote:
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. Quote:
Quote:
Quote:
Quote:
![]() 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 Quote:
però devi portarti dietro la virtual machine Quote:
Quote:
rispetto ad altre vm usa più memoria, ma è fuori luogo parlare di consumo di memoria al gionro d'oggi Quote:
come già detto, grazie a haxe, node.js e progetti simili, javascript si sta imponendo come linguaggio tuttofare Quote:
negli ultimi anni, ms sembra essersi allineata agli altri produttori di compilatori in ogni caso visual c++ e c++ sono identici almeno al 90% ![]() Quote:
![]() Quote:
non dico che devi provarli tutti, ma tienili a mente, perchè hanno caratteristiche interessanti |
||||||||||||||
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
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 ?? ![]() P.S. Rispondo per DarwinNE |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
dovresti programmare su mono |
|
![]() |
![]() |
![]() |
#8 | ||||
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Rispondendo a pabloski : ( non quoto per non allungare troppo il thread )
Quote:
![]() Quote:
Io so che Java consuma Ram a pacchi, si vede dalle normali applicazioni, lasciamo stare i giochi ![]() ![]() Quote:
![]() Quote:
![]() 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. |
||||
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
![]() 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 ?
__________________
Acquisti conclusi egregiamente con : TH4N4TOS --- Ramius83ITA Venduto a : Baio77 --- tonymax --- kris89 --- steee Ultima modifica di Squall 94 : 02-06-2012 alle 15:32. |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
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. |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
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 ![]() 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 a quel punto passerai a qt, che è una libreria ( anche grafica ) multipiattaforma essendo c++ .net direi di si ![]() |
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
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
![]() ![]()
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
![]() |
![]() |
![]() |
#13 | |||
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
no aspè, come sarebbe che la sintassi è differente? il c++ è standardizzato, non puoi implementarlo in maniera differente
Quote:
però se usi new e delete, si comporta esattamente come il c++ Quote:
Quote:
![]() |
|||
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
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...
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Quote:
Un programmatore può decidere di usarlo, io non ne vedo il motivo. Squall però vuole il c++ e lo vuole senza .net. |
|
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Quote:
![]()
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
|
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
![]() 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.blogs...are-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 ![]() 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 ![]() In rete ho trovato questo : Quote:
Devo fare una prova e vediamo, solo l'installazione mi durerà un'ora. |
||
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: May 2001
Messaggi: 12814
|
Quote:
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. Ultima modifica di WarDuck : 02-06-2012 alle 18:39. |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
Alla fine è l'evoluzione del C no, o no ??? ![]() Intanto che risolviamo il problema Java ![]() 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 ! |
|
![]() |
![]() |
![]() |
#20 | ||
Senior Member
Iscritto dal: Jul 2010
Città: Teramo
Messaggi: 1298
|
Quote:
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. Quote:
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.
__________________
Acquisti conclusi egregiamente con : TH4N4TOS --- Ramius83ITA Venduto a : Baio77 --- tonymax --- kris89 --- steee Ultima modifica di Squall 94 : 02-06-2012 alle 18:58. |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:04.