Dlaczego Java jest rozwijana dziwacznie?

0

Czy tylko ja mam wrażenie, że nowe ficzery w Java są wrzucane kompletnie z d...?

Przykłady:
Class property. Cały świat używa raka pod tytułem @Lombok bo skoro nasi dziadowie pisali get i set, to my tez tak będziemy. Co stoi na przeszkodzie umożliwienia takiej składni:

public String imie;
@ Override get{
return "";
}

Gdzie do każdego publicznego pola klasy jest generowany "wewnętrznie" getter, jak pole nie jest final to również setter, które w razie czego można sobie z ręki nadpisać?

Albo dlaczego do kolekcji nie da się dodać MultiMap, tylko jak pojawia się potrzeba użycia, to trzeba rozkminiać, czy opłaca się załadować Guavę do projektu, czy to jeszcze nie ten moment i jednak rzeźbić "coś" samodzielnie. Dlaczego ogólnie ~80% Guavy nie jest w standardowych bibliotekach?

Rozwój switch...case w ciągu 30 lat to:

  • można jedynie po prymitywach
  • po 20 latach, no dobra, robimy rewolucję, można po String
  • Kurde, wiedziałem, żeby nie wprowadzać tych enumów.... no dobra, po enumach też można...
  • TDD!!! robimy sealed class, wrzućmy ją do switcha

Czemu nie można tego zrobić od razu po czymkolwiek, dokładając od razu możliwość zastąpienia ciągów if else i wpisywania warunków?

Wprowadzenie null safety... no kurczę jak można wprowadzać null safety opcjonalnie?! Ok, rozumiem, legacy, ale przecież można zwyczajnie wprowadzić opcję kompliatora -wantAppCrashOnNulls. Braki Either itd. pominę milczeniem.

Modularyzacja... od daaaawna wiadomo, że w Javie brakuje dobrym możliwości zdefiniowania zewnętrznego interface'u pakietu. Po 20 latach wchodzą moduły, ale tak, żeby nie dało się ich używać. Pod hasłem "Java 8 forever".

I ja rozumiem, kompatybilność wsteczna. Tylko skoro powstają języki Java interoperable, które tych wad nie mają, to może i w Java by się dało?

4

na początek zarzucę powiedzeniem, którego często używała moja babcia: https://pl.wiktionary.org/wiki/jeszcze_si%C4%99_taki_nie_urodzi%C5%82,_co_by_wszystkim_dogodzi%C5%82
nie ma języków, które wszystkim robią dobrze. każdy obrywa krytyką, więc i rozsądnym autorom nie zależy na tym, by wszystkim zrobić dobrze naraz.

piotrpo napisał(a):

Czy tylko ja mam wrażenie, że nowe ficzery w Java są wrzucane kompletnie z d...?

z d... czy po prostu powoli?

Class property. Cały świat używa raka pod tytułem @Lombok bo skoro nasi dziadowie pisali get i set, to my tez tak będziemy. Co stoi na przeszkodzie umożliwienia takiej składni:

public String imie;
@ Override get{
return "";
}

Gdzie do każdego publicznego pola klasy jest generowany "wewnętrznie" getter, jak pole nie jest final to również setter, które w razie czego można sobie z ręki nadpisać?

automatyczne gettery masz przy rekordach, ale takie bez przedrostka get, więc w sumie nie wpisują się w tę starożytną konwencję.

z tego co czytałem jeszcze niedawno na listach dyskusyjnych openjdk to autorzy javy traktują brak properties jako pożądaną prostotę i zaletę javy, tzn. kod typu obiekt.pole zawsze oznacza samo wyodrębnienie wartości pola z obiektu, a nie dowolną logikę, która może być ukryta pod getterem z propertiesa.

Albo dlaczego do kolekcji nie da się dodać MultiMap, tylko jak pojawia się potrzeba użycia, to trzeba rozkminiać, czy opłaca się załadować Guavę do projektu, czy to jeszcze nie ten moment i jednak rzeźbić "coś" samodzielnie. Dlaczego ogólnie ~80% Guavy nie jest w standardowych bibliotekach?

