Département d'informatique Jean Privat

Nit pour la programmation scientifique

Description du projet

L'objectif consiste à explorer de nouvelles fonctionnalités au langage Nit pour qu'il soit un langage pratique au domaine scientifique.

Le langage Nit est purement à objets, permet l’héritage multiple et le raffinement de classes, une forme de programmation par aspect.

Dans le cadre de ce sujet, l'étudiant devra évaluer l'utilisation du langage Nit pour faire de la programmation scientifique. Voici quelques points intéressants à étudier:

  • Réaliser un début de module Nit scientifique (tel que NumPy ou SciPy). Ce module offrirait des matrices, de l'algèbre vectoriel, des services de statistiques, etc.
  • Spécifier les limites (ou format) des types numériques. Cela permettra d'assurer des résultats constants des algorithmes malgré l'évolution de Nit.
  • Ajouter une sous-classe à Numeric pour des entiers non-bornées (style de BigInteger).
  • Optimiser l'implémentation des types de base (entiers et booléens) et des collections sur ces entiers. (toutefois, ce travail touche plus le domaine de la compilation et de l'optimisation que celui de la programmation scientifique)
  • Spécifier et implémenter une FFI avec Fortran, R, Matlab, etc. Le langage Fortran est encore largement utilisé dans les domaine scientifique pour traiter les données. Son interfaçage avec Nit permettrait de facilement réutiliser le code existant, éprouvé et publié, tout en utilisant les fonctionnalités modernes de Nit. Le support de plusieurs langages permettra d'utiliser Nit comme langage colle pour rassembler différents morceaux de code.

Le choix du ou des points à étudier sera fait en fonction de l’intérêt des étudiants et des discussions avec le reste de l'équipe du projet.

Méthodologie

En fonction des propositions, plusieurs approches peuvent être mise en oeuvre.

  • Le développement de bibliothèques en pur Nit. C'est l'approche idéale car le langage permet un fort niveau d'abstraction et d'expressivité tout en restant simple à développer
  • Le développement de bibliothèques polyglottes. Pour des raison de performances ou de disponibilité de bibliothèques dans d'autres langages, il peut-être avantageux d'encapsuler du code externe dans des modules Nit en utilisant la FFI.
  • L’extension du langage. Afin de pouvoir rendre Nit plus expressif pour les programmeurs scientifiques, on pourra proposer des amélioration à la spécification du langage.
  • L'amélioration du compilateur. Pour des raisons de performance, il sera peut-être nécessaire d'identifier des constructions où le compilateur pourrait générer du code machine plus efficace. Cette avenue est possiblement difficile et sort sans doute du cadre du sujet, toutefois l'identification de ces constructions à optimiser serait une contribution en soi.

En pratique, il est vraisemblable que c'est une combinaison de ces approches qui sera mise en oeuvre tout au long du travail.

Formation requise

L'étudiant doit avoir des connaissances, ou un intérêt, en programmation scientifique (analyse numérique, statistiques, Matlab, Mapple, R) et en programmation orienté Objet.

Une excellente capacité à travailler en équipe ainsi qu'une bonne connaissance de l'optimisation et de algorithmique sera un plus.

Encadrement

  • Jean Privat, professeur à l'UQAM, dont l'expertise porte sur les langages à objets et la compilation.
  • Alexandre Blondin-Massé, professeur à l'UQAM, dont l'expertise porte sur la programmation scientifique et l'algorithmie.