Quel est l'avantage d'apprendre et de comprendre la construction d'un compilateur?

10

Je suis un étudiant de premier cycle en 3e année d'un diplôme en génie logiciel. Depuis cette année, mon université a introduit un nouveau cours intitulé «Constructions de compilateur», qui vous enseigne les bases de la théorie de la construction d'un compilateur.

Quel serait l'avantage réel pour un ingénieur logiciel d'apprendre la construction d'un compilateur?

Nipuna
la source
2
Bien que je ne regrette absolument pas d'avoir suivi le cours sur les compilateurs, ce fut le plus difficile que j'ai jamais eu. La plupart des cours CSci avaient soit une théorie importante à apprendre, soit beaucoup de programmation, pas les deux. Les compilateurs avaient les deux.
David Thornley
1
Je l'ai aussi fait à l'université en 3e année. - Était le 2ème meilleur module que j'ai suivi dans tout le cours (After AI).
TWith2Sugars
@ TWith2Sugars: Pourquoi diriez-vous que CC est l'un des meilleurs?
Nipuna
1
le sou a chuté plusieurs fois pour moi dans la classe - plus un conférencier engageant et des camarades décents en ont fait quelque chose que j'ai vraiment apprécié. L'un de ces moments dont je me souviens, c'est que nous avons commencé à faire des expressions grammaticales au début et le conférencier a dit: "Cela n'aura de sens qu'au deuxième trimestre" - Le deuxième terme est lorsque nous avons commencé à construire le reste du compilateur (le 1er terme, nous avons construit un analyseur / tokeniser). Cela pour moi en a fait un excellent module.
TWith2Sugars

Réponses:

12

Il y a un côté pratique à apprendre la construction d'un compilateur. Il y a eu plusieurs occasions où j'ai eu besoin de construire des analyseurs pour implémenter un langage de commande spécifique à l'application. Cela m'a permis de créer des interfaces flexibles et scriptables pour l'application.

Cela vous donne également une meilleure idée de la raison pour laquelle certaines langues sont conçues comme elles sont et pourquoi aucune langue n'est parfaite.

C'est un cours difficile, l'un des plus difficiles du programme. J'ai fait l'erreur de le prendre lors d'une session d'été; ne prenez jamais de cours de compilateur lors d'une session d'été, votre cerveau va exploser.

John Bode
la source
5
+1 pour l'explosion du cerveau. Aussi, ne remettez jamais à écrire votre compilateur avant la fin du semestre! Je sais par expérience ...
Jeremy Heiler
20

Oh, c'est une bonne chose. Prenez-le, vous ne le regretterez pas.

Vous obtenez un aperçu de la magie des langages de programmation, de leurs caractéristiques comparatives, de la transformation du code de haut niveau en sa forme exécutable. Vous comprendrez mieux de nombreuses fonctionnalités du langage, aurez une vision plus large de ce qui est possible et de la façon dont ces choses sont faites. Vous verrez tout cela avec des yeux différents.

Il est sage de passer du temps à l'université pour apprendre des choses fondamentales de la CS. Des langages de programmation, des outils et des bibliothèques concrets, ils vont et viennent tous, mais les fondations restent.

De plus, si vous survivez au cours (à condition que ce soit sérieux), vous pouvez alors vous féliciter d'avoir le bon cerveau pour la programmation. Faites un projet pratique avec cette théorie, mentionnez-le dans votre CV et vous susciterez beaucoup d'intérêt auprès de bons employeurs.


la source
2
De plus, il vous donne un aperçu de ce qui est un bon / mauvais langage, qui est un sujet régulier ici.
JBRWilkinson
8

Absolument!

Ce n'est peut-être pas un sujet que vous utiliseriez quotidiennement comme une classe de bases de données par exemple, la compréhension des compilateurs vous donnera une excellente base.

Un exemple similaire serait une classe de systèmes d'exploitation. Vous pourriez être un programmeur et ne pas penser à la façon dont un système d'exploitation fonctionne tous les jours, mais avoir des bases vous aidera à long terme.

ozz
la source
2
Mon cours de premier cycle sur les systèmes d'exploitation était le premier endroit où je devais vraiment comprendre la concurrence. C'était extrêmement pratique. Mon cours de premier cycle sur les langages de programmation était meilleur lorsque nous écrivions des analyseurs.
justkt
Pour une raison quelconque au cours de ma 3ème année, le module OS a été supprimé :( Je voulais vraiment le faire aussi.
TWith2Sugars
6

Oui! Le cours vous donnera une compréhension beaucoup plus approfondie de l'analyse du langage de programmation, des types de données et des fonctions et comment les traduire en code machine pour un processeur spécifique: s.

En soi, cela peut ne pas être d'une grande utilité quotidienne, mais cela vous donnera l' assurance que vous savez réellement comment les choses fonctionnent . C'est très utile (en parlant d'expérience ici) lorsque vous devez faire une optimisation de bas niveau et trouver ces bugs vraiment désagréables, ce qui a tout le monde perplexe.

Martin Wickman
la source
4

Il y a beaucoup de buzz sur les langues spécifiques au domaine de nos jours. Et ils valent vraiment tout le buzz, leur véritable potentiel reste à explorer . Ainsi, les compétences en construction de compilateurs deviendront non seulement importantes mais essentielles à l'avenir. Je passe environ 60% de mon temps de développement à implémenter des compilateurs eDSL, même si le problème actuel n'est pas directement lié aux compilateurs.

SK-logic
la source
qu'entendez-vous par compilateurs eDSL?
Nipuna
1
Comme j'utilise des langages qui prennent en charge la métaprogrammation, chaque langage spécifique au domaine intégré que j'implémente est pratiquement une macro de compilation. Certains sont assez compliqués, avec leur propre système de type et de nombreuses passes de traduction, certains sont triviaux, mais tous sont des compilateurs. Aucun intérêt pour les interprètes à moins qu'ils ne soient vraiment nécessaires.
SK-logic
1

Cela vaut la peine de suivre un cours pour comprendre comment les outils que vous utiliserez pour l'intégralité d'une carrière en programmation (par exemple, compilateurs, interprètes, analyseurs) sont construits et quelles sont les limites.

Cela vaut également la peine de le faire dans un contexte académique, car cela expose les fondamentaux intéressants et non les nombreuses complexités du monde réel, qui est désordonné et embourbé dans le traitement des langages et architectures hérités, c'est-à-dire beaucoup de complexité. Il est également plus probable que vous puissiez travailler sur tous les aspects d'un compilateur pour en créer un pour un cours, que pour travailler sur un dans l'industrie.

grrussel
la source