Upload
phamhuong
View
233
Download
0
Embed Size (px)
Citation preview
Next Generation Java Ceylon, Kotlin, Scala & Fantom im Überblick
Autor: dogmadic : http://www.sxc.hu/photo/436457
http://www.sxc.hu/photo/36128
Übersicht & Entwicklung JVM Sprachen
Next Generation JVM Languages 3 |
Inzwischen über 50 verschiedene Sprachen auf der JVM…
[...] programming by larger groups of people or by smaller groups over
longer time periods [...] result in large, and hence complicated, programs
[...] place emphasis on partitioning work into modules with precisely-
specified interactions.
http://en.wikipedia.org/wiki/Programming_in_the_large_and_programming_in_the_small
sprachen für den Unternehmenseinsatz
–
–
Next Generation JVM Languages 4 |
Traits & Mixins
trait Similarity {
def isSimilar(x: Any): Boolean
def isNotSimilar(x: Any): Boolean = !isSimilar(x)
}
Next Generation JVM Languages 12 |
Scala & Ko-/Kontravarianz
Next Generation JVM Languages 14 | http://www.sxc.hu/photo/330223
TL;DR Too long; didn‘t read
Scala Hello World
Next Generation JVM Languages 18 |
package examples
/** Quick sort, functional style */
object sort1 {
def sort(a: List[Int]): List[Int] = {
if (a.length < 2)
a
else {
val pivot = a(a.length / 2)
sort(a.filter(_ < pivot)) :::
a.filter(_ == pivot) :::
sort(a.filter(_ > pivot))
}
}
def main(args: Array[String]) {
val xs = List(6, 2, 8, 5, 1)
println(xs)
println(sort(xs))
}
}
Fantom : Portabilität
l
l
–
–
–
Next Generation JVM Languages 23 |
„one portable system, graphics, and widget library
that just works everywhere”
Fantom : Quadratur der Kreise
l
l
l
obj.methode()
obj->methode()
l
l
Next Generation JVM Languages 25 |
Fantom Hello World (Webapp)
Next Generation JVM Languages 28 |
using util
using web
using wisp
class WebHello : AbstractMain
{
@Opt { help = "http port" }
Int port := 8080
override Int run()
{
wisp := WispService
{
it.port = this.port
it.root = HelloMod()
}
return runServices([wisp])
}
}
const class HelloMod : WebMod
{
override Void onGet()
{
res.headers["Content-Type"] =
"text/plain; charset=utf-8"
res.out.print("hello world #4")
}
}
Ceylon im Portrait
–
–
–
–
–
Next Generation JVM Languages 32 |
„Ceylon’s goal is to design the language that Java would have been
if its designers had been able to predict the future.”
Ceylon: Code Example
Next Generation JVM Languages 33 |
doc "A component"
shared abstract class Component() {
OpenList<Callable<Void,Event>> observers =
OpenList<Callable<Void,Event>>();
shared void addObserver(void observe(Event event)) {
observers.append(observe);
}
shared void fire(Event event) {
for (void observe(Event event) in observers) {
observe(event);
}
}
}
…bisschen Spannendes hat Ceylon aber schon…
l
l
l
Next Generation JVM Languages 34 | http://www.sxc.hu/photo/732192
Kotlin im Portrait
l
–
–
–
–
–
Next Generation JVM Languages 40 |
“General-purpose language intended for industrial use”
Kotlin = Java++ bzw. Skala--
Kotlin Motivation & Hintergrund
l
–
–
–
–
Next Generation JVM Languages 41 |
“Although we’ve developed support for several JVM-targeted programming languages,
we are still writing all of our IntelliJ-based IDEs almost entirely in Java.
We want to become more productive by switching to a more expressive language.”
Next Generation JVM Languages 52 | Autor: woodleywonderworks
http://www.flickr.com/photos/wwworks/4759535950/
Weiterführende Information
Scala: http://www.scala-lang.org/
Ceylon: http://ceylon-lang.org/
Kotlin: http://blog.jetbrains.com/kotlin/
Kotlin Demo: http://kotlin-demo.jetbrains.com/
Fantom vs. Kotlin http://fantom.org/sidewalk/topic/1581
Gosu: http://gosu-lang.org/
Search for a better Java:
http://blog.joda.org/2011/07/kotlin-and-search-for-
better-java_9066.html