30 points par xguru 2024-06-17 | 3 commentaires | Partager sur WhatsApp
  • "The missing Standard Library for TypeScript"
  • Conçue pour faciliter la création de programmes synchrones/asynchrones complexes
  • Du code plus composable, réutilisable et testable
  • Une sécurité de type maximale, y compris pour la gestion des erreurs
  • Fournit de nombreuses bibliothèques
  • Prise en charge du clustering et des workflows (version alpha)
  • Large compatibilité
    • Node, Deno, Bun, Cloudflare Workers, Chrome
    • React, Solid.JS, Vite, Next.JS, Tauri
  • Principales caractéristiques
    • Concurrence : grâce à un modèle de concurrence basé sur les fibers, il est possible de créer des applications hautement scalables et à très faible latence
    • Composabilité : permet de construire des logiciels flexibles, faciles à maintenir et lisibles à partir de petits composants réutilisables
    • Sécurité des ressources : permet de gérer en toute sécurité l’acquisition et la libération des ressources, même si le programme échoue
    • Type Safety : met l’accent sur l’inférence de types et la sécurité de type afin d’exploiter pleinement le système de types de TypeScript
    • Gestion des erreurs : permet de traiter les erreurs de façon structurée et fiable grâce à des fonctionnalités intégrées
    • Asynchronicité : permet d’écrire du code qui se présente de la même manière, qu’il soit synchrone ou asynchrone
    • Observabilité : grâce à des capacités complètes de traçage, il devient plus simple de déboguer et surveiller l’exécution des programmes

Pourquoi Effect ?

  • Programmer est difficile
  • Lorsqu’on crée des bibliothèques et des applications, on utilise de nombreux outils pour gérer la complexité
  • Effect propose une nouvelle façon de penser la programmation en TypeScript
  • Les outils de l’écosystème Effect permettent de construire de meilleures applications et bibliothèques
  • Cela aide à mieux comprendre le langage TypeScript et son système de types, tout en rendant les programmes plus fiables et plus faciles à maintenir

Le pattern Effect

  • Dans du code TypeScript classique, on suppose souvent qu’une fonction réussit ou lève une exception
    • Exemple : la fonction divide lève une exception si l’on divise par zéro
  • En regardant uniquement le type, il est impossible de savoir que cette fonction peut lever une exception
  • Ce problème s’amplifie lorsqu’un codebase contient des centaines ou des milliers de fonctions
  • Il est facile d’oublier de gérer les exceptions, et cela devient difficile à maintenir
  • Le compilateur TypeScript constitue la première ligne de défense contre les bugs, les erreurs métier et la complexité générale

Appliquer le pattern Effect

  • L’idée centrale d’Effect est d’utiliser le système de types pour suivre non seulement les valeurs de succès, mais aussi les erreurs et le "contexte"
    • Exemple : la version Effect de la fonction divide ne lève pas d’exception ; elle transmet l’erreur à l’appelant
  • Fournit des mécanismes pour gérer les valeurs de succès et les erreurs
  • Le suivi du contexte permet de fournir des informations supplémentaires à une fonction sans devoir transmettre tous les arguments
    • Exemple : pendant les tests, il est possible de remplacer l’implémentation réelle d’un service externe par un mock
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  

L’écosystème Effect

  • Les idées propres à Effect, combinées à d’autres outils, ont donné naissance à un riche écosystème de bibliothèques qui facilite la création d’applications complexes
  • Ce qui semblait autrefois impossible devient désormais banal
  • L’écosystème Effect se développe rapidement et peut être consulté sur le GitHub d’Effect

Ne réinventez pas la roue

  • Dans le code applicatif TypeScript, on résout souvent les mêmes problèmes de manière répétée
  • Les interactions avec des services externes, le système de fichiers et les bases de données sont des problèmes communs à tous les développeurs d’applications
  • Effect propose un riche écosystème de bibliothèques offrant des solutions standardisées à ces problèmes
  • Sans avoir à installer de multiples dépendances, Effect permet de résoudre de nombreux problèmes d’un seul coup

Résoudre des problèmes concrets

  • Effect s’inspire de Scala et Haskell.
  • Mais l’objectif d’Effect est de fournir une boîte à outils pratique pour résoudre les problèmes du quotidien rencontrés lors de la création d’applications et de bibliothèques TypeScript

Apprendre en s’amusant

  • Apprendre Effect est amusant
  • De nombreux développeurs utilisent déjà Effect en production pour résoudre de vrais problèmes
  • Il est possible de commencer par utiliser une partie de l’écosystème Effect, puis d’exploiter progressivement davantage d’outils
  • Au début, les concepts d’Effect peuvent sembler peu familiers, mais prendre le temps de lire la documentation et de comprendre les concepts de base aidera ensuite à utiliser des outils plus avancés
  • La communauté Effect est toujours prête à aider à apprendre et progresser. Voir Discord ou GitHub

3 commentaires

 
firea32 2024-06-24

On dirait que ça suit une trajectoire assez proche des principes fondamentaux de Rust.

 
toaonly 2024-06-17

Il faut sans doute l’utiliser davantage pour se faire un avis, mais par rapport à fp-ts, c’est bien plus agréable à utiliser.

 
seunggi 2024-06-17

fp-ts a décidé de ne pas développer la version 3.0 et de rejoindre Effect.

Si vous utilisez fp-ts, cela vaut la peine d’envisager Effect.

https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts