PDA

View Full Version : [python, ruby] Python VS Ruby


javaboy
23-06-2009, 20:59
Quale linguaggio preferite? Quali i vantaggi del primo, quali i vantaggi del secondo?

~FullSyst3m~
23-06-2009, 23:42
Quale linguaggio preferite? Quali i vantaggi del primo, quali i vantaggi del secondo?

Io Ruby non lo conosco, ma da qualche sorgente che ho visto, se dovessi giudicare da questo, sceglierei indubbiamente Python.

cdimauro
24-06-2009, 08:25
Quale linguaggio preferite?
Python
Quali i vantaggi del primo,
Sintassi semplice, elegante e leggibile. Parecchi strumenti in dotazione. Ricca libreria standard e altrettanto ricca libreria di terze parti.
quali i vantaggi del secondo?
Ruby on Rails. Poi come linguaggio proprio non mi piace: troppo PERL-ish. :stordita:

mindwings
24-06-2009, 13:59
Altre argomentazioni a favore di python da Eli Bendersky (http://eli.thegreenplace.net/2009/05/15/a-year-with-python/) una cosa che non ho capito e' come mai ci sono pochi libri su python (rispetto a ruby per esempio) questione di hype?:stordita:

cdimauro
24-06-2009, 14:28
Penso di sì, perché Python ha una diffusione più ampia e comunità più numerosa.

O forse perché... Python è talmente semplice che non c'è la necessità di scrivere tomi su tomi. :asd:

Comunque aggiungo anche Why I love Python (http://www.mindviewinc.com/downloads/pub/eckel/LovePython.zip), una presentazione di Bruce Eckel, che merita di essere guardata. ;)

P.S. Grazie per quell'interessante link! :)

CozzaAmara
24-06-2009, 17:28
Quale linguaggio preferite? Quali i vantaggi del primo, quali i vantaggi del secondo?

Sono entrambi ottimi linguaggi, io potrei consigliarti Ruby perchè lo conosco meglio dato che è da diverso tempo che mi ci sto dedicando.

Entrambi sono linguaggi di scripting molto semplici ma al tempo stesso potenti, con una sintassi molto chiara e leggibile.

Vantaggi Ruby:
- Completamente OO
- Ruby on Rails è un pò il capostipite dei framework web MVC

Vantaggi Python
- Community più grande, linguaggio attualmente più diffuso di Ruby (tranne in Giappone :D )

Va da se che alla fine della fiera sono ottimi entrambi. ;)

CozzaAmara
24-06-2009, 17:29
Io Ruby non lo conosco, ma da qualche sorgente che ho visto, se dovessi giudicare da questo, sceglierei indubbiamente Python.

Un esempio?

CozzaAmara
24-06-2009, 17:32
O forse perché... Python è talmente semplice che non c'è la necessità di scrivere tomi su tomi. :asd:

Credimi, vale lo stesso discorso per Ruby e RoR.

Il numero di volumi dedicati ad un linguaggio non rispecchia necessariamente la complessità dello stesso.

Ci potrebbero ad esempio essere 100 libri che trattano un determinato linguaggio dalle sue basi e sempre degli stessi argomenti parlerebbero tutti.

Inoltre per Ruby se è interessato sono comunque una manciata i volumi veramente da avere, io potrei consigliargliene un paio.

Ciao.

~FullSyst3m~
24-06-2009, 17:41
Un esempio?

Li avevo visti tempo fa alcuni sorgenti Ruby e come pulizia e semplicità di codice sinceramente preferisco Python.

CozzaAmara
24-06-2009, 17:52
Li avevo visti tempo fa alcuni sorgenti Ruby e come pulizia e semplicità di codice sinceramente preferisco Python.

Bah può essere, non lo escludo, tuttavia avendo a che fare con Ruby e RoR posso assicurarti che la sintassi è estremamente chiara e pulita.
Nello specifico infatti è uno degli obiettivi che si sono voluti raggiungere con questo "nuovo" linguaggio.

Inoltre senza esempi concreti diventa difficile valutare le affermazioni. :read:

Stavo pensando che forse dipende anche da chi lo scrive il codice, ma potrei sbagliarmi :asd:

~FullSyst3m~
24-06-2009, 18:14
Bah può essere, non lo escludo, tuttavia avendo a che fare con Ruby e RoR posso assicurarti che la sintassi è estremamente chiara e pulita.
Nello specifico infatti è uno degli obiettivi che si sono voluti raggiungere con questo "nuovo" linguaggio.

Inoltre senza esempi concreti diventa difficile valutare le affermazioni. :read:

Stavo pensando che forse dipende anche da chi lo scrive il codice, ma potrei sbagliarmi :asd:


Sicuramente dipende anche da quello.

cdimauro
24-06-2009, 20:46
Vantaggi Ruby:
- Completamente OO
Mumble. Qui bisogna vedere cosa intendi, perché anche in Python qualunque cosa è un oggetto.
Va da se che alla fine della fiera sono ottimi entrambi. ;)
Sicuramente, ma "Python è più ottimo" (citazione). :D
Credimi, vale lo stesso discorso per Ruby e RoR.