ile języków ma wbudowane multimapy?

Rozwój switch...case w ciągu 30 lat to:

  • można jedynie po prymitywach
  • po 20 latach, no dobra, robimy rewolucję, można po String
  • Kurde, wiedziałem, żeby nie wprowadzać tych enumów.... no dobra, po enumach też można...
  • TDD!!! robimy sealed class, wrzućmy ją do switcha

Czemu nie można tego zrobić od razu po czymkolwiek, dokładając od razu możliwość zastąpienia ciągów if else i wpisywania warunków?

to jest zażalenie typu: czemu zaczęli od javy 1.0, a nie od javy 15 od razu? przypominają mi się żale jakiejś panny w internecie. (ironicznie) pytała czemu faceci nie rodzą się od razu po 30-tce, tylko na początku są niedojrzałymi dupkami (to jej opinia). cóż, każdy język dojrzewa i obrasta w nowe bajery z czasem.

Wprowadzenie null safety... no kurczę jak można wprowadzać null safety opcjonalnie?! Ok, rozumiem, legacy, ale przecież można zwyczajnie wprowadzić opcję kompliatora -wantAppCrashOnNulls. Braki Either itd. pominę milczeniem.

jak masz jakiś świetny pomysł to możesz zarzucić na liście dyskusyjnej, np. tu https://mail.openjdk.java.net/pipermail/discuss/ albo tu https://mail.openjdk.java.net/pipermail/amber-dev/2022-May/007333.html (jak widać, nawet dość niedawno ktoś zarzucił pomysł o null-safety i się wywiązała dyskusja)

Modularyzacja... od daaaawna wiadomo, że w Javie brakuje dobrym możliwości zdefiniowania zewnętrznego interface'u pakietu. Po 20 latach wchodzą moduły, ale tak, żeby nie dało się ich używać. Pod hasłem "Java 8 forever".

modularyzacja działa, ale problemem jest wszędobylska (w świecie javy) skłonność do refleksji, by dostać się do szczegółów implementacyjnych (co jest przecież blokowane przed modularyzację) i grzebać nie tam gdzie powinno się grzebać (np. w implementacji classloaderów). można jednak mieć program częściowo zmodularyzowany i częściowo nie.

moim zdaniem trend na mikroserwisy osłabił motywację do ścisłej modularyzacji. w przypadku "modularnych monolitów" wsparcie w modularyzacji od jvma byłoby bardzo pomocne, ale mikroserwisy mają tak czy siak mocną izolację kodu z definicji.

I ja rozumiem, kompatybilność wsteczna. Tylko skoro powstają języki Java interoperable, które tych wad nie mają, to może i w Java by się dało?

hm, tych języków kompatybilność wsteczna (z różnych powodów) mniej dotyczy (np. po prostu mniej się tym przejmują), więc to jednak inny kaliber problemu.

1

Nie ma języka, który rozwija się dynamicznie i przy okazji nie popełnia błędów projektowych. Jeszcze gorzej jak język jest popularny i zaczyna eksperymentować sam na sobie zamiast czerpać doświadczenie z eksperymentów na językach, których nikt nie używa (patrz C++). Wyobraź sobie, że cofamy się 20 lat do tyłu i ktoś mówi jak to jest możliwe, że nie każda klasa ma pusty konstruktor, przecież wszystko powinno być java beanem, najlepiej dodać go jako default. Moda się zmienia, zobaczymy jak za 15 lat temu będziemy patrzyć na te wszystkie Eithery i tak dalej (nie mówię, że to podejście jest złe ale przykładowo może lepiej iść w nowy język niż tak mocno zmieniać istniejący?).

0

O co chodzi z Multimapami?
z tej definicji https://en.wikipedia.org/wiki/Multimap
wnioskuję, że to po prostu haszmapa, dla której jeden klucz mapuje się na wiele wartości?

