super 8 languages for making moviessuper 8 languages for making movies (a functional pearl) leif...

86
Super 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Mahias Felleisen PLT @ Northeastern University ICFP - Sept 4, 2017

Upload: others

Post on 04-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8 Languages for Making Movies(A Functional Pearl)

Leif AndersenStephen Chang

Mahias Felleisen

PLT @ Northeastern University

ICFP - Sept 4, 2017

Page 2: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8: Languages for Making Movies

Super, 8 Languages for Making Movies

Page 3: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8: Languages for Making Movies

A DSL for Scripting Videos

Super, 8 Languages for Making Movies

DSL Towers to Solve Multitudes of Problems

Page 4: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8: Languages for Making Movies

A DSL for Scripting Videos

Super, 8 Languages for Making Movies

DSL Towers to Solve Multitudes of Problems

Page 5: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 6: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 7: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 8: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 9: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 10: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 11: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 12: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

One down

Page 13: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

One down19 more to go…

Page 14: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 15: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 16: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We NeedAutomation

Page 17: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We NeedAutomationAbstraction

Page 18: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

e Landscape

Tool Example Experience

Plugin-Ins Blender Script, AE Script

UI Automation(Macros)

Apple Script

Shell Scripts FFmpeg, AVISynth

Page 19: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

e Landscape

Tool Example Experience

Plugin-Ins Blender Script, AE Script

UI Automation(Macros)

Apple Script

Shell Scripts FFmpeg, AVISynth

Page 20: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

e Landscape

Tool Example Experience

Plugin-Ins Blender Script, AE Script

UI Automation(Macros)

Apple Script

Shell Scripts FFmpeg, AVISynth

Page 21: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

e Landscape

Tool Example Experience

Plugin-Ins Blender Script, AE Script

UI Automation(Macros)

Apple Script

Shell Scripts FFmpeg, AVISynth

Page 22: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Video Editor

Page 23: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Functional Programming Language*

*But bad with abstractions.

Page 24: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Video,the programming language

Page 25: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 26: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Primitives

Page 27: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

List Comprehensions

Page 28: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Modules

Page 29: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 30: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Functions

Page 31: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 32: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 33: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 34: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Writing Video+ Editing Talks

(RacketCon 2016)< Editing Talks

Manually(RacketCon 2015)

Page 35: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8: Languages for Making Movies

A DSL for Scripting Videos

Super, 8 Languages for Making Movies

DSL Towers to Solve Multitudes of Problems

Page 36: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Super 8: Languages for Making Movies

A DSL for Scripting Videos

Super, 8 Languages for Making Movies

DSL Towers to Solve Multitudes of Problems

Page 37: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Video,the tower of languages

Page 38: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

FFmpegMLT

Video

Page 39: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

FFmpegMLT

Video

Page 40: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

Page 41: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

Page 42: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

DSLs are the

"Ultimate Abstraction"

Paul Hudak

Page 43: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem… V

Page 44: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

V

Page 45: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

Towerof DSLs

V

Page 46: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Towerof DSLs

Language Oriented

Programming

Page 47: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We want to make DSLs quickly…

Use Racket, a programmableprogramming language

MLT FFmpeg

Page 48: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic Inheritance

Page 49: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic InheritanceMovie Script

Video Implementation

Racket

Page 50: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic InheritanceMovie Script

Video Implementation

Racket

Re-export construct

Page 51: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic InheritanceMovie Script

Video Implementation

Racket

Re-export construct

Remove construct

Page 52: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic InheritanceMovie Script

Video Implementation

Racket

Re-export construct

Remove construct

New construct

Page 53: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We make DSLs using

Linguistic InheritanceMovie Script

Video Implementation

Racket

Re-export construct

Remove construct

New construct

Change construct

Page 54: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Change construct

Page 55: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Interposition Points

#lang video

logotalk

;; Where(define logo ...)(define talk ...)

(module anon video (#%module-begin

logotalk(define logo ...)(define talk ...)))

parses

Page 56: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Interposition Points

(module anon video (#%module-begin

logotalk(define logo ...)(define talk ...)))

(module anon racket (#%module-begin

(require vidlib)(define logo ...)(define talk

...)(vid-begin vidlogotalk)))

elaborates

Page 57: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Implementing Interposition Points#lang racket

Page 58: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

FFI

Page 59: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

An FFI DSL

mlt_repositorymlt_factory_init(const char *directory);

(Scheme Wrksp., 2004)

Page 60: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

An FFI DSL

mlt_repositorymlt_factory_init(const char *directory);

(define-mlt mlt-factory-init (_fun [p : _path]

-> [ret : _mlt-repository/null]-> (maybe-error? ret)))

(Scheme Wrksp., 2004)

Page 61: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

An Object DSL

(define-mlt mlt-factory-init ...)(define-mlt mlt-factory-close ...)

(define-constructor clip video ... mlt-factory-init ...

mlt-factory-close ...)

Page 62: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

MLT FFmpeg

Page 63: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Documentation

Page 64: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

A Documentation DSL

(ICFP, 2009)

Page 65: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

A Documentation DSL

#lang video/documentation@title{Video: The Language}@(defmodulelang video)

Video Language (or VidLang, sometimes referredto as just Video) is a DSL for editing...videos.It aims to merge the capabilities of a traditional

(ICFP, 2009)

Page 66: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

MLT FFmpeg

Page 67: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Types

Page 68: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

(clip "clip.mp4"#:start 0#:end 50)

Page 69: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

(cut-producer

#:start 0#:end 100)

(clip "clip.mp4"#:start 0#:end 50)

Page 70: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

(cut-producer

#:start 0#:end 100)

(clip "clip.mp4"#:start 0#:end 50)

Page 71: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

A Typed DSL

Page 72: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

A Typed DSL

(POPL, 2016)

Page 73: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

A Type Implementation DSL

(define-typed-syntax (clip f) ≫ [⊢ f ≫ _ ⇐ File] #:where n (length f) ------------------------------------- [⊢ (untyped:clip f) ⇒ (Producer n)])

(POPL, 2016)

Page 74: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

MLT FFmpeg

Page 75: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…DSL V

Page 76: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

DSL V

Page 77: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

syntax-parseA DSL for making DSLs

DSL V

(ICFP, 2010)

Page 78: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

MLT FFmpeg

Page 79: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…Editor V

Page 80: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

Editor V

Page 81: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

We have a problem…

We want to solve it in theproblem domain's own language…

? We make DSLs using

Linguistic Inheritance ?

Editor V

Page 82: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 83: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept
Page 84: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

Future Work

Page 85: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

MLT FFmpeg

Page 86: Super 8 Languages for Making MoviesSuper 8 Languages for Making Movies (A Functional Pearl) Leif Andersen Stephen Chang Ma hias Felleisen PLT @ Northeastern University ICFP - Sept

anks For Watching

http://lang.video@videolang We make DSLs using

Linguistic Inheritance

MLT FFmpeg