{"id":16479,"date":"2023-07-25T08:44:40","date_gmt":"2023-07-25T06:44:40","guid":{"rendered":"https:\/\/vived.io\/?p=16479"},"modified":"2023-07-26T07:11:10","modified_gmt":"2023-07-26T05:11:10","slug":"jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/","title":{"rendered":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim &#8211; JVM Weekly vol. 143"},"content":{"rendered":"\n<h2 id=\"1-jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim\" data-num=1>1. JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim<\/h2>\n\n\n\n<p>Nie bez kozery m\u00f3wi si\u0119 o tym, \u017ce nie ma lepszej nauki ni\u017c taka poprzez praktyk\u0119. Niekt\u00f3rzy bior\u0105 to sobie mocno do serca mocniej ni\u017c inni. Przyk\u0142adowo, <a href=\"https:\/\/twitter.com\/andreabergia\">Andrea Bergia<\/a>, Principal Software Engineer w <a class=\"autolink\" href=\"https:\/\/lastminute.com\">lastminute.com<\/a>, postanowi\u0142 na przyk\u0142ad nauczy\u0107 si\u0119 JVM poprzez napisanie jego uproszczonej implementacji. Dodatkowo, jak mo\u017cecie si\u0119 domy\u015ble\u0107 m\u00f3wimy tutaj o 10x developerze, wi\u0119c ten zrobi\u0142 to&#8230; w Rust.<\/p>\n\n\n\n<p>Projekt, nazwany <strong>rjvm<\/strong>, cho\u0107 nie obs\u0142uguje on niekt\u00f3rych funkcji, takich jak generyki, w\u0105tki, refleksje, adnotacje, I\/O, czy kompilacj\u0119 JIT, to autor z powodzeniem zaimplementowa\u0142 kilka nietrywialnych komponent\u00f3w, w tym instrukcje steruj\u0105ce, tworzenie obiekt\u00f3w i prymityw\u00f3w, wsparcie metod wirtualnych i statycznych, wyj\u0105tki, garbage collector oraz mo\u017cliwo\u015b\u0107 zaczytywania klas z zewn\u0119trznych pliku <strong>.jar<\/strong>. \u017beby za\u015b dopi\u0105\u0107 ju\u017c robi\u0105c\u0105 wra\u017cenie ca\u0142o\u015b\u0107, autor opracowa\u0142 zestaw test\u00f3w ilustruj\u0105cych dzia\u0142anie <strong>rjvm<\/strong> w oparciu o prawdziwy plik <strong>rt.jar<\/strong> z pochodz\u0105cy z OpenJDK 7.<\/p>\n\n\n\n<p>Autor podzieli\u0142 si\u0119 swoimi do\u015bwiadczeniami w ramach dwucz\u0119\u015bciowego (przynajmniej na razie) postu blogowego <a href=\"https:\/\/andreabergia.com\/blog\/2023\/07\/i-have-written-a-jvm-in-rust\/\">I have written a JVM in Rust<\/a>. Andrea, \u017ce najbardziej dumny, jest z zaimplementowania dzia\u0142aj\u0105cego garbage collectora, nawet je\u015bli w stosunkowo prostej wersji. Zgodnie z jego zapowiedziami mo\u017cemy spodziewa\u0107 si\u0119 kolejnych publikacji, badaj\u0105cych dog\u0142\u0119bne aspekty dzia\u0142ania <strong>rjvm<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/L5TAEDo.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>To jednak nie koniec edukacyjnych, oko\u0142o-jvmowych projekt\u00f3w edukacyjnych napisanych w Rust. <strong>Jtcpp<\/strong> to program napisany w j\u0119zyku Rust, kt\u00f3ry konwertuje bytecode JVM na C++ (teraz to ju\u017c mamy prawdziwe kombo). Umo\u017cliwia to kompilacj\u0119 program\u00f3w napisanych w takich j\u0119zykach jak Java i Kotlin do natywnych instrukcji, co w niekt\u00f3rych przypadkach poprawia pono\u0107 wydajno\u015b\u0107, aczkolwiek wyniki nie zach\u0119caj\u0105 do produkcyjnego u\u017cycia (autor podaje bowiem, \u017ce z jego eksperyment\u00f3w mo\u017cna spodziewa\u0107 si\u0119 od 3x przyspieszenia do 50x spowolnienia dzia\u0142ania program\u00f3w). Ca\u0142o\u015b\u0107 sama w sobie jest pono\u0107 do\u015b\u0107 kompletny pod wzgl\u0119dem funkcji j\u0119zyka, ale implementacja standardowej biblioteki Java w C++ jest bardzo ograniczona &#8211; zaimplementowane klasy to String, Object, System oraz PrintStream. Ca\u0142o\u015b\u0107 wi\u0119c nadaje si\u0119 w zasadzie do tworzenia prostych algorytm\u00f3w i aplikacji konsolowych. Ca\u0142o\u015b\u0107 stanowi jednak bardzo interesuj\u0105cy eksperyment. A dlaczego powsta\u0142? Bo mo\u017cna. I to jest pi\u0119kne.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/UE4aYLP.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zw\u0142aszcza, \u017ce <a href=\"https:\/\/github.com\/FractalFir\">GitHub<\/a> wskazuje, \u017ce mamy do czynienia z moim rodakiem, do tego licealist\u0105. <a href=\"https:\/\/www.linkedin.com\/in\/micha%C5%82-kostrubiec-85a037269\/\">Micha\u0142<\/a> &#8211; pi\u0119kna robota \ud83d\ude47.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-aktualizacja-roadmapy-kotlina\" data-num=2>2. Aktualizacja Roadmapy Kotlina<\/h2>\n\n\n\n<p>Ostatnio kiedy si\u0119 widzieli\u015bmy, mieli\u015bmy edycje mocno kotlinow\u0105&#8230; ale okaza\u0142o si\u0119, \u017ce to dalej nie koniec. Od tamtego czasu <a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\">pojawi\u0142a si\u0119 Roadmapa<\/a>. I cho\u0107 sama w sobie nie przynosi nic rewolucyjnego, to i tak wypada ni\u0105 ni\u0105 cho\u0107by rzuci\u0107 okiem.<\/p>\n\n\n\n<p>G\u0142\u00f3wny nacisk po\u0142o\u017cony jest na kilka kluczowych projekt\u00f3w, takich jak znany Wam z poprzedniej edycji kompilator K2, czyli przebudowa kompilatora Kotlin maj\u0105ca na celu zwi\u0119kszenie szybko\u015bci, unifikacji codebase, a to wszystko przy jednoczesnym wprowadzeniu nowych funkcji j\u0119zyka. Trwaj\u0105 r\u00f3wnie\u017c prace nad usprawnieniem Kotlinowego plugina do IntelliJ, kt\u00f3ra to dzi\u0119ki migracji j\u0119zyka na K2 umo\u017cliwi\u0107 ma szybsze uzupe\u0142nianie, pod\u015bwietlanie i wyszukiwanie, a tak\u017ce bardziej stabiln\u0105 analiz\u0119 kodu. Kolejnym priorytetem jest produkcyjne wydanie Kotlin Multiplatform, kt\u00f3ra ma by\u0107 osi\u0105gni\u0119ty dzi\u0119ki poprawie stabilno\u015bci i dokumentacji toolchaina oraz zapewnieniu gwarancji kompatybilno\u015bci. Ulepszeniu maj\u0105 ulec te\u017c funkcje, takie jak nowy mened\u017cer pami\u0119ci Kotlin\/Native, kompatybilno\u015b\u0107 z <code>klib<\/code> i mo\u017cliwo\u015b\u0107 eksportowania kodu Kotlin do Objective-C.<\/p>\n\n\n\n<p>Za cel stawiana jest te\u017c poprawa do\u015bwiadczenia autor\u00f3w bibliotek Kotlinowych poprzez zapewnienie solidnej dokumentacji i narz\u0119dzi do konfigurowania, rozwijania i publikowania takowych. Programi\u015bci &#8222;przemys\u0142owi&#8221; maj\u0105 za\u015b otrzyma\u0107 swoje w\u0142asne zabawki obejmuj\u0105 lepsze raporty kompilacji Kotlin oraz ulepszone do\u015bwiadczenie ze skryptami Kotlinowymi, a tak\u017ce <code>.gradle.kts<\/code>. Ekosystem bibliotek doczeka si\u0119 wyda\u0144 takich jak <code>kotlinx-io<\/code>, nowej bibliotece I\/O, kt\u00f3ra ma zosta\u0107 oparta o <a href=\"https:\/\/github.com\/square\/okio\">okio<\/a> od Square. Doczekamy si\u0119 te\u017c stabilizacji <code>kotlinx-kover<\/code> (narz\u0119dzia Code Coverage) i <code>kotlinx-metadata-jvm<\/code> (biblioteki do odczytu metadanych kompilatora Kotlina).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"432\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-8.png\" alt=\"\" class=\"wp-image-16482\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-8.png 577w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-8-300x225.png 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><figcaption class=\"wp-element-caption\">Sporo tych projekt\u00f3w na roadmapie mamy. A\u017c mi si\u0119 przypomnia\u0142 m\u00f3j ulubiony <a href=\"https:\/\/medium.com\/circleci\/its-the-future-90d0e5361b44\">rant o DevOps<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<p>Dzisiaj na bogato!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Micronaut 4.0<\/h3>\n\n\n\n<p>Zaczniemy od zdecydowanie najwi\u0119kszej premiery ostatnich tygodni. Micronaut, pierwszy z nowej fali nowoczesnych framework\u00f3w Javowych, doczeka\u0142 si\u0119 bowiem nowego du\u017cego wydania.<\/p>\n\n\n\n<p><a href=\"https:\/\/micronaut.io\/2023\/07\/14\/micronaut-framework-4-0-0-released\/\">Micronaut Framework 4.0<\/a> porzuca wsparcie dla wersji Java starszych ni\u017c JDK 17, dzi\u0119ki czemu m\u00f3g\u0142 zrewidowa\u0107 API pod k\u0105tem u\u017cycia nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Ponadto, nowa wersja Klienta HTTP Micronaut opart\u0105 zosta\u0142a na wprowadzonym w JDK 11 kliencie HTTP Java. Porzucenie balastu starych wersji umo\u017cliwi\u0142o te\u017c uzyskanie lepszych wynik\u00f3w je\u015bli chodzi o wydajno\u015b\u0107.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/graemerocher\">Graeme Rocher<\/a>, tw\u00f3rca Micronauta (a wcze\u015bniej Grails), od paru lat pracuje w Oracle, nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce to w\u0142a\u015bnie ta firma sta\u0142a si\u0119 du\u017cym kontrybutorem nowego wydania &#8211; co sprawia, \u017ce defacto macza palce w zar\u00f3wno Micronaucie, jak i Helidonie. To dzi\u0119ki ich wsparciu uzyskujemy mocno przerobion\u0105 integracj\u0119 Micronauta z GraalVM w celu wykorzystania wsp\u00f3\u0142dzielonych metadanych GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od bibliotek innych firm za pomoc\u0105 GraalVM Native Image sta\u0142o si\u0119 \u0142atwiejsze. Micronaut Serialization jest teraz za\u015b modu\u0142em domy\u015blnym, oferuj\u0105c nie u\u017cywaj\u0105ce refleksji, szybkie i bezpieczne interfejsy API serializacji\/deserializacji JSON. Inne godne uwagi zmiany obejmuj\u0105 ulepszon\u0105 obs\u0142ug\u0119 chmur (w tym Oracle Cloud) i jeszcze bardziej modu\u0142ow\u0105 architektur\u0119, co umo\u017cliwia mikroserwisom by\u0107 jeszcze bardziej mikro, umo\u017cliwiaj\u0105c usuni\u0119cie funkcjonalno\u015bci, je\u015bli nie s\u0105 one potrzebne. To ma oczywi\u015bcie pozytywny wp\u0142yw na czas startu ca\u0142o\u015bci. Micronaut doczeka\u0142 si\u0119 te\u017c <a href=\"https:\/\/docs.micronaut.io\/4.0.0\/guide\/#virtualThreads\">wczesnej wersji wsparcia dla VirtualThreads<\/a>.<\/p>\n\n\n\n<p>Je\u015bli chodzi o zale\u017cno\u015bci, Micronaut 4.0 nie zale\u017cy ju\u017c bezpo\u015brednio od SnakeYAML i Micronaut Jackson Databind, co umo\u017cliwi danie programistom wyboru korzystania z Micronaut Serialization lub Micronaut Jackson Databind. Ponadto uko\u0144czono aktualizacj\u0119 pakiet\u00f3w <code>javax<\/code> do pakiet\u00f3w <code>jakarta<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Arrow 1.2<\/h3>\n\n\n\n<p>Z perspektywy programist\u00f3w Javy z pewno\u015bci\u0105 Kotlin jawi si\u0119 jako j\u0119zyk nieco bardziej funkcyjny, ale w dalszym ci\u0105gu do takiej Scali mu daleko. Kotlin Arrow to biblioteka programowania funkcyjnego pr\u00f3buj\u0105ca nieco t\u0105 sytuacje poprawi\u0107, dostarczaj\u0105c typy danych, klasy typ\u00f3w i rozszerzenia, kt\u00f3re u\u0142atwiaj\u0105. Teraz za\u015b wypuszczono jej najnowsz\u0105 wersj\u0119, <a href=\"https:\/\/xebia.com\/blog\/a-new-module-for-typed-errors-in-arrow-1-2-0\/\">Arrow 1.20<\/a>.<\/p>\n\n\n\n<p>Wydanie to zawiera kilka godnych uwagi funkcji. Modu\u0142 Typed errors to nowe podej\u015bcie do zarz\u0105dzania typami b\u0142\u0119d\u00f3w, oferuj\u0105c alternatyw\u0119 dla wcze\u015bniej u\u017cywanych blok\u00f3w obliczeniowych i typ\u00f3w <code>Effect\/EagerEffect<\/code>. Ponadto modu\u0142 <code>resilience<\/code> obejmuje teraz obs\u0142ug\u0119 tak zwanych Sag (kto wie ten wie). Wszystko zosta\u0142o za\u015b okraszone <a href=\"https:\/\/arrow-kt.io\/\">now\u0105 stron\u0105<\/a>, zawieraj\u0105c\u0105 r\u00f3wnie\u017c poprawion\u0105 dokumentacje i przyk\u0142ady.<\/p>\n\n\n\n<p>W ramach przygotowa\u0144 do wydania Arrow 2.0 niekt\u00f3re funkcje i typy przeznaczone do usuni\u0119cia zosta\u0142y oznaczone jako <code>@Deprecated<\/code>. Arrow 1.2.x ma na celu utorowanie drogi dla nadchodz\u0105cej wersji 2.0 poprzez sfinalizowanie interfejs\u00f3w API, uwzgl\u0119dniaj\u0105c sugestii spo\u0142eczno\u015bci. Arrow 2.0 jest planowany tak, aby zbieg\u0142 si\u0119 w czasie z wydaniem Kotlin 2.0, co pomog\u0142oby zapewni\u0107 kompatybilno\u015b\u0107 binarn\u0105 (Arrow generuje spore ilo\u015bci kodu) i u\u0142atwi\u0107 przej\u015bcie na now\u0105 wersje Kotlina.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"375\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-12.png\" alt=\"\" class=\"wp-image-16500\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-12.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-12-300x188.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n<p>Nie ma sprawy, panie Microsoft. Dopiero co wprawdzie mieli\u015bmy edycje <a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">po\u015bwi\u0119con\u0105 LLM-om w Javie<\/a>, ale nowa propozycja firmy jest na tyle ciekawa, \u017ce \u017cal o niej nie wspomnie\u0107. <\/p>\n\n\n\n<p>Semantic Kernel (SK) to SDK umo\u017cliwiaj\u0105ce integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania. Rozszerzalny model programowania SK \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi. <\/p>\n\n\n\n<p>Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/introducing-semantic-kernel-for-java\/\">wyda\u0142 pierwsz\u0105 wersj\u0119 Semantic Kernel for Java<\/a>, biblioteki, kt\u00f3ra umo\u017cliwia programistom Java p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI (jak Azure OpenAI) z ich aplikacjami, za pomoc\u0105 modelu opartego o tak zwane skille. W praktyce wygl\u0105da to mniej wi\u0119cej tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class MyAppSkills {\n    @DefineSKFunction(name = &quot;redactPassword&quot;, description = &quot;Redacts passwords from a message&quot;)\n    public String redactPassword(@SKFunctionInputAttribute String input) {\n      System.out.println(&quot;&#091;redactPassword] Redacting passwords from input: &quot; + input);\n      return input.replaceAll(&quot;password.*&quot;, &quot;******&quot;);\n    }\n  }\n  \n  (...)\n  \n Kernel kernel = SKBuilders.kernel().withKernelConfig(config).build(); kernel.importSkill(new MyAppSkills(), &quot;MyAppSkills&quot;);<\/code><\/pre>\n\n\n\n<p>Programi\u015bci nast\u0119pnie mog\u0105 wykorzysta\u0107 bibliotek\u0119 do tworzenia inteligentnych plan\u00f3w przy u\u017cyciu tak zwanych Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SequentialPlanner planner = new SequentialPlanner(kernel, null, null);\n\nPlan plan = planner.createPlanAsync(\n&quot;For any input with passwords, redact the passwords and send redacted input to sysadmin@corp.net&quot;).block();\n\nSystem.out.println(plan.toPlanString());\n\nString message = &quot;Password changed to password.db=123456abc&quot;;\nString result = plan.invokeAsync(message).block().getResult();\n\nSystem.out.println(&quot; === Result of the plan === &quot;);\nSystem.out.println(result);<\/code><\/pre>\n\n\n\n<p>Semantic Kernel for Java w wersja alfa 0.2.6-alpha jest dost\u0119pna w Maven Central. by pom\u00f3c programistom w rozpocz\u0119ciu pracy i zrozumieniu potencja\u0142u Semantic Kernel for Java, udost\u0119pniono <a href=\"https:\/\/github.com\/microsoft\/semantic-kernel\/tree\/experimental-java\/java\/samples\/sample-code\">kolekcj\u0119 przyk\u0142ad\u00f3w<\/a> <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"315\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-9.png\" alt=\"\" class=\"wp-image-16489\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-9.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-9-300x158.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\">Bardziej skomplikowanych i ciekawszych ni\u017c ten m\u00f3j, ukradziony bezpo\u015brednio z announcementu.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Microsoft Build of OpenJDK \u2013 July 2023 Release<\/h3>\n\n\n\n<p>A jak jeste\u015bmy ju\u017c w temacie Microsoftu, firma og\u0142osi\u0142a r\u00f3wnie\u017c <a href=\"https:\/\/devblogs.microsoft.com\/java\/microsoft-build-of-openjdk-july-2023-release\">wydanie comiesi\u0119cznego zbioru poprawek i aktualizacji zabezpiecze\u0144 dla Microsoft Build OpenJDK<\/a>. Zwykle nie informuj\u0119 o takich zmianach, jednak tym razem jednym ze znacz\u0105cych ulepsze\u0144 jest poprawki escape analysis (analizy ucieczki), kt\u00f3re osi\u0105gn\u0119\u0142y na tyle stabiln\u0105 wersje, \u017ce Microsoft zdecydowa\u0142 si\u0119 je w\u0142\u0105czy\u0107 domy\u015blnie. Dla tych kt\u00f3rzy nie siedz\u0105 w temacie kompilator\u00f3w, analiza ucieczki w Javie to technika optymalizacji, kt\u00f3ra okre\u015bla zakres dost\u0119pno\u015bci obiekt\u00f3w w programie, aby potencjalnie przydzieli\u0107 je na stosie, a nie na stercie. Jest to mechanizm o tyle istotny, \u017ce umo\u017cliwia r\u00f3wnie\u017c dodatkowe optymalizacje, takie jak skalaryzacja obiekt\u00f3w (zast\u0119powanie ich zestaw indywidualnych zmiennych &#8211; skalar\u00f3w) lub eliminacja synchronizacji w\u0105tk\u00f3w. Ulepszenie to ju\u017c dzi\u015b wykorzystywane jest w systemach produkcyjnych w Microsoft i LinkedIn, dzi\u0119ki czemu mo\u017cna je uzna\u0107 za stabilne. U\u017cytkownicy mog\u0105 wy\u0142\u0105czy\u0107 jednak t\u0119 funkcj\u0119, je\u015bli napotkaj\u0105 regresj\u0119 wydajno\u015bci, u\u017cywaj\u0105c flagi <code>-XX:-ReduceAllocationMerges<\/code>.<\/p>\n\n\n\n<p>Dla tych, kt\u00f3rzy si\u0119 martwi\u0105 &#8211; nie jest to tylko ulepszenie specyficzne dla Microsoft JDK Build. Zmiana zosta\u0142a ju\u017c wmergowana w kod OpenJDK i jest dost\u0119pna we <a href=\"https:\/\/github.com\/openjdk\/jdk\/compare\/jdk-22%2B6...jdk-22%2B7\">wczesnych wersjach JDK 22<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Spring Web Flow 3.0<\/h3>\n\n\n\n<p>Spring Web Flow to projekt Spring Framework, kt\u00f3ry zosta\u0142 zaprojektowany, aby pom\u00f3c programistom w tworzeniu aplikacji internetowych zawieraj\u0105cych z\u0142o\u017cone przej\u015bcia mi\u0119dzy stronami. Zapewnia struktur\u0119 do organizowania regu\u0142 nawigacji dzi\u0119ki deklaratywnemu modelowi, kt\u00f3ry pozwala programistom zdefiniowa\u0107 (jak wskazuje nazwa) &#8222;przep\u0142yw&#8221; w aplikacji.<\/p>\n\n\n\n<p>W ostatnim czasie wydano Spring Web Flow <a href=\"https:\/\/spring.io\/projects\/spring-webflow\">w wersji 3.0.0<\/a>. Nowa wersja koncentruje si\u0119 na kompatybilno\u015bci ze Spring Framework 6 i Jakarta EE, zapewniaj\u0105c u\u017cytkownikom mo\u017cliwo\u015b\u0107 wykorzystania najnowszych aktualizacji i ulepsze\u0144 tych platform. Aktualizacja ta wymaga\u0142a jednak usuni\u0119cia Apache Tiles (framework do templatingu), kt\u00f3re nie zosta\u0142 zmigrowany do Jakarta EE. Jako substytut, przyk\u0142adowa aplikacja <code>booking-mvc<\/code> wykorzystuje teraz <a href=\"https:\/\/www.thymeleaf.org\/doc\/articles\/layouts.html\">Thymeleaf Layouts<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scala Metals 1.0<\/h3>\n\n\n\n<p><a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/overviews\/lsp\/overview\/\">Language Server Protocol (LSP)<\/a> to otwarty protok\u00f3\u0142 oparty na JSON-RPC, kt\u00f3ry u\u0142atwia interakcj\u0119 mi\u0119dzy edytorem IDE, a tak zwanym serwerem j\u0119zyka &#8211; narz\u0119dziem kt\u00f3re zapewnia funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie, przej\u015bcie do definicji lub znalezienie wszystkich odniesie\u0144 w ramach codebase. Dzi\u0119ki LSP, jednorazowo stworzony serwer j\u0119zyka mo\u017ce by\u0107 u\u017cyty z wieloma innymi narz\u0119dziami, dzi\u0119ki czemu nie trzeba wielokrotnie wykonywa\u0107 tej samej pracy.<\/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\/07\/image-10-1024x509.png\" alt=\"\" class=\"wp-image-16492\" width=\"768\" height=\"382\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-10-1024x509.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-10-300x149.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-10-768x382.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-10.png 1328w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">Obraz warty tysi\u0105ca s\u0142\u00f3w, z oficjalnej strony projektu&#8230; tylko Atom ju\u017c \u015bwi\u0119tej pami\u0119ci, ale pami\u0119tamy \ud83d\udd6f\ufe0f.<\/figcaption><\/figure><\/div>\n\n\n<p>Metals to dojrza\u0142y serwer j\u0119zykowy dla j\u0119zyka programowania Scala. Jego rozw\u00f3j jest wsp\u00f3lnym wysi\u0142kiem wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala, a zesp\u00f3\u0142 Metals jest przekonany o gotowo\u015bci narz\u0119dzia do u\u017cytku produkcyjnego, co potwierdza dzi\u0119ki <a href=\"https:\/\/scalameta.org\/metals\/blog\/2023\/07\/19\/silver\/\">wydaniem wersji 1.0<\/a>, o nazwie kodowej Silver. Opr\u00f3cz podstawowych funkcji oferowanych przez Language Server Protocol, Metals 1.0 mo\u017ce pochwali\u0107 si\u0119 kilkoma dodatkowymi funkcjami, takimi jak obs\u0142uga projekt\u00f3w z wieloma rootami, mo\u017cliwo\u015b\u0107 uruchamiania okre\u015blonych regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI.<\/p>\n\n\n\n<p>Metals v1.0.0 obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18 i Scala 2.13.11).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tydzie\u0144 cz\u0142owiek na urlopie, a a\u017c zasypa\u0142o nas ciekawymi informacjami, kt\u00f3re a\u017c prosz\u0105 si\u0119 o podsumowanie &#8211; szczeg\u00f3lnie Release Radar jest dzisiaj wyj\u0105tkowo bogaty.<\/p>\n","protected":false},"author":10,"featured_media":16503,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-16479","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"10","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/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>JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived\" \/>\n<meta property=\"og:description\" content=\"Tydzie\u0144 cz\u0142owiek na urlopie, a a\u017c zasypa\u0142o nas ciekawymi informacjami, kt\u00f3re a\u017c prosz\u0105 si\u0119 o podsumowanie - szczeg\u00f3lnie Release Radar jest dzisiaj wyj\u0105tkowo bogaty.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-25T06:44:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-26T05:11:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.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\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim &#8211; JVM Weekly vol. 143\",\"datePublished\":\"2023-07-25T06:44:40+00:00\",\"dateModified\":\"2023-07-26T05:11:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\"},\"wordCount\":1970,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\",\"name\":\"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png\",\"datePublished\":\"2023-07-25T06:44:40+00:00\",\"dateModified\":\"2023-07-26T05:11:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim &#8211; JVM Weekly vol. 143\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived","og_description":"Tydzie\u0144 cz\u0142owiek na urlopie, a a\u017c zasypa\u0142o nas ciekawymi informacjami, kt\u00f3re a\u017c prosz\u0105 si\u0119 o podsumowanie - szczeg\u00f3lnie Release Radar jest dzisiaj wyj\u0105tkowo bogaty.","og_url":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/","og_site_name":"Vived","article_published_time":"2023-07-25T06:44:40+00:00","article_modified_time":"2023-07-26T05:11:10+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim &#8211; JVM Weekly vol. 143","datePublished":"2023-07-25T06:44:40+00:00","dateModified":"2023-07-26T05:11:10+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/"},"wordCount":1970,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/","url":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/","name":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim - JVM Weekly vol. 143 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png","datePublished":"2023-07-25T06:44:40+00:00","dateModified":"2023-07-26T05:11:10+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/JVM-Weekly-1200x628_V2-6.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-i-transpiler-bytecode-w-rust-learning-by-doing-na-poziomie-mistrzowskim-jvm-weekly-vol-143\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim &#8211; JVM Weekly vol. 143"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. JVM i transpiler bytecode w Rust: Learning-by-Doing na poziomie mistrzowskim<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie bez kozery m\u00f3wi si\u0119 o tym, \u017ce nie ma lepszej nauki ni\u017c taka poprzez praktyk\u0119. Niekt\u00f3rzy bior\u0105 to sobie mocno do serca mocniej ni\u017c inni. Przyk\u0142adowo, <a href=\"https:\/\/twitter.com\/andreabergia\">Andrea Bergia<\/a>, Principal Software Engineer w <a class=\"autolink\" href=\"https:\/\/lastminute.com\">lastminute.com<\/a>, postanowi\u0142 na przyk\u0142ad nauczy\u0107 si\u0119 JVM poprzez napisanie jego uproszczonej implementacji. Dodatkowo, jak mo\u017cecie si\u0119 domy\u015ble\u0107 m\u00f3wimy tutaj o 10x developerze, wi\u0119c ten zrobi\u0142 to... w Rust.<\/p>\n","innerContent":["\n<p>Nie bez kozery m\u00f3wi si\u0119 o tym, \u017ce nie ma lepszej nauki ni\u017c taka poprzez praktyk\u0119. Niekt\u00f3rzy bior\u0105 to sobie mocno do serca mocniej ni\u017c inni. Przyk\u0142adowo, <a href=\"https:\/\/twitter.com\/andreabergia\">Andrea Bergia<\/a>, Principal Software Engineer w <a class=\"autolink\" href=\"https:\/\/lastminute.com\">lastminute.com<\/a>, postanowi\u0142 na przyk\u0142ad nauczy\u0107 si\u0119 JVM poprzez napisanie jego uproszczonej implementacji. Dodatkowo, jak mo\u017cecie si\u0119 domy\u015ble\u0107 m\u00f3wimy tutaj o 10x developerze, wi\u0119c ten zrobi\u0142 to... w Rust.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt, nazwany <strong>rjvm<\/strong>, cho\u0107 nie obs\u0142uguje on niekt\u00f3rych funkcji, takich jak generyki, w\u0105tki, refleksje, adnotacje, I\/O, czy kompilacj\u0119 JIT, to autor z powodzeniem zaimplementowa\u0142 kilka nietrywialnych komponent\u00f3w, w tym instrukcje steruj\u0105ce, tworzenie obiekt\u00f3w i prymityw\u00f3w, wsparcie metod wirtualnych i statycznych, wyj\u0105tki, garbage collector oraz mo\u017cliwo\u015b\u0107 zaczytywania klas z zewn\u0119trznych pliku <strong>.jar<\/strong>. \u017beby za\u015b dopi\u0105\u0107 ju\u017c robi\u0105c\u0105 wra\u017cenie ca\u0142o\u015b\u0107, autor opracowa\u0142 zestaw test\u00f3w ilustruj\u0105cych dzia\u0142anie <strong>rjvm<\/strong> w oparciu o prawdziwy plik <strong>rt.jar<\/strong> z pochodz\u0105cy z OpenJDK 7.<\/p>\n","innerContent":["\n<p>Projekt, nazwany <strong>rjvm<\/strong>, cho\u0107 nie obs\u0142uguje on niekt\u00f3rych funkcji, takich jak generyki, w\u0105tki, refleksje, adnotacje, I\/O, czy kompilacj\u0119 JIT, to autor z powodzeniem zaimplementowa\u0142 kilka nietrywialnych komponent\u00f3w, w tym instrukcje steruj\u0105ce, tworzenie obiekt\u00f3w i prymityw\u00f3w, wsparcie metod wirtualnych i statycznych, wyj\u0105tki, garbage collector oraz mo\u017cliwo\u015b\u0107 zaczytywania klas z zewn\u0119trznych pliku <strong>.jar<\/strong>. \u017beby za\u015b dopi\u0105\u0107 ju\u017c robi\u0105c\u0105 wra\u017cenie ca\u0142o\u015b\u0107, autor opracowa\u0142 zestaw test\u00f3w ilustruj\u0105cych dzia\u0142anie <strong>rjvm<\/strong> w oparciu o prawdziwy plik <strong>rt.jar<\/strong> z pochodz\u0105cy z OpenJDK 7.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Autor podzieli\u0142 si\u0119 swoimi do\u015bwiadczeniami w ramach dwucz\u0119\u015bciowego (przynajmniej na razie) postu blogowego <a href=\"https:\/\/andreabergia.com\/blog\/2023\/07\/i-have-written-a-jvm-in-rust\/\">I have written a JVM in Rust<\/a>. Andrea, \u017ce najbardziej dumny, jest z zaimplementowania dzia\u0142aj\u0105cego garbage collectora, nawet je\u015bli w stosunkowo prostej wersji. Zgodnie z jego zapowiedziami mo\u017cemy spodziewa\u0107 si\u0119 kolejnych publikacji, badaj\u0105cych dog\u0142\u0119bne aspekty dzia\u0142ania <strong>rjvm<\/strong>.<\/p>\n","innerContent":["\n<p>Autor podzieli\u0142 si\u0119 swoimi do\u015bwiadczeniami w ramach dwucz\u0119\u015bciowego (przynajmniej na razie) postu blogowego <a href=\"https:\/\/andreabergia.com\/blog\/2023\/07\/i-have-written-a-jvm-in-rust\/\">I have written a JVM in Rust<\/a>. Andrea, \u017ce najbardziej dumny, jest z zaimplementowania dzia\u0142aj\u0105cego garbage collectora, nawet je\u015bli w stosunkowo prostej wersji. Zgodnie z jego zapowiedziami mo\u017cemy spodziewa\u0107 si\u0119 kolejnych publikacji, badaj\u0105cych dog\u0142\u0119bne aspekty dzia\u0142ania <strong>rjvm<\/strong>.<\/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\/07\/L5TAEDo.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/L5TAEDo.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie koniec edukacyjnych, oko\u0142o-jvmowych projekt\u00f3w edukacyjnych napisanych w Rust. <strong>Jtcpp<\/strong> to program napisany w j\u0119zyku Rust, kt\u00f3ry konwertuje bytecode JVM na C++ (teraz to ju\u017c mamy prawdziwe kombo). Umo\u017cliwia to kompilacj\u0119 program\u00f3w napisanych w takich j\u0119zykach jak Java i Kotlin do natywnych instrukcji, co w niekt\u00f3rych przypadkach poprawia pono\u0107 wydajno\u015b\u0107, aczkolwiek wyniki nie zach\u0119caj\u0105 do produkcyjnego u\u017cycia (autor podaje bowiem, \u017ce z jego eksperyment\u00f3w mo\u017cna spodziewa\u0107 si\u0119 od 3x przyspieszenia do 50x spowolnienia dzia\u0142ania program\u00f3w). Ca\u0142o\u015b\u0107 sama w sobie jest pono\u0107 do\u015b\u0107 kompletny pod wzgl\u0119dem funkcji j\u0119zyka, ale implementacja standardowej biblioteki Java w C++ jest bardzo ograniczona - zaimplementowane klasy to String, Object, System oraz PrintStream. Ca\u0142o\u015b\u0107 wi\u0119c nadaje si\u0119 w zasadzie do tworzenia prostych algorytm\u00f3w i aplikacji konsolowych. Ca\u0142o\u015b\u0107 stanowi jednak bardzo interesuj\u0105cy eksperyment. A dlaczego powsta\u0142? Bo mo\u017cna. I to jest pi\u0119kne.<\/p>\n","innerContent":["\n<p>To jednak nie koniec edukacyjnych, oko\u0142o-jvmowych projekt\u00f3w edukacyjnych napisanych w Rust. <strong>Jtcpp<\/strong> to program napisany w j\u0119zyku Rust, kt\u00f3ry konwertuje bytecode JVM na C++ (teraz to ju\u017c mamy prawdziwe kombo). Umo\u017cliwia to kompilacj\u0119 program\u00f3w napisanych w takich j\u0119zykach jak Java i Kotlin do natywnych instrukcji, co w niekt\u00f3rych przypadkach poprawia pono\u0107 wydajno\u015b\u0107, aczkolwiek wyniki nie zach\u0119caj\u0105 do produkcyjnego u\u017cycia (autor podaje bowiem, \u017ce z jego eksperyment\u00f3w mo\u017cna spodziewa\u0107 si\u0119 od 3x przyspieszenia do 50x spowolnienia dzia\u0142ania program\u00f3w). Ca\u0142o\u015b\u0107 sama w sobie jest pono\u0107 do\u015b\u0107 kompletny pod wzgl\u0119dem funkcji j\u0119zyka, ale implementacja standardowej biblioteki Java w C++ jest bardzo ograniczona - zaimplementowane klasy to String, Object, System oraz PrintStream. Ca\u0142o\u015b\u0107 wi\u0119c nadaje si\u0119 w zasadzie do tworzenia prostych algorytm\u00f3w i aplikacji konsolowych. Ca\u0142o\u015b\u0107 stanowi jednak bardzo interesuj\u0105cy eksperyment. A dlaczego powsta\u0142? Bo mo\u017cna. I to jest pi\u0119kne.<\/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\/07\/UE4aYLP.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zw\u0142aszcza, \u017ce <a href=\"https:\/\/github.com\/FractalFir\">GitHub<\/a> wskazuje, \u017ce mamy do czynienia z moim rodakiem, do tego licealist\u0105. <a href=\"https:\/\/www.linkedin.com\/in\/micha%C5%82-kostrubiec-85a037269\/\">Micha\u0142<\/a> - pi\u0119kna robota \ud83d\ude47.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/UE4aYLP.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zw\u0142aszcza, \u017ce <a href=\"https:\/\/github.com\/FractalFir\">GitHub<\/a> wskazuje, \u017ce mamy do czynienia z moim rodakiem, do tego licealist\u0105. <a href=\"https:\/\/www.linkedin.com\/in\/micha%C5%82-kostrubiec-85a037269\/\">Micha\u0142<\/a> - pi\u0119kna robota \ud83d\ude47.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Aktualizacja Roadmapy Kotlina<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Aktualizacja Roadmapy Kotlina<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnio kiedy si\u0119 widzieli\u015bmy, mieli\u015bmy edycje mocno kotlinow\u0105... ale okaza\u0142o si\u0119, \u017ce to dalej nie koniec. Od tamtego czasu <a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\">pojawi\u0142a si\u0119 Roadmapa<\/a>. I cho\u0107 sama w sobie nie przynosi nic rewolucyjnego, to i tak wypada ni\u0105 ni\u0105 cho\u0107by rzuci\u0107 okiem.<\/p>\n","innerContent":["\n<p>Ostatnio kiedy si\u0119 widzieli\u015bmy, mieli\u015bmy edycje mocno kotlinow\u0105... ale okaza\u0142o si\u0119, \u017ce to dalej nie koniec. Od tamtego czasu <a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\">pojawi\u0142a si\u0119 Roadmapa<\/a>. I cho\u0107 sama w sobie nie przynosi nic rewolucyjnego, to i tak wypada ni\u0105 ni\u0105 cho\u0107by rzuci\u0107 okiem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>G\u0142\u00f3wny nacisk po\u0142o\u017cony jest na kilka kluczowych projekt\u00f3w, takich jak znany Wam z poprzedniej edycji kompilator K2, czyli przebudowa kompilatora Kotlin maj\u0105ca na celu zwi\u0119kszenie szybko\u015bci, unifikacji codebase, a to wszystko przy jednoczesnym wprowadzeniu nowych funkcji j\u0119zyka. Trwaj\u0105 r\u00f3wnie\u017c prace nad usprawnieniem Kotlinowego plugina do IntelliJ, kt\u00f3ra to dzi\u0119ki migracji j\u0119zyka na K2 umo\u017cliwi\u0107 ma szybsze uzupe\u0142nianie, pod\u015bwietlanie i wyszukiwanie, a tak\u017ce bardziej stabiln\u0105 analiz\u0119 kodu. Kolejnym priorytetem jest produkcyjne wydanie Kotlin Multiplatform, kt\u00f3ra ma by\u0107 osi\u0105gni\u0119ty dzi\u0119ki poprawie stabilno\u015bci i dokumentacji toolchaina oraz zapewnieniu gwarancji kompatybilno\u015bci. Ulepszeniu maj\u0105 ulec te\u017c funkcje, takie jak nowy mened\u017cer pami\u0119ci Kotlin\/Native, kompatybilno\u015b\u0107 z <code>klib<\/code> i mo\u017cliwo\u015b\u0107 eksportowania kodu Kotlin do Objective-C.<\/p>\n","innerContent":["\n<p>G\u0142\u00f3wny nacisk po\u0142o\u017cony jest na kilka kluczowych projekt\u00f3w, takich jak znany Wam z poprzedniej edycji kompilator K2, czyli przebudowa kompilatora Kotlin maj\u0105ca na celu zwi\u0119kszenie szybko\u015bci, unifikacji codebase, a to wszystko przy jednoczesnym wprowadzeniu nowych funkcji j\u0119zyka. Trwaj\u0105 r\u00f3wnie\u017c prace nad usprawnieniem Kotlinowego plugina do IntelliJ, kt\u00f3ra to dzi\u0119ki migracji j\u0119zyka na K2 umo\u017cliwi\u0107 ma szybsze uzupe\u0142nianie, pod\u015bwietlanie i wyszukiwanie, a tak\u017ce bardziej stabiln\u0105 analiz\u0119 kodu. Kolejnym priorytetem jest produkcyjne wydanie Kotlin Multiplatform, kt\u00f3ra ma by\u0107 osi\u0105gni\u0119ty dzi\u0119ki poprawie stabilno\u015bci i dokumentacji toolchaina oraz zapewnieniu gwarancji kompatybilno\u015bci. Ulepszeniu maj\u0105 ulec te\u017c funkcje, takie jak nowy mened\u017cer pami\u0119ci Kotlin\/Native, kompatybilno\u015b\u0107 z <code>klib<\/code> i mo\u017cliwo\u015b\u0107 eksportowania kodu Kotlin do Objective-C.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Za cel stawiana jest te\u017c poprawa do\u015bwiadczenia autor\u00f3w bibliotek Kotlinowych poprzez zapewnienie solidnej dokumentacji i narz\u0119dzi do konfigurowania, rozwijania i publikowania takowych. Programi\u015bci \"przemys\u0142owi\" maj\u0105 za\u015b otrzyma\u0107 swoje w\u0142asne zabawki obejmuj\u0105 lepsze raporty kompilacji Kotlin oraz ulepszone do\u015bwiadczenie ze skryptami Kotlinowymi, a tak\u017ce <code>.gradle.kts<\/code>. Ekosystem bibliotek doczeka si\u0119 wyda\u0144 takich jak <code>kotlinx-io<\/code>, nowej bibliotece I\/O, kt\u00f3ra ma zosta\u0107 oparta o <a href=\"https:\/\/github.com\/square\/okio\">okio<\/a> od Square. Doczekamy si\u0119 te\u017c stabilizacji <code>kotlinx-kover<\/code> (narz\u0119dzia Code Coverage) i <code>kotlinx-metadata-jvm<\/code> (biblioteki do odczytu metadanych kompilatora Kotlina).<\/p>\n","innerContent":["\n<p>Za cel stawiana jest te\u017c poprawa do\u015bwiadczenia autor\u00f3w bibliotek Kotlinowych poprzez zapewnienie solidnej dokumentacji i narz\u0119dzi do konfigurowania, rozwijania i publikowania takowych. Programi\u015bci \"przemys\u0142owi\" maj\u0105 za\u015b otrzyma\u0107 swoje w\u0142asne zabawki obejmuj\u0105 lepsze raporty kompilacji Kotlin oraz ulepszone do\u015bwiadczenie ze skryptami Kotlinowymi, a tak\u017ce <code>.gradle.kts<\/code>. Ekosystem bibliotek doczeka si\u0119 wyda\u0144 takich jak <code>kotlinx-io<\/code>, nowej bibliotece I\/O, kt\u00f3ra ma zosta\u0107 oparta o <a href=\"https:\/\/github.com\/square\/okio\">okio<\/a> od Square. Doczekamy si\u0119 te\u017c stabilizacji <code>kotlinx-kover<\/code> (narz\u0119dzia Code Coverage) i <code>kotlinx-metadata-jvm<\/code> (biblioteki do odczytu metadanych kompilatora Kotlina).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16482,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-8.png\" alt=\"\" class=\"wp-image-16482\"\/><figcaption class=\"wp-element-caption\">Sporo tych projekt\u00f3w na roadmapie mamy. A\u017c mi si\u0119 przypomnia\u0142 m\u00f3j ulubiony <a href=\"https:\/\/medium.com\/circleci\/its-the-future-90d0e5361b44\">rant o DevOps<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-8.png\" alt=\"\" class=\"wp-image-16482\"\/><figcaption class=\"wp-element-caption\">Sporo tych projekt\u00f3w na roadmapie mamy. A\u017c mi si\u0119 przypomnia\u0142 m\u00f3j ulubiony <a href=\"https:\/\/medium.com\/circleci\/its-the-future-90d0e5361b44\">rant o DevOps<\/a>.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dzisiaj na bogato!<\/p>\n","innerContent":["\n<p>Dzisiaj na bogato!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Micronaut 4.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Micronaut 4.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaczniemy od zdecydowanie najwi\u0119kszej premiery ostatnich tygodni. Micronaut, pierwszy z nowej fali nowoczesnych framework\u00f3w Javowych, doczeka\u0142 si\u0119 bowiem nowego du\u017cego wydania.<\/p>\n","innerContent":["\n<p>Zaczniemy od zdecydowanie najwi\u0119kszej premiery ostatnich tygodni. Micronaut, pierwszy z nowej fali nowoczesnych framework\u00f3w Javowych, doczeka\u0142 si\u0119 bowiem nowego du\u017cego wydania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/micronaut.io\/2023\/07\/14\/micronaut-framework-4-0-0-released\/\">Micronaut Framework 4.0<\/a> porzuca wsparcie dla wersji Java starszych ni\u017c JDK 17, dzi\u0119ki czemu m\u00f3g\u0142 zrewidowa\u0107 API pod k\u0105tem u\u017cycia nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Ponadto, nowa wersja Klienta HTTP Micronaut opart\u0105 zosta\u0142a na wprowadzonym w JDK 11 kliencie HTTP Java. Porzucenie balastu starych wersji umo\u017cliwi\u0142o te\u017c uzyskanie lepszych wynik\u00f3w je\u015bli chodzi o wydajno\u015b\u0107.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/micronaut.io\/2023\/07\/14\/micronaut-framework-4-0-0-released\/\">Micronaut Framework 4.0<\/a> porzuca wsparcie dla wersji Java starszych ni\u017c JDK 17, dzi\u0119ki czemu m\u00f3g\u0142 zrewidowa\u0107 API pod k\u0105tem u\u017cycia nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Ponadto, nowa wersja Klienta HTTP Micronaut opart\u0105 zosta\u0142a na wprowadzonym w JDK 11 kliencie HTTP Java. Porzucenie balastu starych wersji umo\u017cliwi\u0142o te\u017c uzyskanie lepszych wynik\u00f3w je\u015bli chodzi o wydajno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/graemerocher\">Graeme Rocher<\/a>, tw\u00f3rca Micronauta (a wcze\u015bniej Grails), od paru lat pracuje w Oracle, nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce to w\u0142a\u015bnie ta firma sta\u0142a si\u0119 du\u017cym kontrybutorem nowego wydania - co sprawia, \u017ce defacto macza palce w zar\u00f3wno Micronaucie, jak i Helidonie. To dzi\u0119ki ich wsparciu uzyskujemy mocno przerobion\u0105 integracj\u0119 Micronauta z GraalVM w celu wykorzystania wsp\u00f3\u0142dzielonych metadanych GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od bibliotek innych firm za pomoc\u0105 GraalVM Native Image sta\u0142o si\u0119 \u0142atwiejsze. Micronaut Serialization jest teraz za\u015b modu\u0142em domy\u015blnym, oferuj\u0105c nie u\u017cywaj\u0105ce refleksji, szybkie i bezpieczne interfejsy API serializacji\/deserializacji JSON. Inne godne uwagi zmiany obejmuj\u0105 ulepszon\u0105 obs\u0142ug\u0119 chmur (w tym Oracle Cloud) i jeszcze bardziej modu\u0142ow\u0105 architektur\u0119, co umo\u017cliwia mikroserwisom by\u0107 jeszcze bardziej mikro, umo\u017cliwiaj\u0105c usuni\u0119cie funkcjonalno\u015bci, je\u015bli nie s\u0105 one potrzebne. To ma oczywi\u015bcie pozytywny wp\u0142yw na czas startu ca\u0142o\u015bci. Micronaut doczeka\u0142 si\u0119 te\u017c <a href=\"https:\/\/docs.micronaut.io\/4.0.0\/guide\/#virtualThreads\">wczesnej wersji wsparcia dla VirtualThreads<\/a>.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/graemerocher\">Graeme Rocher<\/a>, tw\u00f3rca Micronauta (a wcze\u015bniej Grails), od paru lat pracuje w Oracle, nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce to w\u0142a\u015bnie ta firma sta\u0142a si\u0119 du\u017cym kontrybutorem nowego wydania - co sprawia, \u017ce defacto macza palce w zar\u00f3wno Micronaucie, jak i Helidonie. To dzi\u0119ki ich wsparciu uzyskujemy mocno przerobion\u0105 integracj\u0119 Micronauta z GraalVM w celu wykorzystania wsp\u00f3\u0142dzielonych metadanych GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od bibliotek innych firm za pomoc\u0105 GraalVM Native Image sta\u0142o si\u0119 \u0142atwiejsze. Micronaut Serialization jest teraz za\u015b modu\u0142em domy\u015blnym, oferuj\u0105c nie u\u017cywaj\u0105ce refleksji, szybkie i bezpieczne interfejsy API serializacji\/deserializacji JSON. Inne godne uwagi zmiany obejmuj\u0105 ulepszon\u0105 obs\u0142ug\u0119 chmur (w tym Oracle Cloud) i jeszcze bardziej modu\u0142ow\u0105 architektur\u0119, co umo\u017cliwia mikroserwisom by\u0107 jeszcze bardziej mikro, umo\u017cliwiaj\u0105c usuni\u0119cie funkcjonalno\u015bci, je\u015bli nie s\u0105 one potrzebne. To ma oczywi\u015bcie pozytywny wp\u0142yw na czas startu ca\u0142o\u015bci. Micronaut doczeka\u0142 si\u0119 te\u017c <a href=\"https:\/\/docs.micronaut.io\/4.0.0\/guide\/#virtualThreads\">wczesnej wersji wsparcia dla VirtualThreads<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli chodzi o zale\u017cno\u015bci, Micronaut 4.0 nie zale\u017cy ju\u017c bezpo\u015brednio od SnakeYAML i Micronaut Jackson Databind, co umo\u017cliwi danie programistom wyboru korzystania z Micronaut Serialization lub Micronaut Jackson Databind. Ponadto uko\u0144czono aktualizacj\u0119 pakiet\u00f3w <code>javax<\/code> do pakiet\u00f3w <code>jakarta<\/code>.<\/p>\n","innerContent":["\n<p>Je\u015bli chodzi o zale\u017cno\u015bci, Micronaut 4.0 nie zale\u017cy ju\u017c bezpo\u015brednio od SnakeYAML i Micronaut Jackson Databind, co umo\u017cliwi danie programistom wyboru korzystania z Micronaut Serialization lub Micronaut Jackson Databind. Ponadto uko\u0144czono aktualizacj\u0119 pakiet\u00f3w <code>javax<\/code> do pakiet\u00f3w <code>jakarta<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Arrow 1.2<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Arrow 1.2<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z perspektywy programist\u00f3w Javy z pewno\u015bci\u0105 Kotlin jawi si\u0119 jako j\u0119zyk nieco bardziej funkcyjny, ale w dalszym ci\u0105gu do takiej Scali mu daleko. Kotlin Arrow to biblioteka programowania funkcyjnego pr\u00f3buj\u0105ca nieco t\u0105 sytuacje poprawi\u0107, dostarczaj\u0105c typy danych, klasy typ\u00f3w i rozszerzenia, kt\u00f3re u\u0142atwiaj\u0105. Teraz za\u015b wypuszczono jej najnowsz\u0105 wersj\u0119, <a href=\"https:\/\/xebia.com\/blog\/a-new-module-for-typed-errors-in-arrow-1-2-0\/\">Arrow 1.20<\/a>.<\/p>\n","innerContent":["\n<p>Z perspektywy programist\u00f3w Javy z pewno\u015bci\u0105 Kotlin jawi si\u0119 jako j\u0119zyk nieco bardziej funkcyjny, ale w dalszym ci\u0105gu do takiej Scali mu daleko. Kotlin Arrow to biblioteka programowania funkcyjnego pr\u00f3buj\u0105ca nieco t\u0105 sytuacje poprawi\u0107, dostarczaj\u0105c typy danych, klasy typ\u00f3w i rozszerzenia, kt\u00f3re u\u0142atwiaj\u0105. Teraz za\u015b wypuszczono jej najnowsz\u0105 wersj\u0119, <a href=\"https:\/\/xebia.com\/blog\/a-new-module-for-typed-errors-in-arrow-1-2-0\/\">Arrow 1.20<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie to zawiera kilka godnych uwagi funkcji. Modu\u0142 Typed errors to nowe podej\u015bcie do zarz\u0105dzania typami b\u0142\u0119d\u00f3w, oferuj\u0105c alternatyw\u0119 dla wcze\u015bniej u\u017cywanych blok\u00f3w obliczeniowych i typ\u00f3w <code>Effect\/EagerEffect<\/code>. Ponadto modu\u0142 <code>resilience<\/code> obejmuje teraz obs\u0142ug\u0119 tak zwanych Sag (kto wie ten wie). Wszystko zosta\u0142o za\u015b okraszone <a href=\"https:\/\/arrow-kt.io\/\">now\u0105 stron\u0105<\/a>, zawieraj\u0105c\u0105 r\u00f3wnie\u017c poprawion\u0105 dokumentacje i przyk\u0142ady.<\/p>\n","innerContent":["\n<p>Wydanie to zawiera kilka godnych uwagi funkcji. Modu\u0142 Typed errors to nowe podej\u015bcie do zarz\u0105dzania typami b\u0142\u0119d\u00f3w, oferuj\u0105c alternatyw\u0119 dla wcze\u015bniej u\u017cywanych blok\u00f3w obliczeniowych i typ\u00f3w <code>Effect\/EagerEffect<\/code>. Ponadto modu\u0142 <code>resilience<\/code> obejmuje teraz obs\u0142ug\u0119 tak zwanych Sag (kto wie ten wie). Wszystko zosta\u0142o za\u015b okraszone <a href=\"https:\/\/arrow-kt.io\/\">now\u0105 stron\u0105<\/a>, zawieraj\u0105c\u0105 r\u00f3wnie\u017c poprawion\u0105 dokumentacje i przyk\u0142ady.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W ramach przygotowa\u0144 do wydania Arrow 2.0 niekt\u00f3re funkcje i typy przeznaczone do usuni\u0119cia zosta\u0142y oznaczone jako <code>@Deprecated<\/code>. Arrow 1.2.x ma na celu utorowanie drogi dla nadchodz\u0105cej wersji 2.0 poprzez sfinalizowanie interfejs\u00f3w API, uwzgl\u0119dniaj\u0105c sugestii spo\u0142eczno\u015bci. Arrow 2.0 jest planowany tak, aby zbieg\u0142 si\u0119 w czasie z wydaniem Kotlin 2.0, co pomog\u0142oby zapewni\u0107 kompatybilno\u015b\u0107 binarn\u0105 (Arrow generuje spore ilo\u015bci kodu) i u\u0142atwi\u0107 przej\u015bcie na now\u0105 wersje Kotlina.<\/p>\n","innerContent":["\n<p>W ramach przygotowa\u0144 do wydania Arrow 2.0 niekt\u00f3re funkcje i typy przeznaczone do usuni\u0119cia zosta\u0142y oznaczone jako <code>@Deprecated<\/code>. Arrow 1.2.x ma na celu utorowanie drogi dla nadchodz\u0105cej wersji 2.0 poprzez sfinalizowanie interfejs\u00f3w API, uwzgl\u0119dniaj\u0105c sugestii spo\u0142eczno\u015bci. Arrow 2.0 jest planowany tak, aby zbieg\u0142 si\u0119 w czasie z wydaniem Kotlin 2.0, co pomog\u0142oby zapewni\u0107 kompatybilno\u015b\u0107 binarn\u0105 (Arrow generuje spore ilo\u015bci kodu) i u\u0142atwi\u0107 przej\u015bcie na now\u0105 wersje Kotlina.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16500,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-12.png\" alt=\"\" class=\"wp-image-16500\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-12.png\" alt=\"\" class=\"wp-image-16500\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie ma sprawy, panie Microsoft. Dopiero co wprawdzie mieli\u015bmy edycje <a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">po\u015bwi\u0119con\u0105 LLM-om w Javie<\/a>, ale nowa propozycja firmy jest na tyle ciekawa, \u017ce \u017cal o niej nie wspomnie\u0107. <\/p>\n","innerContent":["\n<p>Nie ma sprawy, panie Microsoft. Dopiero co wprawdzie mieli\u015bmy edycje <a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">po\u015bwi\u0119con\u0105 LLM-om w Javie<\/a>, ale nowa propozycja firmy jest na tyle ciekawa, \u017ce \u017cal o niej nie wspomnie\u0107. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Semantic Kernel (SK) to SDK umo\u017cliwiaj\u0105ce integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania. Rozszerzalny model programowania SK \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi. <\/p>\n","innerContent":["\n<p>Semantic Kernel (SK) to SDK umo\u017cliwiaj\u0105ce integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania. Rozszerzalny model programowania SK \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/introducing-semantic-kernel-for-java\/\">wyda\u0142 pierwsz\u0105 wersj\u0119 Semantic Kernel for Java<\/a>, biblioteki, kt\u00f3ra umo\u017cliwia programistom Java p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI (jak Azure OpenAI) z ich aplikacjami, za pomoc\u0105 modelu opartego o tak zwane skille. W praktyce wygl\u0105da to mniej wi\u0119cej tak:<\/p>\n","innerContent":["\n<p>Microsoft <a href=\"https:\/\/devblogs.microsoft.com\/semantic-kernel\/introducing-semantic-kernel-for-java\/\">wyda\u0142 pierwsz\u0105 wersj\u0119 Semantic Kernel for Java<\/a>, biblioteki, kt\u00f3ra umo\u017cliwia programistom Java p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI (jak Azure OpenAI) z ich aplikacjami, za pomoc\u0105 modelu opartego o tak zwane skille. W praktyce wygl\u0105da to mniej wi\u0119cej tak:<\/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 MyAppSkills {\n    @DefineSKFunction(name = \"redactPassword\", description = \"Redacts passwords from a message\")\n    public String redactPassword(@SKFunctionInputAttribute String input) {\n      System.out.println(\"&#91;redactPassword] Redacting passwords from input: \" + input);\n      return input.replaceAll(\"password.*\", \"******\");\n    }\n  }\n  \n  (...)\n  \n Kernel kernel = SKBuilders.kernel().withKernelConfig(config).build(); kernel.importSkill(new MyAppSkills(), \"MyAppSkills\");<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>public class MyAppSkills {\n    @DefineSKFunction(name = \"redactPassword\", description = \"Redacts passwords from a message\")\n    public String redactPassword(@SKFunctionInputAttribute String input) {\n      System.out.println(\"&#91;redactPassword] Redacting passwords from input: \" + input);\n      return input.replaceAll(\"password.*\", \"******\");\n    }\n  }\n  \n  (...)\n  \n Kernel kernel = SKBuilders.kernel().withKernelConfig(config).build(); kernel.importSkill(new MyAppSkills(), \"MyAppSkills\");<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Programi\u015bci nast\u0119pnie mog\u0105 wykorzysta\u0107 bibliotek\u0119 do tworzenia inteligentnych plan\u00f3w przy u\u017cyciu tak zwanych Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/p>\n","innerContent":["\n<p>Programi\u015bci nast\u0119pnie mog\u0105 wykorzysta\u0107 bibliotek\u0119 do tworzenia inteligentnych plan\u00f3w przy u\u017cyciu tak zwanych Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/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>SequentialPlanner planner = new SequentialPlanner(kernel, null, null);\n\nPlan plan = planner.createPlanAsync(\n\"For any input with passwords, redact the passwords and send redacted input to sysadmin@corp.net\").block();\n\nSystem.out.println(plan.toPlanString());\n\nString message = \"Password changed to password.db=123456abc\";\nString result = plan.invokeAsync(message).block().getResult();\n\nSystem.out.println(\" === Result of the plan === \");\nSystem.out.println(result);<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>SequentialPlanner planner = new SequentialPlanner(kernel, null, null);\n\nPlan plan = planner.createPlanAsync(\n\"For any input with passwords, redact the passwords and send redacted input to sysadmin@corp.net\").block();\n\nSystem.out.println(plan.toPlanString());\n\nString message = \"Password changed to password.db=123456abc\";\nString result = plan.invokeAsync(message).block().getResult();\n\nSystem.out.println(\" === Result of the plan === \");\nSystem.out.println(result);<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Semantic Kernel for Java w wersja alfa 0.2.6-alpha jest dost\u0119pna w Maven Central. by pom\u00f3c programistom w rozpocz\u0119ciu pracy i zrozumieniu potencja\u0142u Semantic Kernel for Java, udost\u0119pniono <a href=\"https:\/\/github.com\/microsoft\/semantic-kernel\/tree\/experimental-java\/java\/samples\/sample-code\">kolekcj\u0119 przyk\u0142ad\u00f3w<\/a> <\/p>\n","innerContent":["\n<p>Semantic Kernel for Java w wersja alfa 0.2.6-alpha jest dost\u0119pna w Maven Central. by pom\u00f3c programistom w rozpocz\u0119ciu pracy i zrozumieniu potencja\u0142u Semantic Kernel for Java, udost\u0119pniono <a href=\"https:\/\/github.com\/microsoft\/semantic-kernel\/tree\/experimental-java\/java\/samples\/sample-code\">kolekcj\u0119 przyk\u0142ad\u00f3w<\/a> <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16489,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-9.png\" alt=\"\" class=\"wp-image-16489\"\/><figcaption class=\"wp-element-caption\">Bardziej skomplikowanych i ciekawszych ni\u017c ten m\u00f3j, ukradziony bezpo\u015brednio z announcementu.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-9.png\" alt=\"\" class=\"wp-image-16489\"\/><figcaption class=\"wp-element-caption\">Bardziej skomplikowanych i ciekawszych ni\u017c ten m\u00f3j, ukradziony bezpo\u015brednio z announcementu.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Microsoft Build of OpenJDK \u2013 July 2023 Release<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Microsoft Build of OpenJDK \u2013 July 2023 Release<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak jeste\u015bmy ju\u017c w temacie Microsoftu, firma og\u0142osi\u0142a r\u00f3wnie\u017c <a href=\"https:\/\/devblogs.microsoft.com\/java\/microsoft-build-of-openjdk-july-2023-release\">wydanie comiesi\u0119cznego zbioru poprawek i aktualizacji zabezpiecze\u0144 dla Microsoft Build OpenJDK<\/a>. Zwykle nie informuj\u0119 o takich zmianach, jednak tym razem jednym ze znacz\u0105cych ulepsze\u0144 jest poprawki escape analysis (analizy ucieczki), kt\u00f3re osi\u0105gn\u0119\u0142y na tyle stabiln\u0105 wersje, \u017ce Microsoft zdecydowa\u0142 si\u0119 je w\u0142\u0105czy\u0107 domy\u015blnie. Dla tych kt\u00f3rzy nie siedz\u0105 w temacie kompilator\u00f3w, analiza ucieczki w Javie to technika optymalizacji, kt\u00f3ra okre\u015bla zakres dost\u0119pno\u015bci obiekt\u00f3w w programie, aby potencjalnie przydzieli\u0107 je na stosie, a nie na stercie. Jest to mechanizm o tyle istotny, \u017ce umo\u017cliwia r\u00f3wnie\u017c dodatkowe optymalizacje, takie jak skalaryzacja obiekt\u00f3w (zast\u0119powanie ich zestaw indywidualnych zmiennych - skalar\u00f3w) lub eliminacja synchronizacji w\u0105tk\u00f3w. Ulepszenie to ju\u017c dzi\u015b wykorzystywane jest w systemach produkcyjnych w Microsoft i LinkedIn, dzi\u0119ki czemu mo\u017cna je uzna\u0107 za stabilne. U\u017cytkownicy mog\u0105 wy\u0142\u0105czy\u0107 jednak t\u0119 funkcj\u0119, je\u015bli napotkaj\u0105 regresj\u0119 wydajno\u015bci, u\u017cywaj\u0105c flagi <code>-XX:-ReduceAllocationMerges<\/code>.<\/p>\n","innerContent":["\n<p>A jak jeste\u015bmy ju\u017c w temacie Microsoftu, firma og\u0142osi\u0142a r\u00f3wnie\u017c <a href=\"https:\/\/devblogs.microsoft.com\/java\/microsoft-build-of-openjdk-july-2023-release\">wydanie comiesi\u0119cznego zbioru poprawek i aktualizacji zabezpiecze\u0144 dla Microsoft Build OpenJDK<\/a>. Zwykle nie informuj\u0119 o takich zmianach, jednak tym razem jednym ze znacz\u0105cych ulepsze\u0144 jest poprawki escape analysis (analizy ucieczki), kt\u00f3re osi\u0105gn\u0119\u0142y na tyle stabiln\u0105 wersje, \u017ce Microsoft zdecydowa\u0142 si\u0119 je w\u0142\u0105czy\u0107 domy\u015blnie. Dla tych kt\u00f3rzy nie siedz\u0105 w temacie kompilator\u00f3w, analiza ucieczki w Javie to technika optymalizacji, kt\u00f3ra okre\u015bla zakres dost\u0119pno\u015bci obiekt\u00f3w w programie, aby potencjalnie przydzieli\u0107 je na stosie, a nie na stercie. Jest to mechanizm o tyle istotny, \u017ce umo\u017cliwia r\u00f3wnie\u017c dodatkowe optymalizacje, takie jak skalaryzacja obiekt\u00f3w (zast\u0119powanie ich zestaw indywidualnych zmiennych - skalar\u00f3w) lub eliminacja synchronizacji w\u0105tk\u00f3w. Ulepszenie to ju\u017c dzi\u015b wykorzystywane jest w systemach produkcyjnych w Microsoft i LinkedIn, dzi\u0119ki czemu mo\u017cna je uzna\u0107 za stabilne. U\u017cytkownicy mog\u0105 wy\u0142\u0105czy\u0107 jednak t\u0119 funkcj\u0119, je\u015bli napotkaj\u0105 regresj\u0119 wydajno\u015bci, u\u017cywaj\u0105c flagi <code>-XX:-ReduceAllocationMerges<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla tych, kt\u00f3rzy si\u0119 martwi\u0105 - nie jest to tylko ulepszenie specyficzne dla Microsoft JDK Build. Zmiana zosta\u0142a ju\u017c wmergowana w kod OpenJDK i jest dost\u0119pna we <a href=\"https:\/\/github.com\/openjdk\/jdk\/compare\/jdk-22%2B6...jdk-22%2B7\">wczesnych wersjach JDK 22<\/a>.<\/p>\n","innerContent":["\n<p>Dla tych, kt\u00f3rzy si\u0119 martwi\u0105 - nie jest to tylko ulepszenie specyficzne dla Microsoft JDK Build. Zmiana zosta\u0142a ju\u017c wmergowana w kod OpenJDK i jest dost\u0119pna we <a href=\"https:\/\/github.com\/openjdk\/jdk\/compare\/jdk-22%2B6...jdk-22%2B7\">wczesnych wersjach JDK 22<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Spring Web Flow 3.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Spring Web Flow 3.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Spring Web Flow to projekt Spring Framework, kt\u00f3ry zosta\u0142 zaprojektowany, aby pom\u00f3c programistom w tworzeniu aplikacji internetowych zawieraj\u0105cych z\u0142o\u017cone przej\u015bcia mi\u0119dzy stronami. Zapewnia struktur\u0119 do organizowania regu\u0142 nawigacji dzi\u0119ki deklaratywnemu modelowi, kt\u00f3ry pozwala programistom zdefiniowa\u0107 (jak wskazuje nazwa) \"przep\u0142yw\" w aplikacji.<\/p>\n","innerContent":["\n<p>Spring Web Flow to projekt Spring Framework, kt\u00f3ry zosta\u0142 zaprojektowany, aby pom\u00f3c programistom w tworzeniu aplikacji internetowych zawieraj\u0105cych z\u0142o\u017cone przej\u015bcia mi\u0119dzy stronami. Zapewnia struktur\u0119 do organizowania regu\u0142 nawigacji dzi\u0119ki deklaratywnemu modelowi, kt\u00f3ry pozwala programistom zdefiniowa\u0107 (jak wskazuje nazwa) \"przep\u0142yw\" w aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W ostatnim czasie wydano Spring Web Flow <a href=\"https:\/\/spring.io\/projects\/spring-webflow\">w wersji 3.0.0<\/a>. Nowa wersja koncentruje si\u0119 na kompatybilno\u015bci ze Spring Framework 6 i Jakarta EE, zapewniaj\u0105c u\u017cytkownikom mo\u017cliwo\u015b\u0107 wykorzystania najnowszych aktualizacji i ulepsze\u0144 tych platform. Aktualizacja ta wymaga\u0142a jednak usuni\u0119cia Apache Tiles (framework do templatingu), kt\u00f3re nie zosta\u0142 zmigrowany do Jakarta EE. Jako substytut, przyk\u0142adowa aplikacja <code>booking-mvc<\/code> wykorzystuje teraz <a href=\"https:\/\/www.thymeleaf.org\/doc\/articles\/layouts.html\">Thymeleaf Layouts<\/a>.<\/p>\n","innerContent":["\n<p>W ostatnim czasie wydano Spring Web Flow <a href=\"https:\/\/spring.io\/projects\/spring-webflow\">w wersji 3.0.0<\/a>. Nowa wersja koncentruje si\u0119 na kompatybilno\u015bci ze Spring Framework 6 i Jakarta EE, zapewniaj\u0105c u\u017cytkownikom mo\u017cliwo\u015b\u0107 wykorzystania najnowszych aktualizacji i ulepsze\u0144 tych platform. Aktualizacja ta wymaga\u0142a jednak usuni\u0119cia Apache Tiles (framework do templatingu), kt\u00f3re nie zosta\u0142 zmigrowany do Jakarta EE. Jako substytut, przyk\u0142adowa aplikacja <code>booking-mvc<\/code> wykorzystuje teraz <a href=\"https:\/\/www.thymeleaf.org\/doc\/articles\/layouts.html\">Thymeleaf Layouts<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Scala Metals 1.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Scala Metals 1.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/overviews\/lsp\/overview\/\">Language Server Protocol (LSP)<\/a> to otwarty protok\u00f3\u0142 oparty na JSON-RPC, kt\u00f3ry u\u0142atwia interakcj\u0119 mi\u0119dzy edytorem IDE, a tak zwanym serwerem j\u0119zyka - narz\u0119dziem kt\u00f3re zapewnia funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie, przej\u015bcie do definicji lub znalezienie wszystkich odniesie\u0144 w ramach codebase. Dzi\u0119ki LSP, jednorazowo stworzony serwer j\u0119zyka mo\u017ce by\u0107 u\u017cyty z wieloma innymi narz\u0119dziami, dzi\u0119ki czemu nie trzeba wielokrotnie wykonywa\u0107 tej samej pracy.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/overviews\/lsp\/overview\/\">Language Server Protocol (LSP)<\/a> to otwarty protok\u00f3\u0142 oparty na JSON-RPC, kt\u00f3ry u\u0142atwia interakcj\u0119 mi\u0119dzy edytorem IDE, a tak zwanym serwerem j\u0119zyka - narz\u0119dziem kt\u00f3re zapewnia funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie, przej\u015bcie do definicji lub znalezienie wszystkich odniesie\u0144 w ramach codebase. Dzi\u0119ki LSP, jednorazowo stworzony serwer j\u0119zyka mo\u017ce by\u0107 u\u017cyty z wieloma innymi narz\u0119dziami, dzi\u0119ki czemu nie trzeba wielokrotnie wykonywa\u0107 tej samej pracy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16492,"width":768,"height":382,"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\/07\/image-10-1024x509.png\" alt=\"\" class=\"wp-image-16492\" width=\"768\" height=\"382\"\/><figcaption class=\"wp-element-caption\">Obraz warty tysi\u0105ca s\u0142\u00f3w, z oficjalnej strony projektu... tylko Atom ju\u017c \u015bwi\u0119tej pami\u0119ci, ale pami\u0119tamy \ud83d\udd6f\ufe0f.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/07\/image-10-1024x509.png\" alt=\"\" class=\"wp-image-16492\" width=\"768\" height=\"382\"\/><figcaption class=\"wp-element-caption\">Obraz warty tysi\u0105ca s\u0142\u00f3w, z oficjalnej strony projektu... tylko Atom ju\u017c \u015bwi\u0119tej pami\u0119ci, ale pami\u0119tamy \ud83d\udd6f\ufe0f.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Metals to dojrza\u0142y serwer j\u0119zykowy dla j\u0119zyka programowania Scala. Jego rozw\u00f3j jest wsp\u00f3lnym wysi\u0142kiem wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala, a zesp\u00f3\u0142 Metals jest przekonany o gotowo\u015bci narz\u0119dzia do u\u017cytku produkcyjnego, co potwierdza dzi\u0119ki <a href=\"https:\/\/scalameta.org\/metals\/blog\/2023\/07\/19\/silver\/\">wydaniem wersji 1.0<\/a>, o nazwie kodowej Silver. Opr\u00f3cz podstawowych funkcji oferowanych przez Language Server Protocol, Metals 1.0 mo\u017ce pochwali\u0107 si\u0119 kilkoma dodatkowymi funkcjami, takimi jak obs\u0142uga projekt\u00f3w z wieloma rootami, mo\u017cliwo\u015b\u0107 uruchamiania okre\u015blonych regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI.<\/p>\n","innerContent":["\n<p>Metals to dojrza\u0142y serwer j\u0119zykowy dla j\u0119zyka programowania Scala. Jego rozw\u00f3j jest wsp\u00f3lnym wysi\u0142kiem wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala, a zesp\u00f3\u0142 Metals jest przekonany o gotowo\u015bci narz\u0119dzia do u\u017cytku produkcyjnego, co potwierdza dzi\u0119ki <a href=\"https:\/\/scalameta.org\/metals\/blog\/2023\/07\/19\/silver\/\">wydaniem wersji 1.0<\/a>, o nazwie kodowej Silver. Opr\u00f3cz podstawowych funkcji oferowanych przez Language Server Protocol, Metals 1.0 mo\u017ce pochwali\u0107 si\u0119 kilkoma dodatkowymi funkcjami, takimi jak obs\u0142uga projekt\u00f3w z wieloma rootami, mo\u017cliwo\u015b\u0107 uruchamiania okre\u015blonych regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Metals v1.0.0 obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18 i Scala 2.13.11).<\/p>\n","innerContent":["\n<p>Metals v1.0.0 obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18 i Scala 2.13.11).<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16479","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=16479"}],"version-history":[{"count":16,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16479\/revisions"}],"predecessor-version":[{"id":16524,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16479\/revisions\/16524"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16503"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}