{"id":10046,"date":"2021-11-23T16:20:32","date_gmt":"2021-11-23T15:20:32","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/"},"modified":"2022-09-19T13:10:45","modified_gmt":"2022-09-19T11:10:45","slug":"jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/","title":{"rendered":"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6"},"content":{"rendered":"\n<h2 id=\"1-projekt-loom-wirtualne-watki-i-strukturalna-wspolbieznosc\" data-num=1>1. Projekt Loom: Wirtualne w\u0105tki i Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107 \ud83c\udf88<\/h2>\n\n\n\n<p>JEPy, zw\u0142aszcza te w preview rzadko kiedy s\u0105 g\u0142\u00f3wnymi daniami naszych przegl\u0105d\u00f3w, ale to nie jest byle jaki JEP. Ot\u00f3\u017c nareszcie, po latach iteracji i zmian koncepcji &#8211; nareszcie \u015bwiat\u0142o dzienne ujrza\u0142 preview Projektu Loom.<\/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\/2021\/11\/image-2.png\" alt=\"\" class=\"wp-image-3253\" width=\"750\" height=\"500\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png 750w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2-300x200.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption>Mia\u0142em okazj\u0119 \u015bledzi\u0107 temat od samego pocz\u0105tku, a jeszcze w 2018 roku sam mia\u0142em okazj\u0119 opowiada\u0107 o <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/to-be-continued-multithreading-with-project-loom-and-kotlins-coroutines\">Loomie na Meetupie<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<p>To w\u0142a\u015bnie efekty projektu Loom znajdziecie bowiem w JEPie o znamiennej nazwie: Wirtualne W\u0105tki.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Thread thread = Thread.ofVirtual().name(&quot;duke&quot;).unstarted(runnable);<\/code><\/pre>\n\n\n\n<p>Jak widzicie, w\u0105tki dosta\u0142y statyczny konstruktor, pozwalaj\u0105cy stworzy\u0107 jego wirtualn\u0105 wersj\u0119. Ci\u0119\u017cko tutaj w bardzo kr\u00f3tkim podsumowaniu przej\u015b\u0107 przez wszystkie niuanse dla tych, kt\u00f3rzy nigdy o Loomie nie s\u0142yszeli, ale w skr\u00f3cie w\u0105tki wirtualne (notabene &#8211; elegancka nazwa) to takie tworzone po stronie maszyny wirtualnej Javy, nie systemu operacyjnego. Sprawia to, \u017ce jako zas\u00f3b s\u0105 bardzo ma\u0142o zasobo\u017cerne, dzi\u0119ki czemu nie musimy bawi\u0107 si\u0119 w tworzenie Thread Pooli, tylko konstruowa\u0107 je ad hoc &#8211; przynajmniej marketingowo, temat jest znacznie bardziej zniuansowany, bo RAM na StackTraces te\u017c nie jest z gumy. Og\u00f3lnie celem jest mo\u017cliwo\u015b\u0107 ucieczki od narzutu powodowanego przez potrzeb\u0119 u\u017cywania skomplikowanych struktur programowania wsp\u00f3\u0142bie\u017cnego tylko dlatego, \u017ce nie jeste\u015bmy w stanie stworzy\u0107 nad nimi odpowiedniej abstrakcji. Czy tak si\u0119 rzeczywi\u015bcie stanie? Sam pr\u00f3buje sobie odpowiedzie\u0107 na to pytanie od paru lat &#8211; b\u0119d\u0119 obserwowa\u0107 z ostro\u017cnym entuzjazmem.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/64945304.jpg\" alt=\"rework is the best kind of work - Crazy Camel lol | Meme Generator\"\/><figcaption>Matuzalemowie JVMa, je\u015bli jeszcze \u017cyj\u0105, pami\u0119taj\u0105 pewnie koncept Zielonych W\u0105tk\u00f3w. Loom to nowe podej\u015bcie do tematu, bior\u0105ce pod uwag\u0119 wszystko co programistyczna spo\u0142eczno\u015b\u0107 nauczy\u0142a si\u0119 o Javy 1.0<\/figcaption><\/figure><\/div>\n\n\n<p>Tak jak wspomina\u0142em, przygl\u0105dam si\u0119 Loomowi od d\u0142u\u017cszego czasu, mia\u0142em okazj\u0119 obserwowa\u0107 najistotniejsze zmiany g\u0142\u00f3wnej koncepcji. My\u015bl\u0119, \u017ce punktem zwrotnym dla projektu by\u0142o podpatrzenie od Kotlina (kt\u00f3ry sam mia\u0142 swoje inspiracje) tak zwan\u0105. wsp\u00f3\u0142bie\u017cno\u015bci\u0105 strukturaln\u0105. Wtedy to oryginalny plan na Looma zosta\u0142 nieco zaorany, a sama koncepcja przesz\u0142a wiele zmian. Strukturalna konkurencja to og\u00f3lnie fascynuj\u0105cy koncept, kt\u00f3ry doczeka\u0142 si\u0119 zar\u00f3wno <a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">swojego w\u0142asnego JEPa<\/a>, jak i \u015bwietnych talk\u00f3w, z kt\u00f3rych chyba najlepsze pochodz\u0105 od Romana Elizarova, obecnego leada Kotlina. Znowu mocno w skr\u00f3cie &#8211; konkurencja strukturalna u\u0142atwia zarz\u0105dzanie cyklem \u017cycia poszczeg\u00f3lnych w\u0105tk\u00f3w, zw\u0142aszcza gdy te tworzone s\u0105 w hierarchii i np. wraz ze \u015bmierci\u0105 rodzica chcemy te\u017c ubi\u0107 wszystkie jego dzieci. My\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 konceptu najlepiej wy\u0142o\u017cy Wam w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">pan Elizarov<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-1024x442.png\" alt=\"\" class=\"wp-image-3251\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-1024x442.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-300x129.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-768x331.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1.png 1271w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>A jak kto\u015b lubi format pisemny, to to \u201cnowo\u017cytne\u201d podej\u015bcie do konkurencji strukturalnej narodzi\u0142o si\u0119 wraz z <a href=\"https:\/\/250bpm.com\/blog:71\/\">postem Martin S\u00fastrik<\/a>, kt\u00f3rego lektur\u0119 bardzo polecam. Elizarov nie raz si\u0119 do niego odnosi jako \u017ar\u00f3d\u0142a inspiracji.<\/figcaption><\/figure>\n\n\n\n<p>Kiedy Looma zobaczymy? Ci\u0119\u017cko wyczu\u0107, raczej nie spodziewa\u0142bym si\u0119 JDK 18 bior\u0105c pod uwag\u0119, \u017ce do czynienia mamy dopiero z wersj\u0105 preview. Powoli pojawiaj\u0105 si\u0119 za to informacje o kolejnych potwierdzonych featurach nast\u0119pnego wydania Javy &#8211; ale ten temat opracujemy sobie kiedy\u015b my\u015bl\u0119 zbiorczo.<\/p>\n\n\n\n<p>PS: Chcieliby\u015bcie poczyta\u0107 o tym, jak prezentuje si\u0119 Loom w prawie-\u017ce-ostatecznej wersji? Akurat w weekend odpali\u0142em sobie <a href=\"https:\/\/jdk.java.net\/loom\/\">testowe JDK<\/a> i je\u015bli do przysz\u0142ego tygodnia nie wydarzy si\u0119 nic bardzo \u201c\u0142ami\u0105cego\u201d, to planuje ca\u0142\u0105 edycje po\u015bwi\u0119ci\u0107 wy\u0142\u0105cznie na najciekawsze smaczki z tego projektu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">JEP draft: Structured Concurrency (Preview)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277131\">JEP draft: Virtual Threads (Preview)<\/a><\/li><li><a href=\"https:\/\/250bpm.com\/blog:71\/\">250bpm &#8211; Structured Concurrency<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">Roman Elizarov \u2014 Structured concurrency<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"2-premiera-kotlin-1-6\" data-num=2>2. Premiera Kotlin 1.6 \ud83c\udf45  <\/h2>\n\n\n\n<p>Co prawda poprzedni\u0105 edycj\u0119 w ca\u0142o\u015b\u0107 po\u015bwi\u0119cili\u015bmy Kotlinowi, ale od jego publikacji w mi\u0119dzyczasie zd\u0105\u017cy\u0142a si\u0119 <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html\">ukaza\u0107 wersja 1.6<\/a> j\u0119zyka. Nowe numerki kiedy\u015b kojarzy\u0142y si\u0119 nam z naprawd\u0119 du\u017cymi zmianami i zestawami nowo\u015bci, ale od pewnego czasu przesta\u0142y mie\u0107 mam wra\u017cenie, a\u017c takie znaczenie. Filozofia \u201cCi\u0105g\u0142ego Dostarczania\u201d przeciek\u0142a te\u017c do tw\u00f3rc\u00f3w j\u0119zyk\u00f3w, co powoduje, \u017ce jak z karabinu dostajemy nowe mo\u017cliwo\u015bci r\u00f3wnie\u017c w j\u0119zykach programowania. Poszczeg\u00f3lne wydanie maj\u0105 r\u00f3wnocze\u015bnie znacznie mniejszy zakres, ni\u017c kiedy\u015b bywa\u0142o. Jak wi\u0119c to wygl\u0105da w przypadku Kotlina?<\/p>\n\n\n\n<p>Tak naprawd\u0119 je\u017celi chodzi o sam j\u0119zyk, nowa edycja przynosi jeden, ale bardzo istotny dodatek: exhaustive when. W praktyce oznacza to, \u017ce je\u017celi tworzymy instancje zamkni\u0119tej klasy, to kompilator jest w stanie z\u0142apa\u0107 za nas pewne klasy b\u0142\u0119d\u00f3w. We\u017amy sobie przyk\u0142ad pochodz\u0105cy z dokumentacji samego Kotlina:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sealed class Contact {\n      data class PhoneCall(val number: String) : Contact()\n      data class TextMessage(val number: String) : Contact()\n      data class InstantMessage(val type: IMType, val user: String) : Contact()\n}<\/code><\/pre>\n\n\n\n<p>Od Kotlina 1.6, je\u017celi nie obs\u0142u\u017cymy w naszym whenie kt\u00f3rego\u015b z wariant\u00f3w, kod po prostu si\u0119 nie skompiluje. Dzi\u0119ki temu u\u017cywanie Kotlinowego wariantu switchy staje si\u0119 jeszcze bardziej pot\u0119\u017cnym wzorcem:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun sendAnnouncement(contact: Contact, announcement: Announcement) {\n     when (contact) {\n         is Contact.PhoneCall -&gt; schedulePhoneCall(contact.number, announcement)\n         is Contact.TextMessage -&gt; sendTextMessage(contact.number, announcement)\n     }\n}<\/code><\/pre>\n\n\n\n<p>Oczywi\u015bcie, na when si\u0119 nie ko\u0144czy. Kotlin to r\u00f3wnie\u017c zmiana sposobu dzia\u0142ania funkcji suspend, kt\u00f3ra (nareszcie!) sta\u0142a si\u0119 superinterfejsem, a tak\u017ce stabilizacja s\u0142owa kluczowego typeof. Sporo zmian znajd\u0105 te\u017c dla siebie u\u017cytkownicy Kotlin Native.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a883c5a083f.png\" alt=\"\"\/><figcaption>Je\u017celi chcecie zobaczy\u0107 szczeg\u00f3\u0142y, JetBrain opublikowa\u0142o dwa filmiki &#8211; jeden dotycz\u0105cy <a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">zmian w samym Kotlinie 1.6<\/a>, oraz drugi, pochylaj\u0105cy si\u0119 nad nowo\u015bciami <a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">w bibliotece standardowej<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<p>Premierze nowych wersji \u201cg\u0142\u00f3wnego\u201d Kotlina towarzysz\u0105 zwykle wydania kolejnych edycji korutyn, ale w tym wypadku raczej przyjdzie nam jeszcze chwil\u0119 poczeka\u0107. kotlinx-coroutines 1.6 doczeka\u0142 si\u0119 w poniedzia\u0142kowy wiecz\u00f3r swojego Release Candidate, aczkolwiek i tutaj nie spodziewajcie si\u0119 jakiej\u015b rewolucji. Zmian jest sporo, ale wi\u0119kszo\u015b\u0107 z nich dotyczy testowalno\u015bci korutyn &#8211; co z pewno\u015bci\u0105 ucieszy ka\u017cdego u\u017cywaj\u0105cego korutyn, ale dotknie g\u0142\u00f3wnie developer experience \ud83d\ude42<\/p>\n\n\n\n<p>W stosunku do tego, co pokazano tydzie\u0144 temu (K2, nowe narz\u0119dzia, zmiany w multiplatform) &#8211; niewiele. Odnosz\u0119 wra\u017cenie, \u017ce je\u017celi chodzi o Kotlina to najciekawsze rzeczy dziej\u0105 si\u0119 poza bibliotek\u0105 standardow\u0105. Aczkolwiek chyba taki ju\u017c los projekt\u00f3w, kt\u00f3re wesz\u0142y w tryb \u201cpoci\u0105gu releasowego\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/11\/kotlin-1-6-0-is-released\/\">Kotlin 1.6.0 Released | The Kotlin Blog<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">What&#8217;s new in Kotlin 1.6.0<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">Kotlin Standard Library Changes in 1.6<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"3-spring-boot-2-6-przynosi-podbicie-waznych-zaleznosci\" data-num=3>3. Spring Boot 2.6 przynosi podbicie wa\u017cnych zale\u017cno\u015bci <\/h2>\n\n\n\n<p>Rzadko si\u0119 zdarza, \u017ceby najmniej istotn\u0105 nowo\u015bci\u0105 javowego tygodnia by\u0142 nowy Spring Boot, ale to chyba najlepiej opisuje ostatnie, jak szalone by\u0142o ostatnie siedem dni.<\/p>\n\n\n\n<p>Lista zmian we frameworku wydaje si\u0119 by\u0107 na pierwszy rzut oka minimalna &#8211; wprowadzono min. wzbogacono endpoint healthcheckowy \/info o informacje o \u015brodowisku uruchomieniowym Javy czy wsparcie dla testowania aplikacji Spring MVC za pomoc\u0105 interfejsu WebTestClient. Ziew \ud83e\udd71. Oczywi\u015bcie, to nie jedyne zmiany w Spring Boot 2.6 &#8211; nowe wydanie broni si\u0119 ilo\u015bci\u0105 podbitych zale\u017cno\u015bci.<\/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\/2021\/11\/image-3.png\" alt=\"\" class=\"wp-image-3261\" width=\"371\" height=\"477\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-3.png 742w, https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-3-233x300.png 233w\" sizes=\"auto, (max-width: 371px) 100vw, 371px\" \/><figcaption>Tak troch\u0119 czu\u0142em rozkminiaj\u0105c zasadno\u015b\u0107 tego newsa<\/figcaption><\/figure><\/div>\n\n\n<p>Osoby posiadaj\u0105ce w swoich projektach kolejki powinny zainteresowa\u0107 si\u0119 nowymi wydaniami <a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring Kafka 2.8.0<\/a> oraz <a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a>, aczkolwiek nie spodziewajcie si\u0119 po nich rewolucji, aczkolwiek zawieraj\u0105 min. podbicie klienta Kafki do najnowszej wersji czy wsparcie dla nieuporz\u0105dkowanego commitowania wiadomo\u015bci. Ciekawe jest r\u00f3wnie\u017c wst\u0119pne wsparcie w AMQP dla RabbitMQ Streams, ale na co\u015b stabilnego przyjdzie mi jeszcze pewnie troch\u0119 poczeka\u0107. Znacznie ciekawsz\u0105 zmian\u0105 jest <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">\u200b\u200bSpring Security 5.6.0<\/a>, w kt\u00f3rym znajdziecie sporo usprawnie\u0144 zar\u00f3wno dla OAuth, jak i mechanizmu SAML, a tak\u017ce istotny nowy interfejs &#8211; <a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener<\/a>. Ostatni z du\u017cych upgrad\u00f3w to <a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1<\/a> &#8211; tutaj znowu g\u0142\u00f3wnym daniem jest upgrade Querydsl.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"362\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1.gif\" alt=\"\" class=\"wp-image-3264\"\/><figcaption>Oczywi\u015bcie, jak zawsze sugerujemy przegl\u0105da\u0107 pe\u0142ne Release Notes. Wiem \u017ce to uwielbiacie, ale wiele innych projekt\u00f3w dosta\u0142o mniejsze lub wi\u0119ksze usprawnienia.<\/figcaption><\/figure><\/div>\n\n\n<p>Jako ma\u0142y bonus dorzuc\u0119 bardzo interesuj\u0105cy projekt, o kt\u00f3rego istnieniu wcze\u015bniej nie wiedzia\u0142em &#8211; <a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a>. Dzi\u0119ki temu projektowi mo\u017cna \u015bledzi\u0107 terminy planowanych wyda\u0144 ka\u017cdego ze Springowych podprojekt\u00f3w.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring for Apache Kafka 2.8 is Now Available<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">What&#8217;s New in Spring Security 5.6<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener (spring-security-docs 6.0.0-SNAPSHOT API)<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1.0 goes GA<\/a><\/li><\/ul>\n\n\n\n<p><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tyle si\u0119 w tym tygodniu wydarzy\u0142o, \u017ce a\u017c ci\u0119\u017cko stwierdzi\u0107 co nale\u017cy uzna\u0107 za najwi\u0119ksz\u0105 premier\u0119. O ten tytu\u0142 mierzy\u0107 b\u0119d\u0105 si\u0119 bowiem Preview JEPy zwi\u0105zane z Projectem Loom, nowe du\u017ce wydanie Kotlina i kolejny Spring Boot. Je\u015bli jeste\u015bcie ciekawi, jak ka\u017cde z nich wypada &#8211; zapraszamy do lektury.<\/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-10046","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"6","weekly_summary":true,"feature_image_visible":false,"feature_image_blog":false,"push_notification_image":false},"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. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - 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-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - Vived\" \/>\n<meta property=\"og:description\" content=\"Tyle si\u0119 w tym tygodniu wydarzy\u0142o, \u017ce a\u017c ci\u0119\u017cko stwierdzi\u0107 co nale\u017cy uzna\u0107 za najwi\u0119ksz\u0105 premier\u0119. O ten tytu\u0142 mierzy\u0107 b\u0119d\u0105 si\u0119 bowiem Preview JEPy zwi\u0105zane z Projectem Loom, nowe du\u017ce wydanie Kotlina i kolejny Spring Boot. Je\u015bli jeste\u015bcie ciekawi, jak ka\u017cde z nich wypada - zapraszamy do lektury.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-23T15:20:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-23-at-16.19.02.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1777\" \/>\n\t<meta property=\"og:image:height\" content=\"928\" \/>\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\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6\",\"datePublished\":\"2021-11-23T15:20:32+00:00\",\"dateModified\":\"2022-09-19T11:10:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\"},\"wordCount\":1330,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\",\"name\":\"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png\",\"datePublished\":\"2021-11-23T15:20:32+00:00\",\"dateModified\":\"2022-09-19T11:10:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6\"}]},{\"@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. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - 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-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - Vived","og_description":"Tyle si\u0119 w tym tygodniu wydarzy\u0142o, \u017ce a\u017c ci\u0119\u017cko stwierdzi\u0107 co nale\u017cy uzna\u0107 za najwi\u0119ksz\u0105 premier\u0119. O ten tytu\u0142 mierzy\u0107 b\u0119d\u0105 si\u0119 bowiem Preview JEPy zwi\u0105zane z Projectem Loom, nowe du\u017ce wydanie Kotlina i kolejny Spring Boot. Je\u015bli jeste\u015bcie ciekawi, jak ka\u017cde z nich wypada - zapraszamy do lektury.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/","og_site_name":"Vived","article_published_time":"2021-11-23T15:20:32+00:00","article_modified_time":"2022-09-19T11:10:45+00:00","og_image":[{"width":1777,"height":928,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/Screenshot-2021-11-23-at-16.19.02.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\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6","datePublished":"2021-11-23T15:20:32+00:00","dateModified":"2022-09-19T11:10:45+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/"},"wordCount":1330,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/","name":"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png","datePublished":"2021-11-23T15:20:32+00:00","dateModified":"2022-09-19T11:10:45+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-65-project-loom-kotlin-1-6-oraz-spring-boot-2-6\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 65 \u2013 Project Loom, Kotlin 1.6 oraz Spring Boot 2.6"}]},{"@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>1. Projekt Loom: Wirtualne w\u0105tki i Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107 \ud83c\udf88<\/h2>\n","innerContent":["\n<h2>1. Projekt Loom: Wirtualne w\u0105tki i Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107 \ud83c\udf88<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JEPy, zw\u0142aszcza te w preview rzadko kiedy s\u0105 g\u0142\u00f3wnymi daniami naszych przegl\u0105d\u00f3w, ale to nie jest byle jaki JEP. Ot\u00f3\u017c nareszcie, po latach iteracji i zmian koncepcji - nareszcie \u015bwiat\u0142o dzienne ujrza\u0142 preview Projektu Loom.<\/p>\n","innerContent":["\n<p>JEPy, zw\u0142aszcza te w preview rzadko kiedy s\u0105 g\u0142\u00f3wnymi daniami naszych przegl\u0105d\u00f3w, ale to nie jest byle jaki JEP. Ot\u00f3\u017c nareszcie, po latach iteracji i zmian koncepcji - nareszcie \u015bwiat\u0142o dzienne ujrza\u0142 preview Projektu Loom.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3253,"width":750,"height":500,"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\/2021\/11\/image-2.png\" alt=\"\" class=\"wp-image-3253\" width=\"750\" height=\"500\"\/><figcaption>Mia\u0142em okazj\u0119 \u015bledzi\u0107 temat od samego pocz\u0105tku, a jeszcze w 2018 roku sam mia\u0142em okazj\u0119 opowiada\u0107 o <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/to-be-continued-multithreading-with-project-loom-and-kotlins-coroutines\">Loomie na Meetupie<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-2.png\" alt=\"\" class=\"wp-image-3253\" width=\"750\" height=\"500\"\/><figcaption>Mia\u0142em okazj\u0119 \u015bledzi\u0107 temat od samego pocz\u0105tku, a jeszcze w 2018 roku sam mia\u0142em okazj\u0119 opowiada\u0107 o <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/to-be-continued-multithreading-with-project-loom-and-kotlins-coroutines\">Loomie na Meetupie<\/a>.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To w\u0142a\u015bnie efekty projektu Loom znajdziecie bowiem w JEPie o znamiennej nazwie: Wirtualne W\u0105tki.<\/p>\n","innerContent":["\n<p>To w\u0142a\u015bnie efekty projektu Loom znajdziecie bowiem w JEPie o znamiennej nazwie: Wirtualne W\u0105tki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>Thread thread = Thread.ofVirtual().name(\"duke\").unstarted(runnable);<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>Thread thread = Thread.ofVirtual().name(\"duke\").unstarted(runnable);<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak widzicie, w\u0105tki dosta\u0142y statyczny konstruktor, pozwalaj\u0105cy stworzy\u0107 jego wirtualn\u0105 wersj\u0119. Ci\u0119\u017cko tutaj w bardzo kr\u00f3tkim podsumowaniu przej\u015b\u0107 przez wszystkie niuanse dla tych, kt\u00f3rzy nigdy o Loomie nie s\u0142yszeli, ale w skr\u00f3cie w\u0105tki wirtualne (notabene - elegancka nazwa) to takie tworzone po stronie maszyny wirtualnej Javy, nie systemu operacyjnego. Sprawia to, \u017ce jako zas\u00f3b s\u0105 bardzo ma\u0142o zasobo\u017cerne, dzi\u0119ki czemu nie musimy bawi\u0107 si\u0119 w tworzenie Thread Pooli, tylko konstruowa\u0107 je ad hoc - przynajmniej marketingowo, temat jest znacznie bardziej zniuansowany, bo RAM na StackTraces te\u017c nie jest z gumy. Og\u00f3lnie celem jest mo\u017cliwo\u015b\u0107 ucieczki od narzutu powodowanego przez potrzeb\u0119 u\u017cywania skomplikowanych struktur programowania wsp\u00f3\u0142bie\u017cnego tylko dlatego, \u017ce nie jeste\u015bmy w stanie stworzy\u0107 nad nimi odpowiedniej abstrakcji. Czy tak si\u0119 rzeczywi\u015bcie stanie? Sam pr\u00f3buje sobie odpowiedzie\u0107 na to pytanie od paru lat - b\u0119d\u0119 obserwowa\u0107 z ostro\u017cnym entuzjazmem.<\/p>\n","innerContent":["\n<p>Jak widzicie, w\u0105tki dosta\u0142y statyczny konstruktor, pozwalaj\u0105cy stworzy\u0107 jego wirtualn\u0105 wersj\u0119. Ci\u0119\u017cko tutaj w bardzo kr\u00f3tkim podsumowaniu przej\u015b\u0107 przez wszystkie niuanse dla tych, kt\u00f3rzy nigdy o Loomie nie s\u0142yszeli, ale w skr\u00f3cie w\u0105tki wirtualne (notabene - elegancka nazwa) to takie tworzone po stronie maszyny wirtualnej Javy, nie systemu operacyjnego. Sprawia to, \u017ce jako zas\u00f3b s\u0105 bardzo ma\u0142o zasobo\u017cerne, dzi\u0119ki czemu nie musimy bawi\u0107 si\u0119 w tworzenie Thread Pooli, tylko konstruowa\u0107 je ad hoc - przynajmniej marketingowo, temat jest znacznie bardziej zniuansowany, bo RAM na StackTraces te\u017c nie jest z gumy. Og\u00f3lnie celem jest mo\u017cliwo\u015b\u0107 ucieczki od narzutu powodowanego przez potrzeb\u0119 u\u017cywania skomplikowanych struktur programowania wsp\u00f3\u0142bie\u017cnego tylko dlatego, \u017ce nie jeste\u015bmy w stanie stworzy\u0107 nad nimi odpowiedniej abstrakcji. Czy tak si\u0119 rzeczywi\u015bcie stanie? Sam pr\u00f3buje sobie odpowiedzie\u0107 na to pytanie od paru lat - b\u0119d\u0119 obserwowa\u0107 z ostro\u017cnym entuzjazmem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/64945304.jpg\" alt=\"rework is the best kind of work - Crazy Camel lol | Meme Generator\"\/><figcaption>Matuzalemowie JVMa, je\u015bli jeszcze \u017cyj\u0105, pami\u0119taj\u0105 pewnie koncept Zielonych W\u0105tk\u00f3w. Loom to nowe podej\u015bcie do tematu, bior\u0105ce pod uwag\u0119 wszystko co programistyczna spo\u0142eczno\u015b\u0107 nauczy\u0142a si\u0119 o Javy 1.0<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/64945304.jpg\" alt=\"rework is the best kind of work - Crazy Camel lol | Meme Generator\"\/><figcaption>Matuzalemowie JVMa, je\u015bli jeszcze \u017cyj\u0105, pami\u0119taj\u0105 pewnie koncept Zielonych W\u0105tk\u00f3w. Loom to nowe podej\u015bcie do tematu, bior\u0105ce pod uwag\u0119 wszystko co programistyczna spo\u0142eczno\u015b\u0107 nauczy\u0142a si\u0119 o Javy 1.0<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak jak wspomina\u0142em, przygl\u0105dam si\u0119 Loomowi od d\u0142u\u017cszego czasu, mia\u0142em okazj\u0119 obserwowa\u0107 najistotniejsze zmiany g\u0142\u00f3wnej koncepcji. My\u015bl\u0119, \u017ce punktem zwrotnym dla projektu by\u0142o podpatrzenie od Kotlina (kt\u00f3ry sam mia\u0142 swoje inspiracje) tak zwan\u0105. wsp\u00f3\u0142bie\u017cno\u015bci\u0105 strukturaln\u0105. Wtedy to oryginalny plan na Looma zosta\u0142 nieco zaorany, a sama koncepcja przesz\u0142a wiele zmian. Strukturalna konkurencja to og\u00f3lnie fascynuj\u0105cy koncept, kt\u00f3ry doczeka\u0142 si\u0119 zar\u00f3wno <a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">swojego w\u0142asnego JEPa<\/a>, jak i \u015bwietnych talk\u00f3w, z kt\u00f3rych chyba najlepsze pochodz\u0105 od Romana Elizarova, obecnego leada Kotlina. Znowu mocno w skr\u00f3cie - konkurencja strukturalna u\u0142atwia zarz\u0105dzanie cyklem \u017cycia poszczeg\u00f3lnych w\u0105tk\u00f3w, zw\u0142aszcza gdy te tworzone s\u0105 w hierarchii i np. wraz ze \u015bmierci\u0105 rodzica chcemy te\u017c ubi\u0107 wszystkie jego dzieci. My\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 konceptu najlepiej wy\u0142o\u017cy Wam w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">pan Elizarov<\/a>.<\/p>\n","innerContent":["\n<p>Tak jak wspomina\u0142em, przygl\u0105dam si\u0119 Loomowi od d\u0142u\u017cszego czasu, mia\u0142em okazj\u0119 obserwowa\u0107 najistotniejsze zmiany g\u0142\u00f3wnej koncepcji. My\u015bl\u0119, \u017ce punktem zwrotnym dla projektu by\u0142o podpatrzenie od Kotlina (kt\u00f3ry sam mia\u0142 swoje inspiracje) tak zwan\u0105. wsp\u00f3\u0142bie\u017cno\u015bci\u0105 strukturaln\u0105. Wtedy to oryginalny plan na Looma zosta\u0142 nieco zaorany, a sama koncepcja przesz\u0142a wiele zmian. Strukturalna konkurencja to og\u00f3lnie fascynuj\u0105cy koncept, kt\u00f3ry doczeka\u0142 si\u0119 zar\u00f3wno <a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">swojego w\u0142asnego JEPa<\/a>, jak i \u015bwietnych talk\u00f3w, z kt\u00f3rych chyba najlepsze pochodz\u0105 od Romana Elizarova, obecnego leada Kotlina. Znowu mocno w skr\u00f3cie - konkurencja strukturalna u\u0142atwia zarz\u0105dzanie cyklem \u017cycia poszczeg\u00f3lnych w\u0105tk\u00f3w, zw\u0142aszcza gdy te tworzone s\u0105 w hierarchii i np. wraz ze \u015bmierci\u0105 rodzica chcemy te\u017c ubi\u0107 wszystkie jego dzieci. My\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 konceptu najlepiej wy\u0142o\u017cy Wam w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">pan Elizarov<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":3251,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-1024x442.png\" alt=\"\" class=\"wp-image-3251\"\/><figcaption>A jak kto\u015b lubi format pisemny, to to \u201cnowo\u017cytne\u201d podej\u015bcie do konkurencji strukturalnej narodzi\u0142o si\u0119 wraz z <a href=\"https:\/\/250bpm.com\/blog:71\/\">postem Martin S\u00fastrik<\/a>, kt\u00f3rego lektur\u0119 bardzo polecam. Elizarov nie raz si\u0119 do niego odnosi jako \u017ar\u00f3d\u0142a inspiracji.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-1-1024x442.png\" alt=\"\" class=\"wp-image-3251\"\/><figcaption>A jak kto\u015b lubi format pisemny, to to \u201cnowo\u017cytne\u201d podej\u015bcie do konkurencji strukturalnej narodzi\u0142o si\u0119 wraz z <a href=\"https:\/\/250bpm.com\/blog:71\/\">postem Martin S\u00fastrik<\/a>, kt\u00f3rego lektur\u0119 bardzo polecam. Elizarov nie raz si\u0119 do niego odnosi jako \u017ar\u00f3d\u0142a inspiracji.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kiedy Looma zobaczymy? Ci\u0119\u017cko wyczu\u0107, raczej nie spodziewa\u0142bym si\u0119 JDK 18 bior\u0105c pod uwag\u0119, \u017ce do czynienia mamy dopiero z wersj\u0105 preview. Powoli pojawiaj\u0105 si\u0119 za to informacje o kolejnych potwierdzonych featurach nast\u0119pnego wydania Javy - ale ten temat opracujemy sobie kiedy\u015b my\u015bl\u0119 zbiorczo.<\/p>\n","innerContent":["\n<p>Kiedy Looma zobaczymy? Ci\u0119\u017cko wyczu\u0107, raczej nie spodziewa\u0142bym si\u0119 JDK 18 bior\u0105c pod uwag\u0119, \u017ce do czynienia mamy dopiero z wersj\u0105 preview. Powoli pojawiaj\u0105 si\u0119 za to informacje o kolejnych potwierdzonych featurach nast\u0119pnego wydania Javy - ale ten temat opracujemy sobie kiedy\u015b my\u015bl\u0119 zbiorczo.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: Chcieliby\u015bcie poczyta\u0107 o tym, jak prezentuje si\u0119 Loom w prawie-\u017ce-ostatecznej wersji? Akurat w weekend odpali\u0142em sobie <a href=\"https:\/\/jdk.java.net\/loom\/\">testowe JDK<\/a> i je\u015bli do przysz\u0142ego tygodnia nie wydarzy si\u0119 nic bardzo \u201c\u0142ami\u0105cego\u201d, to planuje ca\u0142\u0105 edycje po\u015bwi\u0119ci\u0107 wy\u0142\u0105cznie na najciekawsze smaczki z tego projektu.<\/p>\n","innerContent":["\n<p>PS: Chcieliby\u015bcie poczyta\u0107 o tym, jak prezentuje si\u0119 Loom w prawie-\u017ce-ostatecznej wersji? Akurat w weekend odpali\u0142em sobie <a href=\"https:\/\/jdk.java.net\/loom\/\">testowe JDK<\/a> i je\u015bli do przysz\u0142ego tygodnia nie wydarzy si\u0119 nic bardzo \u201c\u0142ami\u0105cego\u201d, to planuje ca\u0142\u0105 edycje po\u015bwi\u0119ci\u0107 wy\u0142\u0105cznie na najciekawsze smaczki z tego projektu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">JEP draft: Structured Concurrency (Preview)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277131\">JEP draft: Virtual Threads (Preview)<\/a><\/li><li><a href=\"https:\/\/250bpm.com\/blog:71\/\">250bpm - Structured Concurrency<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">Roman Elizarov \u2014 Structured concurrency<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277129\">JEP draft: Structured Concurrency (Preview)<\/a><\/li><li><a href=\"https:\/\/openjdk.java.net\/jeps\/8277131\">JEP draft: Virtual Threads (Preview)<\/a><\/li><li><a href=\"https:\/\/250bpm.com\/blog:71\/\">250bpm - Structured Concurrency<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">Roman Elizarov \u2014 Structured concurrency<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Premiera Kotlin 1.6 \ud83c\udf45  <\/h2>\n","innerContent":["\n<h2>2. Premiera Kotlin 1.6 \ud83c\udf45  <\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co prawda poprzedni\u0105 edycj\u0119 w ca\u0142o\u015b\u0107 po\u015bwi\u0119cili\u015bmy Kotlinowi, ale od jego publikacji w mi\u0119dzyczasie zd\u0105\u017cy\u0142a si\u0119 <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html\">ukaza\u0107 wersja 1.6<\/a> j\u0119zyka. Nowe numerki kiedy\u015b kojarzy\u0142y si\u0119 nam z naprawd\u0119 du\u017cymi zmianami i zestawami nowo\u015bci, ale od pewnego czasu przesta\u0142y mie\u0107 mam wra\u017cenie, a\u017c takie znaczenie. Filozofia \u201cCi\u0105g\u0142ego Dostarczania\u201d przeciek\u0142a te\u017c do tw\u00f3rc\u00f3w j\u0119zyk\u00f3w, co powoduje, \u017ce jak z karabinu dostajemy nowe mo\u017cliwo\u015bci r\u00f3wnie\u017c w j\u0119zykach programowania. Poszczeg\u00f3lne wydanie maj\u0105 r\u00f3wnocze\u015bnie znacznie mniejszy zakres, ni\u017c kiedy\u015b bywa\u0142o. Jak wi\u0119c to wygl\u0105da w przypadku Kotlina?<\/p>\n","innerContent":["\n<p>Co prawda poprzedni\u0105 edycj\u0119 w ca\u0142o\u015b\u0107 po\u015bwi\u0119cili\u015bmy Kotlinowi, ale od jego publikacji w mi\u0119dzyczasie zd\u0105\u017cy\u0142a si\u0119 <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html\">ukaza\u0107 wersja 1.6<\/a> j\u0119zyka. Nowe numerki kiedy\u015b kojarzy\u0142y si\u0119 nam z naprawd\u0119 du\u017cymi zmianami i zestawami nowo\u015bci, ale od pewnego czasu przesta\u0142y mie\u0107 mam wra\u017cenie, a\u017c takie znaczenie. Filozofia \u201cCi\u0105g\u0142ego Dostarczania\u201d przeciek\u0142a te\u017c do tw\u00f3rc\u00f3w j\u0119zyk\u00f3w, co powoduje, \u017ce jak z karabinu dostajemy nowe mo\u017cliwo\u015bci r\u00f3wnie\u017c w j\u0119zykach programowania. Poszczeg\u00f3lne wydanie maj\u0105 r\u00f3wnocze\u015bnie znacznie mniejszy zakres, ni\u017c kiedy\u015b bywa\u0142o. Jak wi\u0119c to wygl\u0105da w przypadku Kotlina?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak naprawd\u0119 je\u017celi chodzi o sam j\u0119zyk, nowa edycja przynosi jeden, ale bardzo istotny dodatek: exhaustive when. W praktyce oznacza to, \u017ce je\u017celi tworzymy instancje zamkni\u0119tej klasy, to kompilator jest w stanie z\u0142apa\u0107 za nas pewne klasy b\u0142\u0119d\u00f3w. We\u017amy sobie przyk\u0142ad pochodz\u0105cy z dokumentacji samego Kotlina:<\/p>\n","innerContent":["\n<p>Tak naprawd\u0119 je\u017celi chodzi o sam j\u0119zyk, nowa edycja przynosi jeden, ale bardzo istotny dodatek: exhaustive when. W praktyce oznacza to, \u017ce je\u017celi tworzymy instancje zamkni\u0119tej klasy, to kompilator jest w stanie z\u0142apa\u0107 za nas pewne klasy b\u0142\u0119d\u00f3w. We\u017amy sobie przyk\u0142ad pochodz\u0105cy z dokumentacji samego Kotlina:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>sealed class Contact {\n      data class PhoneCall(val number: String) : Contact()\n      data class TextMessage(val number: String) : Contact()\n      data class InstantMessage(val type: IMType, val user: String) : Contact()\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>sealed class Contact {\n      data class PhoneCall(val number: String) : Contact()\n      data class TextMessage(val number: String) : Contact()\n      data class InstantMessage(val type: IMType, val user: String) : Contact()\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od Kotlina 1.6, je\u017celi nie obs\u0142u\u017cymy w naszym whenie kt\u00f3rego\u015b z wariant\u00f3w, kod po prostu si\u0119 nie skompiluje. Dzi\u0119ki temu u\u017cywanie Kotlinowego wariantu switchy staje si\u0119 jeszcze bardziej pot\u0119\u017cnym wzorcem:<\/p>\n","innerContent":["\n<p>Od Kotlina 1.6, je\u017celi nie obs\u0142u\u017cymy w naszym whenie kt\u00f3rego\u015b z wariant\u00f3w, kod po prostu si\u0119 nie skompiluje. Dzi\u0119ki temu u\u017cywanie Kotlinowego wariantu switchy staje si\u0119 jeszcze bardziej pot\u0119\u017cnym wzorcem:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>fun sendAnnouncement(contact: Contact, announcement: Announcement) {\n     when (contact) {\n         is Contact.PhoneCall -&gt; schedulePhoneCall(contact.number, announcement)\n         is Contact.TextMessage -&gt; sendTextMessage(contact.number, announcement)\n     }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>fun sendAnnouncement(contact: Contact, announcement: Announcement) {\n     when (contact) {\n         is Contact.PhoneCall -&gt; schedulePhoneCall(contact.number, announcement)\n         is Contact.TextMessage -&gt; sendTextMessage(contact.number, announcement)\n     }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, na when si\u0119 nie ko\u0144czy. Kotlin to r\u00f3wnie\u017c zmiana sposobu dzia\u0142ania funkcji suspend, kt\u00f3ra (nareszcie!) sta\u0142a si\u0119 superinterfejsem, a tak\u017ce stabilizacja s\u0142owa kluczowego typeof. Sporo zmian znajd\u0105 te\u017c dla siebie u\u017cytkownicy Kotlin Native.<\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, na when si\u0119 nie ko\u0144czy. Kotlin to r\u00f3wnie\u017c zmiana sposobu dzia\u0142ania funkcji suspend, kt\u00f3ra (nareszcie!) sta\u0142a si\u0119 superinterfejsem, a tak\u017ce stabilizacja s\u0142owa kluczowego typeof. Sporo zmian znajd\u0105 te\u017c dla siebie u\u017cytkownicy Kotlin Native.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a883c5a083f.png\" alt=\"\"\/><figcaption>Je\u017celi chcecie zobaczy\u0107 szczeg\u00f3\u0142y, JetBrain opublikowa\u0142o dwa filmiki - jeden dotycz\u0105cy <a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">zmian w samym Kotlinie 1.6<\/a>, oraz drugi, pochylaj\u0105cy si\u0119 nad nowo\u015bciami <a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">w bibliotece standardowej<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a883c5a083f.png\" alt=\"\"\/><figcaption>Je\u017celi chcecie zobaczy\u0107 szczeg\u00f3\u0142y, JetBrain opublikowa\u0142o dwa filmiki - jeden dotycz\u0105cy <a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">zmian w samym Kotlinie 1.6<\/a>, oraz drugi, pochylaj\u0105cy si\u0119 nad nowo\u015bciami <a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">w bibliotece standardowej<\/a>.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Premierze nowych wersji \u201cg\u0142\u00f3wnego\u201d Kotlina towarzysz\u0105 zwykle wydania kolejnych edycji korutyn, ale w tym wypadku raczej przyjdzie nam jeszcze chwil\u0119 poczeka\u0107. kotlinx-coroutines 1.6 doczeka\u0142 si\u0119 w poniedzia\u0142kowy wiecz\u00f3r swojego Release Candidate, aczkolwiek i tutaj nie spodziewajcie si\u0119 jakiej\u015b rewolucji. Zmian jest sporo, ale wi\u0119kszo\u015b\u0107 z nich dotyczy testowalno\u015bci korutyn - co z pewno\u015bci\u0105 ucieszy ka\u017cdego u\u017cywaj\u0105cego korutyn, ale dotknie g\u0142\u00f3wnie developer experience :)<\/p>\n","innerContent":["\n<p>Premierze nowych wersji \u201cg\u0142\u00f3wnego\u201d Kotlina towarzysz\u0105 zwykle wydania kolejnych edycji korutyn, ale w tym wypadku raczej przyjdzie nam jeszcze chwil\u0119 poczeka\u0107. kotlinx-coroutines 1.6 doczeka\u0142 si\u0119 w poniedzia\u0142kowy wiecz\u00f3r swojego Release Candidate, aczkolwiek i tutaj nie spodziewajcie si\u0119 jakiej\u015b rewolucji. Zmian jest sporo, ale wi\u0119kszo\u015b\u0107 z nich dotyczy testowalno\u015bci korutyn - co z pewno\u015bci\u0105 ucieszy ka\u017cdego u\u017cywaj\u0105cego korutyn, ale dotknie g\u0142\u00f3wnie developer experience :)<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W stosunku do tego, co pokazano tydzie\u0144 temu (K2, nowe narz\u0119dzia, zmiany w multiplatform) - niewiele. Odnosz\u0119 wra\u017cenie, \u017ce je\u017celi chodzi o Kotlina to najciekawsze rzeczy dziej\u0105 si\u0119 poza bibliotek\u0105 standardow\u0105. Aczkolwiek chyba taki ju\u017c los projekt\u00f3w, kt\u00f3re wesz\u0142y w tryb \u201cpoci\u0105gu releasowego\u201d.<\/p>\n","innerContent":["\n<p>W stosunku do tego, co pokazano tydzie\u0144 temu (K2, nowe narz\u0119dzia, zmiany w multiplatform) - niewiele. Odnosz\u0119 wra\u017cenie, \u017ce je\u017celi chodzi o Kotlina to najciekawsze rzeczy dziej\u0105 si\u0119 poza bibliotek\u0105 standardow\u0105. Aczkolwiek chyba taki ju\u017c los projekt\u00f3w, kt\u00f3re wesz\u0142y w tryb \u201cpoci\u0105gu releasowego\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/11\/kotlin-1-6-0-is-released\/\">Kotlin 1.6.0 Released | The Kotlin Blog<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">What's new in Kotlin 1.6.0<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">Kotlin Standard Library Changes in 1.6<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/11\/kotlin-1-6-0-is-released\/\">Kotlin 1.6.0 Released | The Kotlin Blog<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=6jrmcfYdfvI\">What's new in Kotlin 1.6.0<\/a><\/li><li><a href=\"https:\/\/www.youtube.com\/watch?v=GWWFCyfNGFs\">Kotlin Standard Library Changes in 1.6<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Spring Boot 2.6 przynosi podbicie wa\u017cnych zale\u017cno\u015bci <\/h2>\n","innerContent":["\n<h2>3. Spring Boot 2.6 przynosi podbicie wa\u017cnych zale\u017cno\u015bci <\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Rzadko si\u0119 zdarza, \u017ceby najmniej istotn\u0105 nowo\u015bci\u0105 javowego tygodnia by\u0142 nowy Spring Boot, ale to chyba najlepiej opisuje ostatnie, jak szalone by\u0142o ostatnie siedem dni.<\/p>\n","innerContent":["\n<p>Rzadko si\u0119 zdarza, \u017ceby najmniej istotn\u0105 nowo\u015bci\u0105 javowego tygodnia by\u0142 nowy Spring Boot, ale to chyba najlepiej opisuje ostatnie, jak szalone by\u0142o ostatnie siedem dni.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Lista zmian we frameworku wydaje si\u0119 by\u0107 na pierwszy rzut oka minimalna - wprowadzono min. wzbogacono endpoint healthcheckowy \/info o informacje o \u015brodowisku uruchomieniowym Javy czy wsparcie dla testowania aplikacji Spring MVC za pomoc\u0105 interfejsu WebTestClient. Ziew \ud83e\udd71. Oczywi\u015bcie, to nie jedyne zmiany w Spring Boot 2.6 - nowe wydanie broni si\u0119 ilo\u015bci\u0105 podbitych zale\u017cno\u015bci.<\/p>\n","innerContent":["\n<p>Lista zmian we frameworku wydaje si\u0119 by\u0107 na pierwszy rzut oka minimalna - wprowadzono min. wzbogacono endpoint healthcheckowy \/info o informacje o \u015brodowisku uruchomieniowym Javy czy wsparcie dla testowania aplikacji Spring MVC za pomoc\u0105 interfejsu WebTestClient. Ziew \ud83e\udd71. Oczywi\u015bcie, to nie jedyne zmiany w Spring Boot 2.6 - nowe wydanie broni si\u0119 ilo\u015bci\u0105 podbitych zale\u017cno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3261,"width":371,"height":477,"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\/2021\/11\/image-3.png\" alt=\"\" class=\"wp-image-3261\" width=\"371\" height=\"477\"\/><figcaption>Tak troch\u0119 czu\u0142em rozkminiaj\u0105c zasadno\u015b\u0107 tego newsa<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/image-3.png\" alt=\"\" class=\"wp-image-3261\" width=\"371\" height=\"477\"\/><figcaption>Tak troch\u0119 czu\u0142em rozkminiaj\u0105c zasadno\u015b\u0107 tego newsa<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Osoby posiadaj\u0105ce w swoich projektach kolejki powinny zainteresowa\u0107 si\u0119 nowymi wydaniami <a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring Kafka 2.8.0<\/a> oraz <a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a>, aczkolwiek nie spodziewajcie si\u0119 po nich rewolucji, aczkolwiek zawieraj\u0105 min. podbicie klienta Kafki do najnowszej wersji czy wsparcie dla nieuporz\u0105dkowanego commitowania wiadomo\u015bci. Ciekawe jest r\u00f3wnie\u017c wst\u0119pne wsparcie w AMQP dla RabbitMQ Streams, ale na co\u015b stabilnego przyjdzie mi jeszcze pewnie troch\u0119 poczeka\u0107. Znacznie ciekawsz\u0105 zmian\u0105 jest <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">\u200b\u200bSpring Security 5.6.0<\/a>, w kt\u00f3rym znajdziecie sporo usprawnie\u0144 zar\u00f3wno dla OAuth, jak i mechanizmu SAML, a tak\u017ce istotny nowy interfejs - <a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener<\/a>. Ostatni z du\u017cych upgrad\u00f3w to <a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1<\/a> - tutaj znowu g\u0142\u00f3wnym daniem jest upgrade Querydsl.<\/p>\n","innerContent":["\n<p>Osoby posiadaj\u0105ce w swoich projektach kolejki powinny zainteresowa\u0107 si\u0119 nowymi wydaniami <a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring Kafka 2.8.0<\/a> oraz <a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a>, aczkolwiek nie spodziewajcie si\u0119 po nich rewolucji, aczkolwiek zawieraj\u0105 min. podbicie klienta Kafki do najnowszej wersji czy wsparcie dla nieuporz\u0105dkowanego commitowania wiadomo\u015bci. Ciekawe jest r\u00f3wnie\u017c wst\u0119pne wsparcie w AMQP dla RabbitMQ Streams, ale na co\u015b stabilnego przyjdzie mi jeszcze pewnie troch\u0119 poczeka\u0107. Znacznie ciekawsz\u0105 zmian\u0105 jest <a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">\u200b\u200bSpring Security 5.6.0<\/a>, w kt\u00f3rym znajdziecie sporo usprawnie\u0144 zar\u00f3wno dla OAuth, jak i mechanizmu SAML, a tak\u017ce istotny nowy interfejs - <a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener<\/a>. Ostatni z du\u017cych upgrad\u00f3w to <a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1<\/a> - tutaj znowu g\u0142\u00f3wnym daniem jest upgrade Querydsl.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3264,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1.gif\" alt=\"\" class=\"wp-image-3264\"\/><figcaption>Oczywi\u015bcie, jak zawsze sugerujemy przegl\u0105da\u0107 pe\u0142ne Release Notes. Wiem \u017ce to uwielbiacie, ale wiele innych projekt\u00f3w dosta\u0142o mniejsze lub wi\u0119ksze usprawnienia.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/11\/giphy-1.gif\" alt=\"\" class=\"wp-image-3264\"\/><figcaption>Oczywi\u015bcie, jak zawsze sugerujemy przegl\u0105da\u0107 pe\u0142ne Release Notes. Wiem \u017ce to uwielbiacie, ale wiele innych projekt\u00f3w dosta\u0142o mniejsze lub wi\u0119ksze usprawnienia.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jako ma\u0142y bonus dorzuc\u0119 bardzo interesuj\u0105cy projekt, o kt\u00f3rego istnieniu wcze\u015bniej nie wiedzia\u0142em - <a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a>. Dzi\u0119ki temu projektowi mo\u017cna \u015bledzi\u0107 terminy planowanych wyda\u0144 ka\u017cdego ze Springowych podprojekt\u00f3w.&nbsp;<\/p>\n","innerContent":["\n<p>Jako ma\u0142y bonus dorzuc\u0119 bardzo interesuj\u0105cy projekt, o kt\u00f3rego istnieniu wcze\u015bniej nie wiedzia\u0142em - <a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a>. Dzi\u0119ki temu projektowi mo\u017cna \u015bledzi\u0107 terminy planowanych wyda\u0144 ka\u017cdego ze Springowych podprojekt\u00f3w.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring for Apache Kafka 2.8 is Now Available<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">What's New in Spring Security 5.6<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener (spring-security-docs 6.0.0-SNAPSHOT API)<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1.0 goes GA<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/calendar.spring.io\/\">Kalendarz Springowy<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/18\/spring-for-apache-kafka-2-8-is-now-available\">Spring for Apache Kafka 2.8 is Now Available<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-amqp\/releases\/tag\/v2.4.0\">Spring AMQP 2.4.0<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/reference\/whats-new.html\">What's New in Spring Security 5.6<\/a><\/li><li><a href=\"https:\/\/docs.spring.io\/spring-security\/site\/docs\/current-SNAPSHOT\/api\/org\/springframework\/security\/core\/context\/SecurityContextChangedListener.html\">SecurityContextChangedListener (spring-security-docs 6.0.0-SNAPSHOT API)<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2021\/11\/12\/spring-data-2021-1-0-goes-ga\">Spring Data 2021.1.0 goes GA<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><br><\/p>\n","innerContent":["\n<p><br><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10046","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=10046"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10046\/revisions"}],"predecessor-version":[{"id":10546,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10046\/revisions\/10546"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}