Bibliotech - smart cafe; strikead club. 
Programming Languages: 
Some news for the last N 
years. 
Ruslan Shevchenko 
<ruslan@shevchenko.kiev.ua> 
@rssh1 
https://github.com/rssh
Programming languages: 
❖ Industry/Academic 
❖ what’s hot now: 
❖ academic research from 70-th 
❖ ‘freaky’ things from 2000 
Where is progress ? 
What we will see in industry from today-s academic ? 
from today-s freaks ?
Statement from 80-th: 
Full change of language and tools during 2-3 years 
Actual situation in 2014: 
Top 11 languages are the same: 2010 - 2014 
http://dou.ua
Can we track progress in PL ? 
❖ Estimations 
❖ Code size / project duration
Evolution is slow
If we think about ideal language ?
Make all good 
What is: 
❖ all ? 
❖ good ? 
❖ make ? 
• Object and processes from real world, 
represented in computer 
• Operations with this representation. 
• Mapping of result back to real world
Syntax [parsing/ast manipulation] 
Semantics [type systems] 
“New” functionality
Syntax 
Traditional approach: context free grammars 
Syntax structure is fixed 
Now in practice: 
Context-dependent keywords (C++ ) 
Multi-language programming
Extensible syntax 
Seed 7: Syntax definitions of operations with priority 
syntax expr: .(). + .() is -> 7; 
syntax expr: .loop.().until.().do.().end.loop is -> 25; 
Nemerle: macroses 
macro for (init, cond, change, body) 
syntax ("for", "(", init, ";", cond, ";", change, ")", body) 
XL Compiler plugins
Extensible syntax 
// Idris 
boolCase : (x:Bool) -> Lazy a -> Lazy a -> a; 
boolCase True t e = t; 
boolCase False t e = e; 
syntax "if" [test] "then" [t] "else" [e] = boolCase test t e; 
syntax "for" {x} "in" [xs] ":" [body] = forLoop xs (x => body) 
// introducing new binding 
// DSL — map object to Idrix language constructions
XL: Concept programming 
Active library = Library + compiler plugin 
Concept in real life. In computer - representation 
Metrics: 
Syntax noise / signal 
Bandwidth 
what part of code is about business 
what part of concept is represented 
Complexity source
Articulate programming 
Avail: SmallTalk-based, static typing 
Try to deduce ‘needed’ value from context. 
like scala implicit, but *all* is implicit
Syntax 
Multi-language programming 
❖ Do nothing (mess) 
❖ Embed all in one language [lifted evaluation] 
❖ (like LINQ or scala slick or idris DSL) 
❖ Define and use ‘part of grammar’ with type.
Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ 
//Type-specific tokens 
let imageBase : URL = <images.example.com> 
let bgImage : URL = <%imageBase%/background.png> 
new : SearchServer 
def resultsFor(searchQuery, page) 
serve(~) (* serve : HTML -> Unit *) 
>html 
>head 
>title Search Results 
>style ~ 
body { background-image: url(%bgImage%) } 
#search { background-color: ..
Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ 
//Type-specific tokens 
let imageBase : URL = <images.example.com> 
let bgImage : URL = <%imageBase%/background.png> 
new : SearchServer 
def resultsFor(searchQuery, page) 
serve(~) (* serve : HTML -> Unit *) 
>html 
>head 
>title Search Results 
>style ~ 
body { background-image: url(%bgImage%) } 
#search { background-color: ..
Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ 
//Type-specific tokens 
let imageBase : URL = <images.example.com> 
let bgImage : URL = <%imageBase%/background.png> 
new : SearchServer 
def resultsFor(searchQuery, page) 
serve(~) (* serve : HTML -> Unit *) 
>html 
>head 
>title Search Results 
>style ~ 
body { background-image: url(%bgImage%) } 
#search { background-color: ..
Type Systems 
Static/Dynamic —-> Gradual 
Dynamic: 
❖ clojure -> core.typed 
❖ python -> type annotations 
❖ groovy -> type annotations 
Static: 
❖ Dynamic type 
fromDynamic[T]: D => Option[T] 
toDynamic[T](x: T) => Dynamic 
needed for reflective typing
Clojure: core/typed. 
(ann clojure.core/first 
(All [x] 
(Fn [(Option (EmptySeqable x)) -> nil] 
[(NonEmptySeqable x) -> x] 
[(Option (Seqable x)) -> (Option x)])) 
) 
- static empty -> nil 
- static non-empty -> not-nil 
- unknown -> x or nil,
Type Systems 
typing => static analysis at compile-time 
compilation => optimization of interpretation
Type Systems
Type Systems 
Dependent types
Non-dependent types example 
trait CInt { type Succ <: CInt } 
trait CPos extends CInt 
trait CSucc[P <: CPos] extends CInt { 
type Succ = CSucc[CSucc[Int]] 
} 
final class _0 extends CPos { 
type Succ = CSucc[0] 
} 
type _1 = _0#Succ 
type _2 = _1#Succ 
// church numeration
Non-dependent types example 
trait LimitedVector[+A, N<:CInt] 
{ 
………… 
def append[B <: A, NX <:CInt](x: LimitedVector[B,NX]): 
LimitedVector[B,Plus[N,NX]] 
………….. 
} 
// shapeless full of such tricks
Dependent types example 
trait LimitedVector[+A, n:Int] 
{ 
………… 
def append[B <: A, nx:Int](x: LimitedVector[B,nx]): 
LimitedVector[B, n+nx] 
……………. 
} 
// warning: pseudocode, impossible in scala
Dependent types example 
data Vect : Nat -> Type -> Type 
where 
Nil : Vect 0 a 
(::) : a -> Vect k a -> Vect (k+1) a 
// Idris 
Calculus of constructions: Idris, Coq, Agda
Dependent types: 
Track properties, which can be proven by structural induction 
Function, which call SQL inside no more than 3 times. 
Resource with balanced acquire/release for all execution paths. 
Type depends from value <=> Type must be available as value 
data Parity : Nat -> Type where 
even : Parity (n + n) 
odd : Parity (S (n + n))
Dependent types: 
intuitionistic logic 
absence (p || ~p) 
Type:Type - logical bomb
// note: it is possible to make efficient type-level numbers in scala 
Details: Stefan Zeiger. Type-Level Computations in Scala 
❖ slides 
❖ http://slick.typesafe.com/talks/scalaio2014/Type-Level_Computations.pdf 
❖ code: 
❖ https://github.com/szeiger/ErasedTypes 
❖ idea: 
❖ define type-alias with argument for operation. 
❖ perform term-level computation and ‘unsafe cast’ to this alias. 
abstract class CNat 
{ 
type Succ 
type + [T <: CNat] 
def value: Int 
…………….. 
def +[T <: CNat](x:n): +[T] = CPos(value+x.value).asInstanceOf[+T] 
}
Effects tracking: 
No more IO monads !!!! 
List of effects as part of type. 
• Idris 
• Eff
Effects: 
- calculated as extension to ‘normal’ type. (as type-index or yet another 
dimension) 
• possible traces of operations 
• set of operations. 
• set of resources 
• set of exceptions 
• atomicity 
• delimited specs 
• …. 
type channel = effect 
operation read : unit -> string 
operation write : string -> unit 
end 
// Eff 
//Handler - effects interpreter 
let accumulate = handler 
| std#write x k -> let (v, xs) = k () in (v, x :: xs) 
| val v -> (v, [])
Knowledge-based programming 
Let’s add structured information about problem domain. 
Wolfram Alpha: 
Mathematics domain. Near 5000 built-in functions. 
Household lexicon: approx 4000 
Differ from community repository: all interfaces are consistent
Wolfram: 
Tweet-a-program
Wolfram: 
Tweet-a-program
Make all good 
- Syntax, defined in problem-domain specific library 
- Vocabulary simular to one in natural language 
- Advanced type theory with refinement specs.
Implementation
Implementation 
Compilation/Interpretation [both - hard] 
VM/System 
JVM no continuations (?) 
LLVM non-trivial gc (?) 
Complexity. 
both - impossible without divergence 
Let’s rewrite all with callbacks, because it’s more easy than fix JVM/OS
CORBA story: 
Let’s do remote and local call undistinguished (1996) 
Local calls: fast 
Remote calls: slow 
Common antipattern: build fine-grained object model in RPC 
Akka: 
Let’s do remote and local call undistinguished (2014) 
// hope, now things will move forward more accurate
So, we must 
choose one level of abstraction 
or 
build family of systems 
otherwise — abstraction leaks
Ok, assume we build ideal language. (in academia or as freaks) 
When it will be in industry ? 
❖ Success in sense of adoption => evolution slowdown 
Haskell: 
❖ avoid success of all costs => be open for evolution, 
live in a water 
Scala: from research to engineering 
(LMS, attempt to remove skolem types, … etc )
Sociology of programming languages 
Leo Meyerovich 
Average ‘incubation’ period before wider adoption: 12 years 
before - specialized in some niche 
Adoption => social, marketing ….., not technical.
What will be in industry tomorrow: landscape now. 
General purpose: need some time for current adoption 
JVM land: scala, clojure 
Trends: integrating other paradigms 
System: D / Rust instead C++ (?) 
Application/ Scripting: [ place is vacant ] 
// JavaScript successor [?]
What will be not in industry tomorrow: 
academic/OSS 
Better VM-s 
New paradigms 
Depends from you 
// niche as social issue
Thanks. 
ruslan@shevchenko.kiev.ua 
https://github.com/rssh 
@rssh1 
If you build something interesting - ping me.

