zdl-devel
[Top][All Lists]
Advanced

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

[zdl-devel] awk e cygwin


From: Gianluca Zoni
Subject: [zdl-devel] awk e cygwin
Date: Mon, 16 Mar 2015 17:42:57 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

ciao,
settimana scorsa (soprattutto ieri sera), ho apportato un enorme
potenziamento a zdl: ho messo in pratica l'idea di usare awk al
posto dell'interprete bash.

in particolare, avevo notato questo (confronto di due processi,
riporto a memoria i due comandi che avevo testato su cygwin):
1)
time for ((i=0; i<999999; i++)); do a=$i; done echo $a

2)
time awk 'BEGIN {for (i=0; i<999999; i++) {a=i}; print a}'

il primo impiegava circa 17 secondi, mentre il secondo circa 0,17
(!)

cioè CENTO VOLTE MENO!

e si trattava di un semplice loop.
Ho notato, inoltre, che inserendo "echo" o "print" nei rispettivi
loop, il primo impiegava 2 minuti e 15 secondi, mentre
il secondo arrivava a circa 1 minuto e 17-18 secondi.
Nella caso della bash, la stampa a schermo o l'assegnamento di
variabile sono più efficienti se si usano gli apici, anche quando
l'assegnamento riguarda il risultato di un'altra operazione
racchiusa in "$()".

Così mi sono messo a riscrivere le funzioni più importanti di
ZDL nel linguaggio di awk e il risultato mi sembra ottimo. La
riscrittura ha comportato ulteriori ottimizzazioni date
dall'occasione: per anni il codice è cresciuto con aggiunte
eterogenee, quindi riscrivere il codice (in un linguaggio
migliore e più chiaro) significava anche dargli una maggiore
compattezza e coerenza strutturale. 

Va inoltre osservata una cosa. 
In generale, ZDL svolge operazioni che si possono
distinguere in due classi: 
1) esecuzione e controllo di processi
2) filtraggio di dati, in modo iterativo

la prima richiede l'uso della bash, ma Awk è stato inventato
proprio per la seconda classe di operazioni, a patto che lo si
usi bene: anziché inserire piccole operazioni di awk all'interno
di cicli bash (che causerebbe iterate chiamate di fork(), non
supportate da windows ed emulate malamente da cygwin), è
opportuno scaricare ad awk gli stessi cicli completi e tutto il
possibile (evitando, inoltre, di usare "cat", "sed", "cut"
... le cui operazioni possono essere eseguite in modo migliore
con awk stesso, tutte in una sola chiamata)

Attualmente, zdl è ancora appesantito da altri cicli e da altre
inefficienze della bash su cygwin. Quindi c'è ancora molto spazio
di manovra per ulteriori giri di vite sull'efficienza.

Un'ultima nota, un po' dolente: ho un dubbio sulle maggiori
possibilità del Perl, che riguarda la velocità di cygwin nella
gestione delle schermate (si noti il loop di cui sopra, se si
inserisce "echo" o "print" nel ciclo). Usando 'emacs -nw', cioè emacs da
terminale, ho notato che cygwin è molto lento di
suo. Probabilmente, su cygwin è più facile una maggiore
efficienza con l'uso di librerie grafiche native di windows (emacs
grafico di cygwin, con quelle librerie, sembra più
scattante). E un'interfaccia web, raggiungibile con un browser
qualsiasi da un "IP:PORTA" e generata da un server-zdl in
html+javascript, potrebbe essere più pratica.

A questo proposito, al posto di Perl, sto vagliando anche le
possibilità di Guile: interpreta anche ecmascript. Si può creare
un programma con una miscela di scheme e javascript: i valori
assegnati in scheme possono essere automaticamente elaborati da
javascript e viceversa. Inoltre, guile è presente sia su
gnu/linux che su cygwin e si propone come 'linguaggio del sistema
gnu', come il collante dell'intero sistema (comunica anche con il
C e altri). Del resto, molti servizi fanno uso di funzioni
javascript che in passato ci siamo trovati a "tradurre". Con
guile non sarebbe più necessario. Si tratta di verificare se è
possibile -cosa che mi piacerebbe fare- creare un downloader in
scheme (o javascript) che possa sostituire axel, wget,
rtmpdump...

Ma, dopo le nuove trasformazioni di ZDL -che diviene anche più
efficiente su cygwin- diventa sempre meno urgente la
riprogettazione di zdl (in realtà, è già in atto dall'interno,
con l'uso di awk) e l'idea di rifare tutto con altri mezzi
sembra piuttosto introdurre un progetto tutto nuovo, che non
dovrebbe neppure chiamarsi "ZDL". Ma si tratta di un progetto che
mi interessa molto, anche se meno urgente.

bye


-- 
Z O N I N O Z
Gianluca Zoni

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



reply via email to

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