To czemu nie zrobić po prostu zwykłej haszmapy, która przechowuje tablicę (czy inną kolekcję, nie wiem, nie piszę w Javie)?

Czy faktycznie multimapy są koniecznym elementem nowoczesnym języka programowania?

1
Wibowit napisał(a):

z d... czy po prostu powoli?

Powoli i w bardzo dziwnej kolejności.

automatyczne gettery masz przy rekordach, ale takie bez przedrostka get, więc w sumie nie wpisują się w tę starożytną konwencję.

Tak, możesz sobie nawet tego gettera nadpisać. Wciąż rekord to nie klasa. Np. nie ma możliwości dopisania setera. Get i set powstały, żeby mieć niezmienny interface klasy i właśnie móc jak by co pokombinować sobie z implementacją. Jeżeli założyć, że za każdym razem ma tam być to co robi Lombok, to ta koncepcja już kompletnie traci swój sens.

z tego co czytałem jeszcze niedawno na listach dyskusyjnych openjdk to autorzy javy traktują brak properties jako pożądaną prostotę i zaletę javy, tzn. kod typu obiekt.pole zawsze oznacza samo wyodrębnienie wartości pola z obiektu, a nie dowolną logikę, która może być ukryta pod getterem z propertiesa.

Uważam inaczej, ogólnie to ośmielę się twierdzić, że OOP tez uważa inaczej. Przecież właściwie z założenia masz to isPies() po to, żebyć nie musiał patrzeć czy pod spodem jest pole, czy może automat sprawdzający DNA. Wystawienie gołego pola public boolean pies nie przejdzie przez żadne code review, nie próbowałem, ale zakładam, że takiego Sonara również zniesmaczy.

ile języków ma wbudowane multimapy?

Nie wiem, tylko potrzeba jej użycia jest na tyle częsta, że mnie to dziwi. Nawet dzisiaj pisałem gdzieś o porównywaniu plików. I owszem, można przy każdej próbie wstawienia czegoś pisać:

  if(map.containsKey(key)){
    map.get(key).add(value)
  } else {
    var list = new ArrayList();
    list.addValue(value);
    map.add(new ArrayList)
  }

Albo w niektórych przypadkach wrzucić wszystko do jednej listy, a później list.stream().groupBy(...) i mieć, tylko trochę szkoda pary na to.

to jest zażalenie typu: czemu zaczęli od javy 1.0, a nie od javy 15 od razu? przypominają mi się żale jakiejś panny w internecie. (ironicznie) pytała czemu faceci nie rodzą się od razu po 30-tce, tylko na początku są niedojrzałymi dupkami (to jej opinia). cóż, każdy język dojrzewa i obrasta w nowe bajery z czasem.

No bez przesady: 20 lat na dołożenie String do obsługiwanych typów, licznik dla "switch dla wszystkich" wciąż tyka.

jak masz jakiś świetny pomysł to możesz zarzucić na liście dyskusyjnej, np. tu https://mail.openjdk.java.net/pipermail/discuss/ albo tu https://mail.openjdk.java.net/pipermail/amber-dev/2022-May/007333.html (jak widać, nawet dość niedawno ktoś zarzucił pomysł o null-safety i się wywiązała dyskusja)

Nie wierzę w zmiany, które mogłyby się dokonać za mojego życia.

modularyzacja działa, ale problemem jest wszędobylska (w świecie javy) skłonność do refleksji, by dostać się do szczegółów implementacyjnych (co jest przecież blokowane przed modularyzację) i grzebać nie tam gdzie powinno się grzebać (np. w implementacji classloaderów). można jednak mieć program częściowo zmodularyzowany i częściowo nie.

Nie tylko to. Cykliczne odwołania skutecznie zabezpieczą pracę dla następnych programistów Java 8.

moim zdaniem trend na mikroserwisy osłabił motywację do ścisłej modularyzacji. w przypadku "modularnych monolitów" wsparcie w modularyzacji od jvma byłoby bardzo pomocne, ale mikroserwisy mają tak czy siak mocną izolację kodu z definicji.

