52. Kotlin
• Reified Generics
By Jetbrains
Monday, November 14, 11
53. Kotlin
• Reified Generics
By Jetbrains
• Nullables
Monday, November 14, 11
54. Kotlin
• Reified Generics
By Jetbrains
• Nullables
• Type Inference
Monday, November 14, 11
55. Kotlin
• Reified Generics
By Jetbrains
• Nullables
• Type Inference
• Pattern Matching
Monday, November 14, 11
56. Kotlin
• Reified Generics
By Jetbrains
• Nullables
• Type Inference
• Pattern Matching
• Extension Functions
Monday, November 14, 11
57. Kotlin
• Reified Generics
By Jetbrains
• Nullables
• Type Inference
• Pattern Matching
• Extension Functions
Only with support from other
IDEs
Monday, November 14, 11
72. Java.next conclusions
• Java.next needs good tooling
• There are too many choices
Monday, November 14, 11
73. Java.next conclusions
• Java.next needs good tooling
• There are too many choices
• They are all similar
Monday, November 14, 11
74. Java.next conclusions
• Java.next needs good tooling
• There are too many choices
• They are all similar
Java 8
Monday, 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 niches
Monday, November 14, 11
92. Fortress
Wrong development approach
Monday, 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 + Tooling
Monday, 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 pure
Monday, 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 pure
Monday, November 14, 11