Scelgo Erlang o Php?

Mi sono sempre piaciuti i linguaggi funzionali, e un tempo ero infatuato anche di Prolog. All’epoca (parliamo di un tempo in cui invece dei blog si leggevano le news) sentivo di quando in quando parlare di Erlang nei newsgroup che seguivo (comp.lang.lisp? comp.lang.functional? chi si ricorda?) Veniva guardato come uno strano animale, l’unico della compagnia usato nella programmazione embedded. Non feci la fatica di cercare più informazioni all’epoca, ero già occupato a sufficienza.

Passano 10 anni; Erlang viene ostracizzato dalla stessa azienda dove è nato, Joe Armstrong va in accademia e scrive prima una eccellente tesi di dottorato; poi un libro per i Pragmatici. Oggi Erlang è sul radar di molti. Si presenta come un linguaggio di programmazione basato su una concezione precisa, con un numero limitato di feature. I linguaggi che hanno cercato di vincere includendo ogni possibile feature immaginabile sono in declino, e l’interesse per Erlang è in salita. Erlang potrebbe essere il linguaggio ideale per applicazioni web: concorrente, semplice, robusto, con un database “a oggetti” integrato, promette di scalare facilmente fino a migliaia di connessioni concorrenti.

Non ho ancora imparato a programmare in Erlang (a mia discolpa, passo gran parte del mio tempo a fare corsi, mentoring e coaching sui metodi Agili, cosa che mi appassiona di più!) Però il mio lavoro come docente a contratto all’Università dell’Insubria mi da il vantaggio di avere ogni tanto giovani brillanti che mi chiedono una tesi… Così posso chiedere a loro di imparare Erlang e raccontare quello che hanno imparato. Tempo fa Marco Trinci ha realizzato un chat server sincrono su http.

Mercoledì 19 marzo si è laureato Jacopo Girardi, con un’altra tesi centrata su Erlang.

La domanda che ci siamo posti è la seguente. Supponiamo di considerare Erlang in alternativa a un consolidato Php come linguaggio di programmazione per una nuova applicazione. Supponiamo di non avere particolari grilli pel capo e di utilizzare lo stack di programmazione “canonico” per ciascuno dei due linguaggi. Così accompagneremo Php con il web server Apache Httpd, e il DBMS MySql. Erlang si accompagnerà al web server Yaws, realizzato in Erlang, e al database “a oggetti” Mnesia, anch’esso realizzato in Erlang. Supponiamo ancora di non fare particolari ottimizzazioni, ma di usare questi due stack nella maniera più semplice e canonica possibile. Volevamo sapere:

  • A che problemi vado incontro, abbandonando il ben noto e collaudato Php per un linguaggio meno conosciuto?
  • Erlang regge il confronto di Php nel terreno preferito da quest’ultimo, ovvero le applicazioni web?
  • Che tipo di differenze di performance posso aspettarmi?
  • Che sensazioni si provano? Quale linguaggio è più semplice? Quale più ostico?

Per rispondere a queste domande Jacopo ha realizzato due volte, in Erlang e in Php, la stessa applicazione, ovvero un server per giochi di carte. Jacopo avrebbe voluto realizzare il gioco della Scala 40, ma io ho obiettato che realizzare un gioco così complicato, per quanto divertente, gli avrebbe portato via tutto il tempo disponibile per la tesi. Per cui l’ho dirottato su un gioco più semplice: “pesca la carta più alta” :-) Jacopo ha acconsentito a questa riduzione di scope, ma ha realizzato in realtà un framework con una API che permette di inserire giochi diversi. Ma sto divagando.

Jacopo ha raccolto la storia dello sviluppo in tre iterazioni, documentate nella tesi. Poi ha realizzato un framework di stress test per verificare le performance delle due implementazioni.

La risposta alle domande che ci eravamo posti all’inizio? Per una risposta esauriente consiglio di guardare la tesi di Jacopo, che è leggibile e istruttiva. Ma in breve, Jacopo ha concluso che

  • Configurare Erlang (con Mnesia e Yaws) è più semplice. Il fatto che i due strumenti siano scritti in Erlang e vivano nello stesso processo (inteso nel senso di sistema operativo) con l’applicazione web è un vantaggio, perché le tre applicazioni sono più integrate.
  • Erlang non è particolarmente difficile come linguaggio, anche se ad apprenderlo è qualcuno che non ha un particolare background sui linguaggi funzionali.
  • A livelli di concorrenza non elevatissimi (meno di 100 connessioni contemporanee) le performance di Erlang sono migliori di quelle di Php+Apache+MySql
  • A livelli di concorrenza più elevati entrambe le piattaforme presentano problemi di instabilità. (Questo non me l’aspettavo, io mi ero bevuto la propaganda che Erlang sta in piedi sempre e comunque. Può essere che dipenda dalla minore esperienza di Jacopo con Erlang rispetto a Php, ma l’esperimento consisteva proprio nel cercare di capire se a uno sviluppatore Php conviene passare ad Erlang. La risposta è “può convenire, ma aspettati di trovare problemi da risolvere”)

In definitiva pare che Erlang, pur essendo “bello” in una maniera che Php (o Java) non potranno mai sperare di essere, soffra ancora del fatto di essere una piattaforma minoritaria. Non ci sono tutti gli sviluppi che ci sono nelle altre piattaforme. Ad esempio, Gabriele mi faceva notare che non c’è un parser XML. Ugo Landini segnalava questa storia secondo cui la performance di I/O per programmi di tipo “filtro” come quelli che spesso si realizzano in Perl o Ruby è tremenda.

In compenso, il fatto di avere un database integrato, un web server integrato, un tutto integrato in un solo processo di sistema operativo, costituisce un vantaggio non indifferente. In definitiva Erlang mi piace.

Grazie a Jacopo per l’eccellente lavoro. Il software è stato pubblicato da Jacopo con licenza GPL 2.0.

One Response to “Scelgo Erlang o Php?”

  1. giulio sovran Says:

    Sto cercando uno sviluppatore Erlang da assumere in un’azienda di Berlino, Dublino o Sofia, oppure che lavori in Remoto.

    Avreste contatti da passarmi?

    grazie

    giulio

Leave a Reply