fabernovel loader

Scala.io v5 : retour de FABERNOVEL TECHNOLOGIES sur l’édition 2018

BACK
EVENTS
fabernovel loader
Cette année encore, notre équipe a participé à Scala.io, la conférence de l’année sur l’écosystème Scala. Découvrez ici nos retours sur ces trois jours inspirants !

Pour la 5ème édition de la conférence Scala.io, plus de 400 personnes ont été accueillies au CPE de Lyon, lieu habituel de cette manifestation. Le temps lyonnais un peu mitigé a été vite oublié, grâce à l’accueil chaleureux des équipes de volontaires et d’organisateurs. Nous les saluons au passage pour le travail remarquable qu’ils font tout au long de l’année.

En France, Scala.io est une occasion unique de voir Martin Odersky, John Pretty, John De Goes et tant d’autres membres influents de la communauté Scala, tous réunis pour le même événement. La conférence de cette année s’est tenue sur 3 jours, dont un a été dédié aux workshops. Une nouveauté que nous avons grandement appréciée et que nous espérons voir renouvelée. Cette édition a été marquée par un enthousiasme débordant, surtout après les annonces concernant TASTy et les impacts pour les macros dans Scala 3.

FABERNOVEL TECHNOLOGIES a également sponsorisé la Community Party qui s’est tenue sur La Plateforme, un ancien pétrolier ré-aménagé en bar. Une soirée pleine de rencontres et d’échanges autour d’un verre.

Scala Center FLOSS Spree

Avant de vous faire découvrir les conférences de cette édition, voici d’abord une bonne nouvelle que nous souhaitons partager avec vous.

Cette année, Scala Center a organisé un FLOSS Spree pour encourager les participants de la conférence à contribuer aux projets Open Source en Scala. L’atelier, qui s’est tenu sur les deux jours de l’événement, a été animé par Julien Richard-Foy et Sébastien Doeraene en présence de porteurs de différents projets. Ces derniers ont présélectionné les problématiques à traiter et ont accompagné les contributeurs dans leur résolution.

Une très bonne initiative, qui nous a permis de découvrir ou redécouvrir les différents projets Open Source que nous utilisons quotidiennement (ex: coursier, scala, scalaz). Nous avons été ravis de voir certaines de nos pull requests acceptées : coursier, endpoints et scalaz ZIO.

“Towards Scala 3 – A Status Report” keynote de Martin Odersky

Cette keynote de Martin Odersky a été une belle occasion de découvrir la feuille de route pour les prochaines versions de Scala. La version 2.13 devrait arriver courant 2019 et apporter des améliorations au niveau de l’API des collections, avec entre autre la disparition du paramètre implicite “CanBuildFrom” pour les cas d’usage standards. Les versions 2.14 et 3.0 (Dotty) sont actuellement prévues pour l’année 2020, avec un gel des fonctionnalités en 2019 pour Scala 3.0. Un mécanisme de migration sera proposé pour le passage de 2.14 à 3.0 via Scalafix, afin d’éviter de reproduire les problèmes rencontrés par la communauté Python lors du passage à Python 3.

Martin Odersky a ensuite présenté les nouvelles fonctionnalités attendues pour Scala 3.0. Elles sont motivées par le besoin de simplifier le langage Scala, si nécessaire en le rendant plus dogmatique. Parmi ces fonctionnalités, on peut citer :

  • Un nouveau système de tuples de taille arbitraire (plus de limitation à 22 champs)
  • La possibilité de déclarer des traits paramétrés « trait T(x: S) »
  • Un nouveau type d’énumération qui devrait résoudre le problème d’exhaustivité du « pattern matching » de l’implémentation actuelle (« enum Color { case Red, Green, Blue } »)
  • Union et intersection de type (« A | B » et « A & B »)
  • Égalité multiverse : les opérateurs « == » et « != » vérifieront que les objets comparés possèdent des types compatibles

Par ailleurs, dans les fonctionnalités envisagées pour la suite, on peut noter les idées d’une gestion plus stricte des valeurs null, ou encore la gestion de la notion d’effets de bord directement dans le langage.

Enfin, Scala 3.0 introduit l’utilisation de TASTy, permettant de représenter le code Scala sous forme d’Abstract Syntax Tree (AST). Il servira aussi bien de format intermédiaire dans la compilation, que de format d’échange avec divers outils de développement, ou encore pourra être directement manipulé dans un nouveau système de macros. Il est d’ailleurs déjà utilisé pour implémenter le serveur LSP pour Dotty, ce qui devrait permettre d’ajouter le support de Scala 3.0 dans de nombreux IDE et éditeurs de texte (actuellement disponible pour VSCode).

