Upload
alcides-fonseca
View
3.577
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
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