Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Future of Programming Languages

Avatar for alcides alcides
December 05, 2011

Future of Programming Languages

Avatar for alcides

alcides

December 05, 2011
Tweet

Other Decks in Programming

Transcript

  1. Disclaimer These opinions are my own and may not reflect

    future events. Monday, November 14, 11
  2. Why is language X successful? • Portability (C, Java, Python,

    ...) • Abstraction and Simplicity (Java, Python) Monday, November 14, 11
  3. Why is language X successful? • Portability (C, Java, Python,

    ...) • Abstraction and Simplicity (Java, Python) • Killer app/framework (Ruby) Monday, November 14, 11
  4. 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
  5. 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
  6. 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
  7. Rust vs Plaid Research-level Company-supported JVM C/LLVM Verbose on permissions

    Limited on permissions Crates Monday, November 14, 11
  8. Rust vs Plaid Research-level Company-supported JVM C/LLVM Verbose on permissions

    Limited on permissions Rust vs C Crates Monday, November 14, 11
  9. Kotlin • Reified Generics • Nullables • Type Inference •

    Pattern Matching By Jetbrains Monday, November 14, 11
  10. Kotlin • Reified Generics • Nullables • Type Inference •

    Pattern Matching • Extension Functions By Jetbrains Monday, November 14, 11
  11. Kotlin • Reified Generics • Nullables • Type Inference •

    Pattern Matching • Extension Functions Only with support from other IDEs By Jetbrains Monday, November 14, 11
  12. Xtend • Pattern Matching • Extension Functions • Multi dispatch

    (visitor) By Eclipse Monday, November 14, 11
  13. Xtend • Pattern Matching • Extension Functions • Multi dispatch

    (visitor) By Eclipse Monday, November 14, 11
  14. Xtend • Pattern Matching • Extension Functions • Multi dispatch

    (visitor) By Eclipse Monday, November 14, 11
  15. Xtend • Pattern Matching • Extension Functions • Multi dispatch

    (visitor) By Eclipse Monday, November 14, 11
  16. Xtend • Pattern Matching • Extension Functions • Multi dispatch

    (visitor) Only with a great framework By Eclipse Monday, November 14, 11
  17. Ceylon • Syntax similar to Java • Tree-like DSLs •

    Better macro/annotations By Redhat Monday, November 14, 11
  18. Ceylon • Syntax similar to Java • Tree-like DSLs •

    Better macro/annotations By Redhat Monday, November 14, 11
  19. Ceylon • Syntax similar to Java • Tree-like DSLs •

    Better macro/annotations No chance By Redhat Monday, November 14, 11
  20. Java.next conclusions • Java.next needs good tooling • There are

    too many choices • They are all similar Monday, November 14, 11
  21. Java.next conclusions • Java.next needs good tooling • There are

    too many choices • They are all similar Java 8 Monday, November 14, 11
  22. 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
  23. Dart vs Harmony • Tooling • Other browsers • Complex

    projects • Fast operations Monday, November 14, 11
  24. Dart vs Harmony • Tooling • Other browsers • Complex

    projects • Fast operations Language heterogeneity Monday, November 14, 11
  25. 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 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
  26. 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 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
  27. Æ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 - R RW unique unique full immutable share pure Monday, November 14, 11
  28. Æ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 - R RW unique unique full immutable share pure Hard to write Monday, November 14, 11
  29. 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
  30. 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 concerns Monday, November 14, 11
  31. 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
  32. 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] } Best calculator ever! Monday, November 14, 11
  33. Magpie • Dynamic language (Similar to Mirah) • Multi-methods •

    Syntax extensions Too dynamic Monday, November 14, 11