{"id":15756,"date":"2023-04-21T07:48:38","date_gmt":"2023-04-21T05:48:38","guid":{"rendered":"https:\/\/vived.io\/?p=15756"},"modified":"2023-04-21T10:58:36","modified_gmt":"2023-04-21T08:58:36","slug":"co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/","title":{"rendered":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? &#8211; JVM Weekly vol. 132"},"content":{"rendered":"\n<h2 id=\"1-co-roman-elizarov-tworca-korutyn-sadzi-o-wirtualnych-watkach\" data-num=1>1. Co Roman Elizarov &#8211; tw\u00f3rca Korutyn &#8211; s\u0105dzi o Wirtualnych W\u0105tkach?<\/h2>\n\n\n\n<p>Tydzie\u0144 temu zako\u0144czy\u0142em edycje cliffhangerem, obiecuj\u0105c \u017ce dzi\u015b zajmiemy si\u0119 prezentacj\u0105 Romana Elizarova, kt\u00f3ra rozpoczyna\u0142a drugi dzie\u0144 KotlinConf, a opowiada\u0142a o tym, co w \u015bwiecie Korutyn zmieni Project Loom (spoiler: nie tak wiele, ale o tym za chwil\u0119). S\u0142owa dotrzymuje. Zapisu prezentacji jeszcze w sieci nie ma (cho\u0107 pewnie pojawi si\u0119 na dniach), ale jako \u017ce mia\u0142em okazj\u0119 j\u0105 ogl\u0105da\u0107, podziel\u0119 si\u0119 tym co si\u0119 na niej dowiedzieli\u015bmy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-19.png\" alt=\"Witam serdecznie! \" class=\"wp-image-15769\" width=\"569\" height=\"375\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-19.png 759w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-19-300x198.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><figcaption class=\"wp-element-caption\">Polecam si\u0119!<\/figcaption><\/figure><\/div>\n\n\n<p>Od razu zaznacz\u0119 &#8211; wi\u0119kszo\u015b\u0107 z tego co w prezentacji si\u0119 pojawi\u0142o to nie jest jaka\u015b zupe\u0142nie nowa wiedza, chyba po raz pierwszy mamy jednak informacje od samego \u017ar\u00f3d\u0142a &#8211; Roman Elizarov to nie tylko obecny lead Kotlina, ale r\u00f3wnie\u017c architekt korutyn. Jego punkt widzenia jest nast\u0119puj\u0105cy &#8211; Project Loom i Kotlinowe Korutyny zajmuj\u0105 si\u0119 wyzwaniami programowania wsp\u00f3\u0142bie\u017cnego, ale celuj\u0105 w r\u00f3\u017cne aspekty, w zwi\u0105zku z tym maj\u0105 r\u00f3\u017cne implementacje. Project Loom skupia si\u0119 na rozwini\u0119ciu istniej\u0105cych API w\u0105tk\u00f3w i ma na celu umo\u017cliwienie aplikacjom serwerowym napisanym w stylu thread-per-request (gro javowego ekosystem) optymalne skalowanie. Wprowadza w\u0105tki wirtualne jako rozwini\u0119cie API dla w\u0105tk\u00f3w &#8222;fizycznych&#8221;, umo\u017cliwiaj\u0105c zmian\u0119 w\u0105tk\u00f3w fizycznych na wirtualne przy minimalnych zmianach kodu. Jest to szczeg\u00f3lnie przydatne w przypadku ju\u017c istniej\u0105cego kodu, kt\u00f3ry b\u0119dziemy utrzymywa\u0107 jeszcze przez lata, co najwy\u017cej modernizuj\u0105c go, na przyk\u0142ad dzi\u0119ki wirtualnym w\u0105tkom.<\/p>\n\n\n\n<p>Kotlin Coroutines, dzia\u0142aj\u0105 zupe\u0142nie inaczej i na innej warstwie (na zasadzie generowania dodatkowego kodu). Dzi\u0119ki temu skupiaj\u0105 si\u0119 na dostarczeniu jak najwygodniejszego asynchronicznych API i granularnej wsp\u00f3\u0142bie\u017cno\u015bci &#8211; zar\u00f3wno aplikacji serwerowych, jak i ka\u017cdego innej cz\u0119\u015bci projektu, gdzie wykonanie fragmentu kodu w nowym w\u0105tku ma sens. Bior\u0105c pod uwag\u0119 istotno\u015b\u0107 Kotlina w \u015bwiecie Androida, r\u00f3wnie wa\u017cne jest np. dobre obs\u0142ugiwanie framework\u00f3w UI.  Zapewnia lekki spos\u00f3b zarz\u0105dzania ni\u0105 za pomoc\u0105 wsp\u00f3\u0142bie\u017cno\u015bci strukturalnej (Structured Concurrency), kt\u00f3ra pomaga utrzyma\u0107 hierarchi\u0119 rodzic-dziecko i rozwi\u0105zuje zaskakuj\u0105co trudny problem anulowania raz rozpocz\u0119tego asynchronicznego workflow. Java te\u017c posiada Structured Concurrency, ale Elizarov wskazuje jej ograniczenia &#8211; powsta\u0142a bowiem jako nowa funkcjonalno\u015b\u0107 do ju\u017c zastanego API wsp\u00f3\u0142bie\u017cno\u015bci, nie jako co\u015b dodanego ju\u017c na poziomie projektowania. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"625\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-20.png\" alt=\"\" class=\"wp-image-15772\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-20.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-20-240x300.png 240w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Z prezentacji klaruje si\u0119 mniej wi\u0119cej powy\u017cszy obraz<\/figcaption><\/figure><\/div>\n\n\n<p>\u017beby jednak nie by\u0142o, \u017ce kortyny nic na powstaniu wirtualnych w\u0105tk\u00f3w nie skorzystaj\u0105 &#8211; jedn\u0105 z ich s\u0142abo\u015bci s\u0105 wyzwania zwi\u0105zane z \u0142\u0105czeniem \u015bwiata asynchronicznego z tym &#8222;blokuj\u0105cym&#8221;, kt\u00f3ry nadal mo\u017ce tworzy\u0107 fizyczne w\u0105skie gard\u0142a, wymuszaj\u0105c u\u017cycie zasobo\u017cernych dyspozytor\u00f3w korutyn jak <code>Dispatcher.IO<\/code>, dzia\u0142aj\u0105cy na klasycznych, blokuj\u0105cych w\u0105tkach. Project Loom mo\u017ce pom\u00f3c unikn\u0105\u0107 blokowania i marnowania zasob\u00f3w fizycznych poprzez uruchomienie tego typu interfejs\u00f3w w ramach Virtual Threads, kt\u00f3re zosta\u0142y stworzone do ich obs\u0142ugi &#8211; z my\u015bl\u0105 o kompatybilno\u015bci ze starym kodem. W\u0105tki wirtualne Loom s\u0105 wi\u0119c bardziej wydajne pod wzgl\u0119dem zasob\u00f3w ni\u017c w\u0105tki &#8222;fizyczne&#8221; (jak mi to ci\u0119\u017cko przez gard\u0142o przechodzi), a jako \u017ce Korutyny z za\u0142o\u017cenia powsta\u0142y z my\u015bl\u0105 o u\u017cywania dowolnego silnika wsp\u00f3\u0142bie\u017cno\u015bci, b\u0119d\u0105 mog\u0142y wykorzysta\u0107 nowo\u015bci w ramach JVM.<\/p>\n\n\n\n<p>Oczywi\u015bcie, ca\u0142o\u015b\u0107 jest pewnie nieco zbiasowana &#8211; nie mieli\u015bmy bowiem do czynienia z panelem dyskusyjnym mi\u0119dzy Ronem Presslerem, a Romanem Elizarovem (panowie, zr\u00f3bcie co\u015b takiego, Avengers Endgame by si\u0119 chowa\u0142o jako crossover dekady), ale argumentacj\u0105 tw\u00f3rcy Korutyn na Kotlinowej konferencji. W dalszym ci\u0105gu jednak bardzo polecam polowa\u0107 na wideo, je\u015bli kiedy\u015b KotlinConf zdecyduje si\u0119 opublikowa\u0107 zapis prezentacji &#8211; na pewno dam zna\u0107 o takowym.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Loom: The Kotlin Coroutines Killer? | Talking Kotlin #120\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/1qezCNVWpHc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption class=\"wp-element-caption\">A je\u015bli ju\u017c dzisiaj chcecie troch\u0119 dodatkowego kontekstu &#8211; polecam ten odcinek &#8222;Talking Kotlin&#8221;<\/figcaption><\/figure>\n\n\n\n<h2 id=\"2-masa-ruchu-w-swiecie-build-systemow-gradle-i-bld\" data-num=2>2. Masa ruchu w \u015bwiecie build system\u00f3w &#8211; Gradle i bld<\/h2>\n\n\n\n<p>To jednak nie koniec kontynuacji w\u0105tk\u00f3w z poprzedniej edycji. W zesz\u0142ym tygodniu m\u00f3wili\u015bmy o Gradle raczej z perspektywy nowo\u015bci dla Kotlina, ale dzi\u015b wracamy do 8.1. Wydanie to przynosi bowiem wiele ciekawych nowo\u015bci, o kt\u00f3rych nie mia\u0142em okazji wspomnie\u0107 tydzie\u0144 temu.<\/p>\n\n\n\n<p>Przyk\u0142adowo, ustabilizowano funkcj\u0119 cache&#8217;owania fazy konfiguracji, co pozwala na buforowanie jej wyniku i ponowne wykorzystanie go w kolejnych buildach, skracaj\u0105c ich czas. Cache obs\u0142uguje teraz w pe\u0142ni weryfikacj\u0119 zale\u017cno\u015bci, repozytoria lokalne i posiada rozszerzon\u0105 kompatybilno\u015b\u0107 z podstawowymi wtyczkami. A jak ju\u017c jeste\u015bmy przy konfiguracji &#8211; Gradle doda\u0142 dodatkowo szyfrowanie jej pami\u0119ci podr\u0119cznej, aby chroni\u0107 wra\u017cliwe dane. <\/p>\n\n\n\n<p>Plugin JVM obs\u0142uguje teraz budowanie projekt\u00f3w z Java 20, a wtyczka Codenarc &#8211; s\u0142u\u017c\u0105ca do analizy statycznej &#8211; zosta\u0142a zoptymalizowana pod k\u0105tem zr\u00f3wnoleglenia dzia\u0142ania. Je\u015bli chodzi o wzrosty wydajno\u015bci, sam Gradle dosta\u0142 lepsze zarz\u0105dzanie pami\u0119ci\u0105. Dodatkowo, wprowadzono nowe akcje Dataflow &#8211; alternatywnego mechanizmu do dobrze znanych task\u00f3w &#8211; kt\u00f3re zast\u0105pi\u0105 istniej\u0105cy listener buildFinished.<\/p>\n\n\n\n<p>Tydzie\u0144 temu pisali\u015bmy o tym, \u017ce Gradle dla Androida b\u0119dzie domy\u015blnie korzysta\u0107 z Kotlina. Okaza\u0142o si\u0119 jednak, \u017ce platforma posz\u0142a o krok dalej i postanowi\u0142a wprowadzi\u0107 <code>build.kts<\/code> jako domy\u015blny format na wszystkich platformach. Niejako w zwi\u0105zku z tym faktem Kotlin DSL doczeka\u0142 si\u0119 usprawnie\u0144 w kilku obszarach, w tym eksperymentalnego prostego przypisywania properties\u00f3w w skryptach Kotlin DSL oraz kilku ulepsze\u0144 je\u015bli chodzi o obs\u0142ug\u0119 plugin\u00f3w.<\/p>\n\n\n\n<p>Co ciekawe, mimo tak wielu nowo\u015bci, to nie o Gradle m\u00f3wiono najwi\u0119cej, je\u015bli chodzi o buildsystemy JVM. Okazuje si\u0119 bowiem, \u017ce na rynku pojawi\u0142 si\u0119 nowy build system, kt\u00f3ry ma na siebie ca\u0142kiem interesuj\u0105cy pomys\u0142 &#8211; <code>bld<\/code> od RIFE2.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-21.png\" alt=\"\" class=\"wp-image-15782\" width=\"660\" height=\"359\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-21.png 880w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-21-300x163.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-21-768x418.png 768w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><figcaption class=\"wp-element-caption\">\u017bycie bywa ci\u0119\u017ckie, Gradle<\/figcaption><\/figure><\/div>\n\n\n<p>Zaczniemy od tego czym jest RIFE2. Projekt mo\u017ce nie by\u0107 tak szeroko znany jak niekt\u00f3re inne frameworki internetowe Java, ale mimo IMHO okropnej nazwy jego tw\u00f3rcy staraj\u0105 si\u0119 przebi\u0107 do masowej \u015bwiadomo\u015bci, i chyba po raz pierwszy im si\u0119 to uda\u0142o. Tw\u00f3rcy frameworki RIFE2 <a href=\"https:\/\/foojay.io\/today\/introducing-bld-a-new-pure-java-build-system\/\">pokazali bowiem <code>bld<\/code><\/a>, w kt\u00f3rym postanowili podej\u015b\u0107 do tematu budowania aplikacji nieco inaczej od konkurencji. Zar\u00f3wno Gradle, jak i Maven, opieraj\u0105 si\u0119 na tworzeniu konfiguracji buildu w spos\u00f3b deklaratywny, czy to za pomoc\u0105 DSL (w Groovym lub Kotlinie), czy te\u017c XML. <code>bld<\/code> pozwala za\u015b programistom na pisanie logiki build\u00f3w w czystej Javie. System <code>bld<\/code> zosta\u0142 zaprojektowany z my\u015bl\u0105 o prostocie u\u017cycia, k\u0142ad\u0105c nacisk na bezpo\u015brednie definiowanie procesu, unikaj\u0105c element\u00f3w auto-magicznych, cz\u0119sto spotykanych w innych narz\u0119dziach do budowania, takich jak Gradle. Filozofia, kt\u00f3ra przy\u015bwieca narz\u0119dziu mocno kojarzy mi si\u0119 z przyj\u0119t\u0105 przez AWS w Cloud Development Kit.<\/p>\n\n\n\n<p>W przeciwie\u0144stwie do Gradle, kt\u00f3re opisuje plan przed jego wykonaniem, <code>bld<\/code> natychmiast wykonuje zadania, gdy s\u0105 one zdefiniowane. Ta r\u00f3\u017cnica w podej\u015bciu zmniejsza obci\u0105\u017cenie poznawcze programist\u00f3w, u\u0142atwiaj\u0105c rozumowanie o procesach budowania. Ponadto, <code>bld<\/code> wymaga Jav\u0119 17, zapewniaj\u0105c jednocze\u015bnie autouzupe\u0142nianie i wsparcie Javadoc. Integracja z Jav\u0105 zapewnia, \u017ce logika budowania mo\u017ce by\u0107 zrozumiana i utrzymywana w tym samym ekosystemie co kod aplikacji.<\/p>\n\n\n\n<p>M\u00f3j komentarz: Jestem rozdarty mi\u0119dzy &#8222;build system powinien by\u0107 nudny i przewidywalny&#8221; a faktem, \u017ce CDK posiada mas\u0119 fan\u00f3w i sta\u0142 si\u0119 de facto standardem w \u015bwiecie AWS, bazuj\u0105c na bardzo podobnej filozofii. Boj\u0119 si\u0119 te\u017c mocno przeciekaj\u0105cej abstrakcji i faktu, \u017ce bez wsparcia spo\u0142eczno\u015bci ci\u0119\u017cko b\u0119dzie taki ekosystem rozhula\u0107 &#8211; nie raz rozpisywa\u0142em si\u0119 o tym, \u017ce nawet konwersja Groovy SDK na Kotlin SDK bywa bolesna. Nie zmienia to faktu, \u017ce wrzuci\u0142em sobie <code>bld<\/code> na m\u00f3j radar i kiedy\u015b ch\u0119tnie go wypr\u00f3buje.<\/p>\n\n\n\n<h2 id=\"3-po-co-javie-silna-enkapsulacja-platformy\" data-num=3>3. Po co Javie silna enkapsulacja platformy?<\/h2>\n\n\n\n<p>A na koniec JEP, bo jak tak mo\u017cna by bez JEP-a. Kandydackimi zajmiemy si\u0119 za tydzie\u0144 (a jest ich par\u0119), ale dzisiaj chcia\u0142em przybli\u017cy\u0107 nowy draft: <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>. Jest to tak zwany JEP informacyjny, czyli swoisty Design Doc, przedstawiaj\u0105cy pewne za\u0142o\u017cenia projektowe przy\u015bwiecaj\u0105ce tw\u00f3rcom. Warto si\u0119 z nim jednak zapozna\u0107, dotyka on bowiem bardzo ciekawego tematu: modularyzacji ca\u0142ej platformy, a tak\u017ce powi\u0105zanej z ni\u0105 enkapsulacji.<\/p>\n\n\n\n<p>Ka\u017cdy wie, \u017ce je\u015bli oznaczymy w javowej klasie pole jako <code>private<\/code>, to nikt spoza tej klasy nie b\u0119dzie mia\u0142 do niej dost\u0119pu Refleksja i inne mechanizmy mog\u0142y j\u0105 bowiem przez lata omin\u0105\u0107 to zachowanie, np. poprzez u\u017cycie metody <code>java.lang.reflect.AccessibleObject.setAccessible<\/code>. Powody \u0142amania enkapsulacji s\u0105 bardzo r\u00f3\u017cne, jak uzyskania dost\u0119pu do nieeksponowanej funkcjonalno\u015bci, obej\u015bcia b\u0142\u0119d\u00f3w (sam to robi\u0142em kiedy\u015b z testow\u0105 wersj\u0105 AWS SDK 2.0, gdy ta by\u0142a jeszcze w becie) lub poprawy wydajno\u015bci &#8211; tutaj sztandarowym przyk\u0142adem jest <code>sun.misc.Unsafe<\/code>, kt\u00f3ry przez lata by\u0142 podawany jako sztandarowy przyk\u0142ad \u0142amania zabezpiecze\u0144 w JVM. Z punktu widzenia tw\u00f3rc\u00f3w JDK sytuacja taka jest nie do pozazdroszczenia &#8211; bardzo trudno jest ewoluowa\u0107 platform\u0119 w momencie, gdy nie masz pewno\u015bci czy jaki\u015b refaktoring nie zepsuje jakiej\u015b popularnej biblioteki (<a href=\"https:\/\/www.hyrumslaw.com\/\">prawo Hyruma<\/a> si\u0119 k\u0142ania). Postanowiono wi\u0119c ten dziki zach\u00f3d nieco posprz\u0105ta\u0107 i poprawi\u0107 sytuacje.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22.png\" alt=\"\" class=\"wp-image-15787\" width=\"480\" height=\"480\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22.png 960w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22-300x300.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22-150x150.png 150w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22-768x768.png 768w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><figcaption class=\"wp-element-caption\">Ale tak posprz\u0105ta\u0107-posprz\u0105ta\u0107.<\/figcaption><\/figure><\/div>\n\n\n<p>Silna enkapsulacja jest kluczem do rozwi\u0105zania problem\u00f3w. Prace nad jej wprowadzeniem do Javy rozpocz\u0119\u0142y si\u0119 w latach 2010+, ale ich znaczenie staje si\u0119 coraz wyra\u017aniejsze z ka\u017cdym kolejnym rokiem. Java 9, wprowadzaj\u0105c modu\u0142y, wymusi\u0142a siln\u0105 enkapsulacj\u0119 w czasie kompilacji, ale ze wzgl\u0119du na kompatybilno\u015b\u0107 wsteczn\u0105 (i brak sensownej alternatywy dla niekt\u00f3rych interwa\u0142owych rozwi\u0105za\u0144) zezwoli\u0142a na g\u0142\u0119bok\u0105 refleksj\u0119 (wspomniane <code>setAccessible<\/code>) w czasie wykonywania aplikacji z ostrze\u017ceniami. Sytuacja jednak przez lata ewoulowa\u0142a, a oficjalne zamienniki dla wewn\u0119trznych klas JDK (jak <code>VarHandle<\/code>) zmniejszy\u0142y potrzeb\u0119 \u0142amania enkapsulacji, podczas gdy nowe API uczyni\u0142y starsze praktyki przestarza\u0142ymi. Wraz z JDK 16, u\u017cycie zacz\u0105\u0142 wymusza\u0107 siln\u0105 enkapsulacj\u0119 w czasie pr\u00f3by dostania si\u0119 do internali JDK (przynajmniej cz\u0119\u015bciowo, wspomniane wcze\u015bniej <code>sun.misc.Unsafe<\/code> pozosta\u0142o dost\u0119pne), zamieniaj\u0105c ostrze\u017cenia w b\u0142\u0119dy.<\/p>\n\n\n\n<p>Mimo wielu krok\u00f3w naprz\u00f3d, zak\u0142adany poziom integralno\u015b\u0107 w platformie Java nie zosta\u0142 jeszcze osi\u0105gni\u0119ty, w\u0142a\u015bnie z powodu braku powszechnej silnej enkapsulacji. Niekt\u00f3re API, takie jak <code>sun.misc.Unsafe<\/code> czy JNI, umo\u017cliwiaj\u0105 naruszenie enkapsulacji i integralno\u015bci systemu. W rezultacie analiza bezpiecze\u0144stwa aplikacji i jej zale\u017cno\u015bci staje si\u0119 trudna, a aktualizacja wersji JDK mo\u017ce by\u0107 problematyczna. Aby osi\u0105gn\u0105\u0107 integralno\u015b\u0107, planowane jest stopniowe ograniczenie tych API i zamkni\u0119cie luk w przysz\u0142ych JEPach, co wymaga\u0107 b\u0119dzie od bibliotek dostosowania si\u0119 do zmian. St\u0105d w\u0142a\u015bnie ten JEP &#8211; tw\u00f3rcy chc\u0105, \u017ceby ca\u0142e community zdawa\u0142o sobie spraw\u0119 z ich plan\u00f3w i mog\u0142o si\u0119 na nie przygotowa\u0107, a tak\u017ce dyskutowa\u0107 nad konsekwencjami.<\/p>\n\n\n\n<p>Na koniec warto si\u0119 zastanowi\u0107 &#8211; skoro tyle czasu sobie bez tej silnej enkapsulacji radzili\u015bmy, to dlaczego wzmo\u017cone zainteresowanie tym tematem? Okazuje si\u0119, \u017ce powodem jest to, \u017ce coraz wi\u0119ksza cz\u0119\u015b\u0107 \u015brodowiska uruchomieni owego Javy jest pisana w Javie, wi\u0119c sami jej tw\u00f3rcy maj\u0105 coraz wi\u0119ksz\u0105 potrzeb\u0119 silnej enkapsulacji. Utrzymanie JDK by\u0142o utrudnione przez przestarza\u0142e pakiety, a migracja mi\u0119dzy wersjami JDK stawa\u0142a si\u0119 problematyczna. Mimo supermocy, jak\u0105 brak integralno\u015bci oferowa\u0142 niekt\u00f3rym bibliotekom, sytuacja jest nie do utrzymania.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-1024x576.png\" alt=\"\" class=\"wp-image-15792\" width=\"512\" height=\"288\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-1024x576.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-300x169.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-768x432.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-1536x864.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24.png 1920w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">Na miejscu tw\u00f3rc\u00f3w JDK nazwa\u0142bym ca\u0142\u0105 inicjatyw\u0119 &#8222;Kryptonite Project&#8221;<\/figcaption><\/figure><\/div>\n\n\n<p>To by\u0142 taki m\u00f3j TLDR &#8211; Oczywi\u015bcie, jak to zawsze bywa w przypadku JEP-\u00f3w Rona Presslera, ca\u0142o\u015b\u0107 zawiera mas\u0119 dodatkowych szczeg\u00f3\u0142\u00f3w, kt\u00f3re w moim przykr\u00f3tkim opisie musia\u0142em pewnie nieco upro\u015bci\u0107. Dlatego te\u017c traktujcie ca\u0142o\u015b\u0107 jako zajawk\u0119, a po wszelkie dodatkowe detale odsy\u0142am do <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszej edycji w dalszym ci\u0105gu pozostajemy nieco w temacie KotlinConf, ale wyjdziemy poza ten event, prezentuj\u0105c nowo\u015b\u0107 w build systemach javowych, a tak\u017ce skr\u00f3t bardzo ciekawego informacyjnego JEP-a, dotykaj\u0105cego tematu enkapsulacji javowego kodu.<\/p>\n","protected":false},"author":10,"featured_media":15800,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-15756","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"10","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-5.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>Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - 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\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - Vived\" \/>\n<meta property=\"og:description\" content=\"W dzisiejszej edycji w dalszym ci\u0105gu pozostajemy nieco w temacie KotlinConf, ale wyjdziemy poza ten event, prezentuj\u0105c nowo\u015b\u0107 w build systemach javowych, a tak\u017ce skr\u00f3t bardzo ciekawego informacyjnego JEP-a, dotykaj\u0105cego tematu enkapsulacji javowego kodu.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-21T05:48:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-21T08:58:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\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\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? &#8211; JVM Weekly vol. 132\",\"datePublished\":\"2023-04-21T05:48:38+00:00\",\"dateModified\":\"2023-04-21T08:58:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\"},\"wordCount\":2025,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\",\"url\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\",\"name\":\"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png\",\"datePublished\":\"2023-04-21T05:48:38+00:00\",\"dateModified\":\"2023-04-21T08:58:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? &#8211; JVM Weekly vol. 132\"}]},{\"@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":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - 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\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/","og_locale":"pl_PL","og_type":"article","og_title":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - Vived","og_description":"W dzisiejszej edycji w dalszym ci\u0105gu pozostajemy nieco w temacie KotlinConf, ale wyjdziemy poza ten event, prezentuj\u0105c nowo\u015b\u0107 w build systemach javowych, a tak\u017ce skr\u00f3t bardzo ciekawego informacyjnego JEP-a, dotykaj\u0105cego tematu enkapsulacji javowego kodu.","og_url":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/","og_site_name":"Vived","article_published_time":"2023-04-21T05:48:38+00:00","article_modified_time":"2023-04-21T08:58:36+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.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\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? &#8211; JVM Weekly vol. 132","datePublished":"2023-04-21T05:48:38+00:00","dateModified":"2023-04-21T08:58:36+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/"},"wordCount":2025,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/","url":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/","name":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? - JVM Weekly vol. 132 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png","datePublished":"2023-04-21T05:48:38+00:00","dateModified":"2023-04-21T08:58:36+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-4.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/co-tworca-korutyn-sadzi-o-wirtualnych-watkach-jvm-weekly-vol-132\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Co tw\u00f3rca Korutyn s\u0105dzi o Wirtualnych W\u0105tkach? &#8211; JVM Weekly vol. 132"}]},{"@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. Co Roman Elizarov - tw\u00f3rca Korutyn - s\u0105dzi o Wirtualnych W\u0105tkach?<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Co Roman Elizarov - tw\u00f3rca Korutyn - s\u0105dzi o Wirtualnych W\u0105tkach?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tydzie\u0144 temu zako\u0144czy\u0142em edycje cliffhangerem, obiecuj\u0105c \u017ce dzi\u015b zajmiemy si\u0119 prezentacj\u0105 Romana Elizarova, kt\u00f3ra rozpoczyna\u0142a drugi dzie\u0144 KotlinConf, a opowiada\u0142a o tym, co w \u015bwiecie Korutyn zmieni Project Loom (spoiler: nie tak wiele, ale o tym za chwil\u0119). S\u0142owa dotrzymuje. Zapisu prezentacji jeszcze w sieci nie ma (cho\u0107 pewnie pojawi si\u0119 na dniach), ale jako \u017ce mia\u0142em okazj\u0119 j\u0105 ogl\u0105da\u0107, podziel\u0119 si\u0119 tym co si\u0119 na niej dowiedzieli\u015bmy.<\/p>\n","innerContent":["\n<p>Tydzie\u0144 temu zako\u0144czy\u0142em edycje cliffhangerem, obiecuj\u0105c \u017ce dzi\u015b zajmiemy si\u0119 prezentacj\u0105 Romana Elizarova, kt\u00f3ra rozpoczyna\u0142a drugi dzie\u0144 KotlinConf, a opowiada\u0142a o tym, co w \u015bwiecie Korutyn zmieni Project Loom (spoiler: nie tak wiele, ale o tym za chwil\u0119). S\u0142owa dotrzymuje. Zapisu prezentacji jeszcze w sieci nie ma (cho\u0107 pewnie pojawi si\u0119 na dniach), ale jako \u017ce mia\u0142em okazj\u0119 j\u0105 ogl\u0105da\u0107, podziel\u0119 si\u0119 tym co si\u0119 na niej dowiedzieli\u015bmy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15769,"width":569,"height":375,"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\/2023\/04\/image-19.png\" alt=\"Witam serdecznie! \" class=\"wp-image-15769\" width=\"569\" height=\"375\"\/><figcaption class=\"wp-element-caption\">Polecam si\u0119!<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-19.png\" alt=\"Witam serdecznie! \" class=\"wp-image-15769\" width=\"569\" height=\"375\"\/><figcaption class=\"wp-element-caption\">Polecam si\u0119!<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od razu zaznacz\u0119 - wi\u0119kszo\u015b\u0107 z tego co w prezentacji si\u0119 pojawi\u0142o to nie jest jaka\u015b zupe\u0142nie nowa wiedza, chyba po raz pierwszy mamy jednak informacje od samego \u017ar\u00f3d\u0142a - Roman Elizarov to nie tylko obecny lead Kotlina, ale r\u00f3wnie\u017c architekt korutyn. Jego punkt widzenia jest nast\u0119puj\u0105cy - Project Loom i Kotlinowe Korutyny zajmuj\u0105 si\u0119 wyzwaniami programowania wsp\u00f3\u0142bie\u017cnego, ale celuj\u0105 w r\u00f3\u017cne aspekty, w zwi\u0105zku z tym maj\u0105 r\u00f3\u017cne implementacje. Project Loom skupia si\u0119 na rozwini\u0119ciu istniej\u0105cych API w\u0105tk\u00f3w i ma na celu umo\u017cliwienie aplikacjom serwerowym napisanym w stylu thread-per-request (gro javowego ekosystem) optymalne skalowanie. Wprowadza w\u0105tki wirtualne jako rozwini\u0119cie API dla w\u0105tk\u00f3w \"fizycznych\", umo\u017cliwiaj\u0105c zmian\u0119 w\u0105tk\u00f3w fizycznych na wirtualne przy minimalnych zmianach kodu. Jest to szczeg\u00f3lnie przydatne w przypadku ju\u017c istniej\u0105cego kodu, kt\u00f3ry b\u0119dziemy utrzymywa\u0107 jeszcze przez lata, co najwy\u017cej modernizuj\u0105c go, na przyk\u0142ad dzi\u0119ki wirtualnym w\u0105tkom.<\/p>\n","innerContent":["\n<p>Od razu zaznacz\u0119 - wi\u0119kszo\u015b\u0107 z tego co w prezentacji si\u0119 pojawi\u0142o to nie jest jaka\u015b zupe\u0142nie nowa wiedza, chyba po raz pierwszy mamy jednak informacje od samego \u017ar\u00f3d\u0142a - Roman Elizarov to nie tylko obecny lead Kotlina, ale r\u00f3wnie\u017c architekt korutyn. Jego punkt widzenia jest nast\u0119puj\u0105cy - Project Loom i Kotlinowe Korutyny zajmuj\u0105 si\u0119 wyzwaniami programowania wsp\u00f3\u0142bie\u017cnego, ale celuj\u0105 w r\u00f3\u017cne aspekty, w zwi\u0105zku z tym maj\u0105 r\u00f3\u017cne implementacje. Project Loom skupia si\u0119 na rozwini\u0119ciu istniej\u0105cych API w\u0105tk\u00f3w i ma na celu umo\u017cliwienie aplikacjom serwerowym napisanym w stylu thread-per-request (gro javowego ekosystem) optymalne skalowanie. Wprowadza w\u0105tki wirtualne jako rozwini\u0119cie API dla w\u0105tk\u00f3w \"fizycznych\", umo\u017cliwiaj\u0105c zmian\u0119 w\u0105tk\u00f3w fizycznych na wirtualne przy minimalnych zmianach kodu. Jest to szczeg\u00f3lnie przydatne w przypadku ju\u017c istniej\u0105cego kodu, kt\u00f3ry b\u0119dziemy utrzymywa\u0107 jeszcze przez lata, co najwy\u017cej modernizuj\u0105c go, na przyk\u0142ad dzi\u0119ki wirtualnym w\u0105tkom.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kotlin Coroutines, dzia\u0142aj\u0105 zupe\u0142nie inaczej i na innej warstwie (na zasadzie generowania dodatkowego kodu). Dzi\u0119ki temu skupiaj\u0105 si\u0119 na dostarczeniu jak najwygodniejszego asynchronicznych API i granularnej wsp\u00f3\u0142bie\u017cno\u015bci - zar\u00f3wno aplikacji serwerowych, jak i ka\u017cdego innej cz\u0119\u015bci projektu, gdzie wykonanie fragmentu kodu w nowym w\u0105tku ma sens. Bior\u0105c pod uwag\u0119 istotno\u015b\u0107 Kotlina w \u015bwiecie Androida, r\u00f3wnie wa\u017cne jest np. dobre obs\u0142ugiwanie framework\u00f3w UI.  Zapewnia lekki spos\u00f3b zarz\u0105dzania ni\u0105 za pomoc\u0105 wsp\u00f3\u0142bie\u017cno\u015bci strukturalnej (Structured Concurrency), kt\u00f3ra pomaga utrzyma\u0107 hierarchi\u0119 rodzic-dziecko i rozwi\u0105zuje zaskakuj\u0105co trudny problem anulowania raz rozpocz\u0119tego asynchronicznego workflow. Java te\u017c posiada Structured Concurrency, ale Elizarov wskazuje jej ograniczenia - powsta\u0142a bowiem jako nowa funkcjonalno\u015b\u0107 do ju\u017c zastanego API wsp\u00f3\u0142bie\u017cno\u015bci, nie jako co\u015b dodanego ju\u017c na poziomie projektowania. <\/p>\n","innerContent":["\n<p>Kotlin Coroutines, dzia\u0142aj\u0105 zupe\u0142nie inaczej i na innej warstwie (na zasadzie generowania dodatkowego kodu). Dzi\u0119ki temu skupiaj\u0105 si\u0119 na dostarczeniu jak najwygodniejszego asynchronicznych API i granularnej wsp\u00f3\u0142bie\u017cno\u015bci - zar\u00f3wno aplikacji serwerowych, jak i ka\u017cdego innej cz\u0119\u015bci projektu, gdzie wykonanie fragmentu kodu w nowym w\u0105tku ma sens. Bior\u0105c pod uwag\u0119 istotno\u015b\u0107 Kotlina w \u015bwiecie Androida, r\u00f3wnie wa\u017cne jest np. dobre obs\u0142ugiwanie framework\u00f3w UI.  Zapewnia lekki spos\u00f3b zarz\u0105dzania ni\u0105 za pomoc\u0105 wsp\u00f3\u0142bie\u017cno\u015bci strukturalnej (Structured Concurrency), kt\u00f3ra pomaga utrzyma\u0107 hierarchi\u0119 rodzic-dziecko i rozwi\u0105zuje zaskakuj\u0105co trudny problem anulowania raz rozpocz\u0119tego asynchronicznego workflow. Java te\u017c posiada Structured Concurrency, ale Elizarov wskazuje jej ograniczenia - powsta\u0142a bowiem jako nowa funkcjonalno\u015b\u0107 do ju\u017c zastanego API wsp\u00f3\u0142bie\u017cno\u015bci, nie jako co\u015b dodanego ju\u017c na poziomie projektowania. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15772,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-20.png\" alt=\"\" class=\"wp-image-15772\"\/><figcaption class=\"wp-element-caption\">Z prezentacji klaruje si\u0119 mniej wi\u0119cej powy\u017cszy obraz<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-20.png\" alt=\"\" class=\"wp-image-15772\"\/><figcaption class=\"wp-element-caption\">Z prezentacji klaruje si\u0119 mniej wi\u0119cej powy\u017cszy obraz<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby jednak nie by\u0142o, \u017ce kortyny nic na powstaniu wirtualnych w\u0105tk\u00f3w nie skorzystaj\u0105 - jedn\u0105 z ich s\u0142abo\u015bci s\u0105 wyzwania zwi\u0105zane z \u0142\u0105czeniem \u015bwiata asynchronicznego z tym \"blokuj\u0105cym\", kt\u00f3ry nadal mo\u017ce tworzy\u0107 fizyczne w\u0105skie gard\u0142a, wymuszaj\u0105c u\u017cycie zasobo\u017cernych dyspozytor\u00f3w korutyn jak <code>Dispatcher.IO<\/code>, dzia\u0142aj\u0105cy na klasycznych, blokuj\u0105cych w\u0105tkach. Project Loom mo\u017ce pom\u00f3c unikn\u0105\u0107 blokowania i marnowania zasob\u00f3w fizycznych poprzez uruchomienie tego typu interfejs\u00f3w w ramach Virtual Threads, kt\u00f3re zosta\u0142y stworzone do ich obs\u0142ugi - z my\u015bl\u0105 o kompatybilno\u015bci ze starym kodem. W\u0105tki wirtualne Loom s\u0105 wi\u0119c bardziej wydajne pod wzgl\u0119dem zasob\u00f3w ni\u017c w\u0105tki \"fizyczne\" (jak mi to ci\u0119\u017cko przez gard\u0142o przechodzi), a jako \u017ce Korutyny z za\u0142o\u017cenia powsta\u0142y z my\u015bl\u0105 o u\u017cywania dowolnego silnika wsp\u00f3\u0142bie\u017cno\u015bci, b\u0119d\u0105 mog\u0142y wykorzysta\u0107 nowo\u015bci w ramach JVM.<\/p>\n","innerContent":["\n<p>\u017beby jednak nie by\u0142o, \u017ce kortyny nic na powstaniu wirtualnych w\u0105tk\u00f3w nie skorzystaj\u0105 - jedn\u0105 z ich s\u0142abo\u015bci s\u0105 wyzwania zwi\u0105zane z \u0142\u0105czeniem \u015bwiata asynchronicznego z tym \"blokuj\u0105cym\", kt\u00f3ry nadal mo\u017ce tworzy\u0107 fizyczne w\u0105skie gard\u0142a, wymuszaj\u0105c u\u017cycie zasobo\u017cernych dyspozytor\u00f3w korutyn jak <code>Dispatcher.IO<\/code>, dzia\u0142aj\u0105cy na klasycznych, blokuj\u0105cych w\u0105tkach. Project Loom mo\u017ce pom\u00f3c unikn\u0105\u0107 blokowania i marnowania zasob\u00f3w fizycznych poprzez uruchomienie tego typu interfejs\u00f3w w ramach Virtual Threads, kt\u00f3re zosta\u0142y stworzone do ich obs\u0142ugi - z my\u015bl\u0105 o kompatybilno\u015bci ze starym kodem. W\u0105tki wirtualne Loom s\u0105 wi\u0119c bardziej wydajne pod wzgl\u0119dem zasob\u00f3w ni\u017c w\u0105tki \"fizyczne\" (jak mi to ci\u0119\u017cko przez gard\u0142o przechodzi), a jako \u017ce Korutyny z za\u0142o\u017cenia powsta\u0142y z my\u015bl\u0105 o u\u017cywania dowolnego silnika wsp\u00f3\u0142bie\u017cno\u015bci, b\u0119d\u0105 mog\u0142y wykorzysta\u0107 nowo\u015bci w ramach JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, ca\u0142o\u015b\u0107 jest pewnie nieco zbiasowana - nie mieli\u015bmy bowiem do czynienia z panelem dyskusyjnym mi\u0119dzy Ronem Presslerem, a Romanem Elizarovem (panowie, zr\u00f3bcie co\u015b takiego, Avengers Endgame by si\u0119 chowa\u0142o jako crossover dekady), ale argumentacj\u0105 tw\u00f3rcy Korutyn na Kotlinowej konferencji. W dalszym ci\u0105gu jednak bardzo polecam polowa\u0107 na wideo, je\u015bli kiedy\u015b KotlinConf zdecyduje si\u0119 opublikowa\u0107 zapis prezentacji - na pewno dam zna\u0107 o takowym.<\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, ca\u0142o\u015b\u0107 jest pewnie nieco zbiasowana - nie mieli\u015bmy bowiem do czynienia z panelem dyskusyjnym mi\u0119dzy Ronem Presslerem, a Romanem Elizarovem (panowie, zr\u00f3bcie co\u015b takiego, Avengers Endgame by si\u0119 chowa\u0142o jako crossover dekady), ale argumentacj\u0105 tw\u00f3rcy Korutyn na Kotlinowej konferencji. W dalszym ci\u0105gu jednak bardzo polecam polowa\u0107 na wideo, je\u015bli kiedy\u015b KotlinConf zdecyduje si\u0119 opublikowa\u0107 zapis prezentacji - na pewno dam zna\u0107 o takowym.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=1qezCNVWpHc","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=1qezCNVWpHc\n<\/div><figcaption class=\"wp-element-caption\">A je\u015bli ju\u017c dzisiaj chcecie troch\u0119 dodatkowego kontekstu - polecam ten odcinek \"Talking Kotlin\"<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=1qezCNVWpHc\n<\/div><figcaption class=\"wp-element-caption\">A je\u015bli ju\u017c dzisiaj chcecie troch\u0119 dodatkowego kontekstu - polecam ten odcinek \"Talking Kotlin\"<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Masa ruchu w \u015bwiecie build system\u00f3w - Gradle i bld<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Masa ruchu w \u015bwiecie build system\u00f3w - Gradle i bld<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie koniec kontynuacji w\u0105tk\u00f3w z poprzedniej edycji. W zesz\u0142ym tygodniu m\u00f3wili\u015bmy o Gradle raczej z perspektywy nowo\u015bci dla Kotlina, ale dzi\u015b wracamy do 8.1. Wydanie to przynosi bowiem wiele ciekawych nowo\u015bci, o kt\u00f3rych nie mia\u0142em okazji wspomnie\u0107 tydzie\u0144 temu.<\/p>\n","innerContent":["\n<p>To jednak nie koniec kontynuacji w\u0105tk\u00f3w z poprzedniej edycji. W zesz\u0142ym tygodniu m\u00f3wili\u015bmy o Gradle raczej z perspektywy nowo\u015bci dla Kotlina, ale dzi\u015b wracamy do 8.1. Wydanie to przynosi bowiem wiele ciekawych nowo\u015bci, o kt\u00f3rych nie mia\u0142em okazji wspomnie\u0107 tydzie\u0144 temu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyk\u0142adowo, ustabilizowano funkcj\u0119 cache'owania fazy konfiguracji, co pozwala na buforowanie jej wyniku i ponowne wykorzystanie go w kolejnych buildach, skracaj\u0105c ich czas. Cache obs\u0142uguje teraz w pe\u0142ni weryfikacj\u0119 zale\u017cno\u015bci, repozytoria lokalne i posiada rozszerzon\u0105 kompatybilno\u015b\u0107 z podstawowymi wtyczkami. A jak ju\u017c jeste\u015bmy przy konfiguracji - Gradle doda\u0142 dodatkowo szyfrowanie jej pami\u0119ci podr\u0119cznej, aby chroni\u0107 wra\u017cliwe dane. <\/p>\n","innerContent":["\n<p>Przyk\u0142adowo, ustabilizowano funkcj\u0119 cache'owania fazy konfiguracji, co pozwala na buforowanie jej wyniku i ponowne wykorzystanie go w kolejnych buildach, skracaj\u0105c ich czas. Cache obs\u0142uguje teraz w pe\u0142ni weryfikacj\u0119 zale\u017cno\u015bci, repozytoria lokalne i posiada rozszerzon\u0105 kompatybilno\u015b\u0107 z podstawowymi wtyczkami. A jak ju\u017c jeste\u015bmy przy konfiguracji - Gradle doda\u0142 dodatkowo szyfrowanie jej pami\u0119ci podr\u0119cznej, aby chroni\u0107 wra\u017cliwe dane. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Plugin JVM obs\u0142uguje teraz budowanie projekt\u00f3w z Java 20, a wtyczka Codenarc - s\u0142u\u017c\u0105ca do analizy statycznej - zosta\u0142a zoptymalizowana pod k\u0105tem zr\u00f3wnoleglenia dzia\u0142ania. Je\u015bli chodzi o wzrosty wydajno\u015bci, sam Gradle dosta\u0142 lepsze zarz\u0105dzanie pami\u0119ci\u0105. Dodatkowo, wprowadzono nowe akcje Dataflow - alternatywnego mechanizmu do dobrze znanych task\u00f3w - kt\u00f3re zast\u0105pi\u0105 istniej\u0105cy listener buildFinished.<\/p>\n","innerContent":["\n<p>Plugin JVM obs\u0142uguje teraz budowanie projekt\u00f3w z Java 20, a wtyczka Codenarc - s\u0142u\u017c\u0105ca do analizy statycznej - zosta\u0142a zoptymalizowana pod k\u0105tem zr\u00f3wnoleglenia dzia\u0142ania. Je\u015bli chodzi o wzrosty wydajno\u015bci, sam Gradle dosta\u0142 lepsze zarz\u0105dzanie pami\u0119ci\u0105. Dodatkowo, wprowadzono nowe akcje Dataflow - alternatywnego mechanizmu do dobrze znanych task\u00f3w - kt\u00f3re zast\u0105pi\u0105 istniej\u0105cy listener buildFinished.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tydzie\u0144 temu pisali\u015bmy o tym, \u017ce Gradle dla Androida b\u0119dzie domy\u015blnie korzysta\u0107 z Kotlina. Okaza\u0142o si\u0119 jednak, \u017ce platforma posz\u0142a o krok dalej i postanowi\u0142a wprowadzi\u0107 <code>build.kts<\/code> jako domy\u015blny format na wszystkich platformach. Niejako w zwi\u0105zku z tym faktem Kotlin DSL doczeka\u0142 si\u0119 usprawnie\u0144 w kilku obszarach, w tym eksperymentalnego prostego przypisywania properties\u00f3w w skryptach Kotlin DSL oraz kilku ulepsze\u0144 je\u015bli chodzi o obs\u0142ug\u0119 plugin\u00f3w.<\/p>\n","innerContent":["\n<p>Tydzie\u0144 temu pisali\u015bmy o tym, \u017ce Gradle dla Androida b\u0119dzie domy\u015blnie korzysta\u0107 z Kotlina. Okaza\u0142o si\u0119 jednak, \u017ce platforma posz\u0142a o krok dalej i postanowi\u0142a wprowadzi\u0107 <code>build.kts<\/code> jako domy\u015blny format na wszystkich platformach. Niejako w zwi\u0105zku z tym faktem Kotlin DSL doczeka\u0142 si\u0119 usprawnie\u0144 w kilku obszarach, w tym eksperymentalnego prostego przypisywania properties\u00f3w w skryptach Kotlin DSL oraz kilku ulepsze\u0144 je\u015bli chodzi o obs\u0142ug\u0119 plugin\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co ciekawe, mimo tak wielu nowo\u015bci, to nie o Gradle m\u00f3wiono najwi\u0119cej, je\u015bli chodzi o buildsystemy JVM. Okazuje si\u0119 bowiem, \u017ce na rynku pojawi\u0142 si\u0119 nowy build system, kt\u00f3ry ma na siebie ca\u0142kiem interesuj\u0105cy pomys\u0142 - <code>bld<\/code> od RIFE2.<\/p>\n","innerContent":["\n<p>Co ciekawe, mimo tak wielu nowo\u015bci, to nie o Gradle m\u00f3wiono najwi\u0119cej, je\u015bli chodzi o buildsystemy JVM. Okazuje si\u0119 bowiem, \u017ce na rynku pojawi\u0142 si\u0119 nowy build system, kt\u00f3ry ma na siebie ca\u0142kiem interesuj\u0105cy pomys\u0142 - <code>bld<\/code> od RIFE2.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15782,"width":660,"height":359,"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\/2023\/04\/image-21.png\" alt=\"\" class=\"wp-image-15782\" width=\"660\" height=\"359\"\/><figcaption class=\"wp-element-caption\">\u017bycie bywa ci\u0119\u017ckie, Gradle<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-21.png\" alt=\"\" class=\"wp-image-15782\" width=\"660\" height=\"359\"\/><figcaption class=\"wp-element-caption\">\u017bycie bywa ci\u0119\u017ckie, Gradle<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaczniemy od tego czym jest RIFE2. Projekt mo\u017ce nie by\u0107 tak szeroko znany jak niekt\u00f3re inne frameworki internetowe Java, ale mimo IMHO okropnej nazwy jego tw\u00f3rcy staraj\u0105 si\u0119 przebi\u0107 do masowej \u015bwiadomo\u015bci, i chyba po raz pierwszy im si\u0119 to uda\u0142o. Tw\u00f3rcy frameworki RIFE2 <a href=\"https:\/\/foojay.io\/today\/introducing-bld-a-new-pure-java-build-system\/\">pokazali bowiem <code>bld<\/code><\/a>, w kt\u00f3rym postanowili podej\u015b\u0107 do tematu budowania aplikacji nieco inaczej od konkurencji. Zar\u00f3wno Gradle, jak i Maven, opieraj\u0105 si\u0119 na tworzeniu konfiguracji buildu w spos\u00f3b deklaratywny, czy to za pomoc\u0105 DSL (w Groovym lub Kotlinie), czy te\u017c XML. <code>bld<\/code> pozwala za\u015b programistom na pisanie logiki build\u00f3w w czystej Javie. System <code>bld<\/code> zosta\u0142 zaprojektowany z my\u015bl\u0105 o prostocie u\u017cycia, k\u0142ad\u0105c nacisk na bezpo\u015brednie definiowanie procesu, unikaj\u0105c element\u00f3w auto-magicznych, cz\u0119sto spotykanych w innych narz\u0119dziach do budowania, takich jak Gradle. Filozofia, kt\u00f3ra przy\u015bwieca narz\u0119dziu mocno kojarzy mi si\u0119 z przyj\u0119t\u0105 przez AWS w Cloud Development Kit.<\/p>\n","innerContent":["\n<p>Zaczniemy od tego czym jest RIFE2. Projekt mo\u017ce nie by\u0107 tak szeroko znany jak niekt\u00f3re inne frameworki internetowe Java, ale mimo IMHO okropnej nazwy jego tw\u00f3rcy staraj\u0105 si\u0119 przebi\u0107 do masowej \u015bwiadomo\u015bci, i chyba po raz pierwszy im si\u0119 to uda\u0142o. Tw\u00f3rcy frameworki RIFE2 <a href=\"https:\/\/foojay.io\/today\/introducing-bld-a-new-pure-java-build-system\/\">pokazali bowiem <code>bld<\/code><\/a>, w kt\u00f3rym postanowili podej\u015b\u0107 do tematu budowania aplikacji nieco inaczej od konkurencji. Zar\u00f3wno Gradle, jak i Maven, opieraj\u0105 si\u0119 na tworzeniu konfiguracji buildu w spos\u00f3b deklaratywny, czy to za pomoc\u0105 DSL (w Groovym lub Kotlinie), czy te\u017c XML. <code>bld<\/code> pozwala za\u015b programistom na pisanie logiki build\u00f3w w czystej Javie. System <code>bld<\/code> zosta\u0142 zaprojektowany z my\u015bl\u0105 o prostocie u\u017cycia, k\u0142ad\u0105c nacisk na bezpo\u015brednie definiowanie procesu, unikaj\u0105c element\u00f3w auto-magicznych, cz\u0119sto spotykanych w innych narz\u0119dziach do budowania, takich jak Gradle. Filozofia, kt\u00f3ra przy\u015bwieca narz\u0119dziu mocno kojarzy mi si\u0119 z przyj\u0119t\u0105 przez AWS w Cloud Development Kit.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W przeciwie\u0144stwie do Gradle, kt\u00f3re opisuje plan przed jego wykonaniem, <code>bld<\/code> natychmiast wykonuje zadania, gdy s\u0105 one zdefiniowane. Ta r\u00f3\u017cnica w podej\u015bciu zmniejsza obci\u0105\u017cenie poznawcze programist\u00f3w, u\u0142atwiaj\u0105c rozumowanie o procesach budowania. Ponadto, <code>bld<\/code> wymaga Jav\u0119 17, zapewniaj\u0105c jednocze\u015bnie autouzupe\u0142nianie i wsparcie Javadoc. Integracja z Jav\u0105 zapewnia, \u017ce logika budowania mo\u017ce by\u0107 zrozumiana i utrzymywana w tym samym ekosystemie co kod aplikacji.<\/p>\n","innerContent":["\n<p>W przeciwie\u0144stwie do Gradle, kt\u00f3re opisuje plan przed jego wykonaniem, <code>bld<\/code> natychmiast wykonuje zadania, gdy s\u0105 one zdefiniowane. Ta r\u00f3\u017cnica w podej\u015bciu zmniejsza obci\u0105\u017cenie poznawcze programist\u00f3w, u\u0142atwiaj\u0105c rozumowanie o procesach budowania. Ponadto, <code>bld<\/code> wymaga Jav\u0119 17, zapewniaj\u0105c jednocze\u015bnie autouzupe\u0142nianie i wsparcie Javadoc. Integracja z Jav\u0105 zapewnia, \u017ce logika budowania mo\u017ce by\u0107 zrozumiana i utrzymywana w tym samym ekosystemie co kod aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>M\u00f3j komentarz: Jestem rozdarty mi\u0119dzy \"build system powinien by\u0107 nudny i przewidywalny\" a faktem, \u017ce CDK posiada mas\u0119 fan\u00f3w i sta\u0142 si\u0119 de facto standardem w \u015bwiecie AWS, bazuj\u0105c na bardzo podobnej filozofii. Boj\u0119 si\u0119 te\u017c mocno przeciekaj\u0105cej abstrakcji i faktu, \u017ce bez wsparcia spo\u0142eczno\u015bci ci\u0119\u017cko b\u0119dzie taki ekosystem rozhula\u0107 - nie raz rozpisywa\u0142em si\u0119 o tym, \u017ce nawet konwersja Groovy SDK na Kotlin SDK bywa bolesna. Nie zmienia to faktu, \u017ce wrzuci\u0142em sobie <code>bld<\/code> na m\u00f3j radar i kiedy\u015b ch\u0119tnie go wypr\u00f3buje.<\/p>\n","innerContent":["\n<p>M\u00f3j komentarz: Jestem rozdarty mi\u0119dzy \"build system powinien by\u0107 nudny i przewidywalny\" a faktem, \u017ce CDK posiada mas\u0119 fan\u00f3w i sta\u0142 si\u0119 de facto standardem w \u015bwiecie AWS, bazuj\u0105c na bardzo podobnej filozofii. Boj\u0119 si\u0119 te\u017c mocno przeciekaj\u0105cej abstrakcji i faktu, \u017ce bez wsparcia spo\u0142eczno\u015bci ci\u0119\u017cko b\u0119dzie taki ekosystem rozhula\u0107 - nie raz rozpisywa\u0142em si\u0119 o tym, \u017ce nawet konwersja Groovy SDK na Kotlin SDK bywa bolesna. Nie zmienia to faktu, \u017ce wrzuci\u0142em sobie <code>bld<\/code> na m\u00f3j radar i kiedy\u015b ch\u0119tnie go wypr\u00f3buje.<\/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. Po co Javie silna enkapsulacja platformy?<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Po co Javie silna enkapsulacja platformy?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec JEP, bo jak tak mo\u017cna by bez JEP-a. Kandydackimi zajmiemy si\u0119 za tydzie\u0144 (a jest ich par\u0119), ale dzisiaj chcia\u0142em przybli\u017cy\u0107 nowy draft: <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>. Jest to tak zwany JEP informacyjny, czyli swoisty Design Doc, przedstawiaj\u0105cy pewne za\u0142o\u017cenia projektowe przy\u015bwiecaj\u0105ce tw\u00f3rcom. Warto si\u0119 z nim jednak zapozna\u0107, dotyka on bowiem bardzo ciekawego tematu: modularyzacji ca\u0142ej platformy, a tak\u017ce powi\u0105zanej z ni\u0105 enkapsulacji.<\/p>\n","innerContent":["\n<p>A na koniec JEP, bo jak tak mo\u017cna by bez JEP-a. Kandydackimi zajmiemy si\u0119 za tydzie\u0144 (a jest ich par\u0119), ale dzisiaj chcia\u0142em przybli\u017cy\u0107 nowy draft: <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>. Jest to tak zwany JEP informacyjny, czyli swoisty Design Doc, przedstawiaj\u0105cy pewne za\u0142o\u017cenia projektowe przy\u015bwiecaj\u0105ce tw\u00f3rcom. Warto si\u0119 z nim jednak zapozna\u0107, dotyka on bowiem bardzo ciekawego tematu: modularyzacji ca\u0142ej platformy, a tak\u017ce powi\u0105zanej z ni\u0105 enkapsulacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ka\u017cdy wie, \u017ce je\u015bli oznaczymy w javowej klasie pole jako <code>private<\/code>, to nikt spoza tej klasy nie b\u0119dzie mia\u0142 do niej dost\u0119pu Refleksja i inne mechanizmy mog\u0142y j\u0105 bowiem przez lata omin\u0105\u0107 to zachowanie, np. poprzez u\u017cycie metody <code>java.lang.reflect.AccessibleObject.setAccessible<\/code>. Powody \u0142amania enkapsulacji s\u0105 bardzo r\u00f3\u017cne, jak uzyskania dost\u0119pu do nieeksponowanej funkcjonalno\u015bci, obej\u015bcia b\u0142\u0119d\u00f3w (sam to robi\u0142em kiedy\u015b z testow\u0105 wersj\u0105 AWS SDK 2.0, gdy ta by\u0142a jeszcze w becie) lub poprawy wydajno\u015bci - tutaj sztandarowym przyk\u0142adem jest <code>sun.misc.Unsafe<\/code>, kt\u00f3ry przez lata by\u0142 podawany jako sztandarowy przyk\u0142ad \u0142amania zabezpiecze\u0144 w JVM. Z punktu widzenia tw\u00f3rc\u00f3w JDK sytuacja taka jest nie do pozazdroszczenia - bardzo trudno jest ewoluowa\u0107 platform\u0119 w momencie, gdy nie masz pewno\u015bci czy jaki\u015b refaktoring nie zepsuje jakiej\u015b popularnej biblioteki (<a href=\"https:\/\/www.hyrumslaw.com\/\">prawo Hyruma<\/a> si\u0119 k\u0142ania). Postanowiono wi\u0119c ten dziki zach\u00f3d nieco posprz\u0105ta\u0107 i poprawi\u0107 sytuacje.<\/p>\n","innerContent":["\n<p>Ka\u017cdy wie, \u017ce je\u015bli oznaczymy w javowej klasie pole jako <code>private<\/code>, to nikt spoza tej klasy nie b\u0119dzie mia\u0142 do niej dost\u0119pu Refleksja i inne mechanizmy mog\u0142y j\u0105 bowiem przez lata omin\u0105\u0107 to zachowanie, np. poprzez u\u017cycie metody <code>java.lang.reflect.AccessibleObject.setAccessible<\/code>. Powody \u0142amania enkapsulacji s\u0105 bardzo r\u00f3\u017cne, jak uzyskania dost\u0119pu do nieeksponowanej funkcjonalno\u015bci, obej\u015bcia b\u0142\u0119d\u00f3w (sam to robi\u0142em kiedy\u015b z testow\u0105 wersj\u0105 AWS SDK 2.0, gdy ta by\u0142a jeszcze w becie) lub poprawy wydajno\u015bci - tutaj sztandarowym przyk\u0142adem jest <code>sun.misc.Unsafe<\/code>, kt\u00f3ry przez lata by\u0142 podawany jako sztandarowy przyk\u0142ad \u0142amania zabezpiecze\u0144 w JVM. Z punktu widzenia tw\u00f3rc\u00f3w JDK sytuacja taka jest nie do pozazdroszczenia - bardzo trudno jest ewoluowa\u0107 platform\u0119 w momencie, gdy nie masz pewno\u015bci czy jaki\u015b refaktoring nie zepsuje jakiej\u015b popularnej biblioteki (<a href=\"https:\/\/www.hyrumslaw.com\/\">prawo Hyruma<\/a> si\u0119 k\u0142ania). Postanowiono wi\u0119c ten dziki zach\u00f3d nieco posprz\u0105ta\u0107 i poprawi\u0107 sytuacje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15787,"width":480,"height":480,"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\/2023\/04\/image-22.png\" alt=\"\" class=\"wp-image-15787\" width=\"480\" height=\"480\"\/><figcaption class=\"wp-element-caption\">Ale tak posprz\u0105ta\u0107-posprz\u0105ta\u0107.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-22.png\" alt=\"\" class=\"wp-image-15787\" width=\"480\" height=\"480\"\/><figcaption class=\"wp-element-caption\">Ale tak posprz\u0105ta\u0107-posprz\u0105ta\u0107.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Silna enkapsulacja jest kluczem do rozwi\u0105zania problem\u00f3w. Prace nad jej wprowadzeniem do Javy rozpocz\u0119\u0142y si\u0119 w latach 2010+, ale ich znaczenie staje si\u0119 coraz wyra\u017aniejsze z ka\u017cdym kolejnym rokiem. Java 9, wprowadzaj\u0105c modu\u0142y, wymusi\u0142a siln\u0105 enkapsulacj\u0119 w czasie kompilacji, ale ze wzgl\u0119du na kompatybilno\u015b\u0107 wsteczn\u0105 (i brak sensownej alternatywy dla niekt\u00f3rych interwa\u0142owych rozwi\u0105za\u0144) zezwoli\u0142a na g\u0142\u0119bok\u0105 refleksj\u0119 (wspomniane <code>setAccessible<\/code>) w czasie wykonywania aplikacji z ostrze\u017ceniami. Sytuacja jednak przez lata ewoulowa\u0142a, a oficjalne zamienniki dla wewn\u0119trznych klas JDK (jak <code>VarHandle<\/code>) zmniejszy\u0142y potrzeb\u0119 \u0142amania enkapsulacji, podczas gdy nowe API uczyni\u0142y starsze praktyki przestarza\u0142ymi. Wraz z JDK 16, u\u017cycie zacz\u0105\u0142 wymusza\u0107 siln\u0105 enkapsulacj\u0119 w czasie pr\u00f3by dostania si\u0119 do internali JDK (przynajmniej cz\u0119\u015bciowo, wspomniane wcze\u015bniej <code>sun.misc.Unsafe<\/code> pozosta\u0142o dost\u0119pne), zamieniaj\u0105c ostrze\u017cenia w b\u0142\u0119dy.<\/p>\n","innerContent":["\n<p>Silna enkapsulacja jest kluczem do rozwi\u0105zania problem\u00f3w. Prace nad jej wprowadzeniem do Javy rozpocz\u0119\u0142y si\u0119 w latach 2010+, ale ich znaczenie staje si\u0119 coraz wyra\u017aniejsze z ka\u017cdym kolejnym rokiem. Java 9, wprowadzaj\u0105c modu\u0142y, wymusi\u0142a siln\u0105 enkapsulacj\u0119 w czasie kompilacji, ale ze wzgl\u0119du na kompatybilno\u015b\u0107 wsteczn\u0105 (i brak sensownej alternatywy dla niekt\u00f3rych interwa\u0142owych rozwi\u0105za\u0144) zezwoli\u0142a na g\u0142\u0119bok\u0105 refleksj\u0119 (wspomniane <code>setAccessible<\/code>) w czasie wykonywania aplikacji z ostrze\u017ceniami. Sytuacja jednak przez lata ewoulowa\u0142a, a oficjalne zamienniki dla wewn\u0119trznych klas JDK (jak <code>VarHandle<\/code>) zmniejszy\u0142y potrzeb\u0119 \u0142amania enkapsulacji, podczas gdy nowe API uczyni\u0142y starsze praktyki przestarza\u0142ymi. Wraz z JDK 16, u\u017cycie zacz\u0105\u0142 wymusza\u0107 siln\u0105 enkapsulacj\u0119 w czasie pr\u00f3by dostania si\u0119 do internali JDK (przynajmniej cz\u0119\u015bciowo, wspomniane wcze\u015bniej <code>sun.misc.Unsafe<\/code> pozosta\u0142o dost\u0119pne), zamieniaj\u0105c ostrze\u017cenia w b\u0142\u0119dy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mimo wielu krok\u00f3w naprz\u00f3d, zak\u0142adany poziom integralno\u015b\u0107 w platformie Java nie zosta\u0142 jeszcze osi\u0105gni\u0119ty, w\u0142a\u015bnie z powodu braku powszechnej silnej enkapsulacji. Niekt\u00f3re API, takie jak <code>sun.misc.Unsafe<\/code> czy JNI, umo\u017cliwiaj\u0105 naruszenie enkapsulacji i integralno\u015bci systemu. W rezultacie analiza bezpiecze\u0144stwa aplikacji i jej zale\u017cno\u015bci staje si\u0119 trudna, a aktualizacja wersji JDK mo\u017ce by\u0107 problematyczna. Aby osi\u0105gn\u0105\u0107 integralno\u015b\u0107, planowane jest stopniowe ograniczenie tych API i zamkni\u0119cie luk w przysz\u0142ych JEPach, co wymaga\u0107 b\u0119dzie od bibliotek dostosowania si\u0119 do zmian. St\u0105d w\u0142a\u015bnie ten JEP - tw\u00f3rcy chc\u0105, \u017ceby ca\u0142e community zdawa\u0142o sobie spraw\u0119 z ich plan\u00f3w i mog\u0142o si\u0119 na nie przygotowa\u0107, a tak\u017ce dyskutowa\u0107 nad konsekwencjami.<\/p>\n","innerContent":["\n<p>Mimo wielu krok\u00f3w naprz\u00f3d, zak\u0142adany poziom integralno\u015b\u0107 w platformie Java nie zosta\u0142 jeszcze osi\u0105gni\u0119ty, w\u0142a\u015bnie z powodu braku powszechnej silnej enkapsulacji. Niekt\u00f3re API, takie jak <code>sun.misc.Unsafe<\/code> czy JNI, umo\u017cliwiaj\u0105 naruszenie enkapsulacji i integralno\u015bci systemu. W rezultacie analiza bezpiecze\u0144stwa aplikacji i jej zale\u017cno\u015bci staje si\u0119 trudna, a aktualizacja wersji JDK mo\u017ce by\u0107 problematyczna. Aby osi\u0105gn\u0105\u0107 integralno\u015b\u0107, planowane jest stopniowe ograniczenie tych API i zamkni\u0119cie luk w przysz\u0142ych JEPach, co wymaga\u0107 b\u0119dzie od bibliotek dostosowania si\u0119 do zmian. St\u0105d w\u0142a\u015bnie ten JEP - tw\u00f3rcy chc\u0105, \u017ceby ca\u0142e community zdawa\u0142o sobie spraw\u0119 z ich plan\u00f3w i mog\u0142o si\u0119 na nie przygotowa\u0107, a tak\u017ce dyskutowa\u0107 nad konsekwencjami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec warto si\u0119 zastanowi\u0107 - skoro tyle czasu sobie bez tej silnej enkapsulacji radzili\u015bmy, to dlaczego wzmo\u017cone zainteresowanie tym tematem? Okazuje si\u0119, \u017ce powodem jest to, \u017ce coraz wi\u0119ksza cz\u0119\u015b\u0107 \u015brodowiska uruchomieni owego Javy jest pisana w Javie, wi\u0119c sami jej tw\u00f3rcy maj\u0105 coraz wi\u0119ksz\u0105 potrzeb\u0119 silnej enkapsulacji. Utrzymanie JDK by\u0142o utrudnione przez przestarza\u0142e pakiety, a migracja mi\u0119dzy wersjami JDK stawa\u0142a si\u0119 problematyczna. Mimo supermocy, jak\u0105 brak integralno\u015bci oferowa\u0142 niekt\u00f3rym bibliotekom, sytuacja jest nie do utrzymania.<\/p>\n","innerContent":["\n<p>Na koniec warto si\u0119 zastanowi\u0107 - skoro tyle czasu sobie bez tej silnej enkapsulacji radzili\u015bmy, to dlaczego wzmo\u017cone zainteresowanie tym tematem? Okazuje si\u0119, \u017ce powodem jest to, \u017ce coraz wi\u0119ksza cz\u0119\u015b\u0107 \u015brodowiska uruchomieni owego Javy jest pisana w Javie, wi\u0119c sami jej tw\u00f3rcy maj\u0105 coraz wi\u0119ksz\u0105 potrzeb\u0119 silnej enkapsulacji. Utrzymanie JDK by\u0142o utrudnione przez przestarza\u0142e pakiety, a migracja mi\u0119dzy wersjami JDK stawa\u0142a si\u0119 problematyczna. Mimo supermocy, jak\u0105 brak integralno\u015bci oferowa\u0142 niekt\u00f3rym bibliotekom, sytuacja jest nie do utrzymania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15792,"width":512,"height":288,"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\/2023\/04\/image-24-1024x576.png\" alt=\"\" class=\"wp-image-15792\" width=\"512\" height=\"288\"\/><figcaption class=\"wp-element-caption\">Na miejscu tw\u00f3rc\u00f3w JDK nazwa\u0142bym ca\u0142\u0105 inicjatyw\u0119 \"Kryptonite Project\"<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-24-1024x576.png\" alt=\"\" class=\"wp-image-15792\" width=\"512\" height=\"288\"\/><figcaption class=\"wp-element-caption\">Na miejscu tw\u00f3rc\u00f3w JDK nazwa\u0142bym ca\u0142\u0105 inicjatyw\u0119 \"Kryptonite Project\"<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To by\u0142 taki m\u00f3j TLDR - Oczywi\u015bcie, jak to zawsze bywa w przypadku JEP-\u00f3w Rona Presslera, ca\u0142o\u015b\u0107 zawiera mas\u0119 dodatkowych szczeg\u00f3\u0142\u00f3w, kt\u00f3re w moim przykr\u00f3tkim opisie musia\u0142em pewnie nieco upro\u015bci\u0107. Dlatego te\u017c traktujcie ca\u0142o\u015b\u0107 jako zajawk\u0119, a po wszelkie dodatkowe detale odsy\u0142am do <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>.<\/p>\n","innerContent":["\n<p>To by\u0142 taki m\u00f3j TLDR - Oczywi\u015bcie, jak to zawsze bywa w przypadku JEP-\u00f3w Rona Presslera, ca\u0142o\u015b\u0107 zawiera mas\u0119 dodatkowych szczeg\u00f3\u0142\u00f3w, kt\u00f3re w moim przykr\u00f3tkim opisie musia\u0142em pewnie nieco upro\u015bci\u0107. Dlatego te\u017c traktujcie ca\u0142o\u015b\u0107 jako zajawk\u0119, a po wszelkie dodatkowe detale odsy\u0142am do <a href=\"https:\/\/openjdk.org\/jeps\/8305968\">JEP draft: Integrity and Strong Encapsulation<\/a>.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15756","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=15756"}],"version-history":[{"count":28,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15756\/revisions"}],"predecessor-version":[{"id":15823,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15756\/revisions\/15823"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15800"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}