Js_of_ocaml (entre autres)

Xavier Van de Woestyne

derniercri.io

Introduction

Du DHTML à Js_of_ocaml en passant par jQuery

Dégommer la concurrence

Un langage conçu en 10 jours

Ce qui explique sa forme "orientée prototype" et fonctionnelle

DOM 0, welcome DHTML

<a href="#" onclick='alert("Hello World!")'>
  Say hello !
</a>
C'est à partir de ce moment que Javascript à
commencé à traîner sa mauvaise réputation...

AJAX, Bibliothèques et ECMAScript

Applications web

Le monde s'est ouvert aux applications web et Javascript est
devenu un outil "convaincant" pour décrire les interactions clients
à tel point qu'il est devenu l'Assembleur du web.
Certains développeurs préfèrent utiliser leur langage pour décrire des interactions.

Javascript côté serveur

Pourquoi?

Plaire à beaucoup de développeurs...

Compilation vers Javascript

Pour les mêmes raisons que ceux qui se servent de Javascript
côté client, pourquoi apprendre un autre langage ?

Profit

Sucrage syntaxique, analyse statique

Avantage du typage statique

On arrête de se prendre pour un compilateur en écrivant des
milliers de jeux de tests (même s'il en faut toujours, parfois !)

Js_of_ocaml

Enfin, Enfin !

OCaml

Js_of_ocaml s'inscrit dans la suite de logiciel Ocsigen

OCaml en dehors de la fac

Ocsigen

OCaml SIte GENerator
Une bibliothèque libre d'outils pour construire
une application web avec OCaml

Ocsigen

Js_of_ocaml?

Compilateur du byte-code OCaml vers Javascript

Performances

Concurrence

Lwt est un système de multithreading collaboratif

Ecrire du code Javascript en OCaml

La part des choses

Distinction syntaxique au sein du code

ocaml_obj # message
js_obj ## message
new ocaml_class(args)
jsnew javascript_class(args)
"OCaml string"
Js.string "Javascript string"
[|1;2;3|]
Js.array [|1;2;3|]

Apports de OCaml

Le workflow de programmation est réduit

Monades

type 'a t
val return :'a -> 'a t
val bind :'a t -> ('a -> 'b t) -> 'b t
Généralisation sur les types paramétrés
pour permettre la composition

Promises (ou Futures, "no idea")

Composition forte !

Lwt pour la concurrence

let _ =
  let open Lwt_js_events in
    async_loop click Dom_html.document
      (fun event () -> Dom_html.window ## alert (Js.string "Hello"))

Binding de bibliothèques

Jquery statiquement typé

Applications client-serveur

Utilisation d'Ocsigen

Exemple de client-server

Pas possible ici :D

Séparation des couches

Communication forte

Soucis actuels

Il y en a... je l'avoue

Apports réels

Il y en a aussi... je l'affirme

FIN !

Le typage statique est fort !