Quelques propositions de sujets de travail de session
Compilateur nitc vers llvm
L’objectif est de réaliser une preuve de concept d’un compilateur nitc vers llvm
Note: ce sujet est technique
- 1: Réaliser le module Nit de génération de code LLVM (texte format .ll pour pouvoir valider)
- 2: Adapter les compilateur nitc pour générer du LLVM plutôt que du C
- 3: Note: la génération peut être incrémentale en mélangeant des morceaux compilés en C et d’autres compilés en llvm
Littéraux avec soulignés dans Pharo
L’objectif est de terminer l’implémentation de PhEP5
Note : ce sujet demande de produire du code de qualité
- 1: Comprendre les classes
RBScaner
etNumberParser
, et la façon dont est implémentée l’analyse lexicale de littéraux numériques - 2: Implémenter la gestion des
_
- 3: Ajouter la reconnaissance de jetons « nombre mal formé » pour le source invalide mais qui suffisamment proches d’un truc qui ressemble à un nombre
- 4: Développer de nombreux cas de tests
- 5: Soumettre un PR pour intégration
- 6: Ajouter la représentation flottante hexadécimale (dans une autre PR)
Énumérations en Nit
L’objectif est de permettre la réalisation d’énumérations simple dans le langage Nit
Note: ce sujet est difficile
- 1: Spécification de la syntaxe et de la sémantique (à l’aide du professeur) + étude du compilateur Nit
- 2: Modification du frontend pour déclarer et utiliser les énumérations
- 3: Preuve de concept fonctionnelle dans l’interpréteur
- 4 bonus : Preuve de concept fonctionnelle dans le compilateur
Implémentations d’analyses et d’optimisations dans MiniCC2
L’objectif est de se faire plaisir et d’implémenter un maximum d’analyses et d’optimisations classiques dans MiniC.
Note : ce sujet est fun
- Ce sujet peut être pris indépendamment par plusieurs personnes
- Contrairement à un vrai compilateur, on privilégiera la simplicité et l’élégance du code plutôt que la performance.
RISC-V Analysis
L’objectif est d’implémenter quelques analyses simples Data-Flow pour RARS
Note : ce sujet demande de produire du code de qualité
- 1: Générer CFG (et basicblocks) à partir du code assembleur
- 2: Permettre de visualiser le CFG
- 3: Implémenter quelques analyses. Par exemple, registre utilisé mais non initialisé, code mort ou inutile
Vérificateur de code octet en Pharo
L’objectif est de déterminer les règles de validation du bytecode Pharo et les implémenter
Note :
- Lire et comprendre les besoins et subtilité d’un vérificateur de bytecode (par exemple celui de Java)
- Proposer des règles de validation pour le bytecode Pharo
- Implémenter un validateur de bytecode en Pharo pour le compilateur et/ou la machine virtuelle
Exécution symbolique MiniC
L’objectif est de prototyper un exécuteur symbolique pour MiniC
- Lire et comprendre à propos de l’exécution symbolique
- Utiliser JavaSMT par exemple
Étendre le langage MiniC
L’objectif est d’ajouter des traits de langages à MiniC
Par exemple:
- Ajouter mémoire, tableaux et pointeurs
- Ajouter les lambdas
- Ajouter les exceptions
- Ajouter le multithreads à la go avec des channels
- Etc.
Tâches:
- Étendre le parser
- Étendre et ajouter des analyses sémantiques
- Étendre l’interpréteur MiniC
- Étendre le compilateur MiniCC et/ou MiniCC2
- Faire plein de programmes tests pour valider le comportement et la détections des erreurs
Toute autre sujet intéressant
À discuter avec le professeur.
- Vaguement en rapport avec la compilation
- Qui nécessite de développer et/ou utiliser des technos et outils complexes
- Optionnellement qui soit en rapport avec votre sujet de recherche de maîtrise (afin de factoriser et réutiliser votre travail)