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.

La robotique dans l’université de Stanford

La robotique est un domaine qui m’affectionne en particulier, j’ai eu par le passé la chance de participer à de petits projets en robotique qu’ils ont laissé de très bons souvenirs. Pour ce premier blog sur le sujet je voulais introduire l’atmosphère si particulière de cette discipline, par une perspective académique sur l’enseignement universitaire dans l’une des universités les plus prestigieuses et les plus connues mondialement, qui est l’université californienne de Stanford. La robotique a une particularité unique d’être une discipline se trouvant sur un chemin de croisement entre trois autres disciplines totalement différentes, qui sont la mécanique, l’électronique et l’informatique, ce qui rend son apprentissage spécial et les projets concrets commerciaux ou de recherche dans le domaine exigeant généralement des équipes pluridisciplinaires de différentes spécialités. La vidéo en bas montre des étudiants s’appliquant sur des projets divers en robotique.

Projets d’étudiants dans l’université de Stanford

L’importance des projets dans un cursus technique

Voici un poste que j’avais pu voir récemment sur Reddit publié par un étudiant :

Ça résume d’une manière exacte la façon dont je pense que l’apprentissage et l’éducation technique universitaire devrait être menée, autrement dit les projets. Moi j’en suis persuadé, un projet est 10 fois plus éducatif qu’un examen, sans dénigré l’importance des examens, mais le projet a cette particularité de poser l’étudiant sur des problèmes plus proche de la réalité, ça permet de projeter l’étudiant dans le monde du travail, ça lui permet aussi de construire un Portfolio (définition de Portfolio sur Wikipédia) qui est en égalité d’importance avec le C.V. Dernier mot, réalisez le maximum de projets possibles.