
Non so se seguite Rob Pike su Google Plus. Dovreste. Ma se lo seguiste tutti, come fa l’ottimo al3hex questo post (vacanziero) sarebbe ridondante. Anche se dice cose che davvero non mi hanno fatto dormire.
Trovate tutto qui ma per comodità lo copio e incollo (potenza del Ctrl-C/Ctrl-V), ecco.
A lesson in shortcuts.
Long ago, as the design of the Unix file system was being worked out, the entries . and .. appeared, to make navigation easier. I’m not sure but I believe .. went in during the Version 2 rewrite, when the file system became hierarchical (it had a very different structure early on). When one typed ls, however, these files appeared, so either Ken or Dennis added a simple test to the program. It was in assembler then, but the code in question was equivalent to something like this:
if (name[0] == '.') continue;
This statement was a little shorter than what it should have been, which is
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
but hey, it was easy.Two things resulted.
First, a bad precedent was set. A lot of other lazy programmers introduced bugs by making the same simplification. Actual files beginning with periods are often skipped when they should be counted.
Second, and much worse, the idea of a “hidden” or “dot” file was created. As a consequence, more lazy programmers started dropping files into everyone’s home directory. I don’t have all that much stuff installed on the machine I’m using to type this, but my home directory has about a hundred dot files and I don’t even know what most of them are or whether they’re still needed. Every file name evaluation that goes through my home directory is slowed down by this accumulated sludge.
I’m pretty sure the concept of a hidden file was an unintended consequence. It was certainly a mistake.
How many bugs and wasted CPU cycles and instances of human frustration (not to mention bad design) have resulted from that one small shortcut about 40 years ago?
Keep that in mind next time you want to cut a corner in your code.
(For those who object that dot files serve a purpose, I don’t dispute that but counter that it’s the files that serve the purpose, not the convention for their names. They could just as easily be in $HOME/cfg or $HOME/lib, which is what we did in Plan 9, which had no dot files. Lessons can be learned.)
Mentre scrivo ci sono 1765 più-uno, 818 condivisioni e 122 commenti. E io voglio cominciare con alcune considerazioni personali.
Credo che se non si esagera i file nascosti non siano così male. Se non ci fosse quella regola ci sarebbero tanti file visibili, pensa a quei poveretti di Windows. A proposito: anticamente, quando in M$ c’era il DOS un mio collega intrippato forte del Norton Commander voleva abolire le directories, tutti i files nella home (o root, lì non si capisce bene la differenza). E prima ancora quando io avevo scoperto .. (su Unix SysV) avevo implementato cd su Prime che usava una logica completamente differente. Ricordo che un sistemista mi aveva guardato strano. Ok, fine delle rimembranze di quando il mondo era giovane.
I commenti non sono riuscito a leggerli tutti. Ma mi sono fatto l’idea che non tutti siano d’accordo con Rob. E questo è meraviglioso: riuscite a immaginare qualcosa di simile in un sito della Mela MorsicataTM? E troverete mai qualcuno della banda della Mela MorsicataTM che dica: questa cosa è quantomeno discutibile?
Poi ieri sera

ormai era stato detto tutto. Piuttosto aggiungerei una cosa: Unix prima e Linux poi ha le sue convenzioni; di alcune manco ci accorgiamo di usarle tanto siamo abituati.
A me capita di dover interagire con Windowsiani e saltano fuori problemi con i nomi dei file, non solo la distinzione maiuscolo/minuscolo ma caratteri vietati quali :, *, ? e simili. Vero che non si dovrebbero usare ma la fantasia dei niubbi è fantastica. Io, per me, non ho ancora accettato pienamente i nomi con spazi, per dirne una.
Un’altra cosa “strana” è il dover usare ./ per l’esecuzione di un eseguibile o uno script nella directory corrente. E, a proposito dell’eseguibile, provate a spiegare a un windowsiano che le estensioni non ci sono, tranne quando programmate in qualche linguaggio serio (C/C++, Fortran, Java, OK tutti). OK, colpa del linker, che però non sai nemmeno come si chiama, non lo invochi mai direttamente.
Il fatto è che “Unix is simple. It just takes a genius to understand its simplicity“. (Dennis Ritchie)

Commenti
Pardon, due cosine:
1 – Il solo carattere veramente vietato nei nomi dei file è il separatore delle directory ‘/’. Gli altri si possono tranquillamente usare, basta metterli in escape quando li usi in shell. Un mare di file che uso io son pieni di duepunti e punti di domanda. E di spazi, anche.
2 – Dover metterer ./ per eseguire un programma nella cwd è una rudimentale forma di sicurezza; per eliminarla- basta un “export PATH=.:$PATH”
Vero tutto. Per i caratteri vietati mi riferivo a Windows. La path era quella originale, senza modifiche, certo hai ragione anche lì.
Il fatto è che questa cosa del Pike non l’ho ancora digerita bene: io ho sempre pensato (e ne sono ancora convinto) che il punto iniziale sia cosa buona e giusta. Ma lui c’era, allora… e allora… -> OK, panico!
Trackback
[...] cosa mi è scappato. Con le olimpiadi, i temporali, Curiosity (domani mattina all’alba) e Rob Pike ecco cosa ho visto nel [...]