1. JEP 356: Enhanced Pseudo-Random Number Generators 馃幉

Czym by艂by JVM Tuesday bez nowego JEPa? Czu膰, 偶e Java 17 zbli偶a si臋 wielkimi krokami, bo coraz wi臋cej wiemy o zaplanowanych do niej featur贸w. Tym razem na warsztat wzi臋to nieco zapomniany, maj膮cy swoje korzenie w 2017 roku, proposal przynosz膮cy ze sob膮 zmiany, w tym jak Java obs艂uguje generatory liczb losowych.

藕r贸d艂o: dilbert.com

Ka偶dy, kto programuje nieco d艂u偶ej ni偶 par臋 miesi臋cy, wie 偶e w deterministycznym 艣wiecie komputer贸w osi膮gni臋cie prawdziwej losowo艣ci jest prawie niemo偶liwe. Za przyk艂ad niech pos艂u偶y popularna strona random.org, kt贸ra u偶ywa szum贸w atmosferycznych do generowania kolejnych warto艣ci (cho膰 zwolennicy determinizmu i czciciele Demona Laplace 馃悋 pewnie by z t膮 metodologi膮 dyskutowali). Og贸lnie rzecz ujmuj膮c, ka偶da z metod uzyskania warto艣ci losowej, to swego rodzaju trik. Klasyczny Random zaimplementowany w Javie to 鈥Liniowy generator kongruencjalny鈥, kt贸ry jest metod膮 do艣膰 prymitywn膮, przez co np. nie mo偶e by膰 u偶ywany w kryptografii. Java posiada kilka alternatywnych implementacji radomizer贸w, jednak mimo tego 偶e implementuj膮 one dok艂adnie te same metody, nie posiada艂y one wsp贸lnej abstrakcji. JEP 356 dostarczy interfejs RandomGenerator, kt贸ry to pozwoli na wygodn膮 zmian臋 algorytmu losowo艣ci w zale偶no艣ci od potrzeb.

PS1: Je艣li interesuje Was temat nowoczesnych metod randomizacji, JEP zawiera bardzo bogat膮 bibliografie.

PS2: Nie pr贸bujcie czasem teraz pisa膰 swojego w艂asnego Randoma 馃榿. Ludzie z XKCD przyj臋li do tego jedyne s艂uszne podej艣cie.

殴r贸d艂a:

  1. JEP o kt贸rym jest ca艂a sekcja
  2. Demon Laplace'a na Wikipedii
  3. Liniowy generator kongruencji

2. Quarkus 1.11 wydany 馃殌

Quarkus jest bardzo interesuj膮cym nowym frameworkiem, na kt贸rego u偶ycie, w jakim艣 projekcie mocno ostrze sobie z臋by. Prawdopodobnie jest to zwi膮zane z moj膮 niezdrow膮 (zdaniem wielu 馃槈) sympati膮 do Javy EE, dodatkowo podbudowan膮 艣wietnym podcastem Adama Biena, gdzie Quarkus promowany jest jako najlepsza inwencja ludzko艣ci od czasu krojonego chleba. Podobnie jak sw贸j bezpo艣redni konkurent, Helidon, Quarkus implementuj膮 Microprofile Jakarty EE. Nasz dzisiejszy bohater zebra艂 jednak wok贸艂 siebie on wi臋ksz膮 spo艂eczno艣膰 i wysun膮艂 si臋 na do艣膰 wyra藕ne prowadzenie (niech 艣wiadczy o tym cho膰by ponad 3x wi臋cej gwiazdek na Githubie).

Co te偶 przynosi nowy 鈥渕inor鈥 Quarkusa, 偶e za艂apa艂 si臋 do naszej edycji? Poza lepszymi metrykami (czy te偶 macie wra偶enie, 偶e ka偶da nowa edycja framework贸w Javowych wi膮偶e si臋 z jakim艣 grzebaniem w Micrometrze?) najciekawszym z punktu widzenia programisty jest RESTEasy Reactive.

Jest to nowa implementacja standardu JAX-RS, kt贸ra oryginalnie powsta艂a na potrzeby Vert.x, kt贸ra teraz 聽przygarni臋ta zosta艂a przez framework ze stajni RedHata (jakby co to my dalej o Quarkusie). RESTEasy Reactive umo偶liwia pisanie kontroler贸w w spos贸b w pe艂ni deklaratywny i przezroczysty dla u偶ytkownika ko艅cowego. Tak przezroczysty i g艂臋boko integruj膮cy si臋, 偶e poza fragmentem POMa z odpowiedni膮 zale偶no艣ci膮 w zasadzie ci臋偶ko pokaza膰 fragment kodu z u偶yciem - musz臋 przyzna膰, 偶e jestem pod wra偶eniem, jak elegancko zosta艂o to zaimplementowane.

