Witamy w kolejny wtorek – dzisiaj trochę o generatorach liczb losowych w Javie, dalszych planach na rozwój Kotlina oraz „minorze” frameworku który #nikogo poza OP (ale i tak warto przeczytać 😁 )
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.
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.
Źródła:
Zainstaluj teraz i czytaj tylko dobre teksty!
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 “minor” 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 .
Źródła:
Zainstaluj teraz i czytaj tylko dobre teksty!
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.
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 – “gorącą” (żyjącą niezależnie od podpięcia listenerów) implementacje dobrze znanych, “zimnych” 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ć).