Il numero di volumi dedicati ad un linguaggio non rispecchia necessariamente la complessità dello stesso.

Ci potrebbero ad esempio essere 100 libri che trattano un determinato linguaggio dalle sue basi e sempre degli stessi argomenti parlerebbero tutti.

Inoltre per Ruby se è interessato sono comunque una manciata i volumi veramente da avere, io potrei consigliargliene un paio.

Ciao.
Credimi: era una battuta. :p
Bah può essere, non lo escludo, tuttavia avendo a che fare con Ruby e RoR posso assicurarti che la sintassi è estremamente chiara e pulita.
Nello specifico infatti è uno degli obiettivi che si sono voluti raggiungere con questo "nuovo" linguaggio.

Inoltre senza esempi concreti diventa difficile valutare le affermazioni. :read:

Stavo pensando che forse dipende anche da chi lo scrive il codice, ma potrei sbagliarmi :asd:
Indubbiamente. Però ci sono certi costrutti di Ruby che mi fanno accapponare la pelle, e poi la gestione delle variabili di istanza e di classe che PER ME (lo sottolineo, che è meglio) sono un pugno nell'occhio.

Comunque per farsi un'idea della sintassi dei due linguaggi posto un paio di link del famoso Computer Language Shootout: il primo con Python vs Ruby e il secondo con Ruby vs Python (così è possibile visionare immediatamente i sorgenti in Python e Ruby, rispettivamente):
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=ruby&box=1
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=ruby&lang2=python&box=1

;)

ndakota
24-06-2009, 20:51
Mumble. Qui bisogna vedere cosa intendi, perché anche in Python qualunque cosa è un oggetto.


a questo proposito, ho letto da qualche parte che fare 1+2 in ruby è una scrittura veloce diciamo ma in realtà è come se scrivi 1.+(2) :D e questo la direbbe lunga su quanto è OO ruby, sbaglio?

è lo stesso in python?

javaboy
24-06-2009, 21:17
Io conosco abbastanza bene python e vagamente ruby.

Poter scrivere 5.times { puts "Foo! " } è fantastico!!

Si sta facendo qualcosa per risolvere i problemi di prestazioni di ruby?

Giullo
24-06-2009, 22:26
utilizzo ruby da quasi 4 anni e ne sono assolutamente soddisfatto :)

il suo punto di forza è (per alcuni) anche la sua debolezza: è un linguaggio completamente dinamico, risulta molto semplice manipolare classi a runtime o crearne di nuove. poi ha alcune features che non ho riscontrato nei linguaggi che utilizzavo prima (php ed in parte java), come ad esempio i blocks (con cui ruby implementa alcuni principi propri della programmazione funzionale, anche se forse in maniera non proprio ortodossa :) )

non posso fare un paragone con python perchè per qualche settimana non lo utilizzerò ancora , quindi per un confronto preciso vi aggiornerò tra un paio di mesi :)

ps: ah chiaramente il PROBLEMA di ruby sono le performance, è un linguaggio molto lento, sia per le caratteristiche proprie che per le implementazioni ... per capirci jruby (un interprete ruby scritto in java) gira meglio dell'implementazione ufficiale in c :(

cdimauro
25-06-2009, 00:15
a questo proposito, ho letto da qualche parte che fare 1+2 in ruby è una scrittura veloce diciamo ma in realtà è come se scrivi 1.+(2) :D e questo la direbbe lunga su quanto è OO ruby, sbaglio?

è lo stesso in python?
E' simile perché tutti gli operatori in Python sono mappati tramite opportuni metodi (ad esempio __add__ per la somma).

Ma Python, quando può, ottimizza le operazioni. Ad esempio se intercetta somme di interi e stringhe, le esegue molto più velocemente senza far intervenire i meccanismi di cui sopra.
Io conosco abbastanza bene python e vagamente ruby.

Poter scrivere 5.times { puts "Foo! " } è fantastico!!
Indubbiamente. Ma dai un'occhiata anche ai generatori di Python, e alle list comprehension (e le cugine generator expression). ;)
Si sta facendo qualcosa per risolvere i problemi di prestazioni di ruby?
C'è Ruby 1.9 che è molto più veloce, anche se ancora mediamente sotto Python.
utilizzo ruby da quasi 4 anni e ne sono assolutamente soddisfatto :)