Spróbujmy bez modularyzacji napisać bibliotekę i udostępnić tylko jej zewnętrzny interface. Taką trochę rozbudowaną, z więcej niż jednym pakietem.

1

U powstania (199x) właściwie nie było się do czego odnieść, obiektówka była na universytetach dla intelektualistów w kilku niszowych językach, jedynym językiem szerzej przyjętym (i najczęściej źle używanym) w jakiś koszmar-dialektach był C++
Ewamgelizm Javy ma liczne ślady porównania do C++.

Znam te czasy z niepełnych wspomnień (powszechnego Internetu nie było), jakieś ksera z Byte itd... ale wydaje mi się że koncepcja właściwości / property nie istniała, może gdzieś świtała w dziełach praktyków, ale była jarmarczna i niegodna prawdziwych teoretyków. Jak się post factum dorabia, to najczęsciej dorabia się źle
BTW Java Beany nie są od początku. Źle sie stało, że property były wprowadzone przez konwencję nazewniczą, a nie sztywny syntax języka. Jak Java weszła w buty C++, tak C# zrobił property dopiero dobrze.
W 12-17 są przebłyski, co moglibyśmy myśleć o propertisach (gdybyśmy myśleli)

Kaleka i późna pętla foreach

  1. Multimap?
    Od kiedy kolekcje są twardą cechą języka? To obszar też ważny, ale jednak biblioteki standardowej.

Moje wielkie pozytywne odkrycia javy.
a)
Kolekcje<typowane> - to była chyba piątka ? Czwórka? Miałem już wcześniej świadomość istnienia Javy, ale kontenery typu Object to dla mnie był syf (w dialektach C++ było to zrobione - na moje ówczesne oczekiwania - dobrze, typesafe). Jakoś tam po tej zmianie zacząłem mieć produkcyjny kod w Javie, wcześniej palce mi odmawiały.
b) enum. Przez sam fakt enuma oddzielonego od static final integerów, typesafe, potem specyficzne dla Javy jego hiper-możliwosci (dla mnie pozytywne).
c) pakiet, duży, przyniesiony z Javą 5 (trudny dla mnie do uchwycenia bo obszerny) i Javą 8 tu już jaśniej skumulowany (thanks to JodaTime - taka inna Guava). Nawet bardziej cenię pozytywne zmiany w Date i kontenerach (które nie są językiem a biblioteką), niż syntaktyczne (w tym funkcyjne)

przypominają mi się żale jakiejś panny w internecie. (ironicznie) pytała czemu faceci nie rodzą się od razu po 30-tce, tylko na początku są niedojrzałymi dupkami (to jej opinia).

Boskie i na temat

2

@LukeJL: dobrze mówisz jednak multimapa ma wygodniejsze api niż mapa list. I to jest jedyna różnica IMHO

2
piotrpo napisał(a):
Wibowit napisał(a):

z d... czy po prostu powoli?

Powoli i w bardzo dziwnej kolejności.

opinia jest jak d... :)

automatyczne gettery masz przy rekordach, ale takie bez przedrostka get, więc w sumie nie wpisują się w tę starożytną konwencję.

Tak, możesz sobie nawet tego gettera nadpisać. Wciąż rekord to nie klasa. Np. nie ma możliwości dopisania setera. Get i set powstały, żeby mieć niezmienny interface klasy i właśnie móc jak by co pokombinować sobie z implementacją. Jeżeli założyć, że za każdym razem ma tam być to co robi Lombok, to ta koncepcja już kompletnie traci swój sens.

hmm, chyba za mało imperatywny jestem, bo dla mnie setter w interfejsie to jakaś dziwna abstrakcja. może ktoś bardziej imperatywny się o tym wypowie. jak dla mnie setteroza to straszna choroba i dobrze jest ją ograniczać do minimum.

