Pourquoi typer du JavaScript
Xavier Van de Woestyne
derniercri.io
Roadmap
Un peu sur JavaScript
Un peu sur le typage
Quelques solutions
L'analyse statique
Flow
Opinion sur JavaScript
Un langage cool
Même si moi, j'aime beaucoup en dire du mal :v
Enormément d'avantages
- Expressif
- Le futur du multi-platforme
- Client-server (isomorphique)
- Eco-système riche
- Emmergeance de motifs de conception
Beaucoup d'utilisateurs cools
Liste non exhaustive de gens qui me poussent à
considérer JavaScript comme un langage cool.
Quelques inconvénients :'(
- Renommage conceptuel
- Règles d'évaluations hasardeuses
- Typage faible et chelou
- Eco-système riche
Sur le typage
Definitions, mythes
Qu'est ce qu'un type
Un système axiomatique.
Un ensemble de valeurs muni d'opérations
pouvant être:
- Prédéfini/Enuméré
- Paramétré
- Composé/Hiérarchisé
- Abstrait
Introduits par la logiques en réponse au paradoxe
de la théorie (initiale) des ensemble.(Russel)
- Turing complétude du
Lambda-Calcul
- Correspondance formules/types
Mythes
- Obligation de spécifier le type de tout élément utilisé
- Perte de beaucoup de flexibilité
- Compilation obligatoire
- Très "matheux"
Entre types et tests
Un bon système de type n'éradique pas les tests
Malheureusement
Tests faillibles
- Tests confinés (occulte l'environnement)
- Contrat d'exécution raisonné
- Raisonné par un humain
Tests + Types = ♥
Et peut être un jour... des types dépendants :D
en 2099 si tout va bien !!!
Alternatives éprouvées
JavaScript vu comme de l'assembleur
Langages compilés
- Dart
- Haxe
- Js_of_OCaml
- TypeScript
Effet de bord
- Nouvelle syntaxe (proche de ce qu'on aime!)
- Incompatibilité avec l'écosystème (Binding obligatoire)
Sur des énormes code-base... c'est un peu fatiguant.
L'analyse statique
Bénéfice d'une phase avant l'exécution
Analyse statique != compilation
- N'altère pas le code produit
- Une compilation implique généralement
une analyse statique
Outils d'analyse syntaxique
- JSHint, JSLint, ESLint
- Flow
Flow
- Pluggable (
/* @flow */
)
- Préserve la syntaxe de JavaScript
- Extension contrôlée : annotations de types
On se repose sur l'expressivité de JavasSript
Deux interfaçages notables
Apports de Flow
- Typage statique accessible à une grosse code-base
- Très peu voir aucune modification à effectuer
- Jest : super framework de tests unitaires
- Bénéficie de l'avantage des langages typés par annotation
- Ouverture vers les design dirigé par les types
Conclusions
- Il existe des alternatives au JavaScript classique
- Beaucoup de langages emmergeants (nouveau projet)
- Des outils de raisonnements (projet avancé)
- Type is life... lalallalalala
... FIN ! Merci :D
(psst, faites du JS_Of_OCaml, c'est super!!!)