“Théorie des catégories, vous la connaissez déjà” par Emilien Pecoul

Le théorie des catégories peut faire peur au premier abord : Monades, Functors, Monoïdes …
C’est une théorie mathématique avancée et générique qui est utilisée massivement dans la programmation fonctionnelle.

Le but de cette conférence était de montrer qu’elle est régie par des principes compréhensibles par tous les développeurs.

Une catégorie est une collection d’objets (dans le sens très général du terme) et de relations (morphismes) pouvant relier ces objets de façon composable.
Les morphismes peuvent se rapprocher des fonctions pures dans un code fonctionnel.

Cette théorie repose sur 3 piliers :

  • Abstraction : cacher ou supprimer l’information pour appliquer des règles communes
  • Composition : découper un problème en sous-problèmes (fonctions) plus facilement raisonnables
  • Identité : manipuler 2 objets équivalents de la même manière

Ensuite, l’intervenant s’est concentré sur les foncteurs. Ils permettent de faire des transformations entre catégories tout en conservant les structures. Ils permettent de faire des abstractions assez puissantes pour créer des fonctions génériques. C’est grâce à ces foncteurs qu’on peut généraliser de façon prévisible une fonction “A => B” dans n’importe quel contexte “F” pour obtenir une fonction de “F[A] => F[B]”. On retrouve ce principe entre autre dans les Option, Future ou List de scala.

Finalement, cette présentation permet de réfléchir aux bases de la programmation fonctionnelle et de comprendre l’intérêt de son approche mathématique : exprimer des problèmes complexes en composant des fonctions simples et pures afin d’obtenir des programmes prévisibles.

“Initiation aux effets algébriques” par Xavier Van De Woestyne

Dans son intervention, Xavier nous a initié aux effets algébriques, qui sont des représentations formelles des effets de bord. Ils peuvent être vus comme une alternative aux monades dans le sens où ils permettent de séparer description et exécution du programme de ses effets. Cela facilite de raisonner sur les effets et ainsi d’écrire des fonctions pures qui effectuent des I/O. Lors de sa présentation, il a pointé du doigt l’un des problèmes majeurs des monades : elles ne sont pas composables entre elles. C’est pourquoi les monades transformers ont été créées, amenant avec elles beaucoup de boilerplate. C’est un problème que les effets algébriques tentent de résoudre.

Les effets algébriques font encore majoritairement partie du domaine de la recherche scientifique, celui qui aimerait les expérimenter peut regarder du côté des langages Koka, Eff, Links, Frank et Ocaml+effects.

Nous avons été enthousiasmés par la promesse que représentent les effets algébriques, à savoir mieux contrôler et composer les effets de son programme. Ces concepts, très théoriques, gagneraient à être plus accessibles, tant sur le plan conceptuel que pratique. En effet, seuls quelques langages, réservés à un public de connaisseurs, les implémentent. Davantage d’exemples et de retours d’expérience nous aideront à mieux les appréhender.

“Cats Effect: The IO Monad for Scala” par Gabriel Volpe

Lors de cette conférence, Gabriel Volpe a présenté la librairie Cats Effect, qui propose des structures fonctionnelles permettant de gérer et composer les effets de son programme en conservant une propriété très importante : la transparence référentielle.

Avant de rentrer dans le vif du sujet, il a pris soin de clarifier la différence entre les effets et effets de bord. L’effet est un comportement non déterministe. L’effet de bord partage cette même propriété et réalise une interaction avec l’extérieur du programme. Par exemple, une List[A] est un effet car elle peut produire zéro, un ou plusieurs éléments de type A, tandis que println(“Hey!”) est un effet de bord car il écrit immédiatement dans la console.

Ensuite, Gabriel a présenté les structures offertes par Cats Effect et les problématiques auxquelles elles apportent une solution à travers des exemples de code éclairants. Ainsi, il montre comment la monade IO peut être utilisée pour gérer des calculs synchrones et asynchrones, et comment elle peut être composée avec d’autres monades pour gérer des effets spécifiques. Les interactions avec le système de fichiers et la console sont gérées avec une composition entre la monade IO et la monade Resource, les erreurs avec la MonadError, la concurrence avec Fiber et le parallélisme avec Parallelism.

Pour retrouver ces exemples, vous pouvez accéder à ces slides ici.