z tego co czytałem jeszcze niedawno na listach dyskusyjnych openjdk to autorzy javy traktują brak properties jako pożądaną prostotę i zaletę javy, tzn. kod typu obiekt.pole zawsze oznacza samo wyodrębnienie wartości pola z obiektu, a nie dowolną logikę, która może być ukryta pod getterem z propertiesa.

Uważam inaczej, ogólnie to ośmielę się twierdzić, że OOP tez uważa inaczej. Przecież właściwie z założenia masz to isPies() po to, żebyć nie musiał patrzeć czy pod spodem jest pole, czy może automat sprawdzający DNA. Wystawienie gołego pola public boolean pies nie przejdzie przez żadne code review, nie próbowałem, ale zakładam, że takiego Sonara również zniesmaczy.

ale obiekt.pole niekoniecznie musi być w kontekście używania z zewnątrz czy publicznego api. obiekt.pole to może być niepubliczny szczegół implementacyjny, zwykła implementacja metody w klasie.

ile języków ma wbudowane multimapy?

Nie wiem, tylko potrzeba jej użycia jest na tyle częsta, że mnie to dziwi. Nawet dzisiaj pisałem gdzieś o porównywaniu plików. I owszem, można przy każdej próbie wstawienia czegoś pisać:

  if(map.containsKey(key)){
    map.get(key).add(value)
  } else {
    var list = new ArrayList();
    list.addValue(value);
    map.add(new ArrayList)
  }

Albo w niektórych przypadkach wrzucić wszystko do jednej listy, a później list.stream().groupBy(...) i mieć, tylko trochę szkoda pary na to.

to jakaś przedpotopowa java. zamiast tego polecam skorzystać z dokumentacji javy 8:
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util.function.Function-

Or to implement a multi-value map, Map<K,Collection<V>>, supporting multiple values per key:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);

a do łączenia do jednej listy to może coś w ten deseń (pisane z głowy, może się nie kompilować):

Map<A, Set<B>> mapOfSets = ...;
Stream<B> concatenatedValuesStream = mapOfSets.values().stream().flatMap(s -> s.stream());

?

0
Wibowit napisał(a):

hmm, chyba za mało imperatywny jestem, bo dla mnie setter w interfejsie to jakaś dziwna abstrakcja. może ktoś bardziej imperatywny się o tym wypowie.

Rozumiem.

To, że w pewnych wzorcach (w bardzo dużym uproszczeniu nazwijmy backendowych) setter jest niemile widziany, rozumiem. Rewolucja immutowlaności (też koncepcja nie odwieczna) mi się podoba.

Ale w warstwach UI?
Ja sobie nie wyobrażam języka ogólnego przeznaczenia - nie jestem bliski głębokiej teorii języków - bez settera (jakąkolwiek postać formalną by to miało) i mutowalności.
Ale w pełni rozumiem wzorzec, zachętę do nieużywania .

Język wykastrowany z tego nie byłby j.og.przeznaczenia (i pewnie spowodował by wypączkowanie jakiegoś koszmaru, który to da) - choć być może miałby sukces jak to użyłem słowa "w backendzie"

1
ZrobieDobrze napisał(a):
Wibowit napisał(a):

hmm, chyba za mało imperatywny jestem, bo dla mnie setter w interfejsie to jakaś dziwna abstrakcja. może ktoś bardziej imperatywny się o tym wypowie.

(...)

Ale w warstwach UI?
Ja sobie nie wyobrażam języka ogólnego przeznaczenia - nie jestem bliski głębokiej teorii języków - bez settera (jakąkolwiek postać formalną by to miało) i mutowalności.

trochę się zgadzam, a trochę nie. o ile na niskim poziomie abstrakcji do gui (np. bindingi do natywnych kontrolek systemu operacyjnego) setteroza jest nieunikniona, o tyle na wyższym poziomie generalnie da się zrobić coś bardziej deklaratywnego co pokazuje np. react.js / react-native / etc. no i przede wszystkim obecnie gui w javie to nisza, więc nie powinno dyktować ogólnych konwencji dla wszystkich zastosowań.

