Future Programming Languages

Post on 01-Sep-2014

3.571 views 0 download

Tags:

description

 

Transcript of Future Programming Languages

The Future ofProgramming Languages

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

Monday, November 14, 11

Disclaimer

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

Monday, November 14, 11

Roadmap

Monday, November 14, 11

RoadmapWhy is language X successful?

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Java.Next

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

DSL

Monday, November 14, 11

RoadmapWhy is language X successful?

Systems

Java.Next

Browser

Parallel

DSL

Esoteric

Monday, November 14, 11

Why is language X successful?

Monday, November 14, 11

Why is language X successful?

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

Monday, November 14, 11

Why is language X successful?

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

• Abstraction and Simplicity (Java, Python)

Monday, November 14, 11

Why is language X successful?

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

• Abstraction and Simplicity (Java, Python)

• Killer app/framework (Ruby)

Monday, November 14, 11

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

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

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

Systems

Monday, November 14, 11

Rust

Monday, November 14, 11

Rust

Monday, November 14, 11

Rust

•No null

Monday, November 14, 11

Rust

•No null•Closures

Monday, November 14, 11

Rust

•No null•Closures•Blocks

Monday, November 14, 11

Rust

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

Monday, November 14, 11

Rust

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

Monday, November 14, 11

Rust

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

Monday, November 14, 11

Rust

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

Monday, November 14, 11

Plaid

Monday, November 14, 11

Plaid

Monday, November 14, 11

Plaid

•Lambdas

Monday, November 14, 11

Plaid

•Lambdas•Closures

Monday, November 14, 11

Plaid

•Lambdas•Closures•Access Permissions

Monday, November 14, 11

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full

Monday, November 14, 11

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full•Pattern Matching

Monday, November 14, 11

Plaid

•Lambdas•Closures•Access Permissions

• immutable, unique, full•Pattern Matching

Monday, November 14, 11

Rust vs Plaid

Monday, November 14, 11

Rust vs Plaid

Research-level

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

C/LLVM

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissions

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Crates

Monday, November 14, 11

Rust vs Plaid

Research-levelCompany-supported

JVMC/LLVM

Verbose on permissionsLimited on permissions

Rust vs C

Crates

Monday, November 14, 11

Java.next()

Monday, November 14, 11

ATM

Monday, November 14, 11

ATM

• JRuby

Monday, November 14, 11

ATM

• JRuby

• Mirah (Duby)

Monday, November 14, 11

ATM

• JRuby

• Mirah (Duby)

• Gosu

Monday, November 14, 11

ATM

• JRuby

• Mirah (Duby)

• Gosu

• Scala

Monday, November 14, 11

Kotlin

By Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

By Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

• NullablesBy Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

• Nullables

• Type Inference

By Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

By Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

• Extension Functions

By Jetbrains

Monday, November 14, 11

Kotlin• Reified Generics

• Nullables

• Type Inference

• Pattern Matching

• Extension Functions

Only with support from other IDEs

By Jetbrains

Monday, November 14, 11

XtendBy Eclipse

Monday, November 14, 11

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

By Eclipse

Monday, November 14, 11

Xtend

• Pattern Matching

• Extension Functions

• Multi dispatch (visitor)

Only with a great framework

By Eclipse

Monday, November 14, 11

CeylonBy Redhat

Monday, November 14, 11

Ceylon

• Syntax similar to Java

By Redhat

Monday, November 14, 11

Ceylon

• Syntax similar to Java

• Tree-like DSLs

By Redhat

Monday, November 14, 11

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

By Redhat

Monday, November 14, 11

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

By Redhat

Monday, November 14, 11

Ceylon

• Syntax similar to Java

• Tree-like DSLs

• Better macro/annotations

No chance

By Redhat

Monday, November 14, 11

Java.next conclusions

Monday, November 14, 11

Java.next conclusions

• Java.next needs good tooling

Monday, November 14, 11

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

Monday, November 14, 11

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

• They are all similar

Monday, November 14, 11

Java.next conclusions

• Java.next needs good tooling

• There are too many choices

• They are all similar

Java 8

Monday, November 14, 11

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

Browser

Monday, November 14, 11

Harmony

Monday, November 14, 11

Harmony

Monday, November 14, 11

Harmony

Monday, November 14, 11

Harmony

Monday, November 14, 11

DartBy Google

Monday, November 14, 11

DartBy Google

Monday, November 14, 11

Dart vs Harmony

Monday, November 14, 11

Dart vs Harmony

• Tooling

Monday, November 14, 11

Dart vs Harmony

• Tooling

• Other browsers

Monday, November 14, 11

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

Monday, November 14, 11

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

• Fast operations

Monday, November 14, 11

Dart vs Harmony

• Tooling

• Other browsers

• Complex projects

• Fast operations

Language heterogeneity

Monday, November 14, 11

Parallel languages

Monday, November 14, 11

Fortress

Monday, November 14, 11

Fortress

Monday, November 14, 11

Fortress

Wrong development approach

Monday, November 14, 11

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

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

Æ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

Æ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

DSLs

Monday, November 14, 11

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

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

Frink(6 years + 9 months)

Monday, November 14, 11

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

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

Magpie

Monday, November 14, 11

Magpie

• Dynamic language (Similar to Mirah)

Monday, November 14, 11

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

Monday, November 14, 11

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

• Syntax extensions

Monday, November 14, 11

Magpie

• Dynamic language (Similar to Mirah)

• Multi-methods

• Syntax extensions

Too dynamic

Monday, November 14, 11

OMeta

Monday, November 14, 11

OMeta

Great for DSLs

Monday, November 14, 11

Esoteric

Monday, November 14, 11

Wheeler

Monday, November 14, 11

Wheeler

Monday, November 14, 11

Wheeler

Monday, November 14, 11

Wheeler

?!?!

Monday, November 14, 11

Clay

Monday, November 14, 11

Clay

Winner

Monday, November 14, 11

C will not dieanytime soon.

Monday, November 14, 11

Thank you

Alcides Fonsecahttp://alcidesfonseca.com

Monday, November 14, 11