Utilizzeresti C, oggi, per un progetto software? [chiuso]

18

Se sì, dove e perché vorresti utilizzarlo?

Se no, ti preghiamo di fornire una spiegazione del motivo per cui C non è accettabile per te.

    
posta Luca Matteis 14.12.2010 - 13:40
fonte

16 risposte

38

C è un ottimo linguaggio per la programmazione di sistema

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.

    
risposta data 14.12.2010 - 14:14
fonte
17

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.

    
risposta data 14.12.2010 - 13:45
fonte
16

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).

    
risposta data 14.12.2010 - 16:56
fonte
5

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.

    
risposta data 14.12.2010 - 15:14
fonte
5

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.

    
risposta data 14.12.2010 - 15:24
fonte
4

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.

    
risposta data 14.12.2010 - 15:22
fonte
4

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).

    
risposta data 14.12.2010 - 16:58
fonte
4

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:

  1. Sto lavorando in una situazione limitata come un driver di periferica? Usa C.
  2. Sto scrivendo una libreria Linux che qualcun altro dovrà usare? Usa C.
  3. Sto lavorando all'interno di codice già scritto in C? Usa C.
  4. Sto scrivendo solo una libreria Mac o Windows o una libreria Linux? Scrivi gli interni in C ++, ma esponi solo un'interfaccia C per evitare il fragile problema dell'interfaccia binaria.
  5. Usa C ++.

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 ++.

    
risposta data 14.12.2010 - 17:48
fonte
3

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.

    
risposta data 14.12.2010 - 13:45
fonte
2

se deve essere entrambi

  • veloce e
  • portatile

quindi uso C. Forse C ++.

    
risposta data 14.12.2010 - 15:31
fonte
2

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.

    
risposta data 14.12.2010 - 19:39
fonte
2

Sì!

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!

    
risposta data 14.12.2010 - 15:37
fonte
2

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!

    
risposta data 14.12.2010 - 21:37
fonte
1

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.

    
risposta data 14.12.2010 - 20:07
fonte
0

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 .

    
risposta data 14.12.2010 - 18:50
fonte
0

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.

    
risposta data 14.12.2010 - 19:36
fonte

Leggi altre domande sui tag