Domanda

file e le directory possono avere diversi spazi dei nomi, e ancora essere utilizzati per identificare i file specifici, perché un file e directory con lo stesso nome si distinguono per essere diversi tipi di cose.

di campo e di riferimento primitivi campi potrebbero anche avere diversi spazi dei nomi (in Java), perché se un un campo di riferimento primitivo e aveva lo stesso nome, potrebbero essere identificati con l'essere diversi tipi di cose.

namespace separati sono utilizzati altrove in questo modo. Ad esempio, in Java, è possibile avere un metodo exampleName() e exampleName campo, e anche se hanno lo stesso nome, si distinguono per essere diversi tipi di cose.

È stato utile?

Soluzione

Non credo che questa sarebbe una buona idea. Immagino che le ragioni coinvolgono cose come le prestazioni e la semplicità del codice del filesystem. Se un elenco di directory doveva andare giù 2 o 3 o più percorsi differenti a seconda di quanti spazi dei nomi diversi si pensa si dovrebbe avere, questo probabilmente complicare il codice.

Inoltre, prendere in considerazione la confusione all'utente finale che potrebbero sorgere. Attualmente abbiamo una sorta di namespacing disponibile in filesystem utilizzando le estensioni dei file. Si può avere file.txt e file.dll e file.exe tutto inesistente nella stessa directory. Che cosa succede quando questi file sono presenti contemporaneamente è una questione di preoccupazione - questo è stato un metodo per gli autori di virus di utilizzare una forma di ingegneria sociale per arrivare a cliccare sul file sbagliato. Immaginate di poter confondere una directory con un file con lo stesso nome così?

Altri suggerimenti

In primo luogo, questa domanda è linguaggio specifico. Nei linguaggi OOP puri non c'è distinzione tra elementi atomici e composte. Tutto è un oggetto. Con un motivo simile in un linguaggio funzionale puro non si può avere la funzione e variabile denominata lo stesso.

In secondo luogo, se si dispone di operazioni polimorfe, non c'è modo di dire quale variabile fatto si fa riferimento. Ad esempio, non è possibile avere spazi dei nomi diversi per i file e le directory, a causa delle operazioni polimorfe, come

cp foo bar

Il cp funziona su file e dirs, e se si dispone di diversi spazi dei nomi, non c'è modo per dire che cosa volevi dire.

Le directory ei file non sono necessariamente così diversi. Sono entrambi voci nella loro directory genitore, solo con una bandiera per indicare se una voce è una directory o meno. È possibile aprire una directory e leggere proprio come se si trattasse di un file, solo che alcune altre operazioni sono possibili su IT- link simbolici funzionano allo stesso modo. (Questa descrizione è sbilanciata verso la vista del file system di Unix, ma penso che la vista DOS / Windows funziona più o meno allo stesso modo). All'interno di ogni directory, v'è un insieme di nomi dei membri, e il filesystem impone il vincolo di unicità che una directory può avere solo un membro con un determinato nome.

Pensando nomi dei metodi Java rispetto ai nomi dei campi --- torna in C, non si poteva avere una funzione globale e variabile globale con lo stesso nome, perché tutti i simboli nel file oggetto sono in un unico spazio dei nomi. Ma si potrebbe con C ++, perché una funzione "foo void ()" è stato mappato al nome del simbolo storpiato ( "foo__vv" o qualcosa del genere). Quindi non è così tanto che hanno un namespace separato, come quella la chiave nella spazio dei nomi è diverso per un campo "pippo" vs un metodo "foo ()". Dato che non è possibile ottenere gli scontri chiave, appaiono come spazi dei nomi separati, ma è che in realtà come è implementato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top