Cours en langage C

Le langage C est le langage de programmation favori de beaucoup d’universités pour apprendre la programmation aux étudiants. La raison est que ce langage est un langage bas niveau, indiquant que c’est un langage qui ressemble beaucoup au langage machine d’un ordinateur. Ce qui va permettre de familiariser les étudiants à la manière dont la machine à l’intérieur fonctionne réellement. Le 2e point fort du langage C, c’est la popularité de sa syntaxe dans d’autres langages développés après lui, comme par exemple le C++, le C#, le  le PHP…etc. Son 3e point fort et sa popularité industrielle, car dans beaucoup de domaines le langage C malgré son ancienneté reste le langage dominant, ça inclut entre autres la programmation système, la programmation des systèmes embarqués ,les jeux vidéo…etc.

Cours Langage C

Ainsi, la vidéo suivante est une vidéo d’un excellent cours sur ce langage C. Cette vidéo est présentée dans le site web PortfolioCourses et dans la chaîne YouTube dédiée.  

Google Carbon, le nouveau remplaçant du langage C++

Tout le monde en parle, il n’y a pas longtemps des ingénieurs de Google ont fait l’annonce d’un nouveau langage qui pourrait remplacer le langage C++. Pour rappel, le langage C++ est un langage très reconnu, depuis très longtemps il est ancré dans la production de plusieurs types de logiciels. C’est un langage réputé pour sa robustesse et sa rapidité, il est particulièrement populaire dans des logiciels comme les systèmes d’exploitation, les gestionnaires de base de données, les moteurs de jeux vidéo, les systèmes embarqués, la commande industrielle…etc. Malheureusement comme tout autre langage, il possède quelques défauts intrinsèques à ses objectifs de performance et de rapidité, les deux principaux défauts sont, son manque de sécurité comparé aux autres langages, puisqu’il permet d’offrir un accès direct aux entrailles de la machine. Et deuxièmement, le bagage technique que le langage a accumulé à travers les années de sa longue vie, ce qui le rend charger avec des fonctionnalités qui sont devenues aujourd’hui obsolètes, mais le langage doit les conserver pour des soucis de rétrocompatibilité avec les anciennes applications. 

Justement, le langage de programmation proposé par Google nommé Carbone, propose des solutions pour ces deux problèmes mentionnés, plus d’autres améliorations qui sont inspirées des autres langages modernes. En réalité, les ingénieurs de Google, d’après leur déclaration, ne visent pas à remplacer le C++, mais plutôt de proposer une alternative plus flexible et plus sécurisée pour les besoins de la production logicielle moderne, visant même à avoir une interopérabilité bidirectionnelle avec le code du langage C++. L’annonce du langage Carbone s’est faite dans la conférence internationale du langage C++ à Toronto, Canada. Le visionnage de la présentation est disponible sur la vidéo en bas. Il est clair que le langage est encore dans la phase expérimentale, mais les ingénieurs sont suffisamment avancés pour proposer une nouvelle syntaxe pour le langage, que vous pouvez même tester à travers une démo sur le site de compilation online Compiler Explorer. L’un des points positifs du langage Carbone est d’embrasser une approche de développement open source beaucoup plus flexible que la standardisation ISO du C++, d’ailleurs le dépôt github et un serveur Discord sont déjà mis à la disposition à quiconque veut participer à son développement.

L’annonce du langage Carbone

Cours avancé sur la programmation en C++

Encore du C++ dans ce blog, le temps n’est pas encore arrivé pour explorer d’autre langage de programmation. Je viens de tomber sur une vidéo de 30 heures qui est à mon avis assez exhaustive pour couvrir l’essentiel du langage C++, il ne faut pas oublier que le C++ est un langage relativement ancien, proche maintenant des quarante années d’existence. qui a évolué au fil du temps et il est devenu de plus en plus massif et très varié. Malgré que la vidéo est de bonne qualité, mais j’ai toujours une préférence pour les livres concernant des matières complexes comme le langage C++, un livre a toujours plus de ressources pour expliquer les choses en profondeur et en détail.

Cours en C++

Personnellement, je n’ai pas eu jusqu’à maintenant le temps de voir la vidéo, j’ai juste fait un parcours sur les éléments abordés dans la vidéo, mais malgré que j’ai dans le passé beaucoup travaillé avec le C++, le C++ moderne nommé dans la vidéo C++20 est relativement différent de l’ancien C++98 d’il y a vingt ans, beaucoup de mécanismes importants ont été rajoutées au langage. Une bonne mise à jour est sans doute indispensable pour des anciens programmeurs de C++ comme moi pour pouvoir savourer ce langage à nouveau.

Mini projets en C et en C++

La réalisation des projets est très importante tout au long du curcus de l’étudiant, et ça lui permet de améliorer ses compétences en programmation. Dans cet article je vais essayer de répertorier un ensemble de projet en langage C et C++ que j’ai pu récupérer sur un site du nom de www.CodeWithC.com, le site liste plus d’une cinquantaine de projet en C et C++. La liste en bas retient que la liste des projets les plus faciles pour débuter.