Cette conférence illustre, d’une façon accessible, l’intérêt d’utiliser ces types de structures dans les projets. La suite ? Expérimenter par soi-même.

“High performance Privacy By Design using Matryoshka and Spark” par Wiem Zine Elabidine et Olivier Girardot

Les recursion schemes font partie des sujets régulièrement évoqués au sein de la communauté, mais la plupart des présentations restent souvent très théoriques et abstraites. Cette intervention avait pour but de donner les cas concrets d’utilisation de ces derniers. Les deux ingénieurs, Olivier Girardot et Wiem Zine, nous ont fait part d’un retour d’expérience de l’utilisation de Matryoshka, la librairie de recursion schemes en Scala la plus connue, dans le cadre de la data privacy.

En préambule, ils ont introduit leur problématique. Leur objectif était de pouvoir appliquer des traitements sur les données personnelles de la manière la plus générique et efficace possible. Pour ce faire, ils ont donc décidé de concevoir un framework dans lequel on pourrait représenter les données (et le schéma associé), et qui permettrait de gérer chaque champ dans ces données de manière individuelle.

Après avoir posé les objectifs dudit framework, les deux speakers ont introduit les structures récursives et ont montré comment les utiliser pour représenter des données. Ils ont introduit Matryoshka et ont détaillé le fonctionnement ainsi que les différentes étapes à suivre pour pouvoir traiter des structures récursives pour arriver à l’implémentation de leur framework.

Pour clôturer, les intervenants ont montré comment intégrer ce framework avec Spark et Catalyst engine. Ils ont mis en avant les gains de performance de cette solution. Si vous êtes amateurs d’abstractions (notamment les recursion schemes) et de Spark, cette conférence était faite pour vous, retrouvez les slides ici et le repo github ici.

La recette magique de Scala.js : un Langage Transplateforme, par Sébastien Doeraene

Sébastien, le créateur de Scala.js a présenté sa recette magique de cette implémentation du langage.
La magie s’opère pour offrir ces trois propriétés majeures :

  • portabilité : le même code Scala peut désormais tourner sur plusieurs plateformes en occurrence Javascript en plus de la JVM ;
  • interopérabilité : le code Scala est compatible avec le code natif de chaque plateforme, par exemple les librairies Javascript ;
  • performance : grâce à la séparation de deux modes de compilation, pour tester et pour la production, Scala.js peut rivaliser avec la JVM.

Il a détaillé quelques unes des problématiques complexes qu’il a dû résoudre. Et surprise, les difficultés ne se trouvent pas toujours là où on les attend. Par exemple, traduire le code Scala en Javascript n’est pas si problématique, sauf que pour exécuter n’importe quel programme Scala il faut aussi porter une bonne partie de la plateforme Java en Javascript.

La conclusion que l’on peut en tirer est que Scala.js est complètement interopérable avec Javascript, néanmoins il n’est pas parfaitement portable. En particulier, Scala.js ne supporte pas la réflexion comme Scala sur JVM. Néanmoins, dans l’écosystème, la majorité des librairies les plus utilisées sont maintenant compatibles Scala.js. La recette magique fonctionne bien puisqu’environ 10% des développeurs Scala déclarent avoir utilisé au moins une fois Scala.js.

Conclusions

C’est donc une belle édition 2018 qui se termine, annonçant de belles perspectives pour Scala. Nous vous donnons rendez-vous en 2019 pour la sixième édition !

Merci à Scala.io et à tous les speakers présents pour ces trois jours, en particulier à Stéphane et Fabian de chez FABERNOVEL TECHNOLOGIES.

Merci à Alexandre, Antoine, Charlotte, Denis, Elie, Fabian, Fabien, Gaëtan, Guillaume, Hamza, Hugo, Kévin et Stéphane pour leur participation.

Vous êtes passionné par la programmation fonctionnelle ?

Rejoignez-nous !
à lire
API
BACK
DEVOPS
EVENTS
DevFest Nantes 2018 : retour sur la première édition pour FABERNOVEL TECHNOLOGIES

Découvrez ici nos retours sur l’événement incontournable de la région nantaise, DevFest, qui a eu lieu en octobre cette année.

EVENTS
Retour sur le Best of Web 2018, le rendez-vous des passionnés de technos Web

Nous étions trois de FABERNOVEL CODE à nous rendre à la Grande Crypte vendredi 8 juin pour assister à la 4ème édition du Best of Web. Retour sur les grands moments de cet événement ...