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.

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 18 mars

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: 26 mars

Vous remettrez le document imprimé

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: 9 avril

Vous remettrez les diapositives imprimés

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: 23 avril

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

Sérialisation vers BD relationnelle

  • Identifier comment les différents langages gèrent les problématiques de persistance d'objets dans une BD
  • Comprendre et pouvoir expliquer les problématiques de la persistance d'objets
  • Comprendre le mécanisme de sérialisation/dé-sérialisation de plusieurs langage, par exemple celui de Nit.
  • Étendre le mécanisme de sérialisation/dé-sérialisation pour se connecter directement avec un SGBD. Par exemple vers sqlite.

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)

Chaînes de caractères.

Les chaînes de caractères sont des structures de données fondamentales des langages de programmation utiles.

  • étudier et comparer l'API des chaînes dans différents langages
  • on s'intéressera en particulier aux questions suivantes
    • types de chaînes
    • mutabilité vs immutabilité
    • nature des caractères
    • champs d'octets vs texte
    • interconnexion avec l'API des collection et l'API des entrées-sorties
    • services fournis
    • localisation et encodages
  • on ne s'intéressera pas directement aux performances et aux algorithmes sous-jacents.

É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
  • Crystal
  • Kotlin
  • Rust
  • Go
  • 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