zdl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[zdl-devel] riscrivere zdl!


From: Gianluca Zoni
Subject: [zdl-devel] riscrivere zdl!
Date: Thu, 6 Feb 2014 23:53:42 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

Ciao!
In una delle ultime mail dicevo che zdl ha problemi di
efficienza a causa del linguaggio adottato, evidenziati
clamorosamente dal caso di nowdownload ma si sono fatti e si
fanno sentire ancora, dopo l'introduzione delle barre di
progresso gialle e rosse (i cicli che analizzavano gli output di
axel e wget, per estrarne i dati utili per vari controlli, sono
"ingrassati" divorando nuovi array...). Così ho fatto alcune
ricerche nel web sui test usati per confrontare l'efficienza di
alcuni linguaggi di scripting: perl, python, ruby e bash (ho
scartato a priori altri linguaggi perché più difficili da gestire
per via delle dipendenze, portabilità o perché poco usati,
seppure migliori anche in termini di efficienza, come nodejs e
vari dialetti del lisp). Lo scripting bash serviva come
riferimento all'attuale zdl. Il linguaggio che ne è uscito
vincitore, rispetto a test che riguardavano soprattutto la
manipolazione di testi (è il caso di zdl) è il perl, seguito da
python, ruby e bash. Il distacco fra i linguaggi non è poco,
soprattutto fra python e ruby e fra ruby e bash.

Poco fa ho voluto fare un test traducendo in perl zdl-wise.c, il modulo
in C usato per superare l'ostacolo di nowdownload: il perl se la
cava egregiamente, sia su linux che su cygwin. Non ho cronometrato
ma il distacco è breve rispetto alla versione in
C (quest'ultima però mi fa andare al massimo il processore, cosa che
non accade con lo script in perl). Ho notato che quasi tutto il
tempo impiegato dallo script riguarda solo l'ingresso dei dati, i
quattro argomenti W.I.S.E. giganti passati allo script, cioè il
passaggio da bash a perl, mentre l'elaborazione dei dati ciclando gli
array richiede molto meno. Direi che la differenza rispetto al C
è perfino umanamente trascurabile, praticamente invisibile.

Credo che il perl sia il candidato ideale per riscrivere zdl con
un vero linguaggio di programmazione, per varie ragioni:

- l'efficienza, anche su cygwin: il comportamento sembra uguale a
  quello su linux

- portabilità, dato che non richiede neppure l'installazione
  dell'interprete, anche su cygwin (è comunque necessario usare
  cygwin su windows per Axel)

- traduzione più semplice, quasi letterale e quindi rapidissima
  (inoltre, in fase di traduzione, molte parti del programma
  potrebbero diventare più concise, eleganti e potenti)

Quando un anno e mezzo fa decisi di rifare zdl, dandogli la
struttura generale che ancora possiede, ero titubante fra bash e
python. Scelsi di continuare con bash perché mi sembrava il
linguaggio tagliato per zdl, per gestire processi di altri
programmi senza chiamare in causa dipendenze di qualche tipo. 
In effetti, da questo punto di vista, è piuttosto
conciso e dotato di strumenti esterni piuttosto potenti. Il perl
ha caratteristiche analoghe per quanto riguarda la gestione dei
processi di altri programmi e possiede al suo interno gli
strumenti esterni della bash (es: espressioni regolari). La
traduzione è semplice anche per questo: il perl eredita ed
incorpora le possibilità della bash. E anche molto di più.

Inoltre, la riscrittura del programma è l'occasione ideale per
introdurre un sistema multilingua (magari registrando i messaggi
in un hash con chiavi diverse per i valori di $LANG e $LANGUAGE)
che mi sono ripromesso di fare un sacco di volte ma ho sempre
rimandato perché noioso da fare a programma già fatto. Inoltre,
con il perl dovrebbe essere semplice anche la creazione di
interfacce grafiche, per esempio con gtk.
In ogni caso, riscrivere zdl con un linguaggio più potente
porta a un aumento significativo di possibilità future. Non
sono contrario anche a una riprogettazione globale, anche se per
ora -personalmente, a causa di miei problemi che mi costringono a
concentrarmi molto altrove- punterei a riscrivere il già fatto,
apportando qua e là qualche innovazione, se capita...

Si tratterebbe della versione successiva di zdl, dopo l'attuale
release v.1.0 (che potrebbe essere ancora scaricabile e
installabile, per chi la preferisce, ed eventualmente corretta). 

Che cosa ne pensi?

In allegato, se vuoi sperimentare, ci sono i file nowdownload.sh
e zdl-wise.pl, da inserire in /usr/local/share/zdl/extensions.
Attenzione: il file nowdownload.sh è già presente e verrebbe
sovrascritto... (sono praticamene uguali, solo che quello
allegato usa zdl-wise.pl anziché zdl-wise)

ciao!

PS: sto per riprendere in mano la faccenda della documentazione e
del progettino texi2man che da settimane ho dovuto lasciare in
sospeso.. speriamo di riuscire a terminare questo calvario :]


-- 
Z O N I N O Z
Gianluca Zoni

address@hidden
http://inventati.org/zoninoz
http://savannah.gnu.org/users/zoninoz

Attachment: zdl-perl.tar.gz
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]