il suo punto di forza è (per alcuni) anche la sua debolezza: è un linguaggio completamente dinamico, risulta molto semplice manipolare classi a runtime o crearne di nuove.
Questo si può fare anche con Python, che tra l'altro ha appositi ed eleganti meccanismi allo scopo (decoratori di classi e funzioni/metodi, e le metaclassi), che invito a esaminare con attenzione perché ne vale veramente la pena.
poi ha alcune features che non ho riscontrato nei linguaggi che utilizzavo prima (php ed in parte java), come ad esempio i blocks (con cui ruby implementa alcuni principi propri della programmazione funzionale, anche se forse in maniera non proprio ortodossa :) )
E anche un po' confusionaria e criptica visto che offre 3 meccanismi per fare più o meno le stesse cose.
non posso fare un paragone con python perchè per qualche settimana non lo utilizzerò ancora , quindi per un confronto preciso vi aggiornerò tra un paio di mesi :)
Va benissimo. :)
ps: ah chiaramente il PROBLEMA di ruby sono le performance, è un linguaggio molto lento, sia per le caratteristiche proprie che per le implementazioni ... per capirci jruby (un interprete ruby scritto in java) gira meglio dell'implementazione ufficiale in c :(
Vero, ma Ruby, per sua natura, è troppo dinamico e, quindi, è più difficile da ottimizzare.

Python è meno dinamico e si possono sfruttare certe caratteristiche del linguaggio per migliorare le prestazioni.

