Travail de session

Objectif

L’objectif du travail de session est de vous confronter avec des aspects pointus et récents des systèmes, des langages et de la programmation par objets. Un autre objectif est de vous initier un peu plus au travail de recherche.

Types de travail:

  • Développement orienté-objet avec contrainte (d’une bibliothèque par exemple)
    • Cible Nit ou Pharo
    • Évalue les conceptions « proches » dans les différents langages à objets
    • Justifie les choix de conception et de modélisation
  • Extension de langage
    • Implémenter une fonctionnalité d’un langage objet dans un autre langage à objet
    • Cible Nit ou Pharo (c’est bien plus facile)
    • Sémantique et syntaxe, et justification
    • Preuve de concept dans un l’interpréteur (on se fiche de la perf)
  • Étude approfondie d’un langage à Objet
    • Sélection d’un langage peu (ou non) vu dans le cadre du cours
    • Passer au crible chaque mécanisme objet (présent, mais pourquoi pas ceux manquants et comment on contourne)
    • L’histoire du langage (versions) peut être interessant.

Pour chaque travail, il est demandé de produire:

  • une analyse de la problématique (indépendamment du langage) : on regarde ce qui existe, on discute ce qui est bien ou pas bien.
  • une expérimentation qui consiste à utiliser/mettre en œuvre en pratique les propositions existantes pour se faire une idée plus précise.
  • éventuellement une proposition de spécification d’extension d’un langage de programmation à objets : on propose quelque chose et on montre pourquoi c’est un bon choix.
  • éventuellement une implémentation (ou juste un prototype si le sujet l’indique) : on transforme la parole en geste.

En fonction du sujet, l’emphase pourra être plus portée sur certains points que sur d’autres.

Livrables, exposés et date

Livrable 0: choix

Vois devez choisir un sujet rapidement. Premier arrivé, premier servi.

Vous pouvez demander des détails.

Date: d’ici le 15 octobre

Livrable 1: problématique

Un court document (4 pages) contenant:

  • Un résumé de la problématique et l’état de l’art. Qu’est-ce qui existe? Que font les gens?
  • Un état d’avancement. Qu’est-ce que vous avez déjà fait?
  • Une proposition de réalisation. Qu’est-ce que vous voulez avoir au final?
  • Une proposition de validation (1 paragraphe). Comment justifier que ce que vous avez réalisé est une bonne chose?
  • Une bibliographie contenant les articles, sites web et autres ressources que vous avez utilisés. (note: la bibliographe ne compte pas dans la limite d’une page)

Date: 5 novembre

Vous remettrez le document imprimé + le pdf par courriel

Livrable 2: mini-présentation orale

Durée 10 minutes + questions. Préparez un support visuel (diapositives)

Plan:

  • problématique et état de l’art
  • état d’avancement
  • objectifs

Date: 19 novembre

Vous remettrez les diapositives imprimés + le pdf par courriel

Livrable 3: final

Une présentation orale + un document papier

L’objectif est de présenter la problématique, vos propositions et vos justifications de façon scientifique à des informaticiens.

La présentation orale durera 30 minutes. Vous devrez préparer un support visuel (pdf) pour votre présentation orale.

Date: 10 décembre

Vous remettrez:

  • les diapositives imprimés
  • un document papier d’une dizaine de pages

Sujets

Voici une liste de sujets variés.

Étude et prototype des nombres à grande représentation

  • répertorier les systèmes des nombres à grande représentation des différents langages de programmation
  • les classifier et les comparer
    • primitif aux langages/dans la bibliothèque de base/dans des bibliothèques tierces
    • API objet offerte et relations avec les autres types numériques et leurs opérations mathématiques
    • etc.
  • proposer une modélisation et une API en Nit

