{"id":18131,"date":"2024-05-09T12:28:38","date_gmt":"2024-05-09T10:28:38","guid":{"rendered":"https:\/\/vived.io\/?p=18131"},"modified":"2024-05-09T12:28:40","modified_gmt":"2024-05-09T10:28:40","slug":"java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/","title":{"rendered":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173"},"content":{"rendered":"\n<h2 id=\"1-o-czym-mowi-nam-2024-state-of-the-java-ecosystem\" data-num=1>1. O czym m\u00f3wi nam &#8222;2024 State of the Java Ecosystem&#8221;<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"987\" height=\"561\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22.png\" alt=\"\" class=\"wp-image-18181\" style=\"width:987px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22.png 987w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22-768x437.png 768w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/figure>\n\n\n\n<p>Du\u017co raport\u00f3w ostatnio. Dopiero co dwa tygodnie temu po\u015bwi\u0119ci\u0142em ca\u0142\u0105 edycj\u0119 statystykom DataDoga dotycz\u0105cych poziomu bezpiecze\u0144stwa aplikacji Javowych, a w mi\u0119dzyczasie zd\u0105\u017cy\u0142 si\u0119 ukaza\u0107 <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2024-04\/new-relic-state-of-the-java-ecosystem-report-2024-04-30.pdf\">2024 State of the Java Ecosystem<\/a> od NewRelica. Jest to chyba pierwsza publikacja tego typu w tym roku (ogarniacie, \u017ce ju\u017c jeste\u015bmy prawie na p\u00f3\u0142metku \ud83e\udd76?). Rzu\u0107my sobie zatem okiem na to, co ciekawego mo\u017cna z niego wyczyta\u0107 &#8211; skupi\u0142em si\u0119 na moich przemy\u015bleniach, sam raport jest sporo szerszy.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"495\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-1024x495.png\" alt=\"\" class=\"wp-image-18146\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-1024x495.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-300x145.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-768x371.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-1536x743.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-2048x991.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Raport mocno skupia si\u0119 na szybszej adopcji JDK 21, ni\u017c JDK 17, ale te ich pojedyncze procenty to z mojej perspektywy i tak b\u0142\u0105d statystyczny. Du\u017co ciekawszym jest chyba to, \u017ce jednak wzrosty u\u017cycia JDK 17 wydaj\u0105 si\u0119 wynika\u0107 g\u0142\u00f3wnie z kanibalizacji JDK 11. Zak\u0142adaj\u0105c, \u017ce sam New Relic ro\u015bnie (<a href=\"https:\/\/stockanalysis.com\/stocks\/newr\/revenue\/\">13.48% growth year-over-year<\/a>), mo\u017cna za\u0142o\u017cy\u0107, \u017ce w liczbach bezwzgl\u0119dnych ilo\u015b\u0107 workload\u00f3w JDK 1.8 jest stabilna i wi\u0119kszo\u015b\u0107 projekt\u00f3w ju\u017c na niej pozostanie.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"552\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12.png\" alt=\"\" class=\"wp-image-18152\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12.png 880w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12-300x188.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12-768x482.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<p>To co mnie osobi\u015bcie szalenie cieszy, to jak mocno Adoptium przebija si\u0119 do masowej \u015bwiadomo\u015bci. Sam zauwa\u017cam, \u017ce powoli zwi\u0119ksza si\u0119 \u015bwiadomo\u015b\u0107 spo\u0142eczno\u015bci i firm, \u017ce Adoptium to nie jest jaki\u015b obcy byt, a po prostu legitny wariant JDK, kt\u00f3rego warto u\u017cywa\u0107. Przy czym musze przyzna\u0107, \u017ce bardzo trudno jest mi zrozumie\u0107 tak dramatyczny spadek popularno\u015bci Corretto i wygl\u0105da mi to raczej na jaki\u015b b\u0142\u0105d w raportowaniu wynik\u00f3w, metodologii &#8211; New Relic bazuje na telemetrii, wi\u0119c mo\u017cliwe, \u017ce Amazon wewn\u0119trznie zacz\u0105\u0142 u\u017cywa\u0107 jakiego\u015b innego JDK i to tak zawa\u017cy\u0142o na us\u0142ugach. New Relic &#8211; ch\u0119tnie us\u0142ysza\u0142bym czy macie na ten temat jakie\u015b przemy\u015blenia nie zawarte w raporcie.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"877\" height=\"654\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14.png\" alt=\"\" class=\"wp-image-18156\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14.png 877w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14-300x224.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14-768x573.png 768w\" sizes=\"auto, (max-width: 877px) 100vw, 877px\" \/><\/figure>\n\n\n\n<p>Za bardzo interesuj\u0105c\u0105 uwa\u017cam za\u015b obserwacje m\u00f3wi\u0105c\u0105 o sporym rozje\u017adzie mi\u0119dzy adopcj\u0105 G1 jako domy\u015blnego Garbage Collectora, a trendem redukcji CPU Core dost\u0119pnych dla aplikacji. Te dwa trendy pozostaj\u0105 ze sob\u0105 w kontrze, jako \u017ce G1 stworzone zosta\u0142o do \u015brodowisk posiadaj\u0105cych wiele rdzeni. To, czego raport New Relica nie pokazuje, to czy wzrosty obu tych tendencji rzeczywi\u015bcie dotycz\u0105 tych samych aplikacji, ale podejrzewam, \u017ce nie wszyscy jednak przeczytali &#8222;drobny druczek&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"879\" height=\"533\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15.png\" alt=\"\" class=\"wp-image-18158\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15.png 879w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15-300x182.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15-768x466.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/figure>\n\n\n\n<p>No i na sam koniec &#8211; zdecydowanie powinienem si\u0119 zainteresowa\u0107 bibliotek\u0105 Bouncy Castle. Doda\u0142em j\u0105 do swojego prywatnego &#8222;radaru&#8221;.<\/p>\n\n\n\n<h2 id=\"2-ostatnie-szlify-przed-premiera-kotlin-2-0\" data-num=2>2. Ostatnie szlify przed premier\u0105 Kotlin 2.0<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-1024x585.png\" alt=\"\" class=\"wp-image-18132\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Przeskoczmy sobie p\u0142ynnie do Kotlina &#8211; wida\u0107 bowiem, \u017ce przygotowania do wielkiej premiery K2 trwaj\u0105 i dostli\u015bmy kilka interesuj\u0105cych og\u0142osze\u0144 i publikacji. Pierwsz\u0105 z <a href=\"https:\/\/kotlinlang.org\/docs\/k2-compiler-migration-guide.html\">nich jest oficjalny migration guide<\/a>, kt\u00f3ry jest regularnie aktualizowany o zmiany w kolejnych wersjach RC Kotlin 2.0, a dodatkowo stanowi dobre wprowadzenie do nowych opcji syntaxu, kt\u00f3re te\u017c zosta\u0142y niedawno do Kotlina wprowadzone, dzi\u0119ki czemu &#8222;za\u0142apa\u0142y&#8221; si\u0119 do poradnika dla os\u00f3b chc\u0105cych zmodernizowa\u0107 sw\u00f3j codebase.<\/p>\n\n\n\n<p>To jednak nie jedyna z nowych publikacji od JetBrains. W ostatnich tygodniach ukaza\u0142 si\u0119 bowiem r\u00f3wnie\u017c tekst <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/04\/k2-compiler-performance-benchmarks-and-how-to-measure-them-on-your-projects\/\">K2 Compiler Performance Benchmarks and How to Measure Them on Your Projects<\/a>, nie tylko prezentuj\u0105cy benchmarki, ale te\u017c wyja\u015bniaj\u0105cy techniczne powody zmian w charakterystyce wydajno\u015bciowej poszczeg\u00f3lnych aplikacji. Zasadnicza zmiana w K2 (a g\u0142\u00f3wnie w jego frontendzie) polega na u\u017cyciu jednej zintegrowanej struktury danych zawieraj\u0105cej. Dzi\u0119ki tej zmianie kompilator nie tylko zarz\u0105dza jedn\u0105 struktur\u0105 danych zamiast dw\u00f3ch, ale r\u00f3wnie\u017c korzysta z dodatkowych informacji semantycznych, co usprawnia zar\u00f3wno proces kompilacji, jak i analiz\u0119 kodu w \u015brodowisku IntelliJ IDEA. Ta innowacja nie tylko zwi\u0119kszaj\u0105 efektywno\u015b\u0107 kompilacji, ale tak\u017ce u\u0142atwiaj\u0105 implementacj\u0119 nowych funkcji j\u0119zykowych, szczeg\u00f3lnie w kontek\u015bcie d\u0105\u017cenia do unifikacji obs\u0142ugi r\u00f3\u017cnych platform przez Kotlin Multiplatform, co stanowi jeden z g\u0142\u00f3wnych cel\u00f3w K2.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"560\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-17.png\" alt=\"\" class=\"wp-image-18162\" style=\"width:500px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-17.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-17-268x300.png 268w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Co by si\u0119 wreszcie g\u0142upi javowcy przestali pod\u015bmiechiwa\u0107 <\/figcaption><\/figure><\/div>\n\n\n<p>Wed\u0142ug prezentowanych wynik\u00f3w, wydajno\u015b\u0107 kompilatora Kotlin K2 prezentuje si\u0119 imponuj\u0105co, zw\u0142aszcza w por\u00f3wnaniu do poprzedniej wersji. Prace nad now\u0105 architektur\u0105 kompilatora, kt\u00f3ra obejmowa\u0142a przepisanie go od zera, zaowocowa\u0142y znacznymi ulepszeniami w szybko\u015bci kompilacji. Zmiany te s\u0105 szczeg\u00f3lnie widoczne w r\u00f3\u017cnych fazach kompilacji. Tekst od JetBrains podaje, \u017ce na przyk\u0142ad w projekcie Anki-Android czas kompilacji &#8222;od zera&#8221; (clean build) zmniejszy\u0142 si\u0119 z 57,7 sekundy w wersji 1.9.23 do 29,7 sekundy w wersji 2.0.0, co stanowi zysk na poziomie 94%. Podobne ulepszenia zaobserwowano w fazie inicjalizacji i analizy, gdzie zanotowano wzrost szybko\u015bci odpowiednio o 488% i 376%. Te usprawnienia wynikaj\u0105 z wdro\u017cenia nowego algorytmu wnioskowania o typach oraz nowych backend\u00f3w IR dla JVM i JS, co razem z nowym frontendem znacznie przyspiesza procesy kompilacji. Mimo tego, autorzy przestrzegaj\u0105 tak\u017ce o tym, \u017ce monitorowa\u0107 i dostosowywa\u0107 procesy kompilacji, korzystaj\u0105c z narz\u0119dzi takich jak raporty budowania Kotlin, kt\u00f3re pomagaj\u0105 zrozumie\u0107 i optymalizowa\u0107 czas kompilacji.<\/p>\n\n\n\n<p>I bardzo s\u0142usznie, bo powy\u017csze to dane od samych JetBrains, b\u0119d\u0105cych niejako s\u0119dzi\u0105 we w\u0142asnej sprawie &#8211; dlatego te\u017c fajnie, \u017ce zaczynaj\u0105 nam si\u0119 pojawia\u0107 publikacje od os\u00f3b zewn\u0119trznych. W swojej szczeg\u00f3\u0142owej <a href=\"https:\/\/www.zacsweers.dev\/preparing-for-k2\/\">recenzji nadchodz\u0105cej wersji Kotlin K2<\/a>, Zac Sweers ze Slacka dzieli si\u0119 swoimi spostrze\u017ceniami na temat ulepsze\u0144 K2, ale te\u017c wi\u0105\u017c\u0105cych si\u0119 z ni\u0105 wyzwa\u0144 zwi\u0105zanych. Patrzy na nie bez lukru i trze\u017awo, podkre\u015blaj\u0105c, \u017ce ostrzejsze wykrywania b\u0142\u0119d\u00f3w w K2, szczeg\u00f3lnie wok\u00f3\u0142 obs\u0142ugi nullowalno\u015bci, z jednej strony obiecuje czystszych praktyk kodowania, z drugiej mog\u0105 wymaga\u0107 od programist\u00f3w reagowania na nowe ostrze\u017cenia czy b\u0142\u0119dy, co pocz\u0105tkowo mo\u017ce by\u0107 problematyczne. Sweers zwraca r\u00f3wnie\u017c uwag\u0119 na znacz\u0105ce zmiany w obs\u0142udze mechanizm\u00f3w t\u0142umienia kompilatora oraz wprowadzenie bardziej zaawansowanych mo\u017cliwo\u015bci rzutowania typ\u00f3w. Ponadto, ostrzega przed potencjalnymi problemami z integracj\u0105 z Gradle, szczeg\u00f3lnie w przypadku skomplikowanych lub wieloplatformowych projekt\u00f3w, podkre\u015bla te\u017c konieczno\u015b\u0107 dostosowania wtyczek kompilatora ze wzgl\u0119du na aktualizacje interfejsu API mi\u0119dzy wersjami Kotlin.<\/p>\n\n\n\n<p>Je\u015bli za\u015b chodzi o opisywan\u0105 przed chwil\u0105 wydajno\u015b\u0107, Sweers dzieli si\u0119 mieszank\u0105 wynik\u00f3w na podstawie swoich test\u00f3w, kt\u00f3re kontrastuj\u0105 z obietnicami JetBrains o znacz\u0105cych ulepszeniach out-of-the-box. Podczas gdy niekt\u00f3re projekty mog\u0105 zauwa\u017cy\u0107 skromne ulepszenia, inne do\u015bwiadczaj\u0105 spowolnie\u0144, co sugeruje zmienny wp\u0142yw w r\u00f3\u017cnych \u015brodowiskach. Przyk\u0142adowo, eksperymenty w Slack wykaza\u0142y obni\u017cenie wydajno\u015bci o oko\u0142o 17%, przynajmniej gdy wci\u0105\u017c u\u017cywano KSP 1. W innym projekcie, CatchUp, zauwa\u017cono znacz\u0105ce ulepszenia, jednak kolejny projekt, Circuit, znowu do\u015bwiadczy\u0142 podobnych spowolnie\u0144. Podkre\u015bla to konieczno\u015b\u0107 przeprowadzenia w\u0142asnych test\u00f3w wydajno\u015bci, aby w pe\u0142ni zrozumie\u0107, jak zmiany w K2 b\u0119d\u0105 wp\u0142ywa\u0107 na ich projekty &#8211; ka\u017cdy build jest nieco inny, a dzisiejszy proces kompilacji projekt\u00f3w jest na tyle skomplikowany, \u017ce nie ka\u017cda aplikacja b\u0119dzie cieszy\u0107 si\u0119 z &#8222;darmowych&#8221; wzrost\u00f3w wydajno\u015bci. W wielu przypadkach b\u0119dziemy musieli wzi\u0105\u0107 spos\u00f3b tworzenia aplikacji pod lup\u0119.<\/p>\n\n\n\n<p>A to jeszcze nie koniec nowo\u015bci na oko\u0142o Kotlina 2.0, Ben Trengrove i Nick Butcher z Google og\u0142osili bowiem, \u017ce od tego premiery tego wydania Jetpack Compose b\u0119dzie teraz do\u0142\u0105czony do repozytorium Kotlin, co zapewni, \u017ce Compose b\u0119dzie na bie\u017c\u0105co aktualizowany do nowych wersji j\u0119zyka. Integracja ta eliminuje op\u00f3\u017anienia, z kt\u00f3rymi deweloperzy wcze\u015bniej si\u0119 mierzyli podczas aktualizacji Kotlin w aplikacjach Compose. Dodatkowo, wprowadzno nowy plugin Compose Compiler Gradle, kt\u00f3ry upraszcza konfiguracj\u0119 projektu za pomoc\u0105 specjalnego DSL. Zesp\u00f3\u0142 Compose w Google b\u0119dzie kontynuowa\u0142 rozw\u00f3j kompilatora we wsp\u00f3\u0142pracy z JetBrains.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"798\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-1024x798.png\" alt=\"\" class=\"wp-image-18143\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-1024x798.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-300x234.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-768x599.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8.png 1329w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Trzeba przyzna\u0107, nie\u017ale wygryzaj\u0105 konkurencje, bior\u0105c pod uwag\u0119 ostatnie doniesienia z Google. Ciekawe co przyniesie wtorkowe Google I\/O.<\/figcaption><\/figure>\n\n\n\n<p>A jak ju\u017c mowa o Kotlinie, to wybieram si\u0119 w tym roku na KotlinConf! W zwi\u0105zku z tym spodziewajcie si\u0119 szczeg\u00f3\u0142owej relacji, b\u0119d\u0119 si\u0119 stara\u0142 podsumowywa\u0107 ca\u0142o\u015b\u0107, pisz\u0105c relacje na bie\u017c\u0105co \ud83d\ude00<\/p>\n\n\n\n<h2 id=\"3-graalsp-nowy-statyczny-profiler-dla-graalvm\" data-num=3>3. GraalSP &#8211; nowy statyczny profiler dla GraalVM<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-1024x585.png\" alt=\"\" class=\"wp-image-18183\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A teraz to co tygryski lubi\u0105 najbardziej&#8230; czyli nowy Whitepaper. I to nie byle jaki, bo od zespo\u0142u GraalVM. Dopiero co sko\u0144czy\u0142em si\u0119 przebija\u0107 przez ich oryginalne publikacje, a tutaj ju\u017c wskoczy\u0142a nowa, dotycz\u0105ca dalszych usprawnie\u0144 profilowania&#8230; dodatkowo zmiksowanych z Machine Learningiem.<\/p>\n\n\n\n<p>Ale zanim sobie przeskoczymy dalej, najpierw pora zdefiniowa\u0107 dwa terminy &#8211; profilowanie statyczne i profilowanie dynamiczne, czyli dwa r\u00f3\u017cne podej\u015bcia do analizy i optymalizacji kodu w kontek\u015bcie kompilacji Ahead of Time (AOT). Statyczne profilowanie, bazuj\u0105c na heurystykach i analizie strukturalnej kodu \u017ar\u00f3d\u0142owego przed jego wykonaniem, nie bierze pod uwag\u0119 danych wej\u015bciowych czy warunk\u00f3w wykonania. Chocia\u017c jest skuteczne w wst\u0119pnej optymalizacji, jak inlining czy eliminacja martwego kodu, mo\u017ce nie uwzgl\u0119dnia\u0107 wszystkich rzeczywistych scenariuszy u\u017cytkowania, co mo\u017ce prowadzi\u0107 do suboptymalnej wydajno\u015bci w nieprzewidzianych warunkach.<\/p>\n\n\n\n<p>Dynamiczne profilowanie, z drugiej strony, odbywa si\u0119 w czasie rzeczywistego wykonania programu i zbiera dane o jego zachowaniu za pomoc\u0105 licznik\u00f3w w kluczowych punktach. Ta metoda pozwala na bardzo dok\u0142adne dostosowanie optymalizacji do faktycznych warunk\u00f3w pracy aplikacji, co jest korzystne w zmiennych \u015brodowiskach. Jednak\u017ce, dynamiczne profilowanie wymaga dodatkowego obci\u0105\u017cenia wydajno\u015bciowego w czasie wykonania ze wzgl\u0119du na potrzeb\u0119 zbierania danych, co mo\u017ce wp\u0142yn\u0105\u0107 negatywnie na czas odpowiedzi aplikacji. Dodatkowo, przygotowanie odpowiednich scenariuszy testowych samo w sobie jest wyczynem, o czym wie ka\u017cdy kto kiedykolwiek &#8222;rozgrzewa\u0142&#8221; swoj\u0105 aplikacje przed jej uruchomieniem na produkcji.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"731\" height=\"313\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-16.png\" alt=\"\" class=\"wp-image-18160\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-16.png 731w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-16-300x128.png 300w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/figure><\/div>\n\n\n<p>W zesz\u0142ym tygodniu ukaza\u0142 si\u0119 paper <a href=\"https:\/\/www.sciencedirect.com\/science\/authShare\/S0164121224001031\/20240418T161800Z\/1?md5=53510b2d76cb9d8654f14151389c67af&amp;dgcid=coauthor\">GraalSP: Polyglot, efficient, and robust machine learning-based static profiler<\/a>, autorstwa Milan \u010cugurovi\u0107, Milena Vujo\u0161evi\u0107 Jani\u010di\u0107 , Vojin Jovanovi\u0107 oraz Thomas W\u00fcrthinger. GraalSP to nowe rozwi\u0105zanie powsta\u0142e w ramach GraalVM, radzi sobie z wyzwaniami zwi\u0105zanymi z profilowaniem statycznym, wykorzystuj\u0105c machine learning) do efektywniejszego generowania profili. Dzi\u0119ki zastosowaniu wysokopoziomowej grafowej reprezentacji po\u015bredniej (b\u0119d\u0105cej znakiem rozpoznawczym Graala), GraalSP jest zar\u00f3wno portowalny, jak i poliglotyczny, co pozwala na jego zastosowanie w r\u00f3\u017cnych j\u0119zykach kompiluj\u0105cych do bytecode&#8217;u Javy, takich jak Java, Scala czy Kotlin (czyli tak \u015brednio poliglotyczny w stosunku do cho\u0107by Truffle, ale i tak odbiera pewnie mas\u0119 roboty tw\u00f3rcom). U\u017cywa modelu XGBoost, kt\u00f3ry jest efektywniejszy od g\u0142\u0119bokich sieci neuronowych stosowanych w innych ML-opartych profilerach, minimalizuj\u0105c czas i z\u0142o\u017cono\u015b\u0107 kompilacji.<\/p>\n\n\n\n<p>Dodatkowo, GraalSP wzbogaca swoj\u0105 funkcjonalno\u015b\u0107 o heurystyki predykcji prawdopodobie\u0144stwa ga\u0142\u0119zi, kt\u00f3re zapewniaj\u0105 wy\u017csz\u0105 wydajno\u015b\u0107 skompilowanych program\u00f3w, nawet w przypadku niedok\u0142adnych predykcji profilu. To zwi\u0119ksza odporno\u015b\u0107 (robustness) optymalizacji, minimalizuj\u0105c potencjalne negatywne wp\u0142ywy na wydajno\u015b\u0107 ko\u0144cowej produktu. Takie podej\u015bcie czyni GraalSP szczeg\u00f3lnie warto\u015bciowym w dynamicznie zmieniaj\u0105cych si\u0119 \u015brodowiskach wykonawczych. Integracja GraalSP z kompilatorem Graal podobno demonstruje praktyczne korzy\u015bci tego rozwi\u0105zania, osi\u0105gaj\u0105c przyspieszenie czasu wykonania o \u015brednio 7,46% w por\u00f3wnaniu do standardowej konfiguracji kompilatora.<\/p>\n\n\n\n<p>Og\u00f3lnie polecam ca\u0142y paper &#8211; jest dost\u0119pny dla wszystkich zainteresowanych. Spodziewam si\u0119, \u017ce ju\u017c nied\u0142ugo dostaniemy jakich\u015b informacje o wci\u0105gni\u0119ciu projektu do g\u0142\u00f3wnej ga\u0142\u0119zi, mo\u017ce ju\u017c przy okazji GraalVM for JDK 23?<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"260\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-19.png\" alt=\"\" class=\"wp-image-18167\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-19.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-19-300x130.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><figcaption class=\"wp-element-caption\"> A je\u017celi bardzo by\u015bcie chcieli, ale jako\u015b nie mo\u017cecie si\u0119 za whitepapery zabra\u0107&#8230; dajcie sobie czas. Przyznam, \u017ce powy\u017cszy obrazek dobrze odzwierciedla moje do\u015bwiadczenia z czytania paper\u00f3w &#8211; ale z czasem wyrabia sobie odpowiedni mi\u0119sie\u0144 w m\u00f3zgu i zaczyna to nawet lubi\u0107 .<\/figcaption><\/figure><\/div>\n\n\n<p>A jak ju\u017c jeste\u015bmy przy og\u0142oszeniach GraalVM, to czas przej\u015b\u0107 do Release Radaru.<\/p>\n\n\n\n<h2 id=\"4-release-radar\" data-num=4>4. Release Radar<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"585\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-1024x585.png\" alt=\"\" class=\"wp-image-18140\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-1024x585.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-300x171.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-768x439.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-1536x878.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a><\/h3>\n\n\n\n<p>Pami\u0119tacie projekt Graal Cloud Native? By\u0142 to zestaw modu\u0142\u00f3w stworzona w Oracle zaprojektowan\u0105 specjalnie do Micronauta, u\u0142atwiaj\u0105cy rozw\u00f3j aplikacji chmurowych, oferuj\u0105c starannie dobrany zestaw modu\u0142\u00f3w frameworka Micronaut. Modu\u0142y te by\u0142y zaprojektowane do kompilacji Ahead-of-Time z u\u017cyciem GraalVM Native Image i mia\u0142y na celu dostarczenie deweloperom niezale\u017cnych od platformy API i bibliotek obejmuj\u0105cych g\u0142\u00f3wne us\u0142ugi chmurowe takie jak Oracle Cloud Infrastructure (OCI), Amazon Web Services (AWS) i Google Cloud Platform (GCP), z planowanym przysz\u0142ym wsparciem dla Microsoft Azure.<\/p>\n\n\n\n<p>Projekt jest dalej rozwijany, ale wraz z now\u0105 wersj\u0105 Graal Cloud Native zosta\u0142 przemianowany Graal Development Kit for Micronaut. Zmiana ta by\u0142a podyktowana opiniami u\u017cytkownik\u00f3w oraz pragnieniem lepszego zwi\u0105zanie ca\u0142o\u015bci z brandem Micronauta, i klarowniej odzwierciedla teraz cel i wizji projektu. Szanuj\u0119 prostot\u0119 i podej\u015bcie na zasadzie kawa na \u0142aw\u0119 &#8211; t\u0142umaczenie komukolwiek czym w og\u00f3le jest Graal Cloud Native by\u0142o szalenie problematyczne, teraz od wiadomo o co chodzi na pierwszy rzut oka. Zreszt\u0105, do konwencji nazewniczych Oracle jeszcze dzisiaj wr\u00f3cimy.<\/p>\n\n\n\n<p>Poza zmian\u0105 nazwy <a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a> Micronaut do wersji 4.3.7 (czy ju\u017c wspomina\u0142em, \u017ce lubi\u0119 jak rzeczy s\u0105 proste i klarowne!), zapewniaj\u0105c kompatybilno\u015b\u0107 mi\u0119dzy jego modu\u0142ami a zale\u017cno\u015bciami, co pomaga w minimalizacji ryzyka niekompatybilno\u015bci z ekosystemem bibliotek. Ponadto, Graal Development Kit obs\u0142uguje teraz zar\u00f3wno Java 21, jak i Java 17, i zwi\u0119kszy\u0142 kompatybilno\u015b\u0107 z opcjami dla kompilacji Ahead-of-Time pochodz\u0105cymi z Oracle GraalVM. Dodatkowo wydanie zawiera nowe przewodniki dotycz\u0105ce tworzenia, wdra\u017cania i uruchamiania funkcji serwerless na g\u0142\u00f3wnych platformach chmurowych, a tak\u017ce aktualizacje narz\u0119dzi deweloperskich i rozszerze\u0144 dla \u015brodowisk takich jak IntelliJ Idea i Visual Studio Code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a><\/h3>\n\n\n\n<p><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a> to przede wszystkim usprawnienia w obs\u0142udze warstwy danych, w tym nowy modu\u0142 POJO Mappera pochodz\u0105cego z Hibernate Search. Funkcja ta umo\u017cliwia bezpo\u015brednie indeksowanie dowolnych obiekt\u00f3w POJO (Plain Old Java Objects), co u\u0142atwia obs\u0142ug\u0119 strukturyzowanych danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142, takich jak pliki i encje MongoDB. Dodatkowo, Quarkus 3.10 aktualizuje swoj\u0105 integracj\u0119 z Flyway do wersji 10, co rozwi\u0105zuje wcze\u015bniejsze problemy z kompatybilno\u015bci\u0105 z natywnymi wykonaniami oraz oferuje ulepszone narz\u0119dzia migracji bazy danych.<\/p>\n\n\n\n<p>Wydanie to zawiera r\u00f3wnie\u017c zmiany w zarz\u0105dzaniu konfiguracj\u0105 dzi\u0119ki uporz\u0105dkowaniu parametr\u00f3w konfiguracyjnych <code>quarkus.package.*<\/code>, co z jednej strony u\u0142atwi rozszerzanie i utrzymanie w przysz\u0142o\u015bci ich rosn\u0105cego podzbioru, z drugiej za\u015b w niekt\u00f3rych przypadkach mo\u017ce wymaga\u0107 r\u0119cznie migracji. Quarkus 3.10.0 przynosi r\u00f3wnie\u017c aktualizacje Quarkus CXF, narz\u0119dzia umo\u017cliwiaj\u0105cego tworzenie i konsumpcj\u0119 us\u0142ug sieciowych SOAP.<\/p>\n\n\n\n<p>Ostatni zestaw poprawek dotyczy Securit, kt\u00f3re w Quarkus 3.10 doczeka\u0142o si\u0119 kilku usprawnieniom. Obejmuj\u0105 one mo\u017cliwo\u015b\u0107 wyboru mechanizm\u00f3w uwierzytelniania dla endpoint\u00f3w REST za pomoc\u0105 adnotacji, opcjonalne szyfrowanie ciasteczek sesji OpenIDConnect oraz wsparcie dla niestandardowej walidacji roszcze\u0144 JWT OIDC za pomoc\u0105 zale\u017cno\u015bci Jose4j oraz nowego walidatora <code>TokenCertificateValidator<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a><\/h3>\n\n\n\n<p>A skoro w Quarkusie tyle nowo\u015bci dotycz\u0105cych baz danych, to warto przygl\u0105dn\u0105\u0107 si\u0119 te\u017c <a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a>, kt\u00f3ry mi\u0119dzy innymi wprowadza usprawnienia w obs\u0142udze obiekt\u00f3w Java Time zgodnie ze specyfikacj\u0105 JDBC 4.2. Wcze\u015bniej Hibernate zarz\u0105dza\u0142 obiektami Java Time, u\u017cywaj\u0105c po\u015brednich form <code>java.sql.Date<\/code>, <code>java.sql.Time<\/code> czy <code>java.sql.Timestamp<\/code>, a nowa aktualizacja umo\u017cliwia bezpo\u015brednie przekazywanie obiekt\u00f3w takich jak <code>OffsetDateTime<\/code>, <code>OffsetTime<\/code> i <code>ZonedDateTime<\/code>, kt\u00f3re zawieraj\u0105 jasno okre\u015blone informacje o strefie czasowej. Ta zmiana zast\u0119puje starsze metody, gdzie informacje o strefie czasowej nie by\u0142y zachowywane z powodu ogranicze\u0144 wariant\u00f3w <code>java.sql<\/code>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"492\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-6.png\" alt=\"\" class=\"wp-image-18138\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-6.png 372w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-6-227x300.png 227w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><figcaption class=\"wp-element-caption\">Wszyscy kochamy TimeZony<\/figcaption><\/figure><\/div>\n\n\n<p>Aktualizacja obejmuje r\u00f3wnie\u017c zmiany w konfiguracji pami\u0119ci podr\u0119cznej zapyta\u0144. Przej\u015bcie z \u201ep\u0142ytkiego\u201d na \u201epe\u0142ne\u201d reprezentowanie encji i kolekcji w wersji 6.0, (kt\u00f3re mia\u0142o na celu zmniejszenie liczby odwo\u0142a\u0144 do bazy danych poprzez przechowywanie pe\u0142nych danych dla wynik\u00f3w fetch join w pami\u0119ci podr\u0119cznej zapyta\u0144) skutkowa\u0142o bowiem zwi\u0119kszonym zu\u017cyciem pami\u0119ci i potencjalnie wi\u0119ksz\u0105 aktywno\u015bci\u0105 Garbage Collectora. Wersja 6.5 umo\u017cliwia wi\u0119c u\u017cytkownikom konfiguracj\u0119 pami\u0119ci podr\u0119cznej &#8211; mo\u017cna to robi\u0107 globalnie lub dla ka\u017cdej encji\/kolekcji, z lepszymi defaultami automatycznie wybieraj\u0105cymi mi\u0119dzy p\u0142ytkim a pe\u0142nym uk\u0142adem cache w zale\u017cno\u015bci od mo\u017cliwo\u015bci przechowywania danej encji\/kolekcji, co zapewnia r\u00f3wnowag\u0119 mi\u0119dzy wydajno\u015bci\u0105 a efektywno\u015bci\u0105 wykorzystania pami\u0119ci.<\/p>\n\n\n\n<p>Ponadto, Hibernate 6.5 obs\u0142uguje teraz u\u017cycie rekord\u00f3w Java jako <code>@IdClass<\/code>, co poprawia mo\u017cliwo\u015bci anotacji i upraszcza identyfikacj\u0119 encji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>record PK(Integer key1, Integer key2) {}\n\n@Entity\n@IdClass(PK.class)\nclass AnEntity {\n        @Id Integer key1;\n        @Id Integer key2;\n        ...\n}\n<\/code><\/pre>\n\n\n\n<p>Wersja ta zawiera r\u00f3wnie\u017c ulepszenia dla <code>StatelessSession<\/code>, takie jak wsparcie dla filtr\u00f3w i logowania SQL, a dla <code>Session<\/code> i <code>StatelessSession<\/code> wprowadzonao tak\u017ce automatyczne w\u0142\u0105czanie filtr\u00f3w. W zapytaniach UPDATE i DELETE mo\u017cna za\u015b teraz u\u017cywa\u0107 hibernatowych join\u00f3w. Bardzo przydatn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 r\u0119cznego przypisywania identyfikator\u00f3w nawet wtedy, gdy s\u0105 one annotowane za pomoc\u0105 <code>@Generator<\/code>. Dodatkowo, pojawi\u0142a si\u0119 te\u017c paginacja oparta na kluczach i klauzula ON CONFLICT dla zapyta\u0144 insert, oferuj\u0105 wi\u0119ksz\u0105 kontrol\u0119 u\u017cytkownikowi.<\/p>\n\n\n\n<p>Wydaniu towarzyszy te\u017c <a href=\"https:\/\/hibernate.org\/reactive\/\">Hibernate Reactive 2.3<\/a>, wspieraj\u0105cy funckjonalno\u015bci Hibernate ORM 6.5.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a><\/h3>\n\n\n\n<p>Trwa sezon Devoxx\u00f3w i pewnie za jaki\u015b czas b\u0119dziemy przebija\u0107 si\u0119 przez konferencyjne wideo, ale w mi\u0119dzyczasie warto wspomnie\u0107 o projekcie Stephana Janssena, tw\u00f3rcy inicjatywy Devoxx(4kids). Stworzy\u0142 on bowiem <a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a>, kt\u00f3ry to jest pluginem do IntelliJ IDEA, zaprojektowany do wsp\u00f3\u0142pracy zar\u00f3wno z lokalnymi, jak i publicznymi LLMai (takimi jak OpenAI, Anthropic i podobne), przy wykorzystaniu popularnych narz\u0119dzi (takich jak Ollama, LM Studio czy GPT4All).<\/p>\n\n\n\n<p>Jak pozosta\u0142e tego typu narz\u0119dzia, oferuj\u0105c funkcje takie jak wyja\u015bnianie kodu, jego review oraz automatyczne generowanie test\u00f3w jednostkowych, czy rozmowy z chatem z poziomu IDE. Standard, ale to co jest wyj\u0105tkowo fajne to fakt, \u017ce w dobie zamkni\u0119tych rozwi\u0105za\u0144 Devoxx Genie jest w pe\u0142ni otwartym projektem Open-Source i do tego napisanym w Javie, wi\u0119c ka\u017cdy mo\u017ce sobie zobaczy\u0107 jak zosta\u0142 zbudowany. Polecam, je\u015bli lubicie sobie poczyta\u0107 czasem kod, mnie a\u017c zach\u0119ci\u0142o do reaktywowania <a href=\"https:\/\/medium.com\/github-all-stars\">mojej starej serii Github All-Star<\/a>. Ju\u017c kt\u00f3ry\u015b raz si\u0119 odgra\u017cam, mo\u017ce kiedy\u015b w ko\u0144cu co\u015b z tym zrobi\u0119.<\/p>\n\n\n\n<p>Ale to nie koniec Code Assistant\u00f3w, poniewa\u017c na sam\u0105 g\u00f3r\u0119 dzisiejszego tortu zostawi\u0142em sobie jeszcze jedn\u0105 wisienk\u0119&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a><\/h3>\n\n\n\n<p>A na ko\u0144cu z\u0142amiemy zasady po raz kolejny zreszt\u0105 (mia\u0142a by\u0107 zwyczajna edycja, a zamiast trzech sekcji s\u0105 cztery&#8230; ale czego spodziewa\u0107 si\u0119 po tym, jak przez dwa tygodnie). Zacz\u0119li\u015bmy Radar od Oracle i na Oracle go zako\u0144czymy, a konkretnie zapowiedzi\u0105 releasu&#8230; ale nie byle jakiego.<\/p>\n\n\n\n<p>I tak mam pod tym k\u0105tem wi\u0119cej honoru ni\u017c Nintendo, kt\u00f3re flexowa\u0142o si\u0119 w tym tygodniu zapowiedzi\u0105 zapowiedzi, cho\u0107 i to nic przy bran\u017cy filmowej, kt\u00f3ra robi teaser trailery do teaser trailer\u00f3w.<\/p>\n\n\n\n<p>Oracle zapowiedzia\u0142o bowiem, \u017ce pracuje nad w\u0142asnym Code Assistem. <a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a> (mo\u017ce ma\u0142o kreatywnie, ale wol\u0119 to od &#8222;kreatywnego&#8221; nazewnictwa us\u0142ug AWS) ma wyr\u00f3\u017cnia\u0107 si\u0119 na tle innych podobnych rozwi\u0105za\u0144, takich jak GitHub Copilot czy Amazon CodeWhisperer (cho\u0107 do tego jeszcze wr\u00f3cimy), dzi\u0119ki specjalizacji w j\u0119zykach Java i SQL oraz g\u0142\u0119bokiej integracji z infrastruktur\u0105 Oracle Cloud (OCI). Narz\u0119dzie zosta\u0142o pono\u0107 zaprojektowane, aby optymalnie wspiera\u0107 specyficzne potrzeby programist\u00f3w pracuj\u0105cych w ekosystemie Oracle.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20.png\" alt=\"\" class=\"wp-image-18169\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20-300x184.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20-768x472.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Czyli pewnie b\u0119dzie robi\u0107 telemetrie infrastruktury firmowej, aby by\u0142o wszystkim \u0142atwiej podczas audytu.<\/figcaption><\/figure><\/div>\n\n\n<p>Podczas gdy GitHub Copilot i Amazon CodeWhisperer oferuj\u0105 wsparcie dla szerokiego zakresu j\u0119zyk\u00f3w programowania, Oracle Code Assist koncentrowa\u0107 si\u0119 ma na dostarczaniu wysoko dostosowanych sugestii kodu, kt\u00f3re s\u0105 typowe dla popularnych bibliotek Javowych, SQL, a tak\u017ce praktykami programowania specyficznymi w\u0142a\u015bnie dla rozwi\u0105za\u0144 Oracle. Ta specjalizacja ma pozwoli\u0107 na bardziej precyzyjne i efektywne wsparcie w codziennej pracy deweloper\u00f3w tworz\u0105cych aplikacje korporacyjne. I wiecie co, ma to sporo sensu &#8211; pewnie Copilot nie nauczy\u0142 si\u0119 na GitHubie za wiele o JDK 1.7, EJB 1.0, Strutsach czy implementacji Enterprise Service Bus, wi\u0119c taki fine-tunning mo\u017ce by\u0107 kusz\u0105cy dla niejednego przedsi\u0119biorstwa.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"823\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-823x1024.png\" alt=\"\" class=\"wp-image-18172\" style=\"width:480px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-823x1024.png 823w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-241x300.png 241w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-768x956.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21.png 1050w\" sizes=\"auto, (max-width: 823px) 100vw, 823px\" \/><figcaption class=\"wp-element-caption\">Tylko mam nadzieje, \u017ce nie robicie sobie z\u0142udze\u0144 \u017ce to cokolwiek pomo\u017ce<\/figcaption><\/figure><\/div>\n\n\n<p>Dodatkowo, Oracle Code Assist wprowadzi funkcj\u0119 Retrieval Augmented Generation (RAG), kt\u00f3ra umo\u017cliwi bezpieczne \u0142\u0105czenie kodu \u017ar\u00f3d\u0142owego organizacji i innych \u017ar\u00f3de\u0142 danych, zapewniaj\u0105c sugestie kodu bardziej dostosowane do specyficznych praktyk organizacji (cho\u0107 wszyscy zdajemy sobie spraw\u0119, \u017ce to akurat nie zawsze b\u0119dzie zalet\u0105, prawda?). Mimo wszystko, tego typu funkcjonalno\u015b\u0107 jest rzadko\u015bci\u0105 w\u015br\u00f3d innych asystent\u00f3w kodowania, co daje Oracle przewag\u0119 w kontek\u015bcie zastosowa\u0144 korporacyjnych i regulowanych sektor\u00f3w, gdzie takie dostosowanie do specyficznych potrzeb jest szczeg\u00f3lnie warto\u015bciowe.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wracamy dzi\u015b do standardowej edycji &#8211; i ta mi si\u0119 przez to ostro rozros\u0142a. Ale mam nadzieje, \u017ce jest fajnie. <\/p>\n","protected":false},"author":10,"featured_media":18178,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-18131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"17","feature_image_blog":false,"weekly_summary":false,"push_notification_image":false,"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>Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - 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\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - Vived\" \/>\n<meta property=\"og:description\" content=\"Wracamy dzi\u015b do standardowej edycji - i ta mi si\u0119 przez to ostro rozros\u0142a. Ale mam nadzieje, \u017ce jest fajnie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-09T10:28:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-09T10:28:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2-1024x560.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"560\" \/>\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\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173\",\"datePublished\":\"2024-05-09T10:28:38+00:00\",\"dateModified\":\"2024-05-09T10:28:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\"},\"wordCount\":3406,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\",\"url\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\",\"name\":\"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png\",\"datePublished\":\"2024-05-09T10:28:38+00:00\",\"dateModified\":\"2024-05-09T10:28:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png\",\"width\":1976,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173\"}]},{\"@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":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - 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\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/","og_locale":"pl_PL","og_type":"article","og_title":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - Vived","og_description":"Wracamy dzi\u015b do standardowej edycji - i ta mi si\u0119 przez to ostro rozros\u0142a. Ale mam nadzieje, \u017ce jest fajnie.","og_url":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/","og_site_name":"Vived","article_published_time":"2024-05-09T10:28:38+00:00","article_modified_time":"2024-05-09T10:28:40+00:00","og_image":[{"width":1024,"height":560,"url":"https:\/\/blog.vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2-1024x560.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\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173","datePublished":"2024-05-09T10:28:38+00:00","dateModified":"2024-05-09T10:28:40+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/"},"wordCount":3406,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/","url":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/","name":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png","datePublished":"2024-05-09T10:28:38+00:00","dateModified":"2024-05-09T10:28:40+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/Group-780-2.png","width":1976,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/java-w-2024-ostatnie-szlify-przed-kotlin-2-0-i-nowy-ml-based-statyczny-profiler-dla-graalvm-jvm-weekly-vol-173\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Java w 2024, ostatnie szlify przed Kotlin 2.0 i nowy ML-based statyczny profiler dla GraalVM \u2013 JVM Weekly vol. 173"}]},{"@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. O czym m\u00f3wi nam \"2024 State of the Java Ecosystem\"<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. O czym m\u00f3wi nam \"2024 State of the Java Ecosystem\"<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18181,"width":"987px","height":"auto","sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22.png\" alt=\"\" class=\"wp-image-18181\" style=\"width:987px;height:auto\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-22.png\" alt=\"\" class=\"wp-image-18181\" style=\"width:987px;height:auto\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Du\u017co raport\u00f3w ostatnio. Dopiero co dwa tygodnie temu po\u015bwi\u0119ci\u0142em ca\u0142\u0105 edycj\u0119 statystykom DataDoga dotycz\u0105cych poziomu bezpiecze\u0144stwa aplikacji Javowych, a w mi\u0119dzyczasie zd\u0105\u017cy\u0142 si\u0119 ukaza\u0107 <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2024-04\/new-relic-state-of-the-java-ecosystem-report-2024-04-30.pdf\">2024 State of the Java Ecosystem<\/a> od NewRelica. Jest to chyba pierwsza publikacja tego typu w tym roku (ogarniacie, \u017ce ju\u017c jeste\u015bmy prawie na p\u00f3\u0142metku \ud83e\udd76?). Rzu\u0107my sobie zatem okiem na to, co ciekawego mo\u017cna z niego wyczyta\u0107 - skupi\u0142em si\u0119 na moich przemy\u015bleniach, sam raport jest sporo szerszy.<\/p>\n","innerContent":["\n<p>Du\u017co raport\u00f3w ostatnio. Dopiero co dwa tygodnie temu po\u015bwi\u0119ci\u0142em ca\u0142\u0105 edycj\u0119 statystykom DataDoga dotycz\u0105cych poziomu bezpiecze\u0144stwa aplikacji Javowych, a w mi\u0119dzyczasie zd\u0105\u017cy\u0142 si\u0119 ukaza\u0107 <a href=\"https:\/\/newrelic.com\/sites\/default\/files\/2024-04\/new-relic-state-of-the-java-ecosystem-report-2024-04-30.pdf\">2024 State of the Java Ecosystem<\/a> od NewRelica. Jest to chyba pierwsza publikacja tego typu w tym roku (ogarniacie, \u017ce ju\u017c jeste\u015bmy prawie na p\u00f3\u0142metku \ud83e\udd76?). Rzu\u0107my sobie zatem okiem na to, co ciekawego mo\u017cna z niego wyczyta\u0107 - skupi\u0142em si\u0119 na moich przemy\u015bleniach, sam raport jest sporo szerszy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18146,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-1024x495.png\" alt=\"\" class=\"wp-image-18146\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-9-1024x495.png\" alt=\"\" class=\"wp-image-18146\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Raport mocno skupia si\u0119 na szybszej adopcji JDK 21, ni\u017c JDK 17, ale te ich pojedyncze procenty to z mojej perspektywy i tak b\u0142\u0105d statystyczny. Du\u017co ciekawszym jest chyba to, \u017ce jednak wzrosty u\u017cycia JDK 17 wydaj\u0105 si\u0119 wynika\u0107 g\u0142\u00f3wnie z kanibalizacji JDK 11. Zak\u0142adaj\u0105c, \u017ce sam New Relic ro\u015bnie (<a href=\"https:\/\/stockanalysis.com\/stocks\/newr\/revenue\/\">13.48% growth year-over-year<\/a>), mo\u017cna za\u0142o\u017cy\u0107, \u017ce w liczbach bezwzgl\u0119dnych ilo\u015b\u0107 workload\u00f3w JDK 1.8 jest stabilna i wi\u0119kszo\u015b\u0107 projekt\u00f3w ju\u017c na niej pozostanie.<\/p>\n","innerContent":["\n<p>Raport mocno skupia si\u0119 na szybszej adopcji JDK 21, ni\u017c JDK 17, ale te ich pojedyncze procenty to z mojej perspektywy i tak b\u0142\u0105d statystyczny. Du\u017co ciekawszym jest chyba to, \u017ce jednak wzrosty u\u017cycia JDK 17 wydaj\u0105 si\u0119 wynika\u0107 g\u0142\u00f3wnie z kanibalizacji JDK 11. Zak\u0142adaj\u0105c, \u017ce sam New Relic ro\u015bnie (<a href=\"https:\/\/stockanalysis.com\/stocks\/newr\/revenue\/\">13.48% growth year-over-year<\/a>), mo\u017cna za\u0142o\u017cy\u0107, \u017ce w liczbach bezwzgl\u0119dnych ilo\u015b\u0107 workload\u00f3w JDK 1.8 jest stabilna i wi\u0119kszo\u015b\u0107 projekt\u00f3w ju\u017c na niej pozostanie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18152,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12.png\" alt=\"\" class=\"wp-image-18152\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-12.png\" alt=\"\" class=\"wp-image-18152\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To co mnie osobi\u015bcie szalenie cieszy, to jak mocno Adoptium przebija si\u0119 do masowej \u015bwiadomo\u015bci. Sam zauwa\u017cam, \u017ce powoli zwi\u0119ksza si\u0119 \u015bwiadomo\u015b\u0107 spo\u0142eczno\u015bci i firm, \u017ce Adoptium to nie jest jaki\u015b obcy byt, a po prostu legitny wariant JDK, kt\u00f3rego warto u\u017cywa\u0107. Przy czym musze przyzna\u0107, \u017ce bardzo trudno jest mi zrozumie\u0107 tak dramatyczny spadek popularno\u015bci Corretto i wygl\u0105da mi to raczej na jaki\u015b b\u0142\u0105d w raportowaniu wynik\u00f3w, metodologii - New Relic bazuje na telemetrii, wi\u0119c mo\u017cliwe, \u017ce Amazon wewn\u0119trznie zacz\u0105\u0142 u\u017cywa\u0107 jakiego\u015b innego JDK i to tak zawa\u017cy\u0142o na us\u0142ugach. New Relic - ch\u0119tnie us\u0142ysza\u0142bym czy macie na ten temat jakie\u015b przemy\u015blenia nie zawarte w raporcie.<\/p>\n","innerContent":["\n<p>To co mnie osobi\u015bcie szalenie cieszy, to jak mocno Adoptium przebija si\u0119 do masowej \u015bwiadomo\u015bci. Sam zauwa\u017cam, \u017ce powoli zwi\u0119ksza si\u0119 \u015bwiadomo\u015b\u0107 spo\u0142eczno\u015bci i firm, \u017ce Adoptium to nie jest jaki\u015b obcy byt, a po prostu legitny wariant JDK, kt\u00f3rego warto u\u017cywa\u0107. Przy czym musze przyzna\u0107, \u017ce bardzo trudno jest mi zrozumie\u0107 tak dramatyczny spadek popularno\u015bci Corretto i wygl\u0105da mi to raczej na jaki\u015b b\u0142\u0105d w raportowaniu wynik\u00f3w, metodologii - New Relic bazuje na telemetrii, wi\u0119c mo\u017cliwe, \u017ce Amazon wewn\u0119trznie zacz\u0105\u0142 u\u017cywa\u0107 jakiego\u015b innego JDK i to tak zawa\u017cy\u0142o na us\u0142ugach. New Relic - ch\u0119tnie us\u0142ysza\u0142bym czy macie na ten temat jakie\u015b przemy\u015blenia nie zawarte w raporcie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18156,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14.png\" alt=\"\" class=\"wp-image-18156\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-14.png\" alt=\"\" class=\"wp-image-18156\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Za bardzo interesuj\u0105c\u0105 uwa\u017cam za\u015b obserwacje m\u00f3wi\u0105c\u0105 o sporym rozje\u017adzie mi\u0119dzy adopcj\u0105 G1 jako domy\u015blnego Garbage Collectora, a trendem redukcji CPU Core dost\u0119pnych dla aplikacji. Te dwa trendy pozostaj\u0105 ze sob\u0105 w kontrze, jako \u017ce G1 stworzone zosta\u0142o do \u015brodowisk posiadaj\u0105cych wiele rdzeni. To, czego raport New Relica nie pokazuje, to czy wzrosty obu tych tendencji rzeczywi\u015bcie dotycz\u0105 tych samych aplikacji, ale podejrzewam, \u017ce nie wszyscy jednak przeczytali \"drobny druczek\".<\/p>\n","innerContent":["\n<p>Za bardzo interesuj\u0105c\u0105 uwa\u017cam za\u015b obserwacje m\u00f3wi\u0105c\u0105 o sporym rozje\u017adzie mi\u0119dzy adopcj\u0105 G1 jako domy\u015blnego Garbage Collectora, a trendem redukcji CPU Core dost\u0119pnych dla aplikacji. Te dwa trendy pozostaj\u0105 ze sob\u0105 w kontrze, jako \u017ce G1 stworzone zosta\u0142o do \u015brodowisk posiadaj\u0105cych wiele rdzeni. To, czego raport New Relica nie pokazuje, to czy wzrosty obu tych tendencji rzeczywi\u015bcie dotycz\u0105 tych samych aplikacji, ale podejrzewam, \u017ce nie wszyscy jednak przeczytali \"drobny druczek\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18158,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15.png\" alt=\"\" class=\"wp-image-18158\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-15.png\" alt=\"\" class=\"wp-image-18158\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No i na sam koniec - zdecydowanie powinienem si\u0119 zainteresowa\u0107 bibliotek\u0105 Bouncy Castle. Doda\u0142em j\u0105 do swojego prywatnego \"radaru\".<\/p>\n","innerContent":["\n<p>No i na sam koniec - zdecydowanie powinienem si\u0119 zainteresowa\u0107 bibliotek\u0105 Bouncy Castle. Doda\u0142em j\u0105 do swojego prywatnego \"radaru\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Ostatnie szlify przed premier\u0105 Kotlin 2.0<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Ostatnie szlify przed premier\u0105 Kotlin 2.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18132,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-1024x585.png\" alt=\"\" class=\"wp-image-18132\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-5-1024x585.png\" alt=\"\" class=\"wp-image-18132\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przeskoczmy sobie p\u0142ynnie do Kotlina - wida\u0107 bowiem, \u017ce przygotowania do wielkiej premiery K2 trwaj\u0105 i dostli\u015bmy kilka interesuj\u0105cych og\u0142osze\u0144 i publikacji. Pierwsz\u0105 z <a href=\"https:\/\/kotlinlang.org\/docs\/k2-compiler-migration-guide.html\">nich jest oficjalny migration guide<\/a>, kt\u00f3ry jest regularnie aktualizowany o zmiany w kolejnych wersjach RC Kotlin 2.0, a dodatkowo stanowi dobre wprowadzenie do nowych opcji syntaxu, kt\u00f3re te\u017c zosta\u0142y niedawno do Kotlina wprowadzone, dzi\u0119ki czemu \"za\u0142apa\u0142y\" si\u0119 do poradnika dla os\u00f3b chc\u0105cych zmodernizowa\u0107 sw\u00f3j codebase.<\/p>\n","innerContent":["\n<p>Przeskoczmy sobie p\u0142ynnie do Kotlina - wida\u0107 bowiem, \u017ce przygotowania do wielkiej premiery K2 trwaj\u0105 i dostli\u015bmy kilka interesuj\u0105cych og\u0142osze\u0144 i publikacji. Pierwsz\u0105 z <a href=\"https:\/\/kotlinlang.org\/docs\/k2-compiler-migration-guide.html\">nich jest oficjalny migration guide<\/a>, kt\u00f3ry jest regularnie aktualizowany o zmiany w kolejnych wersjach RC Kotlin 2.0, a dodatkowo stanowi dobre wprowadzenie do nowych opcji syntaxu, kt\u00f3re te\u017c zosta\u0142y niedawno do Kotlina wprowadzone, dzi\u0119ki czemu \"za\u0142apa\u0142y\" si\u0119 do poradnika dla os\u00f3b chc\u0105cych zmodernizowa\u0107 sw\u00f3j codebase.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie jedyna z nowych publikacji od JetBrains. W ostatnich tygodniach ukaza\u0142 si\u0119 bowiem r\u00f3wnie\u017c tekst <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/04\/k2-compiler-performance-benchmarks-and-how-to-measure-them-on-your-projects\/\">K2 Compiler Performance Benchmarks and How to Measure Them on Your Projects<\/a>, nie tylko prezentuj\u0105cy benchmarki, ale te\u017c wyja\u015bniaj\u0105cy techniczne powody zmian w charakterystyce wydajno\u015bciowej poszczeg\u00f3lnych aplikacji. Zasadnicza zmiana w K2 (a g\u0142\u00f3wnie w jego frontendzie) polega na u\u017cyciu jednej zintegrowanej struktury danych zawieraj\u0105cej. Dzi\u0119ki tej zmianie kompilator nie tylko zarz\u0105dza jedn\u0105 struktur\u0105 danych zamiast dw\u00f3ch, ale r\u00f3wnie\u017c korzysta z dodatkowych informacji semantycznych, co usprawnia zar\u00f3wno proces kompilacji, jak i analiz\u0119 kodu w \u015brodowisku IntelliJ IDEA. Ta innowacja nie tylko zwi\u0119kszaj\u0105 efektywno\u015b\u0107 kompilacji, ale tak\u017ce u\u0142atwiaj\u0105 implementacj\u0119 nowych funkcji j\u0119zykowych, szczeg\u00f3lnie w kontek\u015bcie d\u0105\u017cenia do unifikacji obs\u0142ugi r\u00f3\u017cnych platform przez Kotlin Multiplatform, co stanowi jeden z g\u0142\u00f3wnych cel\u00f3w K2.<\/p>\n","innerContent":["\n<p>To jednak nie jedyna z nowych publikacji od JetBrains. W ostatnich tygodniach ukaza\u0142 si\u0119 bowiem r\u00f3wnie\u017c tekst <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2024\/04\/k2-compiler-performance-benchmarks-and-how-to-measure-them-on-your-projects\/\">K2 Compiler Performance Benchmarks and How to Measure Them on Your Projects<\/a>, nie tylko prezentuj\u0105cy benchmarki, ale te\u017c wyja\u015bniaj\u0105cy techniczne powody zmian w charakterystyce wydajno\u015bciowej poszczeg\u00f3lnych aplikacji. Zasadnicza zmiana w K2 (a g\u0142\u00f3wnie w jego frontendzie) polega na u\u017cyciu jednej zintegrowanej struktury danych zawieraj\u0105cej. Dzi\u0119ki tej zmianie kompilator nie tylko zarz\u0105dza jedn\u0105 struktur\u0105 danych zamiast dw\u00f3ch, ale r\u00f3wnie\u017c korzysta z dodatkowych informacji semantycznych, co usprawnia zar\u00f3wno proces kompilacji, jak i analiz\u0119 kodu w \u015brodowisku IntelliJ IDEA. Ta innowacja nie tylko zwi\u0119kszaj\u0105 efektywno\u015b\u0107 kompilacji, ale tak\u017ce u\u0142atwiaj\u0105 implementacj\u0119 nowych funkcji j\u0119zykowych, szczeg\u00f3lnie w kontek\u015bcie d\u0105\u017cenia do unifikacji obs\u0142ugi r\u00f3\u017cnych platform przez Kotlin Multiplatform, co stanowi jeden z g\u0142\u00f3wnych cel\u00f3w K2.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18162,"width":"500px","height":"auto","sizeSlug":"full","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-17.png\" alt=\"\" class=\"wp-image-18162\" style=\"width:500px;height:auto\"\/><figcaption class=\"wp-element-caption\">Co by si\u0119 wreszcie g\u0142upi javowcy przestali pod\u015bmiechiwa\u0107 <\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-17.png\" alt=\"\" class=\"wp-image-18162\" style=\"width:500px;height:auto\"\/><figcaption class=\"wp-element-caption\">Co by si\u0119 wreszcie g\u0142upi javowcy przestali pod\u015bmiechiwa\u0107 <\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wed\u0142ug prezentowanych wynik\u00f3w, wydajno\u015b\u0107 kompilatora Kotlin K2 prezentuje si\u0119 imponuj\u0105co, zw\u0142aszcza w por\u00f3wnaniu do poprzedniej wersji. Prace nad now\u0105 architektur\u0105 kompilatora, kt\u00f3ra obejmowa\u0142a przepisanie go od zera, zaowocowa\u0142y znacznymi ulepszeniami w szybko\u015bci kompilacji. Zmiany te s\u0105 szczeg\u00f3lnie widoczne w r\u00f3\u017cnych fazach kompilacji. Tekst od JetBrains podaje, \u017ce na przyk\u0142ad w projekcie Anki-Android czas kompilacji \"od zera\" (clean build) zmniejszy\u0142 si\u0119 z 57,7 sekundy w wersji 1.9.23 do 29,7 sekundy w wersji 2.0.0, co stanowi zysk na poziomie 94%. Podobne ulepszenia zaobserwowano w fazie inicjalizacji i analizy, gdzie zanotowano wzrost szybko\u015bci odpowiednio o 488% i 376%. Te usprawnienia wynikaj\u0105 z wdro\u017cenia nowego algorytmu wnioskowania o typach oraz nowych backend\u00f3w IR dla JVM i JS, co razem z nowym frontendem znacznie przyspiesza procesy kompilacji. Mimo tego, autorzy przestrzegaj\u0105 tak\u017ce o tym, \u017ce monitorowa\u0107 i dostosowywa\u0107 procesy kompilacji, korzystaj\u0105c z narz\u0119dzi takich jak raporty budowania Kotlin, kt\u00f3re pomagaj\u0105 zrozumie\u0107 i optymalizowa\u0107 czas kompilacji.<\/p>\n","innerContent":["\n<p>Wed\u0142ug prezentowanych wynik\u00f3w, wydajno\u015b\u0107 kompilatora Kotlin K2 prezentuje si\u0119 imponuj\u0105co, zw\u0142aszcza w por\u00f3wnaniu do poprzedniej wersji. Prace nad now\u0105 architektur\u0105 kompilatora, kt\u00f3ra obejmowa\u0142a przepisanie go od zera, zaowocowa\u0142y znacznymi ulepszeniami w szybko\u015bci kompilacji. Zmiany te s\u0105 szczeg\u00f3lnie widoczne w r\u00f3\u017cnych fazach kompilacji. Tekst od JetBrains podaje, \u017ce na przyk\u0142ad w projekcie Anki-Android czas kompilacji \"od zera\" (clean build) zmniejszy\u0142 si\u0119 z 57,7 sekundy w wersji 1.9.23 do 29,7 sekundy w wersji 2.0.0, co stanowi zysk na poziomie 94%. Podobne ulepszenia zaobserwowano w fazie inicjalizacji i analizy, gdzie zanotowano wzrost szybko\u015bci odpowiednio o 488% i 376%. Te usprawnienia wynikaj\u0105 z wdro\u017cenia nowego algorytmu wnioskowania o typach oraz nowych backend\u00f3w IR dla JVM i JS, co razem z nowym frontendem znacznie przyspiesza procesy kompilacji. Mimo tego, autorzy przestrzegaj\u0105 tak\u017ce o tym, \u017ce monitorowa\u0107 i dostosowywa\u0107 procesy kompilacji, korzystaj\u0105c z narz\u0119dzi takich jak raporty budowania Kotlin, kt\u00f3re pomagaj\u0105 zrozumie\u0107 i optymalizowa\u0107 czas kompilacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I bardzo s\u0142usznie, bo powy\u017csze to dane od samych JetBrains, b\u0119d\u0105cych niejako s\u0119dzi\u0105 we w\u0142asnej sprawie - dlatego te\u017c fajnie, \u017ce zaczynaj\u0105 nam si\u0119 pojawia\u0107 publikacje od os\u00f3b zewn\u0119trznych. W swojej szczeg\u00f3\u0142owej <a href=\"https:\/\/www.zacsweers.dev\/preparing-for-k2\/\">recenzji nadchodz\u0105cej wersji Kotlin K2<\/a>, Zac Sweers ze Slacka dzieli si\u0119 swoimi spostrze\u017ceniami na temat ulepsze\u0144 K2, ale te\u017c wi\u0105\u017c\u0105cych si\u0119 z ni\u0105 wyzwa\u0144 zwi\u0105zanych. Patrzy na nie bez lukru i trze\u017awo, podkre\u015blaj\u0105c, \u017ce ostrzejsze wykrywania b\u0142\u0119d\u00f3w w K2, szczeg\u00f3lnie wok\u00f3\u0142 obs\u0142ugi nullowalno\u015bci, z jednej strony obiecuje czystszych praktyk kodowania, z drugiej mog\u0105 wymaga\u0107 od programist\u00f3w reagowania na nowe ostrze\u017cenia czy b\u0142\u0119dy, co pocz\u0105tkowo mo\u017ce by\u0107 problematyczne. Sweers zwraca r\u00f3wnie\u017c uwag\u0119 na znacz\u0105ce zmiany w obs\u0142udze mechanizm\u00f3w t\u0142umienia kompilatora oraz wprowadzenie bardziej zaawansowanych mo\u017cliwo\u015bci rzutowania typ\u00f3w. Ponadto, ostrzega przed potencjalnymi problemami z integracj\u0105 z Gradle, szczeg\u00f3lnie w przypadku skomplikowanych lub wieloplatformowych projekt\u00f3w, podkre\u015bla te\u017c konieczno\u015b\u0107 dostosowania wtyczek kompilatora ze wzgl\u0119du na aktualizacje interfejsu API mi\u0119dzy wersjami Kotlin.<\/p>\n","innerContent":["\n<p>I bardzo s\u0142usznie, bo powy\u017csze to dane od samych JetBrains, b\u0119d\u0105cych niejako s\u0119dzi\u0105 we w\u0142asnej sprawie - dlatego te\u017c fajnie, \u017ce zaczynaj\u0105 nam si\u0119 pojawia\u0107 publikacje od os\u00f3b zewn\u0119trznych. W swojej szczeg\u00f3\u0142owej <a href=\"https:\/\/www.zacsweers.dev\/preparing-for-k2\/\">recenzji nadchodz\u0105cej wersji Kotlin K2<\/a>, Zac Sweers ze Slacka dzieli si\u0119 swoimi spostrze\u017ceniami na temat ulepsze\u0144 K2, ale te\u017c wi\u0105\u017c\u0105cych si\u0119 z ni\u0105 wyzwa\u0144 zwi\u0105zanych. Patrzy na nie bez lukru i trze\u017awo, podkre\u015blaj\u0105c, \u017ce ostrzejsze wykrywania b\u0142\u0119d\u00f3w w K2, szczeg\u00f3lnie wok\u00f3\u0142 obs\u0142ugi nullowalno\u015bci, z jednej strony obiecuje czystszych praktyk kodowania, z drugiej mog\u0105 wymaga\u0107 od programist\u00f3w reagowania na nowe ostrze\u017cenia czy b\u0142\u0119dy, co pocz\u0105tkowo mo\u017ce by\u0107 problematyczne. Sweers zwraca r\u00f3wnie\u017c uwag\u0119 na znacz\u0105ce zmiany w obs\u0142udze mechanizm\u00f3w t\u0142umienia kompilatora oraz wprowadzenie bardziej zaawansowanych mo\u017cliwo\u015bci rzutowania typ\u00f3w. Ponadto, ostrzega przed potencjalnymi problemami z integracj\u0105 z Gradle, szczeg\u00f3lnie w przypadku skomplikowanych lub wieloplatformowych projekt\u00f3w, podkre\u015bla te\u017c konieczno\u015b\u0107 dostosowania wtyczek kompilatora ze wzgl\u0119du na aktualizacje interfejsu API mi\u0119dzy wersjami Kotlin.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli za\u015b chodzi o opisywan\u0105 przed chwil\u0105 wydajno\u015b\u0107, Sweers dzieli si\u0119 mieszank\u0105 wynik\u00f3w na podstawie swoich test\u00f3w, kt\u00f3re kontrastuj\u0105 z obietnicami JetBrains o znacz\u0105cych ulepszeniach out-of-the-box. Podczas gdy niekt\u00f3re projekty mog\u0105 zauwa\u017cy\u0107 skromne ulepszenia, inne do\u015bwiadczaj\u0105 spowolnie\u0144, co sugeruje zmienny wp\u0142yw w r\u00f3\u017cnych \u015brodowiskach. Przyk\u0142adowo, eksperymenty w Slack wykaza\u0142y obni\u017cenie wydajno\u015bci o oko\u0142o 17%, przynajmniej gdy wci\u0105\u017c u\u017cywano KSP 1. W innym projekcie, CatchUp, zauwa\u017cono znacz\u0105ce ulepszenia, jednak kolejny projekt, Circuit, znowu do\u015bwiadczy\u0142 podobnych spowolnie\u0144. Podkre\u015bla to konieczno\u015b\u0107 przeprowadzenia w\u0142asnych test\u00f3w wydajno\u015bci, aby w pe\u0142ni zrozumie\u0107, jak zmiany w K2 b\u0119d\u0105 wp\u0142ywa\u0107 na ich projekty - ka\u017cdy build jest nieco inny, a dzisiejszy proces kompilacji projekt\u00f3w jest na tyle skomplikowany, \u017ce nie ka\u017cda aplikacja b\u0119dzie cieszy\u0107 si\u0119 z \"darmowych\" wzrost\u00f3w wydajno\u015bci. W wielu przypadkach b\u0119dziemy musieli wzi\u0105\u0107 spos\u00f3b tworzenia aplikacji pod lup\u0119.<\/p>\n","innerContent":["\n<p>Je\u015bli za\u015b chodzi o opisywan\u0105 przed chwil\u0105 wydajno\u015b\u0107, Sweers dzieli si\u0119 mieszank\u0105 wynik\u00f3w na podstawie swoich test\u00f3w, kt\u00f3re kontrastuj\u0105 z obietnicami JetBrains o znacz\u0105cych ulepszeniach out-of-the-box. Podczas gdy niekt\u00f3re projekty mog\u0105 zauwa\u017cy\u0107 skromne ulepszenia, inne do\u015bwiadczaj\u0105 spowolnie\u0144, co sugeruje zmienny wp\u0142yw w r\u00f3\u017cnych \u015brodowiskach. Przyk\u0142adowo, eksperymenty w Slack wykaza\u0142y obni\u017cenie wydajno\u015bci o oko\u0142o 17%, przynajmniej gdy wci\u0105\u017c u\u017cywano KSP 1. W innym projekcie, CatchUp, zauwa\u017cono znacz\u0105ce ulepszenia, jednak kolejny projekt, Circuit, znowu do\u015bwiadczy\u0142 podobnych spowolnie\u0144. Podkre\u015bla to konieczno\u015b\u0107 przeprowadzenia w\u0142asnych test\u00f3w wydajno\u015bci, aby w pe\u0142ni zrozumie\u0107, jak zmiany w K2 b\u0119d\u0105 wp\u0142ywa\u0107 na ich projekty - ka\u017cdy build jest nieco inny, a dzisiejszy proces kompilacji projekt\u00f3w jest na tyle skomplikowany, \u017ce nie ka\u017cda aplikacja b\u0119dzie cieszy\u0107 si\u0119 z \"darmowych\" wzrost\u00f3w wydajno\u015bci. W wielu przypadkach b\u0119dziemy musieli wzi\u0105\u0107 spos\u00f3b tworzenia aplikacji pod lup\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A to jeszcze nie koniec nowo\u015bci na oko\u0142o Kotlina 2.0, Ben Trengrove i Nick Butcher z Google og\u0142osili bowiem, \u017ce od tego premiery tego wydania Jetpack Compose b\u0119dzie teraz do\u0142\u0105czony do repozytorium Kotlin, co zapewni, \u017ce Compose b\u0119dzie na bie\u017c\u0105co aktualizowany do nowych wersji j\u0119zyka. Integracja ta eliminuje op\u00f3\u017anienia, z kt\u00f3rymi deweloperzy wcze\u015bniej si\u0119 mierzyli podczas aktualizacji Kotlin w aplikacjach Compose. Dodatkowo, wprowadzno nowy plugin Compose Compiler Gradle, kt\u00f3ry upraszcza konfiguracj\u0119 projektu za pomoc\u0105 specjalnego DSL. Zesp\u00f3\u0142 Compose w Google b\u0119dzie kontynuowa\u0142 rozw\u00f3j kompilatora we wsp\u00f3\u0142pracy z JetBrains.<\/p>\n","innerContent":["\n<p>A to jeszcze nie koniec nowo\u015bci na oko\u0142o Kotlina 2.0, Ben Trengrove i Nick Butcher z Google og\u0142osili bowiem, \u017ce od tego premiery tego wydania Jetpack Compose b\u0119dzie teraz do\u0142\u0105czony do repozytorium Kotlin, co zapewni, \u017ce Compose b\u0119dzie na bie\u017c\u0105co aktualizowany do nowych wersji j\u0119zyka. Integracja ta eliminuje op\u00f3\u017anienia, z kt\u00f3rymi deweloperzy wcze\u015bniej si\u0119 mierzyli podczas aktualizacji Kotlin w aplikacjach Compose. Dodatkowo, wprowadzno nowy plugin Compose Compiler Gradle, kt\u00f3ry upraszcza konfiguracj\u0119 projektu za pomoc\u0105 specjalnego DSL. Zesp\u00f3\u0142 Compose w Google b\u0119dzie kontynuowa\u0142 rozw\u00f3j kompilatora we wsp\u00f3\u0142pracy z JetBrains.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18143,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-1024x798.png\" alt=\"\" class=\"wp-image-18143\"\/><figcaption class=\"wp-element-caption\">Trzeba przyzna\u0107, nie\u017ale wygryzaj\u0105 konkurencje, bior\u0105c pod uwag\u0119 ostatnie doniesienia z Google. Ciekawe co przyniesie wtorkowe Google I\/O.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-8-1024x798.png\" alt=\"\" class=\"wp-image-18143\"\/><figcaption class=\"wp-element-caption\">Trzeba przyzna\u0107, nie\u017ale wygryzaj\u0105 konkurencje, bior\u0105c pod uwag\u0119 ostatnie doniesienia z Google. Ciekawe co przyniesie wtorkowe Google I\/O.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c mowa o Kotlinie, to wybieram si\u0119 w tym roku na KotlinConf! W zwi\u0105zku z tym spodziewajcie si\u0119 szczeg\u00f3\u0142owej relacji, b\u0119d\u0119 si\u0119 stara\u0142 podsumowywa\u0107 ca\u0142o\u015b\u0107, pisz\u0105c relacje na bie\u017c\u0105co \ud83d\ude00<\/p>\n","innerContent":["\n<p>A jak ju\u017c mowa o Kotlinie, to wybieram si\u0119 w tym roku na KotlinConf! W zwi\u0105zku z tym spodziewajcie si\u0119 szczeg\u00f3\u0142owej relacji, b\u0119d\u0119 si\u0119 stara\u0142 podsumowywa\u0107 ca\u0142o\u015b\u0107, pisz\u0105c relacje na bie\u017c\u0105co \ud83d\ude00<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. GraalSP - nowy statyczny profiler dla GraalVM<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. GraalSP - nowy statyczny profiler dla GraalVM<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18183,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-1024x585.png\" alt=\"\" class=\"wp-image-18183\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-23-1024x585.png\" alt=\"\" class=\"wp-image-18183\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A teraz to co tygryski lubi\u0105 najbardziej... czyli nowy Whitepaper. I to nie byle jaki, bo od zespo\u0142u GraalVM. Dopiero co sko\u0144czy\u0142em si\u0119 przebija\u0107 przez ich oryginalne publikacje, a tutaj ju\u017c wskoczy\u0142a nowa, dotycz\u0105ca dalszych usprawnie\u0144 profilowania... dodatkowo zmiksowanych z Machine Learningiem.<\/p>\n","innerContent":["\n<p>A teraz to co tygryski lubi\u0105 najbardziej... czyli nowy Whitepaper. I to nie byle jaki, bo od zespo\u0142u GraalVM. Dopiero co sko\u0144czy\u0142em si\u0119 przebija\u0107 przez ich oryginalne publikacje, a tutaj ju\u017c wskoczy\u0142a nowa, dotycz\u0105ca dalszych usprawnie\u0144 profilowania... dodatkowo zmiksowanych z Machine Learningiem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale zanim sobie przeskoczymy dalej, najpierw pora zdefiniowa\u0107 dwa terminy - profilowanie statyczne i profilowanie dynamiczne, czyli dwa r\u00f3\u017cne podej\u015bcia do analizy i optymalizacji kodu w kontek\u015bcie kompilacji Ahead of Time (AOT). Statyczne profilowanie, bazuj\u0105c na heurystykach i analizie strukturalnej kodu \u017ar\u00f3d\u0142owego przed jego wykonaniem, nie bierze pod uwag\u0119 danych wej\u015bciowych czy warunk\u00f3w wykonania. Chocia\u017c jest skuteczne w wst\u0119pnej optymalizacji, jak inlining czy eliminacja martwego kodu, mo\u017ce nie uwzgl\u0119dnia\u0107 wszystkich rzeczywistych scenariuszy u\u017cytkowania, co mo\u017ce prowadzi\u0107 do suboptymalnej wydajno\u015bci w nieprzewidzianych warunkach.<\/p>\n","innerContent":["\n<p>Ale zanim sobie przeskoczymy dalej, najpierw pora zdefiniowa\u0107 dwa terminy - profilowanie statyczne i profilowanie dynamiczne, czyli dwa r\u00f3\u017cne podej\u015bcia do analizy i optymalizacji kodu w kontek\u015bcie kompilacji Ahead of Time (AOT). Statyczne profilowanie, bazuj\u0105c na heurystykach i analizie strukturalnej kodu \u017ar\u00f3d\u0142owego przed jego wykonaniem, nie bierze pod uwag\u0119 danych wej\u015bciowych czy warunk\u00f3w wykonania. Chocia\u017c jest skuteczne w wst\u0119pnej optymalizacji, jak inlining czy eliminacja martwego kodu, mo\u017ce nie uwzgl\u0119dnia\u0107 wszystkich rzeczywistych scenariuszy u\u017cytkowania, co mo\u017ce prowadzi\u0107 do suboptymalnej wydajno\u015bci w nieprzewidzianych warunkach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dynamiczne profilowanie, z drugiej strony, odbywa si\u0119 w czasie rzeczywistego wykonania programu i zbiera dane o jego zachowaniu za pomoc\u0105 licznik\u00f3w w kluczowych punktach. Ta metoda pozwala na bardzo dok\u0142adne dostosowanie optymalizacji do faktycznych warunk\u00f3w pracy aplikacji, co jest korzystne w zmiennych \u015brodowiskach. Jednak\u017ce, dynamiczne profilowanie wymaga dodatkowego obci\u0105\u017cenia wydajno\u015bciowego w czasie wykonania ze wzgl\u0119du na potrzeb\u0119 zbierania danych, co mo\u017ce wp\u0142yn\u0105\u0107 negatywnie na czas odpowiedzi aplikacji. Dodatkowo, przygotowanie odpowiednich scenariuszy testowych samo w sobie jest wyczynem, o czym wie ka\u017cdy kto kiedykolwiek \"rozgrzewa\u0142\" swoj\u0105 aplikacje przed jej uruchomieniem na produkcji.<\/p>\n","innerContent":["\n<p>Dynamiczne profilowanie, z drugiej strony, odbywa si\u0119 w czasie rzeczywistego wykonania programu i zbiera dane o jego zachowaniu za pomoc\u0105 licznik\u00f3w w kluczowych punktach. Ta metoda pozwala na bardzo dok\u0142adne dostosowanie optymalizacji do faktycznych warunk\u00f3w pracy aplikacji, co jest korzystne w zmiennych \u015brodowiskach. Jednak\u017ce, dynamiczne profilowanie wymaga dodatkowego obci\u0105\u017cenia wydajno\u015bciowego w czasie wykonania ze wzgl\u0119du na potrzeb\u0119 zbierania danych, co mo\u017ce wp\u0142yn\u0105\u0107 negatywnie na czas odpowiedzi aplikacji. Dodatkowo, przygotowanie odpowiednich scenariuszy testowych samo w sobie jest wyczynem, o czym wie ka\u017cdy kto kiedykolwiek \"rozgrzewa\u0142\" swoj\u0105 aplikacje przed jej uruchomieniem na produkcji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18160,"sizeSlug":"full","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-16.png\" alt=\"\" class=\"wp-image-18160\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-16.png\" alt=\"\" class=\"wp-image-18160\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W zesz\u0142ym tygodniu ukaza\u0142 si\u0119 paper <a href=\"https:\/\/www.sciencedirect.com\/science\/authShare\/S0164121224001031\/20240418T161800Z\/1?md5=53510b2d76cb9d8654f14151389c67af&amp;dgcid=coauthor\">GraalSP: Polyglot, efficient, and robust machine learning-based static profiler<\/a>, autorstwa Milan \u010cugurovi\u0107, Milena Vujo\u0161evi\u0107 Jani\u010di\u0107 , Vojin Jovanovi\u0107 oraz Thomas W\u00fcrthinger. GraalSP to nowe rozwi\u0105zanie powsta\u0142e w ramach GraalVM, radzi sobie z wyzwaniami zwi\u0105zanymi z profilowaniem statycznym, wykorzystuj\u0105c machine learning) do efektywniejszego generowania profili. Dzi\u0119ki zastosowaniu wysokopoziomowej grafowej reprezentacji po\u015bredniej (b\u0119d\u0105cej znakiem rozpoznawczym Graala), GraalSP jest zar\u00f3wno portowalny, jak i poliglotyczny, co pozwala na jego zastosowanie w r\u00f3\u017cnych j\u0119zykach kompiluj\u0105cych do bytecode'u Javy, takich jak Java, Scala czy Kotlin (czyli tak \u015brednio poliglotyczny w stosunku do cho\u0107by Truffle, ale i tak odbiera pewnie mas\u0119 roboty tw\u00f3rcom). U\u017cywa modelu XGBoost, kt\u00f3ry jest efektywniejszy od g\u0142\u0119bokich sieci neuronowych stosowanych w innych ML-opartych profilerach, minimalizuj\u0105c czas i z\u0142o\u017cono\u015b\u0107 kompilacji.<\/p>\n","innerContent":["\n<p>W zesz\u0142ym tygodniu ukaza\u0142 si\u0119 paper <a href=\"https:\/\/www.sciencedirect.com\/science\/authShare\/S0164121224001031\/20240418T161800Z\/1?md5=53510b2d76cb9d8654f14151389c67af&amp;dgcid=coauthor\">GraalSP: Polyglot, efficient, and robust machine learning-based static profiler<\/a>, autorstwa Milan \u010cugurovi\u0107, Milena Vujo\u0161evi\u0107 Jani\u010di\u0107 , Vojin Jovanovi\u0107 oraz Thomas W\u00fcrthinger. GraalSP to nowe rozwi\u0105zanie powsta\u0142e w ramach GraalVM, radzi sobie z wyzwaniami zwi\u0105zanymi z profilowaniem statycznym, wykorzystuj\u0105c machine learning) do efektywniejszego generowania profili. Dzi\u0119ki zastosowaniu wysokopoziomowej grafowej reprezentacji po\u015bredniej (b\u0119d\u0105cej znakiem rozpoznawczym Graala), GraalSP jest zar\u00f3wno portowalny, jak i poliglotyczny, co pozwala na jego zastosowanie w r\u00f3\u017cnych j\u0119zykach kompiluj\u0105cych do bytecode'u Javy, takich jak Java, Scala czy Kotlin (czyli tak \u015brednio poliglotyczny w stosunku do cho\u0107by Truffle, ale i tak odbiera pewnie mas\u0119 roboty tw\u00f3rcom). U\u017cywa modelu XGBoost, kt\u00f3ry jest efektywniejszy od g\u0142\u0119bokich sieci neuronowych stosowanych w innych ML-opartych profilerach, minimalizuj\u0105c czas i z\u0142o\u017cono\u015b\u0107 kompilacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, GraalSP wzbogaca swoj\u0105 funkcjonalno\u015b\u0107 o heurystyki predykcji prawdopodobie\u0144stwa ga\u0142\u0119zi, kt\u00f3re zapewniaj\u0105 wy\u017csz\u0105 wydajno\u015b\u0107 skompilowanych program\u00f3w, nawet w przypadku niedok\u0142adnych predykcji profilu. To zwi\u0119ksza odporno\u015b\u0107 (robustness) optymalizacji, minimalizuj\u0105c potencjalne negatywne wp\u0142ywy na wydajno\u015b\u0107 ko\u0144cowej produktu. Takie podej\u015bcie czyni GraalSP szczeg\u00f3lnie warto\u015bciowym w dynamicznie zmieniaj\u0105cych si\u0119 \u015brodowiskach wykonawczych. Integracja GraalSP z kompilatorem Graal podobno demonstruje praktyczne korzy\u015bci tego rozwi\u0105zania, osi\u0105gaj\u0105c przyspieszenie czasu wykonania o \u015brednio 7,46% w por\u00f3wnaniu do standardowej konfiguracji kompilatora.<\/p>\n","innerContent":["\n<p>Dodatkowo, GraalSP wzbogaca swoj\u0105 funkcjonalno\u015b\u0107 o heurystyki predykcji prawdopodobie\u0144stwa ga\u0142\u0119zi, kt\u00f3re zapewniaj\u0105 wy\u017csz\u0105 wydajno\u015b\u0107 skompilowanych program\u00f3w, nawet w przypadku niedok\u0142adnych predykcji profilu. To zwi\u0119ksza odporno\u015b\u0107 (robustness) optymalizacji, minimalizuj\u0105c potencjalne negatywne wp\u0142ywy na wydajno\u015b\u0107 ko\u0144cowej produktu. Takie podej\u015bcie czyni GraalSP szczeg\u00f3lnie warto\u015bciowym w dynamicznie zmieniaj\u0105cych si\u0119 \u015brodowiskach wykonawczych. Integracja GraalSP z kompilatorem Graal podobno demonstruje praktyczne korzy\u015bci tego rozwi\u0105zania, osi\u0105gaj\u0105c przyspieszenie czasu wykonania o \u015brednio 7,46% w por\u00f3wnaniu do standardowej konfiguracji kompilatora.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Og\u00f3lnie polecam ca\u0142y paper - jest dost\u0119pny dla wszystkich zainteresowanych. Spodziewam si\u0119, \u017ce ju\u017c nied\u0142ugo dostaniemy jakich\u015b informacje o wci\u0105gni\u0119ciu projektu do g\u0142\u00f3wnej ga\u0142\u0119zi, mo\u017ce ju\u017c przy okazji GraalVM for JDK 23?<\/p>\n","innerContent":["\n<p>Og\u00f3lnie polecam ca\u0142y paper - jest dost\u0119pny dla wszystkich zainteresowanych. Spodziewam si\u0119, \u017ce ju\u017c nied\u0142ugo dostaniemy jakich\u015b informacje o wci\u0105gni\u0119ciu projektu do g\u0142\u00f3wnej ga\u0142\u0119zi, mo\u017ce ju\u017c przy okazji GraalVM for JDK 23?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18167,"sizeSlug":"full","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-19.png\" alt=\"\" class=\"wp-image-18167\"\/><figcaption class=\"wp-element-caption\"> A je\u017celi bardzo by\u015bcie chcieli, ale jako\u015b nie mo\u017cecie si\u0119 za whitepapery zabra\u0107... dajcie sobie czas. Przyznam, \u017ce powy\u017cszy obrazek dobrze odzwierciedla moje do\u015bwiadczenia z czytania paper\u00f3w - ale z czasem wyrabia sobie odpowiedni mi\u0119sie\u0144 w m\u00f3zgu i zaczyna to nawet lubi\u0107 .<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-19.png\" alt=\"\" class=\"wp-image-18167\"\/><figcaption class=\"wp-element-caption\"> A je\u017celi bardzo by\u015bcie chcieli, ale jako\u015b nie mo\u017cecie si\u0119 za whitepapery zabra\u0107... dajcie sobie czas. Przyznam, \u017ce powy\u017cszy obrazek dobrze odzwierciedla moje do\u015bwiadczenia z czytania paper\u00f3w - ale z czasem wyrabia sobie odpowiedni mi\u0119sie\u0144 w m\u00f3zgu i zaczyna to nawet lubi\u0107 .<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c jeste\u015bmy przy og\u0142oszeniach GraalVM, to czas przej\u015b\u0107 do Release Radaru.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015bmy przy og\u0142oszeniach GraalVM, to czas przej\u015b\u0107 do Release Radaru.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">4. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">4. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18140,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-1024x585.png\" alt=\"\" class=\"wp-image-18140\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-7-1024x585.png\" alt=\"\" class=\"wp-image-18140\"\/><\/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\"><a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pami\u0119tacie projekt Graal Cloud Native? By\u0142 to zestaw modu\u0142\u00f3w stworzona w Oracle zaprojektowan\u0105 specjalnie do Micronauta, u\u0142atwiaj\u0105cy rozw\u00f3j aplikacji chmurowych, oferuj\u0105c starannie dobrany zestaw modu\u0142\u00f3w frameworka Micronaut. Modu\u0142y te by\u0142y zaprojektowane do kompilacji Ahead-of-Time z u\u017cyciem GraalVM Native Image i mia\u0142y na celu dostarczenie deweloperom niezale\u017cnych od platformy API i bibliotek obejmuj\u0105cych g\u0142\u00f3wne us\u0142ugi chmurowe takie jak Oracle Cloud Infrastructure (OCI), Amazon Web Services (AWS) i Google Cloud Platform (GCP), z planowanym przysz\u0142ym wsparciem dla Microsoft Azure.<\/p>\n","innerContent":["\n<p>Pami\u0119tacie projekt Graal Cloud Native? By\u0142 to zestaw modu\u0142\u00f3w stworzona w Oracle zaprojektowan\u0105 specjalnie do Micronauta, u\u0142atwiaj\u0105cy rozw\u00f3j aplikacji chmurowych, oferuj\u0105c starannie dobrany zestaw modu\u0142\u00f3w frameworka Micronaut. Modu\u0142y te by\u0142y zaprojektowane do kompilacji Ahead-of-Time z u\u017cyciem GraalVM Native Image i mia\u0142y na celu dostarczenie deweloperom niezale\u017cnych od platformy API i bibliotek obejmuj\u0105cych g\u0142\u00f3wne us\u0142ugi chmurowe takie jak Oracle Cloud Infrastructure (OCI), Amazon Web Services (AWS) i Google Cloud Platform (GCP), z planowanym przysz\u0142ym wsparciem dla Microsoft Azure.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt jest dalej rozwijany, ale wraz z now\u0105 wersj\u0105 Graal Cloud Native zosta\u0142 przemianowany Graal Development Kit for Micronaut. Zmiana ta by\u0142a podyktowana opiniami u\u017cytkownik\u00f3w oraz pragnieniem lepszego zwi\u0105zanie ca\u0142o\u015bci z brandem Micronauta, i klarowniej odzwierciedla teraz cel i wizji projektu. Szanuj\u0119 prostot\u0119 i podej\u015bcie na zasadzie kawa na \u0142aw\u0119 - t\u0142umaczenie komukolwiek czym w og\u00f3le jest Graal Cloud Native by\u0142o szalenie problematyczne, teraz od wiadomo o co chodzi na pierwszy rzut oka. Zreszt\u0105, do konwencji nazewniczych Oracle jeszcze dzisiaj wr\u00f3cimy.<\/p>\n","innerContent":["\n<p>Projekt jest dalej rozwijany, ale wraz z now\u0105 wersj\u0105 Graal Cloud Native zosta\u0142 przemianowany Graal Development Kit for Micronaut. Zmiana ta by\u0142a podyktowana opiniami u\u017cytkownik\u00f3w oraz pragnieniem lepszego zwi\u0105zanie ca\u0142o\u015bci z brandem Micronauta, i klarowniej odzwierciedla teraz cel i wizji projektu. Szanuj\u0119 prostot\u0119 i podej\u015bcie na zasadzie kawa na \u0142aw\u0119 - t\u0142umaczenie komukolwiek czym w og\u00f3le jest Graal Cloud Native by\u0142o szalenie problematyczne, teraz od wiadomo o co chodzi na pierwszy rzut oka. Zreszt\u0105, do konwencji nazewniczych Oracle jeszcze dzisiaj wr\u00f3cimy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poza zmian\u0105 nazwy <a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a> Micronaut do wersji 4.3.7 (czy ju\u017c wspomina\u0142em, \u017ce lubi\u0119 jak rzeczy s\u0105 proste i klarowne!), zapewniaj\u0105c kompatybilno\u015b\u0107 mi\u0119dzy jego modu\u0142ami a zale\u017cno\u015bciami, co pomaga w minimalizacji ryzyka niekompatybilno\u015bci z ekosystemem bibliotek. Ponadto, Graal Development Kit obs\u0142uguje teraz zar\u00f3wno Java 21, jak i Java 17, i zwi\u0119kszy\u0142 kompatybilno\u015b\u0107 z opcjami dla kompilacji Ahead-of-Time pochodz\u0105cymi z Oracle GraalVM. Dodatkowo wydanie zawiera nowe przewodniki dotycz\u0105ce tworzenia, wdra\u017cania i uruchamiania funkcji serwerless na g\u0142\u00f3wnych platformach chmurowych, a tak\u017ce aktualizacje narz\u0119dzi deweloperskich i rozszerze\u0144 dla \u015brodowisk takich jak IntelliJ Idea i Visual Studio Code.<\/p>\n","innerContent":["\n<p>Poza zmian\u0105 nazwy <a href=\"https:\/\/blogs.oracle.com\/java\/post\/announcing-graal-development-kit-437\">Graal Development Kit for Micronaut 4.3.7<\/a> Micronaut do wersji 4.3.7 (czy ju\u017c wspomina\u0142em, \u017ce lubi\u0119 jak rzeczy s\u0105 proste i klarowne!), zapewniaj\u0105c kompatybilno\u015b\u0107 mi\u0119dzy jego modu\u0142ami a zale\u017cno\u015bciami, co pomaga w minimalizacji ryzyka niekompatybilno\u015bci z ekosystemem bibliotek. Ponadto, Graal Development Kit obs\u0142uguje teraz zar\u00f3wno Java 21, jak i Java 17, i zwi\u0119kszy\u0142 kompatybilno\u015b\u0107 z opcjami dla kompilacji Ahead-of-Time pochodz\u0105cymi z Oracle GraalVM. Dodatkowo wydanie zawiera nowe przewodniki dotycz\u0105ce tworzenia, wdra\u017cania i uruchamiania funkcji serwerless na g\u0142\u00f3wnych platformach chmurowych, a tak\u017ce aktualizacje narz\u0119dzi deweloperskich i rozszerze\u0144 dla \u015brodowisk takich jak IntelliJ Idea i Visual Studio 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\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a> to przede wszystkim usprawnienia w obs\u0142udze warstwy danych, w tym nowy modu\u0142 POJO Mappera pochodz\u0105cego z Hibernate Search. Funkcja ta umo\u017cliwia bezpo\u015brednie indeksowanie dowolnych obiekt\u00f3w POJO (Plain Old Java Objects), co u\u0142atwia obs\u0142ug\u0119 strukturyzowanych danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142, takich jak pliki i encje MongoDB. Dodatkowo, Quarkus 3.10 aktualizuje swoj\u0105 integracj\u0119 z Flyway do wersji 10, co rozwi\u0105zuje wcze\u015bniejsze problemy z kompatybilno\u015bci\u0105 z natywnymi wykonaniami oraz oferuje ulepszone narz\u0119dzia migracji bazy danych.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-10-0-released\/\">Quarkus 3.10<\/a> to przede wszystkim usprawnienia w obs\u0142udze warstwy danych, w tym nowy modu\u0142 POJO Mappera pochodz\u0105cego z Hibernate Search. Funkcja ta umo\u017cliwia bezpo\u015brednie indeksowanie dowolnych obiekt\u00f3w POJO (Plain Old Java Objects), co u\u0142atwia obs\u0142ug\u0119 strukturyzowanych danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142, takich jak pliki i encje MongoDB. Dodatkowo, Quarkus 3.10 aktualizuje swoj\u0105 integracj\u0119 z Flyway do wersji 10, co rozwi\u0105zuje wcze\u015bniejsze problemy z kompatybilno\u015bci\u0105 z natywnymi wykonaniami oraz oferuje ulepszone narz\u0119dzia migracji bazy danych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie to zawiera r\u00f3wnie\u017c zmiany w zarz\u0105dzaniu konfiguracj\u0105 dzi\u0119ki uporz\u0105dkowaniu parametr\u00f3w konfiguracyjnych <code>quarkus.package.*<\/code>, co z jednej strony u\u0142atwi rozszerzanie i utrzymanie w przysz\u0142o\u015bci ich rosn\u0105cego podzbioru, z drugiej za\u015b w niekt\u00f3rych przypadkach mo\u017ce wymaga\u0107 r\u0119cznie migracji. Quarkus 3.10.0 przynosi r\u00f3wnie\u017c aktualizacje Quarkus CXF, narz\u0119dzia umo\u017cliwiaj\u0105cego tworzenie i konsumpcj\u0119 us\u0142ug sieciowych SOAP.<\/p>\n","innerContent":["\n<p>Wydanie to zawiera r\u00f3wnie\u017c zmiany w zarz\u0105dzaniu konfiguracj\u0105 dzi\u0119ki uporz\u0105dkowaniu parametr\u00f3w konfiguracyjnych <code>quarkus.package.*<\/code>, co z jednej strony u\u0142atwi rozszerzanie i utrzymanie w przysz\u0142o\u015bci ich rosn\u0105cego podzbioru, z drugiej za\u015b w niekt\u00f3rych przypadkach mo\u017ce wymaga\u0107 r\u0119cznie migracji. Quarkus 3.10.0 przynosi r\u00f3wnie\u017c aktualizacje Quarkus CXF, narz\u0119dzia umo\u017cliwiaj\u0105cego tworzenie i konsumpcj\u0119 us\u0142ug sieciowych SOAP.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatni zestaw poprawek dotyczy Securit, kt\u00f3re w Quarkus 3.10 doczeka\u0142o si\u0119 kilku usprawnieniom. Obejmuj\u0105 one mo\u017cliwo\u015b\u0107 wyboru mechanizm\u00f3w uwierzytelniania dla endpoint\u00f3w REST za pomoc\u0105 adnotacji, opcjonalne szyfrowanie ciasteczek sesji OpenIDConnect oraz wsparcie dla niestandardowej walidacji roszcze\u0144 JWT OIDC za pomoc\u0105 zale\u017cno\u015bci Jose4j oraz nowego walidatora <code>TokenCertificateValidator<\/code>.<\/p>\n","innerContent":["\n<p>Ostatni zestaw poprawek dotyczy Securit, kt\u00f3re w Quarkus 3.10 doczeka\u0142o si\u0119 kilku usprawnieniom. Obejmuj\u0105 one mo\u017cliwo\u015b\u0107 wyboru mechanizm\u00f3w uwierzytelniania dla endpoint\u00f3w REST za pomoc\u0105 adnotacji, opcjonalne szyfrowanie ciasteczek sesji OpenIDConnect oraz wsparcie dla niestandardowej walidacji roszcze\u0144 JWT OIDC za pomoc\u0105 zale\u017cno\u015bci Jose4j oraz nowego walidatora <code>TokenCertificateValidator<\/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\"><a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A skoro w Quarkusie tyle nowo\u015bci dotycz\u0105cych baz danych, to warto przygl\u0105dn\u0105\u0107 si\u0119 te\u017c <a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a>, kt\u00f3ry mi\u0119dzy innymi wprowadza usprawnienia w obs\u0142udze obiekt\u00f3w Java Time zgodnie ze specyfikacj\u0105 JDBC 4.2. Wcze\u015bniej Hibernate zarz\u0105dza\u0142 obiektami Java Time, u\u017cywaj\u0105c po\u015brednich form <code>java.sql.Date<\/code>, <code>java.sql.Time<\/code> czy <code>java.sql.Timestamp<\/code>, a nowa aktualizacja umo\u017cliwia bezpo\u015brednie przekazywanie obiekt\u00f3w takich jak <code>OffsetDateTime<\/code>, <code>OffsetTime<\/code> i <code>ZonedDateTime<\/code>, kt\u00f3re zawieraj\u0105 jasno okre\u015blone informacje o strefie czasowej. Ta zmiana zast\u0119puje starsze metody, gdzie informacje o strefie czasowej nie by\u0142y zachowywane z powodu ogranicze\u0144 wariant\u00f3w <code>java.sql<\/code>.<\/p>\n","innerContent":["\n<p>A skoro w Quarkusie tyle nowo\u015bci dotycz\u0105cych baz danych, to warto przygl\u0105dn\u0105\u0107 si\u0119 te\u017c <a href=\"https:\/\/in.relation.to\/2024\/04\/25\/orm-650\/\">Hibernate 6.5<\/a>, kt\u00f3ry mi\u0119dzy innymi wprowadza usprawnienia w obs\u0142udze obiekt\u00f3w Java Time zgodnie ze specyfikacj\u0105 JDBC 4.2. Wcze\u015bniej Hibernate zarz\u0105dza\u0142 obiektami Java Time, u\u017cywaj\u0105c po\u015brednich form <code>java.sql.Date<\/code>, <code>java.sql.Time<\/code> czy <code>java.sql.Timestamp<\/code>, a nowa aktualizacja umo\u017cliwia bezpo\u015brednie przekazywanie obiekt\u00f3w takich jak <code>OffsetDateTime<\/code>, <code>OffsetTime<\/code> i <code>ZonedDateTime<\/code>, kt\u00f3re zawieraj\u0105 jasno okre\u015blone informacje o strefie czasowej. Ta zmiana zast\u0119puje starsze metody, gdzie informacje o strefie czasowej nie by\u0142y zachowywane z powodu ogranicze\u0144 wariant\u00f3w <code>java.sql<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18138,"sizeSlug":"full","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-6.png\" alt=\"\" class=\"wp-image-18138\"\/><figcaption class=\"wp-element-caption\">Wszyscy kochamy TimeZony<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-6.png\" alt=\"\" class=\"wp-image-18138\"\/><figcaption class=\"wp-element-caption\">Wszyscy kochamy TimeZony<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Aktualizacja obejmuje r\u00f3wnie\u017c zmiany w konfiguracji pami\u0119ci podr\u0119cznej zapyta\u0144. Przej\u015bcie z \u201ep\u0142ytkiego\u201d na \u201epe\u0142ne\u201d reprezentowanie encji i kolekcji w wersji 6.0, (kt\u00f3re mia\u0142o na celu zmniejszenie liczby odwo\u0142a\u0144 do bazy danych poprzez przechowywanie pe\u0142nych danych dla wynik\u00f3w fetch join w pami\u0119ci podr\u0119cznej zapyta\u0144) skutkowa\u0142o bowiem zwi\u0119kszonym zu\u017cyciem pami\u0119ci i potencjalnie wi\u0119ksz\u0105 aktywno\u015bci\u0105 Garbage Collectora. Wersja 6.5 umo\u017cliwia wi\u0119c u\u017cytkownikom konfiguracj\u0119 pami\u0119ci podr\u0119cznej - mo\u017cna to robi\u0107 globalnie lub dla ka\u017cdej encji\/kolekcji, z lepszymi defaultami automatycznie wybieraj\u0105cymi mi\u0119dzy p\u0142ytkim a pe\u0142nym uk\u0142adem cache w zale\u017cno\u015bci od mo\u017cliwo\u015bci przechowywania danej encji\/kolekcji, co zapewnia r\u00f3wnowag\u0119 mi\u0119dzy wydajno\u015bci\u0105 a efektywno\u015bci\u0105 wykorzystania pami\u0119ci.<\/p>\n","innerContent":["\n<p>Aktualizacja obejmuje r\u00f3wnie\u017c zmiany w konfiguracji pami\u0119ci podr\u0119cznej zapyta\u0144. Przej\u015bcie z \u201ep\u0142ytkiego\u201d na \u201epe\u0142ne\u201d reprezentowanie encji i kolekcji w wersji 6.0, (kt\u00f3re mia\u0142o na celu zmniejszenie liczby odwo\u0142a\u0144 do bazy danych poprzez przechowywanie pe\u0142nych danych dla wynik\u00f3w fetch join w pami\u0119ci podr\u0119cznej zapyta\u0144) skutkowa\u0142o bowiem zwi\u0119kszonym zu\u017cyciem pami\u0119ci i potencjalnie wi\u0119ksz\u0105 aktywno\u015bci\u0105 Garbage Collectora. Wersja 6.5 umo\u017cliwia wi\u0119c u\u017cytkownikom konfiguracj\u0119 pami\u0119ci podr\u0119cznej - mo\u017cna to robi\u0107 globalnie lub dla ka\u017cdej encji\/kolekcji, z lepszymi defaultami automatycznie wybieraj\u0105cymi mi\u0119dzy p\u0142ytkim a pe\u0142nym uk\u0142adem cache w zale\u017cno\u015bci od mo\u017cliwo\u015bci przechowywania danej encji\/kolekcji, co zapewnia r\u00f3wnowag\u0119 mi\u0119dzy wydajno\u015bci\u0105 a efektywno\u015bci\u0105 wykorzystania pami\u0119ci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ponadto, Hibernate 6.5 obs\u0142uguje teraz u\u017cycie rekord\u00f3w Java jako <code>@IdClass<\/code>, co poprawia mo\u017cliwo\u015bci anotacji i upraszcza identyfikacj\u0119 encji.<\/p>\n","innerContent":["\n<p>Ponadto, Hibernate 6.5 obs\u0142uguje teraz u\u017cycie rekord\u00f3w Java jako <code>@IdClass<\/code>, co poprawia mo\u017cliwo\u015bci anotacji i upraszcza identyfikacj\u0119 encji.<\/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>record PK(Integer key1, Integer key2) {}\n\n@Entity\n@IdClass(PK.class)\nclass AnEntity {\n        @Id Integer key1;\n        @Id Integer key2;\n        ...\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>record PK(Integer key1, Integer key2) {}\n\n@Entity\n@IdClass(PK.class)\nclass AnEntity {\n        @Id Integer key1;\n        @Id Integer key2;\n        ...\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wersja ta zawiera r\u00f3wnie\u017c ulepszenia dla <code>StatelessSession<\/code>, takie jak wsparcie dla filtr\u00f3w i logowania SQL, a dla <code>Session<\/code> i <code>StatelessSession<\/code> wprowadzonao tak\u017ce automatyczne w\u0142\u0105czanie filtr\u00f3w. W zapytaniach UPDATE i DELETE mo\u017cna za\u015b teraz u\u017cywa\u0107 hibernatowych join\u00f3w. Bardzo przydatn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 r\u0119cznego przypisywania identyfikator\u00f3w nawet wtedy, gdy s\u0105 one annotowane za pomoc\u0105 <code>@Generator<\/code>. Dodatkowo, pojawi\u0142a si\u0119 te\u017c paginacja oparta na kluczach i klauzula ON CONFLICT dla zapyta\u0144 insert, oferuj\u0105 wi\u0119ksz\u0105 kontrol\u0119 u\u017cytkownikowi.<\/p>\n","innerContent":["\n<p>Wersja ta zawiera r\u00f3wnie\u017c ulepszenia dla <code>StatelessSession<\/code>, takie jak wsparcie dla filtr\u00f3w i logowania SQL, a dla <code>Session<\/code> i <code>StatelessSession<\/code> wprowadzonao tak\u017ce automatyczne w\u0142\u0105czanie filtr\u00f3w. W zapytaniach UPDATE i DELETE mo\u017cna za\u015b teraz u\u017cywa\u0107 hibernatowych join\u00f3w. Bardzo przydatn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 r\u0119cznego przypisywania identyfikator\u00f3w nawet wtedy, gdy s\u0105 one annotowane za pomoc\u0105 <code>@Generator<\/code>. Dodatkowo, pojawi\u0142a si\u0119 te\u017c paginacja oparta na kluczach i klauzula ON CONFLICT dla zapyta\u0144 insert, oferuj\u0105 wi\u0119ksz\u0105 kontrol\u0119 u\u017cytkownikowi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydaniu towarzyszy te\u017c <a href=\"https:\/\/hibernate.org\/reactive\/\">Hibernate Reactive 2.3<\/a>, wspieraj\u0105cy funckjonalno\u015bci Hibernate ORM 6.5.<\/p>\n","innerContent":["\n<p>Wydaniu towarzyszy te\u017c <a href=\"https:\/\/hibernate.org\/reactive\/\">Hibernate Reactive 2.3<\/a>, wspieraj\u0105cy funckjonalno\u015bci Hibernate ORM 6.5.<\/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\"><a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Trwa sezon Devoxx\u00f3w i pewnie za jaki\u015b czas b\u0119dziemy przebija\u0107 si\u0119 przez konferencyjne wideo, ale w mi\u0119dzyczasie warto wspomnie\u0107 o projekcie Stephana Janssena, tw\u00f3rcy inicjatywy Devoxx(4kids). Stworzy\u0142 on bowiem <a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a>, kt\u00f3ry to jest pluginem do IntelliJ IDEA, zaprojektowany do wsp\u00f3\u0142pracy zar\u00f3wno z lokalnymi, jak i publicznymi LLMai (takimi jak OpenAI, Anthropic i podobne), przy wykorzystaniu popularnych narz\u0119dzi (takich jak Ollama, LM Studio czy GPT4All).<\/p>\n","innerContent":["\n<p>Trwa sezon Devoxx\u00f3w i pewnie za jaki\u015b czas b\u0119dziemy przebija\u0107 si\u0119 przez konferencyjne wideo, ale w mi\u0119dzyczasie warto wspomnie\u0107 o projekcie Stephana Janssena, tw\u00f3rcy inicjatywy Devoxx(4kids). Stworzy\u0142 on bowiem <a href=\"https:\/\/github.com\/devoxx\/DevoxxGenieIDEAPlugin\">Devoxx Genie<\/a>, kt\u00f3ry to jest pluginem do IntelliJ IDEA, zaprojektowany do wsp\u00f3\u0142pracy zar\u00f3wno z lokalnymi, jak i publicznymi LLMai (takimi jak OpenAI, Anthropic i podobne), przy wykorzystaniu popularnych narz\u0119dzi (takich jak Ollama, LM Studio czy GPT4All).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak pozosta\u0142e tego typu narz\u0119dzia, oferuj\u0105c funkcje takie jak wyja\u015bnianie kodu, jego review oraz automatyczne generowanie test\u00f3w jednostkowych, czy rozmowy z chatem z poziomu IDE. Standard, ale to co jest wyj\u0105tkowo fajne to fakt, \u017ce w dobie zamkni\u0119tych rozwi\u0105za\u0144 Devoxx Genie jest w pe\u0142ni otwartym projektem Open-Source i do tego napisanym w Javie, wi\u0119c ka\u017cdy mo\u017ce sobie zobaczy\u0107 jak zosta\u0142 zbudowany. Polecam, je\u015bli lubicie sobie poczyta\u0107 czasem kod, mnie a\u017c zach\u0119ci\u0142o do reaktywowania <a href=\"https:\/\/medium.com\/github-all-stars\">mojej starej serii Github All-Star<\/a>. Ju\u017c kt\u00f3ry\u015b raz si\u0119 odgra\u017cam, mo\u017ce kiedy\u015b w ko\u0144cu co\u015b z tym zrobi\u0119.<\/p>\n","innerContent":["\n<p>Jak pozosta\u0142e tego typu narz\u0119dzia, oferuj\u0105c funkcje takie jak wyja\u015bnianie kodu, jego review oraz automatyczne generowanie test\u00f3w jednostkowych, czy rozmowy z chatem z poziomu IDE. Standard, ale to co jest wyj\u0105tkowo fajne to fakt, \u017ce w dobie zamkni\u0119tych rozwi\u0105za\u0144 Devoxx Genie jest w pe\u0142ni otwartym projektem Open-Source i do tego napisanym w Javie, wi\u0119c ka\u017cdy mo\u017ce sobie zobaczy\u0107 jak zosta\u0142 zbudowany. Polecam, je\u015bli lubicie sobie poczyta\u0107 czasem kod, mnie a\u017c zach\u0119ci\u0142o do reaktywowania <a href=\"https:\/\/medium.com\/github-all-stars\">mojej starej serii Github All-Star<\/a>. Ju\u017c kt\u00f3ry\u015b raz si\u0119 odgra\u017cam, mo\u017ce kiedy\u015b w ko\u0144cu co\u015b z tym zrobi\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale to nie koniec Code Assistant\u00f3w, poniewa\u017c na sam\u0105 g\u00f3r\u0119 dzisiejszego tortu zostawi\u0142em sobie jeszcze jedn\u0105 wisienk\u0119...<\/p>\n","innerContent":["\n<p>Ale to nie koniec Code Assistant\u00f3w, poniewa\u017c na sam\u0105 g\u00f3r\u0119 dzisiejszego tortu zostawi\u0142em sobie jeszcze jedn\u0105 wisienk\u0119...<\/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\"><a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na ko\u0144cu z\u0142amiemy zasady po raz kolejny zreszt\u0105 (mia\u0142a by\u0107 zwyczajna edycja, a zamiast trzech sekcji s\u0105 cztery... ale czego spodziewa\u0107 si\u0119 po tym, jak przez dwa tygodnie). Zacz\u0119li\u015bmy Radar od Oracle i na Oracle go zako\u0144czymy, a konkretnie zapowiedzi\u0105 releasu... ale nie byle jakiego.<\/p>\n","innerContent":["\n<p>A na ko\u0144cu z\u0142amiemy zasady po raz kolejny zreszt\u0105 (mia\u0142a by\u0107 zwyczajna edycja, a zamiast trzech sekcji s\u0105 cztery... ale czego spodziewa\u0107 si\u0119 po tym, jak przez dwa tygodnie). Zacz\u0119li\u015bmy Radar od Oracle i na Oracle go zako\u0144czymy, a konkretnie zapowiedzi\u0105 releasu... ale nie byle jakiego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I tak mam pod tym k\u0105tem wi\u0119cej honoru ni\u017c Nintendo, kt\u00f3re flexowa\u0142o si\u0119 w tym tygodniu zapowiedzi\u0105 zapowiedzi, cho\u0107 i to nic przy bran\u017cy filmowej, kt\u00f3ra robi teaser trailery do teaser trailer\u00f3w.<\/p>\n","innerContent":["\n<p>I tak mam pod tym k\u0105tem wi\u0119cej honoru ni\u017c Nintendo, kt\u00f3re flexowa\u0142o si\u0119 w tym tygodniu zapowiedzi\u0105 zapowiedzi, cho\u0107 i to nic przy bran\u017cy filmowej, kt\u00f3ra robi teaser trailery do teaser trailer\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oracle zapowiedzia\u0142o bowiem, \u017ce pracuje nad w\u0142asnym Code Assistem. <a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a> (mo\u017ce ma\u0142o kreatywnie, ale wol\u0119 to od \"kreatywnego\" nazewnictwa us\u0142ug AWS) ma wyr\u00f3\u017cnia\u0107 si\u0119 na tle innych podobnych rozwi\u0105za\u0144, takich jak GitHub Copilot czy Amazon CodeWhisperer (cho\u0107 do tego jeszcze wr\u00f3cimy), dzi\u0119ki specjalizacji w j\u0119zykach Java i SQL oraz g\u0142\u0119bokiej integracji z infrastruktur\u0105 Oracle Cloud (OCI). Narz\u0119dzie zosta\u0142o pono\u0107 zaprojektowane, aby optymalnie wspiera\u0107 specyficzne potrzeby programist\u00f3w pracuj\u0105cych w ekosystemie Oracle.<\/p>\n","innerContent":["\n<p>Oracle zapowiedzia\u0142o bowiem, \u017ce pracuje nad w\u0142asnym Code Assistem. <a href=\"https:\/\/blogs.oracle.com\/cloud-infrastructure\/post\/oracle-code-assist-ai-companion-boost-velocity\">Oracle Code Assist<\/a> (mo\u017ce ma\u0142o kreatywnie, ale wol\u0119 to od \"kreatywnego\" nazewnictwa us\u0142ug AWS) ma wyr\u00f3\u017cnia\u0107 si\u0119 na tle innych podobnych rozwi\u0105za\u0144, takich jak GitHub Copilot czy Amazon CodeWhisperer (cho\u0107 do tego jeszcze wr\u00f3cimy), dzi\u0119ki specjalizacji w j\u0119zykach Java i SQL oraz g\u0142\u0119bokiej integracji z infrastruktur\u0105 Oracle Cloud (OCI). Narz\u0119dzie zosta\u0142o pono\u0107 zaprojektowane, aby optymalnie wspiera\u0107 specyficzne potrzeby programist\u00f3w pracuj\u0105cych w ekosystemie Oracle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18169,"sizeSlug":"full","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20.png\" alt=\"\" class=\"wp-image-18169\"\/><figcaption class=\"wp-element-caption\">Czyli pewnie b\u0119dzie robi\u0107 telemetrie infrastruktury firmowej, aby by\u0142o wszystkim \u0142atwiej podczas audytu.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-20.png\" alt=\"\" class=\"wp-image-18169\"\/><figcaption class=\"wp-element-caption\">Czyli pewnie b\u0119dzie robi\u0107 telemetrie infrastruktury firmowej, aby by\u0142o wszystkim \u0142atwiej podczas audytu.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podczas gdy GitHub Copilot i Amazon CodeWhisperer oferuj\u0105 wsparcie dla szerokiego zakresu j\u0119zyk\u00f3w programowania, Oracle Code Assist koncentrowa\u0107 si\u0119 ma na dostarczaniu wysoko dostosowanych sugestii kodu, kt\u00f3re s\u0105 typowe dla popularnych bibliotek Javowych, SQL, a tak\u017ce praktykami programowania specyficznymi w\u0142a\u015bnie dla rozwi\u0105za\u0144 Oracle. Ta specjalizacja ma pozwoli\u0107 na bardziej precyzyjne i efektywne wsparcie w codziennej pracy deweloper\u00f3w tworz\u0105cych aplikacje korporacyjne. I wiecie co, ma to sporo sensu - pewnie Copilot nie nauczy\u0142 si\u0119 na GitHubie za wiele o JDK 1.7, EJB 1.0, Strutsach czy implementacji Enterprise Service Bus, wi\u0119c taki fine-tunning mo\u017ce by\u0107 kusz\u0105cy dla niejednego przedsi\u0119biorstwa.<\/p>\n","innerContent":["\n<p>Podczas gdy GitHub Copilot i Amazon CodeWhisperer oferuj\u0105 wsparcie dla szerokiego zakresu j\u0119zyk\u00f3w programowania, Oracle Code Assist koncentrowa\u0107 si\u0119 ma na dostarczaniu wysoko dostosowanych sugestii kodu, kt\u00f3re s\u0105 typowe dla popularnych bibliotek Javowych, SQL, a tak\u017ce praktykami programowania specyficznymi w\u0142a\u015bnie dla rozwi\u0105za\u0144 Oracle. Ta specjalizacja ma pozwoli\u0107 na bardziej precyzyjne i efektywne wsparcie w codziennej pracy deweloper\u00f3w tworz\u0105cych aplikacje korporacyjne. I wiecie co, ma to sporo sensu - pewnie Copilot nie nauczy\u0142 si\u0119 na GitHubie za wiele o JDK 1.7, EJB 1.0, Strutsach czy implementacji Enterprise Service Bus, wi\u0119c taki fine-tunning mo\u017ce by\u0107 kusz\u0105cy dla niejednego przedsi\u0119biorstwa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":18172,"width":"480px","height":"auto","sizeSlug":"large","linkDestination":"none","align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-823x1024.png\" alt=\"\" class=\"wp-image-18172\" style=\"width:480px;height:auto\"\/><figcaption class=\"wp-element-caption\">Tylko mam nadzieje, \u017ce nie robicie sobie z\u0142udze\u0144 \u017ce to cokolwiek pomo\u017ce<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/05\/image-21-823x1024.png\" alt=\"\" class=\"wp-image-18172\" style=\"width:480px;height:auto\"\/><figcaption class=\"wp-element-caption\">Tylko mam nadzieje, \u017ce nie robicie sobie z\u0142udze\u0144 \u017ce to cokolwiek pomo\u017ce<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, Oracle Code Assist wprowadzi funkcj\u0119 Retrieval Augmented Generation (RAG), kt\u00f3ra umo\u017cliwi bezpieczne \u0142\u0105czenie kodu \u017ar\u00f3d\u0142owego organizacji i innych \u017ar\u00f3de\u0142 danych, zapewniaj\u0105c sugestie kodu bardziej dostosowane do specyficznych praktyk organizacji (cho\u0107 wszyscy zdajemy sobie spraw\u0119, \u017ce to akurat nie zawsze b\u0119dzie zalet\u0105, prawda?). Mimo wszystko, tego typu funkcjonalno\u015b\u0107 jest rzadko\u015bci\u0105 w\u015br\u00f3d innych asystent\u00f3w kodowania, co daje Oracle przewag\u0119 w kontek\u015bcie zastosowa\u0144 korporacyjnych i regulowanych sektor\u00f3w, gdzie takie dostosowanie do specyficznych potrzeb jest szczeg\u00f3lnie warto\u015bciowe.<\/p>\n","innerContent":["\n<p>Dodatkowo, Oracle Code Assist wprowadzi funkcj\u0119 Retrieval Augmented Generation (RAG), kt\u00f3ra umo\u017cliwi bezpieczne \u0142\u0105czenie kodu \u017ar\u00f3d\u0142owego organizacji i innych \u017ar\u00f3de\u0142 danych, zapewniaj\u0105c sugestie kodu bardziej dostosowane do specyficznych praktyk organizacji (cho\u0107 wszyscy zdajemy sobie spraw\u0119, \u017ce to akurat nie zawsze b\u0119dzie zalet\u0105, prawda?). Mimo wszystko, tego typu funkcjonalno\u015b\u0107 jest rzadko\u015bci\u0105 w\u015br\u00f3d innych asystent\u00f3w kodowania, co daje Oracle przewag\u0119 w kontek\u015bcie zastosowa\u0144 korporacyjnych i regulowanych sektor\u00f3w, gdzie takie dostosowanie do specyficznych potrzeb jest szczeg\u00f3lnie warto\u015bciowe.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/18131","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=18131"}],"version-history":[{"count":12,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/18131\/revisions"}],"predecessor-version":[{"id":18187,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/18131\/revisions\/18187"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/18178"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=18131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=18131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=18131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}