Questo (http://code.google.com/p/unladen-swallow/wiki/ProjectPlan) progetto promette faville. :cool:

dawid999
25-06-2009, 01:05
non essendo un gran programmatore ho deciso di sviluppare le mie capacita' in questo settore scegliendo Ruby.
non posso di certo fare un confronto con python ma sono convinto di aver fatto la scelta giusta ,la cosa piu importante e' che ho la possibilita' di costruire le idee in modo semplice e molto rapido e rails porta questo concetto all'estremo.
per iniziare da zero con rails consiglio "Head First Rails"

CozzaAmara
25-06-2009, 11:25
E anche un po' confusionaria e criptica visto che offre 3 meccanismi per fare più o meno le stesse cose.


Troppa libertà: che disgrazia :asd:

CozzaAmara
25-06-2009, 11:33
non essendo un gran programmatore ho deciso di sviluppare le mie capacita' in questo settore scegliendo Ruby.
non posso di certo fare un confronto con python ma sono convinto di aver fatto la scelta giusta ,la cosa piu importante e' che ho la possibilita' di costruire le idee in modo semplice e molto rapido e rails porta questo concetto all'estremo.
per iniziare da zero con rails consiglio "Head First Rails"

Ottima scelta, anch'io mi sto trovando molto soddisfatto.

Ho iniziato prima con Ruby e adesso sono su Rails e devo dire che Ruby permette allo sviluppatore una libertà quasi imbarazzante e si riesce quasi sempre a mantenere una sintassi estremamente pulita ed autoesplicativa.

Alcune features su cui inizialmente avevo forti dubbi (classi sempre aperte) mi hanno invece conquistato.

Sulla lentezza di Ruby è vero per le versioni precedenti la 1.9.

Poi va sempre ricordato che esistono N linguaggi per diverse aree di interesse, è inutile lamentarsi se Ruby è "ancora lento" per un'applicazione di supercalcolo. Semplicemente non è il linguaggio adatto, così come l'Assembler non è propriamente consigliabile per lo sviluppo web. :fagiano:

javaboy
25-06-2009, 13:05
Troppa libertà: che disgrazia :asd:
Non sono convinto che sia una buona idea avere 20 metodi per fare la stessa cosa. E' quello che odio del c++......

cdimauro
25-06-2009, 13:55
Troppa libertà: che disgrazia :asd:
Non sono convinto che sia una buona idea avere 20 metodi per fare la stessa cosa. E' quello che odio del c++......
*
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

:cool:

CozzaAmara
25-06-2009, 14:25
@cdimauro (sintassi Ruby :asd:)

Il fatto che possa esserci qualche situazione in cui è "possibile" giungere ad uno stesso risultato percorrendo strade diverse non implica necessariamente che il linguaggio stesso sia poco standardizzato e/o confusionario.

"Convention Over Configuration" è, ad esempio, uno dei cavalli di battaglia di Rails, quindi ...

cdimauro
25-06-2009, 14:50
Blocchi, procedure e lambda non mi sembra un fulgido esempio di semplicità e chiarezza. Anche perché hanno piccole differenze che tante volte sono causa di problemi e bug.

CozzaAmara
25-06-2009, 16:07
Blocchi, procedure e lambda non mi sembra un fulgido esempio di semplicità e chiarezza. Anche perché hanno piccole differenze che tante volte sono causa di problemi e bug.

Sono strumenti come altri, non tutto è detto che debba essere semplice e chiaro (al primo approccio), specialmente per funzionalità un minimo avanzate.

Dedurre da ciò che Ruby siano un linguaggio poco chiaro e problematico ce ne corre parecchio.

Personalmente ritengo i "blocchi" uno strumento molto utile nella programmazione in Ruby così come diverse altre features a prima vista "pericolose" (classi sempre aperte) ma che se sapute gestire correttamente offrono un grande potere allo sviluppatore.

E' anche in questo la potenza e la flessibilità di un linguaggio dinamico come Ruby.

cdimauro
26-06-2009, 08:45
Sono strumenti come altri, non tutto è detto che debba essere semplice e chiaro (al primo approccio), specialmente per funzionalità un minimo avanzate.
Questo è un aspetto molto oscuro di Ruby, e lo puoi leggere anche nella stessa documentazione online.
Dedurre da ciò che Ruby siano un linguaggio poco chiaro e problematico ce ne corre parecchio.
Deduci male tu, dalle mie parole. Questo è uno dei tanti aspetti che concorre a ciò; non l'unico che ho considerato.
Personalmente ritengo i "blocchi" uno strumento molto utile nella programmazione in Ruby
Beh, mi pare anche normale: si basa proprio su questa caratteristica. :p
così come diverse altre features a prima vista "pericolose" (classi sempre aperte) ma che se sapute gestire correttamente offrono un grande potere allo sviluppatore.
Non credo sia una gran bella cosa cambiare il comportamento delle classi standard.

Aggiungere funzioni / metodi "helper" la trovo un'ottima cosa, invece.
E' anche in questo la potenza e la flessibilità di un linguaggio dinamico come Ruby.
Non lo metto in dubbio.

CozzaAmara
26-06-2009, 10:03
Non credo sia una gran bella cosa cambiare il comportamento delle classi standard.

Ci sono pro e contro, avendone avuto a che fare ti posso dire che può essere a volte molto rischioso (il controllo è sempre lasciato allo sviluppatore) ma parallelamente è anche un grande vantaggio perchè ti permette di effettuare radicali cambiamenti al codice senza dover scervellarsi su formule arzigogolate o hack rischiosi, questo è utile soprattutto quando si deve mettere mano a librerie di terze parti.

Poi ovviamente ognuno ha le sue preferenze.

A parer mio, il fatto di lasciare allo sviluppatore il maggior controllo possibile è prima di tutto un lato positivo.

Una cosa che invece non mi piace è la possibilità di ridefinire delle costanti quasi senza colpo ferire, viene semplicemente emesso un warning.

http://blog.jayfields.com/2006/12/ruby-constant-values.html

^TiGeRShArK^
26-06-2009, 14:07
io a secondo di quello che devo fare, se mi semplificano il lavoro rispetto a c# 3.5, scelgo uno oppure l'altro, ma a livello di sintassi pura mi piace un bel pò di + ruby.

cdimauro
26-06-2009, 14:55
Ci sono pro e contro, avendone avuto a che fare ti posso dire che può essere a volte molto rischioso (il controllo è sempre lasciato allo sviluppatore) ma parallelamente è anche un grande vantaggio perchè ti permette di effettuare radicali cambiamenti al codice senza dover scervellarsi su formule arzigogolate o hack rischiosi, questo è utile soprattutto quando si deve mettere mano a librerie di terze parti.

Poi ovviamente ognuno ha le sue preferenze.

A parer mio, il fatto di lasciare allo sviluppatore il maggior controllo possibile è prima di tutto un lato positivo.
A mio giudizio gli interi DEVONO "comportarsi" da interi. Cambiarne la "natura" non è una buona cosa.
Una cosa che invece non mi piace è la possibilità di ridefinire delle costanti quasi senza colpo ferire, viene semplicemente emesso un warning.

http://blog.jayfields.com/2006/12/ruby-constant-values.html
Vabbé, dai, ma questi sono giapponesi fino al midollo: se le costanti si chiamano così ci sarà un motivo, no? :doh:
io a secondo di quello che devo fare, se mi semplificano il lavoro rispetto a c# 3.5, scelgo uno oppure l'altro,
Fai benissimo.
ma a livello di sintassi pura mi piace un bel pò di + ruby.
De gustibus. :p