More Related Content

PDF
Few simple-type-tricks in scala
PDF
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
PDF
D programming language
ODP
The D Programming Language - Why I love it!
PDF
Building a Tagless Final DSL for WebGL
PDF
Quick introduction to scala
PDF
Scala : language of the future
PPTX
Introduction to Scala
Few simple-type-tricks in scala
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
D programming language
The D Programming Language - Why I love it!
Building a Tagless Final DSL for WebGL
Quick introduction to scala
Scala : language of the future
Introduction to Scala

What's hot (9)

PDF
Introduction to Scala
PDF
Aggregate Programming in Scala
PDF
Reactive Programming in the Browser feat. Scala.js and PureScript
PDF
A Field Guide to DSL Design in Scala
PDF
Web futures
PPT
Oscon keynote: Working hard to keep it simple
PDF
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
PDF
Value objects in JS - an ES7 work in progress
PPTX
The Evolution of Scala
Introduction to Scala
Aggregate Programming in Scala
Reactive Programming in the Browser feat. Scala.js and PureScript
A Field Guide to DSL Design in Scala
Web futures
Oscon keynote: Working hard to keep it simple
Value Objects, Full Throttle (to be updated for spring TC39 meetings)
Value objects in JS - an ES7 work in progress
The Evolution of Scala
Ad

