{"id":15699,"date":"2023-04-13T18:58:24","date_gmt":"2023-04-13T16:58:24","guid":{"rendered":"https:\/\/vived.io\/?p=15699"},"modified":"2023-04-13T20:15:02","modified_gmt":"2023-04-13T18:15:02","slug":"tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/","title":{"rendered":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 &#8211; JVM Weekly vol. 131"},"content":{"rendered":"\n<p>Podczas godziny (bo tyle trwa\u0142a ca\u0142o\u015b\u0107), dowiedzieli\u015bmy si\u0119 jak b\u0119dzie wygl\u0105da\u0142y kolejne kroki tw\u00f3rc\u00f3w Kotlina, a tak\u017ce pad\u0142o par\u0119 interesuj\u0105cych deklaracji.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"KotlinConf\u201923 - Keynote\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/c4f4SCEYA5Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>Ogl\u0105dni\u0119te? Je\u015bli nie to zapraszam do mojego tekstowego podsumowania imprezy.<\/p>\n\n\n\n<h2 id=\"kotlin-2-0-i-kotlin-k2\" data-num=1>Kotlin 2.0 i Kotlin K2<\/h2>\n\n\n\n<p>Ca\u0142a konferencja rozpocz\u0119\u0142a si\u0119 od du\u017cej zapowiedzi &#8211; nadchodzi Kotlin 2.0. Nie jest to wielka nowo\u015b\u0107 &#8211; fakt tego, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d.<\/p>\n\n\n\n<p>K2 to tak zwany frontend kompilatora. Proces kompilacji zwykle dzieli si\u0119 bowiem w\u0142a\u015bnie na dwa g\u0142\u00f3wne komponenty: frontend i backend. Ka\u017cdy z tych komponent\u00f3w pe\u0142ni odr\u0119bn\u0105 rol\u0119 w trakcie kompilacji.<\/p>\n\n\n\n<p>Frontend kompilatora jest g\u0142\u00f3wnie odpowiedzialny za przetwarzanie sk\u0142adni i semantyki kodu \u017ar\u00f3d\u0142owego. Wykonuje on szereg zada\u0144, takich jak analiza leksykalna, sk\u0142adniowa i semantyczna . Podczas tych krok\u00f3w frontend sprawdza b\u0142\u0119dy sk\u0142adniowe, generuje drzewo AST reprezentuj\u0105ce struktur\u0119 programu oraz sprawdza, czy program przestrzega regu\u0142 i ogranicze\u0144 j\u0119zyka. Frontend przeprowadza r\u00f3wnie\u017c kontrol\u0119 typ\u00f3w, aby upewni\u0107 si\u0119, \u017ce zmienne, wyra\u017cenia i wywo\u0142ania funkcji s\u0105 u\u017cywane zgodnie z ich odpowiednimi typami. Po zako\u0144czeniu tych zada\u0144 frontend generuje po\u015bredni\u0105 reprezentacj\u0119 (IR) kodu \u017ar\u00f3d\u0142owego, kt\u00f3ra s\u0142u\u017cy jako dane wej\u015bciowe dla backendu kompilatora. Z kolei backend kompilatora skupia si\u0119 na optymalizacji i generowaniu finalnego kodu maszynowego lub bajtkodu dla docelowej platformy.<\/p>\n\n\n\n<p>Z powy\u017cszego opisu \u0142atwo zauwa\u017cy\u0107, \u017ce to, z czym wi\u0119kszo\u015b\u0107 z nas ma do czynienia na codzie\u0144 (i to niezale\u017cnie czy jako u\u017cytkownik ko\u0144cowy czy nawet tw\u00f3rca narz\u0119dzi) to frontend kompilatora. I jak si\u0119 okazuje, to w\u0142a\u015bnie ta cz\u0119\u015b\u0107 mia\u0142a najwi\u0119kszy potencja\u0142 na optymalizacji. Wystarczy zreszt\u0105 spojrze\u0107 na liczby, kt\u00f3rymi ze sceny chwali\u0142 si\u0119 Roman Elizarov:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-1024x522.png\" alt=\"\" class=\"wp-image-15705\" width=\"768\" height=\"392\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-1024x522.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-300x153.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-768x391.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-1536x783.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-2048x1044.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure><\/div>\n\n\n<p>Jednak nie o sam\u0105 wydajno\u015b\u0107 rozwi\u0105zania tutaj chodzi. K2 ma zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina.<\/p>\n\n\n\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (o czym ju\u017c za chwil\u0119). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-14.png\" alt=\"\" class=\"wp-image-15707\" width=\"405\" height=\"410\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-14.png 540w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-14-297x300.png 297w\" sizes=\"auto, (max-width: 405px) 100vw, 405px\" \/><figcaption class=\"wp-element-caption\">Pozdrawiam tutaj ekip\u0119 od Pythona<\/figcaption><\/figure><\/div>\n\n\n<p>Je\u017celi kto\u015b nie mo\u017ce si\u0119 doczeka\u0107 nowego &#8222;majora&#8221; j\u0119zyka, to w zesz\u0142ym tygodniu ukaza\u0142 si\u0119 Kotlin 1.8.20, kt\u00f3ry wprowadza flag\u0119 <code>-language-version 2.0<\/code>. Ta umo\u017cliwia przetestowanie najnowszych zmian w kompilatorze, a sam Roman Elizarov prosi\u0142 o to, \u017ceby takowe testowa\u0107 &#8211; ma to pozwoli\u0107 tw\u00f3rcom na solidne sprawdzenie ca\u0142o\u015bci.<\/p>\n\n\n\n<p>A jak ju\u017c zapowiedzia\u0142em, \u017ce b\u0119dzie te\u017c o nowych wersjach j\u0119zyka&#8230;<\/p>\n\n\n\n<h2 id=\"nowe-funkcjonalnosci-jezyka\" data-num=2>Nowe funkcjonalno\u015bci j\u0119zyka<\/h2>\n\n\n\n<p>Roman Elizarov ze sceny pokaza\u0142 nam, czego mo\u017cemy spodziewa\u0107 si\u0119 od kolejnych wyda\u0144 Kotlina.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Static Extensions<\/h3>\n\n\n\n<p>Ot\u00f3\u017c prosz\u0119 pa\u0144stwa, Kotlin otrzyma wsparcie dla funkcji statycznych&#8230; tak jakby.<\/p>\n\n\n\n<p>Ot\u00f3\u017c mo\u017cliwe stanie si\u0119 dok\u0142adanie statycznych funkcji<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun File.static.open(name: String)<\/code><\/pre>\n\n\n\n<p>Co prawda w j\u0119zyku istnia\u0142a ju\u017c mo\u017cliwo\u015b\u0107 dok\u0142adania &#8222;efektywnie statycznych&#8221; extension funkcji , ale tylko wtedy, kiedy klasa posiada\u0142a Companion Object. Teraz b\u0119dzie mo\u017cliwe to r\u00f3wnie\u017c w przypadku, gdy nie mamy kontroli nad klas\u0105 bazow\u0105<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Collections Literals<\/h3>\n\n\n\n<p>To si\u0119 naprawd\u0119 dzieje! <\/p>\n\n\n\n<p>Tutaj pozwol\u0119 sobie memem:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/7i13pe.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>My\u015bl\u0119, \u017ce to w\u0142a\u015bnie na to og\u0142oszenie czeka\u0142o Google, zanim obwie\u015bci\u0142o \u015bwiatu, \u017ce Kotlin DSL stanie si\u0119 dom&#8230; bez spoiler\u00f3w, b\u0119dzie za chwil\u0119.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Object (name-based) destructuring<\/h3>\n\n\n\n<p>B\u0119dzie zagadka. Poni\u017cszy kod<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class Home(val country: String, val city: String, )\n\nval (city, country) = Home(&quot;Krak\u00f3w&quot;, &quot;Poland&quot;)<\/code><\/pre>\n\n\n\n<p>doprowadzi do trudnego do wychwycenia b\u0142\u0119du (widzicie gdzie?).<\/p>\n\n\n\n<p>Tw\u00f3rcy zapowiedzieli te\u017c, \u017ce pracuj\u0105 nad wprowadzeniem formy destrukturyzacji obiekt\u00f3w, kt\u00f3ra ma uniemo\u017cliwi\u0107 tego typu pomy\u0142ki. Aktualne nie ma jeszcze gotowej propozycji syntaxu&#8230; to znaczy jest ich a\u017c kilka, ale ukrytych w <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-19627\">kotlinowym YouTracku<\/a>. Zobaczymy, kt\u00f3ra ostatecznie wygra.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Explicit Fields<\/h3>\n\n\n\n<p>Dosy\u0107 hermetyczn\u0105 zmian\u0105 jest te\u017c dodanie tak zwanych &#8222;explicit fields&#8221;. Jest to (przynajmniej z mojej perspektywy) syntax sugar nad mechanizmem okre\u015blanym jako <a href=\"https:\/\/kotlinlang.org\/docs\/properties.html#backing-fields\">&#8222;backing&#8221; p\u00f3l<\/a>, a u\u017cyteczny w momencie gdy chcemy zwr\u00f3ci\u0107 jak\u0105\u015b warto\u015b\u0107 jako niemutowan\u0105, ale by\u0107 w stanie wykonywa\u0107 na niej w momencie tworzenia jakie\u015b operacje.<\/p>\n\n\n\n<p>Ca\u0142o\u015b\u0107 jest skomplikowana (doczeka\u0142a si\u0119 w\u0142asnego <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/explicit-backing-fields-re\/proposals\/explicit-backing-fields.md\">Design Doca<\/a>), ale w praktyce sprowadza si\u0119 do zmiany poni\u017cszego kodu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class C {\n    private val _elementList = mutableListOf&lt;Element&gt;()\n\n    val elementList: List&lt;Element&gt;\n        get() = _elementList\n        \n      fun addElement(element: Element) {\n      _elementList += element \/\/ works\n    }\n}\n\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n\n\n\n<p>na<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class C {\n   val elementList: List&lt;Element&gt;\n        field = mutableListOf()\n\n  fun addElement(element: Element) {\n      elementList += element \/\/ works\n  }\n}\n\n\/\/ outside code\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Zapowiedziano r\u00f3wnie\u017c redesign oraz stabilizacj\u0119 <code>ContextReceivers<\/code>, kt\u00f3re swego czasu ju\u017c trafi\u0142y do j\u0119zyka. Dzi\u0119ki nowej architekturze K2, u\u0142atwione zostanie te\u017c pisanie rozszerze\u0144 do kompilatora, umo\u017cliwiaj\u0105cych np. generowanie kodu.<\/p>\n\n\n\n<h2 id=\"kotlin-notebooks\" data-num=3>Kotlin Notebooks<\/h2>\n\n\n\n<p>Mocno ewoluuje nam spos\u00f3b, w jaki tworzymy kod. Z jednej strony w naprawd\u0119 szybkim tempie GPT-4 staje si\u0119 bardzo dobrym partnerem do wsp\u00f3lnego kodowania, z drugiej techniki wcze\u015bniej u\u017cywane g\u0142\u00f3wnie przez Data Scientist\u00f3w powoli przenikaj\u0105 do reszty bran\u017cy. Przyznam, \u017ce osobi\u015bcie bardzo cenie sobie wszelakie notebooki (cho\u0107 musz\u0119 przyzna\u0107, \u017ce bardzo \u0142atwo o ich nadu\u017cycie). Do tej pory jednak g\u0142\u00f3wnie by\u0142em konsumentem tych stworzonych przez kogo\u015b innego, ni\u017c tw\u00f3rcom. Sytuacja ta mo\u017ce si\u0119 nied\u0142ugo zmieni\u0107, poniewa\u017c JetBrains postanowi\u0142o stworzy\u0107 plugin do IDE. I wygl\u0105da to naprawd\u0119 przejemnie<\/p>\n\n\n\n<p>Jako \u017ce obraz wart jest tysi\u0105ca s\u0142\u00f3w, zrobi\u0142em klip z fragmentu konferencji, w ramach kt\u00f3rego pojawi\u0142o si\u0119 to ma\u0142e cude\u0144ko.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"360\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/Untitled-1.gif\" alt=\"\" class=\"wp-image-15746\"\/><figcaption class=\"wp-element-caption\">Je\u015bli nie wiecie czy warto ogl\u0105da\u0107 &#8211; na ko\u0144cu OpenAI generuje kod, bo co to by\u0142by w 2023 za Keynote bez GPT.<\/figcaption><\/figure><\/div>\n\n\n<p>Do skryptowania wydaje si\u0119 by\u0107 to wr\u0119cz idealne. Pami\u0119tam, jak bardzo ceni\u0142em sobie zawsze Scala Worksheet.<\/p>\n\n\n\n<p>To teraz przejd\u017amy, do chyba najwi\u0119kszego zaskoczenia&#8230;<\/p>\n\n\n\n<h2 id=\"kotlin-dsl-domyslnym-jezykiem\" data-num=4>Kotlin DSL domy\u015blnym j\u0119zykiem<\/h2>\n\n\n\n<p>Ja naprawd\u0119 zawsze pr\u00f3bowa\u0142em polubi\u0107 Kotlin DSL. Ma on obiektywnie mas\u0119 zalet takich jak ulepszona obs\u0142uga IDE i lepsze bezpiecze\u0144stwo w czasie kompilacji. Mimo jednak bycia &#8222;typesafe&#8221;, bardziej ekspresywn\u0105 alternatyw\u0119 dla Groovy&#8217;ego, jego adopcja jest do\u015b\u0107 powolna. Jednym z podstawowych wyzwa\u0144, przed kt\u00f3rymi staje podczas pracy z tym dialektem jest fakt, \u017ce znaczna liczba sampli, tutoriali i dokumentacji jest nadal w Groovym, a nie Kotlinie. Dzieje si\u0119 tak g\u0142\u00f3wnie dlatego, \u017ce to w\u0142a\u015bnie Groovy zosta\u0142 oryginalnie wybrany przez Gradle, co doprowadzi\u0142o do powstania w\u0142a\u015bnie w tym j\u0119zyku bogatego ekosystemu tre\u015bci i narz\u0119dzi zespo\u0142u strony spo\u0142eczno\u015bci. W rezultacie programi\u015bci cz\u0119sto musz\u0105 t\u0142umaczy\u0107 przyk\u0142ady Groovy na Kotlin DSL, co mo\u017ce by\u0107 czasoch\u0142onne i podatne na b\u0142\u0119dy ze wzgl\u0119du na spore r\u00f3\u017cnice w sk\u0142adni, API i og\u00f3lnej logice j\u0119zyka. Utrudnia to programistom wykorzystanie pe\u0142nych korzy\u015bci p\u0142yn\u0105cych z Kotlin DSL.<\/p>\n\n\n\n<p>I tutaj ca\u0142e na bia\u0142o wchodzi Google. Firma (a w\u0142a\u015bciwie zasiadaj\u0105ca w radzie Kotlin Foundation Grace Kloba) zapowiedzia\u0142a bowiem, \u017ce Kotlin DSL stanie si\u0119 domy\u015blnym dialektem dla androidowych projekt\u00f3w opartych o Gradle. Ca\u0142o\u015b\u0107 stanowi\u0107 ma impuls dla reszty spo\u0142eczno\u015bci, \u017ceby porzuci\u0107 ten czas porzuci\u0107 Groovy&#8217;ego i zmodernizowa\u0107 swoje buildy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"200\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/2f0.gif\" alt=\"\" class=\"wp-image-15713\"\/><figcaption class=\"wp-element-caption\">Innymi s\u0142owy &#8211; mi\u0142o Ci\u0119 by\u0142o pozna\u0107 Groovy. It was fun while it lasted.<\/figcaption><\/figure><\/div>\n\n\n<p>Nie bez przyczyny pewnie zreszt\u0105 to w\u0142a\u015bnie dzisiaj rano mieli\u015bmy premier\u0119 <a href=\"https:\/\/docs.gradle.org\/8.1\/release-notes.html\">Gradle 8.1<\/a>, kt\u00f3ry wprowadzi\u0142 sporo dodatkowych poprawek do Kotlina (ale te\u017c np. wsparcie dla JDK 20). Powy\u017cszy ruch jest okre\u015blany bowiem jako rezultat wieloletniej wsp\u00f3\u0142pracy mi\u0119dzy Google i Gradle, gdzie ten ostatni reagowa\u0142 na sta\u0142y feedback i pom\u00f3g\u0142 doprowadzi\u0107 narz\u0119dzie do momentu, gdy wspomniana deklaracja mog\u0142a zosta\u0107 odpowiedzialnie z\u0142o\u017cone.<\/p>\n\n\n\n<p>I w ten spos\u00f3b mo\u017cemy p\u0142ynnie przej\u015b\u0107 do kolejnego punktu, kt\u00f3rym jest&#8230;<\/p>\n\n\n\n<h2 id=\"rozszerzenie-skladu-kotlin-foundation\" data-num=5>Rozszerzenie sk\u0142adu Kotlin Foundation<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-1024x437.png\" alt=\"\" class=\"wp-image-15715\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-1024x437.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-300x128.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-768x328.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-1536x655.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-2048x874.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Tutaj b\u0119dzie kr\u00f3tko, bo te\u017c samo og\u0142oszenie jest bardzo klarowne &#8211; Kotlin Foundation, pocz\u0105tkowo za\u0142o\u017cona przez Google i JetBrains, poszerzona zosta\u0142a o kolejnych cz\u0142onk\u00f3w. Opr\u00f3cz wspominanego ju\u017c Gradle (pewnie si\u0119 spodziewali\u015bcie), do\u0142\u0105czy r\u00f3wnie\u017c oraz&#8230; Shopify. Ten ostatni kojarzy\u0142 mi si\u0119 g\u0142\u00f3wnie z Ruby, wi\u0119c jest to pewne zaskoczenie, ale okazuje si\u0119, \u017ce firma aktywnie u\u017cywa Kotlin Multiplatform.<\/p>\n\n\n\n<p>I na samym ko\u0144cu przejdziemy sobie w\u0142a\u015bnie do tego ostatniego.<\/p>\n\n\n\n<h2 id=\"dalszy-rozwoj-kotlin-multiplatform\" data-num=6>Dalszy rozw\u00f3j Kotlin Multiplatform<\/h2>\n\n\n\n<p>Jak pewnie stali czytelnicy tego newslettera wiedz\u0105 (nowych zapraszam do subskrypcji, poznamy si\u0119 lepiej \ud83d\ude04), siedz\u0119 g\u0142\u00f3wnie po stronie Backendu. Dlatego te\u017c Multiplatform nigdy nie by\u0142 dla mnie bardziej ciekawostk\u0105, aczkolwiek z czasem zacz\u0105\u0142em traktowa\u0107 ten projekt z nieco wi\u0119kszym szacunkiem. I cho\u0107 takie zapowiedzi jak zmiana Jetpack Compose w Compose Multiplatform przyci\u0105gaj\u0105 uwag\u0119, a wydanie wersji tego ostatniego na iOS z pewno\u015bci\u0105 przyci\u0105ga uwag\u0119, to ja najbardziej ciesz\u0119 si\u0119 na rozw\u00f3j wersji WASM. Od pewnego czasu coraz bardziej interesuje si\u0119 WebAssembly i wierz\u0119, \u017ce z roku na rok b\u0119dzie stawa\u0142o si\u0119 wa\u017cniejszym elementem ekosystemu programistycznego.<br><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-1024x759.png\" alt=\"\" class=\"wp-image-15718\" width=\"512\" height=\"380\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-1024x759.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-300x222.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-768x569.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16.png 1338w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">Przy czym ostrzegam, mog\u0119 si\u0119 pomyli\u0107<\/figcaption><\/figure><\/div>\n\n\n<p>Ciekawostka &#8211; je\u015bli wczyta\u0107 si\u0119 w dokumentacje, to okazuje si\u0119, \u017ce ca\u0142y Compose for Web jest oparty w\u0142a\u015bnie na Kotlin\/Wasm. Pokazuje to tylko, z jakim pot\u0119\u017cnym narz\u0119dziem mamy do czynienia.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>By\u0142o tego troch\u0119, ale musz\u0119 przyzna\u0107, \u017ce bawi\u0142em si\u0119 jak na Google I\/O ze starych czas\u00f3w, kiedy pokazywali wi\u0119cej narz\u0119dzi dla Developer\u00f3w ni\u017c informacji o zmianach pod mask\u0105 wyszukiwarki. A to tylko Keynote. Jutrzejszy poranek przyniesie bowiem sesje <a href=\"https:\/\/kotlinconf.com\/speakers\/80f570c3-27df-4756-b04a-76b2d6f220c4\/#Coroutines%20and%20Loom%20behind%20the%20scenes\">Coroutines and Loom behind the scenes<\/a> prowadzon\u0105 przez Romana Elizarova. Mo\u017cecie by\u0107 pewni, \u017ce zrobi\u0119 moje ma\u0142e podsumowanie&#8230; ale to ju\u017c za tydzie\u0144.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj troch\u0119 na gor\u0105co, bo po pierwszym dniu KotlinConf, postanowi\u0142em podzieli\u0107 si\u0119 tym, co pokazano na Keynote&#8230; a by\u0142o tego ca\u0142kiem sporo!<\/p>\n","protected":false},"author":10,"featured_media":15723,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-15699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"9","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - 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\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj troch\u0119 na gor\u0105co, bo po pierwszym dniu KotlinConf, postanowi\u0142em podzieli\u0107 si\u0119 tym, co pokazano na Keynote... a by\u0142o tego ca\u0142kiem sporo!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-13T16:58:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-13T18:15:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 &#8211; JVM Weekly vol. 131\",\"datePublished\":\"2023-04-13T16:58:24+00:00\",\"dateModified\":\"2023-04-13T18:15:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\"},\"wordCount\":1753,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\",\"url\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\",\"name\":\"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png\",\"datePublished\":\"2023-04-13T16:58:24+00:00\",\"dateModified\":\"2023-04-13T18:15:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 &#8211; JVM Weekly vol. 131\"}]},{\"@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":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - 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\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/","og_locale":"pl_PL","og_type":"article","og_title":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - Vived","og_description":"Dzisiaj troch\u0119 na gor\u0105co, bo po pierwszym dniu KotlinConf, postanowi\u0142em podzieli\u0107 si\u0119 tym, co pokazano na Keynote... a by\u0142o tego ca\u0142kiem sporo!","og_url":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/","og_site_name":"Vived","article_published_time":"2023-04-13T16:58:24+00:00","article_modified_time":"2023-04-13T18:15:02+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.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\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 &#8211; JVM Weekly vol. 131","datePublished":"2023-04-13T16:58:24+00:00","dateModified":"2023-04-13T18:15:02+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/"},"wordCount":1753,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/","url":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/","name":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 - JVM Weekly vol. 131 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png","datePublished":"2023-04-13T16:58:24+00:00","dateModified":"2023-04-13T18:15:02+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/JVM-Weekly-1200x628_V2-2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/tldw-wrazenia-z-keynote-kotlinconf-2023-jvm-weekly-vol-131\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"TLDW: Wra\u017cenia z Keynote KotlinConf 2023 &#8211; JVM Weekly vol. 131"}]},{"@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\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podczas godziny (bo tyle trwa\u0142a ca\u0142o\u015b\u0107), dowiedzieli\u015bmy si\u0119 jak b\u0119dzie wygl\u0105da\u0142y kolejne kroki tw\u00f3rc\u00f3w Kotlina, a tak\u017ce pad\u0142o par\u0119 interesuj\u0105cych deklaracji.<\/p>\n","innerContent":["\n<p>Podczas godziny (bo tyle trwa\u0142a ca\u0142o\u015b\u0107), dowiedzieli\u015bmy si\u0119 jak b\u0119dzie wygl\u0105da\u0142y kolejne kroki tw\u00f3rc\u00f3w Kotlina, a tak\u017ce pad\u0142o par\u0119 interesuj\u0105cych deklaracji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=c4f4SCEYA5Q","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=c4f4SCEYA5Q\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=c4f4SCEYA5Q\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ogl\u0105dni\u0119te? Je\u015bli nie to zapraszam do mojego tekstowego podsumowania imprezy.<\/p>\n","innerContent":["\n<p>Ogl\u0105dni\u0119te? Je\u015bli nie to zapraszam do mojego tekstowego podsumowania imprezy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Kotlin 2.0 i Kotlin K2<\/h2>\n","innerContent":["\n<h2>Kotlin 2.0 i Kotlin K2<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ca\u0142a konferencja rozpocz\u0119\u0142a si\u0119 od du\u017cej zapowiedzi - nadchodzi Kotlin 2.0. Nie jest to wielka nowo\u015b\u0107 - fakt tego, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d.<\/p>\n","innerContent":["\n<p>Ca\u0142a konferencja rozpocz\u0119\u0142a si\u0119 od du\u017cej zapowiedzi - nadchodzi Kotlin 2.0. Nie jest to wielka nowo\u015b\u0107 - fakt tego, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>K2 to tak zwany frontend kompilatora. Proces kompilacji zwykle dzieli si\u0119 bowiem w\u0142a\u015bnie na dwa g\u0142\u00f3wne komponenty: frontend i backend. Ka\u017cdy z tych komponent\u00f3w pe\u0142ni odr\u0119bn\u0105 rol\u0119 w trakcie kompilacji.<\/p>\n","innerContent":["\n<p>K2 to tak zwany frontend kompilatora. Proces kompilacji zwykle dzieli si\u0119 bowiem w\u0142a\u015bnie na dwa g\u0142\u00f3wne komponenty: frontend i backend. Ka\u017cdy z tych komponent\u00f3w pe\u0142ni odr\u0119bn\u0105 rol\u0119 w trakcie kompilacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Frontend kompilatora jest g\u0142\u00f3wnie odpowiedzialny za przetwarzanie sk\u0142adni i semantyki kodu \u017ar\u00f3d\u0142owego. Wykonuje on szereg zada\u0144, takich jak analiza leksykalna, sk\u0142adniowa i semantyczna . Podczas tych krok\u00f3w frontend sprawdza b\u0142\u0119dy sk\u0142adniowe, generuje drzewo AST reprezentuj\u0105ce struktur\u0119 programu oraz sprawdza, czy program przestrzega regu\u0142 i ogranicze\u0144 j\u0119zyka. Frontend przeprowadza r\u00f3wnie\u017c kontrol\u0119 typ\u00f3w, aby upewni\u0107 si\u0119, \u017ce zmienne, wyra\u017cenia i wywo\u0142ania funkcji s\u0105 u\u017cywane zgodnie z ich odpowiednimi typami. Po zako\u0144czeniu tych zada\u0144 frontend generuje po\u015bredni\u0105 reprezentacj\u0119 (IR) kodu \u017ar\u00f3d\u0142owego, kt\u00f3ra s\u0142u\u017cy jako dane wej\u015bciowe dla backendu kompilatora. Z kolei backend kompilatora skupia si\u0119 na optymalizacji i generowaniu finalnego kodu maszynowego lub bajtkodu dla docelowej platformy.<\/p>\n","innerContent":["\n<p>Frontend kompilatora jest g\u0142\u00f3wnie odpowiedzialny za przetwarzanie sk\u0142adni i semantyki kodu \u017ar\u00f3d\u0142owego. Wykonuje on szereg zada\u0144, takich jak analiza leksykalna, sk\u0142adniowa i semantyczna . Podczas tych krok\u00f3w frontend sprawdza b\u0142\u0119dy sk\u0142adniowe, generuje drzewo AST reprezentuj\u0105ce struktur\u0119 programu oraz sprawdza, czy program przestrzega regu\u0142 i ogranicze\u0144 j\u0119zyka. Frontend przeprowadza r\u00f3wnie\u017c kontrol\u0119 typ\u00f3w, aby upewni\u0107 si\u0119, \u017ce zmienne, wyra\u017cenia i wywo\u0142ania funkcji s\u0105 u\u017cywane zgodnie z ich odpowiednimi typami. Po zako\u0144czeniu tych zada\u0144 frontend generuje po\u015bredni\u0105 reprezentacj\u0119 (IR) kodu \u017ar\u00f3d\u0142owego, kt\u00f3ra s\u0142u\u017cy jako dane wej\u015bciowe dla backendu kompilatora. Z kolei backend kompilatora skupia si\u0119 na optymalizacji i generowaniu finalnego kodu maszynowego lub bajtkodu dla docelowej platformy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z powy\u017cszego opisu \u0142atwo zauwa\u017cy\u0107, \u017ce to, z czym wi\u0119kszo\u015b\u0107 z nas ma do czynienia na codzie\u0144 (i to niezale\u017cnie czy jako u\u017cytkownik ko\u0144cowy czy nawet tw\u00f3rca narz\u0119dzi) to frontend kompilatora. I jak si\u0119 okazuje, to w\u0142a\u015bnie ta cz\u0119\u015b\u0107 mia\u0142a najwi\u0119kszy potencja\u0142 na optymalizacji. Wystarczy zreszt\u0105 spojrze\u0107 na liczby, kt\u00f3rymi ze sceny chwali\u0142 si\u0119 Roman Elizarov:<\/p>\n","innerContent":["\n<p>Z powy\u017cszego opisu \u0142atwo zauwa\u017cy\u0107, \u017ce to, z czym wi\u0119kszo\u015b\u0107 z nas ma do czynienia na codzie\u0144 (i to niezale\u017cnie czy jako u\u017cytkownik ko\u0144cowy czy nawet tw\u00f3rca narz\u0119dzi) to frontend kompilatora. I jak si\u0119 okazuje, to w\u0142a\u015bnie ta cz\u0119\u015b\u0107 mia\u0142a najwi\u0119kszy potencja\u0142 na optymalizacji. Wystarczy zreszt\u0105 spojrze\u0107 na liczby, kt\u00f3rymi ze sceny chwali\u0142 si\u0119 Roman Elizarov:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15705,"width":768,"height":392,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-1024x522.png\" alt=\"\" class=\"wp-image-15705\" width=\"768\" height=\"392\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-13-1024x522.png\" alt=\"\" class=\"wp-image-15705\" width=\"768\" height=\"392\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jednak nie o sam\u0105 wydajno\u015b\u0107 rozwi\u0105zania tutaj chodzi. K2 ma zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina.<\/p>\n","innerContent":["\n<p>Jednak nie o sam\u0105 wydajno\u015b\u0107 rozwi\u0105zania tutaj chodzi. K2 ma zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (o czym ju\u017c za chwil\u0119). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n","innerContent":["\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (o czym ju\u017c za chwil\u0119). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15707,"width":405,"height":410,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-14.png\" alt=\"\" class=\"wp-image-15707\" width=\"405\" height=\"410\"\/><figcaption class=\"wp-element-caption\">Pozdrawiam tutaj ekip\u0119 od Pythona<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-14.png\" alt=\"\" class=\"wp-image-15707\" width=\"405\" height=\"410\"\/><figcaption class=\"wp-element-caption\">Pozdrawiam tutaj ekip\u0119 od Pythona<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi kto\u015b nie mo\u017ce si\u0119 doczeka\u0107 nowego \"majora\" j\u0119zyka, to w zesz\u0142ym tygodniu ukaza\u0142 si\u0119 Kotlin 1.8.20, kt\u00f3ry wprowadza flag\u0119 <code>-language-version 2.0<\/code>. Ta umo\u017cliwia przetestowanie najnowszych zmian w kompilatorze, a sam Roman Elizarov prosi\u0142 o to, \u017ceby takowe testowa\u0107 - ma to pozwoli\u0107 tw\u00f3rcom na solidne sprawdzenie ca\u0142o\u015bci.<\/p>\n","innerContent":["\n<p>Je\u017celi kto\u015b nie mo\u017ce si\u0119 doczeka\u0107 nowego \"majora\" j\u0119zyka, to w zesz\u0142ym tygodniu ukaza\u0142 si\u0119 Kotlin 1.8.20, kt\u00f3ry wprowadza flag\u0119 <code>-language-version 2.0<\/code>. Ta umo\u017cliwia przetestowanie najnowszych zmian w kompilatorze, a sam Roman Elizarov prosi\u0142 o to, \u017ceby takowe testowa\u0107 - ma to pozwoli\u0107 tw\u00f3rcom na solidne sprawdzenie ca\u0142o\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c zapowiedzia\u0142em, \u017ce b\u0119dzie te\u017c o nowych wersjach j\u0119zyka...<\/p>\n","innerContent":["\n<p>A jak ju\u017c zapowiedzia\u0142em, \u017ce b\u0119dzie te\u017c o nowych wersjach j\u0119zyka...<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Nowe funkcjonalno\u015bci j\u0119zyka<\/h2>\n","innerContent":["\n<h2>Nowe funkcjonalno\u015bci j\u0119zyka<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Roman Elizarov ze sceny pokaza\u0142 nam, czego mo\u017cemy spodziewa\u0107 si\u0119 od kolejnych wyda\u0144 Kotlina.<\/p>\n","innerContent":["\n<p>Roman Elizarov ze sceny pokaza\u0142 nam, czego mo\u017cemy spodziewa\u0107 si\u0119 od kolejnych wyda\u0144 Kotlina.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Static Extensions<\/h3>\n","innerContent":["\n<h3>Static Extensions<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ot\u00f3\u017c prosz\u0119 pa\u0144stwa, Kotlin otrzyma wsparcie dla funkcji statycznych... tak jakby.<\/p>\n","innerContent":["\n<p>Ot\u00f3\u017c prosz\u0119 pa\u0144stwa, Kotlin otrzyma wsparcie dla funkcji statycznych... tak jakby.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ot\u00f3\u017c mo\u017cliwe stanie si\u0119 dok\u0142adanie statycznych funkcji<\/p>\n","innerContent":["\n<p>Ot\u00f3\u017c mo\u017cliwe stanie si\u0119 dok\u0142adanie statycznych funkcji<\/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 File.static.open(name: String)<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>fun File.static.open(name: String)<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co prawda w j\u0119zyku istnia\u0142a ju\u017c mo\u017cliwo\u015b\u0107 dok\u0142adania \"efektywnie statycznych\" extension funkcji , ale tylko wtedy, kiedy klasa posiada\u0142a Companion Object. Teraz b\u0119dzie mo\u017cliwe to r\u00f3wnie\u017c w przypadku, gdy nie mamy kontroli nad klas\u0105 bazow\u0105<\/p>\n","innerContent":["\n<p>Co prawda w j\u0119zyku istnia\u0142a ju\u017c mo\u017cliwo\u015b\u0107 dok\u0142adania \"efektywnie statycznych\" extension funkcji , ale tylko wtedy, kiedy klasa posiada\u0142a Companion Object. Teraz b\u0119dzie mo\u017cliwe to r\u00f3wnie\u017c w przypadku, gdy nie mamy kontroli nad klas\u0105 bazow\u0105<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Collections Literals<\/h3>\n","innerContent":["\n<h3>Collections Literals<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To si\u0119 naprawd\u0119 dzieje! <\/p>\n","innerContent":["\n<p>To si\u0119 naprawd\u0119 dzieje! <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tutaj pozwol\u0119 sobie memem:<\/p>\n","innerContent":["\n<p>Tutaj pozwol\u0119 sobie memem:<\/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\/2023\/04\/7i13pe.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/7i13pe.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>My\u015bl\u0119, \u017ce to w\u0142a\u015bnie na to og\u0142oszenie czeka\u0142o Google, zanim obwie\u015bci\u0142o \u015bwiatu, \u017ce Kotlin DSL stanie si\u0119 dom... bez spoiler\u00f3w, b\u0119dzie za chwil\u0119.<\/p>\n","innerContent":["\n<p>My\u015bl\u0119, \u017ce to w\u0142a\u015bnie na to og\u0142oszenie czeka\u0142o Google, zanim obwie\u015bci\u0142o \u015bwiatu, \u017ce Kotlin DSL stanie si\u0119 dom... bez spoiler\u00f3w, b\u0119dzie za chwil\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Object (name-based) destructuring<\/h3>\n","innerContent":["\n<h3>Object (name-based) destructuring<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>B\u0119dzie zagadka. Poni\u017cszy kod<\/p>\n","innerContent":["\n<p>B\u0119dzie zagadka. Poni\u017cszy kod<\/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>data class Home(val country: String, val city: String, )\n\nval (city, country) = Home(\"Krak\u00f3w\", \"Poland\")<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>data class Home(val country: String, val city: String, )\n\nval (city, country) = Home(\"Krak\u00f3w\", \"Poland\")<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>doprowadzi do trudnego do wychwycenia b\u0142\u0119du (widzicie gdzie?).<\/p>\n","innerContent":["\n<p>doprowadzi do trudnego do wychwycenia b\u0142\u0119du (widzicie gdzie?).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rcy zapowiedzieli te\u017c, \u017ce pracuj\u0105 nad wprowadzeniem formy destrukturyzacji obiekt\u00f3w, kt\u00f3ra ma uniemo\u017cliwi\u0107 tego typu pomy\u0142ki. Aktualne nie ma jeszcze gotowej propozycji syntaxu... to znaczy jest ich a\u017c kilka, ale ukrytych w <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-19627\">kotlinowym YouTracku<\/a>. Zobaczymy, kt\u00f3ra ostatecznie wygra.<\/p>\n","innerContent":["\n<p>Tw\u00f3rcy zapowiedzieli te\u017c, \u017ce pracuj\u0105 nad wprowadzeniem formy destrukturyzacji obiekt\u00f3w, kt\u00f3ra ma uniemo\u017cliwi\u0107 tego typu pomy\u0142ki. Aktualne nie ma jeszcze gotowej propozycji syntaxu... to znaczy jest ich a\u017c kilka, ale ukrytych w <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-19627\">kotlinowym YouTracku<\/a>. Zobaczymy, kt\u00f3ra ostatecznie wygra.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Explicit Fields<\/h3>\n","innerContent":["\n<h3>Explicit Fields<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dosy\u0107 hermetyczn\u0105 zmian\u0105 jest te\u017c dodanie tak zwanych \"explicit fields\". Jest to (przynajmniej z mojej perspektywy) syntax sugar nad mechanizmem okre\u015blanym jako <a href=\"https:\/\/kotlinlang.org\/docs\/properties.html#backing-fields\">\"backing\" p\u00f3l<\/a>, a u\u017cyteczny w momencie gdy chcemy zwr\u00f3ci\u0107 jak\u0105\u015b warto\u015b\u0107 jako niemutowan\u0105, ale by\u0107 w stanie wykonywa\u0107 na niej w momencie tworzenia jakie\u015b operacje.<\/p>\n","innerContent":["\n<p>Dosy\u0107 hermetyczn\u0105 zmian\u0105 jest te\u017c dodanie tak zwanych \"explicit fields\". Jest to (przynajmniej z mojej perspektywy) syntax sugar nad mechanizmem okre\u015blanym jako <a href=\"https:\/\/kotlinlang.org\/docs\/properties.html#backing-fields\">\"backing\" p\u00f3l<\/a>, a u\u017cyteczny w momencie gdy chcemy zwr\u00f3ci\u0107 jak\u0105\u015b warto\u015b\u0107 jako niemutowan\u0105, ale by\u0107 w stanie wykonywa\u0107 na niej w momencie tworzenia jakie\u015b operacje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ca\u0142o\u015b\u0107 jest skomplikowana (doczeka\u0142a si\u0119 w\u0142asnego <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/explicit-backing-fields-re\/proposals\/explicit-backing-fields.md\">Design Doca<\/a>), ale w praktyce sprowadza si\u0119 do zmiany poni\u017cszego kodu<\/p>\n","innerContent":["\n<p>Ca\u0142o\u015b\u0107 jest skomplikowana (doczeka\u0142a si\u0119 w\u0142asnego <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/explicit-backing-fields-re\/proposals\/explicit-backing-fields.md\">Design Doca<\/a>), ale w praktyce sprowadza si\u0119 do zmiany poni\u017cszego kodu<\/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>class C {\n    private val _elementList = mutableListOf&lt;Element&gt;()\n\n    val elementList: List&lt;Element&gt;\n        get() = _elementList\n        \n      fun addElement(element: Element) {\n      _elementList += element \/\/ works\n    }\n}\n\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>class C {\n    private val _elementList = mutableListOf&lt;Element&gt;()\n\n    val elementList: List&lt;Element&gt;\n        get() = _elementList\n        \n      fun addElement(element: Element) {\n      _elementList += element \/\/ works\n    }\n}\n\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>na<\/p>\n","innerContent":["\n<p>na<\/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>class C {\n   val elementList: List&lt;Element&gt;\n        field = mutableListOf()\n\n  fun addElement(element: Element) {\n      elementList += element \/\/ works\n  }\n}\n\n\/\/ outside code\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>class C {\n   val elementList: List&lt;Element&gt;\n        field = mutableListOf()\n\n  fun addElement(element: Element) {\n      elementList += element \/\/ works\n  }\n}\n\n\/\/ outside code\nC().elementList += element \/\/ does not compile;<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zapowiedziano r\u00f3wnie\u017c redesign oraz stabilizacj\u0119 <code>ContextReceivers<\/code>, kt\u00f3re swego czasu ju\u017c trafi\u0142y do j\u0119zyka. Dzi\u0119ki nowej architekturze K2, u\u0142atwione zostanie te\u017c pisanie rozszerze\u0144 do kompilatora, umo\u017cliwiaj\u0105cych np. generowanie kodu.<\/p>\n","innerContent":["\n<p>Zapowiedziano r\u00f3wnie\u017c redesign oraz stabilizacj\u0119 <code>ContextReceivers<\/code>, kt\u00f3re swego czasu ju\u017c trafi\u0142y do j\u0119zyka. Dzi\u0119ki nowej architekturze K2, u\u0142atwione zostanie te\u017c pisanie rozszerze\u0144 do kompilatora, umo\u017cliwiaj\u0105cych np. generowanie kodu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Kotlin Notebooks<\/h2>\n","innerContent":["\n<h2>Kotlin Notebooks<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mocno ewoluuje nam spos\u00f3b, w jaki tworzymy kod. Z jednej strony w naprawd\u0119 szybkim tempie GPT-4 staje si\u0119 bardzo dobrym partnerem do wsp\u00f3lnego kodowania, z drugiej techniki wcze\u015bniej u\u017cywane g\u0142\u00f3wnie przez Data Scientist\u00f3w powoli przenikaj\u0105 do reszty bran\u017cy. Przyznam, \u017ce osobi\u015bcie bardzo cenie sobie wszelakie notebooki (cho\u0107 musz\u0119 przyzna\u0107, \u017ce bardzo \u0142atwo o ich nadu\u017cycie). Do tej pory jednak g\u0142\u00f3wnie by\u0142em konsumentem tych stworzonych przez kogo\u015b innego, ni\u017c tw\u00f3rcom. Sytuacja ta mo\u017ce si\u0119 nied\u0142ugo zmieni\u0107, poniewa\u017c JetBrains postanowi\u0142o stworzy\u0107 plugin do IDE. I wygl\u0105da to naprawd\u0119 przejemnie<\/p>\n","innerContent":["\n<p>Mocno ewoluuje nam spos\u00f3b, w jaki tworzymy kod. Z jednej strony w naprawd\u0119 szybkim tempie GPT-4 staje si\u0119 bardzo dobrym partnerem do wsp\u00f3lnego kodowania, z drugiej techniki wcze\u015bniej u\u017cywane g\u0142\u00f3wnie przez Data Scientist\u00f3w powoli przenikaj\u0105 do reszty bran\u017cy. Przyznam, \u017ce osobi\u015bcie bardzo cenie sobie wszelakie notebooki (cho\u0107 musz\u0119 przyzna\u0107, \u017ce bardzo \u0142atwo o ich nadu\u017cycie). Do tej pory jednak g\u0142\u00f3wnie by\u0142em konsumentem tych stworzonych przez kogo\u015b innego, ni\u017c tw\u00f3rcom. Sytuacja ta mo\u017ce si\u0119 nied\u0142ugo zmieni\u0107, poniewa\u017c JetBrains postanowi\u0142o stworzy\u0107 plugin do IDE. I wygl\u0105da to naprawd\u0119 przejemnie<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jako \u017ce obraz wart jest tysi\u0105ca s\u0142\u00f3w, zrobi\u0142em klip z fragmentu konferencji, w ramach kt\u00f3rego pojawi\u0142o si\u0119 to ma\u0142e cude\u0144ko.<\/p>\n","innerContent":["\n<p>Jako \u017ce obraz wart jest tysi\u0105ca s\u0142\u00f3w, zrobi\u0142em klip z fragmentu konferencji, w ramach kt\u00f3rego pojawi\u0142o si\u0119 to ma\u0142e cude\u0144ko.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15746,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/Untitled-1.gif\" alt=\"\" class=\"wp-image-15746\"\/><figcaption class=\"wp-element-caption\">Je\u015bli nie wiecie czy warto ogl\u0105da\u0107 - na ko\u0144cu OpenAI generuje kod, bo co to by\u0142by w 2023 za Keynote bez GPT.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/Untitled-1.gif\" alt=\"\" class=\"wp-image-15746\"\/><figcaption class=\"wp-element-caption\">Je\u015bli nie wiecie czy warto ogl\u0105da\u0107 - na ko\u0144cu OpenAI generuje kod, bo co to by\u0142by w 2023 za Keynote bez GPT.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do skryptowania wydaje si\u0119 by\u0107 to wr\u0119cz idealne. Pami\u0119tam, jak bardzo ceni\u0142em sobie zawsze Scala Worksheet.<\/p>\n","innerContent":["\n<p>Do skryptowania wydaje si\u0119 by\u0107 to wr\u0119cz idealne. Pami\u0119tam, jak bardzo ceni\u0142em sobie zawsze Scala Worksheet.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To teraz przejd\u017amy, do chyba najwi\u0119kszego zaskoczenia...<\/p>\n","innerContent":["\n<p>To teraz przejd\u017amy, do chyba najwi\u0119kszego zaskoczenia...<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Kotlin DSL domy\u015blnym j\u0119zykiem<\/h2>\n","innerContent":["\n<h2>Kotlin DSL domy\u015blnym j\u0119zykiem<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ja naprawd\u0119 zawsze pr\u00f3bowa\u0142em polubi\u0107 Kotlin DSL. Ma on obiektywnie mas\u0119 zalet takich jak ulepszona obs\u0142uga IDE i lepsze bezpiecze\u0144stwo w czasie kompilacji. Mimo jednak bycia \"typesafe\", bardziej ekspresywn\u0105 alternatyw\u0119 dla Groovy'ego, jego adopcja jest do\u015b\u0107 powolna. Jednym z podstawowych wyzwa\u0144, przed kt\u00f3rymi staje podczas pracy z tym dialektem jest fakt, \u017ce znaczna liczba sampli, tutoriali i dokumentacji jest nadal w Groovym, a nie Kotlinie. Dzieje si\u0119 tak g\u0142\u00f3wnie dlatego, \u017ce to w\u0142a\u015bnie Groovy zosta\u0142 oryginalnie wybrany przez Gradle, co doprowadzi\u0142o do powstania w\u0142a\u015bnie w tym j\u0119zyku bogatego ekosystemu tre\u015bci i narz\u0119dzi zespo\u0142u strony spo\u0142eczno\u015bci. W rezultacie programi\u015bci cz\u0119sto musz\u0105 t\u0142umaczy\u0107 przyk\u0142ady Groovy na Kotlin DSL, co mo\u017ce by\u0107 czasoch\u0142onne i podatne na b\u0142\u0119dy ze wzgl\u0119du na spore r\u00f3\u017cnice w sk\u0142adni, API i og\u00f3lnej logice j\u0119zyka. Utrudnia to programistom wykorzystanie pe\u0142nych korzy\u015bci p\u0142yn\u0105cych z Kotlin DSL.<\/p>\n","innerContent":["\n<p>Ja naprawd\u0119 zawsze pr\u00f3bowa\u0142em polubi\u0107 Kotlin DSL. Ma on obiektywnie mas\u0119 zalet takich jak ulepszona obs\u0142uga IDE i lepsze bezpiecze\u0144stwo w czasie kompilacji. Mimo jednak bycia \"typesafe\", bardziej ekspresywn\u0105 alternatyw\u0119 dla Groovy'ego, jego adopcja jest do\u015b\u0107 powolna. Jednym z podstawowych wyzwa\u0144, przed kt\u00f3rymi staje podczas pracy z tym dialektem jest fakt, \u017ce znaczna liczba sampli, tutoriali i dokumentacji jest nadal w Groovym, a nie Kotlinie. Dzieje si\u0119 tak g\u0142\u00f3wnie dlatego, \u017ce to w\u0142a\u015bnie Groovy zosta\u0142 oryginalnie wybrany przez Gradle, co doprowadzi\u0142o do powstania w\u0142a\u015bnie w tym j\u0119zyku bogatego ekosystemu tre\u015bci i narz\u0119dzi zespo\u0142u strony spo\u0142eczno\u015bci. W rezultacie programi\u015bci cz\u0119sto musz\u0105 t\u0142umaczy\u0107 przyk\u0142ady Groovy na Kotlin DSL, co mo\u017ce by\u0107 czasoch\u0142onne i podatne na b\u0142\u0119dy ze wzgl\u0119du na spore r\u00f3\u017cnice w sk\u0142adni, API i og\u00f3lnej logice j\u0119zyka. Utrudnia to programistom wykorzystanie pe\u0142nych korzy\u015bci p\u0142yn\u0105cych z Kotlin DSL.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I tutaj ca\u0142e na bia\u0142o wchodzi Google. Firma (a w\u0142a\u015bciwie zasiadaj\u0105ca w radzie Kotlin Foundation Grace Kloba) zapowiedzia\u0142a bowiem, \u017ce Kotlin DSL stanie si\u0119 domy\u015blnym dialektem dla androidowych projekt\u00f3w opartych o Gradle. Ca\u0142o\u015b\u0107 stanowi\u0107 ma impuls dla reszty spo\u0142eczno\u015bci, \u017ceby porzuci\u0107 ten czas porzuci\u0107 Groovy'ego i zmodernizowa\u0107 swoje buildy.<\/p>\n","innerContent":["\n<p>I tutaj ca\u0142e na bia\u0142o wchodzi Google. Firma (a w\u0142a\u015bciwie zasiadaj\u0105ca w radzie Kotlin Foundation Grace Kloba) zapowiedzia\u0142a bowiem, \u017ce Kotlin DSL stanie si\u0119 domy\u015blnym dialektem dla androidowych projekt\u00f3w opartych o Gradle. Ca\u0142o\u015b\u0107 stanowi\u0107 ma impuls dla reszty spo\u0142eczno\u015bci, \u017ceby porzuci\u0107 ten czas porzuci\u0107 Groovy'ego i zmodernizowa\u0107 swoje buildy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15713,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/2f0.gif\" alt=\"\" class=\"wp-image-15713\"\/><figcaption class=\"wp-element-caption\">Innymi s\u0142owy - mi\u0142o Ci\u0119 by\u0142o pozna\u0107 Groovy. It was fun while it lasted.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/2f0.gif\" alt=\"\" class=\"wp-image-15713\"\/><figcaption class=\"wp-element-caption\">Innymi s\u0142owy - mi\u0142o Ci\u0119 by\u0142o pozna\u0107 Groovy. It was fun while it lasted.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie bez przyczyny pewnie zreszt\u0105 to w\u0142a\u015bnie dzisiaj rano mieli\u015bmy premier\u0119 <a href=\"https:\/\/docs.gradle.org\/8.1\/release-notes.html\">Gradle 8.1<\/a>, kt\u00f3ry wprowadzi\u0142 sporo dodatkowych poprawek do Kotlina (ale te\u017c np. wsparcie dla JDK 20). Powy\u017cszy ruch jest okre\u015blany bowiem jako rezultat wieloletniej wsp\u00f3\u0142pracy mi\u0119dzy Google i Gradle, gdzie ten ostatni reagowa\u0142 na sta\u0142y feedback i pom\u00f3g\u0142 doprowadzi\u0107 narz\u0119dzie do momentu, gdy wspomniana deklaracja mog\u0142a zosta\u0107 odpowiedzialnie z\u0142o\u017cone.<\/p>\n","innerContent":["\n<p>Nie bez przyczyny pewnie zreszt\u0105 to w\u0142a\u015bnie dzisiaj rano mieli\u015bmy premier\u0119 <a href=\"https:\/\/docs.gradle.org\/8.1\/release-notes.html\">Gradle 8.1<\/a>, kt\u00f3ry wprowadzi\u0142 sporo dodatkowych poprawek do Kotlina (ale te\u017c np. wsparcie dla JDK 20). Powy\u017cszy ruch jest okre\u015blany bowiem jako rezultat wieloletniej wsp\u00f3\u0142pracy mi\u0119dzy Google i Gradle, gdzie ten ostatni reagowa\u0142 na sta\u0142y feedback i pom\u00f3g\u0142 doprowadzi\u0107 narz\u0119dzie do momentu, gdy wspomniana deklaracja mog\u0142a zosta\u0107 odpowiedzialnie z\u0142o\u017cone.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I w ten spos\u00f3b mo\u017cemy p\u0142ynnie przej\u015b\u0107 do kolejnego punktu, kt\u00f3rym jest...<\/p>\n","innerContent":["\n<p>I w ten spos\u00f3b mo\u017cemy p\u0142ynnie przej\u015b\u0107 do kolejnego punktu, kt\u00f3rym jest...<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Rozszerzenie sk\u0142adu Kotlin Foundation<\/h2>\n","innerContent":["\n<h2>Rozszerzenie sk\u0142adu Kotlin Foundation<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":15715,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-1024x437.png\" alt=\"\" class=\"wp-image-15715\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-15-1024x437.png\" alt=\"\" class=\"wp-image-15715\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tutaj b\u0119dzie kr\u00f3tko, bo te\u017c samo og\u0142oszenie jest bardzo klarowne - Kotlin Foundation, pocz\u0105tkowo za\u0142o\u017cona przez Google i JetBrains, poszerzona zosta\u0142a o kolejnych cz\u0142onk\u00f3w. Opr\u00f3cz wspominanego ju\u017c Gradle (pewnie si\u0119 spodziewali\u015bcie), do\u0142\u0105czy r\u00f3wnie\u017c oraz... Shopify. Ten ostatni kojarzy\u0142 mi si\u0119 g\u0142\u00f3wnie z Ruby, wi\u0119c jest to pewne zaskoczenie, ale okazuje si\u0119, \u017ce firma aktywnie u\u017cywa Kotlin Multiplatform.<\/p>\n","innerContent":["\n<p>Tutaj b\u0119dzie kr\u00f3tko, bo te\u017c samo og\u0142oszenie jest bardzo klarowne - Kotlin Foundation, pocz\u0105tkowo za\u0142o\u017cona przez Google i JetBrains, poszerzona zosta\u0142a o kolejnych cz\u0142onk\u00f3w. Opr\u00f3cz wspominanego ju\u017c Gradle (pewnie si\u0119 spodziewali\u015bcie), do\u0142\u0105czy r\u00f3wnie\u017c oraz... Shopify. Ten ostatni kojarzy\u0142 mi si\u0119 g\u0142\u00f3wnie z Ruby, wi\u0119c jest to pewne zaskoczenie, ale okazuje si\u0119, \u017ce firma aktywnie u\u017cywa Kotlin Multiplatform.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I na samym ko\u0144cu przejdziemy sobie w\u0142a\u015bnie do tego ostatniego.<\/p>\n","innerContent":["\n<p>I na samym ko\u0144cu przejdziemy sobie w\u0142a\u015bnie do tego ostatniego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Dalszy rozw\u00f3j Kotlin Multiplatform<\/h2>\n","innerContent":["\n<h2>Dalszy rozw\u00f3j Kotlin Multiplatform<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak pewnie stali czytelnicy tego newslettera wiedz\u0105 (nowych zapraszam do subskrypcji, poznamy si\u0119 lepiej \ud83d\ude04), siedz\u0119 g\u0142\u00f3wnie po stronie Backendu. Dlatego te\u017c Multiplatform nigdy nie by\u0142 dla mnie bardziej ciekawostk\u0105, aczkolwiek z czasem zacz\u0105\u0142em traktowa\u0107 ten projekt z nieco wi\u0119kszym szacunkiem. I cho\u0107 takie zapowiedzi jak zmiana Jetpack Compose w Compose Multiplatform przyci\u0105gaj\u0105 uwag\u0119, a wydanie wersji tego ostatniego na iOS z pewno\u015bci\u0105 przyci\u0105ga uwag\u0119, to ja najbardziej ciesz\u0119 si\u0119 na rozw\u00f3j wersji WASM. Od pewnego czasu coraz bardziej interesuje si\u0119 WebAssembly i wierz\u0119, \u017ce z roku na rok b\u0119dzie stawa\u0142o si\u0119 wa\u017cniejszym elementem ekosystemu programistycznego.<br><\/p>\n","innerContent":["\n<p>Jak pewnie stali czytelnicy tego newslettera wiedz\u0105 (nowych zapraszam do subskrypcji, poznamy si\u0119 lepiej \ud83d\ude04), siedz\u0119 g\u0142\u00f3wnie po stronie Backendu. Dlatego te\u017c Multiplatform nigdy nie by\u0142 dla mnie bardziej ciekawostk\u0105, aczkolwiek z czasem zacz\u0105\u0142em traktowa\u0107 ten projekt z nieco wi\u0119kszym szacunkiem. I cho\u0107 takie zapowiedzi jak zmiana Jetpack Compose w Compose Multiplatform przyci\u0105gaj\u0105 uwag\u0119, a wydanie wersji tego ostatniego na iOS z pewno\u015bci\u0105 przyci\u0105ga uwag\u0119, to ja najbardziej ciesz\u0119 si\u0119 na rozw\u00f3j wersji WASM. Od pewnego czasu coraz bardziej interesuje si\u0119 WebAssembly i wierz\u0119, \u017ce z roku na rok b\u0119dzie stawa\u0142o si\u0119 wa\u017cniejszym elementem ekosystemu programistycznego.<br><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15718,"width":512,"height":380,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-1024x759.png\" alt=\"\" class=\"wp-image-15718\" width=\"512\" height=\"380\"\/><figcaption class=\"wp-element-caption\">Przy czym ostrzegam, mog\u0119 si\u0119 pomyli\u0107<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/04\/image-16-1024x759.png\" alt=\"\" class=\"wp-image-15718\" width=\"512\" height=\"380\"\/><figcaption class=\"wp-element-caption\">Przy czym ostrzegam, mog\u0119 si\u0119 pomyli\u0107<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ciekawostka - je\u015bli wczyta\u0107 si\u0119 w dokumentacje, to okazuje si\u0119, \u017ce ca\u0142y Compose for Web jest oparty w\u0142a\u015bnie na Kotlin\/Wasm. Pokazuje to tylko, z jakim pot\u0119\u017cnym narz\u0119dziem mamy do czynienia.<\/p>\n","innerContent":["\n<p>Ciekawostka - je\u015bli wczyta\u0107 si\u0119 w dokumentacje, to okazuje si\u0119, \u017ce ca\u0142y Compose for Web jest oparty w\u0142a\u015bnie na Kotlin\/Wasm. Pokazuje to tylko, z jakim pot\u0119\u017cnym narz\u0119dziem mamy do czynienia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>By\u0142o tego troch\u0119, ale musz\u0119 przyzna\u0107, \u017ce bawi\u0142em si\u0119 jak na Google I\/O ze starych czas\u00f3w, kiedy pokazywali wi\u0119cej narz\u0119dzi dla Developer\u00f3w ni\u017c informacji o zmianach pod mask\u0105 wyszukiwarki. A to tylko Keynote. Jutrzejszy poranek przyniesie bowiem sesje <a href=\"https:\/\/kotlinconf.com\/speakers\/80f570c3-27df-4756-b04a-76b2d6f220c4\/#Coroutines%20and%20Loom%20behind%20the%20scenes\">Coroutines and Loom behind the scenes<\/a> prowadzon\u0105 przez Romana Elizarova. Mo\u017cecie by\u0107 pewni, \u017ce zrobi\u0119 moje ma\u0142e podsumowanie... ale to ju\u017c za tydzie\u0144.<\/p>\n","innerContent":["\n<p>By\u0142o tego troch\u0119, ale musz\u0119 przyzna\u0107, \u017ce bawi\u0142em si\u0119 jak na Google I\/O ze starych czas\u00f3w, kiedy pokazywali wi\u0119cej narz\u0119dzi dla Developer\u00f3w ni\u017c informacji o zmianach pod mask\u0105 wyszukiwarki. A to tylko Keynote. Jutrzejszy poranek przyniesie bowiem sesje <a href=\"https:\/\/kotlinconf.com\/speakers\/80f570c3-27df-4756-b04a-76b2d6f220c4\/#Coroutines%20and%20Loom%20behind%20the%20scenes\">Coroutines and Loom behind the scenes<\/a> prowadzon\u0105 przez Romana Elizarova. Mo\u017cecie by\u0107 pewni, \u017ce zrobi\u0119 moje ma\u0142e podsumowanie... ale to ju\u017c za tydzie\u0144.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15699","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=15699"}],"version-history":[{"count":16,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15699\/revisions"}],"predecessor-version":[{"id":15749,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15699\/revisions\/15749"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15723"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}