dawn of - github pages · immutable by default pattern matching types functions compiler toolchain...

32
@sander_spies Dawn of

Upload: vukhue

Post on 27-Dec-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

@sander_spies

Dawn of

Page 2: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

The earliest prototypes of

React

were written in

Standard ML

Page 3: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

2013

var Foo = React.createClass({ render: function() { return <Bar />; } });

Page 4: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Our quest for maintainable applications has

led us to similar concepts found in ML

Page 5: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

let peek = cat => { if (Math.random() > 0.5) { cat.lives--; } };

Page 6: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

/* @flow */ type schrodingersCat = { lives: number };

let peek = (cat:schrodingersCat) => { if (Math.random() > 0.5) { return {...cat, lives: cat.lives - 1}; } return cat; };

Page 7: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

/* @flow */ type animal = "cat" | "dog";

let petAnimal = (animal:animal) => { switch (animal) { case "cat": /*...*/ break; case "dog": /*...*/ break; } };

Page 8: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

<Match pattern="/:user" render={(matchProps) => ( <div> <Match pattern="/about" component={About}/> <Match pattern="/company" component={Company}/> </div> )}/>

Page 9: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Types, immutability and pattern matching

reduce accidental complexity

Page 10: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,
Page 11: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

+

2016

Page 12: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Meanwhile at…

Concurrent React Prototype in OCaml@jordwalke

Page 13: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Immutable by defaultPattern matching

TypesFunctions

Compiler toolchainCatch issues at compile time

Also objects, classes, modules, language extensions, and more

Compile to JS/native/kernel

Page 14: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

has the defaults we want

Page 15: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

JS developer trying to grasp OCaml syntax

Page 16: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

What if…

Page 17: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,
Page 18: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

JavaScript OCamlFlow Reason

Adopting features of ML

Becoming familiar to JS developers

Syntax + tooling

A lot of work

Page 19: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

“Let’s drop everything I know”

- nobody ever

Page 20: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Syntax

Build tooling

Sharing

Page 21: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Syntax

Tokenizer Parser OCaml AST

“Pretty” printer

Backend

OCaml compiler toolchain

Type System

Page 22: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,
Page 23: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Rebel

git clone https://github.com/reasonml/RebelExampleProject

Use package.json to configure everything

Target web or native

Page 24: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Editor support

Vim, Emacs, Atom, Sublime and soon VS Code

Building on shoulders of existing OCaml tools

Page 25: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Other tooling

rtop - a repl for Reason

refmt - pretty printer

rejs - JS to Reason

Page 26: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Example

Page 27: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

type schrodingersCat = { lives: int };

let peek cat => { if (Random.bool ()) { {...cat, lives: cat.lives - 1}; } else {

cat; }

};

Page 28: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

type animal = Cat | Dog | Bird;

let petAnimal animal => { switch (animal) { | Cat => {} | Dog => {} } };

Page 29: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Building on familiarity

Page 30: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,
Page 31: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Reason with React BindingsPreview

Page 32: Dawn of - GitHub Pages · Immutable by default Pattern matching Types Functions Compiler toolchain Catch issues at compile time Also objects, classes, modules, language extensions,

Get started:

https://github.com/reasonml/RebelExampleProject

Ask questions:

https://gitter.im/facebook/reason

@sander_spies