Che cosa offrono altre lingue quando si tratta di tecnologie infrastrutturali che potrebbero indicare il suo vantaggio rispetto a C in futuro?

5

Ho seguito le domande dell'intervista e ne ho visto uno che mi ha fatto fermare e pensare per un po '. Inizia con una citazione e ti chiede informazioni sulla tua interpretazione e se sei d'accordo o meno.

"For infrastructure technology, C will be hard to displace." - Dennis Ritchie

Da un po 'di lettura di fondo puoi scoprire che era la mente dietro il linguaggio C e il sistema operativo UNIX. All'epoca era un miglioramento fenomenale e all'avanguardia delle tecniche all'avanguardia. Sento che C ++ e Java stanno diventando lingue sempre più popolari, ma C sarà sempre una lingua importante.

Che cosa offrono altre lingue quando si tratta di tecnologie infrastrutturali che potrebbero indicare il suo vantaggio rispetto a C in futuro. In una nota a margine, qualcuno sa in quale anno è stata fatta questa citazione? Voglio solo le opinioni di persone che usano molto questi linguaggi, io stesso uso il linguaggio Python e mi piacerebbe imparare un po 'di più sul framework attorno a C e sulla sua importanza in prima persona.

    
posta DrKhan 12.08.2013 - 21:01
fonte

4 risposte

9

Per tutti i suoi vantaggi, C è un linguaggio non sicuro ; manca di molte delle garanzie di sicurezza che hanno altre lingue, come ad esempio:

  • Controllo dei limiti delle matrici
  • Digita sicurezza
  • Garbage collection (per evitare perdite di memoria)

Nonostante questi svantaggi, C è "più vicino al metallo", il che lo rende un linguaggio molto performante e offre garanzie prestazionali in tempo reale. Questo è il motivo per cui viene spesso utilizzato per scrivere kernel e driver di periferica, in cui le prestazioni sono davvero importanti.

In realtà, la parte più importante di un sistema operativo (è "kernel") è piuttosto piccola; può essere scritto in C, mentre la maggior parte delle altre parti del sistema operativo potrebbe essere scritta in un linguaggio più "moderno".

    
risposta data 12.08.2013 - 21:07
fonte
4

Devi comprendere perché C è utile per i sistemi di basso livello, principalmente perché offre un compromesso tra il modo in cui funziona il computer e come gli umani possono capire lo stesso. Assembler sarebbe un linguaggio di sistema migliore, se noi meatbags potessimo capirlo ed essere produttivo in esso.

Quindi la chiave è che il livello di astrazione si adatta al punto debole tra non rallentare le cose dal punto di vista del computer e tenere le cose comprensibili dalle nostre.

In linea con questo, un nuovo linguaggio ipotetico farebbe esattamente le stesse cose di C, con poche astrazioni.

Ci sono alcune cose che il compilatore o gli strumenti potrebbero aiutarci - anche se, nota alcuni strumenti come la raccolta dei rifiuti, ci sono utili e teoricamente rendono il sistema più efficiente, ma in pratica rallentano e rendono sono imprevedibili e talvolta più difficili da lavorare. Posso immaginare le aree in cui un C migliorato sarebbe RAII (adoro questo in C ++, è fantastico, il compilatore mette le tue routine di de-allocazione dove le inseriresti!), E una migliore routine di stringhe - rendendo le stringhe delimitate da null aveva senso quando la memoria era molto costosa, ma nei sistemi in cui usiamo 2 byte per carattere, questa limitazione non è più in circolazione. Avrei una stringa preceduta da una dword per la lunghezza che dovrebbe migliorare un sacco di prestazioni. Nota che non andrei oltre: nessun riferimento a classi di stringhe o qualcosa di simile, e probabilmente non farei "classi", anche se introdurrei qualche forma di mini modulo che aiuta a incapsulare il codice correlato (e generato dal compilatore routine come per RAII). Si potrebbe desiderare di avere alcune routine di localizzazione della memoria integrate, che aiutano con coerenza della cache della CPU, e forse una forma primitiva di threading - non così le persone possono abusarne generando fili e serrature volenti o nolenti, ma così devono pensare a cosa stanno facendo.

Penso che quest'ultimo aspetto sia importante in C, mentre possiamo aggiungere un carico di funzioni per semplificare la vita del programmatore, introducono tutte un sovraccarico, che viene aggravato dalle persone che creano più astrazioni usando quelle astrazioni in cui finisci con codice seriamente inefficiente, che la gente usa perché è "abbastanza veloce". Non è mai abbastanza veloce per la programmazione di sistemi di basso livello:)

    
risposta data 13.08.2013 - 10:00
fonte
4

Per le attività di infrastruttura (driver di periferica, sistemi incorporati, algoritmi di compressione, algoritmi di crittografia, funzioni del sistema operativo principale) C rimarrà imbattibile.

In queste aree la sicurezza del tipo è una seccatura che devi essere in grado di indirizzare aree arbitrarie della memoria, hai bisogno di bit di twiddle nei dati che potrebbero non essere definiti come un tipo a puntini.

Ada e assembly nativo effettivamente competono in questo spazio e sono entrambe alternative valide.

Java ecc. è completamente irrealizzabile in quanto queste funzioni di basso livello usano strutture per passare dati avanti e indietro, oltre a "camminare" lungo un buffer e faticosamente estraendo ogni elemento di dati Java non gestisce le strutture.

Il C ++ è possibile ma in realtà non conferisce abbastanza vantaggi è queste aree per giustificare il sovraccarico delle prestazioni, o il sovraccarico di "comprensione" (il linguaggio è solo complesso per la lettura casuale del codice.)

Finora l'unica lingua candidata che potrebbe competere in questo spazio è Google "Go", ma è ancora relativamente immatura e, molte aziende sarebbero nervose nel scommettere la fattoria su qualcosa di un importante concorrente.

    
risposta data 13.08.2013 - 07:24
fonte
3

C è il minimo comune denominatore e per alcune cose, principalmente incollando lingue diverse insieme, è sufficiente questo. Solo un'altra lingua con traduzione diretta all'assemblaggio potrebbe sostituirla qui. E non c'è molta richiesta in ogni caso, perché l'infrastruttura chiave è già scritta in C e nessuno vuole riscrivere solo per il gusto di usare un nuovo linguaggio.

C ++, contenente C come sottoinsieme, può essere utilizzato ovunque C, ma deve essere usato con cautela perché si deve controllare dove possono arrivare le funzioni ++ e dove no. Ancora oggi viene utilizzato per cose come la scrittura di software per microcontrollori e kernel del sistema operativo a causa della maggiore sicurezza (principalmente tramite RAII ) e le prestazioni migliorate dei template rispetto al codice C "generico" che prende i puntatori void.

D e ruggine sono due lingue scritte per avanzare sulla sicurezza pur contenendo ancora sottoinsiemi compatibili con C e consentendo l'accesso diretto non sicuro dove necessario. Vai si è escluso da questo set perché non fornisce la parte non sicura.

    
risposta data 13.08.2013 - 08:46
fonte

Leggi altre domande sui tag