Similar to Programming Languages: some news for the last N years (20)

PDF
Scala in Practice
PDF
Programming Language Explorations Alexander Schneider Eileen Choe
PPTX
a brief explanation on the topic of Imperative Programming Paradigm.pptx
PDF
Software Engineering Thailand: Programming with Scala
PPTX
Paradigms
PDF
Programming Languages Principles And Practices 3rd Edition Kenneth C Louden
PPTX
Introduction to Scala
PDF
Programming Languages #devcon2013
PPT
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
PDF
SE 20016 - programming languages landscape.
PDF
Programming in Scala - Lecture One
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PDF
scalaliftoff2009.pdf
PPT
02paradigms.ppt
PDF
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
PDF
Ballerina is not Java (or Go or ..)
PPTX
2018 07-ballerina-ballerina con
PDF
An Introduction to Scala - Blending OO and Functional Paradigms
Scala in Practice
Programming Language Explorations Alexander Schneider Eileen Choe
a brief explanation on the topic of Imperative Programming Paradigm.pptx
Software Engineering Thailand: Programming with Scala
Paradigms
Programming Languages Principles And Practices 3rd Edition Kenneth C Louden
Introduction to Scala
Programming Languages #devcon2013
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
SE 20016 - programming languages landscape.
Programming in Scala - Lecture One
scalaliftoff2009.pdf
scalaliftoff2009.pdf
scalaliftoff2009.pdf
scalaliftoff2009.pdf
02paradigms.ppt
2016-11-12 02 Николай Линкер. Чему Java может поучиться у Haskell и наоборот
Ballerina is not Java (or Go or ..)
2018 07-ballerina-ballerina con
An Introduction to Scala - Blending OO and Functional Paradigms
Ad

