Che cosa significava James Gosling quando ha detto che C # è Java senza affidabilità, produttività e sicurezza? [chiuso]

1

Gosling ha detto che "[C # è] una specie di Java con affidabilità, produttività e sicurezza cancellati". (da Wikipedia )

    
posta R S 25.08.2016 - 00:25
fonte

1 risposta

5

C # incorpora funzionalità "non sicure" che consentono la manipolazione del puntatore. La piattaforma sottostante di C #, CLR / CLI (bytecode .NET), doveva essere un po 'più indipendente dalla lingua rispetto a Java (e al codice byte di Java). .NET supportava, ad esempio, quello che veniva chiamato Managed C ++ (ho la T-shirt!), Anche se non è mai stato preso in considerazione. Managed C ++ ha supportato oggetti gestiti e non gestiti.

Le funzionalità non protette di

C # consentono la manipolazione del puntatore e, quindi, riducono l'affidabilità e la sicurezza poiché queste estensioni non sono sicure.

Tuttavia, le funzionalità non sicure sono estremamente utili. Ad esempio, è possibile memorizzare i file della mappa e accedere al contenuto mappato ai file senza copiare costantemente i bit del file mappato in altri oggetti sicuri per tipo (evitando sia la copia che la generazione di rifiuti inutili).

Inoltre, le funzionalità "non sicure" sono ben contenute. Per uno, puoi dichiarare se il tuo programma vuole consentire qualsiasi funzionalità non sicura. Per un altro, se si sceglie di consentire loro, quindi è possibile individuare in modo chiaro dove vengono utilizzate le funzioni non sicure (tramite la parola chiave unsafe )!

(Nota: il nuovo linguaggio Rust ha anche una capacità non sicura altrettanto ben contenuta.)

Tuttavia, l'uso indisciplinato di non sicuri può atterrare nello stesso territorio di C o (vero) C ++, con arresti anomali molto ritardati dopo una sequenza di codice buggata. Penso che Gosling dicesse che se permetti il codice non sicuro, allora l'intero programma è sospetto, forse perfino l'intera lingua: e non è errato da un punto di vista logico.

Tuttavia, penso che la storia stia dimostrando che le capacità "non sicure" non sono il grosso problema di sicurezza che si presumeva fosse: che si può evitare la sicurezza, o, giudiziosamente usato per il vantaggio, proprio come invocare il codice / API nativi (che Java e C # consentono entrambi).

Sto indovinando che la parte di produttività dell'argomento proviene dai bug ritardati che si verificano quando non è consentito.

    
risposta data 25.08.2016 - 03:09
fonte

Leggi altre domande sui tag