La liste en bas est celle des projets les plus communs en C et en C++ :

Projets en C :

Projets en C++ :

Le père des livres du langage C

La perspective d’un étudiant pour le langage C, en tout cas c’était le cas pour moi lorsque j’étais étudiant, c’est que c’est un langage différent très puissant, dans le sens où il contient des mécanismes qui ouvrent la porte sur d’innombrables possibilités, comme par exemple la dualité pointeur/tableau, ou-bien la structuration de la boucle for, les unions, les pointeurs de fonctions, le nombre variable d’arguments dans les fonctions…etc. C’était des mécanismes certes parfois difficiles à apprendre mais le potentiel acquit met le langage à des années-lumières des autres langages qu’on étudiais à la même époque en algorithmique, comme le Pascal et le Basic. J’étais toujours intrigué par l’ingéniosité des développeurs de ce langage, et la réalité comme vous allez le voir sur la vidéo en bas, c’est que le langage historiquement a passé par différentes étapes, de réussite et d’échec dans les locaux de la compagnie de recherche Bell Labs, et avec le temps le langage petit à petit a mûri et devenu ce qu’on connaît maintenant comme le langage C.

The C Programming Language – le livre

La personne sur la vidéo s’appelle Brian Kernighan, c’est le coauteur du livre en question pour cet article, mais avant d’en parler du livre il vaut mieux revoir un peu l’historique du langage C. Alors ce langage était développé par Dennis Ritchie quand il était dans les laboratoires de Bell Labs dans le but de développer avec Ken Thompson le système d’exploitation UNIX, et le rendre portable sur plusieurs machines dont le PDP11, le langage C et le système d’exploitation UNIX auront une grande influence après respectivement sur les langages de programmation et les systèmes d’exploitation. Le langage C comme mentionné préalablement, n’a pas était inventé du néant, on peut tracer sommairement son évolution en commençant par le langage CPL, suivi par BCPL, ensuite du langage B, et finalement le langage C.

The-C-Programming-Language-First-Edition

Le livre en question est appelé The C Programming Language écrit conjointement avec Brian Kernighan, la personne interviewée sur la vidéo, et Dennis Ritchie le développeur du langage C, le livre est parfois nommé K&R d’après les initiales des noms des deux auteurs. Ce livre a été pour très longtemps un best-seller et jusqu’à maintenant ça reste un livre intéressent pour apprendre le langage C, la plupart des livres en C qui ont suivi se sont fortement inspirés de lui, moi personnellement j’ai appris le C sur deux livres en français qui sont quasiment identiques dans leurs structures à original K&R. La bonne nouvelle c’est que le livre par son âge (première édition en 1978) est tombé dans le domaine public et il est devenu accessible gratuitement sur internet, d’ailleurs je vous ai mis juste en haut la version PDF à lire sur le site, il y a aussi la version sur les archives d’internet.

Construire son propre compilateur C

Ça fait un bout de moment maintenant que je travaille sur la conception et construction des processeurs, que ça soit dans le domaine de la recherche ou dans le domaine académique, voici le dépôt GitHub pour tous les processeurs construits jusqu’à maintenant, la plupart sont des processeurs minimalistes éducatifs, sauf peut-être le 6502 qui lui est une implémentation d’un processeur réel, et le Megatron qui est l’implémentation d’une machine réelle. Dans la plupart des cas la programmation sur ces processeurs se fait en langage machine, ça veut dire en binaire, néanmoins quelques-uns ont le privilège d’avoir un assembleur dédié, la création d’un assembleur pour un processeur donnée est trivial et très simple, elle est réalisée à l’aide d’un outil qui simplifie énormément le travail de construction d’un assembleur personnalisé, le nom de l’outil est CustomAsm, il permet de créer un assembleur pour la majeure partie des processeurs actuels, il suffit pour le faire de remplir un fichier de spécification du langage machine et de mettre en correspondance les nouvelles instructions assembleurs à créer.

Mais jusqu’à maintenant je n’ai jamais eu l’opportunité de dépasser cette étape, et passer à l’étape suivante et créer un compilateur distinct pour un processeur donné, la raison est que je n’ai pas trouvé jusque-là une méthode directe et simple pour le faire, crée un compilateur personnalisé n’est pas une simple tâche, ça doit demander beaucoup d’énergie et beaucoup de connaissances théoriques qui ne sont pas si simples. Heureusement à force de chercher et un peu de chance je crois avoir trouvé une solution qui semble relativement gérable, c’est justement un projet fait par une personne avec les mêmes objectifs, créer un compilateur C personnalisé et simplifié pour une architecture matérielle donnée. Le projet semble de difficulté moyenne, disons une estimation entre 5000 et 10000 lignes de code, peut-être plus, c’est très bien documenté, et c’est surtout plus orienté pratique que théorique. Le langage C implémenté n’est pas le langage C complet, mais un sous-ensemble de ce dernier, ça reste quand même d’après l’auteur un compilateur robuste puisqu’il appartient à la catégorie des compilateurs capables de compiler eux-mêmes.

