Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Oracle: Java 12 führt…

es geht weiter - ich bin positiv überrascht

  1. Thema

Neues Thema Ansicht wechseln


  1. es geht weiter - ich bin positiv überrascht

    Autor: devman 20.03.19 - 16:56

    Anfangs war ich schockiert über Oracles Planänderung zu Java, aber jetzt sieht man doch, es lohnt sich. Die interessanten Neuerungen kommen zügig in die neuen Versionen rein und werden viel schneller released.

  2. Re: es geht weiter - ich bin positiv überrascht

    Autor: teenriot* 20.03.19 - 17:15

    Dadurch kommt es trotzdem nicht unbedingt schneller in der Landschaft an. Bei seinem Hobby-Projekt mag man ja freudig mitziehen, kommerzielle Anwendungen haben dagegen einen eingebauten Panik-Modus. Man wird sehen wie es sich entwickelt.

    Die Änderungen sind jetzt auch nicht der Brüller.

    Am Grundproblem von Java ändert sich nichts, es ist einfach altbacken geworden.
    switch als Ausdruck ist nett, aber auch nur Kosmetik und sicherlich wieder mit Fallthrough, den man nur in 0.0001% der Fälle braucht, eigentlich ein Code-Smell ist, dafür aber in den anderen 99.9999% der Fälle der Code unnötig hässlich macht.

    Iterator, Iterable, Arrays, Collections, Streams
    => Wie wärs wenn man da mal etwas Ordnung reinbringt und generalisiert, sodass man nicht entweder Wrapper-Methoden bauen muss oder ständig in dem Code Konvertierungen vornehmen muss, der eigentlich ausdrucksstark sein sollte.

    Oder: stringList.stream().map(e -> e.toLowerCase).collect(Collectors.toList())
    Meine Güte, dabei muss man die Streams ja schon als großen Fortschritt bezeichnen. Aber wie immer überakademisiert und hässlich. In Xtend schreib ich dagegen:
    stringList.map[it.toLowerCase()]
    ("it." und die Klammern könnte man sogar noch weglassen)

    Aber da lässt sich nicht viel machen weil, Achtung heilige Kuh, Rückwärtskompatibilität. Ich wäre dringend dafür einen Bruch zu machen und die Rückwärtskompatibilität zu brechen um dafür wirklich moderne Features und Syntax-Sugar einzuführen. Einen Bruch mit der Rückwärtskompatibilität alle 25 Jahre kann man sich erlauben, dann klappt's auch mit dem nächsten Jahrhundert,

    Wenigstens ein wirklicher Fortschritt ist in Aussicht, Project Valhalla. Aber wer weiß, ist wohl immer noch im Experimentierstadium und war mal für Java 10 gedacht *hust*.

  3. Re: es geht weiter - ich bin positiv überrascht

    Autor: elgooG 20.03.19 - 19:00

    Noch dazu kommen die Beiträge nicht zwangsläufig von Oracle. Die Basis bildet auch weiterhin OpenJDK.

    Im Grunde ist alles Syntax Sugar. Die Grenze ist auch weiterhin eine VM die eigentlich nicht einmal Generics direkt sondern über Compiler-Tricks beherrscht. Man humpelt modernen Sprachen wie C#, Swift und Kotlin auch weiter hinterher und Getter-/Setter sind wohl eine Plage die man noch ewig mitschleift. Das die IDEs sehr viel Code automatisch generieren um den Enwtickler zu entlasten ändert nichts daran. Dazu kommen Unmengen an Legacy-Klassen/-Frameworks. Darüber täuscht auch der aktuelle modularere Aufbau nicht hinweg.

    Zu einem Cut wird es aber nie so recht kommen. Kompatibilität und Zuverlässigkeit ist bei Enterprise-Anwendungen eben wichtig. Tolle IDEs wie IntelliJ unterstützen zudem die Entwickler.

    Nicht zuletzt würden sich Unternehmen wieder am Markt umsehen, wenn es einen Cut geben würde und es wäre eine riesige risikoreiche Investition nötig.

    Kann Spuren von persönlichen Meinungen, Sarkasmus und Erdnüssen enthalten. Ausdrucke nicht für den Verzehr geeignet. Ungelesen mindestens haltbar bis: siehe Rückseite

  4. Re: es geht weiter - ich bin positiv überrascht

    Autor: teenriot* 20.03.19 - 19:30

    Die Alternative zum Cut ist eine Zersplitterung des Ökosystem innerhalb der JVM und das schwächt alle. Es ist ja nicht so, dass die Leute, die auf Scala, Kotlin, Clojure umsteigen, dass als Revoluzzer tun, die die Java-Obrigkeit abschaffen wollen. Sie wollen einfach nur nicht länger ausgebremst werden sondern stattdessen mit der Zeit gehen und das am liebsten mit Java.

    Warum kann Java kein safe navigation operator einführen?
    statt: if (myRef != null) myRef.doStuff()
    einfach: myRef?.doStuff()
    Probleme mit der Rückwärtskompatibilität: null

  5. Re: es geht weiter - ich bin positiv überrascht

    Autor: nolonar 21.03.19 - 00:07

    teenriot* schrieb:
    --------------------------------------------------------------------------------
    > Oder: stringList.stream().map(e ->
    > e.toLowerCase).collect(Collectors.toList())
    > Meine Güte, dabei muss man die Streams ja schon als großen Fortschritt
    > bezeichnen. Aber wie immer überakademisiert und hässlich. In Xtend schreib
    > ich dagegen:
    > stringList.map[it.toLowerCase()]
    > ("it." und die Klammern könnte man sogar noch weglassen)

    In C# mit Linq ungefähr genau so simpel:
    stringList.Select(s => s.ToLower())

    Und es funktioniert mit jeder Klasse, die IEnumerable implementiert (also alles, was man durch foreach jagen kann).

    Array Streams in Java?
    Arrays.stream(array).filter(e -> e != null) // WTF?!
    Stream.of(array).filter(e -> e != null) // besser, aber immer noch nicht gut...

    In C#?
    array.Where(e => e != null) // eigentlich selbstverständlich...


    Und dann wäre noch die verkrüppelt implementierten Generics...
    @Override
    public void bla(Object o) // vorgegeben vom Interface

    public void bla(T t) // ERROR: Duplicate method

    Das hat mich erstmal verwirrt. "Ich dachte Java unterstützt overloading, warum geht es nicht?" Ja, Java unterstützt overloading, aber nicht mit Generics...
    Wäre auch nur halb so schlimm, wenn wenigstens folgendes möglich wäre:
    public void bla(Object o) {
    if (o instanceOf T) // geht nicht
    // ...
    }

    Und das gleiche in C#:
    public void Bla(object o) // vorgegeben vom Interface
    {
    var t = o as T;
    if (t != null)
    Bla(t);
    }

    public void Bla (T t)

    Simpel, sauber, funktioniert.


    Dass Java rückwärtskompatibel sein will verstehe ich ja, aber wenn die Sprache dadurch inkonsistent und halbgar wirkt, sollte man sich vielleicht mal überlegen da ein wenig aufzuräumen.

  6. Re: es geht weiter - ich bin positiv überrascht

    Autor: KloinerBlaier 21.03.19 - 08:07

    Grundsätzlich mag ich Java, vorallem uralten Plain-Java-Code finde ich sehr leserlich und ist aufgrund der starken Typisierung auch sehr gut in der Handhabung.

    Ich habe letztens mit Javascript entwickelt und ich mag das wirklich nicht. Interessant finde ich jedoch, wie man immer mehr versucht alles abzudecken. Javascript hat seit ES6 einen enormen Schritt ich Richtung (leserliche) "OOP" gemacht.
    Und auch Java bietet immer mehr Möglichkeiten, dabei wird es aber genau so unleserlich wie andere Programmiersprachen. Außerdem ziehen viele andere Entwickler halt einfach nicht mit. Vor Streams wird sich förmlich gesträubt.
    Wer modernes Java machen will, nutzt sowieso bereits Kotlin. Da wurde Java wirklich mal vereinfacht.
    In vielen Bereichen hat Java auch bereits an Bedeutung verloren. Wo früher ganze Seiten mit JSF realisiert wurden, schreibt man heute vielleicht noch das Backend in Java und auch dabei kloppt man mit Spring eine popelige REST-API zusammen.

  7. Re: es geht weiter - ich bin positiv überrascht

    Autor: minnime 21.03.19 - 11:29

    Dass ich stream() aufrufen muss finde ich eigentlich in Ordnung, e -> e.toLowerCase ließe sich zu String::toLowerCase verkürzen aber collect(Collectors.toList()) ist wirklich ein Ärgernis weil das häufig benutzt wird. Da wäre der feste Einbau von Stream.toList() wirklich sinnvoll.
    Die Erweiterung beim Switch Statement hätten sie sich schenken können, zumal man Switch eigentlich eh selten verwendet.
    Man muss ja auch nicht jedes Sprachfeature einbauen aber Properties wären wirklich sinnvoll und ich habe keine Ahnung warum die sich so dagegen sträuben.

    Es wird generell viel am Garbage Collector rumgeschraubt aber irgendwie kommt da nicht viel bei rum. Es ist erstaunlich wie viel Speicher Javaprogramme verbrauchen. Mein Eclipse zieht aus dem Stand 800 MB und eine Elasticsearch Instanz sogar 1 GB ohne dass da Daten drin sind. .Net Programme sind da deutlich genügsamer

  8. Re: es geht weiter - ich bin positiv überrascht

    Autor: lestard 21.03.19 - 18:08

    Ein Unterschied ist, dass Streams bei Java lazy sind.
    Die Map-Funktion wird erst auf die Elemente angewandt, wenn tatsächlich "collected" wird.
    Sowas geht nur in Lazy-Sprachen wie Haskell "einfach so". In allen anderen Sprachen muss man sich dafür was besonderes ausdenken um die Evaluierung von dem Zusammenbauen der Operationen zu trennen - Zumindest, wenn man lazy-Streams haben will.

    Im Xtend-Beispiel ist das map z.B. mit ziemlicher Sicherheit nicht lazy.

    Ich persönlich würde mir auch wünschen, dass z.B. List in Java direkt ein nicht-lazy "map" sowie "flatMap" bekommt. Aber das sind halt 2 Paar Schuhe die man hier vergleicht.

  9. Re: es geht weiter - ich bin positiv überrascht

    Autor: teenriot* 21.03.19 - 20:12

    Doch im Xtend-Beispiel ist die Ergebnis-Liste lazy. Die Elemente werden erst berechnet wenn sie abgerufen werden. Das ist wie bei Guavas Iterables.

    Ich vergleiche nicht Streams mit lazy Listen, aber man möchte in beiden Fällen das gleiche Ergebnis erreichen, vollkommen egal was man dafür benutzen muss, damit es ausdrucksstark wird. Es geht mir auf den Senkel, dass bei Java immer nur akademisch gedacht wird und die Praxis außen vorgelassen wird. Es tut doch keinem weh, wenn es Methoden gibt die stream().filter() und stream().map() als filter() und map() abkürzen. Dann noch ein toList() dazu und bei 90% der Stellen, bei der in der Praxis streams verwendet werden, hat man ausdrucksstärkeren Code.

    Das Beispiel ist nur exemplarisch. Der akademische Stil zieht sich halt durch und macht alles so unglaublich verbose. Die eigentliche Programm-Logik verschwindet in einem Meer an an Ballast. Irgendwie glauben die Java-API-Entscheider immer, dass weniger Methoden besserer Code ist, dafür soll es aber guter Code sein alles zu abstrahieren bis zum einzelnen Bit. Das ist auch nicht so grundverkehrt. Aber der eigentlich Code ist das Endprodukt und nicht die verwendeten Bibliothek. Die ist ein Werkzeug und darf gerne Komfort-Methoden haben, wenn es dem End-Code nützt, zumal diese oft auch wartungsfrei zu haben sind, weil es einfach simple Wrapper oder Delagates wären. Und man darf auch gerne Komplexität, die in der überwältigenden Mehrheit der Anwendungsfälle nicht benötigt wird, hinter Methoden verstecken, die auf diese häufigen Anwendungsfälle in der Praxis ausgelegt sind.

    Wir haben 2019 und im Java-Code sind immer noch keine Strings über mehrere Zeilen möglich. Das soll kommen, aber wie lange hat das dann gebraucht?



    1 mal bearbeitet, zuletzt am 21.03.19 20:14 durch teenriot*.

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Stellenmarkt
  1. i-SOLUTIONS Health GmbH, Bochum
  2. NÜRNBERGER Versicherung, Nürnberg
  3. Bundesamt für Verbraucherschutz und Lebensmittelsicherheit, Berlin, Braunschweig
  4. PKS Software GmbH, München

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Top-Angebote
  1. (u. a. Logitech G502 Hero für 44€ und G903 für 79€ und diverse TV-, Audio-, Computer- und...
  2. (heute u. a. Samsung-TVs der RU8009-Reihe und Gaming-Stühle)
  3. 41,80€ inkl. Rabattgutschein (Bestpreis!)
  4. 79€


Haben wir etwas übersehen?

E-Mail an news@golem.de


Party like it's 1999: Die 510 letzten Tage von Sega
Party like it's 1999
Die 510 letzten Tage von Sega

Golem retro_ Am 9.9.1999 kam in den USA mit der Sega Dreamcast die letzte Spielkonsole der 90er Jahre auf den Markt. Es sollte auch die letzte Spielkonsole von Sega werden. Aber das wusste zu diesem Zeitpunkt noch niemand.
Von Martin Wolf


    Garmin Fenix 6 im Test: Laufzeitmonster mit Sonne im Herzen
    Garmin Fenix 6 im Test
    Laufzeitmonster mit Sonne im Herzen

    Bis zu 24 Tage Akkulaufzeit, im Spezialmodus sogar bis zu 120 Tage: Garmin setzt bei seiner Sport- und Smartwatchserie Fenix 6 konsequent auf Akku-Ausdauer. Beim Ausprobieren haben uns neben einem System zur Stromgewinnung auch neue Energiesparoptionen interessiert.
    Ein Test von Peter Steinlechner

    1. Fenix 6 Garmins Premium-Wearable hat ein Pairing-Problem
    2. Wearable Garmin Fenix 6 bekommt Solarstrom

    5G-Antenne in Berlin ausprobiert: Zu schnell, um nützlich zu sein
    5G-Antenne in Berlin ausprobiert
    Zu schnell, um nützlich zu sein

    Neben einem unwirtlichen Parkplatz in Berlin-Adlershof befindet sich ein Knotenpunkt für den frühen 5G-Ausbau von Vodafone und Telekom. Wir sind hingefahren, um 5G selbst auszuprobieren, und kamen dabei ins Schwitzen.
    Von Achim Sawall und Martin Wolf

    1. Tausende neue Nutzer Vodafone schafft Zuschlag für 5G ab
    2. Vodafone Callya Digital Prepaid-Tarif mit 10 GByte Datenvolumen kostet 20 Euro
    3. Kabelnetz Vodafone bekommt Netzüberlastung nicht in den Griff

    1. Biografie erscheint: Union lehnt Asyl für Snowden weiter ab
      Biografie erscheint
      Union lehnt Asyl für Snowden weiter ab

      US-Whistleblower Edward Snowden hätte weiterhin nichts dagegen, Russland in Richtung Deutschland zu verlassen. Doch Schutz vor einer Auslieferung in die USA kann er hierzulande nicht erwarten.

    2. Lufttaxi: Volocopter hebt in Stuttgart ab
      Lufttaxi
      Volocopter hebt in Stuttgart ab

      In Stuttgart ist der Volocopter erstmals in einer europäischen Innenstadt abgehoben. Rund vier Minuten befand sich das Flugtaxi in der Luft. Für kommerzielle Flüge fehlt jedoch noch die Genehmigung.

    3. Pixel: Googles neue Kamera-App vom Pixel 4 geleakt
      Pixel
      Googles neue Kamera-App vom Pixel 4 geleakt

      Programmierer haben sich die geleakte neue Version von Googles Kamera-App genauer angeschaut und einige Verbesserungen in der Benutzerführung entdeckt. Zudem sollen Nutzer die automatischen Hinweise während der Aufnahme abschalten können.


    1. 11:39

    2. 15:47

    3. 15:11

    4. 14:49

    5. 13:52

    6. 13:25

    7. 12:52

    8. 08:30