Witamy w kolejnej edycji. Dzisiaj mamy fantastyczny przegląd terminologii programowania funkcyjnego od samego Milewskiego, kontrowersje wobec podatku od linków i UXową pomyłkę wartą 500 milionów dolarów 😭
1. JEP draft: Pattern Matching for switch ☕️
Klasycznie już zaczynamy od nowego JEPa (co staje się naszą małą tradycją). Tym razem jest to coś, na co wszyscy użytkownicy Javy czekali bardzo długo… przynajmniej od Javy 8 (która, jak sprawdziłem swoją premierę miała 7 lat temu).
Czas wspomnień starego pryka. JDK 8 było ostatnim “takim” wydaniem. O ile daleki jestem od twierdzenia, że kolejne edycje nie wnosiły niczego nowego do języka (gwoli sprawiedliwości, Java 9 z punktu widzenia ewolucji języka była znacznie istotniejsza), to jednak zmiany z ósemki najmocniej wpłynęły na to, jak na co dzień piszemy w tym języku. To właśnie ona stała się “gateway drugiem” do programowania funkcyjnego dla wielu ludzi dzięki lambdom i strumieniom. Według wielu była też ostatecznym ciosem dla Scali.
Dobrze pamiętam te dość zagorzałe dyskusje i to, w jaki sposób zwolennicy Scali bronili swojego języka. Jednym z najczęściej wywoływanych argumentów był fakt wsparcia Scali dla Pattern Matchingu. Nie da się ukryć, że brak tego fragmentu syntaxu zawsze sprawiał, że idiomatyczne programowanie funkcyjne w Javie było dosyć… koślawe, robiąc miejsce dla bibliotek w stylu niszowego (acz w swojej niszy niezwykle popularnego) Vavra.
W międzyczasie prace trwały, Brian Goetz i autor opisywanego proposala, Gavin Bierman prezentowali śmiałe plany, a zalążki nowych możliwości pojawiały się w kolejnych edycjach JDK. Pierwszą jaskółką był Pattern Matching for instanceof aka JEP 305, który miał swoją premierę wraz z Javą 14 i zapewniał coś, co można określić jako automatyczne rzutowanie zmiennych:
if (animal instanceof Cat cat) {
cat.meow();
} else if(animal instanceof Dog dog) {
dog.woof();
}
W dalszym ciągu jednak była to namiastka tego, co przynosiły ze sobą “prawdziwe” języki funkcyjne.
To nie było ostatnie słowo, jakie powiedzieli architekci Javy. W zeszłym tygodniu opublikowany został draft JEPa, który przenosi “wyłuskiwanie” znane z instanceofa do switcha.
String formatted;
Object obj = new Long(12L);
switch (obj) {
case Integer i: formatted = String.format("int %d", i); break;
case Byte b: formatted = String.format("byte %d", b); break;
case Long l: formatted = String.format("long %d", l); break;
case Double d: formatted = String.format("double %f", d); break;
case String s: formatted = String.format("String %s", s); break
default: formatted = obj.toString();
}
Sam Proposal jest bardzo długi i niezwykle interesujący, gdyż pozycjonuje siebie samego jako krok do prawdziwej rewolucji – pattern matchingu, opartego na prawdziwych wzorcach:
switch (s) {
case "Hello world" ->
System.out.println("Hello back");
case String s ->
System.out.println("Nothing?");
}
na który przyjdzie nam jednak chwilę poczekać.
I tak też małymi kroczkami zasypywana jest dziura między Scalą a Javą. Aczkolwiek premiera Scali 3.0 (już niedługo, Release Candidate pojawił się w zeszłym tygodniu) znowu ją poszerzy – ale nie ubiegajmy faktów, muszę mieć, o czym pisać w następnych edycjach .
Źródła:
- JEP draft: Pattern Matching for switch (Preview)
- JEP 305: Pattern Matching for instanceof
- Pattern Matching for Java
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Wyniki ankiety dotyczącej adopcji Jakarty EE
Mam czasem wrażenie, że nasze cotygodniowe przeglądy są jedynym miejscem w Polskim internecie, w którym da się przeczytać jeszcze o Javie (tfu Jakarcie) EE, a przynajmniej pojawiających się w niej nowościach. Mimo mojej całej sympatii do środowiska, wydaje się ono tracić swoich zwolenników. Nie pomagają ani dobre frameworki, ani Microprofile (Enterprise Edition wydaje się stawać coraz bardziej niszowym rozwiązaniem).
Za dowód tego niech posłuży coroczna ankieta dotycząca stanu ekosystemu, której tegoroczna edycja przekroczyła ledwo nieco ponad połowę respondentów w stosunku do podobnej, zrealizowanej rok wcześniej. W dalszym ciągu jest to jednak bardzo dobre źródło informacji, jeśli chodzi o poznanie preferencji społeczności Jakarta EE.
Z pewnością jedną z interesujących rzeczy, jest bardzo duża przewaga, jaką zdobył Wildfly nad innymi serwerami aplikacyjnymi. Nie ma się co dziwić, ta Community Edition JBossa od lat jest solidnym wyborem zarówno dla hobbystów, jak i firm. Przoduje również w rankingu najbardziej “kochanych” projektów, który również można znaleźć w ankiecie. Mam nadzieję, że nie skończy jak CentOS.
Kolejnym ciekawym wykresem jest ten związany z popularnością frameworków. Bardzo widać, jak dużą trakcje w społeczności zdobył Quarkus, 5-krotnie górując nad pozycjonującym się na jego bezpośredniego konkurenta Helidona. Biorąc pod uwagę niszowość środowiska, wydaje się, że jeśli chodzi o podział tortu “Mikroserwisy na Jakarcie EE”, to sprawa jest już dosyć oczywista i podejrzewam, że przewaga Quarkusa będzie się tylko powiększać.
Na sam koniec zostawiłem sobie wisienkę na torcie, którą to jest adopcja samej Jakarty po przejęciu przez społeczność projektu od Oracle. Na ten moment nie można mówić o spektakularnym sukcesie – w dalszym ciągu większość projektów nie zdecydowało się na migracje (a biorąc pod uwagę, że w rankingu popularności przoduje Java EE 8, można wysnuć wniosek, że głosy oddała “awangarda” środowiska).
Ankieta zawierała również sporo interesujących pytań związanych np. z adopcją poszczególnych API, w związku z czym zapraszamy do lektury całości.
Źródła:
- Jakarta EE Survey 2020/2021 – results
- CentOS Linux ending because „Red Hat simply refused to invest in it”
Zainstaluj teraz i czytaj tylko dobre teksty!
3. Pierwsza prezentacja Androida 12
W mobilnych systemach operacyjnych z pewnością doszło do pewnego rodzaju dojrzałości. Bez wchodzenia w zbędne “boomerstwo”, kiedyś każda nowa edycja takiego Androida powodowała duży skok jakościowy dla użytkownika, a kolejnymi wersjami pasjonowali się nie tylko programiści, ale także zwykli użytkownicy. Od pewnego czasu jednak większość zmian dzieje się pod maską, a wszystkie poprawki UXowe “gołego” Androida w zasadzie są kopiowaniem nowości zaprezentowanych przez twórców nakładek lub third-party launcherów. Czy Android 12 przełamie tą passę?
Oczywiście, jak zwykle “w bebechach” nie brakuje ciekawych usprawnień. Dostajemy kilka zabezpieczeń prywatności, nowe algorytmy kompresji (zarówno grafiki, jak i wideo), a także klasyczne już “wynoszenie” kolejnych części systemu do Google Play Services, co ułatwia późniejsze aktualizacje. Jednocześnie jednak, jak na razie jedyną sensowniejszą zmianą z punktu widzenia użytkownika końcowego (bo że “haptyczne audio” to bajer, który będzie używany przez trzy gry i dwa telefony to chyba nie muszę wspominać) są lekkie poprawki dla panelu notyfikacji i dynamiczny dobór kolorów w oparciu o systemową tapetę.
To dopiero pierwsze preview, mam więc jednak nadzieje, że Android jeszcze nas zaskoczy przed swoją zapowiedzianą na sierpień premierą (BTW: ciekawe, czy w tym roku odbędzie się Google I/O – na razie Google nabrało w temacie wody w usta). Według przecieków, nowa wersja ma przynieść upgrade graficzny nazywany wewnętrznie Material Design NEXT. Zobaczymy, może ona wprowadzi coś co sprawi, że Android stanie się gwiazdą branżowych “pudelków”.