The Future of                          Programming Languages                                  Alcides Fonseca             ...
Disclaimer                          These opinions are my own and may not                          reflect future events.Mo...
RoadmapMonday, November 14, 11
Roadmap                          Why is language X successful?Monday, November 14, 11
Roadmap                            Why is language X successful?                          SystemsMonday, November 14, 11
Roadmap                            Why is language X successful?                          Systems                         ...
Roadmap                            Why is language X successful?                          Systems                         ...
Roadmap                                Why is language X successful?                            Systems                   ...
Roadmap                                Why is language X successful?                            Systems                   ...
Roadmap                                Why is language X successful?                            Systems                   ...
Why is language X                            successful?Monday, November 14, 11
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
Why is language X                                  successful?                   •      Portability (C, Java, Python, ...)...
SystemsMonday, November 14, 11
RustMonday, November 14, 11
RustMonday, November 14, 11
Rust                             •No nullMonday, November 14, 11
Rust                             •No null                             •ClosuresMonday, November 14, 11
Rust                             •No null                             •Closures                             •BlocksMonday,...
Rust                             •No null                             •Closures                             •Blocks       ...
Rust                             •No null                             •Closures                             •Blocks       ...
Rust                             •No null                             •Closures                             •Blocks       ...
Rust                             •No null                             •Closures                             •Blocks       ...
PlaidMonday, November 14, 11
PlaidMonday, November 14, 11
Plaid                             •LambdasMonday, November 14, 11
Plaid                             •Lambdas                             •ClosuresMonday, November 14, 11
Plaid                             •Lambdas                             •Closures                             •Access Permi...
Plaid                             •Lambdas                             •Closures                             •Access Permi...
Plaid                             •Lambdas                             •Closures                             •Access Permi...
Plaid                             •Lambdas                             •Closures                             •Access Permi...
Rust vs PlaidMonday, November 14, 11
Rust vs Plaid                                  Research-levelMonday, November 14, 11
Rust vs Plaid                Company-supported   Research-levelMonday, November 14, 11
Rust vs Plaid                Company-supported   Research-level                          C/LLVMMonday, November 14, 11
Rust vs Plaid                Company-supported   Research-level                          C/LLVM         JVMMonday, Novembe...
Rust vs Plaid                Company-supported      Research-level                          C/LLVM            JVM         ...
Rust vs Plaid                Company-supported    Research-level                          C/LLVM          JVM           Li...
Rust vs Plaid                Company-supported    Research-level                          C/LLVM          JVM           Li...
Rust vs Plaid                Company-supported              Research-level                          C/LLVM                ...
Java.next()Monday, November 14, 11
ATMMonday, November 14, 11
ATM                   • JRubyMonday, November 14, 11
ATM                   • JRuby                   • Mirah (Duby)Monday, November 14, 11
ATM                   • JRuby                   • Mirah (Duby)                   • GosuMonday, November 14, 11
ATM                   • JRuby                   • Mirah (Duby)                   • Gosu                   • ScalaMonday, N...
Kotlin                          By JetbrainsMonday, November 14, 11
Kotlin                                              • Reified Generics                          By JetbrainsMonday, Novembe...
Kotlin                                              • Reified Generics                          By Jetbrains               ...
Kotlin                                              • Reified Generics                          By Jetbrains               ...
Kotlin                                              • Reified Generics                          By Jetbrains               ...
Kotlin                                              • Reified Generics                          By Jetbrains               ...
Kotlin                                                       • Reified Generics                          By Jetbrains      ...
Xtend                          By EclipseMonday, November 14, 11
Xtend                          By Eclipse              • Pattern Matching              • Extension Functions              ...
Xtend                          By Eclipse              • Pattern Matching              • Extension Functions              ...
Xtend                          By Eclipse              • Pattern Matching              • Extension Functions              ...
Xtend                          By Eclipse              • Pattern Matching              • Extension Functions              ...
Xtend                          By Eclipse              • Pattern Matching              • Extension Functions              ...
Ceylon                                   By RedhatMonday, November 14, 11
Ceylon                                              By Redhat                   • Syntax similar to JavaMonday, November 1...
Ceylon                                              By Redhat                   • Syntax similar to Java                  ...
Ceylon                                                By Redhat                   • Syntax similar to Java                ...
Ceylon                                                By Redhat                   • Syntax similar to Java                ...
Ceylon                                                By Redhat                   • Syntax similar to Java                ...
Java.next conclusionsMonday, November 14, 11
Java.next conclusions                   • Java.next needs good toolingMonday, November 14, 11
Java.next conclusions                   • Java.next needs good tooling                   • There are too many choicesMonda...
Java.next conclusions                   • Java.next needs good tooling                   • There are too many choices     ...
Java.next conclusions                   • Java.next needs good tooling                   • There are too many choices     ...
Java.next conclusions                   • Java.next needs good tooling                   • There are too many choices     ...
BrowserMonday, November 14, 11
HarmonyMonday, November 14, 11
HarmonyMonday, November 14, 11
HarmonyMonday, November 14, 11
HarmonyMonday, November 14, 11
Dart                                 By GoogleMonday, November 14, 11
Dart                                 By GoogleMonday, November 14, 11
Dart vs HarmonyMonday, November 14, 11
Dart vs Harmony                   • ToolingMonday, November 14, 11
Dart vs Harmony                   • Tooling                   • Other browsersMonday, November 14, 11
Dart vs Harmony                   • Tooling                   • Other browsers                   • Complex projectsMonday,...
Dart vs Harmony                   • Tooling                   • Other browsers                   • Complex projects       ...
Dart vs Harmony                   • Tooling                   • Other browsers                   • Complex projects       ...
Parallel languagesMonday, November 14, 11
FortressMonday, November 14, 11
FortressMonday, November 14, 11
Fortress                          Wrong development approachMonday, November 14, 11
Parasail          for Phil in Philosopher_Index concurrent loop                   const Left_Fork := Phil;                ...
Parasail          for Phil in Philosopher_Index concurrent loop                   const Left_Fork := Phil;                ...
Æminium    val (immutable Integer >> immutable Integer) ->    immutable Integer fib =    	 fn (immutable Integer >> immuta...
Æminium    val (immutable Integer >> immutable Integer) ->    immutable Integer fib =    	 fn (immutable Integer >> immuta...
DSLsMonday, November 14, 11
Opa        broadcast(author) =          do Network.broadcast({~author text=Dom.get_value(#entry)}, room)          Dom.clea...
Opa        broadcast(author) =          do Network.broadcast({~author text=Dom.get_value(#entry)}, room)          Dom.clea...
Frink                          (6 years + 9 months)Monday, November 14, 11
Frink                          (6 years + 9 months)         tw[v0, alpha, h0 = 1 meter, hw = 10 fe         et, g=gravity] ...
Frink                          (6 years + 9 months)         tw[v0, alpha, h0 = 1 meter, hw = 10 fe         et, g=gravity] ...
MagpieMonday, November 14, 11
Magpie                   • Dynamic language (Similar to Mirah)Monday, November 14, 11
Magpie                   • Dynamic language (Similar to Mirah)                   • Multi-methodsMonday, November 14, 11
Magpie                   • Dynamic language (Similar to Mirah)                   • Multi-methods                   • Synta...
Magpie                   • Dynamic language (Similar to Mirah)                   • Multi-methods                   • Synta...
OMetaMonday, November 14, 11
OMeta                          Great for DSLsMonday, November 14, 11
EsotericMonday, November 14, 11
WheelerMonday, November 14, 11
WheelerMonday, November 14, 11
WheelerMonday, November 14, 11
Wheeler                             ?!?!Monday, November 14, 11
ClayMonday, November 14, 11
Clay                          WinnerMonday, November 14, 11
C will not die                          anytime soon.Monday, November 14, 11
Thank you                                         Alcides Fonseca                              http://alcidesfonseca.comMo...
Upcoming SlideShare
Loading in …5
×

Future Programming Languages

3,703 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,703
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
57
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Future Programming Languages

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

×