{"id":17931,"date":"2024-03-28T13:10:21","date_gmt":"2024-03-28T12:10:21","guid":{"rendered":"https:\/\/vived.io\/?p=17931"},"modified":"2024-03-28T13:10:23","modified_gmt":"2024-03-28T12:10:23","slug":"kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/","title":{"rendered":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode &#8211; JVM Weekly vol. 169"},"content":{"rendered":"\n<h2 id=\"1-jetbrains-umozliwia-testowanie-k2-mode-in-intellij-idea\" data-num=1>1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-1024x585.png\" alt=\"\" class=\"wp-image-17939\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej <a href=\"https:\/\/blog.jetbrains.com\/idea\/2024\/03\/k2-kotlin-mode-alpha-in-intellij-idea\/\">IntelliJ IDEA oferuje opcjonalny tryb K2<\/a>. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), oraz tryb K2, gdzie do analizy kodu wykorzystywany jest nowy kompilator K2 pochodz\u0105c Kotlina 2.0. Jako, \u017ce K2 zosta\u0142 de facto napisany od nowa, w\u0142\u0105czenie jego trybu w IDE ma przynie\u015b\u0107 nie tylko popraw\u0119 wydajno\u015bci i ulepszenia wewn\u0119trznej architektury toolingu, ale te\u017c\u00a0zapewnia zgodno\u015b\u0107 z przysz\u0142ymi funkcjami Kotlin. Wsparcie dla trybu K2 w IntelliJ IDEA 2024.1 obejmuje pod\u015bwietlanie i uzupe\u0142nianie kodu, nawigacj\u0119, wyszukiwanie u\u017cycia, debugowanie, refaktoryzacj\u0119 oraz podstawowe funkcje edycji.<\/p>\n\n\n\n<p>\u017beby lepiej wybrzmia\u0142o: tryb K2 te dotycz\u0105 tylko analizy kodu w IDE i nie zale\u017cy od wersji kompilatora Kotlin okre\u015blonej w ustawieniach budowania projektu. Aby skompilowa\u0107 projekt przy u\u017cyciu kompilatora K2, nadal nale\u017cy to okre\u015bli\u0107 w ustawieniach budowania projektu. W trybie K2 nie s\u0105 jeszcze wspierane projekty Kotlin Multiplatform, projekty Android, niekt\u00f3re rodzaje refaktoryzacji i narz\u0119dzia debugowania oraz analiza kodu w plikach <code>.gradle.kts<\/code>, a tak\u017ce inne drobne funkcje. Wsparcie dla brakuj\u0105cych funkcji zostanie dodane w nadchodz\u0105cych wydaniach.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"563\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-1024x563.png\" alt=\"\" class=\"wp-image-17947\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-1024x563.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-300x165.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-768x422.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22.png 1398w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ja spr\u00f3buje u siebie przetestowa\u0107 jakich\u015b projektach i ch\u0119tnie podziel\u0119 si\u0119 efektami, oczywi\u015bcie je\u015bli b\u0119d\u0119 mia\u0142 jakie\u015b ciekawe wnioski.<\/figcaption><\/figure>\n\n\n\n<p>To jednak nie wszystko z nowo\u015bci, bowiem JetBrains podzieli\u0142o si\u0119 te\u017c <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/the-ktor-roadmap-for-2024\/\">planami na rozw\u00f3j ich sztandarowego Kotlinowego Frameworki, Ktor<\/a>. Ten w 2024 roku, planuje wprowadzi\u0107 mas\u0119 nowo\u015bci nowo\u015bci i ulepsze\u0144, w tym wtyczk\u0119 OpenTelemetry, kt\u00f3ra umo\u017cliwi generowanie danych telemetrycznych, takich jak metryki, logi i og\u00f3lny tracing. Dodatkowo, pojawi si\u0119 integracja gRPC z klientem i serwerem Ktor za pomoc\u0105 idiomatycznej implementacji Kotlin, co u\u0142atwi tworzenie i korzystanie z us\u0142ug opartych na gRPC. Spodziewa\u0107 mo\u017cemy si\u0119 te\u017c zarz\u0105dzania transakcjami za pomoc\u0105 oficjalnej wtyczki, kt\u00f3ra b\u0119dzie inicjowa\u0107 transakcj\u0119 na pocz\u0105tku \u017c\u0105dania i zatwierdza\u0107 j\u0105 na jego ko\u0144cu, o ile nie wyst\u0105pi\u0105 b\u0142\u0119dy, upraszczaj\u0105c tym samym dost\u0119p do bazy danych. Zapowiedziano te\u017c wsparcie dla nowej implementacji IO &#8211; Kotlinx-io, kt\u00f3ra ju\u017c Ktor 3.0.0 zast\u0105pi istniej\u0105ce rozwi\u0105zanie. Kotlinx-io bazuje na <a href=\"https:\/\/github.com\/square\/okio\">Okio<\/a> i jest rozwi\u0105zaniem multiplatformowny, co u\u0142atwi tw\u00f3rcom bibliotek wsparcie Ktora. Planowane jest te\u017c wprowadzenie rejestru wtyczek, umo\u017cliwiaj\u0105cego rejestrowanie plugin\u00f3w tworzonych przez spo\u0142eczno\u015b\u0107.<\/p>\n\n\n\n<p>Ostatni\u0105 nowo\u015bci\u0105 oryginalnego tekstu jest zapowied\u017a uproszczenia wstrzykiwania zale\u017cno\u015bci (Dependency Injection) poprzez oficjalne dodanie wsparcia dla DI do serwera Ktor w 2024 roku oraz publikacj\u0119 wytycznych, jak najlepiej integrowa\u0107 istniej\u0105ce biblioteki DI. Ktor zostanie zmodyfikowany, aby wspiera\u0107 DI oraz integrowa\u0107 istniej\u0105ce frameworki DI. Ta zapowied\u017a wywo\u0142a\u0142a mas\u0119 kontrowersji, do tego stopnia, \u017ce tw\u00f3rcy musieli opublikowa\u0107 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/ktor-2024-roadmap-di-update\/\">followup<\/a>, w kt\u00f3rym podkre\u015blili \u017ce korzystanie w Ktor z frameworka DI nigdy nie b\u0119dzie wymagane, a sam Ktor nigdy nie b\u0119dzie zawiera\u0142 wbudowanego frameworka DI jako cz\u0119\u015bci swojego projektu. Zaproponowana funkcjonalno\u015b\u0107 przeznaczona b\u0119dzie wy\u0142\u0105cznie dla u\u017cytkownik\u00f3w, kt\u00f3rzy chc\u0105 po\u0142\u0105czy\u0107 DI ze swoimi us\u0142ugami Ktor, a ma na celu jak najbardziej p\u0142ynn\u0105 integracj\u0119 istniej\u0105cych framework\u00f3w DI z frameworkiem.<\/p>\n\n\n\n<p>A jak ju\u017c jeste\u015b w temacie Dependency Injection to Helidon zapowiedzia\u0142 now\u0105 funkcje, b\u0119d\u0105c\u0105 ich w\u0142asnym podej\u015bciem do dependency injection opartym o <a href=\"https:\/\/javax-inject.github.io\/javax-inject\/\">standard JSR-330:Dependency Injection for Java<\/a>. Rdzeniem <a href=\"https:\/\/github.com\/helidon-io\/helidon\/tree\/main\/inject#readme\">Helidon Injection<\/a>, bo o niej tu mowa, jest annotation processor, kt\u00f3ry wyszukuje w kodzie aplikacji standardowe adnotacj\u0119 jakarta\/javax. Gdy takie adnotacje s\u0105 znalezione w klasie, Helidon Injection inicjuje tworzenie tak zwanego Aktywatora dla danej klasy\/us\u0142ugi, zarz\u0105dzaj\u0105cego jej lifecycle. Na przyk\u0142ad, obecno\u015b\u0107 adnotacji <code>@Inject<\/code> lub <code>@Singleton<\/code> w klasie <code>FooImpl<\/code> powoduje utworzenie <code>FooImpl.injectionActivator<\/code>, agreguj\u0105cy us\u0142ugi dla danego modu\u0142u, co pozwala na ich zarejestrowanie w &#8222;rejestrze us\u0142ug&#8221; (kt\u00f3ry tak naprawd\u0119 sam w sobie jest klas\u0105 wygenerowan\u0105 przez Annotation Processor), a co za tym idzie p\u00f3\u017aniejsze \u0142atwe odnalezienie i inicjalizacji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generated(value = &quot;io.helidon.inject.tools.creator.impl.DefaultActivatorCreator&quot;, comments = &quot;version = 1&quot;)\n@Singleton @Named(Injection$Module.NAME)\npublic class Injection$Module implements Module {\n    static final String NAME = &quot;inject.examples.logger.common&quot;;\n\n    @Override\n    public void configure(ServiceBinder binder) {\n        binder.bind(io.helidon.inject.examples.logger.common.AnotherCommunicationMode$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.Communication$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.DefaultCommunicator$injectionActivator.INSTANCE);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>Takie podej\u015bcie umo\u017cliwia te\u017c zapewnienie &#8222;leniwego&#8221; aktywowania us\u0142ug na podstawie bie\u017c\u0105ce zapotrzebowania konkretnej aplikacji &#8211; konkretna us\u0142uga mo\u017ce pozosta\u0107 u\u015bpiona do momentu gdy jest potrzebna, co oczywi\u015bcie wi\u0105\u017ce si\u0119 z lepszym efektywne wykorzystanie zasob\u00f3w i popraw\u0119 wydajno\u015bci aplikacji. Wprowadza te\u017c mo\u017cliwo\u015b\u0107 rozleg\u0142ych integracji i rozszerzalno\u015bci &#8211; Helidon Injection pozwala min. na generowanie kodu obs\u0142ugi interceptor\u00f3w poprzez meta-adnotacje <code>InterceptedTrigger<\/code>.<\/p>\n\n\n\n<h2 id=\"2-kilka-follow-upow-do-jdk-22\" data-num=2>2. Kilka follow-up\u00f3w do JDK 22<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-1024x585.jpg\" alt=\"\" class=\"wp-image-17937\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-1024x585.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-300x171.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-768x439.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-1536x878.jpg 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21.jpg 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Temat premiery JDK 22 nie ucicha, bo jak zwykle tego typu wydaniu towarzyszy kilka publikacji od spo\u0142eczno\u015bci. Dlatego mam dzisiaj dla was dwie, nieco jako follow-up do zesz\u0142otygodniowego edycji.<\/p>\n\n\n\n<p>Zacznijmy od <a href=\"https:\/\/seanjmullan.org\/blog\/2024\/03\/20\/jdk22\">publikacji Seana Mullana<\/a>, kt\u00f3ry to jak zwykle podzieli\u0142 si\u0119 z nami nowo\u015bciami dotycz\u0105cymi bezpiecze\u0144stwa. Nie ma tutaj jakich\u015b rewolucyjnych zmian &#8211; w\u015br\u00f3d g\u0142\u00f3wnych nowo\u015bci znajduj\u0105 si\u0119 dodanie kilku nowych certyfikat\u00f3w root CA, wprowadzenia interfejsu <code>java.security.AsymmetricKey<\/code>, ulepszenia wsparcia dla algorytm\u00f3w podpis\u00f3w RSA w wersji XML z u\u017cyciem skr\u00f3t\u00f3w SHA-3, a tak\u017ce wsparcia dla algorytmu podpisu HSS\/LMS w narz\u0119dziach <code>keytool<\/code> i <code>jarsigner<\/code>. Ponadto, JDK 22 u\u0142atwia zarz\u0105dzanie maksymaln\u0105 d\u0142ugo\u015bci\u0105 \u0142a\u0144cuch\u00f3w certyfikat\u00f3w TLS dla klienta i serwera poprzez nowe propertiesy systemowe.<\/p>\n\n\n\n<p>Przejd\u017amy do kwestii wydajno\u015bci. Drugim tekstem, kt\u00f3ry przyku\u0142 moj\u0105 uwag\u0119 to publikacja <a href=\"https:\/\/timefold.ai\/blog\/java-22-performance\">How fast is Java 22?<\/a> od Luk\u00e1\u0161a Petrovickiegoz <a href=\"https:\/\/timefold.ai\/\">timefold.ai<\/a>, projektu zajmuj\u0105cego si\u0119 szeroko rozumianym schedulingiem dla biznesu, jak np. zmiany pracownik\u00f3w czy rezerwacje pojazd\u00f3w. Sercem projektu jest silnik Timefold Solver, kt\u00f3ry odpowiada za jego g\u0142\u00f3wn\u0105 logik\u0119 i to w\u0142a\u015bnie jego Luk\u00e1\u0161 u\u017cy\u0142 do przetestowania wydajno\u015bci JDK 22 oraz GraalVM for JDK 22. Testy mia\u0142y na celu sprawdzenie, czy kod Timefold Solver nadal dzia\u0142a bezproblemowo na Java 22 i czy wydajno\u015b\u0107 jest przynajmniej taka sama jak wcze\u015bniej. Jak to zwykle bywa z benachmarkami, nale\u017cy patrze\u0107 na nie z lekkim przymr\u00f3\u017ceniem oka, ale Luk\u00e1\u0161 robi\u0142 je na swoje w\u0142asne potrzeby, wi\u0119c spodziewam si\u0119, \u017ce do tematu podszed\u0142 bez uprzedze\u0144, z nale\u017cyt\u0105 rzetelno\u015bci\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"174\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-23.png\" alt=\"\" class=\"wp-image-17950\" style=\"width:724px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-23.png 560w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-23-300x93.png 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><figcaption class=\"wp-element-caption\">Wiem, benchmarki bywaj\u0105 \u0142atwym celem.<\/figcaption><\/figure><\/div>\n\n\n<p>W wynikach microbenchmark\u00f3w (wykonanych z u\u017cyciem Java Microbenchmark Harness, JMH) oraz test\u00f3w w realnych warunkach zauwa\u017cono, \u017ce wydajno\u015b\u0107 OpenJDK 22 w por\u00f3wnaniu z Java 21 jest niezmieniona, z wyj\u0105tkiem jednego testu, kt\u00f3ry wymaga\u0142 dalszej analizy. Natomiast GraalVM dla JDK 22 (nawet bez u\u017cycia natywnych obraz\u00f3w) wykaza\u0142 znacz\u0105c\u0105 popraw\u0119 wydajno\u015bci, \u015brednio o oko\u0142o 5% i maksymalnie o oko\u0142o 15% w okre\u015blonych benchmarkach, co czyni go atrakcyjn\u0105 opcj\u0105 dla aplikacji korzystaj\u0105cych z Timefold Solver. Wyniki te wskazuj\u0105, \u017ce przej\u015bcie na Java 22 nie wp\u0142ynie na zmiany w wydajno\u015bci, jednak u\u017cycie GraalVM dla JDK 22 mo\u017ce przynie\u015b\u0107 znacz\u0105ce ulepszenia wydajno\u015bci do 10%. Co ciekawe, wbrew og\u00f3lnym trendom, tw\u00f3rcy Timefold.ai opieraj\u0105 si\u0119 na klasycznym ParallelGC zamiast domy\u015blnego G1 ze wzgl\u0119du na jego lepsz\u0105 wydajno\u015b\u0107 w przetwarzaniu, nie za\u015b op\u00f3\u017anieniach.<\/p>\n\n\n\n<p>No c\u00f3\u017c powiem, kolejne punkty dla GraalVM.<\/p>\n\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-1024x585.jpg\" alt=\"\" class=\"wp-image-17935\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-1024x585.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-300x171.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-768x439.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-1536x878.jpg 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2.jpg 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Java Mission Control 9.0<\/h3>\n\n\n\n<p>Dla tych kt\u00f3rzy nie kojarz\u0105 projektu, Java Mission Control (JMC) to narz\u0119dzie do monitorowania, zarz\u0105dzania i profilowania aplikacji Java, kt\u00f3rego za\u0142o\u017ceniem jest brak wprowadzanie znacz\u0105cych op\u00f3\u017anie\u0144 czasowych w dzia\u0142aniu aplikacji, co sprawia, \u017ce \u0142atwiej jest zracjonalizowa\u0107 decyzje uruchomienia go w \u015brodowisku produkcyjnym. Dzi\u0119ki integracji z JDK, JMC oferuje dost\u0119p do bogatej gamy danych o wydajno\u015bci i zachowaniu aplikacji Java poprzez analiz\u0119 rekord\u00f3w Java Flight Recorder (JFR), umo\u017cliwia u\u017cytkownikom zar\u00f3wno zbieranie danych o wydajno\u015bci w czasie rzeczywistym oraz przegl\u0105danie i analizowanie danych historycznych.<\/p>\n\n\n\n<p>W zesz\u0142ym tygodniu <a href=\"https:\/\/hirt.se\/blog\/?p=1477\">wydano JDK Mission Control 9.0<\/a>, kt\u00f3ra do dzia\u0142ania wymaga minimum poprzedniego LTS, czyli JDK 17, przy r\u00f3wnoczesnym wsparciu dla analizy zapis\u00f3w JFR jeszcze z wersji JDK 7u40+ (kompatybilno\u015b\u0107 Javy nie przestaje na mnie robi\u0107 wra\u017cenia). JMC 9 ciemny motyw (dla wszystkich nocnych mark\u00f3w) wprowadza kompatybilno\u015b\u0107 z Eclipse 4.30, wsparcie dla Linux aarch64, a tak\u017ce usprawnienia w parserze JFR i reorganizacj\u0119 klasy, umo\u017cliwiaj\u0105c lepsz\u0105 integracj\u0119 z aplikacjami stron trzecich. Znacz\u0105ce zmiany obejmuj\u0105 r\u00f3wnie\u017c nowe regu\u0142y oceny wydajno\u015bci i wykorzystania zasob\u00f3w, ulepszon\u0105 wizualizacj\u0119 w postaci Java-based flamegraph oraz eliminacj\u0119 wtyczki Twitter (zaskoczy\u0142o mnie, \u017ce taka w og\u00f3le istnia\u0142a) ze wzgl\u0119du na zmiany w API i koszty utrzymania.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"904\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-904x1024.png\" alt=\"\" class=\"wp-image-17944\" style=\"width:713px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-904x1024.png 904w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-265x300.png 265w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-768x869.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-1357x1536.png 1357w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-1809x2048.png 1809w, https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21.png 1892w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><figcaption class=\"wp-element-caption\"> Bo wiecie, tego typu narz\u0119dzia nie mog\u0105 sobie pozwoli\u0107 na obej\u015bcie problemu w inny spos\u00f3b<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Gradle 8.7<\/h3>\n\n\n\n<p><a href=\"https:\/\/docs.gradle.org\/8.7\/release-notes.html\">Gradle 8.7<\/a> wprowadzono szereg usprawnie\u0144 i nowo\u015bci, w tym wsparcie dla projekt\u00f3w korzystaj\u0105cych z Java 22, cho\u0107 co ciekawe, samo Gradle 8.7 jeszcze nie dzia\u0142ana tej wersji Javy ze wzgl\u0119du na brak jej wsparcia w Groomym.<\/p>\n\n\n\n<p>Je\u015bli chodzi o funkcjonalno\u015bci\u0105, nowo\u015bci\u0105 jest usprawnienie wykorzystania lokalnego lub zdalnego bufora budowy dla kompilacji skrypt\u00f3w Groovy, co pozwala na unikni\u0119cie ponownej kompilacji i redukcj\u0119 czasu pierwszego budowania projektu. Wprowadzono r\u00f3wnie\u017c lepsze API do aktualizacji w\u0142a\u015bciwo\u015bci kolekcji oraz usprawnienia w raportowaniu b\u0142\u0119d\u00f3w i ostrze\u017ce\u0144, co u\u0142atwia identyfikacj\u0119 i rozwi\u0105zywanie problem\u00f3w zwi\u0105zanych min. z wtyczkami. Reszta zmian dotycz\u0105 ulepsze\u0144 w konfiguracji cache, wprowadzenia nowych funkcji w Kotlin DSL (w tym aktualizacje do Kotlin 1.9.22), oraz usprawnie\u0144 w obs\u0142udze TestNG i zarz\u0105dzaniu symlinkami w systemie plik\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Apache Pekko zostaje Top Level Project Apache Foundation<\/h3>\n\n\n\n<p>Apache Pekko powsta\u0142o jako alternatywa dla popularnego frameworka Akka, kt\u00f3ry jest szeroko stosowany do tworzenia reaktywnych aplikacji w j\u0119zyku Scala i Java. Inspiracj\u0105 do stworzenia Apache Pekko by\u0142a r\u00f3wnie\u017c zmiana licencji Akka, co spowodowa\u0142o niepewno\u015b\u0107 w\u015br\u00f3d spo\u0142eczno\u015bci programist\u00f3w co do przysz\u0142ego dost\u0119pu i wykorzystania tego frameworka w projektach komercyjnych. G\u0142\u00f3wnym celem powstania Apache Pekko by\u0142o zaoferowanie podobnej funkcjonalno\u015bci co Akka, ale pod egid\u0105 Apache Software Foundation, co gwarantuje otwarto\u015b\u0107 i dost\u0119pno\u015b\u0107 projektu dla szerszego grona deweloper\u00f3w. Teraz projekt otrzyma\u0142 status Top Level Project.<\/p>\n\n\n\n<p>Uzyskanie statusu Top Level Project (TLP) przez Apache Pekko jest potwierdzeniem jego warto\u015bci i stabilno\u015bci jako narz\u0119dzia do tworzenia aplikacji reaktywnych. Status TLP w ekosystemie Apache Software Foundation (ASF) oznacza, \u017ce projekt przeszed\u0142 kompleksowy proces inkubacji, wykazuj\u0105c swoj\u0105 \u017cywotno\u015b\u0107, zdolno\u015b\u0107 do samodzielnej ewolucji i utrzymania aktywnej spo\u0142eczno\u015bci. Dla Apache Pekko, bycie TLP to nie tylko presti\u017c i uznanie w \u015brodowisku open-source, ale tak\u017ce wi\u0119ksza niezale\u017cno\u015b\u0107 i mo\u017cliwo\u015bci rozwoju. Projekt mo\u017ce teraz korzysta\u0107 z pe\u0142nego wsparcia fundacji, zarz\u0105dzaj\u0105c w\u0142asn\u0105 infrastruktur\u0105, procesami i zasadami, co umacnia jego pozycj\u0119 jako kluczowego narz\u0119dzia dla programist\u00f3w poszukuj\u0105cych alternatywy dla Akka w budowie wydajnych i skalowalnych aplikacji reaktywnych.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej IntelliJ IDEA oferuje opcjonalny tryb K2. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":17941,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-17931","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"9","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived\" \/>\n<meta property=\"og:description\" content=\"1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej IntelliJ IDEA oferuje opcjonalny tryb K2. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-28T12:10:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-28T12:10:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1-1024x560.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode &#8211; JVM Weekly vol. 169\",\"datePublished\":\"2024-03-28T12:10:21+00:00\",\"dateModified\":\"2024-03-28T12:10:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\"},\"wordCount\":1825,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\",\"url\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\",\"name\":\"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png\",\"datePublished\":\"2024-03-28T12:10:21+00:00\",\"dateModified\":\"2024-03-28T12:10:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png\",\"width\":1976,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode &#8211; JVM Weekly vol. 169\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/","og_locale":"pl_PL","og_type":"article","og_title":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived","og_description":"1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej IntelliJ IDEA oferuje opcjonalny tryb K2. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), [&hellip;]","og_url":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/","og_site_name":"Vived","article_published_time":"2024-03-28T12:10:21+00:00","article_modified_time":"2024-03-28T12:10:23+00:00","og_image":[{"width":1024,"height":560,"url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1-1024x560.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode &#8211; JVM Weekly vol. 169","datePublished":"2024-03-28T12:10:21+00:00","dateModified":"2024-03-28T12:10:23+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/"},"wordCount":1825,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/","url":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/","name":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode - JVM Weekly vol. 169 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png","datePublished":"2024-03-28T12:10:21+00:00","dateModified":"2024-03-28T12:10:23+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Group-780-2-1.png","width":1976,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/kotlin-2-0-coraz-blizej-intellij-idea-wprowadza-k2-mode-jvm-weekly-vol-169\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Kotlin 2.0 coraz bli\u017cej, IntelliJ Idea wprowadza K2 Mode &#8211; JVM Weekly vol. 169"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. JetBrains umo\u017cliwia testowanie K2 Mode in IntelliJ Idea<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17939,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-1024x585.png\" alt=\"\" class=\"wp-image-17939\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-20-1024x585.png\" alt=\"\" class=\"wp-image-17939\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej <a href=\"https:\/\/blog.jetbrains.com\/idea\/2024\/03\/k2-kotlin-mode-alpha-in-intellij-idea\/\">IntelliJ IDEA oferuje opcjonalny tryb K2<\/a>. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), oraz tryb K2, gdzie do analizy kodu wykorzystywany jest nowy kompilator K2 pochodz\u0105c Kotlina 2.0. Jako, \u017ce K2 zosta\u0142 de facto napisany od nowa, w\u0142\u0105czenie jego trybu w IDE ma przynie\u015b\u0107 nie tylko popraw\u0119 wydajno\u015bci i ulepszenia wewn\u0119trznej architektury toolingu, ale te\u017c\u00a0zapewnia zgodno\u015b\u0107 z przysz\u0142ymi funkcjami Kotlin. Wsparcie dla trybu K2 w IntelliJ IDEA 2024.1 obejmuje pod\u015bwietlanie i uzupe\u0142nianie kodu, nawigacj\u0119, wyszukiwanie u\u017cycia, debugowanie, refaktoryzacj\u0119 oraz podstawowe funkcje edycji.<\/p>\n","innerContent":["\n<p>Zaczniemy od du\u017cego newsu od JetBrains\u00f3w. Od wersji 2024.1 (kt\u00f3r\u0105 posiadacze subskrypcji Ultimate mog\u0105 testowa\u0107), ich sztandarowej <a href=\"https:\/\/blog.jetbrains.com\/idea\/2024\/03\/k2-kotlin-mode-alpha-in-intellij-idea\/\">IntelliJ IDEA oferuje opcjonalny tryb K2<\/a>. IDE posiada\u0107 b\u0119dzie teraz wi\u0119c dwa oddzielne tryby: klasyczny (domy\u015blnie w\u0142\u0105czony), gdzie do analizy kodu u\u017cywany jest standardowy kompilator Kotlin (dla Kotlina 1.x), oraz tryb K2, gdzie do analizy kodu wykorzystywany jest nowy kompilator K2 pochodz\u0105c Kotlina 2.0. Jako, \u017ce K2 zosta\u0142 de facto napisany od nowa, w\u0142\u0105czenie jego trybu w IDE ma przynie\u015b\u0107 nie tylko popraw\u0119 wydajno\u015bci i ulepszenia wewn\u0119trznej architektury toolingu, ale te\u017c\u00a0zapewnia zgodno\u015b\u0107 z przysz\u0142ymi funkcjami Kotlin. Wsparcie dla trybu K2 w IntelliJ IDEA 2024.1 obejmuje pod\u015bwietlanie i uzupe\u0142nianie kodu, nawigacj\u0119, wyszukiwanie u\u017cycia, debugowanie, refaktoryzacj\u0119 oraz podstawowe funkcje edycji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby lepiej wybrzmia\u0142o: tryb K2 te dotycz\u0105 tylko analizy kodu w IDE i nie zale\u017cy od wersji kompilatora Kotlin okre\u015blonej w ustawieniach budowania projektu. Aby skompilowa\u0107 projekt przy u\u017cyciu kompilatora K2, nadal nale\u017cy to okre\u015bli\u0107 w ustawieniach budowania projektu. W trybie K2 nie s\u0105 jeszcze wspierane projekty Kotlin Multiplatform, projekty Android, niekt\u00f3re rodzaje refaktoryzacji i narz\u0119dzia debugowania oraz analiza kodu w plikach <code>.gradle.kts<\/code>, a tak\u017ce inne drobne funkcje. Wsparcie dla brakuj\u0105cych funkcji zostanie dodane w nadchodz\u0105cych wydaniach.<\/p>\n","innerContent":["\n<p>\u017beby lepiej wybrzmia\u0142o: tryb K2 te dotycz\u0105 tylko analizy kodu w IDE i nie zale\u017cy od wersji kompilatora Kotlin okre\u015blonej w ustawieniach budowania projektu. Aby skompilowa\u0107 projekt przy u\u017cyciu kompilatora K2, nadal nale\u017cy to okre\u015bli\u0107 w ustawieniach budowania projektu. W trybie K2 nie s\u0105 jeszcze wspierane projekty Kotlin Multiplatform, projekty Android, niekt\u00f3re rodzaje refaktoryzacji i narz\u0119dzia debugowania oraz analiza kodu w plikach <code>.gradle.kts<\/code>, a tak\u017ce inne drobne funkcje. Wsparcie dla brakuj\u0105cych funkcji zostanie dodane w nadchodz\u0105cych wydaniach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17947,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-1024x563.png\" alt=\"\" class=\"wp-image-17947\"\/><figcaption class=\"wp-element-caption\">Ja spr\u00f3buje u siebie przetestowa\u0107 jakich\u015b projektach i ch\u0119tnie podziel\u0119 si\u0119 efektami, oczywi\u015bcie je\u015bli b\u0119d\u0119 mia\u0142 jakie\u015b ciekawe wnioski.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-22-1024x563.png\" alt=\"\" class=\"wp-image-17947\"\/><figcaption class=\"wp-element-caption\">Ja spr\u00f3buje u siebie przetestowa\u0107 jakich\u015b projektach i ch\u0119tnie podziel\u0119 si\u0119 efektami, oczywi\u015bcie je\u015bli b\u0119d\u0119 mia\u0142 jakie\u015b ciekawe wnioski.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie wszystko z nowo\u015bci, bowiem JetBrains podzieli\u0142o si\u0119 te\u017c <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/the-ktor-roadmap-for-2024\/\">planami na rozw\u00f3j ich sztandarowego Kotlinowego Frameworki, Ktor<\/a>. Ten w 2024 roku, planuje wprowadzi\u0107 mas\u0119 nowo\u015bci nowo\u015bci i ulepsze\u0144, w tym wtyczk\u0119 OpenTelemetry, kt\u00f3ra umo\u017cliwi generowanie danych telemetrycznych, takich jak metryki, logi i og\u00f3lny tracing. Dodatkowo, pojawi si\u0119 integracja gRPC z klientem i serwerem Ktor za pomoc\u0105 idiomatycznej implementacji Kotlin, co u\u0142atwi tworzenie i korzystanie z us\u0142ug opartych na gRPC. Spodziewa\u0107 mo\u017cemy si\u0119 te\u017c zarz\u0105dzania transakcjami za pomoc\u0105 oficjalnej wtyczki, kt\u00f3ra b\u0119dzie inicjowa\u0107 transakcj\u0119 na pocz\u0105tku \u017c\u0105dania i zatwierdza\u0107 j\u0105 na jego ko\u0144cu, o ile nie wyst\u0105pi\u0105 b\u0142\u0119dy, upraszczaj\u0105c tym samym dost\u0119p do bazy danych. Zapowiedziano te\u017c wsparcie dla nowej implementacji IO - Kotlinx-io, kt\u00f3ra ju\u017c Ktor 3.0.0 zast\u0105pi istniej\u0105ce rozwi\u0105zanie. Kotlinx-io bazuje na <a href=\"https:\/\/github.com\/square\/okio\">Okio<\/a> i jest rozwi\u0105zaniem multiplatformowny, co u\u0142atwi tw\u00f3rcom bibliotek wsparcie Ktora. Planowane jest te\u017c wprowadzenie rejestru wtyczek, umo\u017cliwiaj\u0105cego rejestrowanie plugin\u00f3w tworzonych przez spo\u0142eczno\u015b\u0107.<\/p>\n","innerContent":["\n<p>To jednak nie wszystko z nowo\u015bci, bowiem JetBrains podzieli\u0142o si\u0119 te\u017c <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/the-ktor-roadmap-for-2024\/\">planami na rozw\u00f3j ich sztandarowego Kotlinowego Frameworki, Ktor<\/a>. Ten w 2024 roku, planuje wprowadzi\u0107 mas\u0119 nowo\u015bci nowo\u015bci i ulepsze\u0144, w tym wtyczk\u0119 OpenTelemetry, kt\u00f3ra umo\u017cliwi generowanie danych telemetrycznych, takich jak metryki, logi i og\u00f3lny tracing. Dodatkowo, pojawi si\u0119 integracja gRPC z klientem i serwerem Ktor za pomoc\u0105 idiomatycznej implementacji Kotlin, co u\u0142atwi tworzenie i korzystanie z us\u0142ug opartych na gRPC. Spodziewa\u0107 mo\u017cemy si\u0119 te\u017c zarz\u0105dzania transakcjami za pomoc\u0105 oficjalnej wtyczki, kt\u00f3ra b\u0119dzie inicjowa\u0107 transakcj\u0119 na pocz\u0105tku \u017c\u0105dania i zatwierdza\u0107 j\u0105 na jego ko\u0144cu, o ile nie wyst\u0105pi\u0105 b\u0142\u0119dy, upraszczaj\u0105c tym samym dost\u0119p do bazy danych. Zapowiedziano te\u017c wsparcie dla nowej implementacji IO - Kotlinx-io, kt\u00f3ra ju\u017c Ktor 3.0.0 zast\u0105pi istniej\u0105ce rozwi\u0105zanie. Kotlinx-io bazuje na <a href=\"https:\/\/github.com\/square\/okio\">Okio<\/a> i jest rozwi\u0105zaniem multiplatformowny, co u\u0142atwi tw\u00f3rcom bibliotek wsparcie Ktora. Planowane jest te\u017c wprowadzenie rejestru wtyczek, umo\u017cliwiaj\u0105cego rejestrowanie plugin\u00f3w tworzonych przez spo\u0142eczno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatni\u0105 nowo\u015bci\u0105 oryginalnego tekstu jest zapowied\u017a uproszczenia wstrzykiwania zale\u017cno\u015bci (Dependency Injection) poprzez oficjalne dodanie wsparcia dla DI do serwera Ktor w 2024 roku oraz publikacj\u0119 wytycznych, jak najlepiej integrowa\u0107 istniej\u0105ce biblioteki DI. Ktor zostanie zmodyfikowany, aby wspiera\u0107 DI oraz integrowa\u0107 istniej\u0105ce frameworki DI. Ta zapowied\u017a wywo\u0142a\u0142a mas\u0119 kontrowersji, do tego stopnia, \u017ce tw\u00f3rcy musieli opublikowa\u0107 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/ktor-2024-roadmap-di-update\/\">followup<\/a>, w kt\u00f3rym podkre\u015blili \u017ce korzystanie w Ktor z frameworka DI nigdy nie b\u0119dzie wymagane, a sam Ktor nigdy nie b\u0119dzie zawiera\u0142 wbudowanego frameworka DI jako cz\u0119\u015bci swojego projektu. Zaproponowana funkcjonalno\u015b\u0107 przeznaczona b\u0119dzie wy\u0142\u0105cznie dla u\u017cytkownik\u00f3w, kt\u00f3rzy chc\u0105 po\u0142\u0105czy\u0107 DI ze swoimi us\u0142ugami Ktor, a ma na celu jak najbardziej p\u0142ynn\u0105 integracj\u0119 istniej\u0105cych framework\u00f3w DI z frameworkiem.<\/p>\n","innerContent":["\n<p>Ostatni\u0105 nowo\u015bci\u0105 oryginalnego tekstu jest zapowied\u017a uproszczenia wstrzykiwania zale\u017cno\u015bci (Dependency Injection) poprzez oficjalne dodanie wsparcia dla DI do serwera Ktor w 2024 roku oraz publikacj\u0119 wytycznych, jak najlepiej integrowa\u0107 istniej\u0105ce biblioteki DI. Ktor zostanie zmodyfikowany, aby wspiera\u0107 DI oraz integrowa\u0107 istniej\u0105ce frameworki DI. Ta zapowied\u017a wywo\u0142a\u0142a mas\u0119 kontrowersji, do tego stopnia, \u017ce tw\u00f3rcy musieli opublikowa\u0107 <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/03\/ktor-2024-roadmap-di-update\/\">followup<\/a>, w kt\u00f3rym podkre\u015blili \u017ce korzystanie w Ktor z frameworka DI nigdy nie b\u0119dzie wymagane, a sam Ktor nigdy nie b\u0119dzie zawiera\u0142 wbudowanego frameworka DI jako cz\u0119\u015bci swojego projektu. Zaproponowana funkcjonalno\u015b\u0107 przeznaczona b\u0119dzie wy\u0142\u0105cznie dla u\u017cytkownik\u00f3w, kt\u00f3rzy chc\u0105 po\u0142\u0105czy\u0107 DI ze swoimi us\u0142ugami Ktor, a ma na celu jak najbardziej p\u0142ynn\u0105 integracj\u0119 istniej\u0105cych framework\u00f3w DI z frameworkiem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c jeste\u015b w temacie Dependency Injection to Helidon zapowiedzia\u0142 now\u0105 funkcje, b\u0119d\u0105c\u0105 ich w\u0142asnym podej\u015bciem do dependency injection opartym o <a href=\"https:\/\/javax-inject.github.io\/javax-inject\/\">standard JSR-330:Dependency Injection for Java<\/a>. Rdzeniem <a href=\"https:\/\/github.com\/helidon-io\/helidon\/tree\/main\/inject#readme\">Helidon Injection<\/a>, bo o niej tu mowa, jest annotation processor, kt\u00f3ry wyszukuje w kodzie aplikacji standardowe adnotacj\u0119 jakarta\/javax. Gdy takie adnotacje s\u0105 znalezione w klasie, Helidon Injection inicjuje tworzenie tak zwanego Aktywatora dla danej klasy\/us\u0142ugi, zarz\u0105dzaj\u0105cego jej lifecycle. Na przyk\u0142ad, obecno\u015b\u0107 adnotacji <code>@Inject<\/code> lub <code>@Singleton<\/code> w klasie <code>FooImpl<\/code> powoduje utworzenie <code>FooImpl.injectionActivator<\/code>, agreguj\u0105cy us\u0142ugi dla danego modu\u0142u, co pozwala na ich zarejestrowanie w \"rejestrze us\u0142ug\" (kt\u00f3ry tak naprawd\u0119 sam w sobie jest klas\u0105 wygenerowan\u0105 przez Annotation Processor), a co za tym idzie p\u00f3\u017aniejsze \u0142atwe odnalezienie i inicjalizacji.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015b w temacie Dependency Injection to Helidon zapowiedzia\u0142 now\u0105 funkcje, b\u0119d\u0105c\u0105 ich w\u0142asnym podej\u015bciem do dependency injection opartym o <a href=\"https:\/\/javax-inject.github.io\/javax-inject\/\">standard JSR-330:Dependency Injection for Java<\/a>. Rdzeniem <a href=\"https:\/\/github.com\/helidon-io\/helidon\/tree\/main\/inject#readme\">Helidon Injection<\/a>, bo o niej tu mowa, jest annotation processor, kt\u00f3ry wyszukuje w kodzie aplikacji standardowe adnotacj\u0119 jakarta\/javax. Gdy takie adnotacje s\u0105 znalezione w klasie, Helidon Injection inicjuje tworzenie tak zwanego Aktywatora dla danej klasy\/us\u0142ugi, zarz\u0105dzaj\u0105cego jej lifecycle. Na przyk\u0142ad, obecno\u015b\u0107 adnotacji <code>@Inject<\/code> lub <code>@Singleton<\/code> w klasie <code>FooImpl<\/code> powoduje utworzenie <code>FooImpl.injectionActivator<\/code>, agreguj\u0105cy us\u0142ugi dla danego modu\u0142u, co pozwala na ich zarejestrowanie w \"rejestrze us\u0142ug\" (kt\u00f3ry tak naprawd\u0119 sam w sobie jest klas\u0105 wygenerowan\u0105 przez Annotation Processor), a co za tym idzie p\u00f3\u017aniejsze \u0142atwe odnalezienie i inicjalizacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>Generated(value = \"io.helidon.inject.tools.creator.impl.DefaultActivatorCreator\", comments = \"version = 1\")\n@Singleton @Named(Injection$Module.NAME)\npublic class Injection$Module implements Module {\n    static final String NAME = \"inject.examples.logger.common\";\n\n    @Override\n    public void configure(ServiceBinder binder) {\n        binder.bind(io.helidon.inject.examples.logger.common.AnotherCommunicationMode$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.Communication$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.DefaultCommunicator$injectionActivator.INSTANCE);\n    }\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>Generated(value = \"io.helidon.inject.tools.creator.impl.DefaultActivatorCreator\", comments = \"version = 1\")\n@Singleton @Named(Injection$Module.NAME)\npublic class Injection$Module implements Module {\n    static final String NAME = \"inject.examples.logger.common\";\n\n    @Override\n    public void configure(ServiceBinder binder) {\n        binder.bind(io.helidon.inject.examples.logger.common.AnotherCommunicationMode$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.Communication$injectionActivator.INSTANCE);\n        binder.bind(io.helidon.inject.examples.logger.common.DefaultCommunicator$injectionActivator.INSTANCE);\n    }\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Takie podej\u015bcie umo\u017cliwia te\u017c zapewnienie \"leniwego\" aktywowania us\u0142ug na podstawie bie\u017c\u0105ce zapotrzebowania konkretnej aplikacji - konkretna us\u0142uga mo\u017ce pozosta\u0107 u\u015bpiona do momentu gdy jest potrzebna, co oczywi\u015bcie wi\u0105\u017ce si\u0119 z lepszym efektywne wykorzystanie zasob\u00f3w i popraw\u0119 wydajno\u015bci aplikacji. Wprowadza te\u017c mo\u017cliwo\u015b\u0107 rozleg\u0142ych integracji i rozszerzalno\u015bci - Helidon Injection pozwala min. na generowanie kodu obs\u0142ugi interceptor\u00f3w poprzez meta-adnotacje <code>InterceptedTrigger<\/code>.<\/p>\n","innerContent":["\n<p>Takie podej\u015bcie umo\u017cliwia te\u017c zapewnienie \"leniwego\" aktywowania us\u0142ug na podstawie bie\u017c\u0105ce zapotrzebowania konkretnej aplikacji - konkretna us\u0142uga mo\u017ce pozosta\u0107 u\u015bpiona do momentu gdy jest potrzebna, co oczywi\u015bcie wi\u0105\u017ce si\u0119 z lepszym efektywne wykorzystanie zasob\u00f3w i popraw\u0119 wydajno\u015bci aplikacji. Wprowadza te\u017c mo\u017cliwo\u015b\u0107 rozleg\u0142ych integracji i rozszerzalno\u015bci - Helidon Injection pozwala min. na generowanie kodu obs\u0142ugi interceptor\u00f3w poprzez meta-adnotacje <code>InterceptedTrigger<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Kilka follow-up\u00f3w do JDK 22<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Kilka follow-up\u00f3w do JDK 22<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17937,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-1024x585.jpg\" alt=\"\" class=\"wp-image-17937\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-21-1024x585.jpg\" alt=\"\" class=\"wp-image-17937\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Temat premiery JDK 22 nie ucicha, bo jak zwykle tego typu wydaniu towarzyszy kilka publikacji od spo\u0142eczno\u015bci. Dlatego mam dzisiaj dla was dwie, nieco jako follow-up do zesz\u0142otygodniowego edycji.<\/p>\n","innerContent":["\n<p>Temat premiery JDK 22 nie ucicha, bo jak zwykle tego typu wydaniu towarzyszy kilka publikacji od spo\u0142eczno\u015bci. Dlatego mam dzisiaj dla was dwie, nieco jako follow-up do zesz\u0142otygodniowego edycji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od <a href=\"https:\/\/seanjmullan.org\/blog\/2024\/03\/20\/jdk22\">publikacji Seana Mullana<\/a>, kt\u00f3ry to jak zwykle podzieli\u0142 si\u0119 z nami nowo\u015bciami dotycz\u0105cymi bezpiecze\u0144stwa. Nie ma tutaj jakich\u015b rewolucyjnych zmian - w\u015br\u00f3d g\u0142\u00f3wnych nowo\u015bci znajduj\u0105 si\u0119 dodanie kilku nowych certyfikat\u00f3w root CA, wprowadzenia interfejsu <code>java.security.AsymmetricKey<\/code>, ulepszenia wsparcia dla algorytm\u00f3w podpis\u00f3w RSA w wersji XML z u\u017cyciem skr\u00f3t\u00f3w SHA-3, a tak\u017ce wsparcia dla algorytmu podpisu HSS\/LMS w narz\u0119dziach <code>keytool<\/code> i <code>jarsigner<\/code>. Ponadto, JDK 22 u\u0142atwia zarz\u0105dzanie maksymaln\u0105 d\u0142ugo\u015bci\u0105 \u0142a\u0144cuch\u00f3w certyfikat\u00f3w TLS dla klienta i serwera poprzez nowe propertiesy systemowe.<\/p>\n","innerContent":["\n<p>Zacznijmy od <a href=\"https:\/\/seanjmullan.org\/blog\/2024\/03\/20\/jdk22\">publikacji Seana Mullana<\/a>, kt\u00f3ry to jak zwykle podzieli\u0142 si\u0119 z nami nowo\u015bciami dotycz\u0105cymi bezpiecze\u0144stwa. Nie ma tutaj jakich\u015b rewolucyjnych zmian - w\u015br\u00f3d g\u0142\u00f3wnych nowo\u015bci znajduj\u0105 si\u0119 dodanie kilku nowych certyfikat\u00f3w root CA, wprowadzenia interfejsu <code>java.security.AsymmetricKey<\/code>, ulepszenia wsparcia dla algorytm\u00f3w podpis\u00f3w RSA w wersji XML z u\u017cyciem skr\u00f3t\u00f3w SHA-3, a tak\u017ce wsparcia dla algorytmu podpisu HSS\/LMS w narz\u0119dziach <code>keytool<\/code> i <code>jarsigner<\/code>. Ponadto, JDK 22 u\u0142atwia zarz\u0105dzanie maksymaln\u0105 d\u0142ugo\u015bci\u0105 \u0142a\u0144cuch\u00f3w certyfikat\u00f3w TLS dla klienta i serwera poprzez nowe propertiesy systemowe.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przejd\u017amy do kwestii wydajno\u015bci. Drugim tekstem, kt\u00f3ry przyku\u0142 moj\u0105 uwag\u0119 to publikacja <a href=\"https:\/\/timefold.ai\/blog\/java-22-performance\">How fast is Java 22?<\/a> od Luk\u00e1\u0161a Petrovickiegoz <a href=\"https:\/\/timefold.ai\/\">timefold.ai<\/a>, projektu zajmuj\u0105cego si\u0119 szeroko rozumianym schedulingiem dla biznesu, jak np. zmiany pracownik\u00f3w czy rezerwacje pojazd\u00f3w. Sercem projektu jest silnik Timefold Solver, kt\u00f3ry odpowiada za jego g\u0142\u00f3wn\u0105 logik\u0119 i to w\u0142a\u015bnie jego Luk\u00e1\u0161 u\u017cy\u0142 do przetestowania wydajno\u015bci JDK 22 oraz GraalVM for JDK 22. Testy mia\u0142y na celu sprawdzenie, czy kod Timefold Solver nadal dzia\u0142a bezproblemowo na Java 22 i czy wydajno\u015b\u0107 jest przynajmniej taka sama jak wcze\u015bniej. Jak to zwykle bywa z benachmarkami, nale\u017cy patrze\u0107 na nie z lekkim przymr\u00f3\u017ceniem oka, ale Luk\u00e1\u0161 robi\u0142 je na swoje w\u0142asne potrzeby, wi\u0119c spodziewam si\u0119, \u017ce do tematu podszed\u0142 bez uprzedze\u0144, z nale\u017cyt\u0105 rzetelno\u015bci\u0105.<\/p>\n","innerContent":["\n<p>Przejd\u017amy do kwestii wydajno\u015bci. Drugim tekstem, kt\u00f3ry przyku\u0142 moj\u0105 uwag\u0119 to publikacja <a href=\"https:\/\/timefold.ai\/blog\/java-22-performance\">How fast is Java 22?<\/a> od Luk\u00e1\u0161a Petrovickiegoz <a href=\"https:\/\/timefold.ai\/\">timefold.ai<\/a>, projektu zajmuj\u0105cego si\u0119 szeroko rozumianym schedulingiem dla biznesu, jak np. zmiany pracownik\u00f3w czy rezerwacje pojazd\u00f3w. Sercem projektu jest silnik Timefold Solver, kt\u00f3ry odpowiada za jego g\u0142\u00f3wn\u0105 logik\u0119 i to w\u0142a\u015bnie jego Luk\u00e1\u0161 u\u017cy\u0142 do przetestowania wydajno\u015bci JDK 22 oraz GraalVM for JDK 22. Testy mia\u0142y na celu sprawdzenie, czy kod Timefold Solver nadal dzia\u0142a bezproblemowo na Java 22 i czy wydajno\u015b\u0107 jest przynajmniej taka sama jak wcze\u015bniej. Jak to zwykle bywa z benachmarkami, nale\u017cy patrze\u0107 na nie z lekkim przymr\u00f3\u017ceniem oka, ale Luk\u00e1\u0161 robi\u0142 je na swoje w\u0142asne potrzeby, wi\u0119c spodziewam si\u0119, \u017ce do tematu podszed\u0142 bez uprzedze\u0144, z nale\u017cyt\u0105 rzetelno\u015bci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17950,"width":"724px","height":"auto","sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-23.png\" alt=\"\" class=\"wp-image-17950\" style=\"width:724px;height:auto\"\/><figcaption class=\"wp-element-caption\">Wiem, benchmarki bywaj\u0105 \u0142atwym celem.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-23.png\" alt=\"\" class=\"wp-image-17950\" style=\"width:724px;height:auto\"\/><figcaption class=\"wp-element-caption\">Wiem, benchmarki bywaj\u0105 \u0142atwym celem.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W wynikach microbenchmark\u00f3w (wykonanych z u\u017cyciem Java Microbenchmark Harness, JMH) oraz test\u00f3w w realnych warunkach zauwa\u017cono, \u017ce wydajno\u015b\u0107 OpenJDK 22 w por\u00f3wnaniu z Java 21 jest niezmieniona, z wyj\u0105tkiem jednego testu, kt\u00f3ry wymaga\u0142 dalszej analizy. Natomiast GraalVM dla JDK 22 (nawet bez u\u017cycia natywnych obraz\u00f3w) wykaza\u0142 znacz\u0105c\u0105 popraw\u0119 wydajno\u015bci, \u015brednio o oko\u0142o 5% i maksymalnie o oko\u0142o 15% w okre\u015blonych benchmarkach, co czyni go atrakcyjn\u0105 opcj\u0105 dla aplikacji korzystaj\u0105cych z Timefold Solver. Wyniki te wskazuj\u0105, \u017ce przej\u015bcie na Java 22 nie wp\u0142ynie na zmiany w wydajno\u015bci, jednak u\u017cycie GraalVM dla JDK 22 mo\u017ce przynie\u015b\u0107 znacz\u0105ce ulepszenia wydajno\u015bci do 10%. Co ciekawe, wbrew og\u00f3lnym trendom, tw\u00f3rcy Timefold.ai opieraj\u0105 si\u0119 na klasycznym ParallelGC zamiast domy\u015blnego G1 ze wzgl\u0119du na jego lepsz\u0105 wydajno\u015b\u0107 w przetwarzaniu, nie za\u015b op\u00f3\u017anieniach.<\/p>\n","innerContent":["\n<p>W wynikach microbenchmark\u00f3w (wykonanych z u\u017cyciem Java Microbenchmark Harness, JMH) oraz test\u00f3w w realnych warunkach zauwa\u017cono, \u017ce wydajno\u015b\u0107 OpenJDK 22 w por\u00f3wnaniu z Java 21 jest niezmieniona, z wyj\u0105tkiem jednego testu, kt\u00f3ry wymaga\u0142 dalszej analizy. Natomiast GraalVM dla JDK 22 (nawet bez u\u017cycia natywnych obraz\u00f3w) wykaza\u0142 znacz\u0105c\u0105 popraw\u0119 wydajno\u015bci, \u015brednio o oko\u0142o 5% i maksymalnie o oko\u0142o 15% w okre\u015blonych benchmarkach, co czyni go atrakcyjn\u0105 opcj\u0105 dla aplikacji korzystaj\u0105cych z Timefold Solver. Wyniki te wskazuj\u0105, \u017ce przej\u015bcie na Java 22 nie wp\u0142ynie na zmiany w wydajno\u015bci, jednak u\u017cycie GraalVM dla JDK 22 mo\u017ce przynie\u015b\u0107 znacz\u0105ce ulepszenia wydajno\u015bci do 10%. Co ciekawe, wbrew og\u00f3lnym trendom, tw\u00f3rcy Timefold.ai opieraj\u0105 si\u0119 na klasycznym ParallelGC zamiast domy\u015blnego G1 ze wzgl\u0119du na jego lepsz\u0105 wydajno\u015b\u0107 w przetwarzaniu, nie za\u015b op\u00f3\u017anieniach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No c\u00f3\u017c powiem, kolejne punkty dla GraalVM.<\/p>\n","innerContent":["\n<p>No c\u00f3\u017c powiem, kolejne punkty dla GraalVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17935,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-1024x585.jpg\" alt=\"\" class=\"wp-image-17935\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/Untitled-2-1024x585.jpg\" alt=\"\" class=\"wp-image-17935\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Java Mission Control 9.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Java Mission Control 9.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla tych kt\u00f3rzy nie kojarz\u0105 projektu, Java Mission Control (JMC) to narz\u0119dzie do monitorowania, zarz\u0105dzania i profilowania aplikacji Java, kt\u00f3rego za\u0142o\u017ceniem jest brak wprowadzanie znacz\u0105cych op\u00f3\u017anie\u0144 czasowych w dzia\u0142aniu aplikacji, co sprawia, \u017ce \u0142atwiej jest zracjonalizowa\u0107 decyzje uruchomienia go w \u015brodowisku produkcyjnym. Dzi\u0119ki integracji z JDK, JMC oferuje dost\u0119p do bogatej gamy danych o wydajno\u015bci i zachowaniu aplikacji Java poprzez analiz\u0119 rekord\u00f3w Java Flight Recorder (JFR), umo\u017cliwia u\u017cytkownikom zar\u00f3wno zbieranie danych o wydajno\u015bci w czasie rzeczywistym oraz przegl\u0105danie i analizowanie danych historycznych.<\/p>\n","innerContent":["\n<p>Dla tych kt\u00f3rzy nie kojarz\u0105 projektu, Java Mission Control (JMC) to narz\u0119dzie do monitorowania, zarz\u0105dzania i profilowania aplikacji Java, kt\u00f3rego za\u0142o\u017ceniem jest brak wprowadzanie znacz\u0105cych op\u00f3\u017anie\u0144 czasowych w dzia\u0142aniu aplikacji, co sprawia, \u017ce \u0142atwiej jest zracjonalizowa\u0107 decyzje uruchomienia go w \u015brodowisku produkcyjnym. Dzi\u0119ki integracji z JDK, JMC oferuje dost\u0119p do bogatej gamy danych o wydajno\u015bci i zachowaniu aplikacji Java poprzez analiz\u0119 rekord\u00f3w Java Flight Recorder (JFR), umo\u017cliwia u\u017cytkownikom zar\u00f3wno zbieranie danych o wydajno\u015bci w czasie rzeczywistym oraz przegl\u0105danie i analizowanie danych historycznych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W zesz\u0142ym tygodniu <a href=\"https:\/\/hirt.se\/blog\/?p=1477\">wydano JDK Mission Control 9.0<\/a>, kt\u00f3ra do dzia\u0142ania wymaga minimum poprzedniego LTS, czyli JDK 17, przy r\u00f3wnoczesnym wsparciu dla analizy zapis\u00f3w JFR jeszcze z wersji JDK 7u40+ (kompatybilno\u015b\u0107 Javy nie przestaje na mnie robi\u0107 wra\u017cenia). JMC 9 ciemny motyw (dla wszystkich nocnych mark\u00f3w) wprowadza kompatybilno\u015b\u0107 z Eclipse 4.30, wsparcie dla Linux aarch64, a tak\u017ce usprawnienia w parserze JFR i reorganizacj\u0119 klasy, umo\u017cliwiaj\u0105c lepsz\u0105 integracj\u0119 z aplikacjami stron trzecich. Znacz\u0105ce zmiany obejmuj\u0105 r\u00f3wnie\u017c nowe regu\u0142y oceny wydajno\u015bci i wykorzystania zasob\u00f3w, ulepszon\u0105 wizualizacj\u0119 w postaci Java-based flamegraph oraz eliminacj\u0119 wtyczki Twitter (zaskoczy\u0142o mnie, \u017ce taka w og\u00f3le istnia\u0142a) ze wzgl\u0119du na zmiany w API i koszty utrzymania.<\/p>\n","innerContent":["\n<p>W zesz\u0142ym tygodniu <a href=\"https:\/\/hirt.se\/blog\/?p=1477\">wydano JDK Mission Control 9.0<\/a>, kt\u00f3ra do dzia\u0142ania wymaga minimum poprzedniego LTS, czyli JDK 17, przy r\u00f3wnoczesnym wsparciu dla analizy zapis\u00f3w JFR jeszcze z wersji JDK 7u40+ (kompatybilno\u015b\u0107 Javy nie przestaje na mnie robi\u0107 wra\u017cenia). JMC 9 ciemny motyw (dla wszystkich nocnych mark\u00f3w) wprowadza kompatybilno\u015b\u0107 z Eclipse 4.30, wsparcie dla Linux aarch64, a tak\u017ce usprawnienia w parserze JFR i reorganizacj\u0119 klasy, umo\u017cliwiaj\u0105c lepsz\u0105 integracj\u0119 z aplikacjami stron trzecich. Znacz\u0105ce zmiany obejmuj\u0105 r\u00f3wnie\u017c nowe regu\u0142y oceny wydajno\u015bci i wykorzystania zasob\u00f3w, ulepszon\u0105 wizualizacj\u0119 w postaci Java-based flamegraph oraz eliminacj\u0119 wtyczki Twitter (zaskoczy\u0142o mnie, \u017ce taka w og\u00f3le istnia\u0142a) ze wzgl\u0119du na zmiany w API i koszty utrzymania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17944,"width":"713px","height":"auto","sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-904x1024.png\" alt=\"\" class=\"wp-image-17944\" style=\"width:713px;height:auto\"\/><figcaption class=\"wp-element-caption\"> Bo wiecie, tego typu narz\u0119dzia nie mog\u0105 sobie pozwoli\u0107 na obej\u015bcie problemu w inny spos\u00f3b<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/03\/image-21-904x1024.png\" alt=\"\" class=\"wp-image-17944\" style=\"width:713px;height:auto\"\/><figcaption class=\"wp-element-caption\"> Bo wiecie, tego typu narz\u0119dzia nie mog\u0105 sobie pozwoli\u0107 na obej\u015bcie problemu w inny spos\u00f3b<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Gradle 8.7<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Gradle 8.7<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/docs.gradle.org\/8.7\/release-notes.html\">Gradle 8.7<\/a> wprowadzono szereg usprawnie\u0144 i nowo\u015bci, w tym wsparcie dla projekt\u00f3w korzystaj\u0105cych z Java 22, cho\u0107 co ciekawe, samo Gradle 8.7 jeszcze nie dzia\u0142ana tej wersji Javy ze wzgl\u0119du na brak jej wsparcia w Groomym.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/docs.gradle.org\/8.7\/release-notes.html\">Gradle 8.7<\/a> wprowadzono szereg usprawnie\u0144 i nowo\u015bci, w tym wsparcie dla projekt\u00f3w korzystaj\u0105cych z Java 22, cho\u0107 co ciekawe, samo Gradle 8.7 jeszcze nie dzia\u0142ana tej wersji Javy ze wzgl\u0119du na brak jej wsparcia w Groomym.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli chodzi o funkcjonalno\u015bci\u0105, nowo\u015bci\u0105 jest usprawnienie wykorzystania lokalnego lub zdalnego bufora budowy dla kompilacji skrypt\u00f3w Groovy, co pozwala na unikni\u0119cie ponownej kompilacji i redukcj\u0119 czasu pierwszego budowania projektu. Wprowadzono r\u00f3wnie\u017c lepsze API do aktualizacji w\u0142a\u015bciwo\u015bci kolekcji oraz usprawnienia w raportowaniu b\u0142\u0119d\u00f3w i ostrze\u017ce\u0144, co u\u0142atwia identyfikacj\u0119 i rozwi\u0105zywanie problem\u00f3w zwi\u0105zanych min. z wtyczkami. Reszta zmian dotycz\u0105 ulepsze\u0144 w konfiguracji cache, wprowadzenia nowych funkcji w Kotlin DSL (w tym aktualizacje do Kotlin 1.9.22), oraz usprawnie\u0144 w obs\u0142udze TestNG i zarz\u0105dzaniu symlinkami w systemie plik\u00f3w.<\/p>\n","innerContent":["\n<p>Je\u015bli chodzi o funkcjonalno\u015bci\u0105, nowo\u015bci\u0105 jest usprawnienie wykorzystania lokalnego lub zdalnego bufora budowy dla kompilacji skrypt\u00f3w Groovy, co pozwala na unikni\u0119cie ponownej kompilacji i redukcj\u0119 czasu pierwszego budowania projektu. Wprowadzono r\u00f3wnie\u017c lepsze API do aktualizacji w\u0142a\u015bciwo\u015bci kolekcji oraz usprawnienia w raportowaniu b\u0142\u0119d\u00f3w i ostrze\u017ce\u0144, co u\u0142atwia identyfikacj\u0119 i rozwi\u0105zywanie problem\u00f3w zwi\u0105zanych min. z wtyczkami. Reszta zmian dotycz\u0105 ulepsze\u0144 w konfiguracji cache, wprowadzenia nowych funkcji w Kotlin DSL (w tym aktualizacje do Kotlin 1.9.22), oraz usprawnie\u0144 w obs\u0142udze TestNG i zarz\u0105dzaniu symlinkami w systemie plik\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Apache Pekko zostaje Top Level Project Apache Foundation<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Apache Pekko zostaje Top Level Project Apache Foundation<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Apache Pekko powsta\u0142o jako alternatywa dla popularnego frameworka Akka, kt\u00f3ry jest szeroko stosowany do tworzenia reaktywnych aplikacji w j\u0119zyku Scala i Java. Inspiracj\u0105 do stworzenia Apache Pekko by\u0142a r\u00f3wnie\u017c zmiana licencji Akka, co spowodowa\u0142o niepewno\u015b\u0107 w\u015br\u00f3d spo\u0142eczno\u015bci programist\u00f3w co do przysz\u0142ego dost\u0119pu i wykorzystania tego frameworka w projektach komercyjnych. G\u0142\u00f3wnym celem powstania Apache Pekko by\u0142o zaoferowanie podobnej funkcjonalno\u015bci co Akka, ale pod egid\u0105 Apache Software Foundation, co gwarantuje otwarto\u015b\u0107 i dost\u0119pno\u015b\u0107 projektu dla szerszego grona deweloper\u00f3w. Teraz projekt otrzyma\u0142 status Top Level Project.<\/p>\n","innerContent":["\n<p>Apache Pekko powsta\u0142o jako alternatywa dla popularnego frameworka Akka, kt\u00f3ry jest szeroko stosowany do tworzenia reaktywnych aplikacji w j\u0119zyku Scala i Java. Inspiracj\u0105 do stworzenia Apache Pekko by\u0142a r\u00f3wnie\u017c zmiana licencji Akka, co spowodowa\u0142o niepewno\u015b\u0107 w\u015br\u00f3d spo\u0142eczno\u015bci programist\u00f3w co do przysz\u0142ego dost\u0119pu i wykorzystania tego frameworka w projektach komercyjnych. G\u0142\u00f3wnym celem powstania Apache Pekko by\u0142o zaoferowanie podobnej funkcjonalno\u015bci co Akka, ale pod egid\u0105 Apache Software Foundation, co gwarantuje otwarto\u015b\u0107 i dost\u0119pno\u015b\u0107 projektu dla szerszego grona deweloper\u00f3w. Teraz projekt otrzyma\u0142 status Top Level Project.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Uzyskanie statusu Top Level Project (TLP) przez Apache Pekko jest potwierdzeniem jego warto\u015bci i stabilno\u015bci jako narz\u0119dzia do tworzenia aplikacji reaktywnych. Status TLP w ekosystemie Apache Software Foundation (ASF) oznacza, \u017ce projekt przeszed\u0142 kompleksowy proces inkubacji, wykazuj\u0105c swoj\u0105 \u017cywotno\u015b\u0107, zdolno\u015b\u0107 do samodzielnej ewolucji i utrzymania aktywnej spo\u0142eczno\u015bci. Dla Apache Pekko, bycie TLP to nie tylko presti\u017c i uznanie w \u015brodowisku open-source, ale tak\u017ce wi\u0119ksza niezale\u017cno\u015b\u0107 i mo\u017cliwo\u015bci rozwoju. Projekt mo\u017ce teraz korzysta\u0107 z pe\u0142nego wsparcia fundacji, zarz\u0105dzaj\u0105c w\u0142asn\u0105 infrastruktur\u0105, procesami i zasadami, co umacnia jego pozycj\u0119 jako kluczowego narz\u0119dzia dla programist\u00f3w poszukuj\u0105cych alternatywy dla Akka w budowie wydajnych i skalowalnych aplikacji reaktywnych.<\/p>\n","innerContent":["\n<p>Uzyskanie statusu Top Level Project (TLP) przez Apache Pekko jest potwierdzeniem jego warto\u015bci i stabilno\u015bci jako narz\u0119dzia do tworzenia aplikacji reaktywnych. Status TLP w ekosystemie Apache Software Foundation (ASF) oznacza, \u017ce projekt przeszed\u0142 kompleksowy proces inkubacji, wykazuj\u0105c swoj\u0105 \u017cywotno\u015b\u0107, zdolno\u015b\u0107 do samodzielnej ewolucji i utrzymania aktywnej spo\u0142eczno\u015bci. Dla Apache Pekko, bycie TLP to nie tylko presti\u017c i uznanie w \u015brodowisku open-source, ale tak\u017ce wi\u0119ksza niezale\u017cno\u015b\u0107 i mo\u017cliwo\u015bci rozwoju. Projekt mo\u017ce teraz korzysta\u0107 z pe\u0142nego wsparcia fundacji, zarz\u0105dzaj\u0105c w\u0142asn\u0105 infrastruktur\u0105, procesami i zasadami, co umacnia jego pozycj\u0119 jako kluczowego narz\u0119dzia dla programist\u00f3w poszukuj\u0105cych alternatywy dla Akka w budowie wydajnych i skalowalnych aplikacji reaktywnych.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=17931"}],"version-history":[{"count":9,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17931\/revisions"}],"predecessor-version":[{"id":17954,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17931\/revisions\/17954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/17941"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=17931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=17931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=17931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}