More from Ruslan Shevchenko (20)

PDF
Embedding Generic Monadic Transformer into Scala. [Tfp2022]
PDF
Svitla talks 2021_03_25
PDF
Akka / Lts behavior
PDF
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
PDF
Scala / Technology evolution
PDF
{co/contr} variance from LSP
PDF
N flavors of streaming
PDF
Why scala is not my ideal language and what I can do with this
PDF
Scala jargon cheatsheet
PDF
Java & low latency applications
PDF
Csp scala wixmeetup2016
PDF
R ext world/ useR! Kiev
PDF
Jslab rssh: JS as language platform
PDF
Behind OOD: domain modelling in post-OO world.
PDF
scala-gopher: async implementation of CSP for scala
PDF
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
PDF
Ruslan.shevchenko: most functional-day-kiev 2014
PDF
Web architecture - overview of techniques.
PDF
R scala 17_05_2014
Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Svitla talks 2021_03_25
Akka / Lts behavior
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
Scala / Technology evolution
{co/contr} variance from LSP
N flavors of streaming
Why scala is not my ideal language and what I can do with this
Scala jargon cheatsheet
Java & low latency applications
Csp scala wixmeetup2016
R ext world/ useR! Kiev
Jslab rssh: JS as language platform
Behind OOD: domain modelling in post-OO world.
scala-gopher: async implementation of CSP for scala
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
Ruslan.shevchenko: most functional-day-kiev 2014
Web architecture - overview of techniques.
R scala 17_05_2014

Recently uploaded (20)

PPTX
Airline CRS | Airline CRS Systems | CRS System
PPTX
Cybersecurity-and-Fraud-Protecting-Your-Digital-Life.pptx
PPTX
Full-Stack Developer Courses That Actually Land You Jobs
PPTX
Lecture 5 Software Requirement Engineering
PDF
AI Guide for Business Growth - Arna Softech
PDF
AI-Powered Fuzz Testing: The Future of QA
DOCX
How to Use SharePoint as an ISO-Compliant Document Management System
PPTX
Matchmaking for JVMs: How to Pick the Perfect GC Partner
PDF
Cloud Native Aachen Meetup - Aug 21, 2025
PDF
Visual explanation of Dijkstra's Algorithm using Python
PDF
Microsoft Office 365 Crack Download Free
PPTX
4Seller: The All-in-One Multi-Channel E-Commerce Management Platform for Glob...
PPTX
Tech Workshop Escape Room Tech Workshop
PDF
MiniTool Power Data Recovery 12.6 Crack + Portable (Latest Version 2025)
PPTX
GSA Content Generator Crack (2025 Latest)
PPTX
Python is a high-level, interpreted programming language
PDF
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
PDF
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
PPTX
Chapter 1 - Transaction Processing and Mgt.pptx
PDF
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access
Airline CRS | Airline CRS Systems | CRS System
Cybersecurity-and-Fraud-Protecting-Your-Digital-Life.pptx
Full-Stack Developer Courses That Actually Land You Jobs
Lecture 5 Software Requirement Engineering
AI Guide for Business Growth - Arna Softech
AI-Powered Fuzz Testing: The Future of QA
How to Use SharePoint as an ISO-Compliant Document Management System
Matchmaking for JVMs: How to Pick the Perfect GC Partner
Cloud Native Aachen Meetup - Aug 21, 2025
Visual explanation of Dijkstra's Algorithm using Python
Microsoft Office 365 Crack Download Free
4Seller: The All-in-One Multi-Channel E-Commerce Management Platform for Glob...
Tech Workshop Escape Room Tech Workshop
MiniTool Power Data Recovery 12.6 Crack + Portable (Latest Version 2025)
GSA Content Generator Crack (2025 Latest)
Python is a high-level, interpreted programming language
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
Chapter 1 - Transaction Processing and Mgt.pptx
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access