@ApplicationScoped 
public class RoutesEndpoint {
    @Route(path = "/hello-world")
    void hello(RoutingContext rc) { 
        rc.response().end("hello");
    }
}

teraz mo偶na zapisa膰 przy u偶yciu o wiele czytelniejszego

@Path("/hello-world")
public class ReasteasyEndpoint {
    @GET
    public String hello(){
        return "hello";
    }
}

przy zachowaniu pe艂nej reaktywno艣ci. Classy 馃嵎.

Ale nie ok艂amujmy si臋 - i tak ka偶dy wie, 偶e najwa偶niejsz膮 zmian膮 jest domy艣lna warto艣膰 FAIL_ON_UNKNOWN_PROPERTIES Jacksona na false.

殴r贸d艂a:

  1. Quarkus 1.11 Release Notes
  2. AirHacks.fm
  3. RESTEasy Reactive Guide

3. Roadmapa Kotlina zaktualizowana 馃崊

Na koniec - Kotlin. I to w formie interesuj膮cej dla ka偶dego, kto lubi wiedzie膰 przed kolegami z pokoju o nowinkach, poniewa偶 Jetbrains opublikowa艂o aktualizacj臋 roadmapy swojego j臋zyka.

Link do pe艂nej Roadmapy na YouTrack

Co ciekawego nam przynosi? Na pewno warto przyjrze膰 si臋 statusowi prac. Od czasu ostatniego update'u, programistom z Jetbrains i skumulowanej wok贸艂 nich spo艂eczno艣ci, uda艂o si臋 dowie藕膰 kilka interesuj膮cych nowo艣ci. Z pewno艣ci膮 na codzienny komfort pracy wp艂ynie fakt, 偶e nowa wersja kompilatora Kotlina (ETA: Kotlin 1.5) w du偶ych projektach dzia艂a ok. ~2 razy szybciej wed艂ug syntetycznych test贸w. Aktualizacji doczeka艂y si臋 r贸wnie偶 popularne koroutyny, kt贸re w swojej wersji 1.4 otrzyma艂y nowy mechanizm, znany jako SharedFlow - 鈥済or膮c膮鈥 (偶yj膮c膮 niezale偶nie od podpi臋cia listener贸w) implementacje dobrze znanych, 鈥渮imnych鈥 obiekt贸w Flow.

Bardzo interesuj膮co prezentuj膮 si臋 r贸wnie偶 rzeczy kt贸re na roadmap臋 trafi艂y. Wspomniany przed chwil膮 nowy kompilator rozbudowany ma zosta膰 o wsparcie inkrementalnej kompilacji. Opr贸cz tego, Kotlin Native ma zosta膰 wzbogacony o wsparcie procesor贸w M1. Dalsz膮 ewolucj臋 przechodzi膰 b臋dzie oczywi艣cie r贸wnie偶 Kotlinowa asynchroniczno艣膰: Kana艂y (Channels) maj膮 otrzyma nowe API. kotlinx-serialization, cichy bohater ostatnich miesi臋cy, r贸wnie偶 szykuje swoj膮 wersj臋 1.2, zawieraj膮c膮 m.in. stabilne wsparcie ProtoBufa.

Tw贸rcy chwal膮 si臋 r贸wnie偶 tym, 偶e na powa偶nie wzi臋li si臋 za dokumentacj臋, kt贸ra ma dosta膰 odrobin臋 serca.

Zmiany nie s膮 du偶e, ale mi艂o 偶e JetBrains jest bardzo transparentne ze swoimi pracami. B臋d臋 nudny, ale osobi艣cie dalej najbardziej czekam na wsparcie nowo艣ci z Javy, takich jak rekordy czy sealed classy (ostatnio trafi艂em np. 聽na ciekawy artyku艂 pokazuj膮cy, ile Kotlinowa implementacja tego feature mo偶e na tym zyska膰).

Bo w ko艅cu wszyscy to wiemy. I niech zacznie si臋 wojna 馃敟 馃獡

殴r贸d艂a:

  1. Roadmapa Kotlina
  2. Link do pe艂nej Roadmapy na YouTrack
  3. SharedFlow
  4. kotlinx.coroutines 1.5
  5. kotlinx.serialization 1.2
  6. Sealed goodies coming in Kotlin 1.5

--------------

That's All Folks! Do zobaczenia ju偶 w czwartek na przegl膮dzie Frontendowym!

I pami臋tajcie, 偶eby spr贸bowa膰 Vived, je艣li chcesz otrzymywa膰 tego typu tre艣ci spersonalizowane pod Ciebie!