5

Czy ktoś mi wytłumaczy skąd ten fetysz getterów/setterów i czemu te nadpisywalne propertiesy są takie ważne? Nie można po prostu używać publicznych pól (najlepiej finalnych), a gdy trzeba podmienić logikę to mieć po prostu napisane do tego metody?
Jak bardzo potrzeba getterów/setterów, bo używasz patologii typu JPA to można dorzucić lomboka, a w normalnych sytuacjach po prostu używać publicznych pól i metod?

0

@Wibowit:

Że się "nie robi dużo GUI", to jedno, ale wyzerować mutowalnosć? No nie ...
Mutowalność w języku ogólnego przeznaczenia wg mnie jest konieczna - nie negując że dla wielu części kodu ujęcie immutable / funkcyjne jest ok.

Jak z Tobą / wami rozmawiam, to lepiej rozumiem. Tak, utwierdziłem się, chodzi o język ogólnego przeznaczenia.

Na marginesie recordy bardzo fajnie wprowadzają coś, co spełnia Twoje i moje patrzenie: w tych fragmentach kodu myślimy immutable.

Grzyboo napisał(a):

Czy ktoś mi wytłumaczy skąd ten fetysz getterów/setterów i czemu te nadpisywalne propertiesy są takie ważne? Nie można po prostu używać publicznych pól (najlepiej finalnych), a gdy trzeba podmienić logikę to mieć po prostu napisane do tego metody?
Jak bardzo potrzeba getterów/setterów, bo używasz patologii typu JPA to można dorzucić lomboka, a w normalnych sytuacjach po prostu używać publicznych pól i metod?

Że wielokrotnie robiłem w seterze "coś jeszcze" (już grzmi na horyzoncie), np ustawiałem flagę "zmiana".
Albo ustawiałem breakpint / robiłem coś tymczasowego, próbnego, co nie wchodziło w produkcję.
Zabierając to w jednym miejscu, powodujemy wypłyniecie z kanalizacji innego galaretowatego potwora. np kontenery z aspektami i nie wiadomo czym jeszcze.

2

Zarzut że Java rozwija się powoli jest stary i nie aktualny. Porównujesz to co było zanim był półroczny relase z tym co działo się wcześniej.
Jest pattern matching/switch expression, recordy do których na 99% dojdą withery, Project Loom jest już ma JEP-425 w Javie 19 i będzie za 4 miesiące jakieś normalnie w preview, project Panama który umożliwia o wiele lepszy dostęp do out-of-heap memory tez będzie mial pierwsze preview pewnie we wrzesniu.

0
ZrobieDobrze napisał(a):

Tak, utwierdziłem się, chodzi o język ogólnego przeznaczenia.

Ktoś chciałby wykreślenia punktu wejścia

class Xxx
  static Main() {} 

na rzecz jedynego punktu wejścia np

  Servlet.init() ?
6

Jak zaczynałem z javą ... wersja 1.2 i właśnie wchodziła 1.3 to wtedy już mocno obsysała (względem C++).
Tym niemniej nie widze problemu z rozwojem języka - jest jaki jest, mógł być gorszy. Mimo, że wiele rzeczy mi się nie podoba, to rozumiem filozofię "łatwo jest dodać ficzur do języka, ale cholernie trudno usunąć" - więc java jest trochę antytezą scali - wrzuca ficzery dopiero jak już absolutnie wiadomo od 5 lat, że są dobre i w innych językach się sprawdziły. Więc nie widzę dziwaczności.

Dla mnie java przegrała przez community.

Rozlanie się gówien opartych o adnotację, refleksję, thread local, dynamic proxy i inne badziewia. Póki tego było mało - to rozwiązywanie problemów różnych zespołów z magią było nawet fajne.
Tak 10 lat temu wystarczyło przeczytać ze 3-4 książki o Springu i JavaEE i można było się wymądrzać (i naprawiać ludziom produkcje). Do tego jak się człowiek nie bał debugować tomcata i kodu springa to już było zupełnie fajnie.
Ale teraz nasrało się tych modułów i adnotacji ze 40 tysięcy - nie miałbym nawet czasu tyle czytać :/ Zwłaszcza, że ilość elementów, gdzie można coś zepsuć stała się absurdalna.

