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

Future Programming Languages

Embed Size (px)

DESCRIPTION

 

Citation preview

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