Versionnent et dépendances entres bibliothèques

  • Identifier comment les différents langages gèrent les problématiques de visionnements et d’évolutions. En particulier les problèmes de:

    • Ajout de nouveaux noms (pouvant causer des conflits de nom)
    • Changements mineurs dans les hiérarchies (pouvant causer des conflits de valeur)
    • Ajouts d’attributs dans les objets (pouvant causer l’inconsistance d’objets sérialisés)
  • S’intéresser aussi au cas des dépendances multiples pouvant nécessiter la présence conjointe de deux versions différentes d’une même bibliothèque.

  • Identifier les bonnes idées et les limites des approches

  • Proposer comment un langage à objet pourrait être étendu pour mieux gérer les dépendances.

  • Proposer une preuve de concept

REST-Oriented Architecture

  • Faire un état des lieux pour voir comment les langages à objets (et pas à objets) s’intègrent avec l’approche REST
  • Identifier les bonnes idées et les limites des approches
  • Regarder l’annotation restfull de Nit http://nitweb.nitlanguage.org/doc/nitcorn::restful
  • Proposer une preuve de concept en Nit

Programmation parallèle avec des Acteurs

  • Comprendre le modèle de programmation par acteurs
  • Expérimenter avec le modèle d’acteurs de Nit
  • Expérimenter avec un autre modèle d’acteurs pour comparer (celuloid, aka, etc)
  • Identifier les avantages et les faiblesses des différents modèles
  • Valider les propositions à l’aide de deux programmes réalistes (un CPU-bound et un IO-bound)

Modélisation de Nit dans Moose

Moose est un framework d’analyse de programme multi-langage. L’objectif du projet est d’intégrer le langage Nit dans le framework.

Étude d’un langage de programmation

L’objectif ici est d’étudier en profondeur un nouveau langage de programmation (à la mode) et de comparer par rapport aux concepts avancé des langages à objets

  • Swift
  • TypeScript
  • Dart
  • Groovy
  • Kotlin
  • Rust
  • PHP
  • Autre: à discuter

Quelques critères de comparaison :

  • pur à objet ou hybride
  • typage statique/dynamique/autre
  • système de type et règles de typage
  • classes, interfaces, mixins, et leurs rôles et contraintes
  • propriété: attributs, méthodes, autres
  • surcharge statique
  • héritage simple, multiple, mixins
  • classes ouvertes
  • généricité, contraintes de typages, covariance et contravariance
  • gestion des conflits de spécialisation, linéarisation
  • appel à super, mécanisme d’instanciation
  • méta-objets, introspection, méta-programmation

La plupart de ces points doivent autant être identifiés statiquement ou dynamiquement.

Attention, il ne s’agit pas ici de faire simplement le tuto, mais de prendre un langage et le passer au crible des différents concepts vu en classe.

  • Quelle est la philosophie du langage ? Pourquoi a-t-il été créé ?
  • Quel est le modèle objet et pourquoi c’est fait comme ça ?
  • Quel est le système de type et pourquoi c’est fait comme ça ?
  • Comment fonctionne l’héritage et pourquoi c’est fait comme ça ?
  • Comment les fonctionnalités originales du langage s’insèrent-elles dans le modèle objet.

Développement de bibliothèque en Nit

Si aucun de ces sujets ne vous motive, votre dernière chance est de développer une bibliothèque originale en Nit.

Dans tous ces cas vous devez:

  • faire un tour d’horizon de bibliothèques équivalentes dans plusieurs langage
  • identifier les points clés des conceptions objets de ces bibliothèques
  • proposer une API de base originale en Nit.

Dans le cadre de votre bibliothèque vous vous concentrerez seulement sur en ensemble très restreint de cas d’utilisation: l’objectif n’est pas de tout faire, mais de fait une toute petite partie mais la faire bien.

Voici quelques exemples de bibliothèques à réaliser

  • manipulation d’images. à la pillow
  • manipulation de connexion HTTP coté client. à la requests
  • framework de développement d’exploits. à la pwntools

Développement de bibliothèque en Pharo