Erlang vs Ruby: Er Zauker

Negli ultimi mesi ho sviluppato un motore di ricerca per il codice, chiamato code zauker.

Lo ho scritto in Ruby e Redis. Ruby è un linguagio che conosco da tempo, ma housato molto poco. In questeultime settimane ho voluto riprendere in mano Erlang, e per esercizio ho provato a riscrivere il kernel del motore di indicizzazione in Erlang, creando ErZauker

In Erlang mi ritengo un neofita, anche se ho avuto la fortuna di leggermi (e recensire) uno dei due migliori manuali in circolazione. Non toccavo Erlang dal 2009, circa tre anni.

Anche Ruby era parecchio tempo che non lo maneggiavo (da prima del 2009). Per cui il confronto che sto per fare è abbstanza obiettivo, anche perché non uso attivamente nessuno dei due linguaggi: non ho "preferenze". Di Ruby mi piace l'immediatezza (leggermente maggiore rispetto a Python) mentre di Erlang apprezzo l'approccio funzionale ma anche pragmatico (per contro scala/haskell sembrano un po' più fini a se stessi, persi nell'intermundia della teoria separata dalla pratica).

Ecco la mia impressione durante  la conversione in Erlang del core di Code Zauker:

  1. La gestione delle stringhe in Erlang si dice sia debole, poiché basata sull'uso di liste, ma l'API di supporto consente ugualmente di operare in modo confortevole. Ad ogni modo il core di Er Zauker non sembra aver risentito di queste limitazioni
  2. Il prototipo di ErZauker, è altamente sequenziale ma si è dimostrato all'altezza delle aspettative. In pratica viene reso paralello solo il processamento dei file, mentre la pipeline che da un file porta ad una serie di trigrammi su redis è completamente sequenziale (almeno per ora!). La velocità del prototipo sembra leggermente superiore a quella del core scritto in Ruby.
  3. La sintassi di Erlang è un po' astrusa: vi sono tre separatori distinti per le istruzioni (";", "." e ",") usati in contesti diversi. Durante lo sviluppo,il ciclo compila e prova in Erlang è un po' difficoltoso.
  4. Rebar è il build tool più diffuso: anche se funzionale, la documentazione che ho trovato è poco chiara e il tool di per sé è avaro di spiegazioni su cosa fa (e perché lo fa...). Di default ogni azione è eseguita ricorsvamente anche sui progetti da cui si dipende, e questo normalmente non è gradevolissimo durante i test.
  5. Erlang è un linguaggio usato in produzione da molto tempo, e la sua affidabilità è notevole. I commenti su stack overflow sono generalmente lusinghieri. Da questo punto di vista, Ruby non ha un "proven track record" di tale forza.

Comment by Giovanni Giorgi on 2012-08-10 10:01:56

I am also evaluting a migration from redis to a java-powered database. The reason is simple: Redis is memory limited, and a set-based database is a lot easier to implement then a nosql one. This library http://docs.guava-libraries.googlecode.com/git-history/v9.0/javadoc/com/google/common/collect/Sets.html#intersection%28java.util.Set,%20java.util.Set%29 could be a good start?...