95
@alpacalang Static Typing on the BEAM

Alpaca EEF2017 slides

  • Upload
    j14159

  • View
    61

  • Download
    0

Embed Size (px)

Citation preview

@alpacalang

Static Typing on the BEAM

@alpacalang

Who am I?

j14159

Director of Platform Engineering

@alpacalang

What Is Alpaca?• Statically Typed

• Functional

• http://alpaca-lang.org

@alpacalang

What Is Alpaca?• Type inference (Hindley-Milner)

• ML-family inspired

• Trying to stay simple and obvious

• Started January 2016, open-sourced June

@alpacalang

It is not…• Standard ML

• OCaml

• Haskell

@alpacalang

Doesn’t care about…• Higher kinded types

• Dependent typing

• Effect typing

• Ad-hoc polymorphism (e.g. typeclasses)

@alpacalang

A masochist’s guideto learning

Damas-Hindley-Milner

@alpacalang

Why (build it)?

@alpacalang

❤ Erlang

❤ Static Typing

@alpacalang

Types and patterns

@alpacalang

Types and patterns

@alpacalang

Uh-oh…

@alpacalang

Testing

@alpacalang

Stealing from Erlang❤ Erlang

❤ Pattern matching

❤ Tests

@alpacalang

Static typing

CC0

Chri

stop

h Br

aun

@alpacalang

Tests and Types

CC BY-SA 2.5, https://commons.wikimedia.org/w/index.php?curid=10407097

@alpacalang

Algebraic Data Types (ADTs)

❤ pattern matching

tests

@alpacalang

Actual Alpaca

@alpacalang

Actual Alpaca

@alpacalang

What’s important?

@alpacalang

Safety

CC0

Chri

stop

h Br

aun

@alpacalang

Utility

Copy

righ

t St

eve

Bran

am, cl

oseg

rain

.com

@alpacalang

Simplicity

CC-B

Y-SA

3.0

Jan

ekpf

eife

r

@alpacalang

@alpacalang

Why…?• Target BEAM?

• Borrow from ML?

@alpacalang

Why BEAM?• VM

• Core Erlang

@alpacalang

Why ML?

Brevity

@alpacalang

Unification

@alpacalang

And a few similarities

Some Differences

@alpacalang

Some differences

@alpacalang

Maps

@alpacalang

Maps

@alpacalang

ADTs

@alpacalang

ADTs

@alpacalang

ADTs

@alpacalang

ADTs

@alpacalang

Don’t like it. Not one bit.

Any

@alpacalang

We hates it

@alpacalang

Matching

@alpacalang

Matching

@alpacalang

Type tests

@alpacalang

Type tests

@alpacalang

Clauses

@alpacalang

Clauses

@alpacalang

Clauses

@alpacalang

Clauses

@alpacalang

FFI

@alpacalang

FFI

@alpacalang

FFI

@alpacalang

My favourites• typed messages

• records with row polymorphism

@alpacalang

Typed Messages

@alpacalang

Erlang

@alpacalang

Alpaca

@alpacalang

receiver 'message_type 'return_type

@alpacalang

receiver 'message_type 'return_type

pid 'message_type

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

unify(int, receiver atom int)

receiver atom int

@alpacalang

Receivers

@alpacalang

Receivers

@alpacalang

unify(A, receiver B C)

receiver B A

@alpacalang

Spawning

@alpacalang

pid ‘a

@alpacalang

Spawning

@alpacalang

No receiver?

@alpacalang

Row polymorphism!

Records

@alpacalang

Row polymorphism

@alpacalang

Row polymorphism

@alpacalang

Row polymorphism

@alpacalang

Row polymorphism

@alpacalang

Row polymorphism

@alpacalang

Transformations

@alpacalang

Transformations

@alpacalang

Trade-offs

@alpacalang

Processes

CC-B

Y-SA

4.0

Seo

ul M

etro

poli

tan

Fire

& D

isas

ter

Head

quar

ters

@alpacalang

Code Reloading

CC-B

Y 2.

0 Ro

bert

Fre

iber

ger

@alpacalang

OTP Interop?

CC-B

Y-SA

3.0

Mag

nus

Mans

ke

@alpacalang

Compiler StructureFront End

AST Generation

Back End

@alpacalang

Compiler Back EndTyper

Match Exhaustiveness

Code Generation

@alpacalang

Compiler Back Endmodule_name.alp

alpaca_module_name.beam

@alpacalang

Code of Conduct v1.4

Contributor Covenant

@alpacalang

Contributors

@alpacalang

Accessibility

@alpacalang

Growth

CC-B

Y-SA

3.0

Dor

otan

m

@alpacalang

Communicating• https://github.com/alpaca-lang

• #alpaca-lang on freenode.net

• Google Group https://groups.google.com/forum/#!forum/alpaca-lang

@alpacalang

Where to help?

CC-B

Y-SA

3.0

Myk

ola

Swar

nyk

@alpacalang

Community Projects• rebar3 plugin

• Alpaca shell

• emacs mode

• VSCode extension

@alpacalang

Where to help?• standard library

• tooling (editors, etc)

• module system ideas

@alpacalang

Where to help?• Alpaca examples

• libraries using the FFI

• documentation

• participate in feature discussions

• use it and break it! We like finding bugs!

@alpacalang

Where to help?

CC-B

Y-SA

3.0

Myk

ola

Swar

nyk

@alpacalang

More details?• Language tour:https://github.com/alpaca-lang/alpaca/blob/master/Tour.md

• Where the typer started:http://okmij.org/ftp/ML/generalization.html

• Row polymorphism:https://www.cs.cmu.edu/~neelk/rows.pdf