Newsgroup: it.comp.programmare
Titolo: Python vs Ruby

Salve,
mi chiedevo se tra questi due linguaggi considerati molto simili, ce ne
fosse uno con maggiori caratteristiche rispetto all'altro.
Ad esempio un discorso simile vale anche per Java e C#, anch'essi
considerati molto simili, ma C# sembra presentare maggiori funzionalità,
come si nota anche in questa comparazione:
http://en.wikipedia.org/wiki/Java_vs_C_Sharp
Qualcuno che li usa entrambi cosa ne pensa?
Grazie

 
...
 
Python è stato creato da uno sfigato stressato (dal punto di vista della 
soddisfazione dei linguaggi, ma estremamente intelligente) che poteva 
scegliere di, eventualmente migliorare ciò che all'epoca era già un 
linguaggio al top.
Per colpa di RedHat e Linux è diventato anche un linguaggio diffuso in 
ambienti di nicchia.Oggi come un virus putrefatto si insinua in ambienti 
commerciali.
Se non per imparare a programmare non vale la pena perderci tempo.
All'epoca Zope era l'ammiraglia dimostrativa di cosa potevi fare con 
Python.
ma un linguagigo che invece di darti libertà, te la toglie...non mi pare 
tanto lungimirante.
 
Ruby è stato creato per rendere ancora più liberi Perl e SmallTalk.
Non serve aggiungere altro a riguardo, tra i due Ruby è quello che senza 
ombra di dubbio ha un futuro garantito e lo dimostra sul campo (vedi ROR 
ed affini).
Il problema di Ruby è che ha fatto male i conti con la comunità degli 
sviluppatori Perl che nel frattempo ha fatto un salto quantico 
nell'introduzione dei paradigmi, questo fa si che Ruby dal punto di vista 
pratico è gia diventato potenzialmente vetusto (vedi il modulo Moose di 
Perl ed il fatto stesso che puoi itrodurre paradigmi di programmazione 
semplicement eimportando un modulo).
 
A mio avviso al di la delle guerre di religione la comunità mondiale 
Python dovrebbe completamente fondersi con quella Ruby e lavorare insieme 
su Ruby.
Questo non toglie che Python rimane un ottimo linguaggio completo per fare 
praticamente tutto, specialmente alla luce del fatto che i moderni 
linguaggi pseudo interpretati possono svolgere numbercrunch con dei backend 
in C.
Vedi ad esempio:
 
Perl PDL (Perl Data Language):
https://secure.wikimedia.org/wikipedia/en/wiki/Perl_Data_Language
 
http://pdl.perl.org
 
 
o
 
SciPy (Scientific Python):
https://secure.wikimedia.org/wikipedia/en/wiki/SciPy
 
http://www.scipy.org
 
 
ciao
 
Mutek
 
p.s.
per i trollatori evitate gentilmente di attaccare il pippone 
religioso.Conosco ed ho usato ampiamente Python per evitarlo come la peste 
quando ogni volta riproducevo lo stesso programma con Ruby o Perl.
Rimane sempre che è un ottimo linguaggio per chi è compatibile con esso.

 Rimane sempre che è un ottimo linguaggio per chi è compatibile con esso.
 
Ciao,
volevo solo aggiungere una nota importante a questo discorso,
sottolineando comunque che non sopporto nè Python nè Ruby, quindi
mentre da una lato guardo la cosa dall'esterno dall'altra non sono
molto ferrato sull'argomento. C'è da dire che la qualità media dei
programmatori Ruby è bassa in maniera imbarazzante (anche sotto quella
dei programmatori PHP, con tutto il rispetto). Al contrario Python è
spesso usato come linguaggio di scripting anche da parte di
programmatori esperti, probabilmente a causa della somiglianza con
altri linguaggi di scripting (o semplicemente perché l'interprete è
più diffuso :) chissà).
Ovviamente questa situazione (che potrebbe cambiare presto, anzi
probabilmente cambierà) non dice nulla sull'effettiva validità dei
linguaggi, ma IMHO fa capire con che tipo di approccio occorre
avvicinarcisi...
M2C
Ciao!

 su Ruby.
 
Cioè milioni di programmatori dovrebbero cambiare linguaggio (e
riscrivere da zero eventuali librerie/programmi/siti) solo per farti
contento?  Per poi magari trovarsi peggio di prima (non tutti la pensano
allo stesso modo sui linguaggi)?
 
Mauro

 contento?  
 
Davo per scontato che avresti preso in considerazione la via più efficiente 
per farlo, ovvero una migrazione strutturale lenta e fisiologica alle 
reali possibilità.
Comunque non per farmi contento perchè non mi interessa Ruby, ma solo per 
il mio punto di vista.
La diversità è ottima e dal punto di vista darwiniano garantisce 
l'evoluzione, però questo film lo abbiamo già visto con Java...
Rimane che Python è un ottimo linguaggio ma non lo consiglio anzi il 
contrario.
 
 
Mutek

 senza forzature economiche oggi si programmerebbe in Perl + bindings.
 
Questo invece secondo me è falso.
 
Ciao!

 Rimane che Python è un ottimo linguaggio.
[...]
 > Rimane che Python è un ottimo linguaggio ma non lo consiglio anzi il
 > contrario.
 
Sembra che il principale difetto di Python sia che e' ottimo.
 
-- 
 
Carlo Milanesi
http://carlomilanesi.wordpress.com/
 

 Posso scrivere codice identando a forma di albero di natale?
 