Z całkiem topornego, ale solidnego, imperatywnego języka, statycznie typowanego zrobiła się dynamiczna kupa, która w niektórych miejscach zawstydza nawet javaskrypt.

Co gorsza teraz w javę wlazło pokolenie architektów wychowanych na tych kupach adnotacyjnych, które uważa, że tak się powinno kodować frameworki.
Niedawno musiałem coś pokodować w Corda/R3 (taki blockchain). Cały rypaniutki oparty na adnotacjach - choć sensu w tym żadnego nie ma.
Co gorsza, R3 nie ma tyle kasy co Pivotal (spring) i nie daje rady naprawiać wszystkich problemów jakie wychodzą z magią przy przechodzeniu na nową wersję jvm - w efekcie czego całość tkwi sobie na java 8 :-) (i jeszcze tam długo potkwi).
Widziałem już duże frameworki firmowe oparte o adnotacje (zbudowane na springu) - mistrzowie poszli nawet drogą lomboka i poddodawali pluginy do javac i IDE.
W efekcię do kodowania trzeba używać eclipse 🤣 w konkretnej wersji, w której działa plugin :-) Java 8 i konkretna wersja tomcata to oczywista oczywistoć.

0

Przede wszystkim od dawna wiadomo, że Oracle'owi niespecjalnie na Javie zależy. Stąd też ich ruchy w kierunku wydawania jak najczęstszych wersji (kasa za szkolenia i certyfikaty), uśmiercenie wszystkiego co nie przynosiło zysków (Netbeans, Glassfish, applety), oraz komercjalizacja samego Oracle JDK. Nie wiadomo, w którym kierunku to pójdzie, ale nie którzy wieszczą, że szybciej czy później Kotlin zajmie miejsce Javy.

1

Przede wszystkim od dawna wiadomo, że Oracle'owi niespecjalnie na Javie zależy

i dlatego inwestuje zarówno w openjdk jak i graalvma i integruje go ze swoim najważniejszym produktem, czyli bazą oracle?
https://www.infoq.com/news/2021/02/graalvm-database/
https://www.graalvm.org/22.1/examples/mle-oracle/
https://medium.com/graalvm/mle-executing-javascript-in-oracle-database-c545feb1a010

Stąd też ich ruchy w kierunku wydawania jak najczęstszych wersji (kasa za szkolenia i certyfikaty)

eee, częste wydania zgodne ze sztywnym kalendarzem są po to, by nie przeciągać wielkich release'ów w nieskończoność, bo jakiś tam ficzer jest niedokończony. teraz wrzucanie nowych bajerów jest na zwiększonych obrotach, bo nie ma takich hamulców. .net też jest często wydawany, nowa wersja co roku, lts co dwa lata.

uśmiercenie wszystkiego co nie przynosiło zysków (Netbeans, Glassfish, applety)

no, a microsoft uśmiercił obsługę programów z ms-dosa, pana spinacza i widżety na pulpicie. te rzeczy to już przeżytek, z różnych względów. teoretycznie jeszcze netbeansa oracle mógłby kontynuować, ale dzisiaj mamy vs code, który pewnie i tak by z netbeansem wygrał.

komercjalizacja samego Oracle JDK

tu masz javę za darmo: https://adoptium.net/ napisz mi, po co komu oracle jdk, skoro jest openjdk?

Kotlin zajmie miejsce Javy

eee, przecież kotlin wymaga javy (platformy) do odpalenia, no i jest tylko językiem i nie ingeruje w jvma, więc jego przyszłość mocno zależy od rozwoju platformy java.

1 użytkowników online, w tym zalogowanych: 0, gości: 1