Da Python a Ruby o vicerversa

Preludio

L’ultima volta che ho provato Ruby è stato nell’aprile del 2005. Avevo sviluppato un paio di progetti di test in RubyOnRails, che allora era già produttivo. Ruby era affascinante, ma la libreria base mi sembrava ancora in stato embrionale e lo abbandonai. RubyOnRails non mi è mai sembrato avesse un vantaggio competitivo rispetto a framwork come CakePHP o Python Django.

(dis)Amore per Python

Per molto tempo ho utilizzato Python sia per sviluppare piccole utility di supporto che per i miei progetti personali. Python 2.5 ha una libreria base molto ampia. Purtroppo però Python ha sofferto ultimamente di alcuni limiti

  1. Python 3 è una barca che è partita senza passeggeri. Dopo Python 2.5 sono stati rilasciate ben due versione di traghettamento (Python 2.6 & 2.7) ma l’obiettivo di portare gli sviluppatori verso Python 3, ma senza molto successo.
  2. Contrariamente ad altri linguaggi, Ruby consente di eseguire ridefinizioni al volo di qualsiasi cosa: metodi, moduli, classi, ecc. Per cui è difficile capire “cosa è successo” se si incappa in librerie che fanno allegre ridefinizioni. Ma questo problema non è risolto da Python che soffre degli stesi svantaggi…e nemmeno da Java, tanto che nessuno con un po’ di sale in zucca installa sullo stesso application server più di una applicazione web.
  3. Benché sia Python che Ruby non abbiano forti tool per la programmazione funzionale, la libreria di Ruby fa molto uso di lambda functions (‘blocks’) rispetto a Python, che invece non sfrutta molto questa potente feature. Il risultato è che Ruby di questi tempi ha molto più appeal funzionale di Python, nonostante non dovrebbe, a detta di alcuni e anche di altri.
  4. Ruby ha built in alcune facility come il supporto a un sistema di comunicazione distribuito (distributed Ruby) che Python ha acquisito solo ultimamente con librerie come pyro.
  5. Apparentemente, in Ruby la gestione degli encoding è migliore. Python 2.x mi ha dato parecchi problemi su questo fronte e anche Python 3 non sembra aver migliorato la situazione, almeno a detta di sviluppatori esperti. In particolare Python 2.x è risultato parecchio schizzinoso sugli encoding anche di chiamate xmlrpc, mentre dopo una iniziale confusione in Ruby 1.8, la versione 1.9 supporta bene utf-8, come leggiamo in questa serie di articoli.
  6. Ho trovato estremamente più facile effettuare connessioni SSL via proxy http in Ruby, riuscendo anche ad ignorare la validazione dei certificati SSL. In Python questo risulta impossibile o molto macchinoso.
  7. Nascendo come una evoluzione di Perl, Ruby ha un supporto built-in per le espressioni regolari, ma il codice è mediamente più leggibile dell’equivalente in Perl.

Da Python a Ruby: tools

Come in Python, in Ruby esistono parecchi tool isomorfi. Ecco uno specchietto sia per chi vuole passare da Ruby a Python, che vicerversa

 
Python Ruby Note
virtualenv rvm
distutils gem In Python esistono due sistemi (pip e easy_install) e troppi modi di creare un package
pyro (rmi-like) drb incluso in ruby RMI-like library
gevent Eventless (embrionale?) Librerie per implementare I/O non bloccante
django RubyOnRails Ruby è sinonimo di RubyOnRails, nel senso che è molto usato nell’ambito web
sphinx yard Tool di documentazione evoluto

Trends

Python è usato in prodotti commerciali del calibro di DropBox, ma anche RubyOnRails è usato in parecchi siti in produzione. Il Google Trend da’ una leggera preferenza a Python, ma per il resto i due linguaggi sono quasi alla pari. Scegliete quello che vi piace di più, ma imparateli entrambi!