Top Banner
The Future of Programming Languages Alcides Fonseca Também lança búzios e cura mau olhado. Monday, November 14, 11
118

Future Programming Languages

Sep 01, 2014

Download

Technology

Alcides Fonseca

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Future Programming Languages

The Future ofProgramming Languages

Alcides FonsecaTambém lança búziose cura mau olhado.

Monday, November 14, 11

Page 2: Future Programming Languages

Disclaimer

These opinions are my own and may not reflect future events.

Monday, November 14, 11

Page 3: Future Programming Languages

Roadmap

Monday, November 14, 11

Page 4: Future Programming Languages

RoadmapWhy is language X successful?

Monday, November 14, 11

Page 5: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Monday, November 14, 11

Page 6: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Java.Next

Monday, November 14, 11

Page 7: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Monday, November 14, 11

Page 8: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

Monday, November 14, 11

Page 9: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

DSL

Monday, November 14, 11

Page 10: Future Programming Languages

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

DSL

Esoteric

Monday, November 14, 11

Page 11: Future Programming Languages

Why is language X successful?

Monday, November 14, 11

Page 12: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

Monday, November 14, 11

Page 13: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

• Abstraction and Simplicity (Java, Python)

Monday, November 14, 11

Page 14: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

• Abstraction and Simplicity (Java, Python)

• Killer app/framework (Ruby)

Monday, November 14, 11

Page 15: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

• Abstraction and Simplicity (Java, Python)

• Killer app/framework (Ruby)

• Batteries Included (Python, Matlab)

Monday, November 14, 11

Page 16: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

• Abstraction and Simplicity (Java, Python)

• Killer app/framework (Ruby)

• Batteries Included (Python, Matlab)

• Tooling (VB, Java)

Monday, November 14, 11

Page 17: Future Programming Languages

Why is language X successful?

• Portability (C, Java, Python, ...)

• Abstraction and Simplicity (Java, Python)

• Killer app/framework (Ruby)

• Batteries Included (Python, Matlab)

• Tooling (VB, Java)

