{"id":9957,"date":"2022-06-15T08:22:47","date_gmt":"2022-06-15T06:22:47","guid":{"rendered":"https:\/\/vived.io\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/"},"modified":"2022-09-19T13:10:37","modified_gmt":"2022-09-19T11:10:37","slug":"jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/","title":{"rendered":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji"},"content":{"rendered":"\n<h2 id=\"1-kto-tak-naprawde-uzywa-rx-okazuje-sie-ze-nie-netflix\" data-num=1>1. Kto tak naprawd\u0119 u\u017cywa RX? Okazuje si\u0119, \u017ce nie Netflix<\/h2>\n\n\n\n<p>Dzisiaj zaczniemy do ploteczek z Twittera. Okazuje si\u0119, \u017ce czasem w ad hocowej rozmowie mog\u0105 wyp\u0142yn\u0105\u0107 ciekawe informacje, kt\u00f3re potrafi\u0105 postawi\u0107 na g\u0142owie pewne powszechnie znane w bran\u017cy fakty. Prawdopodobnie ka\u017cdy, kto u\u017cywa\u0142 kiedykolwiek RxJavy, na jakim\u015b etapie zetkn\u0105\u0142 si\u0119 z informacj\u0105, \u017ce biblioteka ta powsta\u0142a na potrzeby Netflixa. To w\u0142a\u015bnie ona przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni (dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem). Mo\u017cna wi\u0119c powiedzie\u0107, \u017ce to w\u0142a\u015bnie Netflixowi mo\u017cemy podzi\u0119kowa\u0107 za boom na reaktywno\u015b\u0107 na backendzie. Dlatego wi\u0119c dla wielu os\u00f3b zaskoczeniem b\u0119dzie, \u017ce Netflix\u2026 praktycznie wycofa\u0142 si\u0119 ju\u017c z reaktywno\u015bci.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"362\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1.gif\" alt=\"\" class=\"wp-image-5360\"\/><figcaption>T\u0142umaczy to, czemu RxJava tak mocno straci\u0142a impet<\/figcaption><\/figure><\/div>\n\n\n<p>A to wszystko dowiedzieli\u015bmy si\u0119 dzi\u0119ki Twitterowi. Ot\u00f3\u017c w jednym z w\u0105tk\u00f3w narzekaj\u0105cych na programowanie reaktywne, kto\u015b rzuci\u0142 pytanie \u201c Czy jakakolwiek du\u017ca firma tego w og\u00f3le u\u017cywa\u201d, otrzymuj\u0105c oczywi\u015bcie odpowied\u017a, \u017ce czerwony system streamingowy. Tutaj szybko w\u0142\u0105czy\u0142 si\u0119 Paul Bakker z rzeczonej firmy, aby stwierdzi\u0107, \u017ce nic bardziej mylnego\u2026&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">We\u2019ve moved away from most RX code actually. There are exceptions (e.g Zuul), but most of Netflix runs on blocking style APIs. That doesn\u2019t mean it doesn\u2019t work, but it does mean its not necessarily the best tool for every job.<\/p>&mdash; Paul Bakker (@pbakker) <a href=\"https:\/\/twitter.com\/pbakker\/status\/1523421841410248704?ref_src=twsrc%5Etfw\">May 8, 2022<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p>Co ciekawe, nie by\u0142 to wynik jakich\u015b odg\u00f3rnej decyzji. Po prostu przez lata kod Netflixowy coraz cz\u0119\u015bciej, \u201coddolnie\u201d refaktoryzowany by\u0142 do blokuj\u0105cego API, ze wzgl\u0119du na fakt, \u017ce coraz wi\u0119ksze znaczenie ma dla firmy GraphQL i tworz\u0105cy si\u0119 pod spodem \u201cgraf\u201d API, a reaktywno\u015b\u0107 nie do ko\u0144ca w tym przypadku by\u0142a w stanie pom\u00f3c, stopniowo si\u0119 wi\u0119c jej pozbywano. Je\u015bli jeste\u015bcie ciekawi, jak Netflix u\u017cywa dla odmiany GraphQL\u2026 zapraszam do lektury <a href=\"https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2\">bardzo ciekawego posta na ten temat<\/a>.<\/p>\n\n\n\n<p>Oczywi\u015bcie, absolutnie nie traktujcie tego wpisu jako \u201cskoro Netflix przesta\u0142 RXa u\u017cywa\u0107, to czas wyrzuci\u0107 go ostatecznie ze swojego stacku\u201d. Bardziej tutaj planowa\u0142em zwr\u00f3ci\u0107 uwag\u0119 na to, jaka masa legend kr\u0105\u017cy po bran\u017cy, cz\u0119sto bazuj\u0105cych na mocno nieaktualnych ju\u017c informacjach. Firmy ewoluuj\u0105, zmieniaj\u0105 si\u0119 im potrzeby i podej\u015bcia. Dlatego te\u017c jak kusz\u0105cym by nie by\u0142o powo\u0142ywanie si\u0119 na autorytet uznanych firm przy podejmowaniu decyzji technologicznych, okazuje si\u0119, \u017ce tkwi w tym nawet wi\u0119cej pu\u0142apek, ni\u017c na pierwszy rzut oka si\u0119 wydaje.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download.png\" alt=\"\" class=\"wp-image-5365\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download.png 691w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-300x217.png 300w\" sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><figcaption>Aczkolwiek wiem, \u017ce niekt\u00f3rzy z ca\u0142ej sytuacji wyci\u0105gn\u0105 nieco prostsze wnioski<\/figcaption><\/figure><\/div>\n\n\n<p><strong>Kontrowersyjna opinia:<\/strong> Z reaktywnym kodem jest jak z CAP Theorem, kt\u00f3ra powsta\u0142 by uwidoczni\u0107 pewien konkretnego problem, ale by\u0142a na tyle no\u015bna, \u017ce nagle wszyscy stwierdzili, \u017ce wszystkie bazy musz\u0105 by\u0107 klasyfikowane jako AP i CP, jakby to by\u0142y jedyne wyr\u00f3\u017cniki. Tak jak wszystkie aplikacje nagle zacz\u0119\u0142y dziwi\u0107 si\u0119, \u017ce wprowadzenie \u201creaktywno\u015bci\u201d nie rozwi\u0105za\u0142o nagle problem\u00f3w ze skalowalno\u015bci\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>https:\/\/twitter.com\/rafaelcodes\/status\/1523327905434062848?s=21&amp;t=V5qMCfzlM7ONRoTPPZJM7A&amp;utm_source=pocket_mylist<\/li><li>https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2<\/li><\/ul>\n\n\n\n<h2 id=\"2-kotlin-1-7-wydany\" data-num=2>2. Kotlin 1.7 wydany<\/h2>\n\n\n\n<p>Sezon nowo\u015bci kotlinowych powoli si\u0119 rozp\u0119dza. Dopiero co informowali\u015bmy o Roadmapi\u0119, a tu ju\u017c wysz\u0142a kolejna \u201cdu\u017ca\u201d edycja Kotlina! Przyjrzyjmy si\u0119 zatem, co ciekawego przynosi nowa edycja j\u0119zyka.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"280\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/dt200508.gif\" alt=\"\" class=\"wp-image-5364\"\/><figcaption> <\/figcaption><\/figure><\/div>\n\n\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. Jak mieli\u015bmy okazj\u0119 wspomina\u0107 przy okazji wydania Roadmapowego, to w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina i to w\u0142a\u015bnie na niej bardzo mocno opieraj\u0105 si\u0119 plany tw\u00f3rc\u00f3w, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu. Wi\u0119cej o kompilatorze K2 mo\u017cecie dowiedzie\u0107 si\u0119 z prezentacji tw\u00f3rc\u00f3w.<\/p>\n\n\n\n<p>Z wa\u017cnych nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"270\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\" class=\"wp-image-5362\"\/><figcaption>Teraz \u017ceby &#8222;da\u0107 co je\u015b\u0107&#8221; K4, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure><\/div>\n\n\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina (pod tym wzgl\u0119dem bardzo mi to przypomina ostatnie release notes TypeScripta). Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.&nbsp;<\/p>\n\n\n\n<p>Par\u0119 drobiazg\u00f3w przynosi te\u017c biblioteka standardowa, bowiem ponownie wprowadza oryginalne nazwy funkcji, ale z nie-nullowaln\u0105 zwracan\u0105 warto\u015bci\u0105. Dodano wi\u0119cej mo\u017cliwo\u015bci je\u015bli chodzi o Regexpy, a nowe funkcje min(), max(), minBy(), maxBy(), minWith() i maxWith() zwracaj\u0105 teraz bezwzgl\u0119dnie element kolekcji lub rzucaj\u0105 wyj\u0105tek.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun main() {\n    val numbers = listOf&lt;Int&gt;()\n    println(numbers.maxOrNull()) \/\/ &quot;null&quot;\n    println(numbers.max()) \/\/ &quot;Exception in... Collection is empty.&quot;\n}<\/code><\/pre>\n\n\n\n<p>Z ciekawych rzeczy &#8211; Optionale doczeka\u0142y si\u0119 funkcji rozszerze\u0144, co ma zapewni\u0107 wi\u0119ksz\u0105 kompatybilno\u015b\u0107 z javowym kodem i bibliotekami.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val presentOptional = Optional.of(&quot;I&#039;m here!&quot;)\n\nprintln(presentOptional.getOrNull())\n\/\/ &quot;I&#039;m here!&quot;\n\nval absentOptional = Optional.empty&lt;String&gt;()\n\nprintln(absentOptional.getOrNull())\n\/\/ null\nprintln(absentOptional.getOrDefault(&quot;Nobody here!&quot;))\n\/\/ &quot;Nobody here!&quot;\nprintln(absentOptional.getOrElse {\n    println(&quot;Optional was absent!&quot;)\n    &quot;Default value!&quot;\n})\n\/\/ &quot;Optional was absent!&quot;\n\/\/ &quot;Default value!&quot;<\/code><\/pre>\n\n\n\n<p>Oczywi\u015bcie, to tylko cz\u0119\u015b\u0107 tego co znajdziecie w nowym wydaniu Kotlina, pe\u0142ne jest one drobnicy a nie zahaczy\u0142em tak naprawd\u0119 o zmiany, kt\u00f3re pojawi\u0142y si\u0119 np. w kontek\u015bcie KotlinJS.&nbsp; <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-1024x576.jpeg\" alt=\"\" class=\"wp-image-5366\" width=\"512\" height=\"288\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-1024x576.jpeg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-300x169.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-768x432.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault.jpeg 1280w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption>Je\u017celi preferujecie wprowadzenia wideo, mam dla <a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\">Was filmik przygotowany przez samo JetBrains<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<p>A jak ju\u017c w temacie Kotlina jeste\u015bmy &#8211; ukaza\u0142y si\u0119 wyniki dotycz\u0105cej <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">u\u017cycia Kotlin Multiplatform<\/a> przez spo\u0142eczno\u015b\u0107. Wyniki zosta\u0142y okraszone eleganckimi infografikami, prezentuj\u0105cymi stan ekosystemu.&nbsp;Nie b\u0119d\u0119 si\u0119 rozpisywa\u0142, bo w zasadzie zacz\u0105\u0142bym przepisywa\u0107 to, co znajduje si\u0119 w podsumowaniu ze strony JetBrains.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"221\" height=\"194\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-2.gif\" alt=\"\" class=\"wp-image-5363\"\/><figcaption>Co najwy\u017cej wspomn\u0119, \u017ce wyra\u017anie wida\u0107 \u017ce w tym \u015bwiecie dalej rz\u0105dzi jednak Android.<\/figcaption><\/figure><\/div>\n\n\n<p>Je\u015bli chcecie uzyska\u0107 <a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">dost\u0119p do pe\u0142nego raportu<\/a> &#8211; niestety musicie zostawi\u0107 jego tw\u00f3rcom sw\u00f3j e-mail.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/kotlin-1-7-0-released\/?utm_source=pocket_mylist\">Kotlin 1.7.0 Released<\/a><\/li><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">The State of Kotlin Multiplatform Survey Q3-Q4 2021<\/a><\/li><li><a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">Get Kotlin Multiplatform Survey Results Directly In Your Inbox<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"3-vector-api-na-przykladzie-alternatywy-dla-arrays-sort\" data-num=3>3. Vector API na przyk\u0142adzie alternatywy dla Arrays.sort<\/h2>\n\n\n\n<p>A na koniec mam co\u015b bardzo niskopoziomowego i technicznego. Dopiero co mieli\u015bmy okazj\u0119 podrzuci\u0107 Wam tekst Jamesa Baker dotycz\u0105cy u\u017cycia precyzyjnych narz\u0119dzi kontroli wsp\u00f3\u0142bie\u017cno\u015bci projektu Loom jako alternatywy dla Jepsena. Wida\u0107, \u017ce niezwyk\u0142a popularno\u015b\u0107 pierwszego tekstu doda\u0142a Jamesowi wiatru w skrzyd\u0142a, gdy\u017c w kr\u00f3tkim okresie uda\u0142o mu si\u0119 sp\u0142odzi\u0107 kolejny, kt\u00f3ry r\u00f3wnie\u017c szybko \u201cwytrendowa\u0142\u201d. Tym razem wzi\u0105\u0142 na warsztat Project Panam\u0119 i przychodz\u0105ce wraz z nim Vector API.<\/p>\n\n\n\n<p>Nowa publikacja dotyczy problemu tak wydawa\u0142oby dawno ju\u017c \u201cwy\u017cy\u0142owanego\u201d, czyli sortowania. James postanowi\u0142 sprawdzi\u0107, ile tak naprawd\u0119 b\u0119dziemy w stanie zyska\u0107, omijaj\u0105c javow\u0105 abstrakcj\u0119 i dobijaj\u0105c si\u0119 bezpo\u015brednio do samego procesora. Te wspieraj\u0105 bowiem tak zwane operacje SIMD (ang. Single Instruction Multiple Data), pozwalaj\u0105ce na przetwarzanie wielu strumieni danych r\u00f3wnocze\u015bnie za pomoc\u0105 pojedynczej instrukcji. Pozwala na znacz\u0105ce skr\u00f3cenie czasu wykonywania oblicze\u0144. SIMD s\u0105 z nami od lat, ale na drodze do ich popularyzacji stan\u0105\u0142 fakt, \u017ce trudno jest napisa\u0107 poprawnie kod z ich u\u017cyciem, a co najwa\u017cniejsze, kompilator w wielu przypadkach mo\u017ce to zrobi\u0107 za nas. Te mechanizmy nie s\u0105 jednak idealne, wi\u0119c w celu osi\u0105gni\u0119cia maksymalnej wydajno\u015bci, niezb\u0119dna b\u0119dzie ingerencja programist\u00f3w. Vector API, czyli cz\u0119\u015b\u0107 Projektu Panama, umo\u017cliwia w\u0142a\u015bnie wykonywanie tego typu operacji w spos\u00f3b maksymalnie bezpieczny i unikni\u0119cia potencjalnych b\u0142\u0119d\u00f3w segmentacji, tak popularnych przy bezpo\u015brednim adresowaniu pami\u0119ci jak to ma miejsce w przypadku operacji SIMD.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"499\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1.jpeg\" alt=\"\" class=\"wp-image-5367\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1.jpeg 880w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1-300x170.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1-768x435.jpeg 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><figcaption>I tak, zdaje sobie spraw\u0119, \u017ce wi\u0119kszo\u015b\u0107 ludzi i tak nigfy tego nie u\u017cyje.<\/figcaption><\/figure>\n\n\n\n<p>Jako benchmark u\u017cyto za\u015b Arrays.sort. Sam kod jest na tyle skomplikowany i przechodzi\u0142 na tyle iteracji, \u017ce nie b\u0119d\u0119 go tutaj przekleja\u0142 i pozwol\u0119 sobie odes\u0142a\u0107 zainteresowanych do <a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">oryginalnego postu<\/a>. Nas ciekawi\u0107 tutaj b\u0119d\u0105 jednak wnioski autora. Zaczniemy od tych pozytywnych\u2026 jest szybko, naprawd\u0119 szybko &#8211; zaproponowana przez autora implementacja osi\u0105gn\u0119\u0142a w benchmarkach wydajno\u015b\u0107 blisko trzykrotnie lepsz\u0105 ni\u017c rozwi\u0105zanie dostarczane z JDK. Obarczone jest to jednak pewnymi problemami. Przyk\u0142adowo, autor nie ukrywa, \u017ce pisanie przy pomocy Vector API to proces regularnego strzelania we w\u0142asn\u0105 stop\u0119 i d\u0142ugotrwa\u0142ego debugowania (kt\u00f3re samo w sobie te\u017c jest bardzo trudne, ze wzgl\u0119du na fakt, \u017ce dzia\u0142amy bezpo\u015brednio z natywn\u0105 pami\u0119ci\u0105). Samo zmierzenie uzyskanej wydajno\u015bci w realistyczny spos\u00f3b te\u017c wymaga\u0142o od Jamesa nieco kreatywno\u015bci. Samo API, ze wzgl\u0119du na to, \u017ce jest rozwi\u0105zaniem \u201cbezpiecznym\u201d dla programist\u00f3w, te\u017c nie pozwala na uzyskanie pe\u0142nej mocy procesora &#8211; rozwi\u0105zania w C++ w dalszym ci\u0105gu s\u0105 wielokrotnie bardziej wydajne. Wydaje si\u0119 jednak, \u017ce dla wielu programist\u00f3w, Java ze wsparcie SIMD mo\u017ce okaza\u0107 si\u0119 bardzo ciekaw\u0105 alternatyw\u0105 dla j\u0119zyk\u00f3w bli\u017cszych maszynie&nbsp;<\/p>\n\n\n\n<p>Polecam lektur\u0119 ca\u0142o\u015bci &#8211; nie jest ona najl\u017cejsza, ale autor robi wszystko, aby bezbole\u015bnie przeprowadzi\u0107 czytelnika przez meandry kodowania przy pomocy nowej zdobyczy pochodz\u0105cej z Projektu Panama.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">SIMD accelerated sorting in Java &#8211; how it works and why it was 3x faster<\/a><\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Bonus:<\/strong> <strong>Doczekali\u015bmy si\u0119 zamro\u017conej <\/strong><a href=\"https:\/\/openjdk.org\/projects\/jdk\/19\/#Schedule\"><strong>listy funkcjonalno\u015bci JDK 19<\/strong><\/a><strong>.&nbsp;<\/strong><\/p>\n\n\n\n<p>Prezentuje si\u0119 nast\u0119puj\u0105co:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>405: Record Patterns (Preview)\u00a0<\/li><li>422: Linux\/RISC-V Port<\/li><li>424: Foreign Function &amp; Memory API (Preview)<\/li><li>425: Virtual Threads (Preview)<\/li><li>426: Vector API (Fourth Incubator)<\/li><li>427: Pattern Matching for switch (Third Preview)<\/li><li>428: Structured Concurrency (Incubator)<\/li><\/ul>\n\n\n\n<p>Jak mo\u017cna zauwa\u017cy\u0107, raczej doczekamy si\u0119 w niej wy\u0142\u0105cznie jednego stabilnego ficzera (konwersji Javy na Linuxy pracuj\u0105ce na procesorach RISC-V), ale jeszcze raz podkre\u015blam co\u015b, o czym wspomina\u0142em ju\u017c od d\u0142u\u017cszego czasu &#8211; b\u0119dzie to najciekawsze nowe wydanie Javy od lat.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nowa edycja dzisiaj wyj\u0105tkowo w \u015brod\u0119, ale my\u015bl\u0119, \u017ce wybaczycie t\u0105 obsuw\u0119, bo dzisiaj jest do\u015b\u0107 r\u00f3\u017cnorodnie. Przede wszystkim ploteczki o RXJavie i Kotlin 1.7, ale te\u017c tutorial\/opinia o nowiusie\u0144kim Vector API.<\/p>\n","protected":false},"author":10,"featured_media":8713,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-9957","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"8","feature_image_blog":{"ID":8714,"id":8714,"title":"hero-image","filename":"hero-image.webp","filesize":70832,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","link":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/hero-image-2\/","alt":"","author":"10","description":"","caption":"","name":"hero-image-2","status":"inherit","uploaded_to":9957,"date":"2022-06-15 06:22:26","modified":"2022-06-15 06:22:26","menu_order":0,"mime_type":"image\/webp","type":"image","subtype":"webp","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1248,"height":702,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image-150x150.webp","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image-300x169.webp","medium-width":300,"medium-height":169,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image-768x432.webp","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image-1024x576.webp","large-width":1024,"large-height":576,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","1536x1536-width":1248,"1536x1536-height":702,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","2048x2048-width":1248,"2048x2048-height":702,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":169,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","gform-image-choice-md-width":400,"gform-image-choice-md-height":225,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/hero-image.webp","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":338}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","feature_image_visible":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived\" \/>\n<meta property=\"og:description\" content=\"Nowa edycja dzisiaj wyj\u0105tkowo w \u015brod\u0119, ale my\u015bl\u0119, \u017ce wybaczycie t\u0105 obsuw\u0119, bo dzisiaj jest do\u015b\u0107 r\u00f3\u017cnorodnie. Przede wszystkim ploteczki o RXJavie i Kotlin 1.7, ale te\u017c tutorial\/opinia o nowiusie\u0144kim Vector API.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-15T06:22:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji\",\"datePublished\":\"2022-06-15T06:22:47+00:00\",\"dateModified\":\"2022-09-19T11:10:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\"},\"wordCount\":1712,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\",\"name\":\"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png\",\"datePublished\":\"2022-06-15T06:22:47+00:00\",\"dateModified\":\"2022-09-19T11:10:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived","og_description":"Nowa edycja dzisiaj wyj\u0105tkowo w \u015brod\u0119, ale my\u015bl\u0119, \u017ce wybaczycie t\u0105 obsuw\u0119, bo dzisiaj jest do\u015b\u0107 r\u00f3\u017cnorodnie. Przede wszystkim ploteczki o RXJavie i Kotlin 1.7, ale te\u017c tutorial\/opinia o nowiusie\u0144kim Vector API.","og_url":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/","og_site_name":"Vived","article_published_time":"2022-06-15T06:22:47+00:00","article_modified_time":"2022-09-19T11:10:37+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji","datePublished":"2022-06-15T06:22:47+00:00","dateModified":"2022-09-19T11:10:37+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/"},"wordCount":1712,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/","url":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/","name":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","datePublished":"2022-06-15T06:22:47+00:00","dateModified":"2022-09-19T11:10:37+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/JVM-2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-wednesday-vol-91-kotlin-1-7-netflix-nie-uzywa-rx-vector-api-w-akcji\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Wednesday vol. 91 \u2013 Kotlin 1.7, Netflix nie u\u017cywa RX, Vector API w akcji"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Kto tak naprawd\u0119 u\u017cywa RX? Okazuje si\u0119, \u017ce nie Netflix<\/h2>\n","innerContent":["\n<h2>1. Kto tak naprawd\u0119 u\u017cywa RX? Okazuje si\u0119, \u017ce nie Netflix<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dzisiaj zaczniemy do ploteczek z Twittera. Okazuje si\u0119, \u017ce czasem w ad hocowej rozmowie mog\u0105 wyp\u0142yn\u0105\u0107 ciekawe informacje, kt\u00f3re potrafi\u0105 postawi\u0107 na g\u0142owie pewne powszechnie znane w bran\u017cy fakty. Prawdopodobnie ka\u017cdy, kto u\u017cywa\u0142 kiedykolwiek RxJavy, na jakim\u015b etapie zetkn\u0105\u0142 si\u0119 z informacj\u0105, \u017ce biblioteka ta powsta\u0142a na potrzeby Netflixa. To w\u0142a\u015bnie ona przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni (dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem). Mo\u017cna wi\u0119c powiedzie\u0107, \u017ce to w\u0142a\u015bnie Netflixowi mo\u017cemy podzi\u0119kowa\u0107 za boom na reaktywno\u015b\u0107 na backendzie. Dlatego wi\u0119c dla wielu os\u00f3b zaskoczeniem b\u0119dzie, \u017ce Netflix\u2026 praktycznie wycofa\u0142 si\u0119 ju\u017c z reaktywno\u015bci.<\/p>\n","innerContent":["\n<p>Dzisiaj zaczniemy do ploteczek z Twittera. Okazuje si\u0119, \u017ce czasem w ad hocowej rozmowie mog\u0105 wyp\u0142yn\u0105\u0107 ciekawe informacje, kt\u00f3re potrafi\u0105 postawi\u0107 na g\u0142owie pewne powszechnie znane w bran\u017cy fakty. Prawdopodobnie ka\u017cdy, kto u\u017cywa\u0142 kiedykolwiek RxJavy, na jakim\u015b etapie zetkn\u0105\u0142 si\u0119 z informacj\u0105, \u017ce biblioteka ta powsta\u0142a na potrzeby Netflixa. To w\u0142a\u015bnie ona przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni (dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem). Mo\u017cna wi\u0119c powiedzie\u0107, \u017ce to w\u0142a\u015bnie Netflixowi mo\u017cemy podzi\u0119kowa\u0107 za boom na reaktywno\u015b\u0107 na backendzie. Dlatego wi\u0119c dla wielu os\u00f3b zaskoczeniem b\u0119dzie, \u017ce Netflix\u2026 praktycznie wycofa\u0142 si\u0119 ju\u017c z reaktywno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5360,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1.gif\" alt=\"\" class=\"wp-image-5360\"\/><figcaption>T\u0142umaczy to, czemu RxJava tak mocno straci\u0142a impet<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1.gif\" alt=\"\" class=\"wp-image-5360\"\/><figcaption>T\u0142umaczy to, czemu RxJava tak mocno straci\u0142a impet<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A to wszystko dowiedzieli\u015bmy si\u0119 dzi\u0119ki Twitterowi. Ot\u00f3\u017c w jednym z w\u0105tk\u00f3w narzekaj\u0105cych na programowanie reaktywne, kto\u015b rzuci\u0142 pytanie \u201c Czy jakakolwiek du\u017ca firma tego w og\u00f3le u\u017cywa\u201d, otrzymuj\u0105c oczywi\u015bcie odpowied\u017a, \u017ce czerwony system streamingowy. Tutaj szybko w\u0142\u0105czy\u0142 si\u0119 Paul Bakker z rzeczonej firmy, aby stwierdzi\u0107, \u017ce nic bardziej mylnego\u2026&nbsp;<\/p>\n","innerContent":["\n<p>A to wszystko dowiedzieli\u015bmy si\u0119 dzi\u0119ki Twitterowi. Ot\u00f3\u017c w jednym z w\u0105tk\u00f3w narzekaj\u0105cych na programowanie reaktywne, kto\u015b rzuci\u0142 pytanie \u201c Czy jakakolwiek du\u017ca firma tego w og\u00f3le u\u017cywa\u201d, otrzymuj\u0105c oczywi\u015bcie odpowied\u017a, \u017ce czerwony system streamingowy. Tutaj szybko w\u0142\u0105czy\u0142 si\u0119 Paul Bakker z rzeczonej firmy, aby stwierdzi\u0107, \u017ce nic bardziej mylnego\u2026&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/twitter.com\/pbakker\/status\/1523421841410248704","type":"rich","providerNameSlug":"twitter","responsive":true},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/pbakker\/status\/1523421841410248704\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/pbakker\/status\/1523421841410248704\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co ciekawe, nie by\u0142 to wynik jakich\u015b odg\u00f3rnej decyzji. Po prostu przez lata kod Netflixowy coraz cz\u0119\u015bciej, \u201coddolnie\u201d refaktoryzowany by\u0142 do blokuj\u0105cego API, ze wzgl\u0119du na fakt, \u017ce coraz wi\u0119ksze znaczenie ma dla firmy GraphQL i tworz\u0105cy si\u0119 pod spodem \u201cgraf\u201d API, a reaktywno\u015b\u0107 nie do ko\u0144ca w tym przypadku by\u0142a w stanie pom\u00f3c, stopniowo si\u0119 wi\u0119c jej pozbywano. Je\u015bli jeste\u015bcie ciekawi, jak Netflix u\u017cywa dla odmiany GraphQL\u2026 zapraszam do lektury <a href=\"https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2\">bardzo ciekawego posta na ten temat<\/a>.<\/p>\n","innerContent":["\n<p>Co ciekawe, nie by\u0142 to wynik jakich\u015b odg\u00f3rnej decyzji. Po prostu przez lata kod Netflixowy coraz cz\u0119\u015bciej, \u201coddolnie\u201d refaktoryzowany by\u0142 do blokuj\u0105cego API, ze wzgl\u0119du na fakt, \u017ce coraz wi\u0119ksze znaczenie ma dla firmy GraphQL i tworz\u0105cy si\u0119 pod spodem \u201cgraf\u201d API, a reaktywno\u015b\u0107 nie do ko\u0144ca w tym przypadku by\u0142a w stanie pom\u00f3c, stopniowo si\u0119 wi\u0119c jej pozbywano. Je\u015bli jeste\u015bcie ciekawi, jak Netflix u\u017cywa dla odmiany GraphQL\u2026 zapraszam do lektury <a href=\"https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2\">bardzo ciekawego posta na ten temat<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, absolutnie nie traktujcie tego wpisu jako \u201cskoro Netflix przesta\u0142 RXa u\u017cywa\u0107, to czas wyrzuci\u0107 go ostatecznie ze swojego stacku\u201d. Bardziej tutaj planowa\u0142em zwr\u00f3ci\u0107 uwag\u0119 na to, jaka masa legend kr\u0105\u017cy po bran\u017cy, cz\u0119sto bazuj\u0105cych na mocno nieaktualnych ju\u017c informacjach. Firmy ewoluuj\u0105, zmieniaj\u0105 si\u0119 im potrzeby i podej\u015bcia. Dlatego te\u017c jak kusz\u0105cym by nie by\u0142o powo\u0142ywanie si\u0119 na autorytet uznanych firm przy podejmowaniu decyzji technologicznych, okazuje si\u0119, \u017ce tkwi w tym nawet wi\u0119cej pu\u0142apek, ni\u017c na pierwszy rzut oka si\u0119 wydaje.<\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, absolutnie nie traktujcie tego wpisu jako \u201cskoro Netflix przesta\u0142 RXa u\u017cywa\u0107, to czas wyrzuci\u0107 go ostatecznie ze swojego stacku\u201d. Bardziej tutaj planowa\u0142em zwr\u00f3ci\u0107 uwag\u0119 na to, jaka masa legend kr\u0105\u017cy po bran\u017cy, cz\u0119sto bazuj\u0105cych na mocno nieaktualnych ju\u017c informacjach. Firmy ewoluuj\u0105, zmieniaj\u0105 si\u0119 im potrzeby i podej\u015bcia. Dlatego te\u017c jak kusz\u0105cym by nie by\u0142o powo\u0142ywanie si\u0119 na autorytet uznanych firm przy podejmowaniu decyzji technologicznych, okazuje si\u0119, \u017ce tkwi w tym nawet wi\u0119cej pu\u0142apek, ni\u017c na pierwszy rzut oka si\u0119 wydaje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5365,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download.png\" alt=\"\" class=\"wp-image-5365\"\/><figcaption>Aczkolwiek wiem, \u017ce niekt\u00f3rzy z ca\u0142ej sytuacji wyci\u0105gn\u0105 nieco prostsze wnioski<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download.png\" alt=\"\" class=\"wp-image-5365\"\/><figcaption>Aczkolwiek wiem, \u017ce niekt\u00f3rzy z ca\u0142ej sytuacji wyci\u0105gn\u0105 nieco prostsze wnioski<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Kontrowersyjna opinia:<\/strong> Z reaktywnym kodem jest jak z CAP Theorem, kt\u00f3ra powsta\u0142 by uwidoczni\u0107 pewien konkretnego problem, ale by\u0142a na tyle no\u015bna, \u017ce nagle wszyscy stwierdzili, \u017ce wszystkie bazy musz\u0105 by\u0107 klasyfikowane jako AP i CP, jakby to by\u0142y jedyne wyr\u00f3\u017cniki. Tak jak wszystkie aplikacje nagle zacz\u0119\u0142y dziwi\u0107 si\u0119, \u017ce wprowadzenie \u201creaktywno\u015bci\u201d nie rozwi\u0105za\u0142o nagle problem\u00f3w ze skalowalno\u015bci\u0105.<\/p>\n","innerContent":["\n<p><strong>Kontrowersyjna opinia:<\/strong> Z reaktywnym kodem jest jak z CAP Theorem, kt\u00f3ra powsta\u0142 by uwidoczni\u0107 pewien konkretnego problem, ale by\u0142a na tyle no\u015bna, \u017ce nagle wszyscy stwierdzili, \u017ce wszystkie bazy musz\u0105 by\u0107 klasyfikowane jako AP i CP, jakby to by\u0142y jedyne wyr\u00f3\u017cniki. Tak jak wszystkie aplikacje nagle zacz\u0119\u0142y dziwi\u0107 si\u0119, \u017ce wprowadzenie \u201creaktywno\u015bci\u201d nie rozwi\u0105za\u0142o nagle problem\u00f3w ze skalowalno\u015bci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li>https:\/\/twitter.com\/rafaelcodes\/status\/1523327905434062848?s=21&amp;t=V5qMCfzlM7ONRoTPPZJM7A&amp;utm_source=pocket_mylist<\/li><li>https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2<\/li><\/ul>\n","innerContent":["\n<ul><li>https:\/\/twitter.com\/rafaelcodes\/status\/1523327905434062848?s=21&amp;t=V5qMCfzlM7ONRoTPPZJM7A&amp;utm_source=pocket_mylist<\/li><li>https:\/\/netflixtechblog.com\/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Kotlin 1.7 wydany<\/h2>\n","innerContent":["\n<h2>2. Kotlin 1.7 wydany<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sezon nowo\u015bci kotlinowych powoli si\u0119 rozp\u0119dza. Dopiero co informowali\u015bmy o Roadmapi\u0119, a tu ju\u017c wysz\u0142a kolejna \u201cdu\u017ca\u201d edycja Kotlina! Przyjrzyjmy si\u0119 zatem, co ciekawego przynosi nowa edycja j\u0119zyka.<\/p>\n","innerContent":["\n<p>Sezon nowo\u015bci kotlinowych powoli si\u0119 rozp\u0119dza. Dopiero co informowali\u015bmy o Roadmapi\u0119, a tu ju\u017c wysz\u0142a kolejna \u201cdu\u017ca\u201d edycja Kotlina! Przyjrzyjmy si\u0119 zatem, co ciekawego przynosi nowa edycja j\u0119zyka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5364,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/dt200508.gif\" alt=\"\" class=\"wp-image-5364\"\/><figcaption> <\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/dt200508.gif\" alt=\"\" class=\"wp-image-5364\"\/><figcaption> <\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. Jak mieli\u015bmy okazj\u0119 wspomina\u0107 przy okazji wydania Roadmapowego, to w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina i to w\u0142a\u015bnie na niej bardzo mocno opieraj\u0105 si\u0119 plany tw\u00f3rc\u00f3w, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu. Wi\u0119cej o kompilatorze K2 mo\u017cecie dowiedzie\u0107 si\u0119 z prezentacji tw\u00f3rc\u00f3w.<\/p>\n","innerContent":["\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. Jak mieli\u015bmy okazj\u0119 wspomina\u0107 przy okazji wydania Roadmapowego, to w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina i to w\u0142a\u015bnie na niej bardzo mocno opieraj\u0105 si\u0119 plany tw\u00f3rc\u00f3w, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu. Wi\u0119cej o kompilatorze K2 mo\u017cecie dowiedzie\u0107 si\u0119 z prezentacji tw\u00f3rc\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z wa\u017cnych nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.&nbsp;<\/p>\n","innerContent":["\n<p>Z wa\u017cnych nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5362,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\" class=\"wp-image-5362\"\/><figcaption>Teraz \u017ceby \"da\u0107 co je\u015b\u0107\" K4, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\" class=\"wp-image-5362\"\/><figcaption>Teraz \u017ceby \"da\u0107 co je\u015b\u0107\" K4, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina (pod tym wzgl\u0119dem bardzo mi to przypomina ostatnie release notes TypeScripta). Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.&nbsp;<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina (pod tym wzgl\u0119dem bardzo mi to przypomina ostatnie release notes TypeScripta). Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Par\u0119 drobiazg\u00f3w przynosi te\u017c biblioteka standardowa, bowiem ponownie wprowadza oryginalne nazwy funkcji, ale z nie-nullowaln\u0105 zwracan\u0105 warto\u015bci\u0105. Dodano wi\u0119cej mo\u017cliwo\u015bci je\u015bli chodzi o Regexpy, a nowe funkcje min(), max(), minBy(), maxBy(), minWith() i maxWith() zwracaj\u0105 teraz bezwzgl\u0119dnie element kolekcji lub rzucaj\u0105 wyj\u0105tek.<\/p>\n","innerContent":["\n<p>Par\u0119 drobiazg\u00f3w przynosi te\u017c biblioteka standardowa, bowiem ponownie wprowadza oryginalne nazwy funkcji, ale z nie-nullowaln\u0105 zwracan\u0105 warto\u015bci\u0105. Dodano wi\u0119cej mo\u017cliwo\u015bci je\u015bli chodzi o Regexpy, a nowe funkcje min(), max(), minBy(), maxBy(), minWith() i maxWith() zwracaj\u0105 teraz bezwzgl\u0119dnie element kolekcji lub rzucaj\u0105 wyj\u0105tek.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>fun main() {\n    val numbers = listOf&lt;Int&gt;()\n    println(numbers.maxOrNull()) \/\/ \"null\"\n    println(numbers.max()) \/\/ \"Exception in... Collection is empty.\"\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>fun main() {\n    val numbers = listOf&lt;Int&gt;()\n    println(numbers.maxOrNull()) \/\/ \"null\"\n    println(numbers.max()) \/\/ \"Exception in... Collection is empty.\"\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z ciekawych rzeczy - Optionale doczeka\u0142y si\u0119 funkcji rozszerze\u0144, co ma zapewni\u0107 wi\u0119ksz\u0105 kompatybilno\u015b\u0107 z javowym kodem i bibliotekami.<\/p>\n","innerContent":["\n<p>Z ciekawych rzeczy - Optionale doczeka\u0142y si\u0119 funkcji rozszerze\u0144, co ma zapewni\u0107 wi\u0119ksz\u0105 kompatybilno\u015b\u0107 z javowym kodem i bibliotekami.<\/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>val presentOptional = Optional.of(\"I'm here!\")\n\nprintln(presentOptional.getOrNull())\n\/\/ \"I'm here!\"\n\nval absentOptional = Optional.empty&lt;String&gt;()\n\nprintln(absentOptional.getOrNull())\n\/\/ null\nprintln(absentOptional.getOrDefault(\"Nobody here!\"))\n\/\/ \"Nobody here!\"\nprintln(absentOptional.getOrElse {\n    println(\"Optional was absent!\")\n    \"Default value!\"\n})\n\/\/ \"Optional was absent!\"\n\/\/ \"Default value!\"<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>val presentOptional = Optional.of(\"I'm here!\")\n\nprintln(presentOptional.getOrNull())\n\/\/ \"I'm here!\"\n\nval absentOptional = Optional.empty&lt;String&gt;()\n\nprintln(absentOptional.getOrNull())\n\/\/ null\nprintln(absentOptional.getOrDefault(\"Nobody here!\"))\n\/\/ \"Nobody here!\"\nprintln(absentOptional.getOrElse {\n    println(\"Optional was absent!\")\n    \"Default value!\"\n})\n\/\/ \"Optional was absent!\"\n\/\/ \"Default value!\"<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, to tylko cz\u0119\u015b\u0107 tego co znajdziecie w nowym wydaniu Kotlina, pe\u0142ne jest one drobnicy a nie zahaczy\u0142em tak naprawd\u0119 o zmiany, kt\u00f3re pojawi\u0142y si\u0119 np. w kontek\u015bcie KotlinJS.&nbsp; <\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, to tylko cz\u0119\u015b\u0107 tego co znajdziecie w nowym wydaniu Kotlina, pe\u0142ne jest one drobnicy a nie zahaczy\u0142em tak naprawd\u0119 o zmiany, kt\u00f3re pojawi\u0142y si\u0119 np. w kontek\u015bcie KotlinJS.&nbsp; <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5366,"width":512,"height":288,"sizeSlug":"large","linkDestination":"custom"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-1024x576.jpeg\" alt=\"\" class=\"wp-image-5366\" width=\"512\" height=\"288\"\/><\/a><figcaption>Je\u017celi preferujecie wprowadzenia wideo, mam dla <a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\">Was filmik przygotowany przez samo JetBrains<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/maxresdefault-1024x576.jpeg\" alt=\"\" class=\"wp-image-5366\" width=\"512\" height=\"288\"\/><\/a><figcaption>Je\u017celi preferujecie wprowadzenia wideo, mam dla <a href=\"https:\/\/www.youtube.com\/watch?v=54WEfLKtCG\">Was filmik przygotowany przez samo JetBrains<\/a>.<\/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 w temacie Kotlina jeste\u015bmy - ukaza\u0142y si\u0119 wyniki dotycz\u0105cej <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">u\u017cycia Kotlin Multiplatform<\/a> przez spo\u0142eczno\u015b\u0107. Wyniki zosta\u0142y okraszone eleganckimi infografikami, prezentuj\u0105cymi stan ekosystemu.&nbsp;Nie b\u0119d\u0119 si\u0119 rozpisywa\u0142, bo w zasadzie zacz\u0105\u0142bym przepisywa\u0107 to, co znajduje si\u0119 w podsumowaniu ze strony JetBrains.<\/p>\n","innerContent":["\n<p>A jak ju\u017c w temacie Kotlina jeste\u015bmy - ukaza\u0142y si\u0119 wyniki dotycz\u0105cej <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">u\u017cycia Kotlin Multiplatform<\/a> przez spo\u0142eczno\u015b\u0107. Wyniki zosta\u0142y okraszone eleganckimi infografikami, prezentuj\u0105cymi stan ekosystemu.&nbsp;Nie b\u0119d\u0119 si\u0119 rozpisywa\u0142, bo w zasadzie zacz\u0105\u0142bym przepisywa\u0107 to, co znajduje si\u0119 w podsumowaniu ze strony JetBrains.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5363,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-2.gif\" alt=\"\" class=\"wp-image-5363\"\/><figcaption>Co najwy\u017cej wspomn\u0119, \u017ce wyra\u017anie wida\u0107 \u017ce w tym \u015bwiecie dalej rz\u0105dzi jednak Android.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-2.gif\" alt=\"\" class=\"wp-image-5363\"\/><figcaption>Co najwy\u017cej wspomn\u0119, \u017ce wyra\u017anie wida\u0107 \u017ce w tym \u015bwiecie dalej rz\u0105dzi jednak Android.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli chcecie uzyska\u0107 <a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">dost\u0119p do pe\u0142nego raportu<\/a> - niestety musicie zostawi\u0107 jego tw\u00f3rcom sw\u00f3j e-mail.<\/p>\n","innerContent":["\n<p>Je\u015bli chcecie uzyska\u0107 <a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">dost\u0119p do pe\u0142nego raportu<\/a> - niestety musicie zostawi\u0107 jego tw\u00f3rcom sw\u00f3j e-mail.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/kotlin-1-7-0-released\/?utm_source=pocket_mylist\">Kotlin 1.7.0 Released<\/a><\/li><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">The State of Kotlin Multiplatform Survey Q3-Q4 2021<\/a><\/li><li><a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">Get Kotlin Multiplatform Survey Results Directly In Your Inbox<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/kotlin-1-7-0-released\/?utm_source=pocket_mylist\">Kotlin 1.7.0 Released<\/a><\/li><li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/06\/multiplatform-survey-q3-q4-2021\/\">The State of Kotlin Multiplatform Survey Q3-Q4 2021<\/a><\/li><li><a href=\"https:\/\/info.jetbrains.com\/kotlin-multiplatform-survey-results.html\">Get Kotlin Multiplatform Survey Results Directly In Your Inbox<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Vector API na przyk\u0142adzie alternatywy dla Arrays.sort<\/h2>\n","innerContent":["\n<h2>3. Vector API na przyk\u0142adzie alternatywy dla Arrays.sort<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec mam co\u015b bardzo niskopoziomowego i technicznego. Dopiero co mieli\u015bmy okazj\u0119 podrzuci\u0107 Wam tekst Jamesa Baker dotycz\u0105cy u\u017cycia precyzyjnych narz\u0119dzi kontroli wsp\u00f3\u0142bie\u017cno\u015bci projektu Loom jako alternatywy dla Jepsena. Wida\u0107, \u017ce niezwyk\u0142a popularno\u015b\u0107 pierwszego tekstu doda\u0142a Jamesowi wiatru w skrzyd\u0142a, gdy\u017c w kr\u00f3tkim okresie uda\u0142o mu si\u0119 sp\u0142odzi\u0107 kolejny, kt\u00f3ry r\u00f3wnie\u017c szybko \u201cwytrendowa\u0142\u201d. Tym razem wzi\u0105\u0142 na warsztat Project Panam\u0119 i przychodz\u0105ce wraz z nim Vector API.<\/p>\n","innerContent":["\n<p>A na koniec mam co\u015b bardzo niskopoziomowego i technicznego. Dopiero co mieli\u015bmy okazj\u0119 podrzuci\u0107 Wam tekst Jamesa Baker dotycz\u0105cy u\u017cycia precyzyjnych narz\u0119dzi kontroli wsp\u00f3\u0142bie\u017cno\u015bci projektu Loom jako alternatywy dla Jepsena. Wida\u0107, \u017ce niezwyk\u0142a popularno\u015b\u0107 pierwszego tekstu doda\u0142a Jamesowi wiatru w skrzyd\u0142a, gdy\u017c w kr\u00f3tkim okresie uda\u0142o mu si\u0119 sp\u0142odzi\u0107 kolejny, kt\u00f3ry r\u00f3wnie\u017c szybko \u201cwytrendowa\u0142\u201d. Tym razem wzi\u0105\u0142 na warsztat Project Panam\u0119 i przychodz\u0105ce wraz z nim Vector API.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowa publikacja dotyczy problemu tak wydawa\u0142oby dawno ju\u017c \u201cwy\u017cy\u0142owanego\u201d, czyli sortowania. James postanowi\u0142 sprawdzi\u0107, ile tak naprawd\u0119 b\u0119dziemy w stanie zyska\u0107, omijaj\u0105c javow\u0105 abstrakcj\u0119 i dobijaj\u0105c si\u0119 bezpo\u015brednio do samego procesora. Te wspieraj\u0105 bowiem tak zwane operacje SIMD (ang. Single Instruction Multiple Data), pozwalaj\u0105ce na przetwarzanie wielu strumieni danych r\u00f3wnocze\u015bnie za pomoc\u0105 pojedynczej instrukcji. Pozwala na znacz\u0105ce skr\u00f3cenie czasu wykonywania oblicze\u0144. SIMD s\u0105 z nami od lat, ale na drodze do ich popularyzacji stan\u0105\u0142 fakt, \u017ce trudno jest napisa\u0107 poprawnie kod z ich u\u017cyciem, a co najwa\u017cniejsze, kompilator w wielu przypadkach mo\u017ce to zrobi\u0107 za nas. Te mechanizmy nie s\u0105 jednak idealne, wi\u0119c w celu osi\u0105gni\u0119cia maksymalnej wydajno\u015bci, niezb\u0119dna b\u0119dzie ingerencja programist\u00f3w. Vector API, czyli cz\u0119\u015b\u0107 Projektu Panama, umo\u017cliwia w\u0142a\u015bnie wykonywanie tego typu operacji w spos\u00f3b maksymalnie bezpieczny i unikni\u0119cia potencjalnych b\u0142\u0119d\u00f3w segmentacji, tak popularnych przy bezpo\u015brednim adresowaniu pami\u0119ci jak to ma miejsce w przypadku operacji SIMD.<\/p>\n","innerContent":["\n<p>Nowa publikacja dotyczy problemu tak wydawa\u0142oby dawno ju\u017c \u201cwy\u017cy\u0142owanego\u201d, czyli sortowania. James postanowi\u0142 sprawdzi\u0107, ile tak naprawd\u0119 b\u0119dziemy w stanie zyska\u0107, omijaj\u0105c javow\u0105 abstrakcj\u0119 i dobijaj\u0105c si\u0119 bezpo\u015brednio do samego procesora. Te wspieraj\u0105 bowiem tak zwane operacje SIMD (ang. Single Instruction Multiple Data), pozwalaj\u0105ce na przetwarzanie wielu strumieni danych r\u00f3wnocze\u015bnie za pomoc\u0105 pojedynczej instrukcji. Pozwala na znacz\u0105ce skr\u00f3cenie czasu wykonywania oblicze\u0144. SIMD s\u0105 z nami od lat, ale na drodze do ich popularyzacji stan\u0105\u0142 fakt, \u017ce trudno jest napisa\u0107 poprawnie kod z ich u\u017cyciem, a co najwa\u017cniejsze, kompilator w wielu przypadkach mo\u017ce to zrobi\u0107 za nas. Te mechanizmy nie s\u0105 jednak idealne, wi\u0119c w celu osi\u0105gni\u0119cia maksymalnej wydajno\u015bci, niezb\u0119dna b\u0119dzie ingerencja programist\u00f3w. Vector API, czyli cz\u0119\u015b\u0107 Projektu Panama, umo\u017cliwia w\u0142a\u015bnie wykonywanie tego typu operacji w spos\u00f3b maksymalnie bezpieczny i unikni\u0119cia potencjalnych b\u0142\u0119d\u00f3w segmentacji, tak popularnych przy bezpo\u015brednim adresowaniu pami\u0119ci jak to ma miejsce w przypadku operacji SIMD.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":5367,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1.jpeg\" alt=\"\" class=\"wp-image-5367\"\/><figcaption>I tak, zdaje sobie spraw\u0119, \u017ce wi\u0119kszo\u015b\u0107 ludzi i tak nigfy tego nie u\u017cyje.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62d6b7e865a2aa7c8f566819bab6b0be1e28b6424bcc3cf140ae62ad1eb5c077_1.jpeg\" alt=\"\" class=\"wp-image-5367\"\/><figcaption>I tak, zdaje sobie spraw\u0119, \u017ce wi\u0119kszo\u015b\u0107 ludzi i tak nigfy tego nie u\u017cyje.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jako benchmark u\u017cyto za\u015b Arrays.sort. Sam kod jest na tyle skomplikowany i przechodzi\u0142 na tyle iteracji, \u017ce nie b\u0119d\u0119 go tutaj przekleja\u0142 i pozwol\u0119 sobie odes\u0142a\u0107 zainteresowanych do <a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">oryginalnego postu<\/a>. Nas ciekawi\u0107 tutaj b\u0119d\u0105 jednak wnioski autora. Zaczniemy od tych pozytywnych\u2026 jest szybko, naprawd\u0119 szybko - zaproponowana przez autora implementacja osi\u0105gn\u0119\u0142a w benchmarkach wydajno\u015b\u0107 blisko trzykrotnie lepsz\u0105 ni\u017c rozwi\u0105zanie dostarczane z JDK. Obarczone jest to jednak pewnymi problemami. Przyk\u0142adowo, autor nie ukrywa, \u017ce pisanie przy pomocy Vector API to proces regularnego strzelania we w\u0142asn\u0105 stop\u0119 i d\u0142ugotrwa\u0142ego debugowania (kt\u00f3re samo w sobie te\u017c jest bardzo trudne, ze wzgl\u0119du na fakt, \u017ce dzia\u0142amy bezpo\u015brednio z natywn\u0105 pami\u0119ci\u0105). Samo zmierzenie uzyskanej wydajno\u015bci w realistyczny spos\u00f3b te\u017c wymaga\u0142o od Jamesa nieco kreatywno\u015bci. Samo API, ze wzgl\u0119du na to, \u017ce jest rozwi\u0105zaniem \u201cbezpiecznym\u201d dla programist\u00f3w, te\u017c nie pozwala na uzyskanie pe\u0142nej mocy procesora - rozwi\u0105zania w C++ w dalszym ci\u0105gu s\u0105 wielokrotnie bardziej wydajne. Wydaje si\u0119 jednak, \u017ce dla wielu programist\u00f3w, Java ze wsparcie SIMD mo\u017ce okaza\u0107 si\u0119 bardzo ciekaw\u0105 alternatyw\u0105 dla j\u0119zyk\u00f3w bli\u017cszych maszynie&nbsp;<\/p>\n","innerContent":["\n<p>Jako benchmark u\u017cyto za\u015b Arrays.sort. Sam kod jest na tyle skomplikowany i przechodzi\u0142 na tyle iteracji, \u017ce nie b\u0119d\u0119 go tutaj przekleja\u0142 i pozwol\u0119 sobie odes\u0142a\u0107 zainteresowanych do <a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">oryginalnego postu<\/a>. Nas ciekawi\u0107 tutaj b\u0119d\u0105 jednak wnioski autora. Zaczniemy od tych pozytywnych\u2026 jest szybko, naprawd\u0119 szybko - zaproponowana przez autora implementacja osi\u0105gn\u0119\u0142a w benchmarkach wydajno\u015b\u0107 blisko trzykrotnie lepsz\u0105 ni\u017c rozwi\u0105zanie dostarczane z JDK. Obarczone jest to jednak pewnymi problemami. Przyk\u0142adowo, autor nie ukrywa, \u017ce pisanie przy pomocy Vector API to proces regularnego strzelania we w\u0142asn\u0105 stop\u0119 i d\u0142ugotrwa\u0142ego debugowania (kt\u00f3re samo w sobie te\u017c jest bardzo trudne, ze wzgl\u0119du na fakt, \u017ce dzia\u0142amy bezpo\u015brednio z natywn\u0105 pami\u0119ci\u0105). Samo zmierzenie uzyskanej wydajno\u015bci w realistyczny spos\u00f3b te\u017c wymaga\u0142o od Jamesa nieco kreatywno\u015bci. Samo API, ze wzgl\u0119du na to, \u017ce jest rozwi\u0105zaniem \u201cbezpiecznym\u201d dla programist\u00f3w, te\u017c nie pozwala na uzyskanie pe\u0142nej mocy procesora - rozwi\u0105zania w C++ w dalszym ci\u0105gu s\u0105 wielokrotnie bardziej wydajne. Wydaje si\u0119 jednak, \u017ce dla wielu programist\u00f3w, Java ze wsparcie SIMD mo\u017ce okaza\u0107 si\u0119 bardzo ciekaw\u0105 alternatyw\u0105 dla j\u0119zyk\u00f3w bli\u017cszych maszynie&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Polecam lektur\u0119 ca\u0142o\u015bci - nie jest ona najl\u017cejsza, ale autor robi wszystko, aby bezbole\u015bnie przeprowadzi\u0107 czytelnika przez meandry kodowania przy pomocy nowej zdobyczy pochodz\u0105cej z Projektu Panama.<\/p>\n","innerContent":["\n<p>Polecam lektur\u0119 ca\u0142o\u015bci - nie jest ona najl\u017cejsza, ale autor robi wszystko, aby bezbole\u015bnie przeprowadzi\u0107 czytelnika przez meandry kodowania przy pomocy nowej zdobyczy pochodz\u0105cej z Projektu Panama.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">SIMD accelerated sorting in Java - how it works and why it was 3x faster<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/jbaker.io\/2022\/06\/09\/vectors-in-java\/\">SIMD accelerated sorting in Java - how it works and why it was 3x faster<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Bonus:<\/strong> <strong>Doczekali\u015bmy si\u0119 zamro\u017conej <\/strong><a href=\"https:\/\/openjdk.org\/projects\/jdk\/19\/#Schedule\"><strong>listy funkcjonalno\u015bci JDK 19<\/strong><\/a><strong>.&nbsp;<\/strong><\/p>\n","innerContent":["\n<p><strong>Bonus:<\/strong> <strong>Doczekali\u015bmy si\u0119 zamro\u017conej <\/strong><a href=\"https:\/\/openjdk.org\/projects\/jdk\/19\/#Schedule\"><strong>listy funkcjonalno\u015bci JDK 19<\/strong><\/a><strong>.&nbsp;<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Prezentuje si\u0119 nast\u0119puj\u0105co:&nbsp;<\/p>\n","innerContent":["\n<p>Prezentuje si\u0119 nast\u0119puj\u0105co:&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li>405: Record Patterns (Preview)\u00a0<\/li><li>422: Linux\/RISC-V Port<\/li><li>424: Foreign Function &amp; Memory API (Preview)<\/li><li>425: Virtual Threads (Preview)<\/li><li>426: Vector API (Fourth Incubator)<\/li><li>427: Pattern Matching for switch (Third Preview)<\/li><li>428: Structured Concurrency (Incubator)<\/li><\/ul>\n","innerContent":["\n<ul><li>405: Record Patterns (Preview)\u00a0<\/li><li>422: Linux\/RISC-V Port<\/li><li>424: Foreign Function &amp; Memory API (Preview)<\/li><li>425: Virtual Threads (Preview)<\/li><li>426: Vector API (Fourth Incubator)<\/li><li>427: Pattern Matching for switch (Third Preview)<\/li><li>428: Structured Concurrency (Incubator)<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak mo\u017cna zauwa\u017cy\u0107, raczej doczekamy si\u0119 w niej wy\u0142\u0105cznie jednego stabilnego ficzera (konwersji Javy na Linuxy pracuj\u0105ce na procesorach RISC-V), ale jeszcze raz podkre\u015blam co\u015b, o czym wspomina\u0142em ju\u017c od d\u0142u\u017cszego czasu - b\u0119dzie to najciekawsze nowe wydanie Javy od lat.&nbsp;<\/p>\n","innerContent":["\n<p>Jak mo\u017cna zauwa\u017cy\u0107, raczej doczekamy si\u0119 w niej wy\u0142\u0105cznie jednego stabilnego ficzera (konwersji Javy na Linuxy pracuj\u0105ce na procesorach RISC-V), ale jeszcze raz podkre\u015blam co\u015b, o czym wspomina\u0142em ju\u017c od d\u0142u\u017cszego czasu - b\u0119dzie to najciekawsze nowe wydanie Javy od lat.&nbsp;<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9957","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=9957"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9957\/revisions"}],"predecessor-version":[{"id":10483,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9957\/revisions\/10483"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8713"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}