Your SlideShare is downloading. ×
Future Programming Languages
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Future Programming Languages

3,151
views

Published on

Published in: Technology

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,151
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
53
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. The Future of Programming Languages Alcides Fonseca Também lança búzios e cura mau olhado.Monday, November 14, 11
  • 2. Disclaimer These opinions are my own and may not reflect future events.Monday, November 14, 11
  • 3. RoadmapMonday, November 14, 11
  • 4. Roadmap Why is language X successful?Monday, November 14, 11
  • 5. Roadmap Why is language X successful? SystemsMonday, November 14, 11
  • 6. Roadmap Why is language X successful? Systems Java.NextMonday, November 14, 11
  • 7. Roadmap Why is language X successful? Systems Java.Next BrowserMonday, November 14, 11
  • 8. Roadmap Why is language X successful? Systems Java.Next Browser ParallelMonday, November 14, 11
  • 9. Roadmap Why is language X successful? Systems Java.Next Browser Parallel DSLMonday, November 14, 11
  • 10. Roadmap Why is language X successful? Systems Java.Next Browser Parallel DSL EsotericMonday, November 14, 11
  • 11. Why is language X successful?Monday, November 14, 11
  • 12. Why is language X successful? • Portability (C, Java, Python, ...)Monday, November 14, 11
  • 13. Why is language X successful? • Portability (C, Java, Python, ...) • Abstraction and Simplicity (Java, Python)Monday, November 14, 11
  • 14. Why is language X successful? • Portability (C, Java, Python, ...) • Abstraction and Simplicity (Java, Python) • Killer app/framework (Ruby)Monday, November 14, 11
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. SystemsMonday, November 14, 11
  • 19. RustMonday, November 14, 11
  • 20. RustMonday, November 14, 11
  • 21. Rust •No nullMonday, November 14, 11
  • 22. Rust •No null •ClosuresMonday, November 14, 11
  • 23. Rust •No null •Closures •BlocksMonday, November 14, 11
  • 24. Rust •No null •Closures •Blocks •Generics w/ Type InferenceMonday, November 14, 11
  • 25. Rust •No null •Closures •Blocks •Generics w/ Type Inference •CratesMonday, November 14, 11
  • 26. Rust •No null •Closures •Blocks •Generics w/ Type Inference •CratesMonday, November 14, 11
  • 27. Rust •No null •Closures •Blocks •Generics w/ Type Inference •CratesMonday, November 14, 11
  • 28. PlaidMonday, November 14, 11
  • 29. PlaidMonday, November 14, 11
  • 30. Plaid •LambdasMonday, November 14, 11
  • 31. Plaid •Lambdas •ClosuresMonday, November 14, 11
  • 32. Plaid •Lambdas •Closures •Access PermissionsMonday, November 14, 11
  • 33. Plaid •Lambdas •Closures •Access Permissions • immutable, unique, fullMonday, November 14, 11
  • 34. Plaid •Lambdas •Closures •Access Permissions • immutable, unique, full •Pattern MatchingMonday, November 14, 11
  • 35. Plaid •Lambdas •Closures •Access Permissions • immutable, unique, full •Pattern MatchingMonday, November 14, 11
  • 36. Rust vs PlaidMonday, November 14, 11
  • 37. Rust vs Plaid Research-levelMonday, November 14, 11
  • 38. Rust vs Plaid Company-supported Research-levelMonday, November 14, 11
  • 39. Rust vs Plaid Company-supported Research-level C/LLVMMonday, November 14, 11
  • 40. Rust vs Plaid Company-supported Research-level C/LLVM JVMMonday, November 14, 11
  • 41. Rust vs Plaid Company-supported Research-level C/LLVM JVM Verbose on permissionsMonday, November 14, 11
  • 42. Rust vs Plaid Company-supported Research-level C/LLVM JVM Limited on permissions Verbose on permissionsMonday, November 14, 11
  • 43. Rust vs Plaid Company-supported Research-level C/LLVM JVM Limited on permissions Verbose on permissions CratesMonday, November 14, 11
  • 44. Rust vs Plaid Company-supported Research-level C/LLVM JVM Limited on permissions Verbose on permissions Crates Rust vs CMonday, November 14, 11
  • 45. Java.next()Monday, November 14, 11
  • 46. ATMMonday, November 14, 11
  • 47. ATM • JRubyMonday, November 14, 11
  • 48. ATM • JRuby • Mirah (Duby)Monday, November 14, 11
  • 49. ATM • JRuby • Mirah (Duby) • GosuMonday, November 14, 11
  • 50. ATM • JRuby • Mirah (Duby) • Gosu • ScalaMonday, November 14, 11
  • 51. Kotlin By JetbrainsMonday, November 14, 11
  • 52. Kotlin • Reified Generics By JetbrainsMonday, November 14, 11
  • 53. Kotlin • Reified Generics By Jetbrains • NullablesMonday, November 14, 11
  • 54. Kotlin • Reified Generics By Jetbrains • Nullables • Type InferenceMonday, November 14, 11
  • 55. Kotlin • Reified Generics By Jetbrains • Nullables • Type Inference • Pattern MatchingMonday, November 14, 11
  • 56. Kotlin • Reified Generics By Jetbrains • Nullables • Type Inference • Pattern Matching • Extension FunctionsMonday, November 14, 11
  • 57. Kotlin • Reified Generics By Jetbrains • Nullables • Type Inference • Pattern Matching • Extension Functions Only with support from other IDEsMonday, November 14, 11
  • 58. Xtend By EclipseMonday, November 14, 11
  • 59. Xtend By Eclipse • Pattern Matching • Extension Functions • Multi dispatch (visitor)Monday, November 14, 11
  • 60. Xtend By Eclipse • Pattern Matching • Extension Functions • Multi dispatch (visitor)Monday, November 14, 11
  • 61. Xtend By Eclipse • Pattern Matching • Extension Functions • Multi dispatch (visitor)Monday, November 14, 11
  • 62. Xtend By Eclipse • Pattern Matching • Extension Functions • Multi dispatch (visitor)Monday, November 14, 11
  • 63. Xtend By Eclipse • Pattern Matching • Extension Functions • Multi dispatch (visitor) Only with a great frameworkMonday, November 14, 11
  • 64. Ceylon By RedhatMonday, November 14, 11
  • 65. Ceylon By Redhat • Syntax similar to JavaMonday, November 14, 11
  • 66. Ceylon By Redhat • Syntax similar to Java • Tree-like DSLsMonday, November 14, 11
  • 67. Ceylon By Redhat • Syntax similar to Java • Tree-like DSLs • Better macro/annotationsMonday, November 14, 11
  • 68. Ceylon By Redhat • Syntax similar to Java • Tree-like DSLs • Better macro/annotationsMonday, November 14, 11
  • 69. Ceylon By Redhat • Syntax similar to Java • Tree-like DSLs • Better macro/annotations No chanceMonday, November 14, 11
  • 70. Java.next conclusionsMonday, November 14, 11
  • 71. Java.next conclusions • Java.next needs good toolingMonday, November 14, 11
  • 72. Java.next conclusions • Java.next needs good tooling • There are too many choicesMonday, November 14, 11
  • 73. Java.next conclusions • Java.next needs good tooling • There are too many choices • They are all similarMonday, November 14, 11
  • 74. Java.next conclusions • Java.next needs good tooling • There are too many choices • They are all similar Java 8Monday, November 14, 11
  • 75. Java.next conclusions • Java.next needs good tooling • There are too many choices • They are all similar Java 8 Scala for nichesMonday, November 14, 11
  • 76. BrowserMonday, November 14, 11
  • 77. HarmonyMonday, November 14, 11
  • 78. HarmonyMonday, November 14, 11
  • 79. HarmonyMonday, November 14, 11
  • 80. HarmonyMonday, November 14, 11
  • 81. Dart By GoogleMonday, November 14, 11
  • 82. Dart By GoogleMonday, November 14, 11
  • 83. Dart vs HarmonyMonday, November 14, 11
  • 84. Dart vs Harmony • ToolingMonday, November 14, 11
  • 85. Dart vs Harmony • Tooling • Other browsersMonday, November 14, 11
  • 86. Dart vs Harmony • Tooling • Other browsers • Complex projectsMonday, November 14, 11
  • 87. Dart vs Harmony • Tooling • Other browsers • Complex projects • Fast operationsMonday, November 14, 11
  • 88. Dart vs Harmony • Tooling • Other browsers • Complex projects • Fast operations Language heterogeneityMonday, November 14, 11
  • 89. Parallel languagesMonday, November 14, 11
  • 90. FortressMonday, November 14, 11
  • 91. FortressMonday, November 14, 11
  • 92. Fortress Wrong development approachMonday, November 14, 11
  • 93. Parasail for 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 thinkingn"); 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 eatingn"); 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
  • 94. Parasail for 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 thinkingn"); 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 eatingn"); 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 + ToolingMonday, November 14, 11
  • 95. Æminium val (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 } }; - unique unique R full immutable RW share pureMonday, November 14, 11
  • 96. Æminium val (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 } }; - unique unique R full immutable Hard to write RW share pureMonday, November 14, 11
  • 97. DSLsMonday, November 14, 11
  • 98. Opa broadcast(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
  • 99. Opa broadcast(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 concernsMonday, November 14, 11
  • 100. Frink (6 years + 9 months)Monday, November 14, 11
  • 101. Frink (6 years + 9 months) tw[v0, alpha, h0 = 1 meter, hw = 10 fe et, 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
  • 102. Frink (6 years + 9 months) tw[v0, alpha, h0 = 1 meter, hw = 10 fe et, 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)/ Best calculator ever! g, (vy0 + radical)/g] }Monday, November 14, 11
  • 103. MagpieMonday, November 14, 11
  • 104. Magpie • Dynamic language (Similar to Mirah)Monday, November 14, 11
  • 105. Magpie • Dynamic language (Similar to Mirah) • Multi-methodsMonday, November 14, 11
  • 106. Magpie • Dynamic language (Similar to Mirah) • Multi-methods • Syntax extensionsMonday, November 14, 11
  • 107. Magpie • Dynamic language (Similar to Mirah) • Multi-methods • Syntax extensions Too dynamicMonday, November 14, 11
  • 108. OMetaMonday, November 14, 11
  • 109. OMeta Great for DSLsMonday, November 14, 11
  • 110. EsotericMonday, November 14, 11
  • 111. WheelerMonday, November 14, 11
  • 112. WheelerMonday, November 14, 11
  • 113. WheelerMonday, November 14, 11
  • 114. Wheeler ?!?!Monday, November 14, 11
  • 115. ClayMonday, November 14, 11
  • 116. Clay WinnerMonday, November 14, 11
  • 117. C will not die anytime soon.Monday, November 14, 11
  • 118. Thank you Alcides Fonseca http://alcidesfonseca.comMonday, November 14, 11