domenica 29 maggio 2011

C-Shell: considerazioni sempre attuali?

Riporto i link a due articoli piuttosto vecchi, ma sicuramente interessanti sulle motivazioni per evitare la C-Shell come la peste.

http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

http://www.grymoire.com/Unix/CshTop10.txt

Per quello che e' la mia (fortunatamente) scarsa esperienza in csh devo ammettere che molte delle problematiche di parsing presentate sono state risolte con il tempo, tuttavia capita spesso di avere errori di sintassi che fanno abortire lo script senza alcuna indicazione utile (un numero di riga ad esempio avrebbe aiutato molto).

Consideriamo invece le ragioni di essere dietro alla C-shell. La C-Shell e' una shell di vecchio stampo, si parla del tempo della Bourne Shell. Lo scopo di questa shell era quello di avere una sintassi simile alla sintassi del linguaggio C, mentre la predominante sh aveva una sintassi differente. Francamente non so come giudicare lo scopo della C-Shell, probabilmente perche' la mia formazione informatica mi ha comunque portato a conoscere, anche se solo a livello base, differenti linguaggi. Avere quindi un interprete di comandi "simile" ad un linguaggio che conosco, seppur possa sembrare utile, non mi entusiasma piu' di tanto. Cio' che conta e' l'espressivita' del linguaggio, non la sua sintassi. La sintassi si puo' anche copiare da un libro, l'importante e' che il linguaggio permetta di fare cose complesse con poche istruzioni. Cosa che la C-Shell non consente.
A questo punto quindi secondo me due opzioni dovevano essere valutate: (i) creare una shell con sintassi identica a quella del linguaggio C oppure (ii) creare una shell con sintassi differente ma stesso potere espressivo. La C-Shell si colloca a meta' fra le due opzioni, trovando un compromesso a tratti imbarazzanti, vista la goffagine dell'interprete csh.
Sicuramente un utilizzo maggiore della csh mi permettera' di collocarla adeguatamente nel panorama del software che scrivo e gestisco, ma per ora gli script piu' complessi continuano ad essere in sh/bash.

Nessun commento: