Se sì, dove e perché vorresti utilizzarlo?
Se no, ti preghiamo di fornire una spiegazione del motivo per cui C non è accettabile per te.
Se sì, dove e perché vorresti utilizzarlo?
Se no, ti preghiamo di fornire una spiegazione del motivo per cui C non è accettabile per te.
Userei C se implementassi alcuni driver harware. E vorrei usare C se implemento il mio kernel del sistema operativo o la mia macchina virtuale.
È un ottimo linguaggio per fare cose di basso livello se si ha a che fare con hardware o API SO di basso livello per API Windows, Linux, Mac OS X, Solaris e così via ... I sistemi embedded di solito sono buoni supporto per C con un compilatore + kit di sviluppo.
Sì, certo. Vorrei usare C per scrivere parti critiche del sistema o parti di comunicazione di basso livello. Ad esempio, userei C per scrivere NIF nel progetto Erlang solo perché è lo strumento giusto (tm) per questo tipo di lavoro. Oppure userei C per scrivere parti simili (XS) nel progetto Perl.
Uso C professionalmente, quasi ogni giorno. In realtà, C è il linguaggio di livello più alto in cui programma regolarmente.
Dove utilizzo C: scrivo codice di libreria di basso livello che ha l'esigenza di essere il più efficiente possibile. Il mio codice collante è scritto in C, i cicli computazionali interni sono scritti in assembly.
Perché uso C: È molto più semplice gestire strutture di argomenti e condizioni di errore complesse rispetto all'assembly e l'overhead delle prestazioni per quel tipo di controllo delle condizioni prima dell'avvio del calcolo reale è spesso trascurabile . Poiché C è un linguaggio semplice e ben specificato, ho un tempo facile a lavorare con il team del compilatore al lavoro per migliorare la generazione del codice ogni volta che vedo codice compilato con rischi di prestazioni inaccettabili.
La portabilità è un'altra grande virtù di C. Il mio codice collante è condiviso su più implementazioni specifiche dell'hardware delle librerie su cui lavoro, il che semplifica davvero il supporto per le nuove piattaforme. La maggior parte delle piattaforme non ha una macchina virtuale o un interprete per il sapore della lingua del mese. Alcune piattaforme non hanno un buon compilatore C ++. Ci sono poche piattaforme che mancano di un compilatore C utilizzabile (e, dal momento che ho un buon rapporto di lavoro con il nostro team di compilatori, di solito non ho difficoltà a ottenere il supporto di cui ho bisogno).
Sì, userei C in un sistema embedded severamente basato sulle risorse. Io posso usare C ++ invece perché facilita la promozione di forti interfacce tra componenti software, ma solo se tutti gli ingegneri che lavorano al progetto capiscono che C ++ è facile da abusare e porta a dimensioni del codice ingombranti (funzioni virtuali e i modelli sono esempi di cose da evitare).
Ho visto anche un programmatore C ++ che cercava di creare un oggetto 10K su uno stack 1K, non una buona idea.
Lavoro principalmente con l'hypervisor Xen, con le librerie assortite e il kernel Linux. A volte, devo scrivere un driver di periferica (o riscriverne uno in modo che le macchine virtuali nxx possano condividere un singolo dispositivo come un HRNG). C è la mia lingua principale e ne sono abbastanza felice.
Potrei provare a scrivere un programma per fogli elettronici che lo utilizza? Non c'è modo. Ogni strumento ha le sue applicazioni e sono felice di avere molti strumenti.
Adoro C, ma non provo a battere le viti con un martello.
Se C è una scelta sensata per un nuovo progetto, certo. In caso contrario, userò qualcos'altro.
Vorrei per alcuni progetti. Sicuramente, se dovessi implementare un sistema embedded, diciamo per un controllore di un aereo autonomo. Potrebbe persino andare al livello più basso su alcune parti con assemblaggio.
Se si adatta al progetto, non ho alcun problema con esso.
Se vuoi sviluppare un'applicazione web, hmm, probabilmente no (o dovrei vedere una giustificazione molto strong e supportata da fatti).
Vorrei usarlo anche da altri progetti sviluppati principalmente con altri linguaggi quando un collo di bottiglia è stato chiaramente identificato e un'ottimizzazione può essere implementata usando il codice nativo. Ad esempio, una soluzione Java che deve eseguire calcoli intensivi per alcuni rendering avanzati (ad esempio, un motore di rendering o qualcosa del genere). È possibile impostare l'implementazione Java in modo predefinito se non è una piattaforma supportata, ma fornire un'implementazione compilata in modo nativo da C per alcune piattaforme supportate e ottenere un buon incremento delle prestazioni.
Ogni singola lingua là fuori ha una nicchia di utilizzo decente. Spesso mi trovo a implementare le cose nei linguaggi di livello superiore e poi a ridurle gradualmente a C-land se ho bisogno che siano più performanti o semplicemente più portatili. Esistono compilatori C per quasi tutto ciò che esiste e se si scrive su un'API che è universalmente disponibile (come POSIX), può essere molto utile.
Quello che spesso dico alle persone interessate a imparare a programmare oggi è assicurarci che al punto alcuni , imparino C e si sentano a loro agio con esso. Potresti trovarti in circostanze in cui ne hai bisogno. In più di un'occasione, ho dovuto compilare un piccolo programma "riavvio rapido" collegato staticamente e usare scp per metterlo su un disco RAM su un server in cui il sottosistema del disco andava via completamente. (Server economici, economici, nessuna ridondanza online e solo la possibilità di caricare un piccolo programma? C è la strada da percorrere.)
Inoltre, imparare a lavorare in C senza spararti ai piedi può contribuire in modo significativo alla capacità di scrivere in modo efficiente in altri linguaggi e in altri ambienti. Almeno, questa è stata la mia esperienza.
Anche se di certo non lo uso per tutto, o anche per molte cose, ha il suo posto ed è praticamente universale: quindi sì, l'ho usato in passato e lo userò in futuro (anche se io non so quando al momento).
Sì, lo faccio sempre.
Se non si chiamano librerie, il codice generato da C non richiede il supporto del sistema operativo. Ti dà anche un controllo preciso sul linguaggio macchina generato. Quindi è ottimo per scrivere driver o altro codice che risiede negli spazi del kernel e altre situazioni vincolate come funzionano molti tipi di sistemi embedded. È anche la lingua principale per progetti open-source con cui lavoro come X Windows, GTK + e Clutter.
Mentre puoi fare tutto in C puoi farlo in C ++, spesso i meccanismi del C ++ rendono più veloce e facile scrivere codice. Adoro OOP e il modo in cui le classi C ++ racchiudono funzionalità, e adoro RAII. L'uso attento dell'invocazione automatica del distruttore quando un oggetto esce dal campo di applicazione elimina la maggior parte delle perdite di memoria e risorse che sono la rovina della programmazione in C. L'STL è fondamentalmente una gigantesca libreria di algoritmi e strutture dati altamente ottimizzati; se volessi usarli da C, dovresti scriverli tu stesso o comprarli da qualche parte.
Sfortunatamente, per ragioni che non capisco, il sistema di runtime su Linux richiede una speciale libreria di oggetti condivisa (equivalente a DLL su Windows, dylib su Mac) per eseguire qualsiasi C ++, e non si trova quando si esegue un programma C . Quindi non posso fare uno dei miei trucchi preferiti per Mac e Windows, ovvero scrivere un oggetto condiviso basato su C ++ con un'AP basata su C e chiamarlo da un programma C.
Quindi ecco il mio processo decisionale:
Una cosa bella è che, poiché C ++ può compilare C, se hai davvero bisogno di un controllo preciso sul codice generato per una particolare situazione, puoi semplicemente scrivere C per questo, e C ++ per il resto, e compilarlo tutto con il compilatore C ++.
Sì, ma dipende dal progetto. C è molto buono per alcuni progetti di basso livello o parte della soluzione più grande.
Eg. Per logica di bus ok, ma non per l'interfaccia utente.
se deve essere entrambi
quindi uso C. Forse C ++.
Sì, infatti ho recentemente!
Mi piace programmare in C. Faccio la maggior parte della mia programmazione in python, ma ci sono momenti in cui ho bisogno di codice veloce e mi piace molto l'eleganza che deriva dalla semplicità del linguaggio.
Il progetto su cui sto lavorando ora è un database, che, come potete immaginare, è critico per le prestazioni. Al momento sto usando C e alcuni python, ma alla fine sarà prevalentemente, se non interamente C.
C è un linguaggio di basso livello e ci sono situazioni in cui C è quasi l'unica opzione che uso C per programmare microcontrollori, o mettere insieme del codice per interagire con dispositivi da porte classiche come Parallel, Serial o anche Modem!
Sì. Ho passato gran parte della mia carriera a programmare C ++, ma ora scrivo la maggior parte del mio codice in Ruby e se ho bisogno di prestazioni o accesso a cose di basso livello scrivo un'estensione C. È il futuro uomo!
Vorrei usare C se stavo scrivendo un sistema operativo. Dato che non succederà nei prossimi vent'anni, a meno che non colpisca la lotteria e non abbia altro da fare che creare la mia fantastica distro Linux, probabilmente mi limiterò a C #, Java, Python, ecc. Ecc. Ho usato C in un tempo molto lungo, ma mi è sempre piaciuto usarlo; Penso però che in questi giorni la mia testa sia così avvolta attorno a OO se dovessi tornare indietro mi ci vorrà un po 'per tornare a rotolare.
C ++ è portatile su piattaforme e dispositivi embedded come microcontrollori. (C ++ può essere compilato in C, quindi microcontrollori.)
C è persino portatile (come funzioni estranee) ad altre lingue. Pertanto, se programmi librerie di basso livello, allora voglio più compatibilità di C ++.
Haskell è portatile su più piattaforme (ARM arriverà presto) ma NON dispositivi embedded come i microcontrollori. La sua velocità è paragonabile a C e C ++; ma poiché è funzionale, utilizza un garbage-collector invece di uno stack di runtime, pertanto può essere più veloce e più lento di C in momenti diversi (raccolta di rifiuti) e in diverse situazioni (continuazioni anziché chiamate secondarie).
Scelgo il linguaggio più astratto possibile, perché la velocità del programma non differisce, ma il tempo di sviluppo e il tasso di errore. C e C ++ differiscono molto, ma non dal punto di vista di Haskell.
Non preferisco altre lingue, anche se conosco una o due mani complete. ... tranne in alcuni casi, beh, bash .
I sistemi integrati hanno spesso non più di pochi kilobyte di RAM e forse un paio di dozzine di kilobyte di flash, con una frequenza di clock del processore di pochi MHz. C è l'unica opzione che ha senso in un ambiente così spoglio.
Leggi altre domande sui tag programming-languages c