Visualizza il feed RSS

Titolo provvisorio...

Sempre "LIBERO" degg'io folleggiare di gioia in gioia...

Valutazione: 2 voti, con una media del 5.00.
di pubblicato il 01-04-2009 alle 03:42 (4417 Visite)
Prendo a prestito per il titolo l'incipit di una delle più note arie cantate da Violetta Valery, la "Traviata" verdiana, e mi accorgo che - allo stesso tempo - non posso fare a meno di rievocare un commosso ricordo della straordinaria Madeline Kahn, indimenticata attrice che proprio sulle note di tale aria cantava un'irresistibile parodia che scivolava inesorabilmente su una inequivocabile rima con "gioia" sapientemente lasciata in sospeso - ovviamente in quel capolavoro assoluto che è "Frankenstein Jr." di Mel Brooks. Voglio ricordarla così, con un sorriso, in quelle scene destinate a restare vividamente scolpite nella memoria.


Si è discusso di recente di metodologie e strumenti per progettare del buon software, che risulti robusto, mantenibile, predicibile, modularizzato in maniera corretta.

Probabilmente anche il più distratto e occasionale dei programmatori conosce il significato (e i relativi listini al pubblico) di acronimi come CASE ovvero Computer Aided Software Engineering, RAD ossia Rapid Application Development, e ha senz'altro inteso parlare di UML - Unified Modeling Language. Forse è però più raro incontrare le FSM, Finite State Machines, al di fuori dei corsi accademici, sebbene la variante nota come "diagrammi di Harel" (statecharts o state transition diagrams) sia di fatto parte di UML.

Il tool del quale vogliamo parlare oggi è un classico supporto "lightweight" alla progettazione di tipo interattivo basato appunto su diagrammi di stato, denominato LIBERO.

Parliamo dunque di un RAD che supporta l'utilizzo di descrizioni tramite metodi semiformali (statecharts) e genera codice sorgente in uno dei linguaggi supportati.
A partire dal medesimo input (un semplice file di testo ASCII...), Libero è in grado di generare sorgenti ANSI C'89, C++, Perl, Rexx, ma anche awk, bash, csh, COBOL e perfino Assembly x86 !

Libero è un software rilasciato con licenza GNU GPL, caratterizzato da una lunga storia (circolava nelle BBS già attorno al 1993, se ben ricordo) e risulta potente e flessibile, sebbene lontano dai "moderni" RAD visuali, totalmente automatici, ipertrofici e rutilanti.

Anche per questo il suo valore didattico è inestimabile: incoraggia una sana artigianalità che restituisce un realistico contatto con il codice, pur risultando utilizzabile anche in contesti professionali per applicazioni C tendenzialmente di dimensioni non esorbitanti - anche embedded, su piattaforme tiny.

Inoltre il paradigm shift richiesto dalla progettazione "alla Harel" è una positiva spinta alla riflessione e, al tempo stesso, uno strumento di incomparabile potenza.

Trattandosi di un tool semiautomatico e interattivo, molta parte del codice finale rimane a carico dello sviluppatore. Nel codice generato, liberamente modificabile, sono chiaramente demarcati i punti e i files per quella che in ambiente CASE viene tradizionalmente definita iniezione del codice, ovvero i punti di personalizzazione ed inserimento del codice utente entro l'infrastruttura generata dal tool.

Il file di descrizione degli stati, per i più curiosi, ha un aspetto decisamente intuitivo:
codice:
!
!   C/C++ comment stripper dialog
!
!   Written:    95/03/30  Pieter Hintjens <ph@imatix.com>
!   Revised:    96/05/15  Frans Janssens <frans@sebb.bel.alcatel.be>
!
-source=stripper.c
-schema=lrschema.c
 
After-Init:
    (--) Ok                         -> Outside-Comment
          + Get-Char-From-Input
    (--) Error                      ->
          + Terminate-The-Program
 
Outside-Comment:
    (--) Quote                      -> Skip-Quote
          + Put-Char-To-Output
          + Get-Char-From-Input
    (--) Slash                      -> After-Slash
          + Get-Char-From-Input
    (--) Star                       -> Outside-Comment
          + Put-Char-To-Output
          + Get-Char-From-Input
    (--) NewLine                    -> Outside-Comment
          + Put-Char-To-Output
          + Get-Char-From-Input
    (--) Other                      -> Outside-Comment
          + Put-Char-To-Output
          + Get-Char-From-Input
 
...
 
Defaults:
    (--) Exception                  ->
          + Terminate-The-Program
    (--) End-Of-File                ->
          + Terminate-The-Program
(tratto dall'esempio "stripper.zip" pubblicato sul sito)

Non mi resta che invitarvi a studiare la documentazione e provare a calarvi nella forma mentis richiesta dalla progettazione totale o parziale tramite FSM, studiando con attenzione i sorgenti prodotti a seguito di semplici input. Utilizzate senza parsimonia gli esempi forniti: sono lì proprio per quello...

aggiornamento da 26-07-2009 a 01:11 di M.A.W. 1968

Categorie
Programmazione , Open Source

Commenti