View Full Version : C++, Java o Python
altermetax
16-06-2014, 18:43
Ciao a tutti, sono nuovo (anzi nuovissimo) in questo forum e vorrei sapere quale linguaggio permette di fare più cose, o meglio, quale linguaggio permette di scrivere codice più leggibile e allo stesso tempo eseguire molte operazioni in modo semplice, tra questi tre? Ho imparato qualche base di tutti e tre:
Java: mi sembra che con Java si possa scrivere codice pulito, ma non esegue le operazioni in modo in modo semplice, sebbene ne possa eseguire molte (per qualunque semplice Hello World, bisogna specificare nome classe, public static void main (string args[]) ecc..)
Python: Secondo me permette di scrivere codice pulito, più degli altri due, esegue operazioni (ad esempio lettura e scrittura su database) in modo semplicissimo (basta un import, due funzioni LETTERARMENTE e via), solo che è interpretato e ogni utente deve avere installato l' interprete della STESSA versione di Python che usa il programma (basti vedere le differenze di print: su python 2 non ci vogliono le parentesi, sul 3 omettere le parentesi è un errore di sintassi...)
C++: beh, C++ è un linguaggio (abbastanza) semplice, ma (per me) ha il problema di non essere portabilissimo, bisogna possedere i diversi sistemi operativi per ottenere eseguibili per tutti (poi ci sarà sicuramente un modo, ma non credo siano molto semplici).
Questo è quello che penso io, poi sicuramente ho detto qualcosa di sbagliato che voi correggerete.
Allora, chi mi può aiutare?
Altermetax
cdimauro
16-06-2014, 22:02
Python: Secondo me permette di scrivere codice pulito, più degli altri due, esegue operazioni (ad esempio lettura e scrittura su database) in modo semplicissimo (basta un import, due funzioni LETTERARMENTE e via), solo che è interpretato e ogni utente deve avere installato l' interprete della STESSA versione di Python che usa il programma (basti vedere le differenze di print: su python 2 non ci vogliono le parentesi, sul 3 omettere le parentesi è un errore di sintassi...)
Python è disponibile in due grandi famiglie, la 2.x e la 3.x, ma non ci sono differenze abissali.
Rispondere alla tua domanda è difficile, perché ogni linguaggio ha i suoi pregi e difetti.
Visto che non sei ancora molto ferrato nella programmazione e devi ancora maturare, ti consiglio di concentrarti su Python. Una volta acquisita la giusta mentalità e un po' di esperienza, potrai poi decidere tu stesso cos'altro studiare.
ingframin
18-06-2014, 13:36
C++: beh, C++ è un linguaggio (abbastanza) semplice, ma (per me) ha il problema di non essere portabilissimo, bisogna possedere i diversi sistemi operativi per ottenere eseguibili per tutti (poi ci sarà sicuramente un modo, ma non credo siano molto semplici).
:sbonk:
cdimauro
18-06-2014, 23:16
Fortuna che c'ha pensato qualcun altro a farlo notare. :D
il C++ non è semplice, il C++ è davvero un linguaggio che devi sempre studiare constantemente, insieme al C sono i due maggiori linguaggi che forzano la mano su praticamente tutti gli aspetti della programmazione .
Hai mai letto parte o tutto il documento che definisce uno degli standard C++ ?
Con C++ devi prima determinare la versione che vuoi usare, poi ti scegli una implementazione del linguaggio e quindi un compilatore, una libreria standard e una libreria per le ABI, e poi puoi iniziare il cammino che non finirai mai, e questo solo per 1 piattaforma con 1 compilatore e 1 libreria standard.
In C++ ci sono persino i templates che da molti vengono definiti come un linguaggio nel linguaggio, prova a fare meta programmazione con C++ e vedrai, prova Boost::MPL e implementa qualcosa di simile da solo, tanti auguri.
Inizia con Java, è un linguaggio che va scomparendo, ma ha sempre 1 bel vantaggio sostanziale rispetto agli altri: ha una gestione automatizzata della memoria, tu scrivi il codice ed nel 99% dei casi puoi tranquillamente lasciare che la JVM faccia il resto nel gestire da sola la memoria, e la gestione della memoria in C e C++ non è davvero così semplice a volte.
Non focalizzarti sulle keyword, focalizzati sul come implementare algoritmi e strutture dati, lascia stare Python ( 1.x , 2.x e 3.x ) , è un linguaggio inutile e dannoso per quanto mi riguarda, sembra più uno scherzo che un linguaggio, tanto vale imparare Perl che almeno qualcosa lo ha apportato al mondo della programmazione.
cdimauro
20-06-2014, 21:29
Ha portato il caos e il codice write-only.
Ma che film ti sei visto? Mah. Incredibile le balle astronomiche che si devono leggere. Se non ti piace Python, amen: ognuno ha i suoi gusti. Ma almeno evita di spararle così grosse...
killercode
20-06-2014, 22:07
il C++ non è semplice, il C++ è davvero un linguaggio che devi sempre studiare constantemente, insieme al C sono i due maggiori linguaggi che forzano la mano su praticamente tutti gli aspetti della programmazione .
Hai mai letto parte o tutto il documento che definisce uno degli standard C++ ?
Con C++ devi prima determinare la versione che vuoi usare, poi ti scegli una implementazione del linguaggio e quindi un compilatore, una libreria standard e una libreria per le ABI, e poi puoi iniziare il cammino che non finirai mai, e questo solo per 1 piattaforma con 1 compilatore e 1 libreria standard.
In C++ ci sono persino i templates che da molti vengono definiti come un linguaggio nel linguaggio, prova a fare meta programmazione con C++ e vedrai, prova Boost::MPL e implementa qualcosa di simile da solo, tanti auguri.
Inizia con Java, è un linguaggio che va scomparendo, ma ha sempre 1 bel vantaggio sostanziale rispetto agli altri: ha una gestione automatizzata della memoria, tu scrivi il codice ed nel 99% dei casi puoi tranquillamente lasciare che la JVM faccia il resto nel gestire da sola la memoria, e la gestione della memoria in C e C++ non è davvero così semplice a volte.
Non focalizzarti sulle keyword, focalizzati sul come implementare algoritmi e strutture dati, lascia stare Python ( 1.x , 2.x e 3.x ) , è un linguaggio inutile e dannoso per quanto mi riguarda, sembra più uno scherzo che un linguaggio, tanto vale imparare Perl che almeno qualcosa lo ha apportato al mondo della programmazione.
Ne avessi detta una giusta... ma una eh, non tutte, una sola :asd:
Per la domanda dell'autore del topic, la risposta più adatta è python (3).
Ma anche java o c# vanno bene se preferisci avere qualcosa di più interessante da poter scrivere sul curriculum.
e le "balle" sarebbero ... ?
Per la cronaca il creatore di Python lavora per Google, lo stesso Python venne considerato da Google per un impiego a più largo spettro, il risultato è che non venne reputato interessante e che oggi Google consuma e produce tanto codice C++ .
Se mi nominate 3 grandi progetti o aziende che basano i loro prodotti o parte degli stessi su Python, vi do ragione, al momento persino nodejs se la passa meglio di Django, giusto per nominare un settore dove Python era in voga: il web development.
Persino Java rimane più interessante, C# non è altro che la sua copia molto meno portabile e meno profittabile.
Complimenti a voi 2 capoccioni e alla vostre competenze sempre sul punto.
cdimauro
21-06-2014, 00:15
e le "balle" sarebbero ... ?
Queste:
è un linguaggio inutile
Non per una vastissima schiera di programmatori.
e dannoso per quanto mi riguarda,
In effetti scrivere codice leggibile e facilmente manutenibile è particolarmente dannoso...
sembra più uno scherzo che un linguaggio,
Problemi con l'indentazione per caso?
tanto vale imparare Perl che almeno qualcosa lo ha apportato al mondo della programmazione.
Certo: il codice write-only, come dicevo prima...
Per la cronaca il creatore di Python lavora per Google,
Lavora per Dropbox...
lo stesso Python venne considerato da Google per un impiego a più largo spettro, il risultato è che non venne reputato interessante e che oggi Google consuma e produce tanto codice C++ .
Nel tuo universo parallelo magari è così. Nel mondo reale Python è il linguaggio preferito all'interno di Google, com'è ben noto a chi conosce gente che ci lavora e ne parla. Ad esempio Alex Martelli, uno dei personaggi di spicco della casa di Mountain View, che l'ha ribadito ancora alla recente PyCon5 (https://www.pycon.it/p3/schedule/pycon5/).
Se mi nominate 3 grandi progetti o aziende che basano i loro prodotti o parte degli stessi su Python, vi do ragione,
Google da sola non è abbastanza grande per te? Tra l'altro YouTube è scritto interamente in Python, ed è uno dei siti più frequentati al mondo.
Dimenticavo la mia azienda: Intel. E' abbastanza grande per te? :asd:
al momento persino nodejs se la passa meglio di Django, giusto per nominare un settore dove Python era in voga: il web development.
ROFL. Ma se i framework web si sprecano con Python. Django è il più noto, ma ce ne sono una caterva...
Persino Java rimane più interessante,
De gustibus.
C# non è altro che la sua copia molto meno portabile e meno profittabile.
Ma LOL. Anche su C# vedo che non risparmi balle. Ecco qui (http://www.artima.com/intv/anders.html) una corposa intervista al creatore di C#. Fatti una cultura prima di spararne ancora.
Complimenti a voi 2 capoccioni e alla vostre competenze sempre sul punto.
Hai fatto tutto da solo con le tue sparate. Informati prima di raccontarne altre.
vbextreme
21-06-2014, 10:01
Una precisazione, anche java è interpretato.Anchesso senza la jvm non funzionerebbe proprio come il phyton.
Hai elencato dunque due linguaggi interpretati portabili su tutti i s.o. in circolazione.
Ognuno di loro ha i suoi pregi e i suoi difetti, io sono pro phyton, ottimo secondo il mio punto di vista.
Discorso a parte per il c++ che lavorando decisamente piu a "basso livello" risulta essere un linguaggio piu complesso,soprattutto per tutte le sue sfaccettature e tutti i suoi "gingilli".Rimane strana anche l'affermazione di "linguaggio semplice",di solito tale affermazione si addice di piu al c, questa affermazione è nata dai pochi costrutti che ha e di conseguenza dalle dimensioni minimaliste dei suoi libri che raramente superano le 200 pagine, discorso diverso per il c++, raramente sono inferiori alle 300 pagine!.
Tuttavia è relativamente semplice imparare il c/c++, quello che è piu complesso è imparare tutto il contorno!
La scelta di un linguaggio deve ricadere sul tipo di applicazione che si vuole sviluppare.Ogni linguaggio ha le sue caratteristiche che lo rendono unico nella realizzazione di taluni tipi di software, compreso l'ottimo c#.
Se si dovesse realizzare ad esempio un gestionale solo per Windows io userei solo ed esclusivamente il c#.
Tuttavia se lo stesso gestionale dovesse essere piu "dinamico" e magari multipiattaforma allora userei il phyton.
Se tale gestionale richiedesse caratteristiche piu elevate con magari un uso cospicuo della memoria e cpu allora molto probabilmente lo farei in c/c++.
Bisogna quindi non soffermarsi tanto sul linguaggio specifico, ma considerare meglio il software che si vuole sviluppare.
wingman87
21-06-2014, 11:21
Non ho capito se la tua domanda sottintende la richiesta di un consiglio per il linguaggio da studiare per iniziare o se sei genuinamente interessato a sapere qual è il linguaggio più leggibile ed immediato...
In ogni caso la risposta sarà soggettiva. Secondo me ad esempio, seppure con python puoi fare più cose con meno contorno, java è più leggibile (mi riferisco alla versione 8) per via della tipizzazione statica che fornisce del contesto aggiuntivo. Dico la versione 8 perché rispetto alla precedente sono state aggiunte le lambda expression e un po' di type inference che rendono il codice molto meno verboso.
Se invece parliamo delle versioni precedenti sono meno convinto perché si possono portare certi esempi di codice python vs java in cui non c'è proprio storia...
//
quindi ? i nomi dei prodotti ? Youtube e basta ? E siamo proprio sicuri che youtube funzioni grazie a Python ? Come posso verificare ciò ?
Se permetti Chromium, Chromium OS e una miriade di progetti made in Google sono open source e puoi facilmente verificare come e in che linguaggio sono scritti. Se mi dici che YT è in Python, per me può anche essere scritto in Haskell, la verità la sanno i tizi di YT.
per il resto mi proponi la visione di uno che esalta Python alla Pycon e il "creatore" di C# che dice, che no, C# non è una copia 1:1 di Java. Nel mentre mi illustri quali keywords e concetti differiscono tra C# e Java ? A me C# CLI/CLR sembrano proprio lo stesso trio: Java, JVM e bytecode.
Tanto vale menzionare il tizio che hai in firma, citazione più, citazione meno, almeno lui è una persona importante nel campo.
Vogliamo parlare dei pacchetti che oramai non verranno portati dal ramo 2.x al ramo 3.x ? Personalmente ne trovo sempre parecchi, e per varie ragioni non solo python è in declino ma la 3.x è largamente meno popolare della 2.x , per dire il futuro del linguaggio ...
Per inciso Python sta chiaramente perdendo terreno sul desktop, sul web credo proprio che Go e Javascript faranno meglio di qualsiasi versione di Python nell'immediato futuro.
vbextreme
21-06-2014, 14:27
il c sharp non ha quell'obrobrio di virtual machine,il suo codice viene compilato a run time ed eseguito, quindi col c# hai un codice interpretato che viene compilato ed eseguito, mentre col java hai sempre codice interpretato.
Questa è una grossa differenza che oltre ad aumentare le prestazioni del linguaggio ne permettono caratteristiche solo emulative da parte del java.
Molti linguaggi sono molto simili tra loro, ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo.
cdimauro
21-06-2014, 15:00
quindi ? i nomi dei prodotti ? Youtube e basta ?
Questo (https://software.intel.com/en-us/intel-composer-xe) è quello a cui lavoro principalmente. E' disponibile in versione trial per 30 giorni, per cui puoi installarlo e andare poi nella cartella C:\Program Files (x86)\Intel\Composer XE 2013 e da qualche parte troverai la cartella di Python 2.7 con librerie annesse.
A parte questo, utilizzo e utilizziamo molto Python, ma spesso è per tool interni. Quindi è roba che probabilmente non vedrai mai fuori. Ma... c'è, e fa uso di Python. Altro non posso dire perché non mi piace parlare di quello che facciamo nella mia azienda.
Comunque... non siamo gli unici. Se avessi frequentato l'EuroPython lo scorso anno, ad esempio, nella sessione di recruitment avresti trovato, oltre a Google (ma tu guarda :D) realtà del calibro di Amazon, Red Hat, Demonware, ecc. a caccia di teste "pythoniche". Quest'hanno alla PyCon, che è soltanto italiana, c'era ancora Red Hat.
Chissà come mai tutte queste big sono così indaffarate a cercare programmatori Python. Magari me lo spiegherai tu...
E siamo proprio sicuri che youtube funzioni grazie a Python ? Come posso verificare ciò ?
Di certo non rilasceranno i sorgenti soltanto per farti contento.
Se permetti Chromium, Chromium OS e una miriade di progetti made in Google sono open source e puoi facilmente verificare come e in che linguaggio sono scritti. Se mi dici che YT è in Python, per me può anche essere scritto in Haskell, la verità la sanno i tizi di YT.
Indubbiamente, ma che interesserebbe avrebbero ad affermare che YouTube è stato sviluppato soltanto in Python (cosa che, peraltro, si sapeva già da PRIMA che Google l'acquisisse)? Per quale motivo una multinazionale di quel calibro dovrebbe fare una dichiarazione d'amore per questo linguaggio che secondo te sarebbe inutile, e addirittura pericoloso?
In ogni caso riscontri indiretti ne trovi quanti ne vuoi. Dagli stessi sviluppatori che ne parlano, anche in conferenze mostrando le problematiche hanno dovuto affrontare, fino alle posizione lavorative aperte in cui cercano espressamente sviluppatori Python (https://www.linkedin.com/vsearch/j?keywords=Python&company=YouTube&openAdvancedForm=true&locationType=Y&sortBy=R).
Poi se uno non vuol continuare a vedere, amen.
per il resto mi proponi la visione di uno che esalta Python alla Pycon
Uno? Quell'uno di cui parli è Alex Martelli (http://en.wikipedia.org/wiki/Alex_Martelli) (dai un'occhiata anche alla sua home page (http://www.aleax.it/)), e non esalta certo Python da fanatico integralista. Tutt'altro.
e il "creatore" di C# che dice, che no, C# non è una copia 1:1 di Java.
E si vede proprio che l'hai letta bene quella corposa intervista.
Nel mentre mi illustri quali keywords e concetti differiscono tra C# e Java ?
Te ne sparo una a caso che trovi già nella versione 1.0 del linguaggio: unsafe. E il concetto dovrebbe esserti ben noto, perché non esiste in Java.
A me C# CLI/CLR sembrano proprio lo stesso trio: Java, JVM e bytecode.
Se ti documenti magari le scopri le differenze. A cominciare dal linguaggio, anche dalla versione 1.0, che evidentemente t'è sconosciuto. Ma di materiale anche sulla virtual machine / runtime e sui diversi IL utilizzati ne trovi a josa, con un banalissima ricerca.
Tanto vale menzionare il tizio che hai in firma, citazione più, citazione meno, almeno lui è una persona importante nel campo.
Permettimi: Anders Hejlsberg è un architetto che non ha nulla da invidiare a nessuno nel suo campo. Basti vedere cos'è riuscito a fare nella sua carriera.
Vogliamo parlare dei pacchetti che oramai non verranno portati dal ramo 2.x al ramo 3.x ? Personalmente ne trovo sempre parecchi, e per varie ragioni non solo python è in declino ma la 3.x è largamente meno popolare della 2.x , per dire il futuro del linguaggio ...
Se fossi venuto alla PyCon 5 avresti potuto parlare direttamente con Alessandro Molina, che di recente ha portato Turbo Gear proprio su Python 3, e teneva dei talk a riguardo.
Questo giusto per citare un prodotto ben noto e utilizzato proprio nell'ambito di cui hai parlato finora: il web.
Poi che su Python 3 manchino ancora tante librerie e progetti non lo nascondo mica, ma dopo tanti anni la situazione non è affatto disastrosa come la vorresti dipingere, e questa famiglia ormai risulta molto utilizzata, sebbene ancora meno rispetto al ramo 2.x.
Per inciso Python sta chiaramente perdendo terreno sul desktop,
Potresti essere più chiaro, cortesemente?
sul web credo proprio che Go e Javascript faranno meglio di qualsiasi versione di Python nell'immediato futuro.
Non ho la sfera di cristallo, per cui preferisco aspettare.
ingframin
22-06-2014, 15:10
quindi ? i nomi dei prodotti ? Youtube e basta ? E siamo proprio sicuri che youtube funzioni grazie a Python ? Come posso verificare ciò ?
Se permetti Chromium, Chromium OS e una miriade di progetti made in Google sono open source e puoi facilmente verificare come e in che linguaggio sono scritti. Se mi dici che YT è in Python, per me può anche essere scritto in Haskell, la verità la sanno i tizi di YT.
per il resto mi proponi la visione di uno che esalta Python alla Pycon e il "creatore" di C# che dice, che no, C# non è una copia 1:1 di Java. Nel mentre mi illustri quali keywords e concetti differiscono tra C# e Java ? A me C# CLI/CLR sembrano proprio lo stesso trio: Java, JVM e bytecode.
Tanto vale menzionare il tizio che hai in firma, citazione più, citazione meno, almeno lui è una persona importante nel campo.
Vogliamo parlare dei pacchetti che oramai non verranno portati dal ramo 2.x al ramo 3.x ? Personalmente ne trovo sempre parecchi, e per varie ragioni non solo python è in declino ma la 3.x è largamente meno popolare della 2.x , per dire il futuro del linguaggio ...
Per inciso Python sta chiaramente perdendo terreno sul desktop, sul web credo proprio che Go e Javascript faranno meglio di qualsiasi versione di Python nell'immediato futuro.
Fonti, please?
Youtube
http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html
Dropbox
https://tech.dropbox.com/
E ti cito:"Here at Dropbox, we love Python and try to use it for as much as we can. As we scale and the problems we tackle grow, though, we’re starting to find that hitting our performance targets can sometimes become prohibitively difficult when staying on Python. Sometimes, it can be less work to do a rewrite in another language. "
Industrial light and magic
http://prezi.com/x_rd6fu8ei6b/industrial-light-and-magic/
Walt Disney Animation studio
http://www.disneyanimation.com/technology/opensource
E non ci scordiamo Panda3D sempre sviluppato da Disney
https://www.panda3d.org/
Abaqus - Simulatore agli elementi finiti
http://www.abaquspython.com/
http://www.3ds.com/products-services/simulia/services/training-courses/course-descriptions/introduction-to-python-and-scripting-in-abaqus/#
Blender 3D
http://www.blender.org/
Facebook
https://developers.facebook.com/blog/post/301
ArcGIS geographic information system
http://resources.arcgis.com/en/communities/python/
E ce ne sono molte altre (per esperienza diretta ti posso citare Ericsson e imec...).
A me non sembra proprio che sia poco usato.
Faccio inoltre notare che le guerre di religione sono la cosa peggiore in un forum, fanno scappare i novizi e normalmente si concludono in delle flammate colossali...
Anche Java non mi pare proprio che sia in declino, anzi...
http://adambard.com/blog/top-github-languages-for-2013-so-far/
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
https://sites.google.com/site/pydatalog/pypl/PyPL-PopularitY-of-Programming-Language
http://lang-index.sourceforge.net/
http://langpop.corger.nl/
http://redmonk.com/sogrady/2014/01/22/language-rankings-1-14/
Senza contare che su Java ci sono basati SAP e una fraccata di roba di Oracle e di IBM.
Poi se proprio le vogliamo dire tanto per dirle e' un conto, ma almeno prima di sentenziare e' bene citare le fonti.
La tua visione del mondo dell'informatica e' interessante e rispettabile, ma non puoi spacciarla per verita' assoluta.
altermetax
22-06-2014, 19:43
Per favore, calmatevi!
Comunque, grazie ai vostri commenti elimino il C++, restano Java e Python ma propendo più verso il Python. Restano sempre quei problemi di versione (ad esempio, vorrei creare un giochino con pygame in python 3.4, ma pygame arriva alla 3.2..
A me Python 2.x e 3.x non mi sembra che abbiano poche differenze, o almeno, ne hanno poche ma sono cose importanti:
inp = raw_input ("Inserire nome ->");
diventa
inp = input ("Inserire nome ->");
poi
print "Hai scritto",inp;
diventa
print ("Hai scritto", inp);
Sicuramente preferirei 3.x, ma ci sono problemi di compatibilità con diverse librerie di terze parti.
Altermetax
killercode
22-06-2014, 22:06
Per favore, calmatevi!
Comunque, grazie ai vostri commenti elimino il C++, restano Java e Python ma propendo più verso il Python. Restano sempre quei problemi di versione (ad esempio, vorrei creare un giochino con pygame in python 3.4, ma pygame arriva alla 3.2..
A me Python 2.x e 3.x non mi sembra che abbiano poche differenze, o almeno, ne hanno poche ma sono cose importanti:
inp = raw_input ("Inserire nome ->");
diventa
inp = input ("Inserire nome ->");
poi
print "Hai scritto",inp;
diventa
print ("Hai scritto", inp);
Sicuramente preferirei 3.x, ma ci sono problemi di compatibilità con diverse librerie di terze parti.
Altermetax
Quelle sono cazzatine a cui ti abitui in una settimana, danno noia a chi ha migliaia di righe da portare tra una versione e l'altra ma per chi non ha codice da mantenere non fa alcuna differenza.
Inoltre partire a produrre con l'ultima versione, uscita neanche tre mesi fa abbastanza azzardato, indipendentemente dalla presenza o meno delle librerie.
Seriamente, se ti fai questi problemi adesso hai già fallito ancora prima di partire. Inizia con quello che ti pare: 2, 3, java, etc... per come sei adesso è assolutamente indifferente.
altermetax
23-06-2014, 15:14
Cosa intendi con "per come sei adesso"? (offesa?? :D )
Scelgo Java, ma sicuramente non è poca roba da imparare..
Altermetax
killercode
23-06-2014, 19:10
Cosa intendi con "per come sei adesso"? (offesa?? :D )
Scelgo Java, ma sicuramente non è poca roba da imparare..
Altermetax
Non è un offesa essere un principiante.
Comunque quello che intendevo dire è che tutti questi linguaggi ti permettono di fare le stesse cose, alcuni sono più prolissi e altri meno, alcuni sono più usati e altri meno, ma non è una cosa importante perchè una volta che ne impari uno poi impari anche agli altri in poco tempo quando ti servirà usarli.
altermetax
24-06-2014, 15:29
Ok, allora continuo con il mio amato PHP (sì, per i miei siti e qualche progettino) e nel frattempo mi imparo un pò di Java, poi più avanti vedrò per gli altri.
Ciao!
Ok, allora continuo con il mio amato PHP (sì, per i miei siti e qualche progettino) e nel frattempo mi imparo un pò di Java, poi più avanti vedrò per gli altri.
Ciao!
PHP è oggettivamente una chiavica. E' come tentare d'imparare la logica intuizionistica da uno perennemente fatto di crack. Usa altro.
mone.java
25-06-2014, 14:37
altermetax: Se sei principiante ti consiglio di partire con python e non con java. Quest'ultimo può confondere all'inizio. Te lo dico da Javista :D
Inizia con Java, è un linguaggio che va scomparendo, ma ha sempre 1 bel vantaggio sostanziale rispetto agli altri: ha una gestione automatizzata della memoria, tu scrivi il codice ed nel 99% dei casi puoi tranquillamente lasciare che la JVM faccia il resto nel gestire da sola la memoria, e la gestione della memoria in C e C++ non è davvero così semplice a volte.
Non focalizzarti sulle keyword, focalizzati sul come implementare algoritmi e strutture dati, lascia stare Python ( 1.x , 2.x e 3.x ) , è un linguaggio inutile e dannoso per quanto mi riguarda, sembra più uno scherzo che un linguaggio, tanto vale imparare Perl che almeno qualcosa lo ha apportato al mondo della programmazione.
Sentendoti parlare mi sembra di sentire i tifosi di calcio parlare delle rispettive squadre, nel bene e nel male.
Daniels118
25-06-2014, 15:24
L'eterna diatriba! :D
mone.java
25-06-2014, 15:51
mentre col java hai sempre codice interpretato.
Questa è una grossa differenza che oltre ad aumentare le prestazioni del linguaggio ne permettono caratteristiche solo emulative da parte del java.
Molti linguaggi sono molto simili tra loro, ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo.
Spiegheresti meglio queste tue affermazioni.... sopratutto "ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo"
Daniels118
25-06-2014, 16:31
Spiegheresti meglio queste tue affermazioni.... sopratutto "ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo"
Io non sono d'accordo con il parere di vbextreme. Premesso che anche la jvm compila il codice a runtime grazie ad un componente denominato jit compiler (jit sta per just in time), un linguaggio è solo un formalismo, nulla vieta di scrivere un compilatore che traduce codice java in linguaggio macchina. E' ovvio che da questo punto di vista ci allontaniamo da quella che è la realtà per la maggior parte dei programmatori, ma il jit è reale. Comunque i linguaggi interpretati vanno benissimo per applicazioni di accesso ai dati e piccole elaborazioni, mentre ottengono pessimi risultati su elaborazioni lunghe come il calcolo numerico (a meno che non utilizzino librerie native, ma in questo caso l'elaborazione viene fatta dal codice compilato). Quello che penalizza parecchio le performance invece è la gestione automatica della memoria, però rende sicuramente più semplice lo sviluppo del codice, inoltre se la gestione della memoria è affidata al programmatore e questi si dimentica di deallocare qualcosa, si va incontro a grossi problemi, specie in applicazioni che restano aperte per lunghi periodi.
Sarà che sono vecchio, ma preferisco i linguaggi compilati e la gestione manuale della memoria.
mone.java
25-06-2014, 16:45
Infatti era il punto dove volevo arrivare, ovvero che Java ha un compilatore JIT esattamente come C#. Volevo appunto una spiegazione più approfondita, magari sono io che mi sono perso qualcosa :D
1) mentre col java hai sempre codice interpretato.
2) caratteristiche solo emulative da parte del java.
3) ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo
Il punto 1 abbiamo visto che è errato... sono curioso sui restanti.
Spiegheresti meglio queste tue affermazioni....
Non può, non conosce nemmeno la piattaforma per cui "parteggia" ("il c sharp non ha quell'obrobrio di virtual machine") figuriamoci quelle che vuole screditare.
Infatti era il punto dove volevo arrivare, ovvero che Java ha un compilatore JIT esattamente come C#
Sono le implementazioni ad averlo non i linguaggi Java e C#. Una certa molto diffusa implementazione può avere sia un "Classic VM" compiler e un JIT compiler; un altra userà un AoT di default e avrà il JIT solo come opzionale, e via così.
E' una precisazione importante, visto quanti ancora nel 2014 parlano inutilmente degli inesistenti "linguaggi compilati/interpretati".
mone.java
25-06-2014, 19:27
Sono le implementazioni ad averlo non i linguaggi Java e C#. Una certa molto diffusa implementazione può avere sia un "Classic VM" compiler e un JIT compiler; un altra userà un AoT di default e avrà il JIT solo come opzionale, e via così.
E' una precisazione importante, visto quanti ancora nel 2014 parlano inutilmente degli inesistenti "linguaggi compilati/interpretati".
Si hai ragione, giusta precisazione, diciamo che facevo riferimento alle implementazioni più utilizzate rispettivamente di Java, Oracle e OpenJDK che sono piu o meno la stessa cosa, (senza contare le 2 implementazioni di android, Delvik JIT, e ART AOT ) e C#, Microsoft e Mono.
Ne avessi detta una giusta... ma una eh, non tutte, una sola :asd:
La prima ("il C++ non è semplice") era giustissima. Il problema è che, in tipico macho-style dei '80-90, per lui è un vanto e non un handicap.
Daniels118
25-06-2014, 22:36
Sono le implementazioni ad averlo non i linguaggi Java e C#. Una certa molto diffusa implementazione può avere sia un "Classic VM" compiler e un JIT compiler; un altra userà un AoT di default e avrà il JIT solo come opzionale, e via così.
E' una precisazione importante, visto quanti ancora nel 2014 parlano inutilmente degli inesistenti "linguaggi compilati/interpretati".
Beh, tecnicamente hai ragione, nel senso che un programma teoricamente puoi sia compilarlo che interpretarlo in qualunque linguaggio esso sia scritto, in pratica però per alcuni linguaggi attualmente esiste solo il compilatore e per altri solo l'interprete. Per esempio si potrebbe creare un compilatore per vbscript, ma la realtà è che attualmente non esiste. Così come si potrebbe creare un interprete per il c++, ma mi sa che attualmente non esiste neanche quello. Poi ci sono le eccezioni come VB6 che poteva essere sia "compilato" in p-code (assimilabile al bytecode di java) che in codice macchina.
La tua affermazione resta comunque verissima e degna di nota.
mone.java
26-06-2014, 00:52
Per java esiste più di un compilatore nativo.. GCJ della famiglia GNU che però è fermo a java5 (forse anche prima).. E un software della excelsior che crea eseguibili sia per architetture x86 che x64.. quest'ultimo è a pagamento.. C# non ne so niente.. Inoltre java stesso si comporta in modo diverso in base ai parametri con il quale viene avviato (-server) che decidono se applicare o meno certi tipi di ottimizzazione (questo parametro inoltre è abilitato di default se la JVM decide che il computer che la ospita è abbastanza potente)..
Quindi ha ragione anche in pratica è io ho scritto una boiata prima :)
Daniels118
26-06-2014, 08:27
Per java esiste più di un compilatore nativo.. GCJ della famiglia GNU che però è fermo a java5 (forse anche prima).. E un software della excelsior che crea eseguibili sia per architetture x86 che x64.. quest'ultimo è a pagamento.. C# non ne so niente.. Inoltre java stesso si comporta in modo diverso in base ai parametri con il quale viene avviato (-server) che decidono se applicare o meno certi tipi di ottimizzazione (questo parametro inoltre è abilitato di default se la JVM decide che il computer che la ospita è abbastanza potente)..
Quindi ha ragione anche in pratica è io ho scritto una boiata prima :)
Nessuno è onnisciente, e comunque nulla vieta che un domani venga creato un nuovo compilatore/interprete per un linguaggio che fino ad oggi ha solo uno dei due. In effetti java è sempre stato un "linguaggio compilato", solo che il processore per eseguirlo non è mai esistito. Anzi, ricordo di aver letto tempo fa che un'azienda ha realizzato un processore capace di eseguirne direttamente il bytecode, però non ha avuto futuro.
vbextreme
26-06-2014, 09:14
La compilazione jit java e c# sono un pò diverse
c# compila direttamente frammenti di bytecode secondo alcune specifiche.
java analizza il bytecode e decide quale compilare e quale no,si avrà quindi un miscuglio, e non sapremo mai come la jvm stia elaborando i nostri dati.
Questo ad esempio implica che col java non si può lavorare con dei puntatori reali proprio perchè diventa complesso la gestione della memoria da parte della jvm(segnalata anche proprio dal consumo superiore rispetto al c#).
Cosa differente per il c# che compilando comunque tutto può concedere l'unsafe ed accedere "manualmente" alla memoria.
Ho cercato di dirlo nella maniera piu corta e semplice possibile,quindi tralasciamo i piccolissimi dettagli.
Lasciamo poi perdere i vari accrocchi di interprete/compilatore per tutti i liguaggi esistenti ma basiamoci per quello che sono stati creati.
E' una precisazione importante, visto quanti ancora nel 2014 parlano inutilmente degli inesistenti "linguaggi compilati/interpretati".
No! ci sono reali differenze sostanziali,ancor di piu nel 2014!
Il tutto risiede dal tipo di applicazione che si vuole sviluppare e per che architettura lo si vuole fare.
Un linguaggio nato interpretato avrà caratteristiche ben diverse da un linguaggio nato compilato
Daniels118
26-06-2014, 09:40
Lasciamo poi perdere i vari accrocchi di interprete/compilatore per tutti i liguaggi esistenti ma basiamoci per quello che sono stati creati.
Ma questo è un vincolo che hai deciso tu di imporre, e se ci mettiamo in quest'ottica hai perfettamente ragione, però così facendo siamo noi stessi a definire dei limiti, limiti che potremmo banalmente evitare.
Dimmi tu secondo te cos'è un linguaggio se non un formalismo per dire ad un esecutore quali operazioni compiere.
Secondo me troppo spesso si fa confusione tra quelle che sono le caratteristiche di un linguaggio e quelli che sono gli strumenti disponibili in un dato contesto.
Non capisco inoltre tutta questa paura del c++, è un linguaggio come tanti altri, se uno vuole complicare la comprensione del codice ci può riuscire in qualunque linguaggio.
vbextreme
26-06-2014, 10:53
Ma questo è un vincolo che hai deciso tu di imporre
No,questo vincolo l'ha deciso chi ha sviluppato il linguaggio,solo dopo sono nati accrocchi per esaudire tutte le esigenze dei programmatori nati sopratutto per risolvere casi specifici e non per il corretto funzionamento del linguaggio.
Dimmi tu secondo te cos'è un linguaggio se non un formalismo per dire ad un esecutore quali operazioni compiere.
Estto, ogni linguaggio è quindi strutturato in modo che sia perfetto per l'esecutore che lo andrà ad elaborare.
Cosi come un linguaggio può essere Imperativo altri potranno essere ad oggetti o ancora altri puramente matematici o interpretati o compilati.
Sicuramente esisterà anche un interprete dell'assembly ma il linguaggio non è stato creato per quello e per tanto risulterà impraticabile il suo utilizzo se non per circostanze circoscritte ad una singola applicazione.
Un linguaggio "nato" interpretato allora invece svolgerà sicuramente meglio i compiti di quelli "modificati" interpretati.
Il discorso è molto lungo e complesso e per quello ho voluto sottolineare il fatto di prendere un linguaggio per quello che è nato e non per come l'hanno modificato.
Non capisco inoltre tutta questa paura del c++, è un linguaggio come tanti altri, se uno vuole complicare la comprensione del codice ci può riuscire in qualunque linguaggio.
Effettivamente il linguaggio in se stesso non è molto piu complicato del java o altri oop.
Solo che le sue potenzialità lo rendono alquanto complesso,ancor piu del c per il semplice fatto che il c++ ha la pessima caratteristica di nascondere molto al programmatore.
Il c++ poi rimane affetto della scarsa portabilità se non con l'ausilio di framework ad hoc + un cospicuo uso di define e connessa ricompilazione del tutto sulla piattaforma desiderata.
Creare dunque una semplice finestra che faccia semplici cose risulta molto piu complesso e lungo sul c++(seguito dal java) rispetto al phyton.
Ma qui si va poi sempre a finire sul discorso di cosa vogliamo realizzare e generalizzare in questo caso fa piu male che bene.
mone.java
26-06-2014, 11:07
La compilazione jit java e c# sono un pò diverse
c# compila direttamente frammenti di bytecode secondo alcune specifiche.
java analizza il bytecode e decide quale compilare e quale no,si avrà quindi un miscuglio, e non sapremo mai come la jvm stia elaborando i nostri dati.
Questo ad esempio implica che col java non si può lavorare con dei puntatori reali proprio perchè diventa complesso la gestione della memoria da parte della jvm(segnalata anche proprio dal consumo superiore rispetto al c#).
Cosa differente per il c# che compilando comunque tutto può concedere l'unsafe ed accedere "manualmente" alla memoria.
Ho cercato di dirlo nella maniera piu corta e semplice possibile,quindi tralasciamo i piccolissimi dettagli.
Si questo è vero. Ma in quanto alle performance saprai mostrarmi benchmark (recenti) che dimostrano la la maggiore velocità di CLR rispetto alla JVM a "parità" di codice eseguito.
ma mancano le risposte alla domanda 2 e la domanda 3 (sopratutto il punto 3):
2) caratteristiche solo emulative da parte del java.
3) ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo
Daniels118
26-06-2014, 11:26
No,questo vincolo l'ha deciso chi ha sviluppato il linguaggio,solo dopo sono nati accrocchi per esaudire tutte le esigenze dei programmatori nati sopratutto per risolvere casi specifici e non per il corretto funzionamento del linguaggio.
Ma noi non viviamo nel passato, se oggi una cosa esiste non vedo perché dovremmo ignorarla.
Cosi come un linguaggio può essere Imperativo altri potranno essere ad oggetti o ancora altri puramente matematici o interpretati o compilati.
La tua affermazione non è errata, ma incompleta. Tu stai elencando un insieme di caratteristiche dei linguaggi senza tenere conto di alcuna tassonomia, in altre parole stai confondendo le caratteristiche relative alla modalità di esecuzione con quelle relative alla natura del linguaggio stesso.
Non ha senso distingue i linguaggi <<ad oggetti>> da quelli <<compilati>>, infatti i linguaggi ad oggetti esistono sia compilati (come il C++), sia interpretati (come python). Lo stesso discorso possiamo applicarlo alle altre tipologie di linguaggi.
Il fatto che per alcuni linguaggi esista solo il compilatore o solo l'interprete è un altro discorso, non meno importante certo, ma comunque distinto.
In fin dei conti, se io so di dover scrivere un programma che fa un'elaborazione estremamente pesante sceglierò un linguaggio per il quale so che esiste un compilatore, mentre per applicazioni leggere preferirò un linguaggio per il quale so che esistono numerose librerie semplici da utilizzare, per un'applicazione rivolta al grande pubblico invece sceglierò il linguaggio per il quale so che esistono compilatori o interpreti per il maggior numero di piattaforme, ancora, se devo unire due o più di queste caratteristiche cercherò di sviluppare ogni componente dell'applicazione nel linguaggio che meglio si presta e poi le unirò.
Quest'ultima tecnica è utilizzata ad esempio fondendo java e c/c++ grazie al meccanismo jni, con il quale si possono "mappare" dei metodi su delle funzioni contenute in dll e quindi scritte in codice macchina altamente performante.
Il vantaggio è di poter scrivere la maggior parte del codice in un linguaggio più "semplice", portabile, e per il quale sono disponibili più librerie, e di dover riadattare alle varie piattaforme solo la parte critica dell'applicazione.
vbextreme
26-06-2014, 13:34
Si questo è vero. Ma in quanto alle performance saprai mostrarmi benchmark (recenti) che dimostrano la la maggiore velocità di CLR rispetto alla JVM a "parità" di codice eseguito.
Non ho mai parlato di performance, che a ragion di logica è veramente superficiale per tali linguaggi, agguerrirsi quindi per che a va piu veloce di b per eseguire c e b va piu veloce di a ad eseguire d è una pagliacciata.
Se un programmatore vuole realmente le prestazioni al 100% certamente non userà ne java ne c# o ancor piu il phyton.
i punti 2/3 li ho già accennati vedi ad esempio l'uso dei puntatori, ma non prolunghiamoci inutilmente su queste "guerre" inutili.
Ma noi non viviamo nel passato, se oggi una cosa esiste non vedo perché dovremmo ignorarla.
La tua affermazione non è errata, ma incompleta. Tu stai elencando un insieme di caratteristiche dei linguaggi senza tenere conto di alcuna tassonomia, in altre parole stai confondendo le caratteristiche relative alla modalità di esecuzione con quelle relative alla natura del linguaggio stesso.
Non ha senso distingue i linguaggi <<ad oggetti>> da quelli <<compilati>>, infatti i linguaggi ad oggetti esistono sia compilati (come il C++), sia interpretati (come python). Lo stesso discorso possiamo applicarlo alle altre tipologie di linguaggi.
Il mio voleva essere un esempio ma forse sono stato frainteso.
Provo con un altro esempio:
Il c è noto che non sia un linguaggio ad oggetti, ma oggi ci sono tecniche per poterlo usare alla stregua del c++, il c però è nato imperativo perciò sarà un accrocchio ad oggetti perchè nonostante potremmo usarli faremo molta piu fatica rispetto a qualsiasi altro linguaggio nato cosi!
STESSO discorso per compilato ed interpretato, un linguaggio nasce per determinate caratteristiche quali anche la sua compilazione o interpretazione.
Vedi ad esempio il Phyton che nato interpretato è superiore a qualsiasi accrocchio di interprete c o c++,perchè offre potenzialità e comandi dati proprio dalla sua consapevolezza di essere interpretato, cosa che nel c/c++ non esiste! E spesso è anche da modificare il codice c interpretato perchè certi frammenti di codice quali spesso inline assembly non si possono interpretare!
Oggi come oggi esistono dunque interpreti e compilatori per quasi tutti i linguaggi ma le caratteristiche intrinsiche del linguaggio stesso portano a scegliere chi è nato per uno specifico scopo rispetto ad altri.
Poi naturalmente è sempre necessario valutare caso per caso e scegliere quello che piu si adatta alle nostre caratteristiche.
Non solo java può fondere i vari linguaggi!Lo si può fare un pò con tutti,quindi rimane una caretteristica poco rilevante.
mone.java
26-06-2014, 13:58
Non ho mai parlato di performance, che a ragion di logica è veramente superficiale per tali linguaggi, agguerrirsi quindi per che a va piu veloce di b per eseguire c e b va piu veloce di a ad eseguire d è una pagliacciata.
Se un programmatore vuole realmente le prestazioni al 100% certamente non userà ne java ne c# o ancor piu il phyton.
Sono completamente d'accordo ma tu hai scritto:
Questa è una grossa differenza che oltre ad aumentare le prestazioni del linguaggio ne permettono caratteristiche solo emulative da parte del java.
ma continuo a non capire:
3) ma nelle loro piccole differenza si vede chi è un linguaggio e chi cerca di esserlo
Mi spiego meglio: cosa significa ESSERE UN LINGUAGGIO e CERCARE DI ESSERE UN LINGUAGGIO?
Daniels118
26-06-2014, 14:09
Il c è noto che non sia un linguaggio ad oggetti, ma oggi ci sono tecniche per poterlo usare alla stregua del c++, il c però è nato imperativo perciò sarà un accrocchio ad oggetti perchè nonostante potremmo usarli faremo molta piu fatica rispetto a qualsiasi altro linguaggio nato cosi!
Siamo su due lunghezze d'onda differenti, continui a confondere le caratteristiche del linguaggio con le caratteristiche legate all'esecuzione del codice, io non ho mai detto che le varie tipologie di linguaggio sono equivalenti.
STESSO discorso per compilato ed interpretato, un linguaggio nasce per determinate caratteristiche quali anche la sua compilazione o interpretazione.
Vedi ad esempio il Phyton che nato interpretato è superiore a qualsiasi accrocchio di interprete c o c++
E' questa affermazione che non condivido, non tanto per quella che è la mia opinione, ma per la mancanza di prove oggettive al riguardo. Una cattiva implementazione di un interprete non dimostra l'impossibilità di ottenerne una buona.
Per contro posso portarti l'esempio del visual basic, che è nato per essere eseguito da un interprete e che successivamente ha avuto il suo compilatore: nella versione 6 era possibile compilare sia in p-code da interpretare, sia in codice nativo. E ti assicuro che quello compilato in codice nativo girava più veloce del p-code, sebbene il linguaggio fosse "nato interpretato".
Daniels118
26-06-2014, 14:10
Non solo java può fondere i vari linguaggi!Lo si può fare un pò con tutti,quindi rimane una caretteristica poco rilevante.
Ah certo, il mio era solo un esempio :)
vbextreme
26-06-2014, 14:31
Nonostante io sia un incallito sostenitore di vb devo ammettere che è stato un aborto da sempre!Chiamarlo poi linguaggio...
Ma queste sono considerazioni personali ricevute dalla mia esperienza. Tutto qui.
Quando un linguaggio è fatto bene vuol dire che ha uno scopo e i suoi creatori ne hanno tenuto in considerazione.
Il phyton ad esempio sa di essere interpretato quanto il c sa di essere compilato.
Per questo che il phyton non espone ad esempio l'inline assembly mentre il c si!
Tanto quanto il c++ sa di essere ad oggetti mentre il c no!
Un linguaggio non è solo un insieme di costrutti, ma anche come vengono eseguiti.
In definitiva un interprete c sarà sempre un accrocchio perchè non potrà mai e poi mai emulare tutte le funzionalità del reale c perchè il c è nato compilato.
Tanto quanto un compilatore phyton non potrà mai e poi mai emulare le potenzialità offerte dal linguaggio c perchè nato interpretato.
Poi esistono accrocchi per qualche ragione funzionante che permettono anche al vb6 di essere multithread, ma queste non sono la normalità, valgono solo per alcuni rari casi.
ma continuo a non capire:
Ad esempio rimanendo nell'inline assembly nel c# puoi usarlo direttamente compilare ed eseguire.
In java non puoi, allora devi ricorrere a qualche accrocchio che ti permetta di farlo, non dico che non si possa fare, ma è stata fatta una modifica perchè il linguaggio non lo permetterebbe.
Quindi se io ho scritto un programma in c# e lo voglio dopo x tempo ottimizzare con una funzione in assembly modifico e fatto.
In java molto probabilmente dovrei sbattere la testa in qua e la incrociandole le dita che il tutto funzioni.
mone.java
26-06-2014, 14:40
E quindi siccome in Java (per la sua natura multipiattaforma) non si può fare direttamente codice inline (ma cmq esiste JNI o JNA, quest'ultimo nemmeno richiede codice 'collante') sarebbe un linguaggio che PROVA ad essere un linguaggio?
Daniels118
26-06-2014, 15:13
Il phyton ad esempio sa di essere interpretato quanto il c sa di essere compilato.
Per questo che il phyton non espone ad esempio l'inline assembly mentre il c si!
Tanto quanto il c++ sa di essere ad oggetti mentre il c no!
Non vedo come un linguaggio possa avere la facoltà di "sapere"... :p
Un linguaggio non è solo un insieme di costrutti, ma anche come vengono eseguiti.
Beh, ma questa massima da dove l'hai presa? :D
Ad esempio rimanendo nell'inline assembly nel c# puoi usarlo direttamente compilare ed eseguire.
In java non puoi, allora devi ricorrere a qualche accrocchio che ti permetta di farlo, non dico che non si possa fare, ma è stata fatta una modifica perchè il linguaggio non lo permetterebbe.
Le jni non sono un accrocchio nato da una modifica, ma una parte vitale di java che collega la jvm al sistema operativo. Per esempio, l'implementazione della classe Thread fa uso di jni su tutti i sistemi che supportano nativamente il multithread (che sono il 99% dei dispositivi dove metteresti una jvm :D).
La compilazione jit java e c# sono un pò diverse
c# compila direttamente frammenti di bytecode secondo alcune specifiche.
java analizza il bytecode e decide quale compilare e quale no
C# e Java sono *linguaggi* e *i linguaggi non compilano un bel niente*. Sono le loro implementazioni ad avere o meno certe caratteristiche. Se non si comprendono robe così semplici non ci può essere discussione.
Secondo la tua tesi, poi:
- usando C# con il .Net Framework (JIT finale una ed una sola volta verso codice macchina nativo interpretabile dalla CPU) -> "si vede chi è un linguaggio";
- usando C# con il .Net Compact Framework (JIT dinamico più volte se e quando ritenuto opportuno) -> "chi cerca di esserlo (un linguaggio)";
- usando C# con il .Net Micro Framework ("interpretazione nel senso classico", niente JIT) -> cosa, catastrofe? "linguaggio giocattolo"?
Che dici, hai scritto o meno un sacco di sciocchezze?
Beh, tecnicamente hai ragione, nel senso che un programma teoricamente puoi sia compilarlo che interpretarlo in qualunque linguaggio esso sia scritto, in pratica però per alcuni linguaggi attualmente esiste solo il compilatore e per altri solo l'interprete.
Personalmente avendo iniziato con Scheme, Common Lisp e C nei '90, la netta distinzione tra interpreti e compilatori mi è sempre sembrata una roba da confronto FORTRAN/Bourne shell. Molto più preciso e veritiero parlare di interpretazione della CPU e di livelli di traduzione via via che si considerano diversi livelli d'astrazione.
Per esempio si potrebbe creare un compilatore per vbscript, ma la realtà è che attualmente non esiste. Così come si potrebbe creare un interprete per il c++, ma mi sa che attualmente non esiste neanche quello. Poi ci sono le eccezioni come VB6 che poteva essere sia "compilato" in p-code (assimilabile al bytecode di java) che in codice macchina.
La tua affermazione resta comunque verissima e degna di nota.
Au contraire, un giapponese mi pare circa venti anni fa scrisse un sistema d'interprete per il C, che poi è diventato la base per Cling, l'interprete interattivo per il C++ sviluppato e in uso al CERN e che ho visto in azione su diversi cluster massivi di dati. Tra l'altro sempre lì hanno anche pyROOT (in Python) per l'interazione con il sistema ROOT - un buon esempio "dell'inutilità di python" per quell'altro genio nella prima pagina del thread. Ma onestamente passa pure la voglia di rispondere quando il livello delle discussioni vola così basso.
Non capisco inoltre tutta questa paura del c++, è un linguaggio come tanti altri, se uno vuole complicare la comprensione del codice ci può riuscire in qualunque linguaggio.
Cambierai idea il giorno che dovrai lavorare su code base di una certa dimensione insieme ad altri, anche loro convinti di quello che hai scritto qui sopra. E' solo questione d'esperienza ci siamo passati tutti :)
Daniels118
26-06-2014, 16:48
Personalmente avendo iniziato con Scheme, Common Lisp e C nei '90, la netta distinzione tra interpreti e compilatori mi è sempre sembrata una roba da confronto FORTRAN/Bourne shell. Molto più preciso e veritiero parlare di interpretazione della CPU e di livelli di traduzione via via che si considerano diversi livelli d'astrazione.
Verissimo anche questo, sono assolutamente d'accordo.
Au contraire, un giapponese mi pare circa venti anni fa scrisse un sistema d'interprete per il C, che poi è diventato la base per Cling, l'interprete interattivo per il C++ sviluppato e in uso al CERN e che ho visto in azione su diversi cluster massivi di dati. Tra l'altro sempre lì hanno anche pyROOT (in Python) per l'interazione con il sistema ROOT - un buon esempio "dell'inutilità di python" per quell'altro genio nella prima pagina del thread. Ma onestamente passa pure la voglia di rispondere quando il livello delle discussioni vola così basso.
Non a caso ho portato come esempio vbscript e non il c.
Cambierai idea il giorno che dovrai lavorare su code base di una certa dimensione insieme ad altri, anche loro convinti di quello che hai scritto qui sopra. E' solo questione d'esperienza ci siamo passati tutti :)
"Fortunatamente" credo che non ne avrò più l'occasione, comunque grazie per la dritta :p
Cambierai idea il giorno che dovrai lavorare su code base di una certa dimensione insieme ad altri, anche loro convinti di quello che hai scritto qui sopra. E' solo questione d'esperienza ci siamo passati tutti :)
Quello diventa un problema di ingegneria del software e di definizione di interfacce (API) soprattutto.
Nonostante questo comunque C++ rimane un linguaggio molto complesso, e forse il punto è che la forbice di "skill" tra gli sviluppatori può essere più ampia rispetto ad altri linguaggi, il che potrebbe penalizzare il lavoro in team.
cdimauro
27-06-2014, 07:27
Sono di frettissima, ma: http://nuitka.net/
Quello diventa un problema di ingegneria del software e di definizione di interfacce (API) soprattutto.
Si e il punto è che il C++ è tra i meno adatti a risolverlo.
Nonostante questo comunque C++ rimane un linguaggio molto complesso, e forse il punto è che la forbice di "skill" tra gli sviluppatori può essere più ampia rispetto ad altri linguaggi, il che potrebbe penalizzare il lavoro in team.
Avere una roadmap che per decenni è stata aggiungere sulle aggiunte non è che potesse portare ad altro.
Sono di frettissima, ma: http://nuitka.net/
Interessante, e comunque non scordiamoci neanche di PyPy (http://pypy.org/index.html) (a proposito di compilatori JIT) :D.
Sono di frettissima, ma: http://nuitka.net/
Mi piango ancora Unladen Swallow se è per quello. Il fatto che gente come Wouters non ce l'ha fatta mi ha sempre dato da pensare...
Di Pypy ho visto l'annuncio della stable ma non dovendo più scrivere Python da un pò non seguo e non so nulla.
Mi piango ancora Unladen Swallow se è per quello. Il fatto che gente come Wouters non ce l'ha fatta mi ha sempre dato da pensare...
Di Pypy ho visto l'annuncio della stable ma non dovendo più scrivere Python da un pò non seguo e non so nulla.
Fino a questo momento non mi è capitato di usarlo, ma:
http://speed.pypy.org/
:D
La sezione "How has PyPy performance evolved over time?" è abbastanza illuminante.
Anche se già si intravede un limite superiore (non possono crescere all'infinito, ma questo è normale), allo stato attuale PyPy risulta mediamente 6 volte più veloce di CPython (l'attuale interprete Python).
In ogni caso ritengo che poi alla fine lì dove servono le prestazioni vere si implementa un bel modulo C e via ;).
Fino a questo momento non mi è capitato di usarlo, ma:
http://speed.pypy.org/
:D
La sezione "How has PyPy performance evolved over time?" è abbastanza illuminante.
Anche se già si intravede un limite superiore (non possono crescere all'infinito, ma questo è normale), allo stato attuale PyPy risulta mediamente 6 volte più veloce di CPython (l'attuale interprete Python).
In ogni caso ritengo che poi alla fine lì dove servono le prestazioni vere si implementa un bel modulo C e via ;).
Si ma quello delle prestazioni più spinte è un problema risolto come dici e conta per una percentuale d'impiego in fondo modesta (i classici tight loops, uso di numpy e scipy, etc.). Se si potesse non dico raggiungere, ma almeno avvicinarsi un pò ad esempio a SBCL (che è dinamico e velocissimo ed è un ottimo metro di paragone per diverse cose in Python) tornerebbe utile per tutti e tutti i giorni.
Poi certo restano i soliti GIL, il gc non parallelo/concorrente, la noiosa ignoranza di Van Rossum circa quello che non gli piace... Ma non si può avere tutto. Anni fa lavorai in produzione con Stackless e mi divertii un mondo - peccato davvero non fosse quello il default.
Quella sezione è illuminante si. PyPy ha qualcosa come 11 anni. Undici anni... Purtroppo raggiungere certi risultati costa (e ne so qualcosa in prima persona) e non tutti hanno dietro gli investimenti di una Microsoft o Sun (compreso ad esempio OCaml con cui lavoro e a cui ancora manca un parallel gc performante).
devil_mcry
27-06-2014, 20:18
il C++ non è semplice, il C++ è davvero un linguaggio che devi sempre studiare constantemente, insieme al C sono i due maggiori linguaggi che forzano la mano su praticamente tutti gli aspetti della programmazione .
Hai mai letto parte o tutto il documento che definisce uno degli standard C++ ?
Con C++ devi prima determinare la versione che vuoi usare, poi ti scegli una implementazione del linguaggio e quindi un compilatore, una libreria standard e una libreria per le ABI, e poi puoi iniziare il cammino che non finirai mai, e questo solo per 1 piattaforma con 1 compilatore e 1 libreria standard.
In C++ ci sono persino i templates che da molti vengono definiti come un linguaggio nel linguaggio, prova a fare meta programmazione con C++ e vedrai, prova Boost::MPL e implementa qualcosa di simile da solo, tanti auguri.
Inizia con Java, è un linguaggio che va scomparendo, ma ha sempre 1 bel vantaggio sostanziale rispetto agli altri: ha una gestione automatizzata della memoria, tu scrivi il codice ed nel 99% dei casi puoi tranquillamente lasciare che la JVM faccia il resto nel gestire da sola la memoria, e la gestione della memoria in C e C++ non è davvero così semplice a volte.
Non focalizzarti sulle keyword, focalizzati sul come implementare algoritmi e strutture dati, lascia stare Python ( 1.x , 2.x e 3.x ) , è un linguaggio inutile e dannoso per quanto mi riguarda, sembra più uno scherzo che un linguaggio, tanto vale imparare Perl che almeno qualcosa lo ha apportato al mondo della programmazione.
Java è uno dei linguaggi più usati oggi giorno per la programmazione, altro che sta scomparendo.
Comunque per l'autore del topic, io ti consiglierei JAVA, non so che finalità ha la tua domanda ma diventare bravo con il JAVA apre facilmente sbocchi lavorativi, sopratutto sul mobile e lato server, che al momento tirano molto.
Noto che hanno citato il C#, altra buona base di partenza sia per la relativa semplicità, sia per l'ottimo IDE, considera che lo sviluppo delle app per WP passa da li (ma anche per Windows).
Credo che più che sulla differenza tra i linguaggi e i compilatori (o gli interpreti) dovresti considerare quale linguaggio oggi come oggi è più appetibile.
Se poi non ti interessa a livello professionale ma solo amatoriale, probabilmente la migliore soluzione per smanettare è punta al vb.net o c#
cdimauro
28-06-2014, 00:14
Interessante, e comunque non scordiamoci neanche di PyPy (http://pypy.org/index.html) (a proposito di compilatori JIT) :D.
E' quello che uso quando ho bisogno di prestazioni. :P
Peccato non posso integrarlo in PythonTools for VisualStudio (e mi pare pure con DreamPie). :(
Mi piango ancora Unladen Swallow se è per quello. Il fatto che gente come Wouters non ce l'ha fatta mi ha sempre dato da pensare...
Wouters non lo conosco, ma Unladen Swallon non mi ha convinto, e dopo qualche mese coi primi risultati mi fu chiaro che non sarebbe stato molto utile e, al contrario, avrebbe complicato enormemente CPython. Infatti mi opposi al merge di US in CPython.
Di Pypy ho visto l'annuncio della stable ma non dovendo più scrivere Python da un pò non seguo e non so nulla.
Va migliorando, anche se ormai non ci sono più i notevoli incrementi prestazionali delle prime versioni. Adesso puntano molto alla stabilità e compatibilità. L'ho usato e lo uso quando mi serve velocità, e devo dire che è molto compatibile e stabile.
Cambierai idea il giorno che dovrai lavorare su code base di una certa dimensione insieme ad altri, anche loro convinti di quello che hai scritto qui sopra. E' solo questione d'esperienza ci siamo passati tutti :)
E' l'ecosistema nel suo complesso che conta. Puoi avere una linguaggio semplice come Java ma poi se le librerie e i framework principali sono immense torri di babele dove non trovi un singolo programmatore che le usi o le conosca allo stesso modo.
In ogni caso ritengo che poi alla fine lì dove servono le prestazioni vere si implementa un bel modulo C e via ;).
Questo pero' vuol dire che uno che vuole scrivere codice performante deve pero forza sobbarcarsi il C. Ammeso che lo sappia, resta poi il problema della portabilita' tra sistemi operativi diversi e tra implementazioni diverse del linguaggio. La quantita' di librerie python che fanno uso di moduli C non ha di certo aiutato la diffusione di implementazioni alternative.
Ci sono molti altri linguaggi dinamici che hanno ottenuto ottime performance senza dover ricorrere al C, e non sempre grazie a fondi generosi. Evidentemente gli sviluppatori e la comunita' non sono interessati, ma e' un peccato
cdimauro
28-06-2014, 07:33
Sono interessati, ma a mio avviso sono troppo legati a CPython e all'enorme mole codice (in particolare C) che da esso dipende, e quindi anche dalla compatibilità. Questo frena lo sviluppo di soluzioni alternative e votate alle pure prestazioni. Infatti anche PyPy, pur essendo molto maturo, non viene ancora visto come valido sostituto.
Si potrebbe anche dare una spintarella a CPython (anche se non potrebbe mai raggiungere i livelli di PyPy), perché le idee ci sono (e io ne ho accumulate tante con la mia esperienza con WPython), ma manca il tempo e la voglia di imbarcarsi in un progetto molto complesso e difficile da portare avanti, a causa... del codice già scritto e delle scelte già fatte.
Ormai sono 2 anni che non seguo più la mailling list degli sviluppatori, causa cronica mancanza di tempo, ma la mia impressione è che aspettino che qualcuno tiri fuori un nuovo progetto, che funzioni bene e sia abbastanza retrocompatibile con CPython. Per cui... campa cavallo.
Parlando di recente con un mio collega di queste problematiche, si chiedeva come mai non fosse possibile realizzare qualcosa di simile al compilatore JIT di LUA, che consente di ottenere eccellenti prestazioni (a volte compete col C!), nonostante il linguaggio non abbia una variegata tipizzazione dei dati (Python è più ricco e, sulla carta, potrebbe meglio beneficiare della type inference). Il tutto, tra l'altro, è stato scritto da una sola persona.
Forse questo potrebbe essere un punto di partenza, anche se c'è da dire che Python richiederebbe molto più tempo a causa della maggior complessità del linguaggio.
Un'altra cosa molto importante è che, come diceva van9, un altro grosso problema è rappresentato da Guido, che ha una visione diversa di come dovrebbe essere implementato il linguaggio, ed è troppo legato a una concezione "didattica". Lo vediamo, ad esempio, quando si oppone all'introduzione delle tail optimization per le chiamate a funzione.
Ecco, questa è una cosa che da una parte apprezzo (perché a me piace che Python sia usato a livello didattico), ma dall'altra trovo sia castrante per chi è consapevole di eventuali rischi e sia disposto ad accollarseli pur di ottenere prestazioni migliori. Spesso nella mailing list ho sentito dire dagli sviluppatori che bisogna essere adulti e prendersi le responsabilità.
Ma allora perché questo principio non potrebbe essere applicato anche a CPython, ad esempio abilitando la compilazione dei moduli con l'assunzione che le builtin-in function non possano essere cambiate da nessuno e, quindi, generando codice di gran lunga più ottimizzato quando se ne fa uso (tipo la famigerata funzione len, che per essere invocata si fa una trafila enorme nel codice)? Perché non consentire le tail-optimization per le funzioni? Perché non dare la possibilità di assumere che certe variabili dichiarate nel modulo siano globali, sì, ma nessuno le altererà da fuori dal modulo? E così via, perché di esempi ne potrei fare a bizzeffe.
A parte questo, personalmente avrei fatto scelte molto diverse per CPython. Non mi piacciono diverse soluzioni che sono state adottate per tante cose, e mi riferisco in particolare alla struttura di PyObject & discendenti, e a come funziona il main loop della virtual machine (ceval).
Per me, quindi, sarebbe meglio cominciare con un progetto nuovo, e procedere incrementalmente implementando man mano le varie caratteristiche del linguaggio. Il problema è che ci vorrebbe troppo tempo. Parlando con Antonio Cuni (uno dei core developer di PyPy) alla recente PyCon, mi diceva che secondo lui ci vorrebbero almeno un paio d'anni per cominciare un progetto del genere da zero. E gli posso credere sulla parola, sia per la sua esperienza sia perché anch'io ho avuto modo di sbatterci la testa.
Ma alla fine chi dovrebbe accollarsene l'onere? Questa è la domanda più importante, a mio avviso. Python ormai è un linguaggio mainstream, utilizzato ampiamente da un sacco di gente, di aziende, e tantissime multinazionali. A mio avviso dovrebbero mettere in piedi una task force, cacciando fuori un po' di soldi per risolvere una volta per tutte questo problema. Anche perché le ricadute ci sarebbero sicuramente per tutti, e loro in primis...
ingframin
28-06-2014, 18:55
Sono interessati, ma a mio avviso sono troppo legati a CPython e all'enorme mole codice (in particolare C) che da esso dipende, e quindi anche dalla compatibilità. Questo frena lo sviluppo di soluzioni alternative e votate alle pure prestazioni. Infatti anche PyPy, pur essendo molto maturo, non viene ancora visto come valido sostituto.
Si potrebbe anche dare una spintarella a CPython (anche se non potrebbe mai raggiungere i livelli di PyPy), perché le idee ci sono (e io ne ho accumulate tante con la mia esperienza con WPython), ma manca il tempo e la voglia di imbarcarsi in un progetto molto complesso e difficile da portare avanti, a causa... del codice già scritto e delle scelte già fatte.
Ormai sono 2 anni che non seguo più la mailling list degli sviluppatori, causa cronica mancanza di tempo, ma la mia impressione è che aspettino che qualcuno tiri fuori un nuovo progetto, che funzioni bene e sia abbastanza retrocompatibile con CPython. Per cui... campa cavallo.
Parlando di recente con un mio collega di queste problematiche, si chiedeva come mai non fosse possibile realizzare qualcosa di simile al compilatore JIT di LUA, che consente di ottenere eccellenti prestazioni (a volte compete col C!), nonostante il linguaggio non abbia una variegata tipizzazione dei dati (Python è più ricco e, sulla carta, potrebbe meglio beneficiare della type inference). Il tutto, tra l'altro, è stato scritto da una sola persona.
Forse questo potrebbe essere un punto di partenza, anche se c'è da dire che Python richiederebbe molto più tempo a causa della maggior complessità del linguaggio.
Un'altra cosa molto importante è che, come diceva van9, un altro grosso problema è rappresentato da Guido, che ha una visione diversa di come dovrebbe essere implementato il linguaggio, ed è troppo legato a una concezione "didattica". Lo vediamo, ad esempio, quando si oppone all'introduzione delle tail optimization per le chiamate a funzione.
Ecco, questa è una cosa che da una parte apprezzo (perché a me piace che Python sia usato a livello didattico), ma dall'altra trovo sia castrante per chi è consapevole di eventuali rischi e sia disposto ad accollarseli pur di ottenere prestazioni migliori. Spesso nella mailing list ho sentito dire dagli sviluppatori che bisogna essere adulti e prendersi le responsabilità.
Ma allora perché questo principio non potrebbe essere applicato anche a CPython, ad esempio abilitando la compilazione dei moduli con l'assunzione che le builtin-in function non possano essere cambiate da nessuno e, quindi, generando codice di gran lunga più ottimizzato quando se ne fa uso (tipo la famigerata funzione len, che per essere invocata si fa una trafila enorme nel codice)? Perché non consentire le tail-optimization per le funzioni? Perché non dare la possibilità di assumere che certe variabili dichiarate nel modulo siano globali, sì, ma nessuno le altererà da fuori dal modulo? E così via, perché di esempi ne potrei fare a bizzeffe.
A parte questo, personalmente avrei fatto scelte molto diverse per CPython. Non mi piacciono diverse soluzioni che sono state adottate per tante cose, e mi riferisco in particolare alla struttura di PyObject & discendenti, e a come funziona il main loop della virtual machine (ceval).
Per me, quindi, sarebbe meglio cominciare con un progetto nuovo, e procedere incrementalmente implementando man mano le varie caratteristiche del linguaggio. Il problema è che ci vorrebbe troppo tempo. Parlando con Antonio Cuni (uno dei core developer di PyPy) alla recente PyCon, mi diceva che secondo lui ci vorrebbero almeno un paio d'anni per cominciare un progetto del genere da zero. E gli posso credere sulla parola, sia per la sua esperienza sia perché anch'io ho avuto modo di sbatterci la testa.
Ma alla fine chi dovrebbe accollarsene l'onere? Questa è la domanda più importante, a mio avviso. Python ormai è un linguaggio mainstream, utilizzato ampiamente da un sacco di gente, di aziende, e tantissime multinazionali. A mio avviso dovrebbero mettere in piedi una task force, cacciando fuori un po' di soldi per risolvere una volta per tutte questo problema. Anche perché le ricadute ci sarebbero sicuramente per tutti, e loro in primis...
WPython era un progetto interessante, peccato che non abbia una community attiva di sviluppatori...
Pypy l'ho provato ma non è che mi abbia esaltato... Ho notato ad esempio che se il codice usa cose tipo struct.unpack(...) non va per niente più veloce di CPython, anzi... Anche codice che si interfaccia con moduli C non va meglio (pygame :( ). Sicuramente è promettente ma direi che per sfruttarne appieno le potenzialità bisognerebbe cominciare a scrivere in python puro e risolvere il limite di velocità imposto dalle chiamate a moduli scritti in C (o evitarle proprio...).
Non sapevo che fosse guido ad opporsi alla tail optimization... :(
Inoltre secondo me si potrebbero prendere tante idee da Lisp per rendere python un po'migliore.
La cosa che più mi fa rabbia è che non ho abbastanza conoscenze informatiche per partecipare attivamente allo sviluppo! :muro: :doh: :cry:
Un'altra cosa molto importante è che, come diceva van9, un altro grosso problema è rappresentato da Guido, che ha una visione diversa di come dovrebbe essere implementato il linguaggio, ed è troppo legato a una concezione "didattica". Lo vediamo, ad esempio, quando si oppone all'introduzione delle tail optimization per le chiamate a funzione.
Capisco la volonta' di mantere la chiarezza e da debuggabilita', nula vieterebbe pero' di aggiungere ottimizzazioni "opt-in" da usare solo quando uno ha imparato, o vuole spremere l'ultimo ciclo.
In Common Lisp ad esempio uno puo' dichiare la priorita' tra "speed" "debug", "safety".
Se speed e' piu' importante di safety il compilatore puo' decidere di non effettuare il controllo sui limiti di un array, oppure optare per effettuare la tail call di una chiamata ricorsiva se "speed" > "debug". Puoi pure deciderlo funzione per funzione. Questo mi sembrerebbe un buon compromesso.
cdimauro
28-06-2014, 23:04
WPython era un progetto interessante, peccato che non abbia una community attiva di sviluppatori...
Ero il solo: altro che community. :D
Pypy l'ho provato ma non è che mi abbia esaltato... Ho notato ad esempio che se il codice usa cose tipo struct.unpack(...) non va per niente più veloce di CPython, anzi... Anche codice che si interfaccia con moduli C non va meglio (pygame :( ).
E' un problema noto di PyPy, che ha difficoltà con ctypes. Infatti ha proposto un altro metodo d'interfacciamento col codice C, chiamato cffi se non ricordo male, che oltre a essere di gran lunga più veloce con PyPy è fatto anche molto meglio a livello di funzionamento e API.
Ne ha parlato sempre Antonio Cuni all'ultima PyCon. Forse lo ricordi. :fagiano:
Sicuramente è promettente ma direi che per sfruttarne appieno le potenzialità bisognerebbe cominciare a scrivere in python puro e risolvere il limite di velocità imposto dalle chiamate a moduli scritti in C (o evitarle proprio...).
Se CPython fosse (molto) più veloce si potrebbe pensare di riscrivere tanti moduli in Python. Infatti è quello che fanno con PyPy.
Non sapevo che fosse guido ad opporsi alla tail optimization... :(
Tail Recursion Elimination (http://neopythonic.blogspot.de/2009/04/tail-recursion-elimination.html)
Final Words on Tail Calls (http://neopythonic.blogspot.de/2009/04/final-words-on-tail-calls.html)
Inoltre secondo me si potrebbero prendere tante idee da Lisp per rendere python un po'migliore.
Il LISP lo conosco poco (ho studiato Scheme all'università, più che altro), e non so nulla delle implementazioni.
La cosa che più mi fa rabbia è che non ho abbastanza conoscenze informatiche per partecipare attivamente allo sviluppo! :muro: :doh: :cry:
Beh, c'è sempre tempo per imparare. Anzi, mettendo le man in pasta in genere si impara anche più velocemente. :D
Capisco la volonta' di mantere la chiarezza e da debuggabilita',
Sì, è esattamente questa la sua posizione.
nula vieterebbe pero' di aggiungere ottimizzazioni "opt-in" da usare solo quando uno ha imparato, o vuole spremere l'ultimo ciclo.
In Common Lisp ad esempio uno puo' dichiare la priorita' tra "speed" "debug", "safety".
Se speed e' piu' importante di safety il compilatore puo' decidere di non effettuare il controllo sui limiti di un array, oppure optare per effettuare la tail call di una chiamata ricorsiva se "speed" > "debug". Puoi pure deciderlo funzione per funzione. Questo mi sembrerebbe un buon compromesso.
Proposi qualcosa del genere (http://comments.gmane.org/gmane.comp.python.devel/120300) (in stile pythonico) un po' di anni fa, in risposta a una mail nella mailing list degli sviluppatori. Ma la proposta non fu apprezzata... :(
E' l'ecosistema nel suo complesso che conta. Puoi avere una linguaggio semplice come Java ma poi se le librerie e i framework principali sono immense torri di babele dove non trovi un singolo programmatore che le usi o le conosca allo stesso modo.
Il punto però era l'inerente complessità del C++, in risposta a "Non capisco inoltre tutta questa paura del c++". Poi volendo si può discutere anche di altro - tra Java e C++ in quanto a linguaggi/ecosistemi è un bel testa a testa su chi storicamente ha fatto e continua a fare di peggio. Personalmente saprei dire con certezza solo un tot (di negativo, ofc) sull'ecosistema Java/JVM perché lavoro a tempo pieno con altro (OCaml,Haskell,C,C++ e ultimamente F#) e quello che ho visto in passato mi è bastato e avanzato.
mone.java
01-07-2014, 15:26
Poi volendo si può discutere anche di altro - tra Java e C++ in quanto a linguaggi/ecosistemi è un bel testa a testa su chi storicamente ha fatto e continua a fare di peggio. Personalmente saprei dire con certezza solo un tot (di negativo, ofc) sull'ecosistema Java/JVM
Ovvero?
AnonimoVeneziano
01-07-2014, 22:45
Impara Swift e taglia la testa al toro :sofico:
Ovvero?
Difficile risponderti senza incorrere in una sorta di "blub paradox" per dirla alla Graham.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.