Daniele Radogna
Alcune buone ragioni per usare Perl

Un linguaggio che non teme confronti

© Perl Mongers Italia. Tutti i diritti riservati.


Introduzione

Esistono diverse buone ragioni per proporre all' attenzione di due tipologie di interlocutori la tecnologia Perl. Il testo di questa breve comunicazione si pone l' obiettivo di elencare tali ragioni senza la pretesa di fornire in tale sede tutte le prove a sostegno delle affermazioni che faremo, quanto piuttosto di enunciare queste affermazioni di cui in un diverso momento sarà possibile fornire approfondimenti e serie argomentazioni a favore. Questo intervento nasce come reazione da parte della comunità Perl italiana al contrasto esistente tra le potenzialità del Perl, particolarmente interessanti nel contesto italiano (per ragioni cui vorremmo accennare di seguito), e la sua scarsa diffusione in ambito nazionale.
I destinatari del nostro messaggio sono sia la collettività degli sviluppatori che i professionisti dell' IT responsabili della scelta delle piattaforme tecnologiche su cui i loro team sviluppano soluzioni; questi interlocutori sono i soggetti che meglio possono beneficiare delle caratteristiche del Perl. Ometteremo cenni sulla storia e le origini del Perl privilegiando invece lo scopo di enucleare in modo nitido e concreto le qualità di questa tecnologia.
Abbiamo definito tecnologia un linguaggio di programmazione open source, il Perl. Il termine tecnologia è usato intenzionalmente e a ragione in quanto, come avremo modo di vedere, l' uso del Perl non comporta solamente l' uso di una sintassi piuttosto che un' altra, quanto l' adozione di una costellazione di metodi e strumenti che sono efficaci e consistenti. Per essere precisi, il Perl un linguaggio di scripting, ovvero e` membro di una famiglia di linguaggi di cui fanno parte Tcl, Python, Rexx, i vari linguaggi di programmazione della shell in ambito *nix e, più recentemente Ruby. La definizione linguaggio di scripting implica, quasi come riflesso condizionato, una distinzione e quasi un contrasto con i linguaggi di system programming quali C, C++, Java, Delphi, Fortran, eccetera. La distinzione tra questi due gruppi di linguaggi non è riconducibile a un singolo fattore, quale per esempio, come spesso viene affermato, la natura interpretata piuttosto che compilata del processo di generazione del codice. Tale differenza esiste ma, oltre a essere discutibile per quanto concerne la sua nitidezza in un' ottica tecnica, è certamente fuorviante. Si potrebbero elencare molte altre distinzioni, ma certamente quella che - pur non essendo la sola -ha maggiore potere risolutore nella separazione delle due classi di linguaggi quella che denota la posizione assunta dal linguaggio nella scelta tra due obiettivi in sostanza mutuamente irriducibili: massimizzazione della efficienza nella esecuzione del codice da parte del calcolatore oppure massimizzazione della efficienza del programmatore nello sviluppo del codice. I linguaggi di scripting si pongono decisamente dalla parte di chi sviluppa codice implementando un insieme di caratteristiche che - per farla breve - liberano il programmatore dalla necessità di scrivere codice per la gestione delle risorse che il programma consuma assumendosene interamente l' onere relativo. Esempi non esaustivi di tale gestione includono la gestione della allocazione e della disallocazione della memoria, la gestione della garbage collection,la gestione automatica della conversione tra i tipi, la gestione degli errori, la inizializzazione e la chiusura del programma e così via. Si noti che tale gestione non solamente consuma tempo; non solamente significa generare codice soggetto come tale ad essere origine di errori particolarmente insidiosi; ma comporta l' investimento di un tempo dedicato a compiti che distolgono completamente dalla soluzione del problema.
Va subito detto, sia come inciso volto ad evitare equivoci, che tale distinzione non va intesa come un giudizio di merito: è del tutto evidente ai meno affetti dall' integralismo che contraddistingue le guerre di religione tra linguaggi che la scelta di un linguaggio di programmazione va effettuata pragmaticamente in funzione del concreto problema, del settore applicativo e di eventuali vincoli che il contesto impone. Vale però la pena di notare che, in contrasto al fatto che pochi gestirebbero con un linguaggio di scripting il movimento del braccio di un robot, di converso capita spesso di notare l' uso di strumenti di system programming in un contesto dove invece la scelta di un linguaggio di scripting si imporrebbe da se. Si può anzi dire che la capacità di schierare efficientemente soluzioni software in una pluralità di settori applicativi passa anche attraverso la padronanza e la armoniosa integrazione di un linguaggio di scripting con un linguaggio di system programming.
Torniamo a ripetere che la distinzione indicata non la sola; quella però probabilmente più importante. Ma vediamo in che modo, all interno dei linguaggi di scripting, il Perl occupi una posizione di estremo interesse e articoliamo tale analisi in funzione dei concreti vantaggi che il Perl conferisce se correttamente impiegato in svariati settori applicativi.


Software Integrated Circuits

L intera storia della disciplina del software engineering, dai suoi albori allo stato di maturazione odierna, sempre stata contraddistinta dalla ricerca del proprio Santo Graal: i software IC, ovvero i software Integrated Circuits, termine la cui origine hardware denuncia la malcelata invidia verso i colleghi del mondo hardware per cui tali soluzioni erano disponibili. Con il termine IC, nel mondo dell elettronica digitale, si indicavano quei componenti già pronti, veri e propri building blocks che possono essere utilizzati dai progettisti per assemblare soluzioni più complesse. L uso di componenti, già testati, disponibili, di facile integrazione sono un presupposto indispensabile per disporre di processi industriali nella produzione di alcunch, dalla orologeria alla elettronica. Il software, per molto tempo, non ha avuto a disposizione nulla di analogo e ciò ha portato molti a dubitare del fatto che il software engineering possa essere considerato con buona ragione proprio una disciplina con lo statuto di engineering - termine anglosassone che purtroppo non ha un corrispettivo esatto in lingua italiana. Se dire che il Perl ha coronato questo sogno sarebbe fuori luogo, il Perl un linguaggio che ha fornito a tale problema un esempio di soluzione di notevole caratura mediante CPAN, un archivio di moduli software individuali che hanno le seguenti desiderabili caratteristiche:

Portata
La copertura degli ambiti applicativi estesissima: sono centinaia e centinaia i moduli che vanno dal calcolo di digest MD5/SHA1 alla simulazione di reti neuronali, dal supporto alla implementazione del protocollo CGI alla implementazione di interfacce verso praticamente tutti i database che sensatamente desiderabile impiegare. La comunità italiana Perl, i cui nomi forse più noti sono Aldo Dada Calpini e Mattia Barbon, ha svolto un suo ruolo generando moduli noti, apprezzati e diffusi
Robustezza
I moduli Perl sono stati utilizzati e provati in un contesto di partecipazione tipicamente open source, e quindi esibiscono sia la robustezza legata alla rimozione degli errori garantita dai relativi processi che l adattamento allo scopo legata ai meccanismi di interazione tra progettista e la comunità degli utilizzatori, secondo quanto ben descritto nell articolo: The Cathedral and the Bazaar``
Accessibilità
I moduli sono posti generalmente sotto il pubblico dominio e quindi non comportano costi, significative limitazioni nelle licenze d uso, adesione a tecnologie proprietarie
Questa caratteristica si traduce:
  • per l azienda in un misurabile e significativo risparmio di costi che non sono solamente i ben monetizzabili costi legati a uno sviluppo in proprio delle funzionalità o nell acquisto di librerie off the shelf, ma nei ben maggiori costi della non qualità in cui si incorre ineluttabilmente quando il proprio parco di tester non ha l ampiezza di quella offerta da una comunità;
  • per lo sviluppatore nella possibilità di disporre di un ampio corredo di tecnologie ben documentate e a costi zero.


Multipiattaforma

Esistono interpreti Perl per ogni concepibile piattaforma. Questo vuol dire che uno stesso script, realizzato in modo avveduto, può andare in esecuzione in qualunque ambiente, su qualunque macchina e su qualunque sistema operativo valga la pena di menzionare, pur essendo disponibili moduli che permettono di realizzare codice che, volendo, consente di trarre vantaggio dalle caratteristiche di una specifica piattaforma. In particolare, grazie al porting di Activestate su Windows, garantita la portabilità con le due più importanti e diffuse piattaforme: quelle a tecnologia Unix/Linux, su cui il Perl ha avuto origine, e quelle Windows. Nel Perl l essere multipiattaforma non si limita al solo porting del linguaggio su un sistema operativo. Vale la pena di menzionare l esistenza di un modulo Perl, noto come DBI, che un interfaccia verso i database del tutto indipendente dalla scelta del database. Ciò vuol dire che mediante questa interfaccia possibile sviluppare codice che, se ben progettato, utilizza un database Oracle e può essere portato su SQl Server, My SQL o Postgres praticamente senza modifiche. Se si tiene presente che quasi l 80 della quota del mercato IT legato ai gestionali, non si farà fatica a capire che cosa comporti questa caratteristica in una corretta ottica aziendale di mantenimento degli investimenti.


Integrazione verticale

Il Perl un linguaggio con forte integrazione verticale. Con ciò si intende dire che, a differenza per esempio di linguaggi come il C oppure il PHP, lo stesso identico linguaggio può essere utilizzato per sviluppare una applicazione gestionale, per amministrare una server farm ed contemporaneamente uno delle colonne portanti del web essendo il linguaggio di elezione per la realizzazione di script CGI. Questo fatto non può essere sottovalutato: con unico investimento per le aziende e con un solo sforzo di formazione per gli sviluppatori, possibile affrontare e risolvere con efficienza e consistentemente problemi originati in contesti estremamente diversi che richiederebbero l impiego di tecnologie diverse con la ovvia addizione dei costi relativi alla loro acquisizione e la loro integrazione. Ma non solo. L integrazione verticale fornita dal Perl non confinata nella sola dimensione del settore applicativo, bensì si articola nella architettura dei sistemi. Il Perl mette infatti a disposizione meccanismi molto efficaci sia per importare codice sviluppato in altri linguaggi, per esempio il C, che di esportare se stesso verso altri linguaggi. Ciò fa si che in un progetto che trae beneficio dalle caratteristiche del Perl possibile realizzare segmenti di codice che richiedono elevata efficienza in C, integrarli nella applicazioni e confinarne le difficoltà relative in sezioni critiche del progetto; che sia possibile esportare in una applicazione sviluppata in C funzionalità per cui il Perl risulta estremamente efficace; o anche che sia possibile realizzare in ambiente Windows un componente COM che da queste funzionalità tragga beneficio.


Metafore

Elemento essenziale di ogni sviluppo software il processo di astrazione rispetto al problema che si deve risolvere. Per astrazione non si intende il un processo di allontanamento dalla realtà o dalla pratica, bensì un processo di modellazione intelligente in cui si identificano elementi e relazioni realmente costitutivi di un problema o di una soluzione in funzione dello scopo che ci si prefigge e si trascura quanto irrilevante. L astrazione necessita di strumenti concreti su cui poggiarsi, ovvero necessita dei building blocks necessari per l articolazione e la costruzione di un modello. La ricchezza e la potenza delle metafore messe a disposizione definisce l orizzonte di ciò che facile fare e, a volte, di ciò che possibile fare tout court. Il Perl dispone di un insieme di astrazioni e strumenti nativi che agevolano in modo sostanziale questo processo di astrazione consentendo la realizzazione di soluzioni che sono semplici ed efficaci proprio in virtù delle qualità degli strumenti su cui poggiano. Vale la pena di citare alcuni di questi strumenti, tra i tanti disponibili:

Hash
Le hash, dette altrove memorie associative o dizionari dei dati, probabilmente note, a molti, implementano un meccanismo di accesso a liste di dati di grande interesse ed estrema utilità pratica. E possibile sovrasemplificarne la definizione dicendo che le hash sono strutture dati che consentono di associare a ogni individuo di una collezione di dati una chiave testuale che ne rende possibile l accesso. Le hash vengono spesso presentate come dei vettori in cui l accesso agli elementi avviene mediante una stringa invece che con un numero. Questo si rivela effettivamente un understatement se si adotta un punto di vista più formale e si colgono in pieno le conseguenze di un meccanismo di accesso a liste dati che non impone un inerente ordinamento come avviene per i vettori: la differenza rilevante anche in una ottica algebrica e in sostanza consente, di fatto, di rendere banali tute le operazioni insiemistiche sui dati.
Espressioni Regolari
Le espressioni regolari sono un formidabile strumento concettuale e pratico il cui supporto in Perl semplicemente imbattibile. Le espressioni regolari trovano la loro origine in un settore teoricamente fondante della Computer Science ma che, praticamente, mette a disposizione uno strumento di cui ben difficile sottostimare l efficacia soprattutto nel contesto in cui il Perl eccelle, ovvero il trattamento di testi. Ora, il punto reale che le espressioni regolari, o RE, non sono semplicemente uno strumento, bensì un modo di pensare. La disponibilità della relativa metafora, su cui non spenderemo molte parole perch si tratta di concetti che non si possono liquidare in poche righe, mette in condizione di abbattere la complessità di intere classi di problemi, come per esempio la validazione di codici o la definizione di specifiche formali, esattamente come la disponibilità di un sistema di notazione posizionale rende semplici moltiplicazioni e divisioni che a suo tempo erano fuori dalla portata dei comuni mortali.
Supporto sia per programmazione funzionale che per programmazione a oggetti
Questa flessibilità non un fatto astratto, bensì una flessibilità che consente di scegliere il proprio paradigma e il livello di astrazione desiderato in modo non rigido, bensì adattato alla natura concreta del problema che si intende risolvere. Aspetto essenziale delle qualità del linguaggio legata al fatto che possibile combinare in modo complesso le strutture dati con cui si realizzano appropriate astrazioni con innesti arbitrari e con la massima semplicità in quanto la allocazione, disallocazione e il mantenimento di tali strutture dati effettuata dall interprete e non richiede altra attenzione da parte del programmatore che una elementare forma di diligenza. Ovvero, riassumendo il concetto con uno slogan, complessità a costo zero: si possono creare strutture dati la cui complessità non limitata dal costo delle realizzazione del codice che serve a mantenerle bensì dalla loro capacità di modellare adeguatamente il problema sotto esame.

Efficienza nel trattamento di dati testuali
L efficienza del Perl quando si tratta di gestione di dati testuali non contestabile e l intenzionalità di tale efficienza codificata nello stesso nome: Pratical Extraction and Reporting Language. Si tenga presente che il dato testuale non , in tutta ovvietà, il semplice file di testo: gestire bene ed economicamente dati testuale significa sostanzialmente disporre di tecnologie abilitanti per internet, in quanto i relativi protocolli trattano prevalentemente dati testuali; ma significa anche XML, oppure capacità di trattare sorgenti in C. Ovvero, l efficacia nativa del Perl per questi scopi attestata nelle raccomandazione W3C relativa al linguaggio XML - può essere erogata non solamente su quelle che sono le tecnologie di frontiera ma negli stessi processi di creazione del codice. Ciò vuol dire che anche laddove si sviluppa codice a basso livello per che so generare i meccanismi di stabilizzazione di un satellite quando si muove un braccio munito di antenna, una professionalità dotata di buona fluenza in Perl può facilmente implementare a basso costo meccanismi funzionali a una politica della qualità nella produzione di codice che sono in tutta evidenza vantaggi competitivi. Tali meccanismi possono comprendere ma non sono limitati a economici script di verifica di adesione a standard nella codifica, implementazione di metriche funzionali a processi di software engineering, implementazione di processi automatici a supporto di meccanismi di configuration management, implementazione di meccanismi test a white box il tutto nel medesimo linguaggio con cui possibile realizzare un sistema gestionale multipiattaforma che impiega un qualunque database con una interfaccia grafica portabile da Xwindows a Windows.


Apprendimento

Un ulteriore aspetto di interesse del Perl la sua caratteristica learning curve. Il Perl un linguaggio che consente a sviluppatori smaliziati di scrivere codice contraddistinto da notevoli sottigliezze e, insieme, allo sviluppatore alle prime armi di essere immediatamente produttivo utilizzando un sottoinsieme del linguaggio che pur rudimentale consente di realizzare applicazioni full fledged.
Questo aspetto particolarmente importante in un contesto dove i costi della adozione delle tecnologie sono in buona parte legati ai costi delle risorse umane.
Si tenga inoltre presente che il Perl giunge con una documentazione completamente gratuita di migliaia di pagine che viene integrata da una offerta editoriale di manuali e testi (a pagamento, naturalmente) che sta crescendo continuamente in ampiezza e qualità.


Conclusioni

In conclusione, in un contesto dove i costi del software sono fondamentalmente i costi delle risorse umane, l efficienza dello sviluppatore, tranne in settori applicativi con particolari caratteristiche mission critical (particolari nel senso che esistono sistemi mission critical realizzati in Perl, ad esempio sistemi bancari e finanziari) un importantissimo vantaggio competitivo sia per l azienda che per lo sviluppatore che possono entrambi ridurre i propri costi e aumentare la griglia di soluzioni che si in grado di offrire. Ciò ampiamente dimostrato dall ampiezza della adozione del Perl nell Europa e negli USA e dalla quantità di materiale pubblicato in lingua inglese. Particolarmente nella realtà italiana in cui l industria del software ha caratteristiche peculiari e in presenza di un ampia classe di piccole e medie imprese meno interessate ad investimenti a lungo termine e più interessate ai ritorni immediati, il Perl una opportunità che aspetta ancora di essere identificata e colta. La comunità italiana degli sviluppatori Perl convinta della concretezza di questa affermazione e si sta impegnando perch questa possa venir verificata nei fatti.