Si oui, où et pourquoi l'utiliseriez-vous?
Si non, veuillez expliquer pourquoi C n'est pas acceptable pour vous.
Si oui, où et pourquoi l'utiliseriez-vous?
Si non, veuillez expliquer pourquoi C n'est pas acceptable pour vous.
Réponses:
J'utiliserais C si j'implémentais des pilotes de matériel. Et j'utiliserais C si j'implémente mon propre noyau de système d'exploitation ou ma propre machine virtuelle.
C'est un très bon langage pour faire des choses de bas niveau si vous devez gérer du matériel ou des API de bas niveau pour les API Windows, Linux, Mac OS X, Solaris et ainsi de suite ... Les systèmes embarqués ont généralement un bon support pour C avec un compilateur + kit de développement.
Oui bien sûr. J'utiliserais C pour écrire des éléments critiques du système ou des éléments de communication de bas niveau. Par exemple, j'utiliserais C pour écrire des NIF dans le projet Erlang simplement parce que c'est le bon outil (tm) pour ce genre de travail. Ou j'utiliserais C pour écrire des parties similaires (XS) dans le projet Perl.
J'utilise C professionnellement, presque tous les jours. En fait, C est la langue de plus haut niveau dans laquelle je programme régulièrement.
Lorsque j'utilise C: j'écris du code de bibliothèque de bas niveau qui doit être aussi efficace que possible. Mon code de colle est écrit en C, les boucles de calcul internes sont écrites en assembleur.
Pourquoi j'utilise C: Il est beaucoup plus simple de gérer des structures d'arguments complexes et des conditions d'erreur que dans l'assemblage, et les frais généraux de performance pour ce type de vérification de condition avant de commencer le calcul réel sont souvent négligeables. Parce que C est un langage simple et bien spécifié, j'ai du mal à travailler avec l'équipe de compilation au travail pour améliorer la génération de code chaque fois que je vois du code compilé avec des risques de performances inacceptables.
La portabilité est une autre grande vertu de C. Mon code de colle est partagé entre plusieurs implémentations spécifiques au matériel des bibliothèques sur lesquelles je travaille, ce qui simplifie vraiment la prise en charge de nouvelles plates-formes. La plupart des plates-formes n'ont pas de machine virtuelle ou d'interprète pour la saveur linguistique du mois. Certaines plateformes n'ont pas un bon compilateur C ++. Il y a très peu de plates-formes qui ne disposent pas d'un compilateur C utilisable (et, comme j'ai une bonne relation de travail avec notre équipe de compilateurs, je n'ai généralement pas de mal à obtenir le support dont j'ai besoin).
Oui, j'utiliserais C dans un système embarqué fortement limité en ressources. Je peux utiliser C ++ à la place, car il facilite la promotion d'interfaces solides entre les composants logiciels, mais uniquement si tous les ingénieurs travaillant sur le projet comprennent que C ++ est facile à utiliser à mauvais escient, ce qui entraîne un gonflement de la taille du code (les fonctions virtuelles et les modèles sont des exemples de choses à éviter. ).
J'ai également vu un programmeur C ++ essayer de créer un objet 10K sur une pile 1K, ce n'est pas une bonne idée.
virtual
fonctions sont correctes car elles suivent le principe «vous ne payez pas pour ce que vous n'utilisez pas», mais dans un environnement contraint en mémoire, vous pouvez désactiver les exceptions et RTTI.
Je travaille principalement avec l'hyperviseur Xen, les bibliothèques assorties qu'il propose et le noyau Linux. À l'occasion, je dois écrire un pilote de périphérique (ou en réécrire un pour que les machines virtuelles nxx puissent partager un seul périphérique tel qu'un HRNG). C est ma langue principale et j'en suis très content.
Vais-je essayer d'écrire un tableur en l'utilisant? En aucune façon. Chaque outil a ses applications, et je suis heureux d'avoir de nombreux outils.
J'adore C, mais je n'essaie pas de marteler les vis avec un marteau.
Si C est un choix judicieux pour un nouveau projet, bien sûr. Sinon, je vais utiliser autre chose.
Je le ferais pour certains projets. Je le ferais certainement si je devais mettre en œuvre un système embarqué, par exemple pour le contrôleur d'un avion autonome. Pourrait même aller à un niveau inférieur sur certaines pièces avec assemblage.
Si cela correspond au projet, je n'ai aucun problème avec cela.
Si vous souhaitez développer une application Web, hmm, probablement pas (ou j'aurais besoin d'une justification très solide et étayée par des faits).
Je l'utiliserais également à partir d'autres projets principalement développés avec d'autres langages lorsqu'un goulot d'étranglement a été clairement identifié et qu'une optimisation peut être implémentée en utilisant du code natif. Par exemple, une solution Java qui doit effectuer des calculs intensifs pour certains rendus avancés (par exemple, un moteur de rendu ou quelque chose). Vous pouvez utiliser par défaut une implémentation Java si ce n'est pas une plate-forme prise en charge, mais fournir une implémentation compilée en natif à partir de C pour certaines plates-formes prises en charge, et obtenir une belle amélioration des performances.
Chaque langue a un créneau d'utilisation décent. Je me retrouve souvent à implémenter des choses dans des langages de niveau supérieur, puis à les réduire progressivement en C-land si j'ai besoin qu'elles soient plus performantes ou même simplement plus portables. Il existe des compilateurs C pour presque tout ce qui existe, et si vous écrivez dans une API qui est universellement disponible (comme POSIX), cela peut être très utile.
Ce que je dis souvent aux gens qui souhaitent apprendre la programmation aujourd'hui, c'est de m'assurer qu'à un moment donné, ils apprennent le C et se familiarisent avec. Vous pourriez vous retrouver dans des circonstances où vous en avez besoin. À plusieurs reprises, j'ai dû compiler un petit programme de «redémarrage rapide» lié statiquement et utiliser scp pour le placer sur un disque RAM sur un serveur où le sous-système de disque a complètement disparu. (Serveurs bon marché et bon marché, pas de redondance en ligne et seule la possibilité de charger un petit programme? C est la voie à suivre.)
De plus, apprendre à travailler en C sans se tirer une balle dans le pied peut contribuer considérablement à sa capacité à écrire efficacement dans d'autres langues et dans un autre environnement. C'est du moins mon expérience.
Bien que je ne l'utilise certainement pas pour tout, ni même pour la plupart des choses, il a sa place et il est à peu près universel: alors oui, je l'ai utilisé dans le passé et je l'utiliserai à l'avenir (même si je ne le fais pas savoir quand pour le moment).
Oui, je le fais tout le temps.
Si vous n'appelez aucune bibliothèque, le code généré à partir de C ne nécessite aucune prise en charge du système d'exploitation. Il vous donne également un contrôle précis sur le langage machine généré. Il est donc idéal pour écrire des pilotes ou d'autres codes qui vivent dans les espaces du noyau, et d'autres situations contraintes comme de nombreux types de systèmes embarqués fonctionnent. C'est également la langue principale des projets open source avec lesquels je travaille comme X Windows, GTK + et Clutter.
Alors que vous pouvez tout faire en C, vous pouvez en C ++, souvent les mécanismes de C ++ permettent d'écrire du code plus rapidement et plus facilement. J'adore la POO et la façon dont les classes C ++ encapsulent les fonctionnalités, et j'aime RAII. Une utilisation prudente de l'appel automatique du destructeur lorsqu'un objet sort du cadre élimine la plupart des fuites de mémoire et de ressources qui sont le fléau de la programmation C. Le STL est essentiellement une bibliothèque géante d'algorithmes et de structures de données hautement optimisés; si vous vouliez les utiliser de C, vous devriez les écrire vous-même ou les acheter quelque part.
Malheureusement, pour des raisons que je ne comprends pas, le système d'exécution sous Linux nécessite une bibliothèque d'objets partagés spéciale (équivalente à DLL sur Windows, dylib sur Mac) pour exécuter n'importe quel C ++, et il n'est pas trouvé lorsque vous exécutez un programme C. Je ne peux donc pas faire l'une de mes astuces Mac et Windows préférées, qui est d'écrire un objet partagé basé sur C ++ avec une API basée sur C et de l'appeler à partir d'un programme C.
Voici donc mon processus décisionnel:
Une bonne chose est que, parce que C ++ peut compiler C, si vous avez vraiment besoin d'un contrôle précis sur le code généré pour une situation particulière, vous pouvez simplement écrire C pour cela, et C ++ pour le reste, et compiler le tout avec le compilateur C ++ .
s'il doit être à la fois
alors j'utilise C. Peut-être C ++.
Oui, en fait je l'ai fait récemment!
J'aime la programmation en C. Je fais la plupart de ma programmation en python, mais il y a des moments où j'ai besoin de code rapide et j'apprécie vraiment l'élégance qui vient de la simplicité du langage.
Le projet sur lequel je travaille maintenant est une base de données qui, comme vous pouvez l'imaginer, est critique en termes de performances. Pour le moment, j'utilise C et du python, mais ce sera finalement principalement, sinon entièrement C.
Oui. J'ai passé la majeure partie de ma carrière à programmer du C ++, mais maintenant j'écris la plupart de mon code en Ruby et si j'ai besoin de performances ou d'un accès à des trucs de bas niveau, j'écris une extension C. C'est le futur homme!
J'utiliserais C si j'écrivais un système d'exploitation. Étant donné que cela ne se produira pas dans les vingt prochaines années, à moins que je frappe au loto et que je n'ai rien d'autre à faire que de créer ma propre distribution Linux, je vais probablement m'en tenir à C #, Java, Python, etc., etc. 'ai pas utilisé C depuis très longtemps mais j'ai toujours aimé l'utiliser; Je pense cependant que ces jours-ci, ma tête est tellement enroulée autour de OO si je dois y revenir, il me faudrait un peu pour recommencer.
Le C ++ est portable sur toutes les plates-formes et les appareils embarqués comme les microcontrôleurs. (C ++ peut être compilé en C, donc des microcontrôleurs.)
C est même portable (en tant que fonctions étrangères) dans d'autres langues. Par conséquent, si je programme des bibliothèques de bas niveau, je veux plus de compatibilité que C ++.
Haskell est portable sur toutes les plateformes (ARM arrive bientôt) mais PAS sur les appareils embarqués comme les microcontrôleurs. Sa vitesse est comparable à C et C ++; mais parce qu'il est fonctionnel, il utilise un garbage collector au lieu d'une runtime-stack, donc il peut être plus rapide et plus lent que C à différents moments (garbage collection) et dans différentes situations (continuations au lieu d'appels de sous-routine).
Je choisis le langage le plus abstrait possible, car la vitesse du programme ne diffère pas mais le temps de développement et le taux de bogues. C et C ++ diffèrent beaucoup, mais pas du point de vue de Haskell.
Je ne préfère pas d'autres langues, même si je connais bien une ou deux mains. … Sauf dans quelques cas, eh bien, bash .
Les systèmes embarqués n'ont souvent que quelques kilo-octets de RAM et peut-être quelques dizaines de kilo-octets de flash, avec une fréquence d'horloge du processeur de quelques MHz. C est la seule option qui a du sens dans un tel environnement de métal nu.