Livre sur l’infographie

L’infographie est définie comme étant le domaine de création d’image numérique assisté par ordinateur, le domaine dans lequel des logiciels spécifiques sont utilisés pour aider à modeler des images et des illustrations graphiques, la suite d’Adobe avec ses logiciels phares Photoshop et Illustrator est sans doute la plus célèbre dans le domaine. Mais le livre dont on va parler ici concerne une autre définition du terme infographie, en Anglais c’est appelé Computer Graphics, et c’est la discipline de l’informatique englobant les études de méthodes pour générer et synthétiser du contenu visuel par ordinateur, généralement de la 3D (3 dimensions) mais ça peut inclure aussi de la 2D (2 dimensions), en d’autres mots c’est l’étude des algorithmes utilisés pour reproduire les scènes en 3D comme ceux utilisées dans les jeux vidéo, la simulation 3d, les environnements virtuels, les films d’animation 3D…etc.

Computer Graphics from Scratch – couverture

Le livre avec la couverture en haut est nommé Computer Graphics from Scratch, from scratch signifie à partir de zéro. L’auteur est un enseignant en infographie et il a avec le temps réussi à rassembler une collection d’articles sur les algorithmes du domaine, et qui a décidé un jour de tout mettre dans un livre, le livre est payant mais tous les articles dans le livre sont heureusement gratuits et disponibles sur le site de l’auteur. Le livre et le site sont subdivisés en 2 parties, une pour le Raytraycing, dans laquelle des techniques et des algorithmes sont expliqués pour générer de la 3D en images de synthèse, c’est généralement la 3D utilisée dans les films et les séquence vidéos en 3D, la particularité du Raytraycing c’est que ça permet de produire de la 3D réaliste et de très bonne qualité, mais elle n’est pas temps réel, son rendu doit passer par un processus très lent de précalcul pour générer une séquence vidéo. La deuxième partie est sur la Rasterization, ça concerne le rendu en temps réel de la 3D, c’est la technologie utilisée dans les jeux vidéo, le rendu est instantanément produit sans précalcul, mais la qualité de la 3D n’est pas aussi réaliste que le Raytraycing.

Micro3D engine – un petit moteur de rendu 3D

L’avantage de ce livre c’est qu’il traite les principaux concepts de mathématique et de la géométrie, qui sont généralement assez difficiles dans d’autres livres du même genre, et arrive à les simplifier au niveau d’un lycéen, les algorithmes sont aussi présentés d’une manière très simple et très claire, sans oublier de mentionner sa taille qui est de 200 pages, le rendant très accessible. J’ai eu par le passé l’occasion de travailler sur un Rasterizer, il est présenté sur la vidéo en haut, c’est un petit moteur de rendu 3D dans lequel j’ai implémenté les éléments de base dans un Rasterizer, à savoir la translation, la rotation, le changement d’échelle, la texture, l’élimination de faces cachées…etc, malgré qu’il lui manque encore beaucoup de choses comme, le chargement d’objet 3D, le shading, l’ombrage..etc. C’est l’un des projets que j’ai beaucoup apprécié la programmation et dont j’ai beaucoup appris, le code est très petit sur approximativement 3000 lignes de code en C, il est public et disponible sur mon dépôt GitHub et que vous pouvez tester par vous même par ce lien.

Cheat-sheet pour le langage C

Personnellement le langage C avec le langage C++ sont mes deux langages de programmation préférés, et je suis très ravi que ça soit les principaux langages enseignés au sein de l’université. Lorsque j’étais étudiant je me rappelle avoir eu la fausse idée sur la relation entre le langage C et le langage C++, je pensais que le C++ est une évolution du C et qu’une fois le langage C++ maîtrisé je n’aurais plus besoin d’utiliser le langage C, alors qu’avec le temps je me suis aperçu que malgré que le C++ hérite beaucoup du langage C, ce sont deux langages très différents, le C est surtout un langage procédural structuré autour de la fonction, très populaire dans les domaines comme les systèmes embarqués (systèmes avec des ressources réduites) et les systèmes d’exploitation, d’ailleurs le noyau Linux est en grande partie écrit à base de C. En contrepartie le langage C++ est un langage orienté objet, plutôt populaire pour les applications complexes avec des exigences de performances et de robustesse, comme les programmes de simulation (ou programmes à calcul intensif), les programmes de contrôle industriel, les moteurs de jeux vidéos, les compilateurs…etc.

Lien du Cheat-sheet du langage C

Le lien ci-dessus est celui du cheat sheet pour le langage C, à vrai dire c’est plutôt un résumé sur le langage C avec de petites explications, des exemples…etc. C’est un excellent article pour se mémoriser rapidement tous les principaux concepts du langage, néanmoins ce n’est pas le meilleur pour débutant pour apprendre le langage à partir de zéro.