• Company Support (VB, C#, ABAP)

Monday, November 14, 11

Page 18: Future Programming Languages

Systems

Monday, November 14, 11

Page 19: Future Programming Languages

Rust

Monday, November 14, 11

Page 20: Future Programming Languages

Rust

Monday, November 14, 11

Page 21: Future Programming Languages

Rust

•No null

Monday, November 14, 11

Page 22: Future Programming Languages

Rust

•No null•Closures

Monday, November 14, 11

Page 23: Future Programming Languages

Rust

•No null•Closures•Blocks

Monday, November 14, 11

Page 24: Future Programming Languages

Rust

•No null•Closures•Blocks•Generics w/ Type Inference

Monday, November 14, 11

Page 25: Future Programming Languages

Rust

•No null•Closures•Blocks•Generics w/ Type Inference•Crates

Monday, November 14, 11

Page 26: Future Programming Languages

Rust

•No null•Closures•Blocks•Generics w/ Type Inference•Crates

Monday, November 14, 11

Page 27: Future Programming Languages

Rust

•No null•Closures•Blocks•Generics w/ Type Inference•Crates

Monday, November 14, 11

Page 28: Future Programming Languages

Plaid

Monday, November 14, 11

Page 29: Future Programming Languages

Plaid

Monday, November 14, 11

Page 30: Future Programming Languages

Plaid

•Lambdas

Monday, November 14, 11

Page 31: Future Programming Languages

Plaid

•Lambdas•Closures

Monday, November 14, 11

Page 32: Future Programming Languages

Plaid

•Lambdas•Closures•Access Permissions

Monday, November 14, 11

Page 33: Future Programming Languages

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full

Monday, November 14, 11

Page 34: Future Programming Languages

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full•Pattern Matching

Monday, November 14, 11

Page 35: Future Programming Languages

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full•Pattern Matching

Monday, November 14, 11

Page 36: Future Programming Languages

Rust vs Plaid

Monday, November 14, 11

Page 37: Future Programming Languages

Rust vs Plaid

Research-level

Monday, November 14, 11

Page 38: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

Monday, November 14, 11

Page 39: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

C/LLVM

Monday, November 14, 11

Page 40: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Monday, November 14, 11

Page 41: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissions

Monday, November 14, 11

Page 42: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Monday, November 14, 11

Page 43: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Crates

Monday, November 14, 11

Page 44: Future Programming Languages

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Rust vs C

Crates

Monday, November 14, 11

Page 45: Future Programming Languages

Java.next()

Monday, November 14, 11

Page 46: Future Programming Languages

ATM

Monday, November 14, 11

Page 47: Future Programming Languages

ATM

• JRuby

Monday, November 14, 11

Page 48: Future Programming Languages

ATM

• JRuby

• Mirah (Duby)

Monday, November 14, 11

Page 49: Future Programming Languages

ATM

• JRuby

• Mirah (Duby)

• Gosu

Monday, November 14, 11

Page 50: Future Programming Languages

ATM

• JRuby

• Mirah (Duby)

• Gosu

• Scala

Monday, November 14, 11

Page 51: Future Programming Languages

Kotlin

By Jetbrains

Monday, November 14, 11

Page 52: Future Programming Languages

Kotlin• Reified Generics

By Jetbrains

Monday, November 14, 11

Page 53: Future Programming Languages

Kotlin• Reified Generics

• NullablesBy Jetbrains

Monday, November 14, 11

Page 54: Future Programming Languages

Kotlin• Reified Generics

• Nullables

• Type Inference

By Jetbrains

Monday, November 14, 11

Page 55: Future Programming Languages

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

By Jetbrains

Monday, November 14, 11

Page 56: Future Programming Languages

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

• Extension Functions

By Jetbrains

Monday, November 14, 11

Page 57: Future Programming Languages

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

• Extension Functions

Only with support from other IDEs

By Jetbrains

Monday, November 14, 11

Page 58: Future Programming Languages

XtendBy Eclipse

Monday, November 14, 11

Page 59: Future Programming Languages

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Page 60: Future Programming Languages

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Page 61: Future Programming Languages

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Page 62: Future Programming Languages

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Page 63: Future Programming Languages

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

Only with a great framework

By Eclipse

Monday, November 14, 11

Page 64: Future Programming Languages

CeylonBy Redhat

Monday, November 14, 11

Page 65: Future Programming Languages

Ceylon

• Syntax similar to Java

By Redhat

Monday, November 14, 11

Page 66: Future Programming Languages

Ceylon

• Syntax similar to Java

• Tree-like DSLs

By Redhat

Monday, November 14, 11

Page 67: Future Programming Languages

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

By Redhat

Monday, November 14, 11

Page 68: Future Programming Languages

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

By Redhat

Monday, November 14, 11

Page 69: Future Programming Languages

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

No chance

By Redhat

Monday, November 14, 11

Page 70: Future Programming Languages

Java.next conclusions

Monday, November 14, 11

Page 71: Future Programming Languages

Java.next conclusions

• Java.next needs good tooling

Monday, November 14, 11

Page 72: Future Programming Languages

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

Monday, November 14, 11

Page 73: Future Programming Languages

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

• They are all similar

Monday, November 14, 11

Page 74: Future Programming Languages

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

• They are all similar

Java 8

Monday, November 14, 11

Page 75: Future Programming Languages

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

• They are all similar

Java 8 Scala for niches

Monday, November 14, 11

Page 76: Future Programming Languages

Browser

Monday, November 14, 11

Page 77: Future Programming Languages

Harmony

Monday, November 14, 11

Page 78: Future Programming Languages

Harmony

Monday, November 14, 11

Page 79: Future Programming Languages

Harmony

Monday, November 14, 11

Page 80: Future Programming Languages

Harmony

Monday, November 14, 11

Page 81: Future Programming Languages

DartBy Google

Monday, November 14, 11

Page 82: Future Programming Languages

DartBy Google

Monday, November 14, 11

Page 83: Future Programming Languages

Dart vs Harmony

Monday, November 14, 11

Page 84: Future Programming Languages

Dart vs Harmony

• Tooling

Monday, November 14, 11

Page 85: Future Programming Languages

Dart vs Harmony

• Tooling

• Other browsers

Monday, November 14, 11

Page 86: Future Programming Languages

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

Monday, November 14, 11

Page 87: Future Programming Languages

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

• Fast operations

Monday, November 14, 11

Page 88: Future Programming Languages

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

• Fast operations

Language heterogeneity

Monday, November 14, 11

Page 89: Future Programming Languages

Parallel languages

Monday, November 14, 11

Page 90: Future Programming Languages

Fortress

Monday, November 14, 11

Page 91: Future Programming Languages

Fortress

Monday, November 14, 11

Page 92: Future Programming Languages

Fortress

Wrong development approach

Monday, November 14, 11

Page 93: Future Programming Languages

Parasailfor Phil in Philosopher_Index concurrent loop const Left_Fork := Phil; const Right_Fork := Phil mod Num_Phils + 1;

while True loop // Until overall timer terminates procedure Display(Context.IO.Standard_Output, "Philosopher " | Phil | " is thinking\n"); Delay(Clock, Next(Context.Random)); // Think then Pick_Up_Fork(Forks[Left_Fork], #is_left_fork); || Pick_Up_Fork(Forks[Right_Fork], #is_right_fork); then Display(Context.IO.Standard_Output, "Philosopher " | Phil | " is eating\n"); Delay(Clock, Next(Context.Random)); // Eat then Put_Down_Fork(Forks[Left_Fork]); || Put_Down_Fork(Forks[Right_Fork]); end loop; end loop; end procedure Dinner_Party;

Monday, November 14, 11

Page 94: Future Programming Languages

Parasailfor Phil in Philosopher_Index concurrent loop const Left_Fork := Phil; const Right_Fork := Phil mod Num_Phils + 1;

while True loop // Until overall timer terminates procedure Display(Context.IO.Standard_Output, "Philosopher " | Phil | " is thinking\n"); Delay(Clock, Next(Context.Random)); // Think then Pick_Up_Fork(Forks[Left_Fork], #is_left_fork); || Pick_Up_Fork(Forks[Right_Fork], #is_right_fork); then Display(Context.IO.Standard_Output, "Philosopher " | Phil | " is eating\n"); Delay(Clock, Next(Context.Random)); // Eat then Put_Down_Fork(Forks[Left_Fork]); || Put_Down_Fork(Forks[Right_Fork]); end loop; end loop; end procedure Dinner_Party; Syntax + Tooling

Monday, November 14, 11

Page 95: Future Programming Languages

Æminiumval (immutable Integer >> immutable Integer) -> immutable Integer fib = fn (immutable Integer >> immutable Integer n) => { match (n <= 2) { case True { 1; } case False { fib(n - 1) + fib(n - 2); } } };

outside/inside RW R

-

R

RW

unique unique

full immutable

share pure

Monday, November 14, 11

Page 96: Future Programming Languages

Æminiumval (immutable Integer >> immutable Integer) -> immutable Integer fib = fn (immutable Integer >> immutable Integer n) => { match (n <= 2) { case True { 1; } case False { fib(n - 1) + fib(n - 2); } } };

outside/inside RW R

-

R

RW

unique unique

full immutable

share pureHard to write

Monday, November 14, 11

Page 97: Future Programming Languages

DSLs

Monday, November 14, 11

Page 98: Future Programming Languages

Opabroadcast(author) = do Network.broadcast({~author text=Dom.get_value(#entry)}, room) Dom.clear_value(#entry)

start() = author = Random.string(8) <div id=#header><div id=#logo></></> <div id=#conversation onready={_ -> Network.add_callback(user_update, room)}></> <div id=#footer> <input id=#entry onnewline={_ -> broadcast(author)} /> <div class="button" onclick={_ -> broadcast(author)}>Post</> </>

server = Server.one_page_bundle("Chat", [@static_resource_directory("resources")], ["resources/css.css"], start)

Monday, November 14, 11

Page 99: Future Programming Languages

Opabroadcast(author) = do Network.broadcast({~author text=Dom.get_value(#entry)}, room) Dom.clear_value(#entry)

start() = author = Random.string(8) <div id=#header><div id=#logo></></> <div id=#conversation onready={_ -> Network.add_callback(user_update, room)}></> <div id=#footer> <input id=#entry onnewline={_ -> broadcast(author)} /> <div class="button" onclick={_ -> broadcast(author)}>Post</> </>

server = Server.one_page_bundle("Chat", [@static_resource_directory("resources")], ["resources/css.css"], start)

Hard to separate concerns

Monday, November 14, 11

Page 100: Future Programming Languages

Frink(6 years + 9 months)

Monday, November 14, 11

Page 101: Future Programming Languages

Frink(6 years + 9 months)

tw[v0, alpha, h0 = 1 meter, hw = 10 feet, g=gravity] := {   vy0 = v0 sin[alpha]   radical = (2 g (h0 - hw) + vy0^2)

   if (radical < 0 mph^2)      return["No solution"]

   radical = radical^(1/2)

   return [(vy0 - radical)/g, (vy0 + radical)/g]}

Monday, November 14, 11

Page 102: Future Programming Languages

Frink(6 years + 9 months)

tw[v0, alpha, h0 = 1 meter, hw = 10 feet, g=gravity] := {   vy0 = v0 sin[alpha]   radical = (2 g (h0 - hw) + vy0^2)

   if (radical < 0 mph^2)      return["No solution"]

   radical = radical^(1/2)

   return [(vy0 - radical)/g, (vy0 + radical)/g]}

Best calculator ever!

Monday, November 14, 11

Page 103: Future Programming Languages

Magpie

Monday, November 14, 11

Page 104: Future Programming Languages

Magpie

• Dynamic language (Similar to Mirah)

Monday, November 14, 11

Page 105: Future Programming Languages

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

Monday, November 14, 11

Page 106: Future Programming Languages

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

• Syntax extensions

Monday, November 14, 11

Page 107: Future Programming Languages

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

• Syntax extensions

Too dynamic

Monday, November 14, 11

Page 108: Future Programming Languages

OMeta

Monday, November 14, 11

Page 109: Future Programming Languages

OMeta

Great for DSLs

Monday, November 14, 11

Page 110: Future Programming Languages

Esoteric

Monday, November 14, 11

Page 111: Future Programming Languages

Wheeler

Monday, November 14, 11

Page 112: Future Programming Languages

Wheeler

Monday, November 14, 11

Page 113: Future Programming Languages

Wheeler

Monday, November 14, 11

Page 114: Future Programming Languages

Wheeler

?!?!

Monday, November 14, 11

Page 115: Future Programming Languages

Clay

Monday, November 14, 11

Page 116: Future Programming Languages

Clay

Winner

Monday, November 14, 11

Page 117: Future Programming Languages

C will not dieanytime soon.

Monday, November 14, 11

Page 118: Future Programming Languages

Thank you

Alcides Fonsecahttp://alcidesfonseca.com

Monday, November 14, 11