Unikernels : MirageOS vs. OSv
Intéressant, pas d’exemple
En quoi les unikernels diffèrent-t-ils des noyaux de systèmes d’exploitation
traditionnels ? Quel impact a l’adoption d’un unikernel sur l’application à
déployer sur celui-ci ? En particulier, quel impact de Mirage OS ? Et d’OSv ?
API Graphiques : OpenGL vs. Direct3D 12+ et Vulkan
Déjà pris
Quel est le rôle d’une API graphique comme DirectX, OpenGL ou Vulkan ?
Pourquoi dit-on que DirectX 12+ et Vulkan sont des API de bas niveau ? Quel
est l’impact sur la programmation graphique ? Quelle différence avec Direct3D
11- et OpenGL ? Quels facteurs ont motivé cette évolution des API ? Quels en
sont les avantages et les inconvénients ?
POO : nominal (Java) vs. structurel (OCaml) vs. prototype (JavaScript)
Intéressant, exemple disponible, déjà pris
Qu’est-ce qui distingue la programmation orientée objet avec classes de celle
avec prototypes ? Dans un langage à classe comme Java, qu’est-ce que le
typage nominal ? Même question pour le typage structurel en OCaml. Quels
sont les avantages et inconvénients de ces trois disciplines ? Quels exemples
d’utilisation de l’un ou l’autre dans un logiciel réel ? A-t-on vu des
évolutions récentes en la matière ?
Langages pour la JVM : Kotlin vs. Scala
Déjà pris, exemple disponible
Quelle est l’histoire de la /Java Virtual Machine/ ? Quelles sont ses
caractéristiques techniques essentielles ? Pourquoi a-t-on vu l’essor
d’alternatives à Java ces quinze dernières années ? Quels sont les points
communs de Kotlin et Scala ? Leurs différences ? Peut-on identifier des
points forts ou faibles pour chaque langage ?
Tests unitaires (JUnit) vs. à base de propriétés (QuickCheck) vs. par comparaison (Monolith)
Déjà pris
Qu’est-ce qui distingue ces techniques de test ? Ont-elles des domaines
d’application qui les favorise préféremment ? Quels exemples illustrent mieux
leurs forces et leurs faiblesses respectives ?
Envoi de message : Go vs. Erlang vs. Akka
Pourquoi trouve-t-on des primitives d’envoi de message dans beaucoup de
langages ou bibliothèques dédiées à la programmation d’applications réparties
? À quel point ces primitives sont-elles similaires ? Qu’est-ce qui les
différencie, le cas échéant ? Comment sont-elles implémentées dans les trois
technologies en question ?
Effets dans les langages fonctionnels : OCaml vs. Haskell vs. Koka
Déjà pris
Qu’est-ce qu’un effet de bord ? Qu’est-ce qui distingue le traitement des
effets de bord dans les trois langages cités ? Pourquoi cherche-t-on à
contrôler les effets de bords dans certains de ces langages, et comment ?
Comment illustrer simplement la différence entre les solutions retenues ?
Virtualisation : QEMU vs. Firecracker
Quelle est l’architecture logicielle de chacune de ces deux solutions de
virtualisation ? QEMU et Firecracker reposent-ils sur les mêmes techniques
pour virtualiser un jeu d’instruction ? Comment est-ce que leurs choix
techniques favorisent ou au contraire découragent certaines utilisations ?
Programmation modulaire : modules (ML/OCaml) vs. traits (Scala)
Exemple disponible
Que désigne-t-on par le terme /programming in the large/ ? Comment le système
de modules d’OCaml ou le système de traits de Scala peuvent aider en la
matière ? Peut-on facilement illustrer les forces et faiblesses de chacun ?
Quels programmes réels les utilisent, et comment ?
Métaprogrammation : OCaml PPX vs. MetaOCaml
Intéressant, exemple disponible, déjà pris
Pour quel genre de tâche utiliser les PPX ? Et MetaOCaml ? Y a-t-il des
tâches qui se prêtent aux deux technologies ?
Programmation objet pour les GUI : Gtkmm/C++ vs. lablgtk/OCaml
Déjà pris
Pourquoi les bibliothèques de /widgets/ graphiques sont-elles presque
toujours des bibliothèques objets ? Que se passe-t-il lorsqu’on doit
interfacer des modèles objets différents, comme ici GObject, le modèle C++ et
le modèle OCaml ? Comment est-ce que cela influe sur l’utilisation de la
bibliothèque en C++ et en OCaml ? Les solutions adoptées semblent-elles
simples ou complexes du point de vue de l’utilisateur ? Et du mainteneur de
la bibliothèque ?
Programmation événementielle pour les GUI : Gtkmm vs. Qt
Déjà pris
Qu’est-ce que la programmation événementielle ? Pourquoi les bibliothèques de
GUI reposent sur cette approche ? Quelles sont les similarités et les
différences des systèmes d’événements employés en C++ par les bibliothèques
Gtk (sous la forme du binding Gtkmm) et Qt ? Quels avantages et inconvénients
en termes de facilité d’utilisation, performance, génie logiciel, etc. ?
Gestion mémoire : manuelle (p. ex. C), GC traçant (Java, OCaml…), basée sur RAII/borrowing (Rust)
Intéressant, exemple disponible
Quels sont les inconvénients des différentes solutions en termes de sûreté et
productivité des développeurs ? De performance ? Peut-on estimer la
complexité des implémentations de ces différentes solutions ?
Calcul parallèle : OpenMP vs. Cilk
Déjà pris, exemple disponible
Qu’est-ce qu’un programme parallèle, par opposition à concurrent ? Dans quels
domaines d’application ces programmes interviennent-ils ? Comment ces deux
solutions se distinguent à l’usage ?
Implémentation Java : compilateur GraalVM vs. JIT HotSpot
Exemple disponible
Qu’appele-t-on un compilateur “en avance” (/ahead of time/) dans le monde
Java ? Pourquoi un mot spécifique ? Et un compilateur “juste à temps” ? Quels
avantages et inconvénients en termes de performance et génie logiciel ?
Quelles difficultés spécifiques rencontrées lors de la compilation d’un
programme Java peuvent influer sur le choix de l’une ou l’autre technologie ?
Extensibilité linguistique : CPP vs. décorateurs Python vs. OCaml PPX
Déjà pris
Quand a-t-on besoin des systèmes cités ? Quels exemples d’utilisation dans
des programmes réels ? Comment ces solutions se distinguent-elles en termes
de flexibilité ? De coût à l’exécution ? À la compilation ?
Shells : Bash vs. Zsh vs. Fish
Intéressant, exemple disponible, déjà pris
Qu’est-ce qu’un shell ? Quels sont les pièges de la programmation shell
traditionnelle ? Que font les projets cités pour améliorer la robustesse de
la programmation shell ?
Programmation web backend : Node vs. Spring
Déjà pris
Comment se distinguent ces deux solutions du point de vue de l’utilisateur ?
Et du développeur du framework ? Ont-elles des domaines d’application où
elles sont particulièrement populaires pour des raisons techniques ?
Utilisation du compilateur LLVM : GHC vs. Clang
Intéressant, exemple disponible, déjà pris
Qu’est-ce qu’un “dorsal” (/backend/) de compilateur ? Comment le projet LLVM
fournit-il un tel composant ? Comment est-il utilisé dans les compilateurs
GHC (Haskell) et Clang (C, C++, Objective-C) ? Existe-t-il des alternatives ?
Isolation des moteurs JavaScript : Firefox vs. Chromium
Intéressant, exemple disponible, Déjà pris
De quoi isole-t-on le moteur JavaScript d’un navigateur ? Pourquoi ? Comment
est-ce réalisé dans Chromium ? Dans Firefox ? Éventuellement dans d’autres
navigateurs ? Pouvez-vous décrire les solutions employées dans le code de
chacun de ces navigateurs ?
Web client : HTML/CSS/JS avec ou sans bibliothèques JS modernes (Vue/React/…)
Déjà pris
Programmation iOS : Flutter vs. React Native vs. Swift
Exemple disponible, déjà pris
Focus : le parallélisme à mémoire partagée en OCaml 5
Déjà pris
Intérêt ? Difficultés dans un langage comme OCaml ?
Focus : les implémentations formellement vérifiées de TLS
Intérêt ? Inconvénients pour les développeurs de ces outils ? Comment ça
marche d’un point de vue génie logiciel ?
Programmer du code numérique, C++ vs. Fortran
Exemple disponible, déjà pris
Qu’appelle-t-on “code numérique” ? Fortran, premier langage de programmation
“de haut niveau” de l’histoire, a-t-il encore un intérêt dans ce domaine ? Si
oui, pourquoi ? À quoi ressemble un code numérique réel simple ?
Langages cibles pour le web : générer du webasm ou du JavaScript ?
Exemple disponible
Plusieurs langages choisissent de générer directement du JavaScript, comme
TypeScript et OCaml (via js_of_ocaml). Une alternative est de générer du
webassembly. Pourquoi choisir l’un ou l’autre ?
Filtrage dépendant : à la Coq / Agda
Intéressant, exemple disponible
En quoi la construction de filtrage (/match/) de langages comme Coq et Agda
diffère-t-elle de celle présente en OCaml, Rust ou Haskell ? En quoi
améliore-t-elle l’expressivité du langage, au prix d’un système de types
rendu beaucoup plus complexe ? Quelles sont les différences d’approche entre
Coq et Agda en la matière ?
Focus : preuve de programme genéraliste en SPARK Ada
Qu’est-ce que la variante SPARK du langage Ada ? Pourquoi l’utiliser ? Quels
programmes l’utilisent ? Pour quel genre de programme peut-on l’exploiter ?
APIs webs : REST vs. GraphQL vs. SOAP
Déjà pris, exemple disponible
Programmation iOS : Flutter vs. React Native vs. Swift
Déjà pris
Focus : Rust dans le noyau Linux
Intéressant, exemple disponible
Quel est l’intérêt ? Quels problèmes spécifiques a-t-il fallu résoudre pour
permettre le développement Rust dans le noyau Linux ? S’agit-il de
modifications importantes à l’infrastructure du noyau ? Peut-on développer
n’importe quelle partie du noyau en Rust, ou bien y a-t-il des secteurs
privilégiés ? Si oui, lesquels ?
Focus : récursion terminale sur la JVM et en JavaScript
Exemple disponible
Pourquoi la compilation des langages fonctionnels repose-t-elle sur
l’implémentation correcte des appels terminaux ? Et qu’est-ce qu’une
implémentation correcte, d’ailleurs ? Qu’est-ce qui pose problème avec la JVM
ou JavaScript ? Quelles sont les solutions disponibles ? Sont-elles
satisfaisantes ?
Configuration : Puppet vs. Chef
Exemple disponible, déjà pris
Quel est le modèle d’utilisation de ces outils ? Comment sont-ils implémentés
? Quels sont les avantages et inconvénients de ces approches ?
Distributions Linux déclaratives : NixOS vs. GUIX
Intéressant, exemple disponible
Pourquoi ces distributions sont-elles dites “déclaratives” ? Qu’est-ce qui
différencie NixOS et GUIX ?
Exécutables portables sous Linux : Flatpak vs. Snap
Intéressant
Comment ces technologies fonctionnent-elles ? Comment les utilise-t-on en
tant que développeur ? Comment se comparent-elles à d’autres approches pour
produire des binaires portables, notamment celle du compilateur Go ?
Libc : glibc vs. musl
Intéressant, exemple disponible
Compatibilité, tailles, sécurité, communautés, etc. ?
Authentification fédérée : OAuth2 vs OpenID Connect vs SAML
Intéressant
Pourquoi ces standards ont-ils émergé ? Quels usages pour chacun et quels sont leurs défis ?
Approches “Serverless” : AWS Lambda vs Google Cloud Functions vs Azure Functions
Déjà pris
Quels avantages les architectures serverless apportent-elles ? Comment se distinguent ces plateformes cloud majeures ?
Frameworks front-end : React vs Vue.js vs Angular
Déjà pris
Que signifie l’injection de dépendances ? Qu’est-ce qu’un DOM virtuel ? Qu’est-ce que le data binding bi-directionnel ?
Bases de données SQL vs NoSQL : cas d’usage et limitations.
Déjà pris
L’inférence de types.
Quels liens avec la surcharge et les classes de types, les objets ?
Auto en C++, typescript, Haskell, Ocaml.
Comment on programme un démon UNIX moderne en terme de sécurité
En exploitant les technologies modernes (systemd, cgroups…).
Builds reproductibles : diffoscope vs … Référence
Reflections on Trusting Trust/ de Ken Thompson.
Bootstrap du compilateur OCaml vs. GHC + lien vers le bootstrap
Cf. exposé de N. Courant prévu au meeting OUPS 8 déc (Camlboot: debootstraping the OCaml compiler)
Pourquoi est-ce que des langages antiques comme Fortran, Cobol, Lisp sont encore très utilisés ?
Est-ce plus que du conservatisme ?