Sì, con "if False:" puoi inserire un blocco indentato anche dove non ci
starebbe, e puoi riampirlo di cicli inutili per ulteriori indentazioni,
tanto non verranno mai eseguiti, all'intarno di una lista puoi andare a
capo come ti pare, in casi estremi puoi inserire dei commenti a caso
indentati a piacere. Il codice rimmerrebbe comunque più leggibile di un
programma Perl :)
 
Tornando seri: in qualche modo devi dire all'interprete come è fatto il
tuo codice, se hai l'indentazione libera perdi la libertà di scrivere le
istruzioni senza il ';' finale o di fare un blocco di codice senza le
graffe o altre cose del genere.  Ogni linguaggio ha la sua sintassi, non
ho mai visto un linguaggio dove si può scrivere quello che si vuole come
si vuole per poi tirare fuori dei programmi funzionanti.
 
Se le libertà sno queste non mi interessano, preferisco le comodità (e
delimitare i blocchi con l'indentazione per me è comodo).
 
Mauro

 contro 1 di C e Lisp, ma qual è il problema
Io sto avvicinando Lisp ora e da quello che ho letto è multiparadigma, 
perché dici invece che ne supporta uno solo?

 perché dici invece che ne supporta uno solo?
Quando l'ho guardato io era funzionale puro, poi non so se è cambiato.
Mauro

 Quando l'ho guardato io era funzionale puro, poi non so se è cambiato.
Nel clisp che sto vedendo puoi avere variabili globali e side effect, ed 
è del 1987. Quando l'hai guardato?

 Sembra che il principale difetto di Python sia che e' ottimo.
semplicemente riconosco che è un ottimo linguaggio, ma lo è anche Java.
Penso che python si doveva limitare a svolgere la funzione di linguaggio 
prototipale, invece la sua diffusione lo ha fatto uscire da quello che io 
ritenevo dovesse essere il suo scope e quindi non sono daccordo (è come 
quando vedi sviluppare un intero sistema operativo con il linguaggio G di 
LabView, è chiaramente lecito, ma automaticamente dico...hai fatto la 
cacchina fuori dal vasetto).
Mutek

 delimitare i blocchi con l'indentazione per me è comodo).
 
essere eventualmente forzato a livello di editing ad usare spazi/tab per 
delimitare blocchi per me è scomodo.
Trovo molto comodo poter creare un mio stile personale di formattazione 
con il minimo fisiologico di limiti.
Sta a me eventualmente scrivere codice leggibile e rispondo in primo piano 
della qualità del codice che produco.
Rimane comunque che un {} ed un ; non hanno mai ucciso nessuno e 
dall'altra parte nonostante la forzatura Python ha dimostrato che se fatto 
bene il codice sembra molto più leggibile.
Per me è un prezzo troppo alto da pagare e preferisco sforzarmi di 
costruire codice leggibile usando {} e identazione libera.
Eliminerei il ;
 
Mutek

,

A parte poche eccezioni tutti i linguaggi maggiormente diffusi sono
multiparadigma. Di sicuro scrivere funzionale in C o imperativo in
Haskell non è agevole, ma con molto impegno si può costruire anche la
torre eiffel di stuzzicadenti (per citare un OOL ^_^) ..
Ciao!


Al contrario, Lisp è procedurale, poi è stato aggiunto CLOS per il 
paradigma object oriented.
Si può programmare seguendo lo stile funzionale puro, ma solo con una 
certa disciplina (il linguaggio lo permette ma non lo rafforza).
 
Ovviamente parlo di Common Lisp.
 
Scheme e specialmente Clojure risaltano di più il paradigma funzionale.
 
 
Ciao  Manlio


 
for(i=0; i<N; ++i) ;
 
Scusate, non ho resistito ;-)
 
Ciao!

 ritenevo dovesse essere il suo scope
 
Al contrario, mi pare che mentre Perl e' considerato un linguaggio per 
programmi write-only, nel senso di poco leggibili e quindi poco 
manutenibili, Python e' stato inventato proprio per fare le stesse cose 
che fa Perl, ma in modo piu' manutenibile.
Mentre lo slogan di Perl, è "There's more than one way to do it", lo 
slogan di Python è "There's only one obvious way to do it."


 slogan di Python è "There's only one obvious way to do it."
 
"Riteniamo che la nostra visione soggettiva sia la visione di tutto il 
mondo e non ti diamo alternative o sei dentro o sei fuori."
 
 
Liberissimo di decidere per l'eutanasia ma...
Semplicemente non sono compatibile con la seconda frase.
 
mutek


Anch'io preferisco programmare in un linguaggio che mi da liberta' 
piuttosto che tutelarmi da errori, infatti il mio linguaggio preferito 
e' il C++. Ma se fossi il responsabile un gruppo di sviluppatori, e 
dovessi fargli sviluppare un software che possa passare facilmente dalle 
mani di un programmatore alle mani di un altro, avrei due scelte: o 
adottare un linguaggio che offre poca liberta' ai programmatori, o 
adottare un linguaggio che offre molta liberta' ai programmatori, 
congiuntamente a un rigoroso standard di codifica che offre poca 
liberta' ai programmatori (meglio se tale standard e' convalidato da un 
tool di analisi statica).
E comunque penso che se l'evoluzione dei linguaggi di programmazione sia 
dovuta piu' alle dinamiche del mercato del software che agli 
investimenti in propaganda commerciale. Quindi se Java e' piu' usato di 
Perl e lo sara' anche fra 10 anni, cio' non e' dovuto al fatto che il 
numero di propagandisti di Java e' maggiore del numero di propagandisti 
di Perl.


 di Perl.
 
Nell'ottica delle dinamiche di mercato il primo gruppo di propagandisti 
potrebbe essere più piccolo ma nel complesso più efficiente.