Programming Languages: some news for the last N years

  • 1. Bibliotech - smart cafe; strikead club. Programming Languages: Some news for the last N years. Ruslan Shevchenko <[email protected]> @rssh1 https://github.com/rssh
  • 2. Programming languages: ❖ Industry/Academic ❖ what’s hot now: ❖ academic research from 70-th ❖ ‘freaky’ things from 2000 Where is progress ? What we will see in industry from today-s academic ? from today-s freaks ?
  • 3. Statement from 80-th: Full change of language and tools during 2-3 years Actual situation in 2014: Top 11 languages are the same: 2010 - 2014 http://dou.ua
  • 4. Can we track progress in PL ? ❖ Estimations ❖ Code size / project duration
  • 6. If we think about ideal language ?
  • 7. Make all good What is: ❖ all ? ❖ good ? ❖ make ? • Object and processes from real world, represented in computer • Operations with this representation. • Mapping of result back to real world
  • 8. Syntax [parsing/ast manipulation] Semantics [type systems] “New” functionality
  • 9. Syntax Traditional approach: context free grammars Syntax structure is fixed Now in practice: Context-dependent keywords (C++ ) Multi-language programming
  • 10. Extensible syntax Seed 7: Syntax definitions of operations with priority syntax expr: .(). + .() is -> 7; syntax expr: .loop.().until.().do.().end.loop is -> 25; Nemerle: macroses macro for (init, cond, change, body) syntax ("for", "(", init, ";", cond, ";", change, ")", body) XL Compiler plugins
  • 11. Extensible syntax // Idris boolCase : (x:Bool) -> Lazy a -> Lazy a -> a; boolCase True t e = t; boolCase False t e = e; syntax "if" [test] "then" [t] "else" [e] = boolCase test t e; syntax "for" {x} "in" [xs] ":" [body] = forLoop xs (x => body) // introducing new binding // DSL — map object to Idrix language constructions
  • 12. XL: Concept programming Active library = Library + compiler plugin Concept in real life. In computer - representation Metrics: Syntax noise / signal Bandwidth what part of code is about business what part of concept is represented Complexity source
  • 13. Articulate programming Avail: SmallTalk-based, static typing Try to deduce ‘needed’ value from context. like scala implicit, but *all* is implicit
  • 14. Syntax Multi-language programming ❖ Do nothing (mess) ❖ Embed all in one language [lifted evaluation] ❖ (like LINQ or scala slick or idris DSL) ❖ Define and use ‘part of grammar’ with type.
  • 15. Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ //Type-specific tokens let imageBase : URL = <images.example.com> let bgImage : URL = <%imageBase%/background.png> new : SearchServer def resultsFor(searchQuery, page) serve(~) (* serve : HTML -> Unit *) >html >head >title Search Results >style ~ body { background-image: url(%bgImage%) } #search { background-color: ..
  • 16. Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ //Type-specific tokens let imageBase : URL = <images.example.com> let bgImage : URL = <%imageBase%/background.png> new : SearchServer def resultsFor(searchQuery, page) serve(~) (* serve : HTML -> Unit *) >html >head >title Search Results >style ~ body { background-image: url(%bgImage%) } #search { background-color: ..
  • 17. Wyvern: https://www.cs.cmu.edu/~aldrich/wyvern/ //Type-specific tokens let imageBase : URL = <images.example.com> let bgImage : URL = <%imageBase%/background.png> new : SearchServer def resultsFor(searchQuery, page) serve(~) (* serve : HTML -> Unit *) >html >head >title Search Results >style ~ body { background-image: url(%bgImage%) } #search { background-color: ..
  • 18. Type Systems Static/Dynamic —-> Gradual Dynamic: ❖ clojure -> core.typed ❖ python -> type annotations ❖ groovy -> type annotations Static: ❖ Dynamic type fromDynamic[T]: D => Option[T] toDynamic[T](x: T) => Dynamic needed for reflective typing
  • 19. Clojure: core/typed. (ann clojure.core/first (All [x] (Fn [(Option (EmptySeqable x)) -> nil] [(NonEmptySeqable x) -> x] [(Option (Seqable x)) -> (Option x)])) ) - static empty -> nil - static non-empty -> not-nil - unknown -> x or nil,
  • 20. Type Systems typing => static analysis at compile-time compilation => optimization of interpretation
  • 23. Non-dependent types example trait CInt { type Succ <: CInt } trait CPos extends CInt trait CSucc[P <: CPos] extends CInt { type Succ = CSucc[CSucc[Int]] } final class _0 extends CPos { type Succ = CSucc[0] } type _1 = _0#Succ type _2 = _1#Succ // church numeration
  • 24. Non-dependent types example trait LimitedVector[+A, N<:CInt] { ………… def append[B <: A, NX <:CInt](x: LimitedVector[B,NX]): LimitedVector[B,Plus[N,NX]] ………….. } // shapeless full of such tricks
  • 25. Dependent types example trait LimitedVector[+A, n:Int] { ………… def append[B <: A, nx:Int](x: LimitedVector[B,nx]): LimitedVector[B, n+nx] ……………. } // warning: pseudocode, impossible in scala
  • 26. Dependent types example data Vect : Nat -> Type -> Type where Nil : Vect 0 a (::) : a -> Vect k a -> Vect (k+1) a // Idris Calculus of constructions: Idris, Coq, Agda
  • 27. Dependent types: Track properties, which can be proven by structural induction Function, which call SQL inside no more than 3 times. Resource with balanced acquire/release for all execution paths. Type depends from value <=> Type must be available as value data Parity : Nat -> Type where even : Parity (n + n) odd : Parity (S (n + n))
  • 28. Dependent types: intuitionistic logic absence (p || ~p) Type:Type - logical bomb
  • 29. // note: it is possible to make efficient type-level numbers in scala Details: Stefan Zeiger. Type-Level Computations in Scala ❖ slides ❖ http://slick.typesafe.com/talks/scalaio2014/Type-Level_Computations.pdf ❖ code: ❖ https://github.com/szeiger/ErasedTypes ❖ idea: ❖ define type-alias with argument for operation. ❖ perform term-level computation and ‘unsafe cast’ to this alias. abstract class CNat { type Succ type + [T <: CNat] def value: Int …………….. def +[T <: CNat](x:n): +[T] = CPos(value+x.value).asInstanceOf[+T] }
  • 30. Effects tracking: No more IO monads !!!! List of effects as part of type. • Idris • Eff
  • 31. Effects: - calculated as extension to ‘normal’ type. (as type-index or yet another dimension) • possible traces of operations • set of operations. • set of resources • set of exceptions • atomicity • delimited specs • …. type channel = effect operation read : unit -> string operation write : string -> unit end // Eff //Handler - effects interpreter let accumulate = handler | std#write x k -> let (v, xs) = k () in (v, x :: xs) | val v -> (v, [])
  • 32. Knowledge-based programming Let’s add structured information about problem domain. Wolfram Alpha: Mathematics domain. Near 5000 built-in functions. Household lexicon: approx 4000 Differ from community repository: all interfaces are consistent
  • 35. Make all good - Syntax, defined in problem-domain specific library - Vocabulary simular to one in natural language - Advanced type theory with refinement specs.
  • 37. Implementation Compilation/Interpretation [both - hard] VM/System JVM no continuations (?) LLVM non-trivial gc (?) Complexity. both - impossible without divergence Let’s rewrite all with callbacks, because it’s more easy than fix JVM/OS
  • 38. CORBA story: Let’s do remote and local call undistinguished (1996) Local calls: fast Remote calls: slow Common antipattern: build fine-grained object model in RPC Akka: Let’s do remote and local call undistinguished (2014) // hope, now things will move forward more accurate
  • 39. So, we must choose one level of abstraction or build family of systems otherwise — abstraction leaks
  • 40. Ok, assume we build ideal language. (in academia or as freaks) When it will be in industry ? ❖ Success in sense of adoption => evolution slowdown Haskell: ❖ avoid success of all costs => be open for evolution, live in a water Scala: from research to engineering (LMS, attempt to remove skolem types, … etc )
  • 41. Sociology of programming languages Leo Meyerovich Average ‘incubation’ period before wider adoption: 12 years before - specialized in some niche Adoption => social, marketing ….., not technical.
  • 42. What will be in industry tomorrow: landscape now. General purpose: need some time for current adoption JVM land: scala, clojure Trends: integrating other paradigms System: D / Rust instead C++ (?) Application/ Scripting: [ place is vacant ] // JavaScript successor [?]
  • 43. What will be not in industry tomorrow: academic/OSS Better VM-s New paradigms Depends from you // niche as social issue