{"id":10106,"date":"2021-07-27T12:30:00","date_gmt":"2021-07-27T10:30:00","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-48\/"},"modified":"2022-09-19T13:10:50","modified_gmt":"2022-09-19T11:10:50","slug":"jvm-tuesday-vol-48","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/","title":{"rendered":"JVM Tuesday vol. 48"},"content":{"rendered":"<h2 id=\"1-wydano-graalvm-21-2\" data-num=1>1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">Wydano GraalVM 21.2<\/a><\/h2>\n<p>Wiem, \u017ce ci\u0105g\u0142e czytanie nowo\u015bci z GraalVM to dla wi\u0119kszo\u015bci os\u00f3b lizanie cukierka przez papierek, ale tak naprawd\u0119 wi\u0119kszo\u015b\u0107 najbardziej intryguj\u0105cych aspekt\u00f3w JVM dzieje si\u0119 w\u0142a\u015bnie tam. Teraz wraz z premier\u0105 kolejnego \u201cdu\u017cego-ma\u0142ego\u201d wydania, tw\u00f3rcy po raz kolejny wprowadzaj\u0105 kilka interesuj\u0105cych nowo\u015bci, kt\u00f3re postaramy si\u0119 Wam przedstawi\u0107 w telegraficznym skr\u00f3cie.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\" alt=\"\" width=\"512\" height=\"338\" \/><figcaption>Ze wzgl\u0119du na skomplikowanie tematu nie zawsze jest to \u0142atwa sprawa, ale liczymy \u017ce docenicie nasze starania.<\/figcaption><\/figure>\n<p>Przy okazji nowego wydania Spring Native opublikowane zosta\u0142y pluginy dla natywnych obraz\u00f3w GraalVM, pozwalaj\u0105ce na uruchamianie test\u00f3w za pomoc\u0105 JUnita bez konieczno\u015bci wcze\u015bniejszego budowania wariantu aplikacji przeznaczonego na standardowy, JVMowy runtime. Zmiana ta pozwoli\u0142a na bardziej precyzyjne testy (natywny kod testowany by\u0142 w swojej natywnej (hehe) postaci), a tak\u017ce na przyspieszenie ca\u0142ego procesu. Nowe wydanie GraalVM stabilizuje ca\u0142o\u015b\u0107, wprowadzaj\u0105c liczne poprawki do tej funkcjonalno\u015bci.<\/p>\n<p>Z punktu widzenia bezpiecze\u0144stwa, bardzo ciekaw\u0105 zmian\u0105 jest r\u00f3wnie\u017c wprowadzenie automatycznego czyszczenia nieu\u017cywanych Security Services. Gwoli wyja\u015bnienia, standard \u200b\u200bJava Cryptography Architecture (stanowi\u0105cy cz\u0119\u015b\u0107 Java Security API) pozwala na dost\u0119p javowych aplikacji do takich szczeg\u00f3lnie chronionych us\u0142ug jak generator liczb losowych czy zasobnik certyfikat\u00f3w bezpiecze\u0144stwa &#8211; te \u201cchronione us\u0142ugi\u201d to w\u0142a\u015bnie Security Services. Podstawow\u0105 zasad\u0105 bezpiecze\u0144stwa jest minimalizowanie wektora potencjalnego ataku, a ze wzgl\u0119du na statyczn\u0105 kompilacje z g\u00f3ry znane s\u0105 wszystkie niezb\u0119dne do poprawnego dzia\u0142ania zasoby &#8211; co nie jest takie oczywiste w przypadku aplikacji z dynamicznym classpathem. GraalVM zosta\u0142 wi\u0119c wzbogacony o flag\u0119 kompilacji, kt\u00f3ra umo\u017cliwia zablokowanie dost\u0119pu do wszystkich nieu\u017cywanych zasob\u00f3w bezpiecze\u0144stwa.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d042ed51e3.png\" alt=\"\" \/><figcaption>GraalVM to tak\u017ce lepszy monitoring &#8211; natywnie kompilowane aplikacje maj\u0105 bowiem teraz mo\u017cliwo\u015b\u0107 bycia moniotorowanym przez coraz powszechniej u\u017cywany Java Flight Recorder.<\/figcaption><\/figure>\n<p>To oczywi\u015bcie nie wszystkie zmiany. Jak zwykle zwi\u0119kszona zosta\u0142a wydajno\u015b\u0107 ca\u0142ej platformy &#8211; moj\u0105 szczeg\u00f3ln\u0105 uwag\u0119 zwr\u00f3ci\u0142o eksperymentalne wsparcie dla nowoczesnych instrukcji SIMD (Single Instruction Multiple Data), a tak\u017ce predykcja zachowa\u0144 p\u0119tli &#8211; nowe heurystyki umo\u017cliwiaj\u0105 znacznie agresywniejsz\u0105 optymalizacje ich wdajno\u015bci. A jak ju\u017c mowa o heurystykach &#8211; interpreter Truffle otrzyma\u0142 inteligentniejsze kolejkowanie fragment\u00f3w kodu do przetworzenia, co wynikowo ma powodowa\u0107 szybszy start u\u017cywaj\u0105cych go aplikacji.<\/p>\n<p>Musicie przyzna\u0107, \u017ce jak na pierwszy rzut oka minorow\u0105 wersje (aczkolwiek numeracja <a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM jest akurat ciut kontrintuicyjna<\/a>), zmian jest naprawd\u0119 spora ilo\u015b\u0107. Ale og\u00f3lnie chyba wszyscy przywykli\u015bmy do faktu, \u017ce w niekt\u00f3rych aspektach \u015bwiat software zacz\u0105\u0142 si\u0119 bardzo szybko porusza\u0107.<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM Community Version Roadmap<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">GraalVM 21.2 with lots of native image usability improvement<\/a><\/li>\n<\/ul>\n<h2 id=\"2-kwarki-jvma-od-alekseya-shipileva\" data-num=2><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">2. Kwarki JVMa od Alekseya Shipil\u00ebva<\/a> \u269b\ufe0f<\/h2>\n<p>Kojarzycie, kim jest Aleksey Shipil\u00ebv (znany pod nickiem <a href=\"https:\/\/twitter.com\/shipilev\">@shipilev<\/a>)? Je\u015bli nie, to mo\u017ce kojarzycie jedn\u0105 z jego publikacji &#8211; <a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics<\/a> &#8211; kt\u00f3ra mimo wieku (powsta\u0142 w 2014 roku) pozostaje jednym z najwa\u017cniejszych JVMowych tekst\u00f3w. @shipilev znany mo\u017ce by\u0107 te\u017c jako projektant Garbage Collectora <a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah<\/a> &#8211; co nie jest jego jedynym wk\u0142adem do OpenJDK, gdy\u017c wcze\u015bniej pracowa\u0142 w Oracle, a dzi\u015b jest jednym z \u201copiekun\u00f3w\u201d tego projektu jako Principal Software Engineer w RedHat. Og\u00f3lnie, Aleksey to jedna z tych os\u00f3b, kt\u00f3r\u0105 w \u015bwiecie JVMa zdecydowanie warto \u015bledzi\u0107.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-3.gif\" alt=\"\" width=\"480\" height=\"270\" \/><figcaption>Bo bran\u017ca IT te\u017c ma influencer\u00f3w.<\/figcaption><\/figure>\n<p>Dlatego te\u017c z zaciekawieniem \u015bledzimy jego seri\u0119 JVM Anatomy Quarks. Zawiera ona bardzo specyficzn\u0105 hmmm\u2026 trivie je\u015bli chodzi o to, jak w swoich bebeszkach dzia\u0142a JVM. Za\u0142o\u017cenie serii jest takie, \u017ce ka\u017cdy post powinien zaj\u0105\u0107 oko\u0142o 5-10 minut i wg\u0142\u0119bia\u0107 si\u0119 w jeden temat, pojedynczy test, czy pojedyncz\u0105 obserwacj\u0119. Co prawda ca\u0142o\u015b\u0107 ukazuje si\u0119 ju\u017c drugi rok, ale zwykle jest to proces do\u015b\u0107 skokowy, a poprzedni tydzie\u0144 przyni\u00f3s\u0142 nam a\u017c pi\u0119\u0107 \u201codcink\u00f3w\u201d, z czego a\u017c trzy dotycz\u0105 \u201cbranch frequency data\u201d (w moim wolnym t\u0142umaczeniu &#8211; \u201cdanych cz\u0119stotliwo\u015bciowych ga\u0142\u0119zi\u201d) &#8211; czyli jednej z informacji u\u017cywanych przez kompilator Hotspot do optymalizacji kodu.<\/p>\n<p>Og\u00f3lnie w\u0142a\u015bnie optymalizacja jest g\u0142\u00f3wnym punktem zainteresowania @shipileva &#8211; i to raczej taka na poziomie, kt\u00f3rym wi\u0119kszo\u015bci programistom nigdy nie b\u0119dzie dane go dotkn\u0105\u0107. Dlaczego wi\u0119c polecam JVM Anatomy Quarks? W\u0142a\u015bnie jako wspomnian\u0105 trivie. Nie wiem jak Wy, ale osobi\u015bcie lubi\u0119 czasem rozumie\u0107, jak mechanizmy dzia\u0142aj\u0105 \u201cpod mask\u0105\u201d, i nawet je\u015bli poszczeg\u00f3lne \u201ckwarki\u201d do niczego mi si\u0119 nie przydadz\u0105, to lektura ca\u0142o\u015bci stanowi fascynuj\u0105cy wgl\u0105d w to, jak skomplikowan\u0105 maszyn\u0105 jest JVM. Dodatkowo, ca\u0142o\u015b\u0107 podana jest w formie ci\u0105gle aktualizowanego ebooka, dzi\u0119ki czemu osoby preferuj\u0105ce czytanie na Kindle\u2019u dostaj\u0105 ca\u0142o\u015b\u0107 w sk\u0142adnej formie &#8211; bo nie ok\u0142amujmy si\u0119, i tak ma\u0142o kto kod prezentowany we wspomnianych postach, uruchamia.<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics (transcript)<\/a><\/li>\n<li><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">JVM Anatomy Quarks shipilev.net<\/a><\/li>\n<li><a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah Design Docs<\/a><\/li>\n<\/ul>\n<h2 id=\"3-a-na-koniec-nowosci-w-kotlin-1-5-30\" data-num=3><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">3. A na koniec&#8230; nowo\u015bci w Kotlin 1.5.30 <\/a><\/h2>\n<p>Nowy cykl releasowy daje o sobie zna\u0107. \u00a0Dopiero co pisali\u015bmy o Kotlin 1.5.20, a teraz ju\u017c zaraz spodziewa\u0107 nale\u017cy si\u0119 wydania 1.5.30, kt\u00f3re przyznam wzi\u0119\u0142o mnie troch\u0119 z zaskoczenia. Okazuje si\u0119 bowiem, \u017ce jak na kolejnego minora pojawia si\u0119 w nim kilka do\u015b\u0107 interesuj\u0105cych nowo\u015bci.<\/p>\n<p>M1 nie jest ju\u017c gor\u0105c\u0105 nowo\u015bci\u0105 rozpalaj\u0105c\u0105 emocje (aczkolwiek dalej \u0142apki mnie \u015bwierzbi\u0105, \u017ceby po\u0142o\u017cy\u0107 je na laptopiku z tym procesorem), ale tempo jej adopcji przez r\u00f3\u017cnorakie platformy w dalszym stopniu nie przestaje mnie zadziwia\u0107. Kotlin do tej pory uruchamia\u0142 si\u0119 na niej za pomoc\u0105 \u015brodowiska translacyjnego Rosetta (zak\u0142adam, \u017ce grupa docelowa tego artyku\u0142u, je\u015bli u\u017cywa Maca, wie o czym mowa), ale wraz z wersj\u0105 1.5.30, Kotlin zyskuje pe\u0142ne natywne wsparcie dla tego wariantu architektur<br \/>\ny ARM.<\/p>\n<figure class=\"kg-card kg-image-card\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png\" sizes=\"auto, (min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png 759w\" alt=\"\" width=\"759\" height=\"500\" \/><\/figure>\n<p>To jednak nie wszystkie zmiany, aczkolwiek trzeba przyzna\u0107, \u017ce r\u00f3wnie\u017c reszta b\u0119dzie relatywnie nietypowa. Pozostaj\u0105c w rezerwacie applowskim &#8211; integracji z CocoaPods (managerem zale\u017cno\u015bci dla Swifta i Objective-C) doczeka\u0142 si\u0119 oficjalny plugin do budowania aplikacji Kotlin Multiplatform, co z pewno\u015bci\u0105 u\u0142atwi \u017cycie tej wci\u0105\u017c do\u015b\u0107 niszowej grupie tworz\u0105cej w j\u0119zyku JetBrains aplikacje na iOSa. Drobnych ulepsze\u0144 doczeka\u0142o si\u0119 te\u017c wsparcie dla Kotlin Native.<\/p>\n<p>To jednak nie wszystko. \u00a0Od d\u0142u\u017cszego czasu trwaj\u0105 prace nad now\u0105 reprezentacj\u0105 po\u015bredni\u0105 kodu dla Kotlin\/JS, i tak jak 1.5.20, tak i 1.5.30 to krok w kierunku jej implementacji. Nowa wersja przynosi bowiem wsparcie \u201csource map\u201d, kt\u00f3re dla wi\u0119kszo\u015bci programist\u00f3w frontendowych stanowi\u0105 kluczowe wsparcie przy \u201codpluskwianiu\u201d \u017ale dzia\u0142aj\u0105cych aplikacji. Dzi\u0119ki mapie \u017ar\u00f3de\u0142 mo\u017cliwe jest bowiem odniesienie si\u0119 z poziomu wynikowego, transpilowanego kodu JavaScriptowego do oryginalnych linijek napisanych przez programist\u0119.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png\" sizes=\"auto, (min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png 941w\" alt=\"\" width=\"941\" height=\"1280\" \/><figcaption>Zbyt dobrze znam powy\u017cszy problem z autopsji<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">Preview of Kotlin 1.5.30 With Native Apple Silicon Support, Improved Kotlin DSL for the CocoaPods Gradle Plugin, and More | The Kotlin Blog<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Witajcie! W dniu dzisiejszym mamy dla Was na g\u0142\u00f3wne danie dwa interesuj\u0105ce Release Notes, kt\u00f3re podlali\u015bmy sosikiem bardzo niskopoziomowych artyku\u0142\u00f3w po\u015bwi\u0119conych internalom JVM. Zapraszamy do lektury wszystkich odwa\u017cnych \ud83d\udc68\ud83c\udffb\u200d\ud83d\ude92.<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10106","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"5"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 48 - 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\/jvm-tuesday-vol-48\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 48 - Vived\" \/>\n<meta property=\"og:description\" content=\"Witajcie! W dniu dzisiejszym mamy dla Was na g\u0142\u00f3wne danie dwa interesuj\u0105ce Release Notes, kt\u00f3re podlali\u015bmy sosikiem bardzo niskopoziomowych artyku\u0142\u00f3w po\u015bwi\u0119conych internalom JVM. Zapraszamy do lektury wszystkich odwa\u017cnych \ud83d\udc68\ud83c\udffb\u200d\ud83d\ude92.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-27T10:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.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\/jvm-tuesday-vol-48\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 48\",\"datePublished\":\"2021-07-27T10:30:00+00:00\",\"dateModified\":\"2022-09-19T11:10:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\"},\"wordCount\":1169,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\",\"name\":\"JVM Tuesday vol. 48 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\",\"datePublished\":\"2021-07-27T10:30:00+00:00\",\"dateModified\":\"2022-09-19T11:10:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 48\"}]},{\"@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":"JVM Tuesday vol. 48 - 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\/jvm-tuesday-vol-48\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 48 - Vived","og_description":"Witajcie! W dniu dzisiejszym mamy dla Was na g\u0142\u00f3wne danie dwa interesuj\u0105ce Release Notes, kt\u00f3re podlali\u015bmy sosikiem bardzo niskopoziomowych artyku\u0142\u00f3w po\u015bwi\u0119conych internalom JVM. Zapraszamy do lektury wszystkich odwa\u017cnych \ud83d\udc68\ud83c\udffb\u200d\ud83d\ude92.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/","og_site_name":"Vived","article_published_time":"2021-07-27T10:30:00+00:00","article_modified_time":"2022-09-19T11:10:50+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 48","datePublished":"2021-07-27T10:30:00+00:00","dateModified":"2022-09-19T11:10:50+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/"},"wordCount":1169,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/","name":"JVM Tuesday vol. 48 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png","datePublished":"2021-07-27T10:30:00+00:00","dateModified":"2022-09-19T11:10:50+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-48\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 48"}]},{"@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":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-wydano-graalvm-212-%F0%9F%8F%86\">1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">Wydano GraalVM 21.2<\/a><\/h2>\nWiem, \u017ce ci\u0105g\u0142e czytanie nowo\u015bci z GraalVM to dla wi\u0119kszo\u015bci os\u00f3b lizanie cukierka przez papierek, ale tak naprawd\u0119 wi\u0119kszo\u015b\u0107 najbardziej intryguj\u0105cych aspekt\u00f3w JVM dzieje si\u0119 w\u0142a\u015bnie tam. Teraz wraz z premier\u0105 kolejnego \u201cdu\u017cego-ma\u0142ego\u201d wydania, tw\u00f3rcy po raz kolejny wprowadzaj\u0105 kilka interesuj\u0105cych nowo\u015bci, kt\u00f3re postaramy si\u0119 Wam przedstawi\u0107 w telegraficznym skr\u00f3cie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\" alt=\"\" width=\"512\" height=\"338\" \/>\n<figcaption>Ze wzgl\u0119du na skomplikowanie tematu nie zawsze jest to \u0142atwa sprawa, ale liczymy \u017ce docenicie nasze starania.<\/figcaption><\/figure>\nPrzy okazji nowego wydania Spring Native opublikowane zosta\u0142y pluginy dla natywnych obraz\u00f3w GraalVM, pozwalaj\u0105ce na uruchamianie test\u00f3w za pomoc\u0105 JUnita bez konieczno\u015bci wcze\u015bniejszego budowania wariantu aplikacji przeznaczonego na standardowy, JVMowy runtime. Zmiana ta pozwoli\u0142a na bardziej precyzyjne testy (natywny kod testowany by\u0142 w swojej natywnej (hehe) postaci), a tak\u017ce na przyspieszenie ca\u0142ego procesu. Nowe wydanie GraalVM stabilizuje ca\u0142o\u015b\u0107, wprowadzaj\u0105c liczne poprawki do tej funkcjonalno\u015bci.\n\nZ punktu widzenia bezpiecze\u0144stwa, bardzo ciekaw\u0105 zmian\u0105 jest r\u00f3wnie\u017c wprowadzenie automatycznego czyszczenia nieu\u017cywanych Security Services. Gwoli wyja\u015bnienia, standard \u200b\u200bJava Cryptography Architecture (stanowi\u0105cy cz\u0119\u015b\u0107 Java Security API) pozwala na dost\u0119p javowych aplikacji do takich szczeg\u00f3lnie chronionych us\u0142ug jak generator liczb losowych czy zasobnik certyfikat\u00f3w bezpiecze\u0144stwa - te \u201cchronione us\u0142ugi\u201d to w\u0142a\u015bnie Security Services. Podstawow\u0105 zasad\u0105 bezpiecze\u0144stwa jest minimalizowanie wektora potencjalnego ataku, a ze wzgl\u0119du na statyczn\u0105 kompilacje z g\u00f3ry znane s\u0105 wszystkie niezb\u0119dne do poprawnego dzia\u0142ania zasoby - co nie jest takie oczywiste w przypadku aplikacji z dynamicznym classpathem. GraalVM zosta\u0142 wi\u0119c wzbogacony o flag\u0119 kompilacji, kt\u00f3ra umo\u017cliwia zablokowanie dost\u0119pu do wszystkich nieu\u017cywanych zasob\u00f3w bezpiecze\u0144stwa.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d042ed51e3.png\" alt=\"\" \/>\n\n<figcaption>GraalVM to tak\u017ce lepszy monitoring - natywnie kompilowane aplikacje maj\u0105 bowiem teraz mo\u017cliwo\u015b\u0107 bycia moniotorowanym przez coraz powszechniej u\u017cywany Java Flight Recorder.<\/figcaption><\/figure>\nTo oczywi\u015bcie nie wszystkie zmiany. Jak zwykle zwi\u0119kszona zosta\u0142a wydajno\u015b\u0107 ca\u0142ej platformy - moj\u0105 szczeg\u00f3ln\u0105 uwag\u0119 zwr\u00f3ci\u0142o eksperymentalne wsparcie dla nowoczesnych instrukcji SIMD (Single Instruction Multiple Data), a tak\u017ce predykcja zachowa\u0144 p\u0119tli - nowe heurystyki umo\u017cliwiaj\u0105 znacznie agresywniejsz\u0105 optymalizacje ich wdajno\u015bci. A jak ju\u017c mowa o heurystykach - interpreter Truffle otrzyma\u0142 inteligentniejsze kolejkowanie fragment\u00f3w kodu do przetworzenia, co wynikowo ma powodowa\u0107 szybszy start u\u017cywaj\u0105cych go aplikacji.\n\nMusicie przyzna\u0107, \u017ce jak na pierwszy rzut oka minorow\u0105 wersje (aczkolwiek numeracja <a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM jest akurat ciut kontrintuicyjna<\/a>), zmian jest naprawd\u0119 spora ilo\u015b\u0107. Ale og\u00f3lnie chyba wszyscy przywykli\u015bmy do faktu, \u017ce w niekt\u00f3rych aspektach \u015bwiat software zacz\u0105\u0142 si\u0119 bardzo szybko porusza\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM Community Version Roadmap<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">GraalVM 21.2 with lots of native image usability improvement<\/a><\/li>\n<\/ul>\n<h2 id=\"2-kwarki-jvma-od-alekseya-shipil%C3%ABva-%E2%9A%9B%EF%B8%8F\"><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">2. Kwarki JVMa od Alekseya Shipil\u00ebva<\/a> \u269b\ufe0f<\/h2>\nKojarzycie, kim jest Aleksey Shipil\u00ebv (znany pod nickiem <a href=\"https:\/\/twitter.com\/shipilev\">@shipilev<\/a>)? Je\u015bli nie, to mo\u017ce kojarzycie jedn\u0105 z jego publikacji - <a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics<\/a> - kt\u00f3ra mimo wieku (powsta\u0142 w 2014 roku) pozostaje jednym z najwa\u017cniejszych JVMowych tekst\u00f3w. @shipilev znany mo\u017ce by\u0107 te\u017c jako projektant Garbage Collectora <a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah<\/a> - co nie jest jego jedynym wk\u0142adem do OpenJDK, gdy\u017c wcze\u015bniej pracowa\u0142 w Oracle, a dzi\u015b jest jednym z \u201copiekun\u00f3w\u201d tego projektu jako Principal Software Engineer w RedHat. Og\u00f3lnie, Aleksey to jedna z tych os\u00f3b, kt\u00f3r\u0105 w \u015bwiecie JVMa zdecydowanie warto \u015bledzi\u0107.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-3.gif\" alt=\"\" width=\"480\" height=\"270\" \/>\n\n<figcaption>Bo bran\u017ca IT te\u017c ma influencer\u00f3w.<\/figcaption><\/figure>\nDlatego te\u017c z zaciekawieniem \u015bledzimy jego seri\u0119 JVM Anatomy Quarks. Zawiera ona bardzo specyficzn\u0105 hmmm\u2026 trivie je\u015bli chodzi o to, jak w swoich bebeszkach dzia\u0142a JVM. Za\u0142o\u017cenie serii jest takie, \u017ce ka\u017cdy post powinien zaj\u0105\u0107 oko\u0142o 5-10 minut i wg\u0142\u0119bia\u0107 si\u0119 w jeden temat, pojedynczy test, czy pojedyncz\u0105 obserwacj\u0119. Co prawda ca\u0142o\u015b\u0107 ukazuje si\u0119 ju\u017c drugi rok, ale zwykle jest to proces do\u015b\u0107 skokowy, a poprzedni tydzie\u0144 przyni\u00f3s\u0142 nam a\u017c pi\u0119\u0107 \u201codcink\u00f3w\u201d, z czego a\u017c trzy dotycz\u0105 \u201cbranch frequency data\u201d (w moim wolnym t\u0142umaczeniu - \u201cdanych cz\u0119stotliwo\u015bciowych ga\u0142\u0119zi\u201d) - czyli jednej z informacji u\u017cywanych przez kompilator Hotspot do optymalizacji kodu.\n\nOg\u00f3lnie w\u0142a\u015bnie optymalizacja jest g\u0142\u00f3wnym punktem zainteresowania @shipileva - i to raczej taka na poziomie, kt\u00f3rym wi\u0119kszo\u015bci programistom nigdy nie b\u0119dzie dane go dotkn\u0105\u0107. Dlaczego wi\u0119c polecam JVM Anatomy Quarks? W\u0142a\u015bnie jako wspomnian\u0105 trivie. Nie wiem jak Wy, ale osobi\u015bcie lubi\u0119 czasem rozumie\u0107, jak mechanizmy dzia\u0142aj\u0105 \u201cpod mask\u0105\u201d, i nawet je\u015bli poszczeg\u00f3lne \u201ckwarki\u201d do niczego mi si\u0119 nie przydadz\u0105, to lektura ca\u0142o\u015bci stanowi fascynuj\u0105cy wgl\u0105d w to, jak skomplikowan\u0105 maszyn\u0105 jest JVM. Dodatkowo, ca\u0142o\u015b\u0107 podana jest w formie ci\u0105gle aktualizowanego ebooka, dzi\u0119ki czemu osoby preferuj\u0105ce czytanie na Kindle\u2019u dostaj\u0105 ca\u0142o\u015b\u0107 w sk\u0142adnej formie - bo nie ok\u0142amujmy si\u0119, i tak ma\u0142o kto kod prezentowany we wspomnianych postach, uruchamia.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics (transcript)<\/a><\/li>\n \t<li><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">JVM Anatomy Quarks shipilev.net<\/a><\/li>\n \t<li><a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah Design Docs<\/a><\/li>\n<\/ul>\n<h2 id=\"3-a-na-koniec-nowo%C5%9Bci-w-kotlin-1530-%F0%9F%A5%AB\"><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">3. A na koniec... nowo\u015bci w Kotlin 1.5.30 <\/a><\/h2>\nNowy cykl releasowy daje o sobie zna\u0107. \u00a0Dopiero co pisali\u015bmy o Kotlin 1.5.20, a teraz ju\u017c zaraz spodziewa\u0107 nale\u017cy si\u0119 wydania 1.5.30, kt\u00f3re przyznam wzi\u0119\u0142o mnie troch\u0119 z zaskoczenia. Okazuje si\u0119 bowiem, \u017ce jak na kolejnego minora pojawia si\u0119 w nim kilka do\u015b\u0107 interesuj\u0105cych nowo\u015bci.\n\nM1 nie jest ju\u017c gor\u0105c\u0105 nowo\u015bci\u0105 rozpalaj\u0105c\u0105 emocje (aczkolwiek dalej \u0142apki mnie \u015bwierzbi\u0105, \u017ceby po\u0142o\u017cy\u0107 je na laptopiku z tym procesorem), ale tempo jej adopcji przez r\u00f3\u017cnorakie platformy w dalszym stopniu nie przestaje mnie zadziwia\u0107. Kotlin do tej pory uruchamia\u0142 si\u0119 na niej za pomoc\u0105 \u015brodowiska translacyjnego Rosetta (zak\u0142adam, \u017ce grupa docelowa tego artyku\u0142u, je\u015bli u\u017cywa Maca, wie o czym mowa), ale wraz z wersj\u0105 1.5.30, Kotlin zyskuje pe\u0142ne natywne wsparcie dla tego wariantu architektur\ny ARM.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png 759w\" alt=\"\" width=\"759\" height=\"500\" \/><\/figure>\nTo jednak nie wszystkie zmiany, aczkolwiek trzeba przyzna\u0107, \u017ce r\u00f3wnie\u017c reszta b\u0119dzie relatywnie nietypowa. Pozostaj\u0105c w rezerwacie applowskim - integracji z CocoaPods (managerem zale\u017cno\u015bci dla Swifta i Objective-C) doczeka\u0142 si\u0119 oficjalny plugin do budowania aplikacji Kotlin Multiplatform, co z pewno\u015bci\u0105 u\u0142atwi \u017cycie tej wci\u0105\u017c do\u015b\u0107 niszowej grupie tworz\u0105cej w j\u0119zyku JetBrains aplikacje na iOSa. Drobnych ulepsze\u0144 doczeka\u0142o si\u0119 te\u017c wsparcie dla Kotlin Native.\n\nTo jednak nie wszystko. \u00a0Od d\u0142u\u017cszego czasu trwaj\u0105 prace nad now\u0105 reprezentacj\u0105 po\u015bredni\u0105 kodu dla Kotlin\/JS, i tak jak 1.5.20, tak i 1.5.30 to krok w kierunku jej implementacji. Nowa wersja przynosi bowiem wsparcie \u201csource map\u201d, kt\u00f3re dla wi\u0119kszo\u015bci programist\u00f3w frontendowych stanowi\u0105 kluczowe wsparcie przy \u201codpluskwianiu\u201d \u017ale dzia\u0142aj\u0105cych aplikacji. Dzi\u0119ki mapie \u017ar\u00f3de\u0142 mo\u017cliwe jest bowiem odniesienie si\u0119 z poziomu wynikowego, transpilowanego kodu JavaScriptowego do oryginalnych linijek napisanych przez programist\u0119.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png 941w\" alt=\"\" width=\"941\" height=\"1280\" \/>\n\n<figcaption>Zbyt dobrze znam powy\u017cszy problem z autopsji<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">Preview of Kotlin 1.5.30 With Native Apple Silicon Support, Improved Kotlin DSL for the CocoaPods Gradle Plugin, and More | The Kotlin Blog<\/a><\/li>\n<\/ul>","innerContent":["<h2 id=\"1-wydano-graalvm-212-%F0%9F%8F%86\">1. <a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">Wydano GraalVM 21.2<\/a><\/h2>\nWiem, \u017ce ci\u0105g\u0142e czytanie nowo\u015bci z GraalVM to dla wi\u0119kszo\u015bci os\u00f3b lizanie cukierka przez papierek, ale tak naprawd\u0119 wi\u0119kszo\u015b\u0107 najbardziej intryguj\u0105cych aspekt\u00f3w JVM dzieje si\u0119 w\u0142a\u015bnie tam. Teraz wraz z premier\u0105 kolejnego \u201cdu\u017cego-ma\u0142ego\u201d wydania, tw\u00f3rcy po raz kolejny wprowadzaj\u0105 kilka interesuj\u0105cych nowo\u015bci, kt\u00f3re postaramy si\u0119 Wam przedstawi\u0107 w telegraficznym skr\u00f3cie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-12.png\" alt=\"\" width=\"512\" height=\"338\" \/>\n<figcaption>Ze wzgl\u0119du na skomplikowanie tematu nie zawsze jest to \u0142atwa sprawa, ale liczymy \u017ce docenicie nasze starania.<\/figcaption><\/figure>\nPrzy okazji nowego wydania Spring Native opublikowane zosta\u0142y pluginy dla natywnych obraz\u00f3w GraalVM, pozwalaj\u0105ce na uruchamianie test\u00f3w za pomoc\u0105 JUnita bez konieczno\u015bci wcze\u015bniejszego budowania wariantu aplikacji przeznaczonego na standardowy, JVMowy runtime. Zmiana ta pozwoli\u0142a na bardziej precyzyjne testy (natywny kod testowany by\u0142 w swojej natywnej (hehe) postaci), a tak\u017ce na przyspieszenie ca\u0142ego procesu. Nowe wydanie GraalVM stabilizuje ca\u0142o\u015b\u0107, wprowadzaj\u0105c liczne poprawki do tej funkcjonalno\u015bci.\n\nZ punktu widzenia bezpiecze\u0144stwa, bardzo ciekaw\u0105 zmian\u0105 jest r\u00f3wnie\u017c wprowadzenie automatycznego czyszczenia nieu\u017cywanych Security Services. Gwoli wyja\u015bnienia, standard \u200b\u200bJava Cryptography Architecture (stanowi\u0105cy cz\u0119\u015b\u0107 Java Security API) pozwala na dost\u0119p javowych aplikacji do takich szczeg\u00f3lnie chronionych us\u0142ug jak generator liczb losowych czy zasobnik certyfikat\u00f3w bezpiecze\u0144stwa - te \u201cchronione us\u0142ugi\u201d to w\u0142a\u015bnie Security Services. Podstawow\u0105 zasad\u0105 bezpiecze\u0144stwa jest minimalizowanie wektora potencjalnego ataku, a ze wzgl\u0119du na statyczn\u0105 kompilacje z g\u00f3ry znane s\u0105 wszystkie niezb\u0119dne do poprawnego dzia\u0142ania zasoby - co nie jest takie oczywiste w przypadku aplikacji z dynamicznym classpathem. GraalVM zosta\u0142 wi\u0119c wzbogacony o flag\u0119 kompilacji, kt\u00f3ra umo\u017cliwia zablokowanie dost\u0119pu do wszystkich nieu\u017cywanych zasob\u00f3w bezpiecze\u0144stwa.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d042ed51e3.png\" alt=\"\" \/>\n\n<figcaption>GraalVM to tak\u017ce lepszy monitoring - natywnie kompilowane aplikacje maj\u0105 bowiem teraz mo\u017cliwo\u015b\u0107 bycia moniotorowanym przez coraz powszechniej u\u017cywany Java Flight Recorder.<\/figcaption><\/figure>\nTo oczywi\u015bcie nie wszystkie zmiany. Jak zwykle zwi\u0119kszona zosta\u0142a wydajno\u015b\u0107 ca\u0142ej platformy - moj\u0105 szczeg\u00f3ln\u0105 uwag\u0119 zwr\u00f3ci\u0142o eksperymentalne wsparcie dla nowoczesnych instrukcji SIMD (Single Instruction Multiple Data), a tak\u017ce predykcja zachowa\u0144 p\u0119tli - nowe heurystyki umo\u017cliwiaj\u0105 znacznie agresywniejsz\u0105 optymalizacje ich wdajno\u015bci. A jak ju\u017c mowa o heurystykach - interpreter Truffle otrzyma\u0142 inteligentniejsze kolejkowanie fragment\u00f3w kodu do przetworzenia, co wynikowo ma powodowa\u0107 szybszy start u\u017cywaj\u0105cych go aplikacji.\n\nMusicie przyzna\u0107, \u017ce jak na pierwszy rzut oka minorow\u0105 wersje (aczkolwiek numeracja <a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM jest akurat ciut kontrintuicyjna<\/a>), zmian jest naprawd\u0119 spora ilo\u015b\u0107. Ale og\u00f3lnie chyba wszyscy przywykli\u015bmy do faktu, \u017ce w niekt\u00f3rych aspektach \u015bwiat software zacz\u0105\u0142 si\u0119 bardzo szybko porusza\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/www.graalvm.org\/release-notes\/version-roadmap\/\">GraalVM Community Version Roadmap<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/graalvm-21-2-ee2cce3b57aa\">GraalVM 21.2 with lots of native image usability improvement<\/a><\/li>\n<\/ul>\n<h2 id=\"2-kwarki-jvma-od-alekseya-shipil%C3%ABva-%E2%9A%9B%EF%B8%8F\"><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">2. Kwarki JVMa od Alekseya Shipil\u00ebva<\/a> \u269b\ufe0f<\/h2>\nKojarzycie, kim jest Aleksey Shipil\u00ebv (znany pod nickiem <a href=\"https:\/\/twitter.com\/shipilev\">@shipilev<\/a>)? Je\u015bli nie, to mo\u017ce kojarzycie jedn\u0105 z jego publikacji - <a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics<\/a> - kt\u00f3ra mimo wieku (powsta\u0142 w 2014 roku) pozostaje jednym z najwa\u017cniejszych JVMowych tekst\u00f3w. @shipilev znany mo\u017ce by\u0107 te\u017c jako projektant Garbage Collectora <a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah<\/a> - co nie jest jego jedynym wk\u0142adem do OpenJDK, gdy\u017c wcze\u015bniej pracowa\u0142 w Oracle, a dzi\u015b jest jednym z \u201copiekun\u00f3w\u201d tego projektu jako Principal Software Engineer w RedHat. Og\u00f3lnie, Aleksey to jedna z tych os\u00f3b, kt\u00f3r\u0105 w \u015bwiecie JVMa zdecydowanie warto \u015bledzi\u0107.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-3.gif\" alt=\"\" width=\"480\" height=\"270\" \/>\n\n<figcaption>Bo bran\u017ca IT te\u017c ma influencer\u00f3w.<\/figcaption><\/figure>\nDlatego te\u017c z zaciekawieniem \u015bledzimy jego seri\u0119 JVM Anatomy Quarks. Zawiera ona bardzo specyficzn\u0105 hmmm\u2026 trivie je\u015bli chodzi o to, jak w swoich bebeszkach dzia\u0142a JVM. Za\u0142o\u017cenie serii jest takie, \u017ce ka\u017cdy post powinien zaj\u0105\u0107 oko\u0142o 5-10 minut i wg\u0142\u0119bia\u0107 si\u0119 w jeden temat, pojedynczy test, czy pojedyncz\u0105 obserwacj\u0119. Co prawda ca\u0142o\u015b\u0107 ukazuje si\u0119 ju\u017c drugi rok, ale zwykle jest to proces do\u015b\u0107 skokowy, a poprzedni tydzie\u0144 przyni\u00f3s\u0142 nam a\u017c pi\u0119\u0107 \u201codcink\u00f3w\u201d, z czego a\u017c trzy dotycz\u0105 \u201cbranch frequency data\u201d (w moim wolnym t\u0142umaczeniu - \u201cdanych cz\u0119stotliwo\u015bciowych ga\u0142\u0119zi\u201d) - czyli jednej z informacji u\u017cywanych przez kompilator Hotspot do optymalizacji kodu.\n\nOg\u00f3lnie w\u0142a\u015bnie optymalizacja jest g\u0142\u00f3wnym punktem zainteresowania @shipileva - i to raczej taka na poziomie, kt\u00f3rym wi\u0119kszo\u015bci programistom nigdy nie b\u0119dzie dane go dotkn\u0105\u0107. Dlaczego wi\u0119c polecam JVM Anatomy Quarks? W\u0142a\u015bnie jako wspomnian\u0105 trivie. Nie wiem jak Wy, ale osobi\u015bcie lubi\u0119 czasem rozumie\u0107, jak mechanizmy dzia\u0142aj\u0105 \u201cpod mask\u0105\u201d, i nawet je\u015bli poszczeg\u00f3lne \u201ckwarki\u201d do niczego mi si\u0119 nie przydadz\u0105, to lektura ca\u0142o\u015bci stanowi fascynuj\u0105cy wgl\u0105d w to, jak skomplikowan\u0105 maszyn\u0105 jest JVM. Dodatkowo, ca\u0142o\u015b\u0107 podana jest w formie ci\u0105gle aktualizowanego ebooka, dzi\u0119ki czemu osoby preferuj\u0105ce czytanie na Kindle\u2019u dostaj\u0105 ca\u0142o\u015b\u0107 w sk\u0142adnej formie - bo nie ok\u0142amujmy si\u0119, i tak ma\u0142o kto kod prezentowany we wspomnianych postach, uruchamia.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/shipilev.net\/blog\/2014\/jmm-pragmatics\/\">Java Memory Model Pragmatics (transcript)<\/a><\/li>\n \t<li><a href=\"https:\/\/shipilev.net\/jvm\/anatomy-quarks\/\">JVM Anatomy Quarks shipilev.net<\/a><\/li>\n \t<li><a href=\"https:\/\/wiki.openjdk.java.net\/display\/shenandoah\/Main\">Shenandoah Design Docs<\/a><\/li>\n<\/ul>\n<h2 id=\"3-a-na-koniec-nowo%C5%9Bci-w-kotlin-1530-%F0%9F%A5%AB\"><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">3. A na koniec... nowo\u015bci w Kotlin 1.5.30 <\/a><\/h2>\nNowy cykl releasowy daje o sobie zna\u0107. \u00a0Dopiero co pisali\u015bmy o Kotlin 1.5.20, a teraz ju\u017c zaraz spodziewa\u0107 nale\u017cy si\u0119 wydania 1.5.30, kt\u00f3re przyznam wzi\u0119\u0142o mnie troch\u0119 z zaskoczenia. Okazuje si\u0119 bowiem, \u017ce jak na kolejnego minora pojawia si\u0119 w nim kilka do\u015b\u0107 interesuj\u0105cych nowo\u015bci.\n\nM1 nie jest ju\u017c gor\u0105c\u0105 nowo\u015bci\u0105 rozpalaj\u0105c\u0105 emocje (aczkolwiek dalej \u0142apki mnie \u015bwierzbi\u0105, \u017ceby po\u0142o\u017cy\u0107 je na laptopiku z tym procesorem), ale tempo jej adopcji przez r\u00f3\u017cnorakie platformy w dalszym stopniu nie przestaje mnie zadziwia\u0107. Kotlin do tej pory uruchamia\u0142 si\u0119 na niej za pomoc\u0105 \u015brodowiska translacyjnego Rosetta (zak\u0142adam, \u017ce grupa docelowa tego artyku\u0142u, je\u015bli u\u017cywa Maca, wie o czym mowa), ale wraz z wersj\u0105 1.5.30, Kotlin zyskuje pe\u0142ne natywne wsparcie dla tego wariantu architektur\ny ARM.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-13.png 759w\" alt=\"\" width=\"759\" height=\"500\" \/><\/figure>\nTo jednak nie wszystkie zmiany, aczkolwiek trzeba przyzna\u0107, \u017ce r\u00f3wnie\u017c reszta b\u0119dzie relatywnie nietypowa. Pozostaj\u0105c w rezerwacie applowskim - integracji z CocoaPods (managerem zale\u017cno\u015bci dla Swifta i Objective-C) doczeka\u0142 si\u0119 oficjalny plugin do budowania aplikacji Kotlin Multiplatform, co z pewno\u015bci\u0105 u\u0142atwi \u017cycie tej wci\u0105\u017c do\u015b\u0107 niszowej grupie tworz\u0105cej w j\u0119zyku JetBrains aplikacje na iOSa. Drobnych ulepsze\u0144 doczeka\u0142o si\u0119 te\u017c wsparcie dla Kotlin Native.\n\nTo jednak nie wszystko. \u00a0Od d\u0142u\u017cszego czasu trwaj\u0105 prace nad now\u0105 reprezentacj\u0105 po\u015bredni\u0105 kodu dla Kotlin\/JS, i tak jak 1.5.20, tak i 1.5.30 to krok w kierunku jej implementacji. Nowa wersja przynosi bowiem wsparcie \u201csource map\u201d, kt\u00f3re dla wi\u0119kszo\u015bci programist\u00f3w frontendowych stanowi\u0105 kluczowe wsparcie przy \u201codpluskwianiu\u201d \u017ale dzia\u0142aj\u0105cych aplikacji. Dzi\u0119ki mapie \u017ar\u00f3de\u0142 mo\u017cliwe jest bowiem odniesienie si\u0119 z poziomu wynikowego, transpilowanego kodu JavaScriptowego do oryginalnych linijek napisanych przez programist\u0119.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-14.png 941w\" alt=\"\" width=\"941\" height=\"1280\" \/>\n\n<figcaption>Zbyt dobrze znam powy\u017cszy problem z autopsji<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-2\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/07\/kotlin-1-5-30-m1-released\/\">Preview of Kotlin 1.5.30 With Native Apple Silicon Support, Improved Kotlin DSL for the CocoaPods Gradle Plugin, and More | The Kotlin Blog<\/a><\/li>\n<\/ul>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10106","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=10106"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10106\/revisions"}],"predecessor-version":[{"id":10563,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10106\/revisions\/10563"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}