{"id":14080,"date":"2023-01-26T12:46:25","date_gmt":"2023-01-26T11:46:25","guid":{"rendered":"https:\/\/vived.io\/?p=14080"},"modified":"2023-02-03T10:39:16","modified_gmt":"2023-02-03T09:39:16","slug":"jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/","title":{"rendered":"JDK wkracza w 2023: plany na rok,  pierwsze JEPy i retrospektywa funkcji Preview &#8211; JVM Weekly vol. 122"},"content":{"rendered":"\n<h2 id=\"1-co-2023-przyniesie-dla-javy\" data-num=1>1. Co 2023 przyniesie dla Javy?<\/h2>\n\n\n\n<p>To \u017ceby dobrze zacz\u0105\u0107 dzisiejsz\u0105 edycj\u0119: Nicolai Parlog, Developer Advocate Javy w Oracle jak co roku przygotowa\u0142 podsumowanie tego, co tw\u00f3rcy j\u0119zyka szykuj\u0105 na najbli\u017csze dwana\u015bcie miesi\u0119cy. \u017beby przekona\u0107 Was, \u017ce b\u0119dzie to najlepiej sp\u0119dzone 10 minut, \u017ceby zbudowa\u0107 sobie obraz Javy w 2023, warto spojrze\u0107 cho\u0107by na zakres tematyczny ca\u0142o\u015bci.<\/p>\n\n\n\n<p>W czasie kr\u00f3tszym ni\u017c trwa <a href=\"https:\/\/www.youtube.com\/watch?v=iofT_kc7FH8\">pojedyncze przes\u0142uchanie pe\u0142nej wersji piosenki &#8222;Again&#8221; Archive<\/a> (co r\u00f3wnie\u017c polecam!) Nicolai przechodzi nie tylko przez Looma czy Panam\u0119, ale r\u00f3wnie\u017c pozwoli Wam lepiej zrozumie\u0107 plany na GraalVM, projekt Leyden czy te\u017c Liliput. Je\u017celi czytacie regularnie ten newsletter, pewnie nazwy te zd\u0105\u017cy\u0142y si\u0119 Wam obi\u0107 o uszy, ale w dalszym ci\u0105gu polecam &#8211; uwielbiam, jak zgrabnie i dynamicznie udaje mu si\u0119 przej\u015b\u0107 przez te wszystkie tematy w tak kr\u00f3tkim czasie &#8211; zazdroszcz\u0119 mu tej zwi\u0119z\u0142o\u015bci w przekazie. My\u015bl\u0119, \u017ce je\u015bli nawet tematy nie s\u0105 Wam obce, to ca\u0142o\u015b\u0107 pozwoli Wam zar\u00f3wno na pewn\u0105 powt\u00f3rk\u0119, jak i u\u0142o\u017cenie ca\u0142o\u015bci w pewnym szerszym kontek\u015bcie.<\/p>\n\n\n\n<p>No, to teraz wszyscy przestajemy czyta\u0107 i widzimy si\u0119 z powrotem za 10 minut (to nie koniec dzisiejszej edycji, mam dla Was jeszcze kilka ciekawych informacji, wi\u0119c wr\u00f3\u0107cie po ogl\u0105dni\u0119ciu):<\/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=\"Java&#039;s Plans for 2023 - Inside Java Newscast #40\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/-sfB40FHfJE?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>Musicie przyzna\u0107, \u017ce 2023 zapowiada si\u0119 bardzo smakowicie. Osobi\u015bcie licz\u0119, \u017ce to jednak jeszcze nie wszystko &#8211; w ko\u0144cu 2022 przyni\u00f3s\u0142 nam sporo niespodzianek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-sfB40FHfJE\">Java&#8217;s Plans for 2023 &#8211; Inside Java Newscast #40<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-pierwsze-jepy-ad-2023\" data-num=2>2. Pierwsze JEPy AD 2023<\/h2>\n\n\n\n<p>A jak ju\u017c wiemy, co czeka nas w 2023, to czas przygl\u0105dn\u0105\u0107 si\u0119 temu, co ju\u017c przyni\u00f3s\u0142. Stycze\u0144 powoli si\u0119 rozkr\u0119ca\u0142, ale ostatni tydzie\u0144 to sporo ciekawych og\u0142osze\u0144 i cieplutkich informacji prosto z list mailingowych Javy.<\/p>\n\n\n\n<p>Pierwsza z nich to JEP przygotowywany pod parasolk\u0105 Projektu Amber: <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a>. Nale\u017cy ona do mojej ulubionej kategorii zmian z jednej strony bardzo praktycznych, z drugiej mocno minimalistycznych, a w dodatku do tego &#8211; mocno skomplikowanych i sprawiaj\u0105cych, \u017ce lepiej rozumiem (i mam nadzieje, \u017ce wy r\u00f3wnie\u017c) dzia\u0142anie Javy pod mask\u0105. Mowa tu bowiem o pr\u00f3bie eliminacji jednego z bardziej niezrozumia\u0142ych dla pocz\u0105tkuj\u0105cych, a irytuj\u0105cych dla do\u015bwiadczonych programist\u00f3w mechanizm\u00f3w Javy &#8211; wymagania bezpo\u015bredniego wywo\u0142ywania konstruktora klasy, po kt\u00f3rej si\u0119 dziedziczy, jako pierwszej operacji w klasie dziedzicz\u0105cej.<\/p>\n\n\n\n<p>W skr\u00f3cie, <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">nowy Draft<\/a> chce umo\u017cliwi\u0107 np. walidacj\u0119 (przyk\u0142ad prosto z JEP-a):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class PositiveBigInteger extends BigInteger {\n\n    public PositiveBigInteger(long value) {\n        if (value &lt;= 0)\n            throw new IllegalArgumentException(&quot;non-positive value&quot;);\n        super(value);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Zmiana jak zmiana, ma ona jednak dwa bardzo ciekawe aspekty. Po pierwsze (co \u0142atwe do przewidzenia) &#8211; nie jest ona tak oczywista do przeprowadzenia, ze wzgl\u0119du bowiem na wsteczn\u0105 kompatybilno\u015b\u0107 czy niekt\u00f3re przypadki brzegowe tworzenia hierarchii klas, co dobrze zosta\u0142o opisane we wspomnianym JEP-ie. Polecam jednak jego lektur\u0119 te\u017c dlatego, \u017ce ca\u0142o\u015b\u0107 \u0142adnie uwidacznia \u017ce specyfikacja Javy jako j\u0119zyka oraz specyfikacja JVM maj\u0105 nieco inny poziom &#8222;permisywno\u015bci&#8221;. To, \u017ce JVM pozwala na wi\u0119cej pewnie nikogo nie zdziwi (w ko\u0144cu powsta\u0142y na nim takie j\u0119zyki jak Kotlin i Scala), ale tutaj ten rzadko poruszany aspekt zosta\u0142 wy\u0142uszczona na prostym do zrozumienia przyk\u0142adzie.<\/p>\n\n\n\n<p>Informacja o drugiej zmianie, kt\u00f3r\u0105 przynie\u015b\u0107 ma Java w najbli\u017cszej(?) przysz\u0142o\u015bci nie pochodzi z JEP-a, a bezpo\u015brednio z list mailingowych. Okazuje si\u0119 bowiem, \u017ce tw\u00f3rcy j\u0119zyka mocno wzi\u0119li sobie do serca od\u015bwie\u017cenie standardu Javadoc. Rok 2022 przyni\u00f3s\u0142 mo\u017cliwo\u015b\u0107 dok\u0142adania w nim snippet\u00f3w kodu, aktualnie za\u015b trwaj\u0105 dyskusje nad mo\u017cliwo\u015bci\u0105 wsparcia dla Markdowna. Tw\u00f3rcy Javy (w tym wypadku Jonathan Gibbons z Oracle) zauwa\u017caj\u0105 zalety tego j\u0119zyka znacznik\u00f3w, nie pozostaj\u0105 bezkrytyczni. Wskazuj\u0105 bowiem na kilka problem\u00f3w, zw\u0142aszcza je\u015bli chodzi o kompatybilno\u015b\u0107 z obecnymi rozwi\u0105zaniami u\u017cywanymi przez Javadoc, mocno opartymi na HTML-u. I cho\u0107by dla powy\u017cszej argumentacji <a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">warto oryginaln\u0105 wiadomo\u015b\u0107 i p\u0105czkuj\u0105c\u0105 z niej dyskusje przeczyta\u0107<\/a>.<\/p>\n\n\n\n<p>Podsumowuj\u0105c t\u0105 sekcje &#8211; jeszcze w grudniu w ramach issue-trackera Javy pojawi\u0142o si\u0119 kilka nowych pozycji, dotycz\u0105cych prac nad mechnizmem Class Data Sharingu, poprzez usprawnienia na styku z Garbage Collectorem G1 <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8298048\">(1)<\/a><a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296344\">(2)<\/a> czy <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296263\">ulepszenia API i lepsze wsparcie innych GC<\/a>. Nie jest to co\u015b, co mocno wp\u0142ywa na u\u017cytkownika ko\u0144cowego, ale dziele si\u0119 tym, poniewa\u017c zmiany te zosta\u0142y <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">zapowiedziane<\/a> jako czyszczenie przedpola dla projektu Leyden i pojawi\u0105 si\u0119 ju\u017c w JDK 20.<\/p>\n\n\n\n<p>Ostatniego z JEP-\u00f3w om\u00f3wimy za\u015b sobie w nast\u0119pnej sekcji &#8211; jest bowiem mocno unikalny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">On Markdown in (Java) documentation comments&#8230;<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">CDS improvements with archived Java heap objects<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"3-jaka-przyszlosc-czeka-sciezke-preview-retrospektywa-po-czterech-latach\" data-num=3>3. Jaka przysz\u0142o\u015b\u0107 czeka \u015bcie\u017ck\u0119 Preview &#8211; Retrospektywa po czterech latach<\/h2>\n\n\n\n<p>Kiedy to min\u0119\u0142o&#8230; Czy wiecie, \u017ce nowy tryb releasowy Javy ma ju\u017c 4 lata? Pokolenie framework\u00f3w JavaScriptowych zd\u0105\u017cy\u0142o ju\u017c w tym czasie narodzi\u0107 si\u0119 i umrze\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/javascript-clown.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiem \u017ce stare i nie prawda, ale dalej \u015bmieszne.<\/figcaption><\/figure><\/div>\n\n\n<p>Wprowadzone w 2019 roku zmiany nie tylko zmieni\u0142y tryb releasu nowych wyda\u0144 Javy, wprowadzaj\u0105c co sze\u015bciomiesi\u0119czny release train, ale r\u00f3wnie\u017c w ramach <a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a> wprowadzi\u0142y do j\u0119zyka dwie nowe metody testowania funkcjonalno\u015bci &#8211; Preview i Inkubacj\u0119. Przyszed\u0142 teraz najwy\u017cszy czas, aby przygl\u0105dn\u0105\u0107 si\u0119 temu, jak sprawdzi\u0142y si\u0119 w praktyce. Z tej okazji ukaza\u0142 si\u0119 specjalny <a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a>, w kt\u00f3rym Alex Buckley, Specification Lead for the Java Language, analizuje, co si\u0119 uda\u0142o, kt\u00f3re obawy si\u0119 nie spe\u0142ni\u0142y, kt\u00f3re za\u015b miejsca wymagaj\u0105 poprawy.<\/p>\n\n\n\n<p>W skr\u00f3cie: Preview spe\u0142ni\u0142y pok\u0142adane w nich oczekiwania. Pozwoli\u0142y one otrzymywa\u0107 szybszy feedback od spo\u0142eczno\u015bci, testowa\u0107 nowe funkcjonalno\u015bci i (lekko) iterowa\u0107 nad nimi w otwarty spos\u00f3b. We\u017amy cho\u0107by pod uwag\u0119, jaki wielki odd\u017awi\u0119k w spo\u0142eczno\u015bci (i wysyp publikacji) wywo\u0142a\u0142o udost\u0119pnienie wirtualnych w\u0105tk\u00f3w jako Preview. Dodatkowo, znacznemu usprawnieniu uleg\u0142o tempo adopcji nowych funkcji przez tw\u00f3rc\u00f3w wszelakiego toolingu, mog\u0105 oni bowiem pracowa\u0107 nad prawie stabilnym API z du\u017cym wyprzedzeniem. Tak\u017ce Preview by\u0142y \u015bwietnym pomys\u0142em, ale&#8230;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/meme-natural.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiecie co si\u0119 b\u0119dzie dalej dzia\u0142o<\/figcaption><\/figure><\/div>\n\n\n<p>W tej beczce miodu pojawia si\u0119 jednak \u0142y\u017cka dziegciu. W pocz\u0105tkowych za\u0142o\u017ceniach Preview mia\u0142 by\u0107 faz\u0105, w kt\u00f3rej funkcje j\u0119zyka s\u0105 ju\u017c na tyle stabilne, \u017ce pozostaj\u0105 w niej relatywnie kr\u00f3tko. W praktyce jednak potrafimy mie\u0107 funkcjonalno\u015bci posiadaj\u0105ce czwarte\/pi\u0105te Preview (patrz\u0119 na Ciebie, Pattern Matching). Tekst analizuje powody i te s\u0105 bardzo r\u00f3\u017cnorodne &#8211; g\u0142\u00f3wnie jednak sprowadzaj\u0105 si\u0119 do oczekiwania na rozw\u00f3j innych cz\u0119\u015bci j\u0119zyka i potrzeb\u0119 dopasowywania si\u0119 do zewn\u0119trznych zmian. Przyk\u0142adem mo\u017ce by\u0107 tutaj druga iteracja Wirtualnych W\u0105tk\u00f3w, kt\u00f3ra musia\u0142a si\u0119 ukaza\u0107 g\u0142\u00f3wnie ze wzgl\u0119du na pojawienie si\u0119 nowych metod w klasie Thread, zmieniaj\u0105c w ten spos\u00f3b API z\u0142otego dziecka Looma. Ka\u017cde przed\u0142u\u017caj\u0105ce si\u0119 API to jednak nieco inna historia i inny corner case, co utrudnia wypracowanie jednego, wsp\u00f3lnego rozwi\u0105zania. Pewnym rozwi\u0105zaniem mog\u0142oby by\u0107 szersza adopcja fazy inkubacji, ale to te\u017c w obecnej formie nie jest rozwi\u0105zanie problemu &#8211; inkubowane funkcje nie mog\u0105 by\u0107 u\u017cyte w innych cz\u0119\u015bciach j\u0119zyka. Ma to sens, s\u0105 one bowiem z za\u0142o\u017cenia niestabilne, ale z tego wzgl\u0119du nie nadaj\u0105 si\u0119 do rozwijania szerszych inicjatyw.<\/p>\n\n\n\n<p>Konkluzje? Na razie brak, ale po pierwsze mamy do czynienia z Draftem, a po drugie istnieje warto\u015b\u0107 w samym powrocie do korzeni i zrobieniu sobie retrospektywy. Zobaczymy, jakie wnioski zostan\u0105 z takowej wyci\u0105gni\u0119te.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"bonus-source-buddy-i-najbardziej-buzzwordowy-saper-swiata\" data-num=4>Bonus: Source Buddy i najbardziej Buzzwordowy Saper \u015bwiata<\/h2>\n\n\n\n<p>\u017beby \u0142adnie podsumowa\u0107 t\u0105 edycj\u0119, pe\u0142n\u0105 temat\u00f3w procesowych mam dla Was dwa projekty, kt\u00f3rymi mo\u017cecie pobawi\u0107 si\u0119 ju\u017c dzisiaj. Oba s\u0105 na tyle ciekawe, \u017ce bardzo chcia\u0142bym aby uzyska\u0142y nieco wi\u0119ksz\u0105 publik\u0119.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Source Buddy<\/h3>\n\n\n\n<p>Pierwszy z nich to <a href=\"https:\/\/github.com\/sourcebuddy\/sourcebuddy\/blob\/main\/README.adoc\">Source Buddy<\/a>, czyli swoisty eval dla Javy, kt\u00f3rego pierwszy oficjalny release mia\u0142 miejsce 4 stycznia. Biblioteka pozwala na przekazanie (jako Stringa) fragmentu kodu Javowego, kt\u00f3rego dla Ciebie skompiluje i wygeneruje dzia\u0142aj\u0105ce Javowe obiekty. Za przyk\u0142ad niech pos\u0142u\u017cy ten fragment oficjalnego Readme.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>String source = &quot;&quot;&quot;\n        package com.sb.demo;\n\n        public class MyClass implements Talker {\n            @Override\n            public void say() {\n                System.out.println(&quot;Hello, Buddy!&quot;);\n          }\n        }&quot;&quot;&quot;;\nClass&lt;?&gt; myClassClass = Compiler.compile(source);\nTalker myClass = (Talker) myClassClass.getConstructor().newInstance();\nmyClass.say();\n<\/code><\/pre>\n\n\n\n<p>Czy uruchomi\u0142bym to na produkcji? Bro\u0144 ci\u0119, panie Bo\u017ce, ale wyobra\u017cam sobie, \u017ce w przypadku jakich\u015b ma\u0142ych skrypt\u00f3w lub upili pisanych na w\u0142asne potrzeby taki bieda-metaprograming mo\u017ce by\u0107 ca\u0142kiem u\u017cytecznym narz\u0119dziem. Dlatego te\u017c moim zdaniem warto mie\u0107 \u015bwiadomo\u015b\u0107 jego istnienia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">minesweeper-csp<\/h3>\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\/01\/image-12.png\" alt=\"\" class=\"wp-image-14083\" width=\"395\" height=\"250\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-12.png 790w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-12-300x189.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-12-768x485.png 768w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/figure><\/div>\n\n\n<p>Drugi z projekt\u00f3w to Saper. Ale nie taki zwyk\u0142y saper. Projekt Elliota Barlasa, <a href=\"https:\/\/github.com\/ebarlas\/minesweeper-csp\">ebarlas\/minesweeper-csp<\/a> stanowi bowiem wprowadzenie do a\u017c dw\u00f3ch koncept\u00f3w.<\/p>\n\n\n\n<p>Po pierwsze, jego aplikacja u\u017cywa Wirtualnych W\u0105tk\u00f3w. Co prawda nie brakuje dobrych projekt\u00f3w pokazuj\u0105cych w praktyce u\u017cycie Looma (ja polecam cho\u0107by <a href=\"https:\/\/github.com\/nipafx\/loom-lab\">Loom Lab<\/a> od wspomnianego w pierwszej sekcji Nicolaia Parloga), ale zawsze przytul\u0119 ch\u0119tnie kolejny. Dodatkowo, mamy tutaj do czynienia z gr\u0105, kt\u00f3rej zasady s\u0105 znane w zasadzie ka\u017cdemu, przez co unikamy potrzeby t\u0142umaczenia domeny.<\/p>\n\n\n\n<p>Drugim, nawet ciekawszym aspektem projektu, jest przyj\u0119ty przez Elliota model wsp\u00f3\u0142bie\u017cno\u015bci. Projekt opiera si\u0119 bowiem na CSP, czyli communicating sequential processes, b\u0119d\u0105cego podstaw\u0105 tego, jak wsp\u00f3\u0142bie\u017cno\u015b\u0107 dzia\u0142a min. w takim Go, Clojure czy Kotlinie dzi\u0119ki Korutynom. Do tej pory ten spos\u00f3b programowania by\u0142 poza zasi\u0119giem programist\u00f3w Javy, ale dzi\u0119ki projektowi Loom nareszcie poszerzy\u0142 si\u0119 wachlarz dost\u0119pnych dla nas rozwi\u0105za\u0144. Je\u015bli szukacie dobrego wprowadzenia do CSP polecam wprowadzenie do tematu z <a href=\"https:\/\/cs.stanford.edu\/people\/eroberts\/courses\/soco\/projects\/2008-09\/tony-hoare\/csp.html\">Uniwersytetu Stanford<\/a>, prezentacje Rich Hickey na temat implementacji tej funkcjonalno\u015bci w Clojure albo po prostu analiz\u0119 kodu opisywanego minesweeper-csp.<\/p>\n\n\n\n<p>Wspomnienia &#8211; moj\u0105 pierwsz\u0105 aplikacj\u0105 okienkow\u0105 (i jedn\u0105 z ostatnich) by\u0142 Saper napisany (i troch\u0119 wyklikany) w Borland C++. Ma\u0142o kt\u00f3ra aplikacja sprawi\u0142a mi potem tyle rado\u015bci.<\/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\/01\/image-13-1024x1024.png\" alt=\"\" class=\"wp-image-14086\" width=\"512\" height=\"512\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-1024x1024.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-300x300.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-150x150.png 150w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-768x768.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-1536x1536.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13.png 2048w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">A\u017c nabra\u0142em ochot\u0119 zagra\u0107 w Sapera. Je\u015bli te\u017c tak macie, <a href=\"https:\/\/minesweeper.online\/\">odkry\u0142em istnienie przyjemnej wersji Online.<\/a><\/figcaption><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>No, po do\u015b\u0107 powolnym starcie, 2023 wreszcie mo\u017cna uzna\u0107 za oficjalnie rozpocz\u0119ty &#8211; zacz\u0105\u0142 si\u0119 ruch zar\u00f3wno w JEPach, jak i listach mailingowych Javy. <\/p>\n","protected":false},"author":10,"featured_media":14100,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-14080","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"8","feature_image_blog":{"ID":14337,"id":14337,"title":"ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c","filename":"ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","filesize":1948636,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","link":"https:\/\/vived.io\/pl\/jak-wejsc-w-swiat-javy-w-2023-jvm-weekly-121\/arturskowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-2\/","alt":"","author":"10","description":"","caption":"","name":"arturskowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-2","status":"inherit","uploaded_to":13915,"date":"2023-02-03 09:37:47","modified":"2023-02-03 09:37:47","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1536,"height":1024,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-300x200.png","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-768x512.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c-1024x683.png","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","2048x2048-width":1536,"2048x2048-height":1024,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_doors_to_narnia_55015e46-d007-45af-b12d-e98744032b6c.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.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>JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - 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\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - Vived\" \/>\n<meta property=\"og:description\" content=\"No, po do\u015b\u0107 powolnym starcie, 2023 wreszcie mo\u017cna uzna\u0107 za oficjalnie rozpocz\u0119ty - zacz\u0105\u0142 si\u0119 ruch zar\u00f3wno w JEPach, jak i listach mailingowych Javy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-26T11:46:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-03T09:39:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.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\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview &#8211; JVM Weekly vol. 122\",\"datePublished\":\"2023-01-26T11:46:25+00:00\",\"dateModified\":\"2023-02-03T09:39:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\"},\"wordCount\":1757,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\",\"url\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\",\"name\":\"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png\",\"datePublished\":\"2023-01-26T11:46:25+00:00\",\"dateModified\":\"2023-02-03T09:39:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview &#8211; JVM Weekly vol. 122\"}]},{\"@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":"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - 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\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/","og_locale":"pl_PL","og_type":"article","og_title":"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - Vived","og_description":"No, po do\u015b\u0107 powolnym starcie, 2023 wreszcie mo\u017cna uzna\u0107 za oficjalnie rozpocz\u0119ty - zacz\u0105\u0142 si\u0119 ruch zar\u00f3wno w JEPach, jak i listach mailingowych Javy.","og_url":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/","og_site_name":"Vived","article_published_time":"2023-01-26T11:46:25+00:00","article_modified_time":"2023-02-03T09:39:16+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.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\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview &#8211; JVM Weekly vol. 122","datePublished":"2023-01-26T11:46:25+00:00","dateModified":"2023-02-03T09:39:16+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/"},"wordCount":1757,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/","url":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/","name":"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview - JVM Weekly vol. 122 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png","datePublished":"2023-01-26T11:46:25+00:00","dateModified":"2023-02-03T09:39:16+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2-7.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jdk-wkracza-w-2023-plany-na-rok-pierwsze-jepy-i-retrospektywa-funkcji-preview-jvm-weekly-vol-122\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JDK wkracza w 2023: plany na rok, pierwsze JEPy i retrospektywa funkcji Preview &#8211; JVM Weekly vol. 122"}]},{"@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. Co 2023 przyniesie dla Javy?<\/h2>\n","innerContent":["\n<h2>1. Co 2023 przyniesie dla Javy?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To \u017ceby dobrze zacz\u0105\u0107 dzisiejsz\u0105 edycj\u0119: Nicolai Parlog, Developer Advocate Javy w Oracle jak co roku przygotowa\u0142 podsumowanie tego, co tw\u00f3rcy j\u0119zyka szykuj\u0105 na najbli\u017csze dwana\u015bcie miesi\u0119cy. \u017beby przekona\u0107 Was, \u017ce b\u0119dzie to najlepiej sp\u0119dzone 10 minut, \u017ceby zbudowa\u0107 sobie obraz Javy w 2023, warto spojrze\u0107 cho\u0107by na zakres tematyczny ca\u0142o\u015bci.<\/p>\n","innerContent":["\n<p>To \u017ceby dobrze zacz\u0105\u0107 dzisiejsz\u0105 edycj\u0119: Nicolai Parlog, Developer Advocate Javy w Oracle jak co roku przygotowa\u0142 podsumowanie tego, co tw\u00f3rcy j\u0119zyka szykuj\u0105 na najbli\u017csze dwana\u015bcie miesi\u0119cy. \u017beby przekona\u0107 Was, \u017ce b\u0119dzie to najlepiej sp\u0119dzone 10 minut, \u017ceby zbudowa\u0107 sobie obraz Javy w 2023, warto spojrze\u0107 cho\u0107by na zakres tematyczny ca\u0142o\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W czasie kr\u00f3tszym ni\u017c trwa <a href=\"https:\/\/www.youtube.com\/watch?v=iofT_kc7FH8\">pojedyncze przes\u0142uchanie pe\u0142nej wersji piosenki \"Again\" Archive<\/a> (co r\u00f3wnie\u017c polecam!) Nicolai przechodzi nie tylko przez Looma czy Panam\u0119, ale r\u00f3wnie\u017c pozwoli Wam lepiej zrozumie\u0107 plany na GraalVM, projekt Leyden czy te\u017c Liliput. Je\u017celi czytacie regularnie ten newsletter, pewnie nazwy te zd\u0105\u017cy\u0142y si\u0119 Wam obi\u0107 o uszy, ale w dalszym ci\u0105gu polecam - uwielbiam, jak zgrabnie i dynamicznie udaje mu si\u0119 przej\u015b\u0107 przez te wszystkie tematy w tak kr\u00f3tkim czasie - zazdroszcz\u0119 mu tej zwi\u0119z\u0142o\u015bci w przekazie. My\u015bl\u0119, \u017ce je\u015bli nawet tematy nie s\u0105 Wam obce, to ca\u0142o\u015b\u0107 pozwoli Wam zar\u00f3wno na pewn\u0105 powt\u00f3rk\u0119, jak i u\u0142o\u017cenie ca\u0142o\u015bci w pewnym szerszym kontek\u015bcie.<\/p>\n","innerContent":["\n<p>W czasie kr\u00f3tszym ni\u017c trwa <a href=\"https:\/\/www.youtube.com\/watch?v=iofT_kc7FH8\">pojedyncze przes\u0142uchanie pe\u0142nej wersji piosenki \"Again\" Archive<\/a> (co r\u00f3wnie\u017c polecam!) Nicolai przechodzi nie tylko przez Looma czy Panam\u0119, ale r\u00f3wnie\u017c pozwoli Wam lepiej zrozumie\u0107 plany na GraalVM, projekt Leyden czy te\u017c Liliput. Je\u017celi czytacie regularnie ten newsletter, pewnie nazwy te zd\u0105\u017cy\u0142y si\u0119 Wam obi\u0107 o uszy, ale w dalszym ci\u0105gu polecam - uwielbiam, jak zgrabnie i dynamicznie udaje mu si\u0119 przej\u015b\u0107 przez te wszystkie tematy w tak kr\u00f3tkim czasie - zazdroszcz\u0119 mu tej zwi\u0119z\u0142o\u015bci w przekazie. My\u015bl\u0119, \u017ce je\u015bli nawet tematy nie s\u0105 Wam obce, to ca\u0142o\u015b\u0107 pozwoli Wam zar\u00f3wno na pewn\u0105 powt\u00f3rk\u0119, jak i u\u0142o\u017cenie ca\u0142o\u015bci w pewnym szerszym kontek\u015bcie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No, to teraz wszyscy przestajemy czyta\u0107 i widzimy si\u0119 z powrotem za 10 minut (to nie koniec dzisiejszej edycji, mam dla Was jeszcze kilka ciekawych informacji, wi\u0119c wr\u00f3\u0107cie po ogl\u0105dni\u0119ciu):<\/p>\n","innerContent":["\n<p>No, to teraz wszyscy przestajemy czyta\u0107 i widzimy si\u0119 z powrotem za 10 minut (to nie koniec dzisiejszej edycji, mam dla Was jeszcze kilka ciekawych informacji, wi\u0119c wr\u00f3\u0107cie po ogl\u0105dni\u0119ciu):<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=-sfB40FHfJE","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=-sfB40FHfJE\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=-sfB40FHfJE\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Musicie przyzna\u0107, \u017ce 2023 zapowiada si\u0119 bardzo smakowicie. Osobi\u015bcie licz\u0119, \u017ce to jednak jeszcze nie wszystko - w ko\u0144cu 2022 przyni\u00f3s\u0142 nam sporo niespodzianek.<\/p>\n","innerContent":["\n<p>Musicie przyzna\u0107, \u017ce 2023 zapowiada si\u0119 bardzo smakowicie. Osobi\u015bcie licz\u0119, \u017ce to jednak jeszcze nie wszystko - w ko\u0144cu 2022 przyni\u00f3s\u0142 nam sporo niespodzianek.<\/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":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-sfB40FHfJE\">Java's Plans for 2023 - Inside Java Newscast #40<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-sfB40FHfJE\">Java's Plans for 2023 - Inside Java Newscast #40<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Pierwsze JEPy AD 2023<\/h2>\n","innerContent":["\n<h2>2. Pierwsze JEPy AD 2023<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c wiemy, co czeka nas w 2023, to czas przygl\u0105dn\u0105\u0107 si\u0119 temu, co ju\u017c przyni\u00f3s\u0142. Stycze\u0144 powoli si\u0119 rozkr\u0119ca\u0142, ale ostatni tydzie\u0144 to sporo ciekawych og\u0142osze\u0144 i cieplutkich informacji prosto z list mailingowych Javy.<\/p>\n","innerContent":["\n<p>A jak ju\u017c wiemy, co czeka nas w 2023, to czas przygl\u0105dn\u0105\u0107 si\u0119 temu, co ju\u017c przyni\u00f3s\u0142. Stycze\u0144 powoli si\u0119 rozkr\u0119ca\u0142, ale ostatni tydzie\u0144 to sporo ciekawych og\u0142osze\u0144 i cieplutkich informacji prosto z list mailingowych Javy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwsza z nich to JEP przygotowywany pod parasolk\u0105 Projektu Amber: <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a>. Nale\u017cy ona do mojej ulubionej kategorii zmian z jednej strony bardzo praktycznych, z drugiej mocno minimalistycznych, a w dodatku do tego - mocno skomplikowanych i sprawiaj\u0105cych, \u017ce lepiej rozumiem (i mam nadzieje, \u017ce wy r\u00f3wnie\u017c) dzia\u0142anie Javy pod mask\u0105. Mowa tu bowiem o pr\u00f3bie eliminacji jednego z bardziej niezrozumia\u0142ych dla pocz\u0105tkuj\u0105cych, a irytuj\u0105cych dla do\u015bwiadczonych programist\u00f3w mechanizm\u00f3w Javy - wymagania bezpo\u015bredniego wywo\u0142ywania konstruktora klasy, po kt\u00f3rej si\u0119 dziedziczy, jako pierwszej operacji w klasie dziedzicz\u0105cej.<\/p>\n","innerContent":["\n<p>Pierwsza z nich to JEP przygotowywany pod parasolk\u0105 Projektu Amber: <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a>. Nale\u017cy ona do mojej ulubionej kategorii zmian z jednej strony bardzo praktycznych, z drugiej mocno minimalistycznych, a w dodatku do tego - mocno skomplikowanych i sprawiaj\u0105cych, \u017ce lepiej rozumiem (i mam nadzieje, \u017ce wy r\u00f3wnie\u017c) dzia\u0142anie Javy pod mask\u0105. Mowa tu bowiem o pr\u00f3bie eliminacji jednego z bardziej niezrozumia\u0142ych dla pocz\u0105tkuj\u0105cych, a irytuj\u0105cych dla do\u015bwiadczonych programist\u00f3w mechanizm\u00f3w Javy - wymagania bezpo\u015bredniego wywo\u0142ywania konstruktora klasy, po kt\u00f3rej si\u0119 dziedziczy, jako pierwszej operacji w klasie dziedzicz\u0105cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W skr\u00f3cie, <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">nowy Draft<\/a> chce umo\u017cliwi\u0107 np. walidacj\u0119 (przyk\u0142ad prosto z JEP-a):<\/p>\n","innerContent":["\n<p>W skr\u00f3cie, <a href=\"https:\/\/openjdk.org\/jeps\/8300786\">nowy Draft<\/a> chce umo\u017cliwi\u0107 np. walidacj\u0119 (przyk\u0142ad prosto z JEP-a):<\/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>public class PositiveBigInteger extends BigInteger {\n\n    public PositiveBigInteger(long value) {\n        if (value &lt;= 0)\n            throw new IllegalArgumentException(\"non-positive value\");\n        super(value);\n    }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>public class PositiveBigInteger extends BigInteger {\n\n    public PositiveBigInteger(long value) {\n        if (value &lt;= 0)\n            throw new IllegalArgumentException(\"non-positive value\");\n        super(value);\n    }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiana jak zmiana, ma ona jednak dwa bardzo ciekawe aspekty. Po pierwsze (co \u0142atwe do przewidzenia) - nie jest ona tak oczywista do przeprowadzenia, ze wzgl\u0119du bowiem na wsteczn\u0105 kompatybilno\u015b\u0107 czy niekt\u00f3re przypadki brzegowe tworzenia hierarchii klas, co dobrze zosta\u0142o opisane we wspomnianym JEP-ie. Polecam jednak jego lektur\u0119 te\u017c dlatego, \u017ce ca\u0142o\u015b\u0107 \u0142adnie uwidacznia \u017ce specyfikacja Javy jako j\u0119zyka oraz specyfikacja JVM maj\u0105 nieco inny poziom \"permisywno\u015bci\". To, \u017ce JVM pozwala na wi\u0119cej pewnie nikogo nie zdziwi (w ko\u0144cu powsta\u0142y na nim takie j\u0119zyki jak Kotlin i Scala), ale tutaj ten rzadko poruszany aspekt zosta\u0142 wy\u0142uszczona na prostym do zrozumienia przyk\u0142adzie.<\/p>\n","innerContent":["\n<p>Zmiana jak zmiana, ma ona jednak dwa bardzo ciekawe aspekty. Po pierwsze (co \u0142atwe do przewidzenia) - nie jest ona tak oczywista do przeprowadzenia, ze wzgl\u0119du bowiem na wsteczn\u0105 kompatybilno\u015b\u0107 czy niekt\u00f3re przypadki brzegowe tworzenia hierarchii klas, co dobrze zosta\u0142o opisane we wspomnianym JEP-ie. Polecam jednak jego lektur\u0119 te\u017c dlatego, \u017ce ca\u0142o\u015b\u0107 \u0142adnie uwidacznia \u017ce specyfikacja Javy jako j\u0119zyka oraz specyfikacja JVM maj\u0105 nieco inny poziom \"permisywno\u015bci\". To, \u017ce JVM pozwala na wi\u0119cej pewnie nikogo nie zdziwi (w ko\u0144cu powsta\u0142y na nim takie j\u0119zyki jak Kotlin i Scala), ale tutaj ten rzadko poruszany aspekt zosta\u0142 wy\u0142uszczona na prostym do zrozumienia przyk\u0142adzie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Informacja o drugiej zmianie, kt\u00f3r\u0105 przynie\u015b\u0107 ma Java w najbli\u017cszej(?) przysz\u0142o\u015bci nie pochodzi z JEP-a, a bezpo\u015brednio z list mailingowych. Okazuje si\u0119 bowiem, \u017ce tw\u00f3rcy j\u0119zyka mocno wzi\u0119li sobie do serca od\u015bwie\u017cenie standardu Javadoc. Rok 2022 przyni\u00f3s\u0142 mo\u017cliwo\u015b\u0107 dok\u0142adania w nim snippet\u00f3w kodu, aktualnie za\u015b trwaj\u0105 dyskusje nad mo\u017cliwo\u015bci\u0105 wsparcia dla Markdowna. Tw\u00f3rcy Javy (w tym wypadku Jonathan Gibbons z Oracle) zauwa\u017caj\u0105 zalety tego j\u0119zyka znacznik\u00f3w, nie pozostaj\u0105 bezkrytyczni. Wskazuj\u0105 bowiem na kilka problem\u00f3w, zw\u0142aszcza je\u015bli chodzi o kompatybilno\u015b\u0107 z obecnymi rozwi\u0105zaniami u\u017cywanymi przez Javadoc, mocno opartymi na HTML-u. I cho\u0107by dla powy\u017cszej argumentacji <a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">warto oryginaln\u0105 wiadomo\u015b\u0107 i p\u0105czkuj\u0105c\u0105 z niej dyskusje przeczyta\u0107<\/a>.<\/p>\n","innerContent":["\n<p>Informacja o drugiej zmianie, kt\u00f3r\u0105 przynie\u015b\u0107 ma Java w najbli\u017cszej(?) przysz\u0142o\u015bci nie pochodzi z JEP-a, a bezpo\u015brednio z list mailingowych. Okazuje si\u0119 bowiem, \u017ce tw\u00f3rcy j\u0119zyka mocno wzi\u0119li sobie do serca od\u015bwie\u017cenie standardu Javadoc. Rok 2022 przyni\u00f3s\u0142 mo\u017cliwo\u015b\u0107 dok\u0142adania w nim snippet\u00f3w kodu, aktualnie za\u015b trwaj\u0105 dyskusje nad mo\u017cliwo\u015bci\u0105 wsparcia dla Markdowna. Tw\u00f3rcy Javy (w tym wypadku Jonathan Gibbons z Oracle) zauwa\u017caj\u0105 zalety tego j\u0119zyka znacznik\u00f3w, nie pozostaj\u0105 bezkrytyczni. Wskazuj\u0105 bowiem na kilka problem\u00f3w, zw\u0142aszcza je\u015bli chodzi o kompatybilno\u015b\u0107 z obecnymi rozwi\u0105zaniami u\u017cywanymi przez Javadoc, mocno opartymi na HTML-u. I cho\u0107by dla powy\u017cszej argumentacji <a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">warto oryginaln\u0105 wiadomo\u015b\u0107 i p\u0105czkuj\u0105c\u0105 z niej dyskusje przeczyta\u0107<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podsumowuj\u0105c t\u0105 sekcje - jeszcze w grudniu w ramach issue-trackera Javy pojawi\u0142o si\u0119 kilka nowych pozycji, dotycz\u0105cych prac nad mechnizmem Class Data Sharingu, poprzez usprawnienia na styku z Garbage Collectorem G1 <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8298048\">(1)<\/a><a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296344\">(2)<\/a> czy <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296263\">ulepszenia API i lepsze wsparcie innych GC<\/a>. Nie jest to co\u015b, co mocno wp\u0142ywa na u\u017cytkownika ko\u0144cowego, ale dziele si\u0119 tym, poniewa\u017c zmiany te zosta\u0142y <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">zapowiedziane<\/a> jako czyszczenie przedpola dla projektu Leyden i pojawi\u0105 si\u0119 ju\u017c w JDK 20.<\/p>\n","innerContent":["\n<p>Podsumowuj\u0105c t\u0105 sekcje - jeszcze w grudniu w ramach issue-trackera Javy pojawi\u0142o si\u0119 kilka nowych pozycji, dotycz\u0105cych prac nad mechnizmem Class Data Sharingu, poprzez usprawnienia na styku z Garbage Collectorem G1 <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8298048\">(1)<\/a><a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296344\">(2)<\/a> czy <a href=\"https:\/\/bugs.openjdk.org\/browse\/JDK-8296263\">ulepszenia API i lepsze wsparcie innych GC<\/a>. Nie jest to co\u015b, co mocno wp\u0142ywa na u\u017cytkownika ko\u0144cowego, ale dziele si\u0119 tym, poniewa\u017c zmiany te zosta\u0142y <a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">zapowiedziane<\/a> jako czyszczenie przedpola dla projektu Leyden i pojawi\u0105 si\u0119 ju\u017c w JDK 20.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatniego z JEP-\u00f3w om\u00f3wimy za\u015b sobie w nast\u0119pnej sekcji - jest bowiem mocno unikalny.<\/p>\n","innerContent":["\n<p>Ostatniego z JEP-\u00f3w om\u00f3wimy za\u015b sobie w nast\u0119pnej sekcji - jest bowiem mocno unikalny.<\/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":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300786\">No longer require super() and this() to appear first in a constructor<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">On Markdown in (Java) documentation comments...<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/javadoc-dev\/2023-January\/005563.html\">On Markdown in (Java) documentation comments...<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">CDS improvements with archived Java heap objects<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/hotspot-gc-dev\/2022-December\/040862.html\">CDS improvements with archived Java heap objects<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Jaka przysz\u0142o\u015b\u0107 czeka \u015bcie\u017ck\u0119 Preview - Retrospektywa po czterech latach<\/h2>\n","innerContent":["\n<h2>3. Jaka przysz\u0142o\u015b\u0107 czeka \u015bcie\u017ck\u0119 Preview - Retrospektywa po czterech latach<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kiedy to min\u0119\u0142o... Czy wiecie, \u017ce nowy tryb releasowy Javy ma ju\u017c 4 lata? Pokolenie framework\u00f3w JavaScriptowych zd\u0105\u017cy\u0142o ju\u017c w tym czasie narodzi\u0107 si\u0119 i umrze\u0107.<\/p>\n","innerContent":["\n<p>Kiedy to min\u0119\u0142o... Czy wiecie, \u017ce nowy tryb releasowy Javy ma ju\u017c 4 lata? Pokolenie framework\u00f3w JavaScriptowych zd\u0105\u017cy\u0142o ju\u017c w tym czasie narodzi\u0107 si\u0119 i umrze\u0107.<\/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\/01\/javascript-clown.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiem \u017ce stare i nie prawda, ale dalej \u015bmieszne.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/javascript-clown.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiem \u017ce stare i nie prawda, ale dalej \u015bmieszne.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wprowadzone w 2019 roku zmiany nie tylko zmieni\u0142y tryb releasu nowych wyda\u0144 Javy, wprowadzaj\u0105c co sze\u015bciomiesi\u0119czny release train, ale r\u00f3wnie\u017c w ramach <a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a> wprowadzi\u0142y do j\u0119zyka dwie nowe metody testowania funkcjonalno\u015bci - Preview i Inkubacj\u0119. Przyszed\u0142 teraz najwy\u017cszy czas, aby przygl\u0105dn\u0105\u0107 si\u0119 temu, jak sprawdzi\u0142y si\u0119 w praktyce. Z tej okazji ukaza\u0142 si\u0119 specjalny <a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a>, w kt\u00f3rym Alex Buckley, Specification Lead for the Java Language, analizuje, co si\u0119 uda\u0142o, kt\u00f3re obawy si\u0119 nie spe\u0142ni\u0142y, kt\u00f3re za\u015b miejsca wymagaj\u0105 poprawy.<\/p>\n","innerContent":["\n<p>Wprowadzone w 2019 roku zmiany nie tylko zmieni\u0142y tryb releasu nowych wyda\u0144 Javy, wprowadzaj\u0105c co sze\u015bciomiesi\u0119czny release train, ale r\u00f3wnie\u017c w ramach <a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a> wprowadzi\u0142y do j\u0119zyka dwie nowe metody testowania funkcjonalno\u015bci - Preview i Inkubacj\u0119. Przyszed\u0142 teraz najwy\u017cszy czas, aby przygl\u0105dn\u0105\u0107 si\u0119 temu, jak sprawdzi\u0142y si\u0119 w praktyce. Z tej okazji ukaza\u0142 si\u0119 specjalny <a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a>, w kt\u00f3rym Alex Buckley, Specification Lead for the Java Language, analizuje, co si\u0119 uda\u0142o, kt\u00f3re obawy si\u0119 nie spe\u0142ni\u0142y, kt\u00f3re za\u015b miejsca wymagaj\u0105 poprawy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W skr\u00f3cie: Preview spe\u0142ni\u0142y pok\u0142adane w nich oczekiwania. Pozwoli\u0142y one otrzymywa\u0107 szybszy feedback od spo\u0142eczno\u015bci, testowa\u0107 nowe funkcjonalno\u015bci i (lekko) iterowa\u0107 nad nimi w otwarty spos\u00f3b. We\u017amy cho\u0107by pod uwag\u0119, jaki wielki odd\u017awi\u0119k w spo\u0142eczno\u015bci (i wysyp publikacji) wywo\u0142a\u0142o udost\u0119pnienie wirtualnych w\u0105tk\u00f3w jako Preview. Dodatkowo, znacznemu usprawnieniu uleg\u0142o tempo adopcji nowych funkcji przez tw\u00f3rc\u00f3w wszelakiego toolingu, mog\u0105 oni bowiem pracowa\u0107 nad prawie stabilnym API z du\u017cym wyprzedzeniem. Tak\u017ce Preview by\u0142y \u015bwietnym pomys\u0142em, ale...<\/p>\n","innerContent":["\n<p>W skr\u00f3cie: Preview spe\u0142ni\u0142y pok\u0142adane w nich oczekiwania. Pozwoli\u0142y one otrzymywa\u0107 szybszy feedback od spo\u0142eczno\u015bci, testowa\u0107 nowe funkcjonalno\u015bci i (lekko) iterowa\u0107 nad nimi w otwarty spos\u00f3b. We\u017amy cho\u0107by pod uwag\u0119, jaki wielki odd\u017awi\u0119k w spo\u0142eczno\u015bci (i wysyp publikacji) wywo\u0142a\u0142o udost\u0119pnienie wirtualnych w\u0105tk\u00f3w jako Preview. Dodatkowo, znacznemu usprawnieniu uleg\u0142o tempo adopcji nowych funkcji przez tw\u00f3rc\u00f3w wszelakiego toolingu, mog\u0105 oni bowiem pracowa\u0107 nad prawie stabilnym API z du\u017cym wyprzedzeniem. Tak\u017ce Preview by\u0142y \u015bwietnym pomys\u0142em, ale...<\/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\/01\/meme-natural.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiecie co si\u0119 b\u0119dzie dalej dzia\u0142o<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/meme-natural.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Wiecie co si\u0119 b\u0119dzie dalej dzia\u0142o<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W tej beczce miodu pojawia si\u0119 jednak \u0142y\u017cka dziegciu. W pocz\u0105tkowych za\u0142o\u017ceniach Preview mia\u0142 by\u0107 faz\u0105, w kt\u00f3rej funkcje j\u0119zyka s\u0105 ju\u017c na tyle stabilne, \u017ce pozostaj\u0105 w niej relatywnie kr\u00f3tko. W praktyce jednak potrafimy mie\u0107 funkcjonalno\u015bci posiadaj\u0105ce czwarte\/pi\u0105te Preview (patrz\u0119 na Ciebie, Pattern Matching). Tekst analizuje powody i te s\u0105 bardzo r\u00f3\u017cnorodne - g\u0142\u00f3wnie jednak sprowadzaj\u0105 si\u0119 do oczekiwania na rozw\u00f3j innych cz\u0119\u015bci j\u0119zyka i potrzeb\u0119 dopasowywania si\u0119 do zewn\u0119trznych zmian. Przyk\u0142adem mo\u017ce by\u0107 tutaj druga iteracja Wirtualnych W\u0105tk\u00f3w, kt\u00f3ra musia\u0142a si\u0119 ukaza\u0107 g\u0142\u00f3wnie ze wzgl\u0119du na pojawienie si\u0119 nowych metod w klasie Thread, zmieniaj\u0105c w ten spos\u00f3b API z\u0142otego dziecka Looma. Ka\u017cde przed\u0142u\u017caj\u0105ce si\u0119 API to jednak nieco inna historia i inny corner case, co utrudnia wypracowanie jednego, wsp\u00f3lnego rozwi\u0105zania. Pewnym rozwi\u0105zaniem mog\u0142oby by\u0107 szersza adopcja fazy inkubacji, ale to te\u017c w obecnej formie nie jest rozwi\u0105zanie problemu - inkubowane funkcje nie mog\u0105 by\u0107 u\u017cyte w innych cz\u0119\u015bciach j\u0119zyka. Ma to sens, s\u0105 one bowiem z za\u0142o\u017cenia niestabilne, ale z tego wzgl\u0119du nie nadaj\u0105 si\u0119 do rozwijania szerszych inicjatyw.<\/p>\n","innerContent":["\n<p>W tej beczce miodu pojawia si\u0119 jednak \u0142y\u017cka dziegciu. W pocz\u0105tkowych za\u0142o\u017ceniach Preview mia\u0142 by\u0107 faz\u0105, w kt\u00f3rej funkcje j\u0119zyka s\u0105 ju\u017c na tyle stabilne, \u017ce pozostaj\u0105 w niej relatywnie kr\u00f3tko. W praktyce jednak potrafimy mie\u0107 funkcjonalno\u015bci posiadaj\u0105ce czwarte\/pi\u0105te Preview (patrz\u0119 na Ciebie, Pattern Matching). Tekst analizuje powody i te s\u0105 bardzo r\u00f3\u017cnorodne - g\u0142\u00f3wnie jednak sprowadzaj\u0105 si\u0119 do oczekiwania na rozw\u00f3j innych cz\u0119\u015bci j\u0119zyka i potrzeb\u0119 dopasowywania si\u0119 do zewn\u0119trznych zmian. Przyk\u0142adem mo\u017ce by\u0107 tutaj druga iteracja Wirtualnych W\u0105tk\u00f3w, kt\u00f3ra musia\u0142a si\u0119 ukaza\u0107 g\u0142\u00f3wnie ze wzgl\u0119du na pojawienie si\u0119 nowych metod w klasie Thread, zmieniaj\u0105c w ten spos\u00f3b API z\u0142otego dziecka Looma. Ka\u017cde przed\u0142u\u017caj\u0105ce si\u0119 API to jednak nieco inna historia i inny corner case, co utrudnia wypracowanie jednego, wsp\u00f3lnego rozwi\u0105zania. Pewnym rozwi\u0105zaniem mog\u0142oby by\u0107 szersza adopcja fazy inkubacji, ale to te\u017c w obecnej formie nie jest rozwi\u0105zanie problemu - inkubowane funkcje nie mog\u0105 by\u0107 u\u017cyte w innych cz\u0119\u015bciach j\u0119zyka. Ma to sens, s\u0105 one bowiem z za\u0142o\u017cenia niestabilne, ale z tego wzgl\u0119du nie nadaj\u0105 si\u0119 do rozwijania szerszych inicjatyw.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Konkluzje? Na razie brak, ale po pierwsze mamy do czynienia z Draftem, a po drugie istnieje warto\u015b\u0107 w samym powrocie do korzeni i zrobieniu sobie retrospektywy. Zobaczymy, jakie wnioski zostan\u0105 z takowej wyci\u0105gni\u0119te.<\/p>\n","innerContent":["\n<p>Konkluzje? Na razie brak, ale po pierwsze mamy do czynienia z Draftem, a po drugie istnieje warto\u015b\u0107 w samym powrocie do korzeni i zrobieniu sobie retrospektywy. Zobaczymy, jakie wnioski zostan\u0105 z takowej wyci\u0105gni\u0119te.<\/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":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/11\">JEP 11: Incubator Modules<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/12\">JEP 12: Preview Features<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300604\">JEP draft: Preview Features: A Look Back, and A Look Ahead<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus: Source Buddy i najbardziej Buzzwordowy Saper \u015bwiata<\/h2>\n","innerContent":["\n<h2>Bonus: Source Buddy i najbardziej Buzzwordowy Saper \u015bwiata<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby \u0142adnie podsumowa\u0107 t\u0105 edycj\u0119, pe\u0142n\u0105 temat\u00f3w procesowych mam dla Was dwa projekty, kt\u00f3rymi mo\u017cecie pobawi\u0107 si\u0119 ju\u017c dzisiaj. Oba s\u0105 na tyle ciekawe, \u017ce bardzo chcia\u0142bym aby uzyska\u0142y nieco wi\u0119ksz\u0105 publik\u0119.<\/p>\n","innerContent":["\n<p>\u017beby \u0142adnie podsumowa\u0107 t\u0105 edycj\u0119, pe\u0142n\u0105 temat\u00f3w procesowych mam dla Was dwa projekty, kt\u00f3rymi mo\u017cecie pobawi\u0107 si\u0119 ju\u017c dzisiaj. Oba s\u0105 na tyle ciekawe, \u017ce bardzo chcia\u0142bym aby uzyska\u0142y nieco wi\u0119ksz\u0105 publik\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Source Buddy<\/h3>\n","innerContent":["\n<h3>Source Buddy<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwszy z nich to <a href=\"https:\/\/github.com\/sourcebuddy\/sourcebuddy\/blob\/main\/README.adoc\">Source Buddy<\/a>, czyli swoisty eval dla Javy, kt\u00f3rego pierwszy oficjalny release mia\u0142 miejsce 4 stycznia. Biblioteka pozwala na przekazanie (jako Stringa) fragmentu kodu Javowego, kt\u00f3rego dla Ciebie skompiluje i wygeneruje dzia\u0142aj\u0105ce Javowe obiekty. Za przyk\u0142ad niech pos\u0142u\u017cy ten fragment oficjalnego Readme.<\/p>\n","innerContent":["\n<p>Pierwszy z nich to <a href=\"https:\/\/github.com\/sourcebuddy\/sourcebuddy\/blob\/main\/README.adoc\">Source Buddy<\/a>, czyli swoisty eval dla Javy, kt\u00f3rego pierwszy oficjalny release mia\u0142 miejsce 4 stycznia. Biblioteka pozwala na przekazanie (jako Stringa) fragmentu kodu Javowego, kt\u00f3rego dla Ciebie skompiluje i wygeneruje dzia\u0142aj\u0105ce Javowe obiekty. Za przyk\u0142ad niech pos\u0142u\u017cy ten fragment oficjalnego Readme.<\/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>String source = \"\"\"\n        package com.sb.demo;\n\n        public class MyClass implements Talker {\n            @Override\n            public void say() {\n                System.out.println(\"Hello, Buddy!\");\n          }\n        }\"\"\";\nClass&lt;?&gt; myClassClass = Compiler.compile(source);\nTalker myClass = (Talker) myClassClass.getConstructor().newInstance();\nmyClass.say();\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>String source = \"\"\"\n        package com.sb.demo;\n\n        public class MyClass implements Talker {\n            @Override\n            public void say() {\n                System.out.println(\"Hello, Buddy!\");\n          }\n        }\"\"\";\nClass&lt;?&gt; myClassClass = Compiler.compile(source);\nTalker myClass = (Talker) myClassClass.getConstructor().newInstance();\nmyClass.say();\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czy uruchomi\u0142bym to na produkcji? Bro\u0144 ci\u0119, panie Bo\u017ce, ale wyobra\u017cam sobie, \u017ce w przypadku jakich\u015b ma\u0142ych skrypt\u00f3w lub upili pisanych na w\u0142asne potrzeby taki bieda-metaprograming mo\u017ce by\u0107 ca\u0142kiem u\u017cytecznym narz\u0119dziem. Dlatego te\u017c moim zdaniem warto mie\u0107 \u015bwiadomo\u015b\u0107 jego istnienia.<\/p>\n","innerContent":["\n<p>Czy uruchomi\u0142bym to na produkcji? Bro\u0144 ci\u0119, panie Bo\u017ce, ale wyobra\u017cam sobie, \u017ce w przypadku jakich\u015b ma\u0142ych skrypt\u00f3w lub upili pisanych na w\u0142asne potrzeby taki bieda-metaprograming mo\u017ce by\u0107 ca\u0142kiem u\u017cytecznym narz\u0119dziem. Dlatego te\u017c moim zdaniem warto mie\u0107 \u015bwiadomo\u015b\u0107 jego istnienia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>minesweeper-csp<\/h3>\n","innerContent":["\n<h3>minesweeper-csp<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":14083,"width":395,"height":250,"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\/01\/image-12.png\" alt=\"\" class=\"wp-image-14083\" width=\"395\" height=\"250\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-12.png\" alt=\"\" class=\"wp-image-14083\" width=\"395\" height=\"250\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Drugi z projekt\u00f3w to Saper. Ale nie taki zwyk\u0142y saper. Projekt Elliota Barlasa, <a href=\"https:\/\/github.com\/ebarlas\/minesweeper-csp\">ebarlas\/minesweeper-csp<\/a> stanowi bowiem wprowadzenie do a\u017c dw\u00f3ch koncept\u00f3w.<\/p>\n","innerContent":["\n<p>Drugi z projekt\u00f3w to Saper. Ale nie taki zwyk\u0142y saper. Projekt Elliota Barlasa, <a href=\"https:\/\/github.com\/ebarlas\/minesweeper-csp\">ebarlas\/minesweeper-csp<\/a> stanowi bowiem wprowadzenie do a\u017c dw\u00f3ch koncept\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po pierwsze, jego aplikacja u\u017cywa Wirtualnych W\u0105tk\u00f3w. Co prawda nie brakuje dobrych projekt\u00f3w pokazuj\u0105cych w praktyce u\u017cycie Looma (ja polecam cho\u0107by <a href=\"https:\/\/github.com\/nipafx\/loom-lab\">Loom Lab<\/a> od wspomnianego w pierwszej sekcji Nicolaia Parloga), ale zawsze przytul\u0119 ch\u0119tnie kolejny. Dodatkowo, mamy tutaj do czynienia z gr\u0105, kt\u00f3rej zasady s\u0105 znane w zasadzie ka\u017cdemu, przez co unikamy potrzeby t\u0142umaczenia domeny.<\/p>\n","innerContent":["\n<p>Po pierwsze, jego aplikacja u\u017cywa Wirtualnych W\u0105tk\u00f3w. Co prawda nie brakuje dobrych projekt\u00f3w pokazuj\u0105cych w praktyce u\u017cycie Looma (ja polecam cho\u0107by <a href=\"https:\/\/github.com\/nipafx\/loom-lab\">Loom Lab<\/a> od wspomnianego w pierwszej sekcji Nicolaia Parloga), ale zawsze przytul\u0119 ch\u0119tnie kolejny. Dodatkowo, mamy tutaj do czynienia z gr\u0105, kt\u00f3rej zasady s\u0105 znane w zasadzie ka\u017cdemu, przez co unikamy potrzeby t\u0142umaczenia domeny.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Drugim, nawet ciekawszym aspektem projektu, jest przyj\u0119ty przez Elliota model wsp\u00f3\u0142bie\u017cno\u015bci. Projekt opiera si\u0119 bowiem na CSP, czyli communicating sequential processes, b\u0119d\u0105cego podstaw\u0105 tego, jak wsp\u00f3\u0142bie\u017cno\u015b\u0107 dzia\u0142a min. w takim Go, Clojure czy Kotlinie dzi\u0119ki Korutynom. Do tej pory ten spos\u00f3b programowania by\u0142 poza zasi\u0119giem programist\u00f3w Javy, ale dzi\u0119ki projektowi Loom nareszcie poszerzy\u0142 si\u0119 wachlarz dost\u0119pnych dla nas rozwi\u0105za\u0144. Je\u015bli szukacie dobrego wprowadzenia do CSP polecam wprowadzenie do tematu z <a href=\"https:\/\/cs.stanford.edu\/people\/eroberts\/courses\/soco\/projects\/2008-09\/tony-hoare\/csp.html\">Uniwersytetu Stanford<\/a>, prezentacje Rich Hickey na temat implementacji tej funkcjonalno\u015bci w Clojure albo po prostu analiz\u0119 kodu opisywanego minesweeper-csp.<\/p>\n","innerContent":["\n<p>Drugim, nawet ciekawszym aspektem projektu, jest przyj\u0119ty przez Elliota model wsp\u00f3\u0142bie\u017cno\u015bci. Projekt opiera si\u0119 bowiem na CSP, czyli communicating sequential processes, b\u0119d\u0105cego podstaw\u0105 tego, jak wsp\u00f3\u0142bie\u017cno\u015b\u0107 dzia\u0142a min. w takim Go, Clojure czy Kotlinie dzi\u0119ki Korutynom. Do tej pory ten spos\u00f3b programowania by\u0142 poza zasi\u0119giem programist\u00f3w Javy, ale dzi\u0119ki projektowi Loom nareszcie poszerzy\u0142 si\u0119 wachlarz dost\u0119pnych dla nas rozwi\u0105za\u0144. Je\u015bli szukacie dobrego wprowadzenia do CSP polecam wprowadzenie do tematu z <a href=\"https:\/\/cs.stanford.edu\/people\/eroberts\/courses\/soco\/projects\/2008-09\/tony-hoare\/csp.html\">Uniwersytetu Stanford<\/a>, prezentacje Rich Hickey na temat implementacji tej funkcjonalno\u015bci w Clojure albo po prostu analiz\u0119 kodu opisywanego minesweeper-csp.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wspomnienia - moj\u0105 pierwsz\u0105 aplikacj\u0105 okienkow\u0105 (i jedn\u0105 z ostatnich) by\u0142 Saper napisany (i troch\u0119 wyklikany) w Borland C++. Ma\u0142o kt\u00f3ra aplikacja sprawi\u0142a mi potem tyle rado\u015bci.<\/p>\n","innerContent":["\n<p>Wspomnienia - moj\u0105 pierwsz\u0105 aplikacj\u0105 okienkow\u0105 (i jedn\u0105 z ostatnich) by\u0142 Saper napisany (i troch\u0119 wyklikany) w Borland C++. Ma\u0142o kt\u00f3ra aplikacja sprawi\u0142a mi potem tyle rado\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":14086,"width":512,"height":512,"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\/01\/image-13-1024x1024.png\" alt=\"\" class=\"wp-image-14086\" width=\"512\" height=\"512\"\/><figcaption class=\"wp-element-caption\">A\u017c nabra\u0142em ochot\u0119 zagra\u0107 w Sapera. Je\u015bli te\u017c tak macie, <a href=\"https:\/\/minesweeper.online\/\">odkry\u0142em istnienie przyjemnej wersji Online.<\/a><\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-13-1024x1024.png\" alt=\"\" class=\"wp-image-14086\" width=\"512\" height=\"512\"\/><figcaption class=\"wp-element-caption\">A\u017c nabra\u0142em ochot\u0119 zagra\u0107 w Sapera. Je\u015bli te\u017c tak macie, <a href=\"https:\/\/minesweeper.online\/\">odkry\u0142em istnienie przyjemnej wersji Online.<\/a><\/figcaption><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14080","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=14080"}],"version-history":[{"count":17,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14080\/revisions"}],"predecessor-version":[{"id":14339,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14080\/revisions\/14339"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/14100"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=14080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=14080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=14080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}