address - Java Forum Stuttgart

Transcription

address - Java Forum Stuttgart
Das nächste große Ding
Programmiersprachen für die JVM
MATHEMA Software GmbH
Henkestraße 91
91052 Erlangen
[email protected]
www.mathema.de
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 1 von 42
Was Sie erwartet
●
Was ist eine große Programmiersprache
●
Was Java richtig macht
●
Was Java nicht richtig gemacht hat
●
Was Java besser machen müsste
●
Was die nächste große Sprache richtig machen muss
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 2 von 42
Was Sie nicht erwartet
●
●
Ein Vergleich von Java mit anderen Programmiersprachen
Ein Überblick über die coolen Features der anderen Sprachen,
die Java leider nicht hat
●
Ein Vorschlag für eine neue Sprache
●
Bilder
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 3 von 42
Was ist eine große Programmiersprache?
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 4 von 42
Beispiele für große Programmiersprachen
●
C
●
Pascal?
●
C++
●
Modula?
●
Java
●
Visual Basic
●
C#
●
Scala?
●
Fortran?
●
Perl
●
Cobol
●
Ruby
●
PL/I
●
Python
●
Algol?
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 5 von 42
Eigenschaften einer großen Sprache
●
Eine große Sprache ist …
●
und hat ein Ökosystem mit …
●
wichtig
●
Werkzeugen
●
weit verbreitet
●
Bibliotheken
●
berufsentscheidend
●
Büchern
●
etabliert
●
Schulungen
●
Konferenzen
●
Web-Seiten
●
…
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 6 von 42
Das nächste große Ding
●
●
●
Läuft auf der JVM …
… und vielleicht noch auf anderen VMs
Konkurriert mit Java …
… und vielleicht noch mit C#
Ersetzt Java …
… und macht noch andere überflüssig
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 7 von 42
Was Java richtig gemacht hat
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 8 von 42
Motivation für Java
●
robust
●
sicher
●
architekturneutral
●
portierbar
●
interpretierbar
●
nebenläufig
●
dynamisch
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 9 von 42
Zeitgeist (vor fünfzehn Jahren)
●
Virtuelle Maschine
●
Objektorientierung
●
Packages
●
Threads
●
Garbage Collection
●
Sandbox
●
Protection Domains
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 10 von 42
Fliegender Start
C++, aber …
●
ohne Redundanz
●
ohne Komplexität
●
ohne (Speicher-)Fehler
●
vertraute Syntax
●
einfach erlernbar
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 11 von 42
Typische Java-Entscheidungen …
●
Wohldefinierte Basistypen (insbesondere boolean und String)
●
Sichere Arrays
●
Keine vorzeichenlose Zahlen
●
Kein typedef
●
Keine Strukturen, Unions, Enums und Funktionspointer
●
Kein Präprozessor (und Header-Dateien)
●
Keine Mehrfachvererbung
●
Kein Überladen von Operatoren
●
Kein goto
●
Keinen direkten Zugriff auf Speicher
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 12 von 42
Typische Java-Entscheidungen …
●
Statische Typisierung
●
Interfaces
●
Packages
●
Checked Exceptions
●
Unicode
●
Reflection
●
Multi-Threading
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 13 von 42
Typische Java-Entscheidungen …
●
Byte-Code-Verifier
●
Strong Typing
●
Sichere Arrays
●
Garbage Collection
●
Memory Model
… mit Konsequenzen
●
Technologie-Sprung
●
Performanz-Steigerung
●
Dynamische Flexibilität
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 14 von 42
Kontrovers: Checked Exceptions
try {
write(buffer, offset, length);
} catch (IOException e) {
// ignore
}
Stephen Colebourne:
●
Theoretisch eine gute Idee
●
Praktisch unbrauchbar
●
●
Code kann nicht wissen, ob der Aufrufer die Ausnahme behandeln
kann
Misslungenes Experiment
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 15 von 42
Mangelnde Uniformität
public void doItWith(boolean b) { … }
public void doItWith(byte b) { … }
public void doItWith(short s) { … }
public void doItWith(int i) { … }
public void doItWith(long l) { … }
public void doItWith(float f) { … }
public void doItWith(double d) { … }
public void doItWith(char c) { … }
public void doItWith(Object o) { … }
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 16 von 42
Bedenklicher Variantenreichtum
int n = array.length;
Integer[] integers = new Integer[…];
Number[] numbers = integers;
numbers[i] = Double.valueOf(0.3);
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 17 von 42
Unnütze Objekteigenschaft
private static final Object LOCK = new Object();
public void doIt() {
synchronized (LOCK) {
…
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 18 von 42
Versteckte Schwächen
public class Base {
public static void doIt(String s) { … }
}
public class Derived extends Base {
public static void doIt(String s) { … }
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 19 von 42
Entscheidungsprobleme
class Num {
public double add(Integer i, double d) { … }
public double add(int i, Double d) { … }
}
Num num = new Num();
Short s = 6;
Double d = 1.2;
num.add(s, d);
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 20 von 42
Evolution
●
Primäre Weisung
●
●
Rückwärtskompatibilität
Sekundäre Weisung
●
Das „Java-Feeling“ sichern
●
Die „konzeptionelle Integrität“ sichern
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 21 von 42
Problembeispiele
●
●
Probleme mit Generics
●
Primitive Datentypen
●
Arrays
●
Variable Argumentenliste
●
Methodenauflösung
Probleme mit Closures
●
Primitive Datentypen
●
Arrays
●
Checked Exceptions
●
Methodenauflösung
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 22 von 42
Kleine Änderungen
●
„foreach“ auch für Maps
●
Elvis-Operator
●
switch-break-Fix
●
Abfangen von „unmöglichen“ Checked Exceptions
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 23 von 42
Größere Änderungen
●
Properties
●
Steuerungsstrukturen
●
Bessere Generics
●
Traits
●
Continuations
●
Design by Contract
●
Nullable Types
●
Immutability
●
Values
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 24 von 42
Wunschliste …
●
Properties (Beans)
●
Immutability
●
Factory/Dependency Injection
●
Aspects
●
Logging
●
Reflection
●
Looping
●
Multi-Threading
●
Managed Resources
●
Module
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 25 von 42
Wunschliste
●
Performanz
●
„Beliebige“ Literale
●
Standard Scoping (public, protected, private et al.)
●
Operator Overloading
●
Build
●
Test
●
…
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 26 von 42
Entrauschung
public class Person {
private String surname;
private String forename;
private List<Address> addresses = new ArrayList<Address>();
public String getSurname() { ... }
public void setSurname(String surname) { ... }
public String getForename() { ... }
public void setForename(String forename) { ... }
public List<Address> getAddresses() { ... }
}
public List<Address> getAddresses(String type) {
List<Address> filtered = new ArrayList<Address>();
for (Address address : addresses) {
if (address.getType().equals(type)) {
filtered.add(address);
}
}
return filtered;
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 27 von 42
Entrauschung (ohne Satzzeichen)
public class Person {
private String surname
private String forename
private List<Address> addresses = new ArrayList<Address>()
public String getSurname() { ... }
public void setSurname(String surname) { ... }
public String getForename() { ... }
public void setForename(String forename) { ... }
public List<Address> getAddresses() { ... }
}
public List<Address> getAddresses(String type) {
List<Address> filtered = new ArrayList<Address>()
for (Address address : addresses) {
if (address.getType().equals(type)) {
filtered.add(address)
}
}
return filtered
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 28 von 42
Entrauschung (ohne Getter/Setter)
public class Person {
public String surname
public String forename
public List<Address> addresses = new ArrayList<Address>()
public List<Address> getAddresses(String type) {
List<Address> filtered = new ArrayList<Address>()
for (Address address : addresses) {
if (address.type.equals(type)) {
filtered.add(address)
}
}
return filtered
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 29 von 42
Entrauschung (public als default)
class Person {
String surname
String forename
List<Address> addresses = new ArrayList<Address>()
List<Address> getAddresses(String type) {
List<Address> filtered = new ArrayList<Address>()
for (Address address : addresses) {
if (address.type.equals(type)) {
filtered.add(address)
}
}
return filtered
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 30 von 42
Entrauschung (List-Typ, Typ-Inferenz)
class Person {
String surname
String forename
Address[] addresses = []
Address[] getAddresses(String type) {
var filtered = Address[]
for (Address address : addresses) {
if (address.type.equals(type)) {
filtered.add(address)
}
}
return filtered
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 31 von 42
Entrauschung (vernünftige Operatoren)
class Person {
String surname
String forename
Address[] addresses = []
Address[] getAddresses(String type) {
var filtered = Address[]
for (Address address : addresses) {
if (address.type == type) {
filtered.add(address)
}
}
return filtered
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 32 von 42
Entrauschung (Schleife …)
class Person {
String surname
String forename
Address[] addresses = []
Address[] getAddresses(String type) {
var List<Address> filtered = Address[]
for (Address address : addresses) {
if (address.type == type) {
filtered.add(address)
}
}
return filtered
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 33 von 42
Entrauschung (… durch Filter ersetzen)
class Person {
String surname
String forename
Address[] addresses = []
Address[] getAddresses(String type) {
return addresses.filtered(#(address) {address.type == type})
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 34 von 42
Entrauschung (Satzzeichen)
class Person {
String surname
String forename
Address[] addresses = []
Address[] getAddresses(String type) {
return addresses.filtered #(address) {address.type == type}
}
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 35 von 42
Entrauschung (nur zur Erinnerung)
public class Person {
private String surname;
private String forename;
private List<Address> addresses = new ArrayList<Address>();
public String getSurname() { ... }
public void setSurname(String surname) { ... }
public String getForename() { ... }
public void setForename(String forename) { ... }
public List<Address> getAddresses() { ... }
}
public List<Address> getAddresses(String type) {
List<Address> filtered = new ArrayList<Address>();
for (Address address : addresses) {
if (address.getType().equals(type)) {
filtered.add(address);
}
}
return filtered;
}
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 36 von 42
Der abschließende Blick in die Glaskugel
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 37 von 42
Zeitgeist (heute)
●
●
Sprachorientierte Programmierung
(Language Oriented Programming)
Unveränderlichkeit
(Immutability)
●
Funktionale Programmierung
●
Nebenläufigkeit und Parallelität
●
Auf jeden Fall so eine Art Paradigmenwechsel
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 38 von 42
Aber …
Das am besten geeignete Mittel
ist meist
das am besten geeignete Mittel
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 39 von 42
Meine ganz persönliche Prognose
●
Keine Limitierung durch den Zeichensatz
●
Einheitliche, nachladbare Syntax
●
Beliebige, nachladbare Paradigmen
●
Repository
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 40 von 42
Vielen Dank!
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 41 von 42
Refernzen
Diese „Liebeserklärung“ an Java wurde von dem Vortrag „The Next Big JVM
Language“, den Stephen Colebourne im September 2010 auf der JavaOne
gehalten hat, inspiriert.
Ein diesbezüglicher Blog-Eintrag von Stephen Colebourne findet sich unter
http://www.jroller.com/scolebourne/entry/the_next_big_jvm_language1
oder im KaffeeKlatsch:
Stephen Colebourne
Die nächste große JVM-Sprache
Ideen und Gedanken eines Java-Entwicklers
KaffeeKlatsch 02/2011, Bookware, Erlangen, Februar 2011
http://www.bookware.de/kaffeeklatsch/archiv/KaffeeKlatsch-2011-02.pdf
Das Beispiel für die Entrauschung stammt aus obigem Vortrag von Stephen
Colebourne, das sich an der von ihm befürworteten Sprache Fantom
http://fantom.org
orientiert.
Das nächste große (Java-)Ding
Copyright © 2011, MATHEMA Software GmbH
Folie 42 von 42