View Full Version : [Iniziare a Programmare]
Sono un novellino e vorrei iniziare a programmare, premetto che non conosco nulla di programmazione, da dove dovrei iniziare?
Quale libro mi consigliate e soprattutto quale linguaggio?
Saluti a tutti
cdimauro
06-04-2009, 21:41
Nella mia firma troverai LA risposta a tutte le tue domande. :cool:
_Claudio
06-04-2009, 22:00
Sono un novellino e vorrei iniziare a programmare, premetto che non conosco nulla di programmazione, da dove dovrei iniziare?
Quale libro mi consigliate e soprattutto quale linguaggio?
Saluti a tutti
Sistemi operativi, logica e molta molta matematica.
Una volta acquisite queste conoscenze... C++ e teoria delle basi di dati + SQL
Se sei interessato alla programmazione su Windows, ti consiglio di iniziare con un linguaggio ben pensato e molto documentato, come ad esempio C#.
Qui (http://alancla.110mb.com/downloads/ABCGuidaAllaProgrammazione.zip) puoi trovare una buona dispensa, molto chiara e ben scritta, da dove puoi iniziare a studiare, poi se ti prende, potrai comprare un libro per ampliare le tue conoscenze.
C/C++ vedrai ti divertirai :p
Assolutamente Python :)
E' il linguaggio più semplice ma allo stesso tempo potente e versatile che conosca. Permette di programmare usando lo stesso codice su Windows/Linux/Mac OS X/... in maniera così facile che ha fatto tornare in molti il piacere di programmare.
Ha una comunità veramente estesa ed è utilizzato praticamente in ogni ambito grazie ad una serie infinita di moduli e framework che estendono Python all'infinito:
There are currently 6224 packages here.
http://pypi.python.org/pypi
Provalo e probabilmente vedrai che non vorrai usare altro :)
Kralizek
07-04-2009, 00:21
Sistemi operativi, logica e molta molta matematica.
Una volta acquisite queste conoscenze... C++ e teoria delle basi di dati + SQL
vabbè
come fargli cambiare idea dopo 3 pagine...
~FullSyst3m~
07-04-2009, 00:22
C/C++ vedrai ti divertirai :p
Sai che è reato istigare al suicidio? :asd:
Assolutamente Python
E' il linguaggio più semplice ma allo stesso tempo potente e versatile che conosca. Permette di programmare usando lo stesso codice su Windows/Linux/Mac OS X/... in maniera così facile che ha fatto tornare in molti il piacere di programmare.
Ha una comunità veramente estesa ed è utilizzato praticamente in ogni ambito grazie ad una serie infinita di moduli e framework che estendono Python all'infinito:
There are currently 6224 packages here.
http://pypi.python.org/pypi
Provalo e probabilmente vedrai che non vorrai usare altro
Direi che rappresenta il mio pensiero :D
cdimauro
07-04-2009, 08:29
C/C++ vedrai ti divertirai :p
In effetti coi segmentation fault e i memory leak c'è sicuramente di che "divertirsi". :asd:
~FullSyst3m~
07-04-2009, 08:31
In effetti coi segmentation fault e i memory leak c'è sicuramente di che "divertirsi". :asd:
:asd:
Sono un novellino e vorrei iniziare a programmare, premetto che non conosco nulla di programmazione, da dove dovrei iniziare?
Quale libro mi consigliate e soprattutto quale linguaggio?
Saluti a tutti
Dr. Scheme (http://plt-scheme.org/) + How to Design Programs (http://www.htdp.org/2003-09-26/Book/)
yorkeiser
07-04-2009, 12:36
Java
_Claudio
07-04-2009, 12:53
vabbè
come fargli cambiare idea dopo 3 pagine...
:D :mc:
Sistemi operativi, logica e molta molta matematica.
Una volta acquisite queste conoscenze... C++ e teoria delle basi di dati + SQL
falso. Programmare è prima di tutto una cosa "tecnica", da smanettoni.
Quello che citi tu serve a dare una struttura formale alle tue conoscenze, non serve a saper programmare.
Questa roba serve a "comprendere l'informatica" che direi che esula abbastanza dalla richiesta di webbolo :asd:
yorkeiser
07-04-2009, 13:20
falso. Programmare è prima di tutto una cosa "tecnica", da smanettoni.
Quello che citi tu serve a dare una struttura formale alle tue conoscenze, non serve a saper programmare.
Questa roba serve a "comprendere l'informatica" che direi che esula abbastanza dalla richiesta di webbolo :asd:
Da quando in qua la logica e la matematica sono uscite dal bagaglio minimale di un programmatore ?
_Claudio
07-04-2009, 13:28
falso. Programmare è prima di tutto una cosa "tecnica", da smanettoni.
Quello che citi tu serve a dare una struttura formale alle tue conoscenze, non serve a saper programmare.
Questa roba serve a "comprendere l'informatica" che direi che esula abbastanza dalla richiesta di webbolo :asd:
Eh... già... hai proprio ragione. :help:
Da quando in qua la logica e la matematica sono uscite dal bagaglio minimale di un programmatore ?
Da quando il buon senso è diventato un optional nella testa dell'uomo medio.
Ovvio che ho ragione.
Mi dite nel web 2.0, nei DB, nell'uso di flash, degli script per le cose, nell'html, nei programmi gestionali...
a cosa mi servono la logica formale e la matematica?
Mi immagino quanti integrali utilizza l'interfaccia di Facebook :asd:
Per non parlare dell'uso esteso dell' operatore gradiente nei programmi per gestire gli stipendi.
Infatti io sono convinto che la maggior parte dei programmatori "moderni" se ne faccia davvero poco della matematica, o di basi di dati, o di studi teorici, e faccia meglio ad aprire la reference dello SDK che vuole usare e capire come si fa.
Però piccati nel vostro orgoglio universitario mi avete subito risposto male... cmq io non sto dicendo che quello che indicate è inutile.
Dico che è inutile ad uno che ha appena iniziato o deve iniziare... fra l'altro come autodidatta.
Non vi ha chiesto "come diventare ing. informatico" vi ha chiesto come programmare... :doh:
Solo il fatto che non si capisca la differenza mi fa pensare che il "buon senso" manchi a qualcun altro.
Quoto la firma di cdimauro, meglio iniziare dall'alto se non si segue un corso universitario....
infatti la cosa che mi ha dato fastidio era che quella sparata sulla teoria mi sapeva tanto di inutile affermazione di superiorità, dato che è evidente che uno che chiede come iniziare non sa manco di cosa si parla.
_Claudio
07-04-2009, 13:46
Ovvio che ho ragione.
Mi dite nel web 2.0, nei DB, nell'uso di flash, degli script per le cose, nell'html...
a cosa mi servono la logica formale e la matematica?
Le basi del web2.0, dei DB e degli script più complessi hanno fondamenti teorici che seguono un formalismo matematico rigorosissimo da cui non si può prescindere. Se non si conoscono questi formalismi non si riuscirà a produrre software o nuove tecnologie realmente utili e funzionanti.
Anzi io sono convinto che la maggior parte dei programmatori "moderni" se ne faccia davvero poco della matematica, o di basi di dati, o di studi teorici, e faccia meglio ad aprire la reference dello SDK che vuole usare e capire come si fa.
Difatti il mondo è pieno di gente improvvisata che fa più danni che altro.
La reference o l'SDK chiunque la apre e smanetta, ma se una persona è un professionista serio quelle cose rimangono un appendice, un mezzo per produrre, e non il fine della propria professionalità.
Ovviamente piccati nel vostro orgoglio universitario mi avete subito risposto male... cmq io non sto dicendo che quello che indicate è inutile.
Dico che è inutile ad uno che ha appena iniziato o deve iniziare... fra l'altro come autodidatta.
Non vi ha chiesto "come diventare ing. informatico" vi ha chiesto come programmare... :doh:
Solo il fatto che non si capisca la differenza mi fa pensare che "uomo medio" sia qualcun altro.
Difatti l'ing. informatico (parlo di gente che realmente sa le cose) sta a capo di chi "smanetta". L'ing. informatico serio poi se ha uno alle sue dipendenze e si accorge che è un bravissimo smanettone ma non ha alcuna base matematica lo manda a casa in tronco.
Poi a questo mondo succede di tutto, io sto parlando di realtà dove si fanno cose complesse e funzionanti, a questo mondo ho visto pure l'agente immobiliare farsi l'applicazione in Visual Basic che funzionava 1 volta su 3 ed era contento così.
Per diventare smanettoni ci vuole ben poco, per diventare affidabili e professionisti seri non si può prescindere da basi fisico/matematiche che regolano i fenomeni di ogni tipo che avvengono su questa terra.
Affideresti la tua vita ad un software per il controllo dell'assetto di volo sviluppato da un 15 enne che conosce alla perfezione 4 ambienti di sviluppo supportato dal biciclettaio dietro casa per quanto riguarda la parte modellistica?
_Claudio
07-04-2009, 13:48
Quoto la firma di cdimauro, meglio iniziare dall'alto se non si segue un corso universitario....
infatti la cosa che mi ha dato fastidio era che quella sparata sulla teoria mi sapeva tanto di inutile affermazione di superiorità, dato che è evidente che uno che chiede come iniziare non sa manco di cosa si parla.
Farebbe bene difatti a premurarsi di capire di cosa si sta parlando prima di scribacchiare codice pericoloso.
Si ma non hai capito che sono d'accordo con te :asd:
Sono parole sante, la serietà e le basi teoriche servono ad ogni buon informatico che voglia essere più di uno smanettone!
Tuttavia continui a mancare il punto..
non credo che l'OP volesse
"produrre software o nuove tecnologie realmente utili e funzionanti.", "essere un professionista serio", o fare programmi che governano l'assetto di volo di un aereo.
Nè sviluppare le basi di un framework.
Quello che dico è prima di pensare a questa roba si dovrebbe quantomeno iniziare :stordita:
La strada da intraprendere dipende dagli obiettivi che ti poni, e se uno non vuole programmare per mestiere quella proposta da te è decisamente in salita.
Difatti quello è il programma di ingegneria, mi sembra eccessivo proporlo come minimo sindacale :asd:
In ogni caso oramai webbolo è scappato quindi è inutile :asd:
yorkeiser
07-04-2009, 13:58
Da quando il buon senso è diventato un optional nella testa dell'uomo medio.
Ce l'hai con me ?
cdimauro
07-04-2009, 14:00
Siccome non ha idea di cosa significhi programmare, è proprio per questo che ho consigliato Python. In questo modo parte senza troppi traumi e concentrandosi sulle cose che gli servono realmente, senza soffermarsi spesso su dettagli inutili o, peggio, pericolosi.
Tanto alla fine, per quanto si possa consigliare il linguaggio X o il linguaggio Y, di fronte all'enorme semplicità di Python non c'è speranza per la concorrenza. :ciapet:
_Claudio
07-04-2009, 14:03
Il punto è che almeno un minimo di concezione bisogna averla, poi se già ce l'ha può tranquillamente iniziare a fare qualunque cosa.
Non gli si chiede di studiare come progettare ontologie, come creare un parsificatore discendente ecc... Ma di conoscere la semplice logica del primo ordine, di saper risolvere un'equazione o studiare una funzione.
Senza tralasciare la cosa più importante che è capire ad un livello più o meno approfondito come funziona un sistema operativo e quali sono le architetture che ci stanno dietro (es. scheduling, controllo di concorrenza, ecc...)
Questo vale sia che voglia farlo come hobby, che come professione. E chi ci guadagna non è l'etica ma lui stesso perchè così facendo si trova in mano una mappa che indica dov'è e cosa deve fare.
Poi in effetti è sparito... :muro: ...magari alla lettura della parola "matematica"... :sofico: :read:
_Claudio
07-04-2009, 14:05
Ce l'hai con me ?
Assolutamente no, e perchè mai...
Siccome non ha idea di cosa significhi programmare, è proprio per questo che ho consigliato Python. In questo modo parte senza troppi traumi e concentrandosi sulle cose che gli servono realmente, senza soffermarsi spesso su dettagli inutili o, peggio, pericolosi.
Tanto alla fine, per quanto si possa consigliare il linguaggio X o il linguaggio Y, di fronte all'enorme semplicità di Python non c'è speranza per la concorrenza. :ciapet:
Secondo me sei a libro paga di van Rossum. :p
cdimauro
07-04-2009, 14:56
Il punto è che almeno un minimo di concezione bisogna averla, poi se già ce l'ha può tranquillamente iniziare a fare qualunque cosa.
Non gli si chiede di studiare come progettare ontologie, come creare un parsificatore discendente ecc... Ma di conoscere la semplice logica del primo ordine, di saper risolvere un'equazione o studiare una funzione.
Senza tralasciare la cosa più importante che è capire ad un livello più o meno approfondito come funziona un sistema operativo e quali sono le architetture che ci stanno dietro (es. scheduling, controllo di concorrenza, ecc...)
Questo vale sia che voglia farlo come hobby, che come professione. E chi ci guadagna non è l'etica ma lui stesso perchè così facendo si trova in mano una mappa che indica dov'è e cosa deve fare.
Poi in effetti è sparito... :muro: ...magari alla lettura della parola "matematica"... :sofico: :read:
Leggiti il libro che ho in firma e dimmi se serve veramente tutto quello che hai detto per imparare a programmare (che è lo scopo per cui è nato questo thread). :fagiano:
Secondo me sei a libro paga di van Rossum. :p
Mah. In questi giorni abbiamo avuto qualche "vivace" scambio di opinioni nella mailing list. Capace che alla PyCon mi prepara un attentato. :asd:
~FullSyst3m~
07-04-2009, 15:28
Il punto è che almeno un minimo di concezione bisogna averla, poi se già ce l'ha può tranquillamente iniziare a fare qualunque cosa.
Non gli si chiede di studiare come progettare ontologie, come creare un parsificatore discendente ecc... Ma di conoscere la semplice logica del primo ordine, di saper risolvere un'equazione o studiare una funzione.
Senza tralasciare la cosa più importante che è capire ad un livello più o meno approfondito come funziona un sistema operativo e quali sono le architetture che ci stanno dietro (es. scheduling, controllo di concorrenza, ecc...)
Questo vale sia che voglia farlo come hobby, che come professione. E chi ci guadagna non è l'etica ma lui stesso perchè così facendo si trova in mano una mappa che indica dov'è e cosa deve fare.
Poi in effetti è sparito... :muro: ...magari alla lettura della parola "matematica"... :sofico: :read:
Se uno lo vuole fare come hobby non credo che si va a studiare come funziona un sistema operativo.
Mah. In questi giorni abbiamo avuto qualche "vivace" scambio di opinioni nella mailing list. Capace che alla PyCon mi prepara un attentato.
Che tipo di scambio?? :D
cdimauro
07-04-2009, 16:19
Qui (http://www.mail-archive.com/
[email protected]/msg37919.html) c'è tutto il thread. :fiufiu: :D
Mi inserisco anch'io nella discussione per non aprirne un'altra :D :D
Volevo chiedere giusto due cose. è diverso tempo che ho voglia di iniziare a programmare e in questi giorni ho avuto un manuale che usano a pisa per il C++. Ora, visto che devo iniziare dal nulla o quasi (ho solo qualche base di Pascal della scuola) che mi consigliate? Python o C++? Ho sentito dire python è facile da imparare e versatile. quali sono le differenze fra i due linguaggi? (io programmo solo per hobby, non programmi professionali)
Oltre a questo...io uso il computer da diverso tempo ma non ho mai studiato come funziona il SO e cose teoriche. Sapete mica se c'è qualche guida di media difficoltà in internet e soprattutto cosa cercare?
grassie a tutti
Mi inserisco anch'io nella discussione per non aprirne un'altra :D :D
Volevo chiedere giusto due cose. è diverso tempo che ho voglia di iniziare a programmare e in questi giorni ho avuto un manuale che usano a pisa per il C++. Ora, visto che devo iniziare dal nulla o quasi (ho solo qualche base di Pascal della scuola) che mi consigliate? Python o C++? Ho sentito dire python è facile da imparare e versatile. quali sono le differenze fra i due linguaggi? (io programmo solo per hobby, non programmi professionali)
Oltre a questo...io uso il computer da diverso tempo ma non ho mai studiato come funziona il SO e cose teoriche. Sapete mica se c'è qualche guida di media difficoltà in internet e soprattutto cosa cercare?
grassie a tutti
troverai qui grosso modo due fazioni:
1) fazione "impara un linguaggio di alto livello, possibilmente oo" (di cui faccio parte :)) .. poi fai sempre in tempo a scendere "più vicino al metallo" se ti serve/interessa ... nn sempre è necessario sapere qual'è il bit pattern di un float in memoria (giusto per fare un esempio) per scrivere un programma che assolve il suo compito, ossia risolve un problema.
2) fazione "impara il c, gestione della memoria, puntatori etc etc" perchè queste sono le basi della programmazione etc etc
personalmente ti consiglio di partire da python (o ruby, java, c#), avrai delle solide basi sui concetti Object Oriented , che pur nn essendo la panacea di tutti i mali sono , imho, un ottimo punto di partenza.
troverai qui grosso modo due fazioni:
1) fazione "impara un linguaggio di alto livello, possibilmente oo" (di cui faccio parte :)) .. poi fai sempre in tempo a scendere "più vicino al metallo" se ti serve/interessa ... nn sempre è necessario sapere qual'è il bit pattern di un float in memoria (giusto per fare un esempio) per scrivere un programma che assolve il suo compito, ossia risolve un problema.
2) fazione "impara il c, gestione della memoria, puntatori etc etc" perchè queste sono le basi della programmazione etc etc
personalmente ti consiglio di partire da python (o ruby, java, c#), avrai delle solide basi sui concetti Object Oriented , che pur nn essendo la panacea di tutti i mali sono , imho, un ottimo punto di partenza.
Visto che ci sei ti chiedo altre due cose :D
1: che versione di python mi consigli? (ho visto che ci sono più versioni ma non ne conosco la differenze)
2: ci sono valide guide per iniziare sul web?
3: che programmi mi servono :D
4: impara un linguaggio di alto livello, possibilmente oo....oo per cosa sta?
grazie per l'aiuto
Mi inserisco anch'io nella discussione per non aprirne un'altra :D :D
Volevo chiedere giusto due cose. è diverso tempo che ho voglia di iniziare a programmare e in questi giorni ho avuto un manuale che usano a pisa per il C++. Ora, visto che devo iniziare dal nulla o quasi (ho solo qualche base di Pascal della scuola) che mi consigliate? Python o C++? Ho sentito dire python è facile da imparare e versatile. quali sono le differenze fra i due linguaggi? (io programmo solo per hobby, non programmi professionali)
Oltre a questo...io uso il computer da diverso tempo ma non ho mai studiato come funziona il SO e cose teoriche. Sapete mica se c'è qualche guida di media difficoltà in internet e soprattutto cosa cercare?
grassie a tutti
Il python puoi paragonarlo ad una bella ford fiesta, il c++ ad un'auto di formula uno anni 80 alla quale hanno tolto i freni per risparmiare qualche kg di peso.
Quale è meglio per imparare a guidare?
Visto che ci sei ti chiedo altre due cose :D
1: che versione di python mi consigli? (ho visto che ci sono più versioni ma non ne conosco la differenze)
2: ci sono valide guide per iniziare sul web?
3: che programmi mi servono :D
4: impara un linguaggio di alto livello, possibilmente oo....oo per cosa sta?
grazie per l'aiuto
per le prime 3 cesare saprà darti le info :), python l'ho visto solo per conoscenza personale, per lavoro uso ruby
OO = Object Oriented
Il python puoi paragonarlo ad una bella ford fiesta, il c++ ad un'auto di formula uno anni 80 alla quale hanno tolto i freni per risparmiare qualche kg di peso.
Quale è meglio per imparare a guidare?
Brutta la ford fiesta :sofico: :sofico:
Cmq a parte scherzi ho capito il concetto. Mi mancano solo gli strumenti per partire e mi metto al lavoro <.<
~FullSyst3m~
07-04-2009, 19:01
Visto che ci sei ti chiedo altre due cose :D
1: che versione di python mi consigli? (ho visto che ci sono più versioni ma non ne conosco la differenze)
Io ti consiglio la 2.6. La 3.0 è ancora giovane e molte librerie e moduli non sono ancora disponibili per quest'ultima.
2: ci sono valide guide per iniziare sul web?
Il pensare da informatico http://www.python.it/doc/Howtothink/HowToThink_ITA.pdf.gz
3: che programmi mi servono :D
Per prima cosa ti serve un IDE. Io consiglio PyScripter e SPE per iniziare.
4: impara un linguaggio di alto livello, possibilmente oo....oo per cosa sta?
Object Oriented.
Io ti consiglio la 2.6. La 3.0 è ancora giovane e molte librerie e moduli non sono ancora disponibili per quest'ultima.
Il pensare da informatico http://www.python.it/doc/Howtothink/HowToThink_ITA.pdf.gz
Per prima cosa ti serve un IDE. Io consiglio PyScripter e SPE per iniziare.
Object Oriented.
Perfetto ^^ grazie per le risposte. Guida scaricata e ora mi scarico l'IDE. Hai mp :D :D
Brutta la ford fiesta :sofico: :sofico:
E allora prendi una Alfa Mito (C#) :sofico:
Mah. In questi giorni abbiamo avuto qualche "vivace" scambio di opinioni nella mailing list. Capace che alla PyCon mi prepara un attentato. :asd:
Non a caso ha il titolo di Benevolent Dictator for Life :D
~FullSyst3m~
08-04-2009, 01:12
Non a caso ha il titolo di Benevolent Dictator for Life :D
Ho visto che anche tu sei un emissario della fede Pythonica :D
Io ti consiglio la 2.6. La 3.0 è ancora giovane e molte librerie e moduli non sono ancora disponibili per quest'ultima.
Invece è meglio che incomincia con la 3.0. Non ha senso imparare una versione vecchia, ed inoltre per quando inizierà veramente a programmare allora le librerie saranno già uscite :)
cdimauro
08-04-2009, 08:38
Brutta la ford fiesta :sofico: :sofico:
Ehi, non offendere la mia macchina!!! :huh:
Non a caso ha il titolo di Benevolent Dictator for Life :D
Già. Ma ieri sera abbiamo appianato le divergenze. :D
Ho visto che anche tu sei un emissario della fede Pythonica :D
E che è, una cosca mafiosa, quella dei pythonisti?!? :sob:
Invece è meglio che incomincia con la 3.0. Non ha senso imparare una versione vecchia, ed inoltre per quando inizierà veramente a programmare allora le librerie saranno già uscite :)
Invece la situazione non è delle migliori. Figurati che non è uscito nemmeno mod_python per Python 2.6.
In questo momento sono dibattuto sulla versione da consigliare. La 3.0 l'adotterei subito: è STU-PEN-DA. Ma ci sono le librerie di terze parti nel mezzo che mi fanno propendere per la 2.6.
~FullSyst3m~
08-04-2009, 08:47
Invece è meglio che incomincia con la 3.0. Non ha senso imparare una versione vecchia, ed inoltre per quando inizierà veramente a programmare allora le librerie saranno già uscite :)
Si, in un mondo parallelo forse è meglio fare come dici tu.
Ehi, non offendere la mia macchina!!!
Ora so anche la tua macchina. Devo solo ottenere la tua targa e quando sarò a Catania....:stordita:
Già. Ma ieri sera abbiamo appianato le divergenze.
Hai avuto paura :D
E che è, una cosca mafiosa, quella dei pythonisti?!?
E' il primo termine che mi è venuto, stavo guardando Palermo Oggi :D
In questo momento sono dibattuto sulla versione da consigliare. La 3.0 l'adotterei subito: è STU-PEN-DA. Ma ci sono le librerie di terze parti nel mezzo che mi fanno propendere per la 2.6.
Io ho la 2.6.
Ma cosa ci trovi di stupendo nella 3.0? Cioè sono stati fatti molti cambiamenti, ma da come parli sembra che hai scoperto il santo Graal :D
cdimauro
08-04-2009, 09:25
Ci sono delle cose molto interessanti, come la possibilità di definire i set direttamente così: {1, 2, 'a'}.
Poi ci sono le set comprehension e le dict comprehension (NO COMMENT :D).
La possibilità di spacchettare tuple o liste mettendo da parte gli elementi non direttamente specificati.
Le funzioni per le quali è possibile definire di valori di default "fissi", che è possibile cambiare senza che interferiscano coi i tradizionali parametri **Keywords.
E altro che al momento non mi sovviene.
~FullSyst3m~
08-04-2009, 09:52
Ci sono delle cose molto interessanti, come la possibilità di definire i set direttamente così: {1, 2, 'a'}.
Poi ci sono le set comprehension e le dict comprehension (NO COMMENT :D).
La possibilità di spacchettare tuple o liste mettendo da parte gli elementi non direttamente specificati.
Le funzioni per le quali è possibile definire di valori di default "fissi", che è possibile cambiare senza che interferiscano coi i tradizionali parametri **Keywords.
E altro che al momento non mi sovviene.
Ma lo stai usando al momento al lavoro o in privato oppure ti tieni ancora sulla 2.6?
In questo momento sono dibattuto sulla versione da consigliare. La 3.0 l'adotterei subito: è STU-PEN-DA. Ma ci sono le librerie di terze parti nel mezzo che mi fanno propendere per la 2.6.
Ma lui sta iniziando ora da 0, per quando avrà conoscenze sufficienti ad usare librerie esterne qualcuna già sarà uscita...
Ma poi non c'è uno script python2to3? Perchè non lo usano?
Kralizek
08-04-2009, 10:21
Ci sono delle cose molto interessanti, come la possibilità di definire i set direttamente così: {1, 2, 'a'}.
Poi ci sono le set comprehension e le dict comprehension (NO COMMENT :D).
La possibilità di spacchettare tuple o liste mettendo da parte gli elementi non direttamente specificati.
Le funzioni per le quali è possibile definire di valori di default "fissi", che è possibile cambiare senza che interferiscano coi i tradizionali parametri **Keywords.
E altro che al momento non mi sovviene.
c'é qualcosa tipo Linq su Python? chiedo da ignorante eh
~FullSyst3m~
08-04-2009, 10:27
Ma lui sta iniziando ora da 0, per quando avrà conoscenze sufficienti ad usare librerie esterne qualcuna già sarà uscita...
Ma poi non c'è uno script python2to3? Perchè non lo usano?
Solo perchè parte da 0 non vuol dire che deve partire con un linguaggio che supporta pochissime librerie e moduli. Python si impara in pochissimo tempo, Python 3.0, almeno io personalmente, prima di un anno non lo userò per programmare.
Riguardo lo script la conversione, da quel che ho letto, non è una delle migliori.
Solo perchè parte da 0 non vuol dire che deve partire con un linguaggio che supporta pochissime librerie e moduli. Python si impara in pochissimo tempo, Python 3.0, almeno io personalmente, prima di un anno non lo userò per programmare.
Riguardo lo script la conversione, da quel che ho letto, non è una delle migliori.
Python si impara in poco tempo, a programmare bene si impara dopo molto tempo.
~FullSyst3m~
08-04-2009, 11:15
Python si impara in poco tempo, a programmare bene si impara dopo molto tempo.
Ovviamente, ma se vuole imparare deve smanettare oltre a studiare e al momento la 2.x gli dà più pèossibilità vista la vastità di moduli e librerie disponibili.
_Claudio
08-04-2009, 11:41
Visto che vi bisticciate tanto tra 2.6 e 3.0... meglio se si compra il libro dello Stroustrup e inizia con una ferrari senza freni che tanto non servono perchè col C++ non esistono curve!!!
:D :sofico:
mindwings
08-04-2009, 12:00
Visto che vi bisticciate tanto tra 2.6 e 3.0... meglio se si compra il libro dello Stroustrup e inizia con una ferrari senza freni che tanto non servono perchè col C++ non esistono curve!!!
:D :sofico:
Solo salite! :D :sofico:
_Claudio
08-04-2009, 12:16
Solo salite! :D :sofico:
Eh... già ma arrivati in alto sai che panorama "stupendo"... altro che linguaggi da sottobosco...
banryu79
08-04-2009, 12:37
Eh... già ma arrivati in alto sai che panorama "stupendo"... altro che linguaggi da sottobosco...
Vero, però ci voglio 10 anni di pratica :)
E' un po' come praticare il kung fu.
Vero, però ci voglio 10 anni di pratica :)
E' un po' come praticare il kung fu.
e allora siano pure 10 anni ma noi quel tramonto stupendo lo vogliamo vedere :D
||ElChE||88
08-04-2009, 12:51
Eh... già ma arrivati in alto sai che panorama "stupendo"
http://img18.picoodle.com/img/img18/3/4/8/elche/f_panoramam_779f7bd.png
~FullSyst3m~
08-04-2009, 13:09
http://img18.picoodle.com/img/img18/3/4/8/elche/f_panoramam_779f7bd.png
:rotfl:
banryu79
08-04-2009, 13:23
e allora siano pure 10 anni ma noi quel tramonto stupendo lo vogliamo vedere :D
Chiaro, basta esserne consci e dirlo a chi vuole partire da zero :)
Chiaro, basta esserne consci e dirlo a chi vuole partire da zero :)
eppure guarda, noi in terza superiore siamo partiti con il C in informatica e assembly in sistemi :stordita:
_Claudio
08-04-2009, 13:28
http://img18.picoodle.com/img/img18/3/4/8/elche/f_panoramam_779f7bd.png
Beh... sì... per chi non lo sa usare è un suicidio in un dirupo pieno di eccezioni ed errori...
~FullSyst3m~
08-04-2009, 13:37
Beh... sì... per chi non lo sa usare è un suicidio in un dirupo pieno di eccezioni ed errori...
Non bisogna però nemmeno dire che sia il miglior linguaggio del mondo. La maggior parte delle cose che si fanno con il C si fanno anche con altri linguaggi.
_Claudio
08-04-2009, 13:47
Non bisogna però nemmeno dire che sia il miglior linguaggio del mondo. La maggior parte delle cose che si fanno con il C si fanno anche con altri linguaggi.
Certo che no... ma quando sono state fatte col C non erano fattibili con altri linguaggi... spesso perchè altri linguaggi non esistevano neppure...
Poi è arrivato il C++ in contemporanea al paradigma OO e ancora una volta altri linguaggi di coda...
Non è il migliore in assoluto, anzi trovo il C++ verboso, empirico e oltremodo complesso, ma sicuramente è il più potente.
Il C secondo me ha fatto il suo tempo, nonostante i tentativi disperati di vari standard recenti rimane troppo grezzo per i metodi e i paradigmi attuali.
||ElChE||88
08-04-2009, 13:50
Non bisogna però nemmeno dire che sia il miglior linguaggio del mondo.
Ma infatti... non esiste un linguaggio migliore in tutto.
Purtroppo non tutti lo hanno capito e si ostinano ad usare il linguaggio che considerano migliore anche per cose a cui non è adatto (pensa che per un progetto universitario sull'intelligenza artificiale c'è gente che ha insistito ad usare C e C++ invece di Scheme e Prolog - non puoi immaginare che fallimento. :asd:).
~FullSyst3m~
08-04-2009, 13:51
Ma infatti... non esiste un linguaggio migliore in tutto.
Purtroppo non tutti lo hanno capito e si ostinano ad usare il linguaggio che considerano migliore anche per cose a cui non è adatto (pensa che per un progetto universitario sull'intelligenza artificiale c'è gente che ha insistito ad usare C e C++ invece di Scheme e Prolog - non puoi immaginare che falimento. :asd:).
Si, infatti. E' quello che voglio dire anch'io. Non si può mitizzare un linguaggio dicendo: questo ti porterà alla salvezza, gli altri fanno schifo.
...ma sicuramente è il più potente.
A me sto concetto di 'potenza' continua a sfuggire...
~FullSyst3m~
08-04-2009, 14:04
A me sto concetto di 'potenza' continua a sfuggire...
Quoto.
_Claudio
08-04-2009, 14:08
A me sto concetto di 'potenza' continua a sfuggire...
Se vuoi un risvolto immediato basta notare che praticamente tutto ciò che usi su un pc con qualsiasi sistema operativo ha le componenti base fatte in C/C++, tutti gli strumenti di modellistica sono implementati in C/C++, quasi tutti i linguaggi di programmazione traggono ispirazione e seguono la strada battuta dal C/C++. Col C/C++ si sono create molte cose per la prima volta.
I compilatori di pressochè ogni linguaggio sono implementati in C/C++.
I sistemi operativi stessi sono fatti in C/C++...
...potrei continuare...
Se vuoi un risvolto immediato basta notare che praticamente tutto ciò che usi su un pc con qualsiasi sistema operativo ha le componenti base fatte in C/C++, tutti gli strumenti di modellistica sono implementati in C/C++, quasi tutti i linguaggi di programmazione traggono ispirazione e seguono la strada battuta dal C/C++. Col C/C++ si sono create molte cose per la prima volta.
I compilatori di pressochè ogni linguaggio sono implementati in C/C++.
I sistemi operativi stessi sono fatti in C/C++...
...potrei continuare...
Meh.
Tu mi fai vedere che l'uso di C/C++ (C direi da quello che elenchi, più che C++) è molto rilevante, storicamente parlando. Questo è un discorso.
Il fatto che sia molto diffuso, non mi dice molto in termini di 'potenza'. Vorrei una definizione, una volta tanto, perchè non capisco ciò di cui stiamo parlando.
Quando poi dici "quasi tutti i linguaggi di programmazione traggono ispirazione e seguono la strada battuta dal C/C++" rimango oltremodo perplesso. Se ti riferisci a Java/C#, le somiglianze con C/C++ sono solo a livello sintattico (la semantica è molto diversa, C++ non gira su una virtual machine, non ha garbage collector, ecc...), e a quel punto mi vien da dire che "tutti i linguaggi" seguano più la strada battuta da ALGOL, che C/C++. Perchè parliamo solo di sintassi.
Posto che "tutti i linguaggi" non sono tutti i linguaggi. Te ne potrei citare dozzine che con C/C++ non c'entrano niente di niente, nemmeno a livello sintattico. E non parlo di linguaggi esoterici stile brainfuck o whitespace.
_Claudio
08-04-2009, 14:28
Meh.
Tu mi fai vedere che l'uso di C/C++ (C direi da quello che elenchi, più che C++) è molto rilevante, storicamente parlando. Questo è un discorso.
Il fatto che sia molto diffuso, non mi dice molto in termini di 'potenza'. Vorrei una definizione, una volta tanto, perchè non capisco ciò di cui stiamo parlando.
Quando poi dici "quasi tutti i linguaggi di programmazione traggono ispirazione e seguono la strada battuta dal C/C++" rimango oltremodo perplesso. Se ti riferisci a Java/C#, le somiglianze con C/C++ sono solo a livello sintattico (la semantica è molto diversa, C++ non gira su una virtual machine, non ha garbage collector, ecc...), e a quel punto mi vien da dire che "tutti i linguaggi" seguano più la strada battuta da ALGOL, che C/C++. Perchè parliamo solo di sintassi.
Posto che "tutti i linguaggi" non sono tutti i linguaggi. Te ne potrei citare dozzine che con C/C++ non c'entrano niente di niente, nemmeno a livello sintattico. E non parlo di linguaggi esoterici stile brainfuck o whitespace.
Certamente... più C che C++ perchè C++ è relativamente giovane... ma un linguaggio che cos'è se non quei 2 o 3 paradigmi e la sua sintassi? La semantica poco conta visto che poi come vengono implementati e come "girano" è un aspetto che esula dal loro utilizzo e dalle loro capacità.
Il fatto che Java o altri giri su VM dice ben poco circa il suo scostamento a livello concettuale rispetto C++.
Purtroppo però ALGOL (vero progenitore di pressochè tutto) ha avuto una diffusione molto molto limitata a programmi di calcolo scientifico, chi è stato poi di ispirazione e ha fatto da propulsore per la creazione di altri linguaggi è stato il C.
Citameli altri linguaggi... ma che siano linguaggi di elevata diffusione, perchè altrimenti parliamo di tutto e niente.
^TiGeRShArK^
08-04-2009, 14:58
Beh... sì... per chi non lo sa usare è un suicidio in un dirupo pieno di eccezioni ed errori...
anche per chi lo sa usare. :)
Citameli altri linguaggi... ma che siano linguaggi di elevata diffusione, perchè altrimenti parliamo di tutto e niente.
Comincio dalla fine, perchè credo di aver capito il tuo punto. Se mi dici cosi, stai dicendo che la qualità di un qualcosa si misura con la sua diffusione.
E' come dire che Britney Spears è più valida di Bach perchè c'è più gente che la ascolta. Questo non è un assioma che posso prendere come valido, quindi non penso che la discussione arriverà da qualche parte.
Comunque, assumo che tu per 'potenza' intenda 'diffusione', a meno che tu non mi fornisca un'altra definizione, che finora non ho visto (io poi volevo capire solo quello).
Certamente... più C che C++ perchè C++ è relativamente giovane... ma un linguaggio che cos'è se non quei 2 o 3 paradigmi e la sua sintassi? La semantica poco conta visto che poi come vengono implementati e come "girano" è un aspetto che esula dal loro utilizzo e dalle loro capacità.
Il fatto che Java o altri giri su VM dice ben poco circa il suo scostamento a livello concettuale rispetto C++.
Credo sia un discorso complesso questo, e non credo di essere la persona adatta per affrontarlo con la profondità che merita.
La semantica conta eccome, perchè il fatto che si assuma l'esistenza di un garbage collector non esula "dall'utilizzo e dalle capacità" di Java, per esempio. Cosi come vale il contrario per C++, dato che c'è almeno un paradigma (non sono proprio un manico in C++) che si basa proprio sulla gestione manuale della memoria per il suo funzionamento (RAII).
In realtà, ti direi che un linguaggio è molto di più della sua sintassi (o molto meno). Ma dovresti avere a che fare con qualche linguaggio che ha una sintassi estendibile per farmi capire. Ti parlo di un tipo di linguaggio dove 'if' o 'while' non sono parole chiave, ma tu puoi aggiungere tutte le "parole chiave" che credi necessarie, e i paradigmi che credi necessari (OO, funzionale, dataflow, ecc...). Se la sintassi è estendibile, cos'è il linguaggio? E' solo la sintassi esistente più quei 2 o 3 paradigmi o qualcos'altro?
Ma soprattutto, per tornare in tema, che cos'è la "potenza" di un linguaggio?
^TiGeRShArK^
08-04-2009, 15:00
Certamente... più C che C++ perchè C++ è relativamente giovane... ma un linguaggio che cos'è se non quei 2 o 3 paradigmi e la sua sintassi? La semantica poco conta visto che poi come vengono implementati e come "girano" è un aspetto che esula dal loro utilizzo e dalle loro capacità.
Il fatto che Java o altri giri su VM dice ben poco circa il suo scostamento a livello concettuale rispetto C++.
Purtroppo però ALGOL (vero progenitore di pressochè tutto) ha avuto una diffusione molto molto limitata a programmi di calcolo scientifico, chi è stato poi di ispirazione e ha fatto da propulsore per la creazione di altri linguaggi è stato il C.
Citameli altri linguaggi... ma che siano linguaggi di elevata diffusione, perchè altrimenti parliamo di tutto e niente.
ruby, python, visual basic, ada, matlab...
e questi sono solo i primi che mi sono venuti in mente di getto :asd:
yorkeiser
08-04-2009, 15:44
Ma soprattutto, per tornare in tema, che cos'è la "potenza" di un linguaggio?
Forse per potenza l'utente intendeva il fatto che il C è un linguaggio di livello nettamente più basso rispetto a quelli prevalenti oggi. Prova te a fare un driver per una periferica in Java o C# :) In quel senso, il C è un linguaggio che permette di scrivere un maggior numero di applicazioni (nel senso di tipologie di applicazioni), e quindi più potente, perchè un'applicazione Java la puoi scrivere sempre in C (che poi spesso non sia conveniente, è un altro discorso), mentre il contrario non è vero.
Resta il fatto che, come già sottolineato da qualcuno, la scelta di un linguaggio deve essere fatta in base all'applicazione che si vuole scrivere: neanch'io, pur essendo affezionato al C per ragioni storiche, mi metterei mai a scrivere un gestionale in c nel 2009, dal momento che al giorno d'oggi ci sono linguaggi che ti permettono di ottenere gli stessi risultati con un quarto dello sforzo e un decimo del tempo. Ma secondo me è sbagliato confrontare il C con C#, o con Java, o con Python, stiamo parlando di linguaggi afferenti ad ambiti totalmente diversi (e aggiungerei che il C è uscito "qualche" annetto prima)
Forse per potenza l'utente intendeva il fatto che il C è un linguaggio di livello nettamente più basso rispetto a quelli prevalenti oggi. Prova te a fare un driver per una periferica in Java o C# :)
Ok, quindi stiamo dicendo anche che C è più "potente" di C++ perchè in C puoi scrivere un device driver e in C++ no (almeno non in linux, e neanche in windows da quanto ne so). Ho capito bene?
^TiGeRShArK^
08-04-2009, 15:56
Ok, quindi stiamo dicendo anche che C è più "potente" di C++ perchè in C puoi scrivere un device driver e in C++ no (almeno non in linux, e neanche in windows da quanto ne so). Ho capito bene?
in C++ teoricamente si a quanto ricordo, ma i risultati potrebbero essere imprevedibili a detta della MS :asd:
per maggiori informazioni dovresti chiedere a 71104 che lui si divertiva "per hobby" con queste cose :asd:
yorkeiser
08-04-2009, 16:04
Ok, quindi stiamo dicendo anche che C è più "potente" di C++ perchè in C puoi scrivere un device driver e in C++ no (almeno non in linux, e neanche in windows da quanto ne so). Ho capito bene?
L'espressione "potente" non l'ho utilizzata io, provavo solo a disquisire sul significato che ne dava l'utente _Claudio. Comunque, in generale, dal punto di vista della tipologia di applicazioni teoricamente sviluppabili, direi che un linguaggio di livello più basso è sempre più potente di uno di alto livello. Quindi il c stesso sarebbe meno potente dell'assembly. Poi per "potenza" di un linguaggio possiamo anche intendere un nugolo di altre caratteristiche, e va da sè che allora il c prenderebbe sonore batoste da controparti più o meno recenti.
slartibartfast
08-04-2009, 16:16
Ok, quindi stiamo dicendo anche che C è più "potente" di C++ perchè in C puoi scrivere un device driver e in C++ no (almeno non in linux, e neanche in windows da quanto ne so). Ho capito bene?
Ovviamente, più si scende di livello e più potere si ha.
Il linguaggio più potente è sicuramente l'assembly, con quello ci si scrivono i bios ma nulla vieta (a parte il buon senso) di scriverci applicativi comuni.
A me sto concetto di 'potenza' continua a sfuggire...
Beh la "potenza" di un linguaggio è la capacità di risolvere un problema in poco tempo (espressività) e nei dettagli (controllo fine-grained), in maniera chiara.
E' da notare che la finezza del controllo decresce con l'espressività, perchè per creare comandi che svolgano compiti ad alto livello spesso devi partire da presupposti che escludono qualche possibilità.
ES: Java che manda alle ortiche l'intera gestione della memoria.
Quindi ASM non è potente come è stato detto, perchè l'espressività sta ai minimi storici :asd:
Infatti un uomo per risolvere un problema in ASM ci mette molto più che a risolverlo in C++.
Il C++ è "potente" perchè equilibra abbastanza le 3 necessità, e sapendolo usare ci sono poche cose che non puoi farci... puoi creare costrutti di livello decisamente alto (e anche altri linguaggi), ma che si basano direttamente su roba low-level.
E in realtà è anche decisamente flessibile, a saperlo usare... per quanto purtroppo bisogna conviere con i suoi limiti...
E' vero che i linguaggi moderni sono più potenti a volte del C++, perchè riescono a fare cose impensabili, ma è anche vero che ci sono ambiti in cui sono inefficaci... per esempio nella gestione della memoria.
Perchè tutti i linguaggi moderni odiano i pointers?
Per me sono uno dei maggiori vantaggi di C++...
banryu79
08-04-2009, 16:58
E' vero che i linguaggi moderni sono più potenti a volte del C++, perchè riescono a fare cose impensabili, ma è anche vero che ci sono ambiti in cui sono inefficaci...
Il che ci porta al nocciolo della questione: chiedere all'utente che ha aperto il thread perchè vuole imparare a programmare, ovvero se ha qualche obiettivo in particolare o almeno una vaga idea del dove vuole andare a parare.
Perchè se viene fatto per purà curiosità intelletuale senza nessun'altra considerazione potrebbe benissimo scegliere un linguaggio a caso, anche se indubbiamente la vasta pletora di linguaggi esistenti è ordinabile secondo diversi criteri (espressività, semplicità di apprendimento) che potrebbero essere considerati favorevolmente anche dall'hobbista.
E' quello che ho detto all'inizio del thread :asd:
Se è un hobbista può scegliere quello che preferisce!
Ovviamente a seconda della scelta cambia anche il linguaggio, cioè, se uno è interessato al web direi java+javascript, o flash.
Se uno vuole sapere "come funzionano le cose" o fare grafica C++; sennò ecc ecc...
Ovvio che la "capacità di risolvere i problemi" dipende un bel pò dai problemi che devi risolvere ;)
~FullSyst3m~
08-04-2009, 18:37
in C++ teoricamente si a quanto ricordo, ma i risultati potrebbero essere imprevedibili a detta della MS :asd:
per maggiori informazioni dovresti chiedere a 71104 che lui si divertiva "per hobby" con queste cose :asd:
Non immagino che faceva per lavoro :D
E' quello che ho detto all'inizio del thread
Se è un hobbista può scegliere quello che preferisce!
Ovviamente a seconda della scelta cambia anche il linguaggio, cioè, se uno è interessato al web direi java+javascript, o flash.
Se uno vuole sapere "come funzionano le cose" o fare grafica C++; sennò ecc ecc...
Ovvio che la "capacità di risolvere i problemi" dipende un bel pò dai problemi che devi risolvere
La capacità di risolvere problemi non c'entra nulla con il linguaggio. Anzi, se iniziasse con C credo che si dovrebbe preoccupare di tutto tranne che del problema da risolvere.
Anche se vuole imparare per hobby credo che qualcosa voglia riuscire a crearla, se inizia con qualche linguaggio ostico o che non porta risultati in tempi brevi passerà ad un altro hobby.
Poi mi chiedo: come è possibile che in ogni discussione si sfocia nella diatriba dei linguaggi? Il più potente, il più facile, il più veloce ecc.
Nel 2009 sti discorsi non dovrebbero nemmeno esistere. Il C/C++ ha fatto il suo tempo, per determinate applicazioni è fondamentale, ma guardiamoci attorno: abbiamo linguaggi con gli attributi: Python. Ruby, Java, C#. Bisognerebbe un pò guardare in faccia la realtà è capire che la cosa importante è riuscire a risolverli i problemi. E se un linguaggio che non è C li risolve egregiamente perchè mai allora dobbiamo andare a finire al solito discorso: si, ma C è più potente? E dai ;)
E chi ha mai parlato di C :asd:
Il C fa schifo.
Il C++ al contrario non è vecchio per niente, ed è decisamente più maturo di tutti gli altri.
Mica si possono buttare al secchio 20 anni di software perchè son vecchi insomma :asd:
mindwings
08-04-2009, 18:48
Comincio dalla fine, perchè credo di aver capito il tuo punto. Se mi dici cosi, stai dicendo che la qualità di un qualcosa si misura con la sua diffusione.
E' come dire che Britney Spears è più valida di Bach perchè c'è più gente che la ascolta. Questo non è un assioma che posso prendere come valido, quindi non penso che la discussione arriverà da qualche parte.
Comunque, assumo che tu per 'potenza' intenda 'diffusione', a meno che tu non mi fornisca un'altra definizione, che finora non ho visto (io poi volevo capire solo quello).
Credo sia un discorso complesso questo, e non credo di essere la persona adatta per affrontarlo con la profondità che merita.
La semantica conta eccome, perchè il fatto che si assuma l'esistenza di un garbage collector non esula "dall'utilizzo e dalle capacità" di Java, per esempio. Cosi come vale il contrario per C++, dato che c'è almeno un paradigma (non sono proprio un manico in C++) che si basa proprio sulla gestione manuale della memoria per il suo funzionamento (RAII).
In realtà, ti direi che un linguaggio è molto di più della sua sintassi (o molto meno). Ma dovresti avere a che fare con qualche linguaggio che ha una sintassi estendibile per farmi capire. Ti parlo di un tipo di linguaggio dove 'if' o 'while' non sono parole chiave, ma tu puoi aggiungere tutte le "parole chiave" che credi necessarie, e i paradigmi che credi necessari (OO, funzionale, dataflow, ecc...). Se la sintassi è estendibile, cos'è il linguaggio? E' solo la sintassi esistente più quei 2 o 3 paradigmi o qualcos'altro?
Ma soprattutto, per tornare in tema, che cos'è la "potenza" di un linguaggio?
Smalltalk e Lisp...(purtroppo parlo da profano :doh: )
mindwings
08-04-2009, 19:02
E chi ha mai parlato di C :asd:
Il C fa schifo.
Il C++ al contrario non è vecchio per niente, ed è decisamente più maturo di tutti gli altri.
Mica si possono buttare al secchio 20 anni di software perchè son vecchi insomma :asd:
Anche se la soluzione di un problema e' piu' efficiente in C++, ci sono altri fattori da considerare... C++ e' moooolto piu' verboso e vicino al metallo di tanti altri linguaggi, cio' implica che e' molto piu' difficile far manutenzione, infatti costa piu' fatica e tempo. Il tempo di un programmatore e' piu' prezioso del tempo della macchina, nessuno mi vieta di acquistare hardware piu' performante per migliorare l'efficienza. Proprio perche' C++ e' poco espressivo e' difficile distrubuire su piu' core la computazione:fagiano:
Giusto per gradire... (http://eigenclass.org/hiki/widefinder2-conclusions)
Un'altro ambito da considerare e' il livello applicativo... Se dovessi sviluppare un engine 3d non posso prescindere dall'utilizzare il C++...
Tornando a bomba, un ragazzo che si avvicina la prima volta alla programmazione deve imparare i rudimenti... Gestire la memoria mi
pare un task piu' avanzato...
_Claudio
08-04-2009, 19:30
ruby, python, visual basic, ada, matlab...
e questi sono solo i primi che mi sono venuti in mente di getto :asd:
Ruby è usato dal 3% degli sviluppatori nonostante lo trovo anche io geniale come linguaggio soprattutto per il fatto di aver per la prima volta tradotto nella pratica le parole chiave e le operazioni anche complesse che si possono compiere in una sintassi il più possibile vicino al linguaggio naturale.
phyton deriva anche lui molti concetti dal C++ anche se deriva da ABC se ricordo bene, diciamo che li estende egregiamente, ma non è nato dal nulla...
Visual Basic e C# è traducibile in IL al 100% e fuori dal CLR non si esce...
ADA è superato e non è mai stato molto usato.
Matlab è troppo specifico.
In teoria poi in C/C++ si possono creare le parole chiave che si vogliono (usando banalissime macro), a livello sintattico permette tutte le operazioni concettuali base (teorema Jacopini Bohm e derivati) e quindi.
Quello che intendo come "potenza" è il fatto che tutti i concetti che sottointendono alla moderna programmazione hanno visto la luce e grossa diffusione solo grazie al C e al C++, forse è un termine inappropriato detto così ma se considerate che è per forza di cose il più maturo su praticamente ogni aspetto. Poi è ovvio che un problema può venir risolto molto più facilmente con altro, ma non si può levare al C/C++ il fatto di essere un bilanciamento quasi perfetto tra espressività, possibilità di agire a basso livello e leggibilità. Nonostante abbia i suoi grossi difetti, non è un purismo... ma l'esperienza insegna che i purismi non portano mai a grossi risultati.
Ognuno poi preferisce il proprio linguaggio e con questo risolve i problemi che gli si presentano.
Per quanto riguarda gli aspetti semantici di un linguaggio la sua "potenza" insisto nel dire che prescinde da come è stato implementato, altrimenti a parità di vocabolario e paradigmi implementati un linguaggio cambierebbe in base alla macchina su cui viene usato (e questo è vero solo in casi veramente troppo particolari da pesare significativamente su ciò che sostengo)
cdimauro
08-04-2009, 20:32
Ma lo stai usando al momento al lavoro o in privato oppure ti tieni ancora sulla 2.6?
A lavoro uso la 2.5, a casa lavoro sulla 2.6 (causa progetto per la PyCon). La 3.0 non l'ho nemmeno scaricata perché mi piange il cuore soltanto a pensare che la scarsa disponibilità di librerie di terze parti m'inpedirà di metterci le mani per parecchio tempo ancora.
Ma lui sta iniziando ora da 0, per quando avrà conoscenze sufficienti ad usare librerie esterne qualcuna già sarà uscita...
La situazione purtroppo non è rosea. Ecco perché per il momento consiglierei la 2.6. E questo te lo dico a malincuore.
Ma poi non c'è uno script python2to3? Perchè non lo usano?
Perché fornisce soltanto una bozza, che devi comunque prendere e modificare a mano.
Tra l'altro per le librerie di terze parti che utilizzano il C, sono cambiate anche le API per l'estensione (e l'embedding), quindi c'è del lavoro in più da fare.
c'é qualcosa tipo Linq su Python? chiedo da ignorante eh
Da ignorante ti rispondo che non lo so. :D
Ma implementarlo in Python facendo ricorso all'overloading degli operatori non dovrebbe essere difficile. Già da qualche tempo mi frulla in testa qualcosa del genere, ma per il momento ho ben altro da fare.
eppure guarda, noi in terza superiore siamo partiti con il C in informatica e assembly in sistemi :stordita:
Io invece con Turbo Pascal e assembly. Ma sapevo già programmare.
Poi è arrivato il C++ in contemporanea al paradigma OO e ancora una volta altri linguaggi di coda...
Il paradigma OO è arrivato MOOOOOLTO prima del C++.
Non è il migliore in assoluto, anzi trovo il C++ verboso, empirico e oltremodo complesso, ma sicuramente è il più potente.
Su questo t'hanno già risposto gli altri, con cui mi accordo.
Non esiste alcuna definizione oggettiva di linguaggio di programmazione "potente".
Se vuoi un risvolto immediato basta notare che praticamente tutto ciò che usi su un pc con qualsiasi sistema operativo ha le componenti base fatte in C/C++,
Adesso sì, ma tempo fa erano di moda altri linguaggi per questo scopo.
Il C è nato dal BCPL, ad esempio, linguaggio nato per impieghi sistemistici, appunto.
tutti gli strumenti di modellistica sono implementati in C/C++,
E il Fortran dove lo mettiamo? E Prolog? E Lisp? E Matlab?
quasi tutti i linguaggi di programmazione traggono ispirazione e seguono la strada battuta dal C/C++.
Fortunatamente no, altrimenti sai che palle avere a che fare con quest'orrida sintassi.
Col C/C++ si sono create molte cose per la prima volta.
Cosa? Perché se prendiamo il C non ha portato NESSUNA innovazione nell'ambito dei linguaggi di programmazione. Nessuna.
Il C++ ha riciclato diversi strumenti e/o idee già presenti in altri linguaggi, anche se gli riconosco che li ha migliorati ed estesi (ad esempio prendiamo il concetto di classi virtuali, sebbene quasi mai usate).
I compilatori di pressochè ogni linguaggio sono implementati in C/C++.
Anche per questo, fortunatamente non è così.
Anzi, in genere quando si realizza un nuovo linguaggio la sfida successiva consiste nell'implementare il compilatore nel linguaggio stesso (si parla di "self compiling").
I sistemi operativi stessi sono fatti in C/C++...
A parte che da prima ancora che esistessero C e C++, esistevano s.o. e non erano fatti in C/C++, hai mai sentito parlare di Singularity?
...potrei continuare...
Continua pure, ma la storia dell'informatica non è dalla tua parte.
A meno che non circoscrivi la storia a quella più recente, e allora non ho difficoltà ad affermare che C/C++ sono i linguaggi più usati in ambito sistemistico. Anche se non sono i soli, appunto.
Ok, quindi stiamo dicendo anche che C è più "potente" di C++ perchè in C puoi scrivere un device driver e in C++ no (almeno non in linux, e neanche in windows da quanto ne so). Ho capito bene?
Tolto il C99, che è ben poco usato, il C++ è un superset del C, quindi può fare almeno le stesse cose.
Ovviamente, più si scende di livello e più potere si ha.
Il linguaggio più potente è sicuramente l'assembly, con quello ci si scrivono i bios ma nulla vieta (a parte il buon senso) di scriverci applicativi comuni.
In tal caso il linguaggio "più potente" è sicuramente quello macchina.
Anche se la soluzione di un problema e' piu' efficiente in C++, ci sono altri fattori da considerare... C++ e' moooolto piu' verboso e vicino al metallo di tanti altri linguaggi, cio' implica che e' molto piu' difficile far manutenzione, infatti costa piu' fatica e tempo. Il tempo di un programmatore e' piu' prezioso del tempo della macchina, nessuno mi vieta di acquistare hardware piu' performante per migliorare l'efficienza. Proprio perche' C++ e' poco espressivo e' difficile distrubuire su piu' core la computazione:fagiano:
Giusto per gradire... (http://eigenclass.org/hiki/widefinder2-conclusions)
Un'altro ambito da considerare e' il livello applicativo... Se dovessi sviluppare un engine 3d non posso prescindere dall'utilizzare il C++...
Tornando a bomba, un ragazzo che si avvicina la prima volta alla programmazione deve imparare i rudimenti... Gestire la memoria mi
pare un task piu' avanzato...
E' interessante considerare che nell'esempio di cui hai fornito il link le soluzioni basate su linguaggi dinamici hanno prestazioni di tutto rispetto confrontate con quelle del C++, ma ovviamente con un'implementazione molto più corta e semplice.
Ruby è usato dal 3% degli sviluppatori nonostante lo trovo anche io geniale come linguaggio soprattutto per il fatto di aver per la prima volta tradotto nella pratica le parole chiave e le operazioni anche complesse che si possono compiere in una sintassi il più possibile vicino al linguaggio naturale.
Oddio. Certi costrutti di "naturale" hanno ben poco.
phyton deriva anche lui molti concetti dal C++
Ma proprio no. Il punto è che il C++ ha introdotto ben poco come innovazioni nella letteratura informatica che riguarda i linguaggi di programmazione. Il C, invece, non ha fornito proprio nulla.
Il concetto di programmazione strutturata preesisteva. Quello di programmazione funzionale pure. Quello di programmazione a oggetti idem con patate.
Il concetto di iteratore apparteva già alla programmazione funzionale.
Cos'è che Python avrebbe derivato dal C++? La programmazione a oggetti con ereditarietà multipla? Bene, la cosa si ferma lì, anche perché l'implementazione non c'entra proprio nulla.
anche se deriva da ABC se ricordo bene,
Sì.
diciamo che li estende egregiamente, ma non è nato dal nulla...
Come tanti linguaggi. Ma la parentela di Python col C++ è moooooolto lontana.
Visual Basic e C# è traducibile in IL al 100% e fuori dal CLR non si esce...
Si esce, eccome: basta compilare tutto in codice nativo. Cosa ampiamente fattibile nonché prevista da .NET.
ADA è superato e non è mai stato molto usato.
Non in ambito militare.
Matlab è troppo specifico.
E' nato per quello. :D
In teoria poi in C/C++ si possono creare le parole chiave che si vogliono (usando banalissime macro),
Macro = preprocessore = quanto più diabolico mente umana abbia concepito.
Andavano benissimo con l'assembly. Ma perché come linguaggio offriva pochissimi "costrutti".
a livello sintattico permette tutte le operazioni concettuali base (teorema Jacopini Bohm e derivati) e quindi.
Questo vale per qualunque linguaggio.
Quello che intendo come "potenza" è il fatto che tutti i concetti che sottointendono alla moderna programmazione hanno visto la luce e grossa diffusione solo grazie al C e al C++,
Falso. Il C, come dicevo, non ha fornito NULLA alla programmazione.
Il C++ ha ripreso concetti già ampiamente collaudati.
Di loro si può dire soltanto che sono linguaggi molto diffusi.
forse è un termine inappropriato detto così ma se considerate che è per forza di cose il più maturo su praticamente ogni aspetto.
Non concordo, per quanto già scritto sopra.
Poi è ovvio che un problema può venir risolto molto più facilmente con altro, ma non si può levare al C/C++ il fatto di essere un bilanciamento quasi perfetto tra espressività, possibilità di agire a basso livello e leggibilità.
Nemmeno per sogno. Specialmente sull'ultimo punto.
Per quanto riguarda gli aspetti semantici di un linguaggio la sua "potenza" insisto nel dire che prescinde da come è stato implementato, altrimenti a parità di vocabolario e paradigmi implementati un linguaggio cambierebbe in base alla macchina su cui viene usato (e questo è vero solo in casi veramente troppo particolari da pesare significativamente su ciò che sostengo)
C e C++ non ti garantisco nulla sulla portabilità, a prescindere dall'implementazione. Parlo degli standard, ovviamente.
Mi son fatto più cultura sulle differenze fra i linguaggi di programmazioni in leggendo queste 5 pagine che cercando su internet...:D :D
A lavoro uso la 2.5, a casa lavoro sulla 2.6 (causa progetto per la PyCon). La 3.0 non l'ho nemmeno scaricata perché mi piange il cuore soltanto a pensare che la scarsa disponibilità di librerie di terze parti m'inpedirà di metterci le mani per parecchio tempo ancora.
La situazione purtroppo non è rosea. Ecco perché per il momento consiglierei la 2.6. E questo te lo dico a malincuore.
Perché fornisce soltanto una bozza, che devi comunque prendere e modificare a mano.
A parte l'assenza da quanto ho capito della possibilità di creare dizionari e sets con i for come con le liste, ci sono molte differenze a livello di sintassi? Tipo la print l'hanno cambiata, poi leggendo un po' di codice 2.6 non mi sembra ci siano grossissime differenze, o magari ho letto il codice sbagliato...
_Claudio
08-04-2009, 21:34
Il paradigma OO è arrivato MOOOOOLTO prima del C++.
Certo, ma ribadisco il concetto, solo col C++ ha visto larga diffusione.
Su questo t'hanno già risposto gli altri, con cui mi accordo.
Non esiste alcuna definizione oggettiva di linguaggio di programmazione "potente".
Non esiste ma basta leggere ciò che ho scritto... non stiamo discutendo la definizione, ma cosa si può e cosa non si può fare con C++ o altri linguaggi e con che grado di simplicità
E il Fortran dove lo mettiamo? E Prolog? E Lisp? E Matlab?
Di questi che hai citato l'unico degno di nota è il Matlab... che rimane sempre confinato a specifiche applicazioni. Ho conosciuto gente che ha lavorato in Lisp e ora lavora felicemente in miniera... lo trova più leggero e meno stressante come lavoro.
Scherzi a parte... quelli che hai citato sono veramente poco usati.
Fortunatamente no, altrimenti sai che palle avere a che fare con quest'orrida sintassi.
Concordo con te riguardo la sintassi... che forse è la prima cosa che si cambia quando si crea un nuovo linguaggi... sai è come mettergli una firma per chi lo crea.
Cosa? Perché se prendiamo il C non ha portato NESSUNA innovazione nell'ambito dei linguaggi di programmazione. Nessuna.
È vero, si sono create non nel senso che prima non esistevano, ma nel senso che hanno visto luce e larga diffusione.
Anche per questo, fortunatamente non è così.
Peccato io sapevo che gli stessi compilatori di C/C++ nelle varie versioni, la jvm java e il relativo compilatore e tante altre cose erano fatte in C (e poi in C++).
A parte che da prima ancora che esistessero C e C++, esistevano s.o. e non erano fatti in C/C++, hai mai sentito parlare di Singularity?
È ovvio i SO esistono da prima che esistevano C/C++... ti sei risposto da solo.
Oddio. Certi costrutti di "naturale" hanno ben poco.
Basta entrare un minimo dell'ottica e poi, a detta di chi lo usa seriamente, è il più naturale di questo mondo.
Si esce, eccome: basta compilare tutto in codice nativo. Cosa ampiamente fattibile nonché prevista da .NET.
Già... ma chi lo fa? È sconveniente... se voglio uscire dal CLR allora uso C++...
Non in ambito militare.
Appunto... di nicchia... e che brutta nicchia...
Macro = preprocessore = quanto più diabolico mente umana abbia concepito.
Basta saperlo usare e non abusarne... però comunque viene offerta quella funzionalità... anche se in maniera maldestra e sono il primo io a evitare come la morte le macro.
C e C++ non ti garantisco nulla sulla portabilità, a prescindere dall'implementazione. Parlo degli standard, ovviamente.
Ovviamente effettuando il porting e mantenendo la stessa struttura...
cdimauro
09-04-2009, 08:29
A parte l'assenza da quanto ho capito della possibilità di creare dizionari e sets con i for come con le liste, ci sono molte differenze a livello di sintassi? Tipo la print l'hanno cambiata, poi leggendo un po' di codice 2.6 non mi sembra ci siano grossissime differenze, o magari ho letto il codice sbagliato...
A parte quello, come dicevo prima, ci sono i parametri "keyword-only", cioé quelli che vengono definiti dopo *args, che possono essere settati soltanto con la sintassi chiave = valore. Utilissimi quando definisci una funzione che accetta parametri variabili (*args) e keyword variabili (*keywords), ma hai bisogno di definire dei parametri chiave-valori "fissi" che, se non specificati, andrebbero normalmente a finire dentro *keywords.
C'è l'unpacking "esteso" delle sequenze (tuple, liste, ma anche iteratori).
L'annotazione nelle funzioni.
La possibilità di accedere a variabili definite nelle funzioni più esterne.
Nella definizione delle classi è possibile specificare dei parametri di tipo keyword (utile per definire le metaclassi).
E qualcos'altro ancora.
Forse non è abbastanza, ma per me sono motivi sufficienti (specialmente per le set e dict comprehension) per preferire la 3.0.
Certo, ma ribadisco il concetto, solo col C++ ha visto larga diffusione.
Non sono d'accordo. La programmazione a oggetti l'ho conosciuta, io come tanta altra gente, col Turbo Pascal 5.5 e successori.
Prima che attecchisse col C++ ne è passato di tempo.
Non esiste ma basta leggere ciò che ho scritto... non stiamo discutendo la definizione, ma cosa si può e cosa non si può fare con C++ o altri linguaggi e con che grado di simplicità
I linguaggi sono tutti equipotenti per definizione. I limiti sono relativi alle singole implementazioni.
Ad esempio, potrei realizzare un interprete C++ che gira in una VM: sempre di C++ stiamo parlando, ma non potrei realizzarci applicazioni di basso livello.
Di questi che hai citato l'unico degno di nota è il Matlab... che rimane sempre confinato a specifiche applicazioni. Ho conosciuto gente che ha lavorato in Lisp e ora lavora felicemente in miniera... lo trova più leggero e meno stressante come lavoro.
Scherzi a parte... quelli che hai citato sono veramente poco usati.
Ma sono usati nelle loro nicchie, perché rappresentano il miglior compromesso.
Concordo con te riguardo la sintassi... che forse è la prima cosa che si cambia quando si crea un nuovo linguaggi... sai è come mettergli una firma per chi lo crea.
Se pensiamo a com'è nata la sintassi del C, poi... E' meglio calare un velo pietoso.
È vero, si sono create non nel senso che prima non esistevano, ma nel senso che hanno visto luce e larga diffusione.
I linguaggi di programmazione esistevano prima di C e C++. E anche negli anni '80, non è che questi linguaggi avessero una gran diffusione.
Adesso possiamo dire che sono fra i più diffusi, ma l'informatica non ha avuto bisogno di questi linguaggi per diffondere concetti e, in generale, per andare avanti.
Peccato io sapevo che gli stessi compilatori di C/C++ nelle varie versioni, la jvm java e il relativo compilatore e tante altre cose erano fatte in C (e poi in C++).
In genere la prima implementazione è in C, perché si fa uso di strumenti come YACC che producono compilatori, ma generando codice C.
E' la via più semplice per avere una prima versione di un interprete o compilatore di un determinato linguaggio. Ad esempio i primi compilatori C++ generavano codice C...
Poi è possibile pensare a soluzioni "native". Ad esempio FreePascal è scritto in FreePascal stesso, Delphi è scritto in Delphi, RealBASIC è scritto in RealBASIC, ecc. Persino Python ha una sua implementazione interamente scritta in Python, che si chiama Pypy; non è ancora matura come la versione "principale" (CPython, che è scritta in C), ma promette bene ed è anche in grado di generare direttamente eseguibili per PowerPC (e LLVM, se non erro).
È ovvio i SO esistono da prima che esistevano C/C++... ti sei risposto da solo.
Appunto. Quindi nulla di nuovo sotto il sole.
Basta entrare un minimo dell'ottica e poi, a detta di chi lo usa seriamente, è il più naturale di questo mondo.
Chi lo usa seriamente può continuare a trovarlo innaturale.
E' una questione di gusti / abitudini.
Già... ma chi lo fa? È sconveniente...
Perché? Ti trovi l'eseguibile già ottimizzato per la tua architettura.
se voglio uscire dal CLR allora uso C++...
Questo è un non sequitur. Non vedo l'implicazione logica.
Appunto... di nicchia... e che brutta nicchia...
Come vedi il mondo è fatto di tanti linguaggi di programmazione che si sono ritagliati una nicchia...
Basta saperlo usare e non abusarne... però comunque viene offerta quella funzionalità... anche se in maniera maldestra e sono il primo io a evitare come la morte le macro.
Che, tra l'altro, non sono retaggio del linguaggio vero e proprio, quanto del preprocessore. Un preprocessore lo si può realizzare per qualunque linguaggio di programmazione.
Comunque ricorrere a un preprocessore per realizzare certe cose in un linguaggio dimostra quanto di basso livello e di bassa caratura sia questo linguaggio, che deve ricorrere a roba da assemblatori.
Ovviamente effettuando il porting e mantenendo la stessa struttura...
Effettuare il porting significa avere pezzi di codice appositi a seconda della piattaforma: non mi pare il massimo della "portabilità".
Inoltre mantenere la stessa struttura non vuol dire nulla. Anzi, posso dirti che porta molto facilmente a problemi di portabilità.
^TiGeRShArK^
09-04-2009, 09:16
Certo, ma ribadisco il concetto, solo col C++ ha visto larga diffusione.
Visto come veniva usato il C++ nei primi anni non direi proprio che ha visto una larga diffusione il paradigma OO... :mbe:
Non esiste ma basta leggere ciò che ho scritto... non stiamo discutendo la definizione, ma cosa si può e cosa non si può fare con C++ o altri linguaggi e con che grado di simplicità
E il grado di semplicità del C++ è molto ma molto + basso di altri n linguaggi per la stragrande maggioranza delle cose.
Dunque, secondo la tua definizione stessa, il C++ sarebbe ben poco potente.
Prova a fare in C++ un analizzatore dei log di windows messenger che li riscriva in maniera + leggibile e che utilizzi TUTTI i core disponibili per l'elaborazione.
In C# sono circa 8 righe di codice.
Estremamente potente oserei dire. :)
Di questi che hai citato l'unico degno di nota è il Matlab... che rimane sempre confinato a specifiche applicazioni. Ho conosciuto gente che ha lavorato in Lisp e ora lavora felicemente in miniera... lo trova più leggero e meno stressante come lavoro.
Scherzi a parte... quelli che hai citato sono veramente poco usati.
Ma anche no. :mbe:
Dato che il Fortan esiste ormai da mezzo secolo, i programmi scritti in questo linguaggio (specialmente in FORTRAN 77, il suo dialetto più importante) tuttora usati sono innumerevoli. Il Fortran rimane inoltre il linguaggio di prima scelta per i programmi destinati a girare sui supercomputer, come ad esempio quelli usati per le previsioni meteorologiche, basati sui modelli matematici della fisica dell'atmosfera.
Peccato io sapevo che gli stessi compilatori di C/C++ nelle varie versioni, la jvm java e il relativo compilatore e tante altre cose erano fatte in C (e poi in C++).
ma anche no :mbe:
System Requirements
javac is written in the Java programming language. As a general rule, it can normally be compiled using tools in the latest released version of the JDK.
È ovvio i SO esistono da prima che esistevano C/C++... ti sei risposto da solo.
Singularity è un futuro sistema operativo...
Appunto... di nicchia... e che brutta nicchia...
Ma secondo te i sistemi di controllo degli elicotteri della augusta che linguaggio di programmazione usano C++ o Ada? :fagiano:
~FullSyst3m~
09-04-2009, 09:32
A parte quello, come dicevo prima, ci sono i parametri "keyword-only", cioé quelli che vengono definiti dopo *args, che possono essere settati soltanto con la sintassi chiave = valore. Utilissimi quando definisci una funzione che accetta parametri variabili (*args) e keyword variabili (*keywords), ma hai bisogno di definire dei parametri chiave-valori "fissi" che, se non specificati, andrebbero normalmente a finire dentro *keywords.
Cioè in pratica oltre ad poter avere argomenti opzionali in aggiunta ne hai anche di fissi con la sintassi chiave = valore?
C'è l'unpacking "esteso" delle sequenze (tuple, liste, ma anche iteratori).
La possibilità di accedere a variabili definite nelle funzioni
Ad esempio?
L'annotazione nelle funzioni.
Nella definizione delle classi è possibile specificare dei parametri di tipo keyword (utile per definire le metaclassi).
Cioè? Non ho mai sentito di annotazioni e metaclassi in Python.
Forse non è abbastanza, ma per me sono motivi sufficienti (specialmente per le set e dict comprehension) per preferire la 3.0.
Le set e le dict comprehension usano lo stesso principio delle liste? Tipo:
[print i for i in nomi]
_Claudio
09-04-2009, 10:27
Non sono d'accordo. La programmazione a oggetti l'ho conosciuta, io come tanta altra gente, col Turbo Pascal 5.5 e successori.
Prima che attecchisse col C++ ne è passato di tempo.
Però ha attecchito col C++ e ha attecchito anche molto bene visto che oramai se si parla di OO si parla di Java e di C++ e quando si parla di Java ci si rifà quasi sempre al C++.
I linguaggi sono tutti equipotenti per definizione. I limiti sono relativi alle singole implementazioni.
Ad esempio, potrei realizzare un interprete C++ che gira in una VM: sempre di C++ stiamo parlando, ma non potrei realizzarci applicazioni di basso livello.
Io non userei labview per fare applicazioni desktop... perchè non so neppure se si possono fare applicazioni desktop...
Ma sono usati nelle loro nicchie, perché rappresentano il miglior compromesso.
Nelle loro nicchie sono quanto di meglio ci possa essere... ma nel resto del mondo? Se consideriamo le nicche allora non ce la caviamo più.
Se pensiamo a com'è nata la sintassi del C, poi... E' meglio calare un velo pietoso.
La torre di Pisa non sarebbe la torre di Pisa se fosse nata dritta.
I linguaggi di programmazione esistevano prima di C e C++. E anche negli anni '80, non è che questi linguaggi avessero una gran diffusione.
Adesso possiamo dire che sono fra i più diffusi, ma l'informatica non ha avuto bisogno di questi linguaggi per diffondere concetti e, in generale, per andare avanti.
Ci sarà un motivo se adesso che si richiedono certi concetti siano i più diffusi nonostante i loro difetti. Sto ripassando in questi giorni proprio C++ per iniziare un grosso progetto, sto rileggendo il libro di Stroustrup e mi viene quasi il vomito per la verbosità e il disordine.
In genere la prima implementazione è in C, perché si fa uso di strumenti come YACC che producono compilatori, ma generando codice C.
E' la via più semplice per avere una prima versione di un interprete o compilatore di un determinato linguaggio. Ad esempio i primi compilatori C++ generavano codice C...
Da quello che ho visto Bison, Flex e Yacc senza C... ai tempi in cui sono stati fatti dubito si poteva fare di meglio con altro. Poi è una mia opinione.
Poi è possibile pensare a soluzioni "native". Ad esempio FreePascal è scritto in FreePascal stesso, Delphi è scritto in Delphi, RealBASIC è scritto in RealBASIC, ecc. Persino Python ha una sua implementazione interamente scritta in Python, che si chiama Pypy; non è ancora matura come la versione "principale" (CPython, che è scritta in C), ma promette bene ed è anche in grado di generare direttamente eseguibili per PowerPC (e LLVM, se non erro).
Però tutti hanno la loro prima implementazione in C.
Chi lo usa seriamente può continuare a trovarlo innaturale.
E' una questione di gusti / abitudini.
Senza dubbio, però è come dire che ad alcuni non piace la pizza... È sicuramente vero, ma statisticamente la pizza è un piatto molto apprezzato perchè esistono tante pizzerie e in tempo di crisi fanno comunque il pienone di gente.
Perché? Ti trovi l'eseguibile già ottimizzato per la tua architettura.
Questo è un non sequitur. Non vedo l'implicazione logica.
Uso C++ perchè se non sto sul CLR vado a contatto col metallo (come si usa dire su questo forum) e tanto vale uso il linguaggio che mi permette di martellare meglio e direttamente il metallo. Tutto qui, poi rimane sempre il fatto che una persona può usare quello che vuole.
Come vedi il mondo è fatto di tanti linguaggi di programmazione che si sono ritagliati una nicchia...
A volte le nicchie nascono proprio perchè un linguaggio le scava... :muro:
Che, tra l'altro, non sono retaggio del linguaggio vero e proprio, quanto del preprocessore. Un preprocessore lo si può realizzare per qualunque linguaggio di programmazione.
Comunque ricorrere a un preprocessore per realizzare certe cose in un linguaggio dimostra quanto di basso livello e di bassa caratura sia questo linguaggio, che deve ricorrere a roba da assemblatori.
Anche io trovo insana questa cosa, ma anche se faccio parte del mondo accademico preferisco le cose pratiche e funzionanti e se con un po' di attenzione si possono fare cose utili usando qualcosa di dichiaratamente insano (l'importante è che lo si sappia e non venga presentato come la miglior cosa di questo mondo)... perchè no... poi che accademicamente e formalmente vada migliorata la cosa è sacrosanto.
Effettuare il porting significa avere pezzi di codice appositi a seconda della piattaforma: non mi pare il massimo della "portabilità".
Inoltre mantenere la stessa struttura non vuol dire nulla. Anzi, posso dirti che porta molto facilmente a problemi di portabilità.
Assolutamente no, gli algoritmi per carità spero rimangano gli stessi a prescindere dal SO, sapevo che fare il porting consisteva nel sistemare gli accessi e l'uso delle librerie... che guarda un po' nell'analisi della complessità costano O(1).
Quello che voglio dire io è che bisogna dare il giusto peso a C/C++ che sono diffusissimi e ad un livello intermedio di sviluppo (non direttamente sulla CPU, nè ad un livello molto alto ad es. nella programmazione web o sopra il CLR) rappresentano la miglior soluzione sia per SO, che per sistemi embedded, e ancora per molto tempo (almeno finchè il web non diventerà totalmente pervasivo) sistemi embedded e SO rappresenteranno ciò che gli utenti useranno. Poi ognuno usa il linguaggio che più preferisce ma non dovrebbe girare la testa e far finta di niente, così come io che non so usare il ruby (pochi esempi di codice non valgono niente) però non denigro il fatto che sia un'evoluzione in termini di espressività.
~FullSyst3m~
09-04-2009, 10:44
Però ha attecchito col C++ e ha attecchito anche molto bene visto che oramai se si parla di OO si parla di Java e di C++ e quando si parla di Java ci si rifà quasi sempre al C++.
In quale universo? In tutte le discussioni o documenti che ho letto, quando si parla di OO, C++ non viene nemmeno nominato. Java si, Python si, C# si. C++ no.
Nelle loro nicchie sono quanto di meglio ci possa essere... ma nel resto del mondo? Se consideriamo le nicche allora non ce la caviamo più.
Le nicchie sono una realtà, non è che siano fantasia. Esistono nicchie, e di alto rilievo pure. Sistemi militari, aeronautici ecc. Mica caramelle.
La torre di Pisa non sarebbe la torre di Pisa se fosse nata dritta.
Eh vabbè se la metti cosi allora mia nonna sarebbe ancora viva se non fosse morta.
Senza dubbio, però è come dire che ad alcuni non piace la pizza... È sicuramente vero, ma statisticamente la pizza è un piatto molto apprezzato perchè esistono tante pizzerie e in tempo di crisi fanno comunque il pienone di gente.
Il C++ fa pienone di gente?
A volte le nicchie nascono proprio perchè un linguaggio le scava... :muro:
Può essere che le scava perchè in quel settore è migliore?
A parte quello, come dicevo prima, ci sono i parametri "keyword-only", cioé quelli che vengono definiti dopo *args, che possono essere settati soltanto con la sintassi chiave = valore. Utilissimi quando definisci una funzione che accetta parametri variabili (*args) e keyword variabili (*keywords), ma hai bisogno di definire dei parametri chiave-valori "fissi" che, se non specificati, andrebbero normalmente a finire dentro *keywords.
C'è l'unpacking "esteso" delle sequenze (tuple, liste, ma anche iteratori).
L'annotazione nelle funzioni.
La possibilità di accedere a variabili definite nelle funzioni più esterne.
Nella definizione delle classi è possibile specificare dei parametri di tipo keyword (utile per definire le metaclassi).
E qualcos'altro ancora.
Forse non è abbastanza, ma per me sono motivi sufficienti (specialmente per le set e dict comprehension) per preferire la 3.0.
.
Ho capito. Beh comunque le differenze non mi paiono eccessive. Si può benissimo imparare la 3 e poi imparare le differenze con la 2.6, in modo da non avere problemi :D
In quale universo? In tutte le discussioni o documenti che ho letto, quando si parla di OO, C++ non viene nemmeno nominato. Java si, Python si, C# si. C++ no.
Il C++ fa pienone di gente?
Non scherziamo. C++ è un linguaggio utilizzatissimo, infatti è anche discretamente più utilizzato di python al momento, e secondo solo a java e C.
Che poi abbia vantaggi e svantaggi è chiaro. Personalmente l'ho imparato all'uni e sono contento di conoscerlo. E' un linguaggio comunque molto difficile da padroneggiare.. Per esempio se un programma non fa quello che mi aspetto la prima cosa che faccio ancora è controllare di aver eseguito bene la gestione della memoria :asd:
~FullSyst3m~
09-04-2009, 10:59
Ho capito. Beh comunque le differenze non mi paiono eccessive. Si può benissimo imparare la 3 e poi imparare le differenze con la 2.6, in modo da non avere problemi :D
Che senso ha studiare la 3 e poi vedere le differenze con la 2.6? E se vuole usare qualche libreria o modulo che non c'è per la 3?
Tanto vale che studia il Pensare da informatico, che usa la 2.6 e poi se vorrà si aggiorna velocemente sulla 3.0.
Non scherziamo. C++ è un linguaggio utilizzatissimo, infatti è anche discretamente più utilizzato di python al momento, e secondo solo a java e C.
Che poi abbia vantaggi e svantaggi è chiaro. Personalmente l'ho imparato all'uni e sono contento di conoscerlo. E' un linguaggio comunque molto difficile da padroneggiare.. Per esempio se un programma non fa quello che mi aspetto la prima cosa che faccio ancora è controllare di aver eseguito bene la gestione della memoria :asd:
Non sto scherzando infatti. Quando si parla di OO, le discussioni che almeno ho letto io, non si nomina quasi niente C++.
Io sono felice che molto probabilmente non farò nulla del genere all'uni. La cosa importante è arrivare ad un risultato e risolvere un problema. Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Quando si parla di c++ secondo me diventate poco obiettivi.
E' difficile da padroneggiare? Si
Porta anche programmatori esperti a infilare bug orribili e devastanti? Si.
Però a sentire parlare qualcuno di voi sembra il linguaggio più brutto e inutile del mondo, utilizzato da due o tre masochisti sulla faccia della terra.
Tutti gli Os (parlo di quelli utilizzati, non di quelli morti o di quelli che devono nascere) sono scritti in c o c++. Tutti gli engine grafici dei videogiochi sono scritti in c++. Tutti gli engine dei browser sono scritti in c/c++. La maggior parte delle virtual machine dei linguaggi correntemente utilizzati sono scritte in c/c++. Nel settore della difesa, sistemi real time e mission critical nella maggior parte dei casi si usa c o c++. Nell'embedded si usa c o c++, nella computer grafica si usa quasi esclusivamente c++.
Tutti gli RDBMS più utilizzati sono scritti in c/c++ e potrei continuare fino a domani.
Non parliamo di codec/librerie/driver.
Pure a Facebook stanno cercando programmatori c++. Il motore di ricerca google per buona parte è scritto in c++.
Non è vero che in letteratura quando si parla di object orientation non viene citato il c++.
Ne è un esempio il libro di Gamma etc sui Design Patterns.
Io sono felice che molto probabilmente non farò nulla del genere all'uni. La cosa importante è arrivare ad un risultato e risolvere un problema. Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Se stai facendo il gestionale per il macellaio sotto casa tua è meglio usare python.
Allo stesso modo se lavori alla Pixar e devi fare degli script di utilità meglio usare python.
Se però lavori alla pixar e devi scrivere Renderman, oppure lavori alla id e devi scrivere l'engine di Rage, o lavori a Google e devi scrivere il motore di ricerca, o lavori a Mozilla e devi scrivere l'engine di rendering del browser allora DEVI usare c++.
Come dice John Carmack (che non è diventato famoso per aver scritto il gestionale per il macellaio sotto casa mia):
even the most inspired java code is going to be a fraction the performance of pedestrian native C code.
oppure:
Even compiled to completely native code, Java semantic requirements like range checking on every array access hobble it
_Claudio
09-04-2009, 11:14
In quale universo? In tutte le discussioni o documenti che ho letto, quando si parla di OO, C++ non viene nemmeno nominato. Java si, Python si, C# si. C++ no.
Evidentemente leggiamo libri diversi e andiamo a conferenze diverse...
Le nicchie sono una realtà, non è che siano fantasia. Esistono nicchie, e di alto rilievo pure. Sistemi militari, aeronautici ecc. Mica caramelle.
Rimangono pur sempre nicchie... che poi abbiano rilievo a livello sociale è un altro discorso.
Eh vabbè se la metti cosi allora mia nonna sarebbe ancora viva se non fosse morta.
Era per dire che a volte le cose nascono storte e maldefinite (che poi il C mi sembra tutto fuorchè scritto male) ma poi si rivelano dei grandi successi.
Il C++ fa pienone di gente?
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Può essere che le scava perchè in quel settore è migliore?
Può essere tutto... le nicchie rimangono nicchie e non possiamo confrontare un linguaggio di nicchia con C++ o python...
yorkeiser
09-04-2009, 11:16
Quando si parla di c++ secondo me diventate poco obiettivi.
Eh che vuoi farci, qua sopra quando esce la diatriba sui linguaggi, si comincia a fare come juventini vs milanisti vs interisti, o come fascisti vs comunisti: ognuno sostiene che il suo partito è più figo degli altri, dicendo anche spropositi (il c++ non viene citato quando si parla di OO? Ma dove, sulle confezioni del Dash?) e non se ne esce più ;)
Secondo me, il tizio che ha aperto la discussione s'è già dato al giardinaggio :)
_Claudio
09-04-2009, 11:18
Non sto scherzando infatti. Quando si parla di OO, le discussioni che almeno ho letto io, non si nomina quasi niente C++.
Io sono felice che molto probabilmente non farò nulla del genere all'uni. La cosa importante è arrivare ad un risultato e risolvere un problema. Se io un problema posso risolverlo in Python perchè dovrei usare C++?
È da masochisti usare C++ per complicarsi la vita quando non serve.
Quando si parla di c++ secondo me diventate poco obiettivi.
E' difficile da padroneggiare? Si
Porta anche programmatori esperti a infilare bug orribili e devastanti? Si.
Però a sentire parlare qualcuno di voi sembra il linguaggio più brutto e inutile del mondo, utilizzato da due o tre masochisti sulla faccia della terra.
Tutti gli Os (parlo di quelli utilizzati, non di quelli morti o di quelli che devono nascere) sono scritti in c o c++. Tutti gli engine grafici dei videogiochi sono scritti in c++. Tutti gli engine dei browser sono scritti in c/c++. La maggior parte delle virtual machine dei linguaggi correntemente utilizzati sono scritte in c/c++. Nel settore della difesa, sistemi real time e mission critical nella maggior parte dei casi si usa c o c++. Nell'embedded si usa c o c++, nella computer grafica si usa quasi esclusivamente c++.
Tutti gli RDBMS più utilizzati sono scritti in c/c++ e potrei continuare fino a domani.
Non parliamo di codec/librerie/driver.
Pure a Facebook stanno cercando programmatori c++. Il motore di ricerca google per buona parte è scritto in c++.
Non è vero che in letteratura quando si parla di object orientation non viene citato il c++.
Ne è un esempio il libro di Gamma etc sui Design Patterns.
Se stai facendo il gestionale per il macellaio sotto casa tua è meglio usare python.
Allo stesso modo se lavori alla Pixar e devi fare degli script di utilità meglio usare python.
Se però lavori alla pixar e devi scrivere Renderman, oppure lavori alla id e devi scrivere l'engine di Rage, o lavori a Google e devi scrivere il motore di ricerca, o lavori a Mozilla e devi scrivere l'engine di rendering del browser allora DEVI usare c++.
Come dice John Carmack (che non è diventato famoso per aver scritto il gestionale per il macellaio sotto casa mia):
even the most inspired java code is going to be a fraction the performance of pedestrian native C code.
oppure:
Even compiled to completely native code, Java semantic requirements like range checking on every array access hobble it
Qualcuno che ha mantenuto un pizzico di obiettività allora esiste!!!
Scherzo... è ovvio che si tende a difendere le proprie armi... ma per questo non bisogna mai levare i meriti a chi li ha.
Che senso ha studiare la 3 e poi vedere le differenze con la 2.6? E se vuole usare qualche libreria o modulo che non c'è per la 3?
Tanto vale che studia il Pensare da informatico, che usa la 2.6 e poi se vorrà si aggiorna velocemente sulla 3.0.
Se non ha nessuna base gli conviene studiare da quel libro, visto che libri per la 3.0 non ce ne sono. Ma poi pensare non era per la 1.0?
Non sto scherzando infatti. Quando si parla di OO, le discussioni che almeno ho letto io, non si nomina quasi niente C++.
Io sono felice che molto probabilmente non farò nulla del genere all'uni. La cosa importante è arrivare ad un risultato e risolvere un problema. Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Perchè molti problemi li puoi risolvere in c++ e non in Python.
Comunque che dirti, hai letto le discussioni sbagliate :asd:
~FullSyst3m~
09-04-2009, 11:28
Non è vero che in letteratura quando si parla di object orientation non viene citato il c++.
Ne è un esempio il libro di Gamma etc sui Design Patterns.
Non ho detto questo. Ho solo detto che quando si parla di OO, solitamente, si sentono nominare molto più spesso i vari Java, C#, Python ecc che C++.
Se stai facendo il gestionale per il macellaio sotto casa tua è meglio usare python.
Python non si usa solo per i gestionali del macellaio, lo usa pesantemente Google, lo usa la NASA e lo usano molte altre grosse società ed enti. Ripeto quello che ho detto: se io posso fare una cosa con un altro linguaggio, perchè devo complicarmi la vita con il C++? Non ho parlato di Pixar, motori di ricerca ecc. E' ovvio che il C/C++ in determinati settori è insostituibile. Non ha senso negarlo.
il c++ non viene citato quando si parla di OO? Ma dove, sulle confezioni del Dash?
Evidentemente non si legge quello che scrivo. Bene.
Scherzo... è ovvio che si tende a difendere le proprie armi... ma per questo non bisogna mai levare i meriti a chi li ha.
Io infatti non ho mai tolto meriti a nessuno.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Riguardo questa classifica c'era un post interessante su un blog di uno sviluppatore (ho il link nel fisso se non ricordo male). La posizione che occupano nei primi posti per la maggior parte è dovuta alla manutenzione di programmi già scritti in C/C++, non scritti partendo da 0.
Veramente tu hai scritto esattamente quello che loro ti imputano di aver scritto
In quale universo? In tutte le discussioni o documenti che ho letto, quando si parla di OO, C++ non viene nemmeno nominato. Java si, Python si, C# si. C++ no.
Magari dovresti fare più attenzione tu a scrivere, e non loro a leggere :)
_Claudio
09-04-2009, 11:35
Io infatti non ho mai tolto meriti a nessuno.
C'è chi li ha tolti a gran voce... non te... forse... non faccio molto caso a CHI scrive... ma a cosa c'è scritto...
Riguardo questa classifica c'era un post interessante su un blog di uno sviluppatore (ho il link nel fisso se non ricordo male). La posizione che occupano nei primi posti per la maggior parte è dovuta alla manutenzione di programmi già scritti in C/C++, non scritti partendo da 0.
Strano... mi sembra invece che le nuove tecnologie alla base del web 2.0 le facciano in C++... le CUDA come piattaforma per il loro sviluppo usano di default il C...
Poi lo dici proprio a me che dovrò fare per tesi un software di modellizzazione dell'ambiente di un Data Center in... C++.
Strano... mi sembra invece che le nuove tecnologie alla base del web 2.0 le facciano in C++...
Uh?! A che ti riferisci?
_Claudio
09-04-2009, 11:45
Uh?! A che ti riferisci?
Algoritmi di indicizzazione, librerie di integrazione di servizi, sistemi middleware in generale... Certo, poi a livello più alto si usano PHP, JSP, AJAX (JS) ecc...
~FullSyst3m~
09-04-2009, 11:48
Se non ha nessuna base gli conviene studiare da quel libro, visto che libri per la 3.0 non ce ne sono. Ma poi pensare non era per la 1.0?
Si, la 1.x, ma le basi le impara perfettamente.
Perchè molti problemi li puoi risolvere in c++ e non in Python.
Comunque che dirti, hai letto le discussioni sbagliate :asd:
Ah, quindi solo perchè ho letto discussioni dove si dicono quelle cose sono sbagliate? Non sapevo funzionasse cosi.
Comunque ripeto per l'ennesima volta, l'italiano non è un'opinione:
Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Magari dovresti fare più attenzione tu a scrivere, e non loro a leggere
E perchè mai? Non nego assolutamente quello che ho detto. Era riferito semplicemente al contesto. Se continui a leggere prima di giudicare vedrai che ho scritto che quando si parla di OO si sente parlare tantissimo di Java e compagnia che non di C++. Mi sembra chiaro.
Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Se puoi realmente risolverlo in python usa python. Avrai un linguaggio più elegante, più produttivo, più semplice da apprendere, meno error-prone e più divertente.
Il punto è che con python non puoi scriverci un kernel di un sistema operativo, non puoi scriverci un server grafico come X, non puoi scriverci delle librerie per l'elaborazione delle immagini, non puoi scriverci l'engine di un videogioco, non puoi scriverci la java virtual machine, non puoi scrivere il plugin flash, non puoi scrivere un browser, non puoi scrivere un programma come photoshop, non puoi scrivere una applicazione real time.
Insomma molto di quanto di interessante c'è in giro non potresti farlo in python.
Insomma non ha senso paragonare c++ a python. E' ben chiaro quando usare l'uno e quando usare l'altro linguaggio.
^TiGeRShArK^
09-04-2009, 11:58
Quando si parla di c++ secondo me diventate poco obiettivi.
E' difficile da padroneggiare? Si
Porta anche programmatori esperti a infilare bug orribili e devastanti? Si.
Però a sentire parlare qualcuno di voi sembra il linguaggio più brutto e inutile del mondo, utilizzato da due o tre masochisti sulla faccia della terra.
Tutti gli Os (parlo di quelli utilizzati, non di quelli morti o di quelli che devono nascere) sono scritti in c o c++. Tutti gli engine grafici dei videogiochi sono scritti in c++. Tutti gli engine dei browser sono scritti in c/c++. La maggior parte delle virtual machine dei linguaggi correntemente utilizzati sono scritte in c/c++. Nel settore della difesa, sistemi real time e mission critical nella maggior parte dei casi si usa c o c++. Nell'embedded si usa c o c++, nella computer grafica si usa quasi esclusivamente c++.
Tutti gli RDBMS più utilizzati sono scritti in c/c++ e potrei continuare fino a domani.
Non parliamo di codec/librerie/driver.
Pure a Facebook stanno cercando programmatori c++. Il motore di ricerca google per buona parte è scritto in c++.
Non è vero che in letteratura quando si parla di object orientation non viene citato il c++.
Ne è un esempio il libro di Gamma etc sui Design Patterns.
chiedi a fek quant'è felice di usare C++ al lavoro :asd:
^TiGeRShArK^
09-04-2009, 12:00
Se stai facendo il gestionale per il macellaio sotto casa tua è meglio usare python.
Allo stesso modo se lavori alla Pixar e devi fare degli script di utilità meglio usare python.
Se però lavori alla pixar e devi scrivere Renderman, oppure lavori alla id e devi scrivere l'engine di Rage, o lavori a Google e devi scrivere il motore di ricerca, o lavori a Mozilla e devi scrivere l'engine di rendering del browser allora DEVI usare c++.
Come dice John Carmack (che non è diventato famoso per aver scritto il gestionale per il macellaio sotto casa mia):
even the most inspired java code is going to be a fraction the performance of pedestrian native C code.
oppure:
Even compiled to completely native code, Java semantic requirements like range checking on every array access hobble it
a livello prestazionale sono tutte cazzate.
Ormai Java è paragonabile a C++ come prestazioni.
Il problema principale, lo stesso per cui non si usa in certi ambiti come i videogiochi, è dato dalle latenze non deterministiche causate dal garbage collector.
E comunque ricordo che molti giochi usano python e LUA per lo scripting del'IA. ;)
~FullSyst3m~
09-04-2009, 12:03
Se puoi realmente risolverlo in python usa python. Avrai un linguaggio più elegante, più produttivo, più semplice da apprendere, meno error-prone e più divertente.
Il punto è che con python non puoi scriverci un kernel di un sistema operativo, non puoi scriverci un server grafico come X, non puoi scriverci delle librerie per l'elaborazione delle immagini, non puoi scriverci l'engine di un videogioco, non puoi scriverci la java virtual machine, non puoi scrivere il plugin flash, non puoi scrivere un browser, non puoi scrivere un programma come photoshop, non puoi scrivere una applicazione real time.
Insomma molto di quanto di interessante c'è in giro non potresti farlo in python.
Insomma non ha senso paragonare c++ a python. E' ben chiaro quando usare l'uno e quando usare l'altro linguaggio.
Si è vero, ma anche questi settori ormai stanno iniziando ad usare anche altri linguaggi. Come ha detto Tiger.
^TiGeRShArK^
09-04-2009, 12:03
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
si vabbè..
se consideri affidabile TIOBE che metteva nelle statistiche dell'RPG anche D&D e i vari giochi di ruolo siamo messi bene... :asd:
chiedi a fek quant'è felice di usare C++ al lavoro :asd:
Chiediamo a fek se è disposto a mollare la crytek per lavorare in python in qualche progetto basato su django.
^TiGeRShArK^
09-04-2009, 12:09
Scherzo... è ovvio che si tende a difendere le proprie armi... ma per questo non bisogna mai levare i meriti a chi li ha.
Ma anche no.
Per me è ovvio utilizzare lo strumento migliore per risolvere il proprio problema.
E nella stragrande maggioranza dei casi esistono strumenti che permettono di risolvere il problema molto + facilmente ed elegantemente di C++.
Io non difendo nessun arma dato che, molto pragmaticamente, programmo in Java, in C#, in python o in ruby a seconda di quello che devo fare.
Ancora non ho mai avuto la necessità di scrivere una sola riga di codice di C++ per lavoro, per fortuna. :)
~FullSyst3m~
09-04-2009, 12:09
Chiediamo a fek se è disposto a mollare la crytek per lavorare in python in qualche progetto basato su django.
fek lavora alla Crytek?
^TiGeRShArK^
09-04-2009, 12:12
C'è chi li ha tolti a gran voce... non te... forse... non faccio molto caso a CHI scrive... ma a cosa c'è scritto...
Strano... mi sembra invece che le nuove tecnologie alla base del web 2.0 le facciano in C++... le CUDA come piattaforma per il loro sviluppo usano di default il C...
Poi lo dici proprio a me che dovrò fare per tesi un software di modellizzazione dell'ambiente di un Data Center in... C++.
Il futuro, con l'ampissima diffusione dei multicore, si tenderà ad utilizzare sempre di + programmi che permettano di gestire facilmente la programmazione funzionale, in modo di poter suddividere automaticamente il carico di lavoro tra i vari core mediante l'utilizzo di funzioni pure.
E C++ sinceramente non lo vedo molto adatto per tutto questo.
Ad oggi il migliore tra i linguaggi che uso in quest'ambito è C# che permette tramite PLINQ (che a breve diventerà parte integrante del linguaggio) di fare ciò molto semplicemente.
Tra l'altro c'era anche un articolo interessante sull'evoluzione futura dei giochi e i linguaggi funzionali che aveva linkato qualcuno un bel pò di tempo fa. ;)
^TiGeRShArK^
09-04-2009, 12:14
Se puoi realmente risolverlo in python usa python. Avrai un linguaggio più elegante, più produttivo, più semplice da apprendere, meno error-prone e più divertente.
Il punto è che con python non puoi scriverci un kernel di un sistema operativo,
e fin qua ci siamo.....
non puoi scriverci un server grafico come X, non puoi scriverci delle librerie per l'elaborazione delle immagini, non puoi scriverci l'engine di un videogioco, non puoi scriverci la java virtual machine, non puoi scrivere il plugin flash, non puoi scrivere un browser, non puoi scrivere un programma come photoshop, non puoi scrivere una applicazione real time.
perchè no?
Insomma molto di quanto di interessante c'è in giro non potresti farlo in python.
Insomma non ha senso paragonare c++ a python. E' ben chiaro quando usare l'uno e quando usare l'altro linguaggio.
mmm.. mi sa che non è molto chiaro quando utilizzare uno strumento e quando un altro, visto quello che hai scritto. ;)
a livello prestazionale sono tutte cazzate.
Ormai Java è paragonabile a C++ come prestazioni.
Se sono cazzate (cmq penso che john carmack non sia proprio l'ultimo arrivato) rimane comunque il problema da te citato che è di ben più difficile risoluzione.
Il problema principale, lo stesso per cui non si usa in certi ambiti come i videogiochi, è dato dalle latenze non deterministiche causate dal garbage collector.
E comunque ricordo che molti giochi usano python e LUA per lo scripting del'IA. ;)
E usano anche java o c# per i tool.
Il grosso del lavoro viene comunque fatto in c++.
^TiGeRShArK^
09-04-2009, 12:16
Chiediamo a fek se è disposto a mollare la crytek per lavorare in python in qualche progetto basato su django.
e che c'entra con quello che ho detto io? :)
Io ho detto che sarebbe felicissimo, come ha + volte affermato, di poter utilizzare un linguaggio + elegante di C++ per il suo lavoro.
Non l'ha mai nascosto quando scrivevamo Diamond Crush.
L'unico problema è che per ora non lo può fare per il problema che ho citato prima.
^TiGeRShArK^
09-04-2009, 12:17
fek lavora alla Crytek?
yes..
prima era alla lionhead che poi è stata acquisita da microsoft, ora è alla crytek in germania.
perchè no?
Hai idea della differenza di prestazioni fra c++ e python? Dei problemi causati dalla gestione della memoria di python?
Linux è scritto in c.
Bsd in c.
Macosx in c.
Windows in c++.
webkit in c++.
gecko in c++.
trident in c++.
Visto che sono io quello con le idee poco chiare segnalami dei prodotti concorrenti scritti in python. Io aspetto qui.
_Claudio
09-04-2009, 12:19
Il futuro, con l'ampissima diffusione dei multicore, si tenderà ad utilizzare sempre di + programmi che permettano di gestire facilmente la programmazione funzionale, in modo di poter suddividere automaticamente il carico di lavoro tra i vari core mediante l'utilizzo di funzioni pure.
E C++ sinceramente non lo vedo molto adatto per tutto questo.
Ad oggi il migliore tra i linguaggi che uso in quest'ambito è C# che permette tramite PLINQ (che a breve diventerà parte integrante del linguaggio) di fare ciò molto semplicemente.
Tra l'altro c'era anche un articolo interessante sull'evoluzione futura dei giochi e i linguaggi funzionali che aveva linkato qualcuno un bel pò di tempo fa. ;)
Sapevo invece che si stava anche studiando il modo di suddividere i software ad un livello più grossolano e dividere sui vari core vere e proprie parti di programma (leggi classi, oggetti) e non singole funzioni... per diminuire l'overhead necessario al "cambio funzione".
Vedremo chi l'avrà vinta...
^TiGeRShArK^
09-04-2009, 12:19
Se sono cazzate (cmq penso che john carmack non sia proprio l'ultimo arrivato) rimane comunque il problema da te citato che è di ben più difficile risoluzione.
E usano anche java o c# per i tool.
Il grosso del lavoro viene comunque fatto in c++.
Ma ciò non toglie che sarebbero felicissimi di NON usare C++.
Ripeto, chiedi a fek quanto era entusiasta di eliminare i bug che spuntavano come funghi proprio a causa di certe caratteristiche del C++. ;)
e che c'entra con quello che ho detto io? :)
Io ho detto che sarebbe felicissimo, come ha + volte affermato, di poter utilizzare un linguaggio + elegante di C++ per il suo lavoro.
Non l'ha mai nascosto quando scrivevamo Diamond Crush.
L'unico problema è che per ora non lo può fare per il problema che ho citato prima.
Io ho detto che python è più elegante e divertente da usare di c++ ma che c++ è indispensabile in tantissimi settori tra cui buona parte di quelli più imporanti e interessanti.
Il tuo post conferma quello che dico.
Ma ciò non toglie che sarebbero felicissimi di NON usare C++.
Ripeto, chiedi a fek quanto era entusiasta di eliminare i bug che spuntavano come funghi proprio a causa di certe caratteristiche del C++. ;)
Su questo forum si passa dall'affermare verità sacrosante (che il c++ sia difficile, improduttivo, bug prone, verboso) all'arrampicarsi sugli specchi per dimostare l'impossibile (la possibilità di usare python/ruby/java in certi campi applicativi).
~FullSyst3m~
09-04-2009, 12:28
yes..
prima era alla lionhead che poi è stata acquisita da microsoft, ora è alla crytek in germania.
Accipicchia, non lo sapevo. Ho letto solo qualche post suo, ma non sapevo fosse cosi bravo.
Visto che sono io quello con le idee poco chiare segnalami dei prodotti concorrenti scritti in python. Io aspetto qui.
La NASA usa Python.
Microsoft usa Python.
Google usa Python.
Bit torrent scritto in Python.
E molti altri.
^TiGeRShArK^
09-04-2009, 12:31
Hai idea della differenza di prestazioni fra c++ e python? Dei problemi causati dalla gestione della memoria di python?
Linux è scritto in c.
Bsd in c.
Macosx in c.
Windows in c++.
webkit in c++.
gecko in c++.
trident in c++.
Visto che sono io quello con le idee poco chiare segnalami dei prodotti concorrenti scritti in python. Io aspetto qui.
Singularity, già citato da cesare, è un sistema operativo scritto con Sing# un estensione di C#.
quanto al codice di firefox, ci andrei un pò cauto a citarlo come esempio di buona programmazione. :p
Comunque ad esempio Eclipse è scritto in Java e ha prestazioni di tutto rispetto, Opera mini (tanto per citare un browser) è scritto in java e gira MOLTO meglio rispetto al browser di default scritto in C++, Vuze è scritto in java ed è il + veloce client torrent esistente (+ veloce di utorrent).... devo continuare?
Accipicchia, non lo sapevo. Ho letto solo qualche post suo, ma non sapevo fosse cosi bravo.
La NASA usa Python.
Microsoft usa Python.
Google usa Python.
Bit torrent scritto in Python.
E molti altri.
Le società che hai citato utilizzano tutte anche c/c++ e probabilmente utilizzano anche perl o qualche altro linguaggio orribile.
Io ti ho citato tutti i browser, tutti gli os, tutti gli engine dei videogiochi.
Tu bit torrent?
^TiGeRShArK^
09-04-2009, 12:34
Sapevo invece che si stava anche studiando il modo di suddividere i software ad un livello più grossolano e dividere sui vari core vere e proprie parti di programma (leggi classi, oggetti) e non singole funzioni... per diminuire l'overhead necessario al "cambio funzione".
Vedremo chi l'avrà vinta...
E come fai a calcolare automaticamente le dipendenze?
Con l'approccio funzionale puro si elimina il problema alla radice rimuovendo la dipendenza dei dati tra le varie funzioni pure.
Calcolare le dipendenze, se non ricordo male, è un problema intrattabile. :p
^TiGeRShArK^
09-04-2009, 12:36
Io ho detto che python è più elegante e divertente da usare di c++ ma che c++ è indispensabile in tantissimi settori tra cui buona parte di quelli più imporanti e interessanti.
Il tuo post conferma quello che dico.
Dipende dalla tua visione dei settori + importanti e interessanti.
Come già detto python e LUA hanno un grande spazio nel mercato videoludico.
E magari in futuro finalmente il sogno di fek potrà avverarsi... (lo spero tanto per lui :asd: )
_Claudio
09-04-2009, 12:37
E come fai a calcolare automaticamente le dipendenze?
Con l'approccio funzionale puro si elimina il problema alla radice rimuovendo la dipendenza dei dati tra le varie funzioni pure.
Calcolare le dipendenze, se non ricordo male, è un problema intrattabile. :p
Appunto per questo è in fase di studio... Però se si vuole fare lo sforzo in silicio e dotare l'hw di unità apposta per gestire la "crema" attorno ai core che gestiscono singole classi senza farle diventare un collo di bottiglia secondo me il problema è risolto.
Singularity, già citato da cesare, è un sistema operativo scritto con Sing# un estensione di C#.
[QUOTE]
Io ti cito windows, linux, bsd, mac osx (ma potrei aggiungertene altri) e tu mi citi un kernel sperimentale che probabilmente non avrà mai applicazioni pratiche?
[QUOTE]
quanto al codice di firefox, ci andrei un pò cauto a citarlo come esempio di buona programmazione. :p
Va bene allora chrome che è nato ieri? In che linguaggio è scritto webkit?
Si può dire che il 99% dei browser usati su pc sono scritti in c++ o è falso?
Comunque ad esempio Eclipse è scritto in Java e ha prestazioni di tutto rispetto, Opera mini (tanto per citare un browser) è scritto in java e gira MOLTO meglio rispetto al browser di default scritto in C++, Vuze è scritto in java ed è il + veloce client torrent esistente (+ veloce di utorrent).... devo continuare?
Il browser mobile di gran lunga migliore e più utilizzato è quello dell'iphone. Scritto in c++ e objective-c. Io ti cito windows, linux, mac osx, engine di rendering dei videogiochi e tu mi citi vuze?
^TiGeRShArK^
09-04-2009, 12:41
Appunto per questo è in fase di studio... Però se si vuole fare lo sforzo in silicio e dotare l'hw di unità apposta per gestire la "crema" attorno ai core che gestiscono singole classi senza farle diventare un collo di bottiglia secondo me il problema è risolto.
non ci capiamo mi sa...
come fai a gestire le dipendenze?
Una classe ha evidentemente altri collegamenti con altre classi e poichè, al contrario della programmazione funzionale, dati e metodi sono mescolati tra loro, come faresti ad ottenere questo isolamento necessario per la suddivisione tra i vari core?
_Claudio
09-04-2009, 12:44
non ci capiamo mi sa...
come fai a gestire le dipendenze?
Una classe ha evidentemente altri collegamenti con altre classi e poichè, al contrario della programmazione funzionale, dati e metodi sono mescolati tra loro, come faresti ad ottenere questo isolamento necessario per la suddivisione tra i vari core?
Hardware e linguaggio intermedio... Se due oggetti dipendenti vengono usati su più core la separazione è ottenuta dal paradigma procedurale (un'istruzione dopo l'altra) che ad ora rappresenta lo stato dell'arte, se si esce dal paradigma procedurale allora bisogna ridefinire un po' tutto...
^TiGeRShArK^
09-04-2009, 12:45
Io ti cito windows, linux, bsd, mac osx (ma potrei aggiungertene altri) e tu mi citi un kernel sperimentale che probabilmente non avrà mai applicazioni pratiche?
sbagli o avevi detto che non è possibile scrivere un sistema operativo in un linguaggio che non sia C o C++?
io ti ho dimostrato che è possibile :)
Va bene allora chrome che è nato ieri? In che linguaggio è scritto webkit?
Si può dire che il 99% dei browser usati su pc sono scritti in c++ o è falso?
vero, e quindi?
Ciò non toglie che sia possibilissimo scrivere un browser in un altro linguaggio, non è assolutamente esclusiva del C/C++.
Il browser mobile di gran lunga migliore e più utilizzato è quello dell'iphone. Scritto in c++ e objective-c. Io ti cito windows, linux, mac osx, engine di rendering dei videogiochi e tu mi citi vuze?
Safari per iphone NON è scritto in C++.
è scritto sul framework cocoa che utilizza Objective C 2.0, però con alcune "mutilazioni" tipo la mancanza del garbage collector e l'utilizzo del reference counting.
E comunque non c'entra nulla dato che parlavamo della possibilità di scrivere browser in java.
E, come ti ho fatto notare, opera mini gira addirittura meglio dei vari browser di default che girano in C++. :)
Dipende dalla tua visione dei settori + importanti e interessanti.
Come già detto python e LUA hanno un grande spazio nel mercato videoludico.
E magari in futuro finalmente il sogno di fek potrà avverarsi... (lo spero tanto per lui :asd: )
Prendiamo una applicazione web.
Un browser scritto in c++, basato su librerie c/c++ che gira su un sistema opearativo scritto in c++, fa una chiamata http ad un server remoto scritto in c/c++ che gira su un sistema operativo scritto in c/c++, un scripitino di 30 righe scritto in ruby (che gira su una vm scritta in c) fa una chiamata a un db scritto in c/c++......
ruby lo puoi sostituire con php/java/python/perl. La parte scritta in c++ no.
Prova a farti assumere in una software house dicendo che conosci bene lua ma non c++!
La soluzione alla diatriba sarebbe sviluppare un C++ 2.0 :D (CII? :asd:)
Simile al vecchio, ma
-senza i casini di gestione (.h, .cpp, include, define, pragma once e quant'altro)
-supporto di tipi generici
-nativamente threaded
-supporto nativo ad un pluggable garbage collector (che può essere non usato o sostituito)
-libreria standard al livello di Boost (che include quindi anche un pò di funzionale)
-garbage collector standard pronto all'uso
-tipi vettoriali nativi (perchè sarebbe ottimo per la grafica 3d)
Credo che l'unico linguaggio capace di sostituire C++ sia un nuovo C++ in effetti.
sarebbe il linguaggio dei miei sogni, ma tanto sto sognando e per di più sono offtopic :sofico:
EDIT: Cmq tutto si può sviluppare con tutto, mi sembra la scoperta dell'acqua calda.
Un browser lo puoi scrivere anche in Brainfuck, se sei abbastanza folle :asd:
Quindi non mi stupisco minimamente che si possa fare anche in Java... ma evidentemente a nessuna persona sana gli va di iniziare da 0 un progetto quando esistono fior fiore di librerie _mature_ e _complete_ in C++ che ti permettono di fare tanto in poco.
Qua ci si scorda sempre che il linguaggio è solo la base, il problema lo devi risolvere te, e devi scrivere anche il codice che lo risolve.
C++ non viene abbandonato perchè migliaia di persone lo hanno usato per risolvere problemi, ed ora le soluzioni sono pronte e disponibili per tutti.
In fondo C++ è quello che ha la library più piccola, ma anche la più ampia di tutti :D
^TiGeRShArK^
09-04-2009, 12:51
Hardware e linguaggio intermedio... Se due oggetti dipendenti vengono usati su più core la separazione è ottenuta dal paradigma procedurale (un'istruzione dopo l'altra) che ad ora rappresenta lo stato dell'arte, se si esce dal paradigma procedurale allora bisogna ridefinire un po' tutto...
il paradigma procedurale soffre anch'esso ovviamente delle dipendenze...
basti pensare a questo:
a = 2 + 3
b = a + 4
c = a + b
Non puoi calcolare il valore di c se prima non conosci il valore di a e b.
E questo valore potrebbe essere calcolato con tempi anche molto diversi tra loro, dipende dalle varie latenze in gioco.
Quindi devi necessariamente eseguire le istruzioni nella sequenza corretta e attendere il completamento delle prime due prima di eseguire la terza.
E, se non ricordo male, il problema di suddividere le dipendenze su + core è un problema molto ma molto complesso, se non addirittura intrattabile visto quante variabili entrano in gioco (dipendenze concatenate, latenze non deterministiche sulle varie operazioni, ecc.)
^TiGeRShArK^
09-04-2009, 12:54
Prendiamo una applicazione web.
Un browser scritto in c++, basato su librerie c/c++ che gira su un sistema opearativo scritto in c++, fa una chiamata http ad un server remoto scritto in c/c++ che gira su un sistema operativo scritto in c/c++, un scripitino di 30 righe scritto in ruby (che gira su una vm scritta in c) fa una chiamata a un db scritto in c/c++......
ruby lo puoi sostituire con php/java/python/perl. La parte scritta in c++ no.
Prova a farti assumere in una software house dicendo che conosci bene lua ma non c++!
puoi sostituire benissimo anche la parte scritta in C++.
Ad esempio Jruby è una discreta implementazione di ruby che gira sotto la Java VM, che è mediamente + veloce di ruby 1.8.6 scritto in C (anche se ancora non ha raggiunto la velcoità di ruby 1.9.0).
Esistono anche database scritti in java, con la JDK 6 addirittura è già incluso java DB, aka apache Derby.
Quindi, si, sarebbe possibilissimo trasformare il tutto in un'applicazione java pura, o in un applicazione mista ruby + java.
~FullSyst3m~
09-04-2009, 12:54
Io ti ho citato tutti i browser, tutti gli os, tutti gli engine dei videogiochi.
Tu bit torrent?
Io ti cito windows, linux, bsd, mac osx (ma potrei aggiungertene altri) e tu mi citi un kernel sperimentale che probabilmente non avrà mai applicazioni pratiche?
Io ti cito windows, linux, mac osx, engine di rendering dei videogiochi e tu mi citi vuze?
Guarda quando sono stati scritti linux, windows ecc.
Prova a farti assumere in una software house dicendo che conosci bene lua ma non c++!
Fortunatamente molte software house ora non richiedono solo conoscenze di C++.
@Tommo: sognare è bello :asd:
^TiGeRShArK^
09-04-2009, 12:55
La soluzione alla diatriba sarebbe sviluppare un C++ 2.0 :D (CII? :asd:)
Simile al vecchio, ma
-senza i casini di gestione (.h, .cpp, include, define, pragma once e quant'altro)
-supporto di tipi generici
-nativamente threaded
-supporto nativo ad un pluggable garbage collector (che può essere non usato o sostituito)
-libreria standard al livello di Boost (che include quindi anche un pò di funzionale)
-garbage collector standard pronto all'uso
-tipi vettoriali nativi (perchè sarebbe ottimo per la grafica 3d)
Credo che l'unico linguaggio capace di sostituire C++ sia un nuovo C++ in effetti.
sarebbe il linguaggio dei miei sogni, ma tanto sto sognando e per di più sono offtopic :sofico:
L'objective C 2.0 già imho è MOLTO meglio rispetto al C++ dato che implementa una buona parte delle cose che hai citato.
_Claudio
09-04-2009, 12:55
il paradigma procedurale soffre anch'esso ovviamente delle dipendenze...
basti pensare a questo:
Non puoi calcolare il valore di c se prima non conosci il valore di a e b.
E questo valore potrebbe essere calcolato con tempi anche molto diversi tra loro, dipende dalle varie latenze in gioco.
Quindi devi necessariamente eseguire le istruzioni nella sequenza corretta e attendere il completamento delle prime due prima di eseguire la terza.
E, se non ricordo male, il problema di suddividere le dipendenze su + core è un problema molto ma molto complesso, se non addirittura intrattabile visto quante variabili entrano in gioco (dipendenze concatenate, latenze non deterministiche sulle varie operazioni, ecc.)
È vero, uscendo dal paradigma procedurale (e ancora mi chiedo a cosa esistono le classi se le istruzioni vanno una dietro l'altra...) però non avrebbero senso gli esempi come i tuoi... siamo fuori dall'ottica comune.
Le dipendenze sono intrattabili, certo più sale il livello di grana più sono intrattabili... però... niente è impossibile.
sbagli o avevi detto che non è possibile scrivere un sistema operativo in un linguaggio che non sia C o C++?
io ti ho dimostrato che è possibile :)
Probabilmente puoi pure scriverlo in brainfuck un sistema operativo. Nessuno lo mette in dubbio. Stai cercando di dimostrare l'indimostrabile. Tutti (o almeno il 99%) dei sistemi operativi realmente utilizzati sono scritti in c/c++. Si può affermare che nel campo dei sistemi operativi il linguaggio che la fa da padrone è il c/c++?
Safari per iphone NON è scritto in C++.
è scritto sul framework cocoa che utilizza Objective C 2.0, però con alcune "mutilazioni" tipo la mancanza del garbage collector e l'utilizzo del reference counting.
FALSO.
Ti stai confonendo. E' vero che su iphone si programma con Objective C 2.0 ma il kernel è scritto in c, così come le librerie core foundation e altre. Safari mobile è basato su webkit ed è scritto in c++.
Solo l'interfaccina di safari mobile è scritta in objective-c.
||ElChE||88
09-04-2009, 12:57
La soluzione alla diatriba sarebbe sviluppare un C++ 2.0 :D (CII? :asd:)
:O
http://img06.picoodle.com/img/img06/3/4/9/elche/f_Untitled1m_af4448e.png
^TiGeRShArK^
09-04-2009, 12:58
È vero, uscendo dal paradigma procedurale (e ancora mi chiedo a cosa esistono le classi se le istruzioni vanno una dietro l'altra...) però non avrebbero senso gli esempi come i tuoi... siamo fuori dall'ottica comune.
Le dipendenze sono intrattabili, certo più sale il livello di grana più sono intrattabili... però... niente è impossibile.
:boh:
ad oggi, a meno di rivoluzioni che possono sempre accadere, l'approccio + promettente mi pare senz'altro quello funzionale, non per niente la microsoft sta spingendo molto su F# e su C# con LINQ.
Comunque tra una 20ina d'anni potrebbe essere anche stravolto tutto se prenderanno piede i calcolatori quantistici. :sofico:
~FullSyst3m~
09-04-2009, 13:03
:O
http://img06.picoodle.com/img/img06/3/4/9/elche/f_Untitled1m_af4448e.png
:asd:
ad oggi, a meno di rivoluzioni che possono sempre accadere, l'approccio + promettente mi pare senz'altro quello funzionale, non per niente la microsoft sta spingendo molto su F# e su C# con LINQ.
Comunque tra una 20ina d'anni potrebbe essere anche stravolto tutto se prenderanno piede i calcolatori quantistici.
F# in quale ambiti viene usato? Che tipo di linguaggio è?
P.S: cosa dovrebbero fare i computer quantistici in teoria?
:O
http://img06.picoodle.com/img/img06/3/4/9/elche/f_Untitled1m_af4448e.png
:D
Spettacolo! Si potremmo chiamarlo C-GRID! :asd:
Però a quel punto si dovrebbe inserire il supporto per il cloud computing.
^TiGeRShArK^
09-04-2009, 13:04
Probabilmente puoi pure scriverlo in brainfuck un sistema operativo. Nessuno lo mette in dubbio. Stai cercando di dimostrare l'indimostrabile. Tutti (o almeno il 99%) dei sistemi operativi realmente utilizzati sono scritti in c/c++. Si può affermare che nel campo dei sistemi operativi il linguaggio che la fa da padrone è il c/c++?
ad oggi si.
FALSO.
Ti stai confonendo. E' vero che su iphone si programma con Objective C 2.0 ma il kernel è scritto in c, così come le librerie core foundation e altre. Safari mobile è basato su webkit ed è scritto in c++.
Solo l'interfaccina di safari mobile è scritta in objective-c.
boh, io so solo che quando apro un progetto per iphone posso scegliere solo objective C come linguaggio se non ricordo male...
E comunque questo dettaglio non risponde alla mia domanda se hai finalmente capito che opera mini, scritto in java, è + performante dei vari browser per cellulari scritti in c++. ;)
^TiGeRShArK^
09-04-2009, 13:08
:asd:
F# in quale ambiti viene usato? Che tipo di linguaggio è?
P.S: cosa dovrebbero fare i computer quantistici in teoria?
F# è un linguaggio funzionale presentato dalla MS verso settembre-ottobre se non ricordo male....
e dovrebbe essere basato su ocaml e similari...
http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/
i computer quantistici possono risolvere dei problemi che ad oggi sono con una complessità esponenziale in una complessità polinomiale.
ad esempio è possibile fattorizzare un numero primo con l'algoritmo di shor con una complessità O((logN)3) anzichè l'attuale complessità esponenziale del miglior algoritmo per computer classici.
mindwings
09-04-2009, 13:11
Il futuro, con l'ampissima diffusione dei multicore, si tenderà ad utilizzare sempre di + programmi che permettano di gestire facilmente la programmazione funzionale, in modo di poter suddividere automaticamente il carico di lavoro tra i vari core mediante l'utilizzo di funzioni pure.
E C++ sinceramente non lo vedo molto adatto per tutto questo.
Ad oggi il migliore tra i linguaggi che uso in quest'ambito è C# che permette tramite PLINQ (che a breve diventerà parte integrante del linguaggio) di fare ciò molto semplicemente.
Tra l'altro c'era anche un articolo interessante sull'evoluzione futura dei giochi e i linguaggi funzionali che aveva linkato qualcuno un bel pò di tempo fa. ;)
Da uno che se ne intende di engine 3d :fagiano:
http://www.google.it/url?sa=t&source=web&ct=&cd=2&url=http%3A%2F%2Fwww.st.cs.uni-saarland.de%2Fedu%2Fseminare%2F2005%2Fadvanced-fp%2Fdocs%2Fsweeny.pdf&ei=itfdSfugPIqSsAaaifW-DA&usg=AFQjCNFB7MhqNSDWAbzx57AJm6m8MNrYKQ&sig2=CgWZpeL85Vo7gg_k_u7PMQ
ad oggi si.
boh, io so solo che quando apro un progetto per iphone posso scegliere solo objective C come linguaggio se non ricordo male...
E comunque questo dettaglio non risponde alla mia domanda se hai finalmente capito che opera mini, scritto in java, è + performante dei vari browser per cellulari scritti in c++. ;)
Ti stai facendo trascinare dalla foga del discorso e non stai argomentando in maniera valida.
Non ricordi male per quanto riguarda l'iphone. In realtà cmq utilizzando file .mm anzichè file .m puoi mescolare c++ e objective c e utilizzare pure STL. Android invece permette ( o almeno permetteva) di sviluppare solo in java ma ciò non implica che il kernel sia scritto in java o le librerie di base siano scritte in java.
Per quanto riguarda opera mini non ho statistiche a riguardo, non so quale sia la qualità del rendering, quali i limiti, quale l'occupazione di memoria, quali le caratteristiche. Potrebbe essere veramente ciò che dici e la ragione potrebbe essere dovuta solo ed esclusivamente ad una buona progettazione.
Da uno che se ne intende di engine 3d :fagiano:
http://www.google.it/url?sa=t&source=web&ct=&cd=2&url=http%3A%2F%2Fwww.st.cs.uni-saarland.de%2Fedu%2Fseminare%2F2005%2Fadvanced-fp%2Fdocs%2Fsweeny.pdf&ei=itfdSfugPIqSsAaaifW-DA&usg=AFQjCNFB7MhqNSDWAbzx57AJm6m8MNrYKQ&sig2=CgWZpeL85Vo7gg_k_u7PMQ
Qualcuno me lo riassume?
^TiGeRShArK^
09-04-2009, 13:27
Ti stai facendo trascinare dalla foga del discorso e non stai argomentando in maniera valida.
Non ricordi male per quanto riguarda l'iphone. In realtà cmq utilizzando file .mm anzichè file .m puoi mescolare c++ e objective c e utilizzare pure STL. Android invece permette ( o almeno permetteva) di sviluppare solo in java ma ciò non implica che il kernel sia scritto in java o le librerie di base siano scritte in java.
Per quanto riguarda opera mini non ho statistiche a riguardo, non so quale sia la qualità del rendering, quali i limiti, quale l'occupazione di memoria, quali le caratteristiche. Potrebbe essere veramente ciò che dici e la ragione potrebbe essere dovuta solo ed esclusivamente ad una buona progettazione.
provalo, la cosa migliore in questi casi sono i test reali, le statistiche e i dati non contano molto. ;)
~FullSyst3m~
09-04-2009, 13:29
F# è un linguaggio funzionale presentato dalla MS verso settembre-ottobre se non ricordo male....
e dovrebbe essere basato su ocaml e similari...
http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/
i computer quantistici possono risolvere dei problemi che ad oggi sono con una complessità esponenziale in una complessità polinomiale.
ad esempio è possibile fattorizzare un numero primo con l'algoritmo di shor con una complessità O((logN)3) anzichè l'attuale complessità esponenziale del miglior algoritmo per computer classici.
Credo che dovrò aspettare di farle queste cose per capire :D
^TiGeRShArK^
09-04-2009, 13:30
Credo che dovrò aspettare di farle queste cose per capire :D
ehmmm... si per capirle per bene mi sa di si :p
mindwings
09-04-2009, 13:36
Qualcuno me lo riassume?
In 2 parole sta scritto che i linguaggi funzionali sono il futuro... Dato che gestiscono la concorrenza in un modo piu' naturale.
[Cmq ti consiglio di leggere le slides :p ]
~FullSyst3m~
09-04-2009, 13:41
ehmmm... si per capirle per bene mi sa di si :p
Eh infatti :)
Vorrei dire una cosa: leggo discussioni qua, discussioni in altri forum, libri, documenti, wikipedia. Però ancora non ho trovato una definizione di paradigma funzionale, strutturale e procedurale che sia uguale per tutti.
Che siamo a self service? :D
In 2 parole sta scritto che i linguaggi funzionali sono il futuro... Dato che gestiscono la concorrenza in un modo piu' naturale.
[Cmq ti consiglio di leggere le slides :p ]
Veramente ciò che dice è decisamente più complesso, e poi quello speech è old ;)
Notare il logo pre-release di Gears of War... non è più recente del 2005.
Cmq lui dice che sostanzialmente gli sta bene il modello di ora, però vorrebbe che i dati e le operazioni fossero legate in maniera più trasparente, per esempio per poter prendere 2 array e controllarne gli elementi in maniera parallela e senza mille NULL checks.
E' un problema che può essere risolto prendendo spunto dai linguaggi funzionali, ma da qui a dire che SOLO i linguaggi funzionali saranno il futuro ne passa ;)
Per la verità è implementabile anche in C++, e da quello che ho capito già è stato fatto in Gears of War.
Tuttavia sono d'accordo con la necessità di cambiare le cose, per esempio il CUDA mostra tutti quanti questi limiti: per accedere all'elemento corrente del buffer sono necessari 6 (SEI) indici... e se per errore sfori (cosa facilissima) il Kernel fallisce bloccando l'intero blocco di thread... il che è quantomeno agghiacciante :asd:
ma con l'hardware di ora l'unica scelta è (purtroppo) il C, perchè si mappa quasi direttamente all'hardware...
Se io un problema posso risolverlo in Python perchè dovrei usare C++?
Se conosci bene python e ti permette di fare quello che devi fare più velocemente non c'è nessun motivo per cui dovresti usare c++, a parte il valutare se nel contesto in cui stai programmando ti servono le prestazioni in più che ti garantisce il c++. Il problema è che molte cose non le puoi fare con python, con c++ si.
E perchè mai? Non nego assolutamente quello che ho detto. Era riferito semplicemente al contesto. Se continui a leggere prima di giudicare vedrai che ho scritto che quando si parla di OO si sente parlare tantissimo di Java e compagnia che non di C++. Mi sembra chiaro.
Tu hai scritto che non si sente parlare per niente di c++, mentre degli altri si, il che è una assurdità
Guarda quando sono stati scritti linux, windows ecc.
Fortunatamente molte software house ora non richiedono solo conoscenze di C++.
Quindi secondo te se iniziassero a scrivere un sistema operativo da 0 domani mattina lo scriverebbero in python o simile? :sbonk:
~FullSyst3m~
09-04-2009, 13:50
Tu hai scritto che non si sente parlare per niente di c++, mentre degli altri si, il che è una assurdità
Ripeto, leggi quello che ho scritto sotto e guarda il contesto. Con continuare a battere sempre lo stesso chiodo.
Quindi secondo te se iniziassero a scrivere un sistema operativo da 0 domani mattina lo scriverebbero in python o simile? :sbonk:
Perchè tu credi che con gli altri linguaggi che ci sono un SO non in C o C++ non si può scrivere? E' già stato nominato un altro SO se leggi bene, che non è scritto in C o C++.
mindwings
09-04-2009, 13:57
Veramente ciò che dice è decisamente più complesso, e poi quello speech è old ;)
Notare il logo pre-release di Gears of War... non è più recente del 2005.
Cmq lui dice che sostanzialmente gli sta bene il modello di ora, però vorrebbe che i dati e le operazioni fossero legate in maniera più trasparente, per esempio per poter prendere 2 array e controllarne gli elementi in maniera parallela e senza mille NULL checks.
E' un problema che può essere risolto prendendo spunto dai linguaggi funzionali, ma da qui a dire che SOLO i linguaggi funzionali saranno il futuro ne passa ;)
Per la verità è implementabile anche in C++, e da quello che ho capito già è stato fatto in Gears of War.
Tuttavia sono d'accordo con la necessità di cambiare le cose, per esempio il CUDA mostra tutti quanti questi limiti: per accedere all'elemento corrente del buffer sono necessari 6 (SEI) indici... e se per errore sfori (cosa facilissima) il Kernel fallisce bloccando l'intero blocco di thread... il che è quantomeno agghiacciante :asd:
ma con l'hardware di ora l'unica scelta è (purtroppo) il C, perchè si mappa quasi direttamente all'hardware...
Infatti ho detto 2 parole... :Prrr:
Piu' che spunto secondo me convergeranno linguaggi OO e linguaggi funzionali...
^TiGeRShArK^
09-04-2009, 13:59
Veramente ciò che dice è decisamente più complesso, e poi quello speech è old ;)
Notare il logo pre-release di Gears of War... non è più recente del 2005.
Cmq lui dice che sostanzialmente gli sta bene il modello di ora, però vorrebbe che i dati e le operazioni fossero legate in maniera più trasparente, per esempio per poter prendere 2 array e controllarne gli elementi in maniera parallela e senza mille NULL checks.
E' un problema che può essere risolto prendendo spunto dai linguaggi funzionali, ma da qui a dire che SOLO i linguaggi funzionali saranno il futuro ne passa ;)
Per la verità è implementabile anche in C++, e da quello che ho capito già è stato fatto in Gears of War.
Tuttavia sono d'accordo con la necessità di cambiare le cose, per esempio il CUDA mostra tutti quanti questi limiti: per accedere all'elemento corrente del buffer sono necessari 6 (SEI) indici... e se per errore sfori (cosa facilissima) il Kernel fallisce bloccando l'intero blocco di thread... il che è quantomeno agghiacciante :asd:
ma con l'hardware di ora l'unica scelta è (purtroppo) il C, perchè si mappa quasi direttamente all'hardware...
in effetti avevo visto l'esempio di CUDA scritto da marco.r e devo dire che è davvero per masochisti scrivere una cosa del genere :asd:
^TiGeRShArK^
09-04-2009, 14:01
Infatti ho detto 2 parole... :Prrr:
Piu' che spunto secondo me convergeranno linguaggi OO e linguaggi funzionali...
anche secondo me.
Penso che sia il tradeoff migliore anche vedendo C# + LINQ promosso dalla MS...
vabbè che io sono di parte perchè i linguaggi funzionali puri in effetti non mi attirano molto e preferisco molto di + un approccio misto :asd:
cdimauro
09-04-2009, 14:40
Cioè in pratica oltre ad poter avere argomenti opzionali in aggiunta ne hai anche di fissi con la sintassi chiave = valore?
Sì.
Ad esempio?
Direttamente dal what's new di Python 3.0:
Extended Iterable Unpacking. You can now write things like a, b, *rest = some_sequence. And even *rest, a = stuff. The rest object is always a (possibly empty) list; the right-hand side may be any iterable. Example:
(a, *rest, b) = range(5)
This sets a to 0, b to 4, and rest to [1, 2, 3].
Cioè? Non ho mai sentito di annotazioni e metaclassi in Python.
Le annotazioni ci sono solo dalla 3.0, mentre le metaclassi da un bel pezzo.
Le set e le dict comprehension usano lo stesso principio delle liste? Tipo:
[print i for i in nomi]
Sì:
Dictionary comprehensions: {k: v for k, v in stuff} means the same thing as dict(stuff) but is more flexible.
Set comprehensions are also supported; e.g., {x for x in stuff} means the same thing as set(stuff) but is more flexible.
;)
Però ha attecchito col C++ e ha attecchito anche molto bene visto che oramai se si parla di OO si parla di Java e di C++ e quando si parla di Java ci si rifà quasi sempre al C++.
Al momento quando si parla di OOP buona parte degli esempi sono in Java.
Del C++ si parla molto meno, e in ogni caso l'unico merito che ha è la sua diffusione.
Io non userei labview per fare applicazioni desktop... perchè non so neppure se si possono fare applicazioni desktop...
Qualunque linguaggio si può usare allo scopo.
Nelle loro nicchie sono quanto di meglio ci possa essere... ma nel resto del mondo? Se consideriamo le nicche allora non ce la caviamo più.
Se esistono è perché se ne sentiva il bisogno, e questo bisogno è stato coperto da un apposito linguaggio, appunto.
La soluzione a determinati problemi a volte porta alla definizione di linguaggi ad hoc. E non ci vedo nulla di male in ciò.
La torre di Pisa non sarebbe la torre di Pisa se fosse nata dritta.
Al contrario: è nata dritta. ;)
C e C++ sono nati "storti", invece. :D
Ci sarà un motivo se adesso che si richiedono certi concetti siano i più diffusi nonostante i loro difetti. Sto ripassando in questi giorni proprio C++ per iniziare un grosso progetto, sto rileggendo il libro di Stroustrup e mi viene quasi il vomito per la verbosità e il disordine.
Il merito è la diffusione, appunto, trainata da Unix.
Da quello che ho visto Bison, Flex e Yacc senza C... ai tempi in cui sono stati fatti dubito si poteva fare di meglio con altro. Poi è una mia opinione.
Di generatori di compilatori per altri linguaggi ne sono sempre esistiti, come esistono versioni di LEX e YACC che generano codice in linguaggi diversi dal C/C++.
Ad esempio io utilizzavo questo http://www.musikwissenschaft.uni-mainz.de/~ag/tply/ per il Turbo Pascal e Delphi.
Però tutti hanno la loro prima implementazione in C.
Non sempre. Diciamo che da quando esiste YACC, che ha facilitato molto la scrittura di parser, in genere la prima implementazione è in C.
Senza dubbio, però è come dire che ad alcuni non piace la pizza... È sicuramente vero, ma statisticamente la pizza è un piatto molto apprezzato perchè esistono tante pizzerie e in tempo di crisi fanno comunque il pienone di gente.
Non c'entra. Chi ti dice che un programmatore che utilizza C++ tutti i giorni non lo trova comunque naturale?
Uso C++ perchè se non sto sul CLR vado a contatto col metallo (come si usa dire su questo forum)
Non è un modo di dire del forum: il metal bashing è un termine a dir poco arcaico, che risale a quando le macchine si programmavano in linguaggio macchina o assembly.
e tanto vale uso il linguaggio che mi permette di martellare meglio e direttamente il metallo. Tutto qui, poi rimane sempre il fatto che una persona può usare quello che vuole.
Continuo a non vedere il nesso. Scrivere in C++ non significa necessariamente interfacciarsi direttamente con l'hardware. Anzi, da un bel po' di anni a questa parte, con s.o. che isolano le applicazioni, questo non è mai vero, se non per codice di sistema.
Un'applicazione .NET compilata in codice nativo non ha nulla da invidiare a un'altra scritta in C++, se non per il fatto che in genere si impiega meno tempo a scriverla, e l'ambiente è più controllato.
A volte le nicchie nascono proprio perchè un linguaggio le scava... :muro:
Come programmatori siamo tenuti a trovare il miglior compromesso per la soluzione di un problema. Se questo comporta anche la scrittura di un apposito linguaggio, rientra nel gioco.
Anche io trovo insana questa cosa, ma anche se faccio parte del mondo accademico preferisco le cose pratiche e funzionanti e se con un po' di attenzione si possono fare cose utili usando qualcosa di dichiaratamente insano (l'importante è che lo si sappia e non venga presentato come la miglior cosa di questo mondo)... perchè no... poi che accademicamente e formalmente vada migliorata la cosa è sacrosanto.
Un programmatore è pragmatico per definizione, ma c'è sempre un limite alla decenza. Utilizzare un preprocessore nel 2009 lo trovo a dir poco indecente (se non in progetti in cui sia necessaria la compilazione condizionale).
Assolutamente no, gli algoritmi per carità spero rimangano gli stessi a prescindere dal SO, sapevo che fare il porting consisteva nel sistemare gli accessi e l'uso delle librerie... che guarda un po' nell'analisi della complessità costano O(1).
Hai mai avuto a che fare coi campi di bit? Questo è un noto caso di non portabilità.
Quello che voglio dire io è che bisogna dare il giusto peso a C/C++ che sono diffusissimi e ad un livello intermedio di sviluppo (non direttamente sulla CPU, nè ad un livello molto alto ad es. nella programmazione web o sopra il CLR) rappresentano la miglior soluzione sia per SO, che per sistemi embedded, e ancora per molto tempo (almeno finchè il web non diventerà totalmente pervasivo) sistemi embedded e SO rappresenteranno ciò che gli utenti useranno. Poi ognuno usa il linguaggio che più preferisce ma non dovrebbe girare la testa e far finta di niente, così come io che non so usare il ruby (pochi esempi di codice non valgono niente) però non denigro il fatto che sia un'evoluzione in termini di espressività.
Nessuno dice che C e C++ non siano più adatti per certi scopi. Semplicemente trovo che siano sopravvalutati e spesso utilizzati in progetti in cui se ne potrebbe fare tranquillamente a meno. O, addirittura, si scelgono perché "fa figo".
Ho capito. Beh comunque le differenze non mi paiono eccessive. Si può benissimo imparare la 3 e poi imparare le differenze con la 2.6, in modo da non avere problemi :D
Allora meglio il contrario, no? Partire dal 2.6, e passare alla 3.0 se ci saranno le librerie.
Quando si parla di c++ secondo me diventate poco obiettivi.
E' difficile da padroneggiare? Si
Porta anche programmatori esperti a infilare bug orribili e devastanti? Si.
Però a sentire parlare qualcuno di voi sembra il linguaggio più brutto e inutile del mondo, utilizzato da due o tre masochisti sulla faccia della terra.
Tutti gli Os (parlo di quelli utilizzati, non di quelli morti o di quelli che devono nascere) sono scritti in c o c++. Tutti gli engine grafici dei videogiochi sono scritti in c++. Tutti gli engine dei browser sono scritti in c/c++. La maggior parte delle virtual machine dei linguaggi correntemente utilizzati sono scritte in c/c++. Nel settore della difesa, sistemi real time e mission critical nella maggior parte dei casi si usa c o c++. Nell'embedded si usa c o c++, nella computer grafica si usa quasi esclusivamente c++.
Tutti gli RDBMS più utilizzati sono scritti in c/c++ e potrei continuare fino a domani.
Non parliamo di codec/librerie/driver.
Pure a Facebook stanno cercando programmatori c++. Il motore di ricerca google per buona parte è scritto in c++.
Non è vero che in letteratura quando si parla di object orientation non viene citato il c++.
Ne è un esempio il libro di Gamma etc sui Design Patterns.
Che però utilizza anche SmallTalk. E aggiungo: fortunatamente, così almeno il codice è più comprensibile.
Quanto a Google, la tendenza è di utilizzare quanto più possibile Python, e il C++ soltanto quando strettamente necessario.
Questo non lo dico io, ma uno dei massimi programmatori che ci lavora, Alex Martelli (a proposito: ci lavora anche Guido van Rossum, il creatore di Python). :read:
Chiediamo a fek se è disposto a mollare la crytek per lavorare in python in qualche progetto basato su django.
Non lo farebbe mai: ODIA Python. :asd:
La soluzione alla diatriba sarebbe sviluppare un C++ 2.0 :D (CII? :asd:)
Simile al vecchio, ma
-senza i casini di gestione (.h, .cpp, include, define, pragma once e quant'altro)
-supporto di tipi generici
-nativamente threaded
-supporto nativo ad un pluggable garbage collector (che può essere non usato o sostituito)
-libreria standard al livello di Boost (che include quindi anche un pò di funzionale)
-garbage collector standard pronto all'uso
-tipi vettoriali nativi (perchè sarebbe ottimo per la grafica 3d)
Credo che l'unico linguaggio capace di sostituire C++ sia un nuovo C++ in effetti.
sarebbe il linguaggio dei miei sogni, ma tanto sto sognando e per di più sono offtopic :sofico:
EDIT: Cmq tutto si può sviluppare con tutto, mi sembra la scoperta dell'acqua calda.
Un browser lo puoi scrivere anche in Brainfuck, se sei abbastanza folle :asd:
Quindi non mi stupisco minimamente che si possa fare anche in Java... ma evidentemente a nessuna persona sana gli va di iniziare da 0 un progetto quando esistono fior fiore di librerie _mature_ e _complete_ in C++ che ti permettono di fare tanto in poco.
Qua ci si scorda sempre che il linguaggio è solo la base, il problema lo devi risolvere te, e devi scrivere anche il codice che lo risolve.
C++ non viene abbandonato perchè migliaia di persone lo hanno usato per risolvere problemi, ed ora le soluzioni sono pronte e disponibili per tutti.
In fondo C++ è quello che ha la library più piccola, ma anche la più ampia di tutti :D
C'è il D che è un linguaggio che copre buona parte dei punti che hai citato, e molto di più.
anche secondo me.
Penso che sia il tradeoff migliore anche vedendo C# + LINQ promosso dalla MS...
vabbè che io sono di parte perchè i linguaggi funzionali puri in effetti non mi attirano molto e preferisco molto di + un approccio misto :asd:
Idem. :D
Comunque LINQ (e PLINQ) è disponibile per qualunque linguaggio .NET, o sbaglio?
^TiGeRShArK^
09-04-2009, 15:08
Comunque LINQ (e PLINQ) è disponibile per qualunque linguaggio .NET, o sbaglio?
mmm...
non sono sicurissimo, ma mi sa che è supportato solo da C# e Visual Basic .net perchè introduce delle paroli chiave sue nella forma esplicita...
In quella implicita ad occhio direi che dovrebbe essere supportato, ma non ne ho affatto la certezza...
Kralizek
09-04-2009, 15:14
Il browser mobile di gran lunga migliore e più utilizzato è quello dell'iphone. Scritto in c++ e objective-c. Io ti cito windows, linux, mac osx, engine di rendering dei videogiochi e tu mi citi vuze?
non diciamo cazzate prego. Provato Opera per Windows Mobile?
non diciamo cazzate prego. Provato Opera per Windows Mobile?
Che sia il più utilizzato è un dato di fatto. Fare un confronto su quale sia migliore esula dallo scopo della conversazione. Entrambi sono scritti in c++, era quello che volevo dimostrare.
Ripeto, leggi quello che ho scritto sotto e guarda il contesto. Con continuare a battere sempre lo stesso chiodo.
Perchè tu credi che con gli altri linguaggi che ci sono un SO non in C o C++ non si può scrivere? E' già stato nominato un altro SO se leggi bene, che non è scritto in C o C++.
Si può scrivere, ma un so di merda :asd:
Il tanto odiato vista è stato il primo passo nell'usare linguaggi .NET nel SO stesso :asd:
^TiGeRShArK^
09-04-2009, 15:59
Che sia il più utilizzato è un dato di fatto. Fare un confronto su quale sia migliore esula dallo scopo della conversazione. Entrambi sono scritti in c++, era quello che volevo dimostrare.
ma opera mini, scritto dalla stessa ditta, che quindi aveva le competenze necessarie per fare un ottimo lavoro anche in c++, è stato scritto in java, come la mettiamo? :)
^TiGeRShArK^
09-04-2009, 16:00
Il tanto odiato vista è stato il primo passo nell'usare linguaggi .NET nel SO stesso :asd:
Vista ha problemi ben + profondi, quale l'utilizzo delle risorse di tutte le finestre anche per le finestre non in primo piano, cosa che fortunatamente è stata corretta con windows seven.
ma opera mini, scritto dalla stessa ditta, che quindi aveva le competenze necessarie per fare un ottimo lavoro anche in c++, è stato scritto in java, come la mettiamo? :)
E' stato scritto in java perchè in questo modo non devono svilupparne n versioni diverse per n modelli diversi di cellulari! Basta come motivo? Sei abbastanza informato su opera mini e sul suo sistema di compressione e ottimizzazione delle pagine? Ti sembra il caso di fare confronti con le prestazioni degli altri browser?
Non per insistere ma l'engine di rendering di opera è stato riscritto più volte nel corso degli anni. L'ultima volta quando java era già bello maturo. Che linguaggio hanno scelto? Ancora una volta c++!
^TiGeRShArK^
09-04-2009, 16:21
E' stato scritto in java perchè in questo modo non devono svilupparne n versioni diverse per n modelli diversi di cellulari? Basta come motivo? Sei abbastanza informato su opera mini e sul suo sistema di compressione e ottimizzazione delle pagine? Ti sembra il caso di fare confronti con le prestazioni degli altri browser?
Non per insistere ma l'engine di rendering di opera è stato riscritto più volte nel corso degli anni. L'ultima volta quando java era già bello maturo. Che linguaggio hanno scelto? Ancora una volta c++!
E hanno fatto un ottimo lavoro a quanto pare in java. :)
Il modello di ottimizzazione delle pagine poteva essere fatto anche in C++, ciò non toglie che è stato fatto principalmente per risparmiare banda e la batteria dei dispositivi mobili.
Come dicevo prima USALO, altrimenti non lo puoi giudicare.
A me su un ormai vetusto nokia 6630 andava da dio, anche con pagine complesse come quella di hwupgrade o quella che reputo infernale di anandtech.
E hanno fatto un ottimo lavoro a quanto pare in java. :)
Il modello di ottimizzazione delle pagine poteva essere fatto anche in C++, ciò non toglie che è stato fatto principalmente per risparmiare banda e la batteria dei dispositivi mobili.
Come dicevo prima USALO, altrimenti non lo puoi giudicare.
A me su un ormai vetusto nokia 6630 andava da dio, anche con pagine complesse come quella di hwupgrade o quella che reputo infernale di anandtech.
Ma non sto dicendo che opera mini non valga e che java sia da buttare. Il punto è che non puoi citare opera mini per dimostare che java si presta alla programmazione dei browser.
E' un caso estremamente particolare:
1) Hanno voluto fare un browser compatibile con vari modelli di cellulare quindi il c++ è automaticamente tagliato fuori.
2)Utilizza un sistema di compressione delle pagine lato server che rende vano ogni discorso sulle performance.
Allo stesso modo non puoi citare singularity come sistema operativo semplicemente per il fatto che è un esperimento e non viene utilizzato in ambienti di produzione.
^TiGeRShArK^
09-04-2009, 16:32
Ma non sto dicendo che opera mini non valga e che java sia da buttare. Il punto è che non puoi citare opera mini per dimostare che java si presta alla programmazione dei browser.
E' un caso estremamente particolare:
1) Hanno voluto fare un browser compatibile con vari modelli di cellulare quindi il c++ è automaticamente tagliato fuori.
2)Utilizza un sistema di compressione delle pagine lato server che rende vano ogni discorso sulle performance.
Allo stesso modo non puoi citare singularity come sistema operativo semplicemente per il fatto che è un esperimento e non viene utilizzato in ambienti di produzione.
Eri tu quello che diceva che non è possibile fare nè un browser nè un sistema operativo senza usare il c++.
Ti ho semplicemente fatto vedere che non è vero. ;)
Eri tu quello che diceva che non è possibile fare nè un browser nè un sistema operativo senza usare il c++.
Ti ho semplicemente fatto vedere che non è vero. ;)
Conoscevo opera mini e singularity prima di affrontare questa discussione.
Esistono webframworks in c++, in lisp, in haskell, sistemi operativi scritti in c#, videogiochi scritti in ruby. Lo sappiamo tutti. Ho visto pure giochini 3d in javascript. Si può fare tutto con tutto! Tu non mi hai dimostrato una cosa che sapevo già, che sappiamo tutti, hai perso la giornata ad arrampicarti sugli specchi tentando di screditare un linguaggio che non ami.
Volendo tornare un pò in topic, mi unisco a quelli che sostengono linguaggi come python o ruby per iniziare, evitando inutili complicazioni all'inizio. si avrà il tempo di imparare altri linguaggi quando se ne sentirà il bisogno.
^TiGeRShArK^
09-04-2009, 17:10
Conoscevo opera mini e singularity prima di affrontare questa discussione.
Esistono webframworks in c++, in lisp, in haskell, sistemi operativi scritti in c#, videogiochi scritti in ruby. Lo sappiamo tutti. Ho visto pure giochini 3d in javascript. Si può fare tutto con tutto! Tu non mi hai dimostrato una cosa che sapevo già, che sappiamo tutti, hai perso la giornata ad arrampicarti sugli specchi tentando di screditare un linguaggio che non ami.
Mai tentato di screditarlo.
Ci pensa già chi si ostina ad usarlo quando si hanno a disposizione strumenti migliori per risolvere molti problemi. ;)
Mai tentato di screditarlo.
Ci pensa già chi si ostina ad usarlo quando si hanno a disposizione strumenti migliori per risolvere molti problemi. ;)
Delle cose che ho citato cosa riscriveresti in python/java/ruby?
Kernel? Device driver? Engine di rendering? Sistemi real time? Motore di rendering di un browser?
Engine di rendering?
Lo sai che ci ho fatto un serio pensiero a scriverne una in Python?
In effetti un'engine di rendering è leggera CPU-side, i suoi compiti principali sono organizzare liste e batch di roba da sparare alla GPU...
apparte memoria+matrici che si possono cmq delegare a basso livello.
Tuttavia è impossibile perchè OGL e Directx sono per C/C++... e non è pensabile wrappare ogni singola chiamata. :mc:
Però se se ne potesse fare a meno sarebbe possibilissimo :rolleyes:
Lo sai che ci ho fatto un serio pensiero a scriverne una in Python?
In effetti un'engine di rendering è leggera CPU-side, i suoi compiti principali sono organizzare liste e batch di roba da sparare alla GPU...
apparte memoria+matrici che si possono cmq delegare a basso livello.
Tuttavia è impossibile perchè OGL e Directx sono per C/C++... e non è pensabile wrappare ogni singola chiamata. :mc:
Però se se ne potesse fare a meno sarebbe possibilissimo :rolleyes:
Ehm non ci capiamo. Chi vieta di usare le opengl con python e java? Hanno fatto pure un porting di quake in java. Non penso che il processore possa stare a guardare tra animazioni, calcolo di ombre, collisioni, gestione della fisica. A parte tutto penso che le capacità di c++ di avere un controllo sulla gestione della memoria siano indispensabili.
Inoltre shader etc vanno per forza scritti in linguaggi simili al C.
Ehm non ci capiamo. Chi vieta di usare le opengl con python e java? Hanno fatto pure un porting di quake in java. Non penso che il processore possa stare a guardare tra animazioni, calcolo di ombre, collisioni, gestione della fisica. A parte tutto penso che le capacità di c++ di avere un controllo sulla gestione della memoria siano indispensabili.
Inoltre shader etc vanno per forza scritti in linguaggi simili al C.
Gli shader vengono eseguiti sulla GPU da una DLL esterna, senza di quelli l'idea di fare un'engine non in C++ sarebbe follia :D
Poi:
-gestione della fisica != rendering, non c'entra niente;
-collisioni idem
-animazioni può essere che siano pesanti in un linguaggio interpretato, ma non ci metterei la mano sul fuoco.
I pc moderni vanno in crisi con TANTE (>100) iterazioni, sotto questi numeri ci si può permettere di buttare prestazioni a piacere.
20 ossa di 50 scheletri possono essere ampiamente calcolate in Python + libreria math C++ imho.
-calcolo delle ombre: pesa 0 sulla CPU se si usano le ombre texture; cosa che oramai fanno tutti perchè hanno una qualità molto maggiore delle stencil...
Quindi si, credo proprio che un'engine moderna sia abbastanza spostata GPU-side da permettere perfomance di alto livello se scritta non in C++ dalla parte CPU.
Ovviamente wrappare le DX è quello che lo rende impossibile, perchè si crea un overhead bestia.
Gli shader vengono eseguiti sulla GPU da una DLL esterna, senza di quelli l'idea di fare un'engine non in C++ sarebbe follia :D
Poi:
-gestione della fisica != rendering, non c'entra niente;
-collisioni idem
-animazioni può essere che siano pesanti in un linguaggio interpretato, ma non ci metterei la mano sul fuoco.
I pc moderni vanno in crisi con TANTE (>100) iterazioni, sotto questi numeri ci si può permettere di buttare prestazioni a piacere.
20 ossa di 50 scheletri possono essere ampiamente calcolate in Python + libreria math C++ imho.
-calcolo delle ombre: pesa 0 sulla CPU se si usano le ombre texture; cosa che oramai fanno tutti perchè hanno una qualità molto maggiore delle stencil...
Quindi si, credo proprio che un'engine moderna sia abbastanza spostata GPU-side da permettere perfomance di alto livello se scritta non in C++ dalla parte CPU.
Ovviamente wrappare le DX è quello che lo rende impossibile, perchè si crea un overhead bestia.
Hai ragione....E' che quando penso agli engine di rendering penso ai videogiochi:D
E pensi che un linguaggio interpretato sia adatto a gestire le strutture dati che stanno alla base (oct-tree, quad-tree etc) di un engine di rendering? E per quanto riguarda il caricamento delle risorse e il loro ciclo vita in memoria pensi che un linguaggio interpretato con garbage collection vada bene?
_Claudio
09-04-2009, 18:15
Al momento quando si parla di OOP buona parte degli esempi sono in Java.
Del C++ si parla molto meno, e in ogni caso l'unico merito che ha è la sua diffusione.
Conferenze e lezioni diverse allora...
Per orgoglio fossi in te smetterei di usare linux, windows o mac visto che l'unico merito di C/C++ è la diffusione.
Qualunque linguaggio si può usare allo scopo.
Se esistono è perché se ne sentiva il bisogno, e questo bisogno è stato coperto da un apposito linguaggio, appunto.
La soluzione a determinati problemi a volte porta alla definizione di linguaggi ad hoc. E non ci vedo nulla di male in ciò.
Niente di male... è normale.
Al contrario: è nata dritta. ;)
C e C++ sono nati "storti", invece. :D
Diverse lezioni di storia... sapevo che già i romani durante la costruzione avevano lo stesso problema.
C e C++ sono nati storti ma sono andati dritti (molto più dritti di altri) nei loro utilizzi più disparati.
Il merito è la diffusione, appunto, trainata da Unix.
E Unix perchè è così diffuso sotto forma di Windows, Linux e BSD? (E anche sottoforma di MacOS se teniamo conto di Darwin)
Non sempre. Diciamo che da quando esiste YACC, che ha facilitato molto la scrittura di parser, in genere la prima implementazione è in C.
Se Yacc è così diffuso un motivo ci sarà.
Non c'entra. Chi ti dice che un programmatore che utilizza C++ tutti i giorni non lo trova comunque naturale?
Statisticamente non è così...
Non è un modo di dire del forum: il metal bashing è un termine a dir poco arcaico, che risale a quando le macchine si programmavano in linguaggio macchina o assembly.
Questa non la sapevo.
Continuo a non vedere il nesso. Scrivere in C++ non significa necessariamente interfacciarsi direttamente con l'hardware. Anzi, da un bel po' di anni a questa parte, con s.o. che isolano le applicazioni, questo non è mai vero, se non per codice di sistema.
Un'applicazione .NET compilata in codice nativo non ha nulla da invidiare a un'altra scritta in C++, se non per il fatto che in genere si impiega meno tempo a scriverla, e l'ambiente è più controllato.
Solitamente se si scrive in C++ si scrive direttamente sull'HW... e personalmente scrivo ancora molte cose sull'HW...
Il confronto era tra applicazioni non gestite fatte in C++ e applicazioni scritte in VB.net o C# e tradotte in codice non gestito.
Un programmatore è pragmatico per definizione, ma c'è sempre un limite alla decenza. Utilizzare un preprocessore nel 2009 lo trovo a dir poco indecente (se non in progetti in cui sia necessaria la compilazione condizionale).
Eppure si usa perchè spesso è il male minore... se programmi microcontrollori è inevitabile stressare il preprocessore.
I pc moderni vanno in crisi con TANTE (>100) iterazioni
Ammazza che schifo di PC che hai! :D
^TiGeRShArK^
09-04-2009, 18:35
Delle cose che ho citato cosa riscriveresti in python/java/ruby?
Kernel? Device driver? Engine di rendering? Sistemi real time? Motore di rendering di un browser?
Io non riscriverei niente, ma se dovessi avere l'esigenza di fare un engine di rendering, il motore di rendering di un browser, o un sistema real time valuterei senz'altro altre opzioni, relegando il ruolo di c++ (sempre se necessario) solo ai bottleneck del sistema.
Tra l'altro esiste anche una versione specificatamente pensata per i sistemi real-time di java, giusto per citare uno degli ambiti che hai elencato. ;)
^TiGeRShArK^
09-04-2009, 18:36
Lo sai che ci ho fatto un serio pensiero a scriverne una in Python?
In effetti un'engine di rendering è leggera CPU-side, i suoi compiti principali sono organizzare liste e batch di roba da sparare alla GPU...
apparte memoria+matrici che si possono cmq delegare a basso livello.
Tuttavia è impossibile perchè OGL e Directx sono per C/C++... e non è pensabile wrappare ogni singola chiamata. :mc:
Però se se ne potesse fare a meno sarebbe possibilissimo :rolleyes:
esistono già wrapper di opengl per i vari linguaggi.
Per diamond crush abbiamo usato ad esempio lwjgl.
^TiGeRShArK^
09-04-2009, 18:38
Gli shader vengono eseguiti sulla GPU da una DLL esterna, senza di quelli l'idea di fare un'engine non in C++ sarebbe follia :D
Poi:
-gestione della fisica != rendering, non c'entra niente;
-collisioni idem
-animazioni può essere che siano pesanti in un linguaggio interpretato, ma non ci metterei la mano sul fuoco.
I pc moderni vanno in crisi con TANTE (>100) iterazioni, sotto questi numeri ci si può permettere di buttare prestazioni a piacere.
20 ossa di 50 scheletri possono essere ampiamente calcolate in Python + libreria math C++ imho.
-calcolo delle ombre: pesa 0 sulla CPU se si usano le ombre texture; cosa che oramai fanno tutti perchè hanno una qualità molto maggiore delle stencil...
Quindi si, credo proprio che un'engine moderna sia abbastanza spostata GPU-side da permettere perfomance di alto livello se scritta non in C++ dalla parte CPU.
Ovviamente wrappare le DX è quello che lo rende impossibile, perchè si crea un overhead bestia.
esiste anche un wrapper scritto dalla ms stessa delle direct x per .net tra l'altro e XNA utilizza come first-class language proprio il C# :p
^TiGeRShArK^
09-04-2009, 18:41
Hai ragione....E' che quando penso agli engine di rendering penso ai videogiochi:D
E pensi che un linguaggio interpretato sia adatto a gestire le strutture dati che stanno alla base (oct-tree, quad-tree etc) di un engine di rendering? E per quanto riguarda il caricamento delle risorse e il loro ciclo vita in memoria pensi che un linguaggio interpretato con garbage collection vada bene?
Quali sarebbero i linguaggi interpretati di cui parli?
Java ha un compilatore JIT già da tempo immemore ormai (forse addirittura dalla versione 1.2), per python c'è psyco, jruby supporta sia l'AOT compilation che la JIT.
quindi come vedi ce n'è per tutte le esigenze. :p
^TiGeRShArK^
09-04-2009, 18:42
Solitamente se si scrive in C++ si scrive direttamente sull'HW... e personalmente scrivo ancora molte cose sull'HW...
:mbe:
mi spieghi come fai in user-mode? :mbe:
_Claudio
09-04-2009, 18:46
:mbe:
mi spieghi come fai in user-mode? :mbe:
Per "sull'HW" intendo senza framework .net di mezzo...
^TiGeRShArK^
09-04-2009, 18:50
Per "sull'HW" intendo senza framework .net di mezzo...
ah ok.. :p
_Claudio
09-04-2009, 18:52
ah ok.. :p
In user-mode direttamente sull'hw... però potrebbe essere una sfida... :D :D
...però siccome vivo in questo mondo e devo campare preferisco passare i miei prossimi 20 anni come le persone normali (più o meno)...
Quali sarebbero i linguaggi interpretati di cui parli?
Java ha un compilatore JIT già da tempo immemore ormai (forse addirittura dalla versione 1.2), per python c'è psyco, jruby supporta sia l'AOT compilation che la JIT.
quindi come vedi ce n'è per tutte le esigenze. :p
Scusa. Ho ripetuto interpretato perchè rispondevo a Tommo che parlava di linguaggi interpretati. Avrei dovuto scrivere managed.
Io non riscriverei niente, ma se dovessi avere l'esigenza di fare un engine di rendering, il motore di rendering di un browser, o un sistema real time valuterei senz'altro altre opzioni, relegando il ruolo di c++ (sempre se necessario) solo ai bottleneck del sistema.
Tra l'altro esiste anche una versione specificatamente pensata per i sistemi real-time di java, giusto per citare uno degli ambiti che hai elencato. ;)
Ok. Propongo un armistizio. Tanto entrambi rimaniamo convinti delle nostre opinioni.
^TiGeRShArK^
09-04-2009, 19:32
Beh spesso in questi settori scrivono il grosso in c++ e le ottimizzazioni in assembly. Abbiamo visto che nel settore dei videogiochi tool e scriptini a parte usano c++. Abbiamo visto le dichiarazioni di john carmack. Abbiamo visto che i kernel sono tutti scritti in c/c++, che gli engine di browser (pure quelli di recente sviluppo) sono scritti in c/c++.
Tutti quelli che lavorano in questi settori si sbagliano e tu che ti occupi di altro sai che farebbero bene a usare java?
Guarda che non solo per me la cosa migliore da fare è utilizzare linguaggi ad alto livello tranne che dove strettamente necessario.
Ad esempio nei giochi, come dicevo, utilizzano linguaggi ad alto livello per lo scripting dell'IA e per altre cosette e utilizzano il C++ per le parti centrali non perchè sono masochisti ma per il problema delle latenze non deterministiche che avevo già nominato prima.
Tanto è vero che i giochi che utilizzano XNA infatti girano tranquillamente, per giunta su un processore in-order che a detta di fek era una chiavica, nonostante siano scritti con C#.
banryu79
09-04-2009, 19:40
Originariamente inviato da Tommo Guarda i messaggi
I pc moderni vanno in crisi con TANTE (>100) iterazioni
Ammazza che schifo di PC che hai!
Penso intendesse 100 K (almeno spero).
O forse intendeva iterazioni il cui singolo ciclo è pesantissimo...
Guarda che non solo per me la cosa migliore da fare è utilizzare linguaggi ad alto livello tranne che dove strettamente necessario.
Anche per me. E per tutti. Ti sto solo facendo notare dei casi in cui è necessario.
Ad esempio nei giochi, come dicevo, utilizzano linguaggi ad alto livello per lo scripting dell'IA e per altre cosette e utilizzano il C++ per le parti centrali non perchè sono masochisti ma per il problema delle latenze non deterministiche che avevo già nominato prima.
Ho mai detto che usano c++ perchè divertente da usare? Ho solo detto che è necessario per delle parti vitali.
Tanto è vero che i giochi che utilizzano XNA infatti girano tranquillamente, per giunta su un processore in-order che a detta di fek era una chiavica, nonostante siano scritti con C#.
Che c'entrano i giochi XNA? Non stiamo parlando di progetti hobbistici.
Ho detto che per i videogiochi (quelli seri) si usa c++ escludendo script e tools. Hai dovuto citare 40 volte fek, spiegarmi 50 cose che so già, scrivere quaranta post per finire a dire esattamente quello che ho detto io in tutte le salse.
Vuoi scrivere un videogioco? DEVI usare c++. Mi dici che usano il c++ per il problema delle latenze del garbage collector etc etc? Ho mai detto il contrario? Ho mai detto che lo preferiscono a c# perchè meno error prone?
^TiGeRShArK^
09-04-2009, 20:04
Anche per me. E per tutti. Ti sto solo facendo notare dei casi in cui è necessario.
Ho mai detto che usano c++ perchè divertente da usare? Ho solo detto che è necessario per delle parti vitali.
Che c'entrano i giochi XNA? Non stiamo parlando di progetti hobbistici.
Ho detto che per i videogiochi (quelli seri) si usa c++ escludendo script e tools. Hai dovuto citare 40 volte fek, spiegarmi 50 cose che so già, scrivere quaranta post per finire a dire esattamente quello che ho detto io in tutte le salse.
Vuoi scrivere un videogioco? DEVI usare c++. Mi dici che usano il c++ per il problema delle latenze del garbage collector etc etc? Ho mai detto il contrario? Ho mai detto che lo preferiscono a c# perchè meno error prone?
guarda che è la prima cosa che ho detto che non possono non utilizzare (purtroppo per loro) c++ per alcune parti di un gioco 3d.
quindi?
ciò implica che non è possibile scrivere un gioco interamente in un linguaggio managed?
scaricati diamond crush e vedi con i tuoi occhi.
guarda che è la prima cosa che ho detto che non possono non utilizzare (purtroppo per loro) c++ per alcune parti di un gioco 3d.
quindi?
ciò implica che non è possibile scrivere un gioco interamente in un linguaggio managed?
scaricati diamond crush e vedi con i tuoi occhi.
Secondo te devo scaricarmi diamond crush per sapere che esistono giochi java? Ho già detto qualche post fa che si può fare tutto con qualsiasi linguaggio. Ricordi? Quando ho parlato dei webframework in c++? Dei giochi 3d in javascript? Non ho capito dove vuoi arrivare.
Forse 80 post non sono bastati ma quello che voglio dire è che:
1)C++ non è inutile come qualcuno dice,infatti è linguaggio più utilizzato in vari settori.
Tu hai capito che:
1)Sono convinto che sia impossibile fare giochi in java.
2)Sono convinto che la gente programmi in c++ perchè lo trova più produttivo e divertente di python.
3) Sono convinto che sia vietato fare browser in java.
Mi hai dimostrato che esiste un kernel scritto in c#? E allora?
Esistono siti web scritti in c++. Questo lo rende un buon linguaggio per il web?
Ammazza che schifo di PC che hai! :D
Penso intendesse 100 K (almeno spero).
O forse intendeva iterazioni il cui singolo ciclo è pesantissimo...
No sostanzialmente era meglio non dare un numero affatto :asd:
Il 100 cmq l'ho "stimato" (o tirato a caso) considerando un elemento in più in un gioco completo... cioè, ho un gioco che gira, n iterazioni mediamente pesanti cambiano minimamente il framerate?
Sotto ad un numero a 2 zeri probabilmente no... anche se sono abbastanza pesanti.
Hai ragione....E' che quando penso agli engine di rendering penso ai videogiochi:D
E pensi che un linguaggio interpretato sia adatto a gestire le strutture dati che stanno alla base (oct-tree, quad-tree etc) di un engine di rendering? E per quanto riguarda il caricamento delle risorse e il loro ciclo vita in memoria pensi che un linguaggio interpretato con garbage collection vada bene?
Credo strutture come liste, elenchi, mappe e quant'altro che sono parte integrante della gestione di oggetti vengano meglio in un linguaggio come Lua o Python, poter fare collections dove ficcare qualsiasi cosa in tempo reale ad esempio è molto utile... laddove in C++ diventa un'intrico unico.
Per quanto riguarda la garbage collection si dovrebbero usare 2 strati di memoria: uno gestito ad alto livello che sottosta al GC; l'altro che viene mosso a mano a larghi batch con chiamate tipo malloc/free tramite oggetti-pointer.
il primo andrebbe bene quasi per tutto, il secondo per casi specifici come dati, risorse, e pools che non devono sparire da un frame all'altro.
IMHO sarebbe interessante provare :D
Tuttavia c'è sempre il problema delle DX... non è che non si può wrapparle, il problema è che DX (e peggio ancora OGL) fa uso di cascate di funzioni in sequenza, che di certo non creano poco overhead se sono chiamate tra due linguaggi.
E poi scrivere un wrapper dell'intera libreria è un'impresa disumana :asd:
Cmq io parlavo di liguaggi INTERPRETATI perchè Java e C# li metto deliberatamente fuori da questa faccenda: o si usano linguaggi "ad alta flessibilità" che migliorano decisamente la produttività, tipo Python, Ruby, o anche Lua, oppure non ne vale proprio la pena...
Sforzarsi ad usare Java per un gioco lo trovo proprio inutile, dato quanto è simile a C++ si fa prima ad usare quello.
~FullSyst3m~
09-04-2009, 21:05
Direttamente dal what's new di Python 3.0:
Extended Iterable Unpacking. You can now write things like a, b, *rest = some_sequence. And even *rest, a = stuff. The rest object is always a (possibly empty) list; the right-hand side may be any iterable. Example:
(a, *rest, b) = range(5)
This sets a to 0, b to 4, and rest to [1, 2, 3].
Le annotazioni ci sono solo dalla 3.0, mentre le metaclassi da un bel pezzo.
Sì:
Dictionary comprehensions: {k: v for k, v in stuff} means the same thing as dict(stuff) but is more flexible.
Set comprehensions are also supported; e.g., {x for x in stuff} means the same thing as set(stuff) but is more flexible.
;)
Non ricordavo, l'ho lette di sfuggita le novità di Python 3.0 visto che non devo usarlo nell'immediato futuro.
Le metaclassi comunque non le ho mai viste o studiate. Un piccolo esempio di metaclasse si potrebbe vedere?
^TiGeRShArK^
09-04-2009, 21:13
Secondo te devo scaricarmi diamond crush per sapere che esistono giochi java? Ho già detto qualche post fa che si può fare tutto con qualsiasi linguaggio. Ricordi? Quando ho parlato dei webframework in c++? Dei giochi 3d in javascript? Non ho capito dove vuoi arrivare.
Forse 80 post non sono bastati ma quello che voglio dire è che:
1)C++ non è inutile come qualcuno dice,infatti è linguaggio più utilizzato in vari settori.
Tu hai capito che:
1)Sono convinto che sia impossibile fare giochi in java.
2)Sono convinto che la gente programmi in c++ perchè lo trova più produttivo e divertente di python.
3) Sono convinto che sia vietato fare browser in java.
Mi hai dimostrato che esiste un kernel scritto in c#? E allora?
Esistono siti web scritti in c++. Questo lo rende un buon linguaggio per il web?
il c++ non è assolutamente inutile, ma meno lo si usa meglio è.
Le bestemmie che tiri fuori con C++ sono molte di + rispetto a quelle che tiri fuori con un qualsiasi altro linguaggio di alto livello.
Se poi a qualcuno piace bestemmiare che lo usi pure per fare quello che vuole... io preferisco perdere tempo a risolvere i miei problemi piuttosto che perdere tempo per risolvere quelli che sicuramente arriveranno fuori col C++.
E i memory leak abnormi che si sono trascinati per anni con firefox mi sembrano un ottima conferma della mia idea....
il c++ non è assolutamente inutile, ma meno lo si usa meglio è.
Le bestemmie che tiri fuori con C++ sono molte di + rispetto a quelle che tiri fuori con un qualsiasi altro linguaggio di alto livello.
Se poi a qualcuno piace bestemmiare che lo usi pure per fare quello che vuole... io preferisco perdere tempo a risolvere i miei problemi piuttosto che perdere tempo per risolvere quelli che sicuramente arriveranno fuori col C++.
E i memory leak abnormi che si sono trascinati per anni con firefox mi sembrano un ottima conferma della mia idea....
Scusa se sono pedante ma io ho iniziato il mio discorso scrivendo queste due frasi:
E' difficile da padroneggiare? Si
Porta anche programmatori esperti a infilare bug orribili e devastanti? Si.
Abbiamo scritto un centinaio di post per convergere sul fatto che il c++ è brutto ma indispensabile in alcuni settori o sbaglio?
^TiGeRShArK^
09-04-2009, 21:36
Scusa se sono pedante ma io ho iniziato il mio discorso scrivendo queste due frasi:
Abbiamo scritto un centinaio di post per convergere sul fatto che il c++ è brutto ma indispensabile in alcuni settori o sbaglio?
+ o -
cmq belli questi 3d, soprattutto quando il 3d starter si eclissa e si passa il tempo tra noi a discorrere :p :p :p
probabilmente 20 anni fa se la sfida objective-c / c++ per il successore ad oggetti di c fosse stata vinta dal primo, il mondo della programmazione sarebbe migliore :p
cdimauro
09-04-2009, 22:17
mmm...
non sono sicurissimo, ma mi sa che è supportato solo da C# e Visual Basic .net perchè introduce delle paroli chiave sue nella forma esplicita...
In quella implicita ad occhio direi che dovrebbe essere supportato, ma non ne ho affatto la certezza...
OK. Comunque realizzarlo anche con la forma esplicita in Python non sarebbe un problema, perché non servono delle keyword (basta piazzare appositi oggetti nel namespace built-in).
Si può scrivere, ma un so di merda :asd:
Guarda che s.o. scritti in Pascal, ad esempio, non hanno avuto nulla da invidiare a quelli scritti in C.
Le prime versioni di MacOS addirittura erano scritte in ObjectPascal. :read: :Prrr:
Delle cose che ho citato cosa riscriveresti in python/java/ruby?
Kernel? Device driver? Engine di rendering? Sistemi real time? Motore di rendering di un browser?
Anche tutto. :D
Ma se scrivo un s.o. in Python, i problemi a interfacciare il C con le sue API sarebbero di gran lunga più grandi di quelli che oggi ha Python ha interfacciarsi con le API dei s.o. scritti in C/C++.
Lo sai che ci ho fatto un serio pensiero a scriverne una in Python?
In effetti un'engine di rendering è leggera CPU-side, i suoi compiti principali sono organizzare liste e batch di roba da sparare alla GPU...
apparte memoria+matrici che si possono cmq delegare a basso livello.
Tuttavia è impossibile perchè OGL e Directx sono per C/C++... e non è pensabile wrappare ogni singola chiamata. :mc:
Però se se ne potesse fare a meno sarebbe possibilissimo :rolleyes:
Esistono wrapper completi delle OpenGL e DirectX per Python.
Ehm non ci capiamo. Chi vieta di usare le opengl con python e java? Hanno fatto pure un porting di quake in java. Non penso che il processore possa stare a guardare tra animazioni, calcolo di ombre, collisioni, gestione della fisica. A parte tutto penso che le capacità di c++ di avere un controllo sulla gestione della memoria siano indispensabili.
E' proprio quest'ultimo il motivo per cui si preferisce il C++: perché dà pieno controllo sull'allocazione e sulla liberazione della memoria.
Inoltre shader etc vanno per forza scritti in linguaggi simili al C.
Non vedo perché. Anzi, proprio per queste cose potrebbe andare bene un linguaggio come Python. Tanto le istruzioni ad alto livello che descrivono gli shader vengono compilate nel linguaggio a basso livello della GPU prima di essere utilizzate.
Conferenze e lezioni diverse allora...
Direi di sì, visto che all'università il modello a oggetti che si studia è quello di Java. E ovunque vai ti spiattellano Java davanti.
Il modello del C++ viene esposto in corsi per questo linguaggio, che sono abbastanza rari ormai.
Per orgoglio fossi in te smetterei di usare linux, windows o mac visto che l'unico merito di C/C++ è la diffusione.
Non sequitur anche qui: non capisco che c'entra questa tua frase col contesto del discorso.
Diverse lezioni di storia... sapevo che già i romani durante la costruzione avevano lo stesso problema.
Quando hanno iniziato non c'erano questi problemi. Si sono verificati dopo, e la torre non ha avuto l'inclinazione che ha adesso, ma la situazione è andata peggiorando col tempo.
C e C++ sono nati storti ma sono andati dritti (molto più dritti di altri) nei loro utilizzi più disparati.
Se nascono storti non possono diventare dritti semplicemente perché li si usa in tanti: i problemi che avevano se li continuano a portar dietro.
E Unix perchè è così diffuso sotto forma di Windows, Linux e BSD? (E anche sottoforma di MacOS se teniamo conto di Darwin)
Windows con Unix non c'entra proprio nulla. Per fortuna.
Se Yacc è così diffuso un motivo ci sarà.
Perché è diventato praticamente uno standard: non c'è libro di compilatori che non ne parli.
Ma fortunatamente sono nate delle valide e molto più produttive alternative.
Io sono passato da TPYacc (che già produceva codice Pascal, come ho detto prima) ad ANTLR (http://www.antlr.org/) che è un progetto scritto in Java, ma... genera anche codice Python.
Statisticamente non è così...
La gente può farselo piacere quanto vuole, ma di naturale ha ben poco.
Poi se ci sono degli esempi di strumenti del C++ che ritieni "naturali", non hai che da mostrarli, e ti farò vedere gli equivalenti in Python.
Solitamente se si scrive in C++ si scrive direttamente sull'HW... e personalmente scrivo ancora molte cose sull'HW...
Come dicevo prima, ormai è impossibile scrivere direttamente sull'hardware, perché è tutto virtualizzato. Devi necessariamente scrivere codice di sistema o driver, ossia cose che non capita di fare tutti i giorni.
Il confronto era tra applicazioni non gestite fatte in C++ e applicazioni scritte in VB.net o C# e tradotte in codice non gestito.
Per quanto detto prima, non c'è nessuna differenza. Entrambe le applicazioni fanno uso della CPU allo stesso modo.
Eppure si usa perchè spesso è il male minore... se programmi microcontrollori è inevitabile stressare il preprocessore.
Perché non ci sono valide alternative, in quanto il linguaggio è povero in canna.
A meno che non ti sembra cosa normale utilizzare la #define per definire delle banalissime costanti...
In user-mode direttamente sull'hw... però potrebbe essere una sfida... :D :D
...però siccome vivo in questo mondo e devo campare preferisco passare i miei prossimi 20 anni come le persone normali (più o meno)...
Come dicevo prima, in user-mode l'hardware non lo programmi direttamente, perché il s.o. non te lo consente.
E' finita l'epoca del metal bashing.
Guarda che non solo per me la cosa migliore da fare è utilizzare linguaggi ad alto livello tranne che dove strettamente necessario.
Ad esempio nei giochi, come dicevo, utilizzano linguaggi ad alto livello per lo scripting dell'IA e per altre cosette e utilizzano il C++ per le parti centrali non perchè sono masochisti ma per il problema delle latenze non deterministiche che avevo già nominato prima.
Tanto è vero che i giochi che utilizzano XNA infatti girano tranquillamente, per giunta su un processore in-order che a detta di fek era una chiavica, nonostante siano scritti con C#.
Togli pure "era": E' una chiavica. :asd:
Per quanto riguarda la garbage collection si dovrebbero usare 2 strati di memoria: uno gestito ad alto livello che sottosta al GC; l'altro che viene mosso a mano a larghi batch con chiamate tipo malloc/free tramite oggetti-pointer.
il primo andrebbe bene quasi per tutto, il secondo per casi specifici come dati, risorse, e pools che non devono sparire da un frame all'altro.
IMHO sarebbe interessante provare :D
Python 2.6.1 (r261:67515, Apr 9 2009, 19:30:16) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import gc
>>> gc.disable()
>>> gc.enable()
>>>
:D
Tuttavia c'è sempre il problema delle DX... non è che non si può wrapparle, il problema è che DX (e peggio ancora OGL) fa uso di cascate di funzioni in sequenza, che di certo non creano poco overhead se sono chiamate tra due linguaggi.
Se non sbaglio le chiamate alle DirectX servono a riempire un buffer, per poi inviarne l'intero contenuto in un colpo solo alla GPU per elaborarlo.
In queste condizioni non vedrei affatto male delle API che fanno lo stesso, senza passare dalle DirectX.
E poi scrivere un wrapper dell'intera libreria è un'impresa disumana :asd:
L'hanno fatto. :D
Cmq io parlavo di liguaggi INTERPRETATI perchè Java e C# li metto deliberatamente fuori da questa faccenda: o si usano linguaggi "ad alta flessibilità" che migliorano decisamente la produttività, tipo Python, Ruby, o anche Lua, oppure non ne vale proprio la pena...
Per Python esistono compilatori JIT come Psyco. :cool:
Le metaclassi comunque non le ho mai viste o studiate. Un piccolo esempio di metaclasse si potrebbe vedere?
Le metaclassi sono roba molto avanzata e difficile da digerire. Ti posto un famoso articolo (http://www.oreillynet.com/pub/a/python/2003/04/17/metaclasses.html) che ne parla in maniera chiara, e con diversi esempi.
cmq belli questi 3d, soprattutto quando il 3d starter si eclissa e si passa il tempo tra noi a discorrere :p :p :p
probabilmente 20 anni fa se la sfida objective-c / c++ per il successore ad oggetti di c fosse stata vinta dal primo, il mondo della programmazione sarebbe migliore :p
In tutta onestà avrei preferito che a vincere la sfida fosse stato SmallTalk...
il c++ non è assolutamente inutile, ma meno lo si usa meglio è.
Le bestemmie che tiri fuori con C++ sono molte di + rispetto a quelle che tiri fuori con un qualsiasi altro linguaggio di alto livello.
Se poi a qualcuno piace bestemmiare che lo usi pure per fare quello che vuole... io preferisco perdere tempo a risolvere i miei problemi piuttosto che perdere tempo per risolvere quelli che sicuramente arriveranno fuori col C++.
E i memory leak abnormi che si sono trascinati per anni con firefox mi sembrano un ottima conferma della mia idea....
Cmq secondo me sei troppo parziale... il C++ non è questo mostro, basta un pò di pratica e i problemi non escono... quantomeno, io riesco spesso a fare lunghi programmi senza bugs legati a linguaggio... sarò un genio?
non credo onestamente :asd:
Non capisco proprio quali sono questi problemissimi del C++ che devastano a tal punto la produttività: apparte la mancanza di riflessività, il problema della gestione files, si può considerare una specie di "Java coi puntatori"...
Credo che qualsiasi programmatore uscito in maniera sensata dall'uni dovrebbe essere in grado di padroneggiare fluidamente C++, ivi compresi puntatori e quant'altro...
_Claudio
09-04-2009, 22:34
Ho capito, non si può difendere Cesare da chi gli vuole togliere Roma... io abbandono... continuo a rinfrescarmi C++ per sviluppare una bella libreria per interfacciarmi con la mia USB e tutto il resto sono parole...
Mi trovate via mp...
Senza rancore però... capisco che ognuno ha i suoi punti di vista.
cdimauro
09-04-2009, 23:09
Ma figurati. Non è che Cesare veda soltanto Roma. Proprio in questo momento sto lavorando alla mia versione di CPython... in C. :fagiano:
*
Cavolo che Epic Post :asd:
Per quanto riguarda la mia parte:
Non sapevo esistessero tali wrapper, bisognerebbe fare una prova di framework basato sugli shaders :D
Cma il problema è che le Dx fanno molto più di pushare buffers... gestiscono gli stati della pipeline grafica via driver...
andando a logica, è impossibile farlo:
Hanno scritto un SO in ASM ma non una terza API grafica, quindi deve essere impossibile... metal bashing puro e senza uno straccio di specifiche :asd:
Cmq disabilitare il GC è una soluzione troppo sommaria, perchè è un sistema molto comodo la maggior parte delle volte... al contrario, forse sarebbe il caso di chiamare funzioni C che chiamano malloc ed embeddano void* dentro oggetti python... in modo da avere i vantaggi di entrambi i metodi.:stordita:
cdimauro
09-04-2009, 23:33
Cavolo che Epic Post :asd:
Per quanto riguarda la mia parte:
Non sapevo esistessero tali wrapper, bisognerebbe fare una prova di framework basato sugli shaders :D
Non me ne sono mai interessato, per cui non potrei esserti d'aiuto, mi spiace.
Cma il problema è che le Dx fanno molto più di pushare buffers... gestiscono gli stati della pipeline grafica via driver...
andando a logica, è impossibile farlo:
Hanno scritto un SO in ASM ma non una terza API grafica, quindi deve essere impossibile... metal bashing puro e senza uno straccio di specifiche :asd:
Se le API delle DX sono accessibili da C/C++, non c'è alcun problema a utilizzarle in Python.
Cmq disabilitare il GC è una soluzione troppo sommaria, perchè è un sistema molto comodo la maggior parte delle volte... al contrario, forse sarebbe il caso di chiamare funzioni C che chiamano malloc ed embeddano void* dentro oggetti python... in modo da avere i vantaggi di entrambi i metodi.:stordita:
Forse c'è la libreria ctypes (http://docs.python.org/library/ctypes.html) che fa al caso tuo.
^TiGeRShArK^
10-04-2009, 01:37
Cmq secondo me sei troppo parziale... il C++ non è questo mostro, basta un pò di pratica e i problemi non escono... quantomeno, io riesco spesso a fare lunghi programmi senza bugs legati a linguaggio... sarò un genio?
non credo onestamente :asd:
Non capisco proprio quali sono questi problemissimi del C++ che devastano a tal punto la produttività: apparte la mancanza di riflessività, il problema della gestione files, si può considerare una specie di "Java coi puntatori"...
Credo che qualsiasi programmatore uscito in maniera sensata dall'uni dovrebbe essere in grado di padroneggiare fluidamente C++, ivi compresi puntatori e quant'altro...
Possibilissimo.
Tutto dipende da quello che intendi tu per lunghi programmi. ;)
E quelli che io considero lunghi ti assicuro che è umanamente impossibile farli privi di bug in C++.
Basta ricordare, come dicevo prima, quanto tempo ci hanno messo a migliorare la situazione di memory leak dei firefox che era qualcosa di scandaloso inizialmente.. :doh:
EDIT: tanto per fare un esempio firefox 1.5.0.2, a quanto ho visto, aveva 2,1 MLOC. :p
^TiGeRShArK^
10-04-2009, 01:51
Ho capito, non si può difendere Cesare da chi gli vuole togliere Roma... io abbandono... continuo a rinfrescarmi C++ per sviluppare una bella libreria per interfacciarmi con la mia USB e tutto il resto sono parole...
Mi trovate via mp...
Senza rancore però... capisco che ognuno ha i suoi punti di vista.
...non puoi usare libusb? :fagiano:
tra l'altro c'è anche il wrapper per .net se non sbaglio :p
Possibilissimo.
Tutto dipende da quello che intendi tu per lunghi programmi. ;)
E quelli che io considero lunghi ti assicuro che è umanamente impossibile farli privi di bug in C++.
Basta ricordare, come dicevo prima, quanto tempo ci hanno messo a migliorare la situazione di memory leak dei firefox che era qualcosa di scandaloso inizialmente.. :doh:
EDIT: tanto per fare un esempio firefox 1.5.0.2, a quanto ho visto, aveva 2,1 MLOC. :p
Con lunghi intendo una 80ina di classi (gioco +framework) scritte quasi tutte da me... più physx più openal più ogre.
Ovvio che all'inizio gli errori fioccavano, ma ora è molto diverso...
cmq a prescindere da me, tu citi FF, ma io posso controcitarti Opera, Chrome, Safari e anche IE... in particolare Chrome è uber-sicuro grazie alla gestione low-level dei processi, cosa ben difficile da fare senza intervenire a livello di sistema (addirittura si dice che google abbia disassemblato windows).
E poi lo sanno tutti che FF non è questa perla del coding ;)
Questo per dire che il memory leak non è colpa del C++, dato che basta sostituire new e delete (ed è facile lo assicuro) per avere un controllo completo di quello che entra e che esce, preciso per linea di codice.
Ricordiamoci che esistono fior di tools per trovare memory leaks in c++.
Valgrind ad esempio.
^TiGeRShArK^
10-04-2009, 09:03
Con lunghi intendo una 80ina di classi (gioco +framework) scritte quasi tutte da me... più physx più openal più ogre.
Ovvio che all'inizio gli errori fioccavano, ma ora è molto diverso...
cmq a prescindere da me, tu citi FF, ma io posso controcitarti Opera, Chrome, Safari e anche IE... in particolare Chrome è uber-sicuro grazie alla gestione low-level dei processi, cosa ben difficile da fare senza intervenire a livello di sistema (addirittura si dice che google abbia disassemblato windows).
E poi lo sanno tutti che FF non è questa perla del coding ;)
Questo per dire che il memory leak non è colpa del C++, dato che basta sostituire new e delete (ed è facile lo assicuro) per avere un controllo completo di quello che entra e che esce, preciso per linea di codice.
si, ma come ogni altro software non è privo di bug. :p
..dimenticavo..
sul fatto che basta fare un controllo del new e delete per evitare memory leak non ne sarei cosi' certo. ;)
^TiGeRShArK^
10-04-2009, 09:04
Ricordiamoci che esistono fior di tools per trovare memory leaks in c++.
Valgrind ad esempio.
evidentemente saranno incompetenti quelli di firefox che non sono in grado di usarli. :)
evidentemente saranno incompetenti quelli di firefox che non sono in grado di usarli. :)
Probabilmente è proprio grazie a valgrind che li hanno risolti.
http://valgrind.org/gallery/#browsers
:D
mindwings
10-04-2009, 10:03
Anche questa potrebbe essere una soluzione - alto livello + performance
CLICK1 (http://en.wikipedia.org/wiki/Vala_(programming_language))
CLICK2 (per cdimauro) (http://live.gnome.org/Genie)
^TiGeRShArK^
10-04-2009, 10:08
Probabilmente è proprio grazie a valgrind che li hanno risolti.
http://valgrind.org/gallery/#browsers
:D
diciamo pure migliorati....
prova ad aprire firefox con una 30ina di tab e a misurarne la memoria prima e dopo e poi a chiudere tutti i tab tranne uno..
in partenza abbiamo 44MB, con tutti i tab aperti 236 e chiudendoli tutti 187.
Certo, è molto meglio rispetto al passato, ma a me pare che ci siano ancora un bel pò di memory leak per usare 150MB che non c'entrano nulla. ;)
cdimauro
10-04-2009, 10:13
Anche questa potrebbe essere una soluzione - alto livello + performance
CLICK1 (http://en.wikipedia.org/wiki/Vala_(programming_language))
Non mi piace assolutamente.
CLICK2 (per cdimauro) (http://live.gnome.org/Genie)
Questo è carino, è molto ispirato a Python, ma è stato snaturato. :(
diciamo pure migliorati....
prova ad aprire firefox con una 30ina di tab e a misurarne la memoria prima e dopo e poi a chiudere tutti i tab tranne uno..
in partenza abbiamo 44MB, con tutti i tab aperti 236 e chiudendoli tutti 187.
Certo, è molto meglio rispetto al passato, ma a me pare che ci siano ancora un bel pò di memory leak per usare 150MB che non c'entrano nulla. ;)
Safari fa altrettanto. Stesso bug su due browser con architetture completamente diverse?
Non so se sia questo il caso ma ad esempio parecchi software allocano le risorse quando una finestra viene creata e quando viene chiusa la nascondono tenendo tutto in ram.
Probabilmente non è questo il caso ma mi sembra un test troppo superficiale per gridare al bug.
^TiGeRShArK^
10-04-2009, 11:40
Safari fa altrettanto. Stesso bug su due browser con architetture completamente diverse?
Non so se sia questo il caso ma ad esempio parecchi software allocano le risorse quando una finestra viene creata e quando viene chiusa la nascondono tenendo tutto in ram.
Probabilmente non è questo il caso ma mi sembra un test troppo superficiale per gridare al bug.
beh...150 MB inutilizzati non mi sembrano proprio noccioline....
prova a fare la stessa prova con google chrome ad esempio. ;)
beh...150 MB inutilizzati non mi sembrano proprio noccioline....
prova a fare la stessa prova con google chrome ad esempio. ;)
http://weblogs.mozillazine.org/ben/archives/009749.html
Non è un bug è una feature!!!!!
Mi sembrava troppo strano che riuscissi a navigare 5 ore di fila col mio catorcio!
^TiGeRShArK^
10-04-2009, 12:58
http://weblogs.mozillazine.org/ben/archives/009749.html
Non è un bug è una feature!!!!!
Mi sembrava troppo strano che riuscissi a navigare 5 ore di fila col mio catorcio!
non è un problema di cache.
Il comportamento corretto in caso di cache è quello di google che presenta un aumento di memoria compatibile con gli oggetti tenuti in cache una volta che gli altri tab sono stati fisicamente eliminati (dato che girano in processi a parte).
150MB sprecati ad cazzum per me sono un bug bello e buono.
Se poi tu lo ritieni una feature.. beh.. contento tu. :D
io dal canto mio continuo ad utilizzare google chrome (e safari sul mac) che mi pare fatto molto meglio, e credo che anche sul tuo catorcio avresti diversi giovamenti. ;)
~FullSyst3m~
10-04-2009, 13:05
Le metaclassi sono roba molto avanzata e difficile da digerire. Ti posto un famoso articolo (http://www.oreillynet.com/pub/a/python/2003/04/17/metaclasses.html) che ne parla in maniera chiara, e con diversi esempi.
Non pensavo fossero cosi avanzate e difficili da digerire. Ma in quali contesti e in quali casi si usano le metaclassi? Comunque leggerò l'articolo, grazie.
^TiGeRShArK^
10-04-2009, 13:10
Non pensavo fossero cosi avanzate e difficili da digerire. Ma in quali contesti e in quali casi si usano le metaclassi? Comunque leggerò l'articolo, grazie.
per generare codice ad esempio...
la prima cosa che mi viene in mente è scrivere una DAL per accedere ad un database.
O anche per dei parser.
Ad esempio molti parser XML in java usano la reflection se non sbaglio.
Io l'avevo utilizzata una volta in Diamonds all'interno di un interprete per i comandi del linguaggio di scripting che dovevamo creare per gestire le animazioni e cose del genere per invocare automaticamente la classe e il metodo giusto partendo dal nome del comando passandogli i parametri corretti.
~FullSyst3m~
10-04-2009, 23:53
per generare codice ad esempio...
la prima cosa che mi viene in mente è scrivere una DAL per accedere ad un database.
O anche per dei parser.
Ad esempio molti parser XML in java usano la reflection se non sbaglio.
Io l'avevo utilizzata una volta in Diamonds all'interno di un interprete per i comandi del linguaggio di scripting che dovevamo creare per gestire le animazioni e cose del genere per invocare automaticamente la classe e il metodo giusto partendo dal nome del comando passandogli i parametri corretti.
Interessante. Però un esempio credo che sarebbe molto chiarificatore e mi farebbe vedere la relativa utilità. Anche in Java va bene. Comunque dopo queste feste leggerò l'articolo che ha linkato cdimauro.
^TiGeRShArK^
11-04-2009, 02:21
Interessante. Però un esempio credo che sarebbe molto chiarificatore e mi farebbe vedere la relativa utilità. Anche in Java va bene. Comunque dopo queste feste leggerò l'articolo che ha linkato cdimauro.
in java mi sa che il branch di diamonds in cui avevo fatto il mio "parserino" ormai è andato perduto...:stordita:
se non sbaglio avevo postato qualcosina in ruby un pò di tempo fa, ma non mi ricordo assolutamente in quale occasione... :stordita:
..e ora sò troppo stanco per anche solo pensare di scrivere una sola riga di codice.. :fagiano:
~FullSyst3m~
11-04-2009, 10:59
in java mi sa che il branch di diamonds in cui avevo fatto il mio "parserino" ormai è andato perduto...:stordita:
se non sbaglio avevo postato qualcosina in ruby un pò di tempo fa, ma non mi ricordo assolutamente in quale occasione... :stordita:
..e ora sò troppo stanco per anche solo pensare di scrivere una sola riga di codice.. :fagiano:
Vabbè fa niente, poi vediamo se mi chiarisco un pò leggendo quell'articolo.
mindwings
11-04-2009, 11:17
non è un problema di cache.
Il comportamento corretto in caso di cache è quello di google che presenta un aumento di memoria compatibile con gli oggetti tenuti in cache una volta che gli altri tab sono stati fisicamente eliminati (dato che girano in processi a parte).
150MB sprecati ad cazzum per me sono un bug bello e buono.
Se poi tu lo ritieni una feature.. beh.. contento tu. :D
io dal canto mio continuo ad utilizzare google chrome (e safari sul mac) che mi pare fatto molto meglio, e credo che anche sul tuo catorcio avresti diversi giovamenti. ;)
Uso ancora Firefox per alcuni plugins tra tutti adblock/flashblock/video downloader/delicious/downthemall... Tu come hai risolto? :fagiano:
~FullSyst3m~
11-04-2009, 12:11
Uso ancora Firefox per alcuni plugins tra tutti adblock/flashblock/video downloader/delicious/downthemall... Tu come hai risolto? :fagiano:
Usando Chrome e programmi esterni che fanno quello che fanno i plugin? :D
mindwings
11-04-2009, 15:09
Usando Chrome e programmi esterni che fanno quello che fanno i plugin? :D
Si ma se i plugin sono contestuali al browser?:D :mbe:
^TiGeRShArK^
11-04-2009, 15:13
Si ma se i plugin sono contestuali al browser?:D :mbe:
utilizzo firefox sono in caso mi serva un determinato plugin.
Tra l'altro per lo sviluppo web utilizzo principalmente internet explorer 8 (che può visualizzare anche le pagine come le renderizza ie7) per ovvi motivi....
per il resto chrome su windows e safari sul mac is the way :p
Uso ancora Firefox per alcuni plugins tra tutti adblock/flashblock/video downloader/delicious/downthemall... Tu come hai risolto? :fagiano:
adblock -> SafariBlock
video downloader -> Lo fa safari dalla finestra attività. Oppure script tramite greasekit.
delicious -> DeliciousSafari
Flashblock dovrebbe esserci qualche script da usare tramite greasekit su userscript.org mentre per downthemall immagino che si possa rimpiazzare con qualche programma tipo igetter o speeddownloader.
^TiGeRShArK^
11-04-2009, 15:23
Uso ancora Firefox per alcuni plugins tra tutti adblock/flashblock/video downloader/delicious/downthemall... Tu come hai risolto? :fagiano:
li usavo anch'io alcuni...
ma sinceramente di adblock e falshblock me ne sbatto, tanto non è che mi cambi molto....
Per scaricare i video di solito uso safari che ha nella finestra delle attività tutti i file presenti nella pagina, downthemall e delicious non so che fanno.. :fagiano:
mindwings
11-04-2009, 16:20
adblock -> SafariBlock
video downloader -> Lo fa safari dalla finestra attività. Oppure script tramite greasekit.
delicious -> DeliciousSafari
Flashblock dovrebbe esserci qualche script da usare tramite greasekit su userscript.org mentre per downthemall immagino che si possa rimpiazzare con qualche programma tipo igetter o speeddownloader.
li usavo anch'io alcuni...
ma sinceramente di adblock e falshblock me ne sbatto, tanto non è che mi cambi molto....
Per scaricare i video di solito uso safari che ha nella finestra delle attività tutti i file presenti nella pagina, downthemall e delicious non so che fanno.. :fagiano:
Grazie Doc, faro' un tentativo anche se sono abituato alla volpe di fuoco
http://lakers.freedomblogging.com/files/2008/07/mcfly.jpg
~FullSyst3m~
11-04-2009, 17:41
Si ma se i plugin sono contestuali al browser?:D :mbe:
Io ho dato un'idea di come poter fare a meno di Firefox.
In ogni caso mi sto innamorando sempre di più di Chrome e Firefox lo uso per poche cose ormai.
Ciao a tutti,
grazie a tutti ....avete chiarito molti dubbi, inizierò da Python....:D
Quale libro mi consigliate?
Ho scaricato "pensare da Informatico" Imparare con Python,
mi serve altro?
Grazie
E Buona Pasqua
mindwings
11-04-2009, 19:56
Ciao a tutti,
grazie a tutti ....avete chiarito molti dubbi, inizierò da Python....:D
Quale libro mi consigliate?
Ho scaricato "pensare da Informatico" Imparare con Python,
mi serve altro?
Grazie
E Buona Pasqua
Va benissimo, buona pasqua a te e a tutti gli utenti che hanno partecipato alla discussione.
~FullSyst3m~
11-04-2009, 20:19
Ciao a tutti,
grazie a tutti ....avete chiarito molti dubbi, inizierò da Python....:D
Quale libro mi consigliate?
Ho scaricato "pensare da Informatico" Imparare con Python,
mi serve altro?
Grazie
E Buona Pasqua
Per iniziare va benissimo. Come IDE basta che usi l'IDLE integrato con Python che per iniziare va più che bene.
Buona Pasqua a te a tutti i ragazzi che forum ;)
[..]in particolare Chrome è uber-sicuro grazie alla gestione low-level dei processi, cosa ben difficile da fare senza intervenire a livello di sistema (addirittura si dice che google abbia disassemblato windows).
E poi lo sanno tutti che FF non è questa perla del coding ;)
Chrome fa uso dello stesso principio che sfrutta IE, usando un processo a Medium Integrity Level, e creando i figli a Low Integrity Level all'interno del padre.
Sicuramente c'è qualche API messa a disposizione dal SO per fare questa cosa ;).
Ah, chiaramente la cosa degli integrity level vale solo per Vista.
Inoltre Chrome separa i thread per la gestione dell'HTML da quelli per i vari Plugins (flash, java...).
Cmq nulla di così disumano.
Già che ci siamo, qualcuno ha provato ad usare la versione di NetBeans con Python?
Già che ci siamo, qualcuno ha provato ad usare la versione di NetBeans con Python?
Sì, però ho usato solo quella, non saprei dire come sia al confronto di altri editor.
cdimauro
11-04-2009, 20:59
Se non è troppo disturbo, potrei chiederti cosa ne pensi di Python (suppongo, da quel che dici, che l'avrai almeno provato)?
Non saprei che dire. Il linguaggio non sarebbe neanche male, mi lascia un po' perplessa la piattaforma, sopratutto per via della mancanza di retrocompatibilità tra una major e l'altra. Ho constatato una certa allergia dei pitoniani per la documentazione.
cdimauro
11-04-2009, 22:42
Considera che la versione 3.0 è volutamente retroincompatibile, in quanto s'è deciso di rimediare ad alcuni errori di design del linguaggio. E' la prima volta che capita, e non sono previste altre "rivoluzioni".
Sulla documentazione hai ragione, ma considera che dietro Python non c'è un colosso come Sun né tanto meno una comunità vasta come quella di Java.
Pur avendo ottenuto una discreta quota di mercato, Python rimane ancora un pigmeo paragonato a Java, e non prevedo stravolgimenti nemmeno in futuro.
Però se dai un'occhiata alla documentazione della versione 2.5, e a quella delle versioni 2.6 e 3.0, qualche miglioramento c'è stato (per lo meno, è quel che ho percepito), anche se c'è ancora molto da fare.
Comunque m'interessava più che altro il tuo giudizio sul linguaggio di per sé, e in tutta onestà debbo dire d'esser rimasto sorpreso dalla tua risposta (che ho apprezzato). :)
~FullSyst3m~
12-04-2009, 15:05
Considera che la versione 3.0 è volutamente retroincompatibile, in quanto s'è deciso di rimediare ad alcuni errori di design del linguaggio. E' la prima volta che capita, e non sono previste altre "rivoluzioni".
Sulla documentazione hai ragione, ma considera che dietro Python non c'è un colosso come Sun né tanto meno una comunità vasta come quella di Java.
Pur avendo ottenuto una discreta quota di mercato, Python rimane ancora un pigmeo paragonato a Java, e non prevedo stravolgimenti nemmeno in futuro.
Però se dai un'occhiata alla documentazione della versione 2.5, e a quella delle versioni 2.6 e 3.0, qualche miglioramento c'è stato (per lo meno, è quel che ho percepito), anche se c'è ancora molto da fare.
Comunque m'interessava più che altro il tuo giudizio sul linguaggio di per sé, e in tutta onestà debbo dire d'esser rimasto sorpreso dalla tua risposta (che ho apprezzato). :)
Quello che purtroppo ho notato anche io, è il l'abisso che c'è tra la documentazione Java e quella Python. Sopratutto per le librerie o moduli di terze parti. C'è da sbattere un pochino in tutta onestà.
cdimauro
12-04-2009, 16:26
Non c'è dubbio, ma non è colpa del linguaggio di per sé, quanto della comunità che ci sta dietro, e questa non è paragonabile a quella di Java, purtroppo.
Comunque non è messo nemmeno male. Personalmente la documentazione delle librerie standard la trovo buona. Le pecche maggiori sono nelle librerie di terze parti purtroppo, anche se quelle più diffuse sono ben documentate.
~FullSyst3m~
12-04-2009, 19:42
Non c'è dubbio, ma non è colpa del linguaggio di per sé, quanto della comunità che ci sta dietro, e questa non è paragonabile a quella di Java, purtroppo.
Comunque non è messo nemmeno male. Personalmente la documentazione delle librerie standard la trovo buona. Le pecche maggiori sono nelle librerie di terze parti purtroppo, anche se quelle più diffuse sono ben documentate.
Infatti, la standard è buona, ma quella di terze parti, apparte come hai detto tu per le librerie più diffuse, è davvero una tragedia.
DeAndreon
12-04-2009, 23:01
Salve a tutti! Io mastico da 3 anni Visual Basic e SQL, ho fatto poco poco con c/c++ e python(intendo che mi sono fermato alle funzioni per cose elementarissime:D ) Vorrei scegliere un linguaggio per creare applicazioni con interfaccia grafica e adatto anche per qualche gioco... Mi direte C++ e Python... Già lo so:D Solo che ho difficoltà con le wxWidgets e quelle simili per Python... Inoltre non ho trovato un IDE per crearle in Python...
Quale linguaggio posso usare?
grazie per i futuri consigli!
p.s. mi svelate un mistero? i programmi in python sono interpretati... E' possibile avere un eseguibile oppure scrivere il programma su un file di testo o altro e poi ricavare una sottospecie di eseguibile per eseguirlo? Sia in linux che Windows?
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.