{"id":10191,"date":"2021-01-26T09:21:02","date_gmt":"2021-01-26T08:21:02","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-22\/"},"modified":"2022-09-19T13:10:57","modified_gmt":"2022-09-19T11:10:57","slug":"jvm-tuesday-vol-22","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/","title":{"rendered":"JVM Tuesday vol. 22"},"content":{"rendered":"<h2 id=\"1-java-na-graalvm-zyskuje-potezne-nowe-mozliwosci\" data-num=1>1<a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">. Java na GraalVM zyskuje pot\u0119\u017cne nowe mo\u017cliwo\u015bci<\/a><\/h2>\n<p>GraalVM (nazwa kodowa &#8211; Project Metropolis) to jedna z najciekawszych inicjatyw Oracle. Jest to zestaw narz\u0119dzi, dostarczaj\u0105cy uniwersaln\u0105 maszyn\u0119 wirtualn\u0105 dla r\u00f3\u017cnych j\u0119zyk\u00f3w programowania. Projekt ten rozwijany jest od lat, a jego adopcja przekroczy\u0142a chyba oczekiwania samych tw\u00f3rc\u00f3w (w\u0142a\u015bciwie ka\u017cdy licz\u0105cy si\u0119 Javowy Framework chwali si\u0119 obecnie wsparciem dla GraalVM).<\/p>\n<p>Najbardziej znanym wykorzystaniem kompilatora Graal jest z pewno\u015bci\u0105 mo\u017cliwo\u015b\u0107 generowania niezwykle wydajnych, binarnych wersji program\u00f3w przez niego skompilowanych. Do tej pory by\u0142 to jedyny (a przynajmniej jedyny niewymagaj\u0105cy pe\u0142nego JVMa) spos\u00f3b uruchamiania aplikacji Javowych w \u015brodowisku GraalVM. Wraz z wydan\u0105 w zesz\u0142ym tygodniu wersj\u0105 21 (ciekawostka: jej premiera streamowana by\u0142a na\u2026 Twitchu) przynosi ma\u0142\u0105 rewolucj\u0119 &#8211; mo\u017cliwo\u015b\u0107 uruchomienia aplikacji Javowych w \u015brodowisku Truffle.<\/p>\n<p>Truffle jest warstw\u0105 po\u015bredni\u0105, okre\u015blan\u0105 czasem jako kompilator kompilator\u00f3w. Jest to hmmm\u2026 narz\u0119dzie do generowania interpretator\u00f3w poszczeg\u00f3lnych j\u0119zyk\u00f3w, generuj\u0105cy ich Abstract Syntax Tree w formacie kompatybilnym do uruchomienia w ramach maszyny wirtualnej Graala. Do tej Truffle dzia\u0142a\u0142 tylko i wy\u0142\u0105cznie dla j\u0119zyk\u00f3w implementowanych. Mo\u017cliwo\u015b\u0107 jego u\u017cycia r\u00f3wnie\u017c w wypadku Javy ma dwie ogromne zalety. Po pierwsze Truffle jest szybki\u2026 diabelnie szybki &#8211; w po\u0142\u0105czeniu z GraalVM generuje on bardzo wydajny kod maszynowy. Po drugie za\u015b, Truffle jest napisany w Javie, co oznacza \u017ce mo\u017ce by\u0107 do\u0142\u0105czony jako\u2026 zale\u017cno\u015b\u0107 do projektu. Prowadzi to do sytuacji, kiedy aplikacja Javowa mo\u017ce sama skompilowa\u0107 sw\u00f3j w\u0142asny kod. Jest to tak zwane Metacircularity &#8211; cecha, kt\u00f3r\u0105 tw\u00f3rcy okre\u015blaj\u0105 jako (nomen omen) \u015bwi\u0119ty Graal maszyn wirtualnych. W praktyce oznacza to mo\u017cliwo\u015b\u0107 u\u017cycia zar\u00f3wno kompilacji Ahead-of-Time, jak i Just-in-Time w tym samym projekcie.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\" alt=\"\" \/><figcaption>Ukradzione z oryginalnego postu, ale nie mog\u0142em si\u0119 powstrzyma\u0107<\/figcaption><\/figure>\n<p>Je\u017celi chcecie si\u0119 dowiedzie\u0107 wi\u0119cej o samym GraalVM &#8211; <a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">polecam wprowadzenie w formie wideo po polsku.<\/a><\/p>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">Devs&#8217; Talks #5 &#8211; GraalVM to rule them all! Wprowadzenie do GraalVM<\/a><\/li>\n<\/ol>\n<h2 id=\"2-java-na-arm-co-musisz-wiedziec\" data-num=2><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">2. Java na ARM &#8211; co musisz wiedzie\u0107<\/a><\/h2>\n<p>Schodz\u0105c z temat\u00f3w internali, przechodzimy na hardware.<\/p>\n<p>Praktycznie na ka\u017cdej li\u015bcie najwa\u017cniejszych wydarze\u0144 technologicznych 2020 roku musia\u0142 znale\u017a\u0107 si\u0119 niesamowity wr\u0119cz sukces procesor\u00f3w ARM. G\u0142\u00f3wnie dzi\u0119ki Apple i ich niesamowitym procesorem M1 (dlaczego s\u0105 takie szybkie? <a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Tutaj znajdziecie bardzo fajny artyku\u0142 na ten temat<\/a>), ale na podobny ruch zdecydowa\u0142y si\u0119 te\u017c inne firmy. Jedn\u0105 z nich jest Oracle, kt\u00f3ry postanowi\u0142 udost\u0119pni\u0107 w ramach swojej chmury serwery ARM. Decyzja ta nie pozosta\u0142a bez efektu na Jav\u0119, kt\u00f3rej to wersja, na t\u0105 w\u0142a\u015bnie architektur\u0119, sta\u0142a si\u0119 nagle wa\u017cnym elementem biznesu Oracle.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13eda8923.png\" alt=\"\" \/><\/figure>\n<p>Linkowany artyku\u0142 jest najlepszym, jak do tej pory \u017ar\u00f3d\u0142em informacji o wydajno\u015bci, mo\u017cliwo\u015bciach, lecz r\u00f3wnie\u017c potencjalnych problemach, na jakie mo\u017cemy natkn\u0105\u0107 si\u0119 podczas portowania naszej aplikacji na nowy typ procesora. Znajdziemy w nim te\u017c wiele interesuj\u0105cych detali, takich jak np. sugerowane flagi maszyny wirtualnej lub unikalne metody diagnozowania problem\u00f3w.<\/p>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">Java on Arm processors: Understanding AArch64 vs. x86<\/a><\/li>\n<li><a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Why Is Apple\u2019s M1 Chip So Fast?<\/a><\/li>\n<\/ol>\n<h2 id=\"3-wysyp-multiplatformowych-edycji-kotlina-i-scali\" data-num=3>3. Wysyp multiplatformowych edycji Kotlina i Scali<\/h2>\n<p>Ko\u0144c\u00f3wka roku by\u0142a bardzo spokojna i powolna, a ilo\u015b\u0107 ciekawych og\u0142osze\u0144 mo\u017cna by\u0142o policzy\u0107 na palcach jednej r\u0119ki &#8211; wydaje si\u0119, \u017ce by\u0142a to jednak cisza przed burz\u0105. Pocz\u0105tek roku to wysyp wiadomo\u015bci atakuj\u0105cych nas z r\u00f3\u017cnych stron. Zacz\u0119li\u015bmy od informacji o nowym wydaniu GraalVM, a edycje zako\u0144czymy za\u015b podsumowaniem tego, jak radz\u0105 sobie r\u00f3\u017cne podej\u015bcia do tak zwanego \u201cmultiplatformowego JVM\u201d.<\/p>\n<p>Zacznijmy od Kotlina. J\u0119zyk ten od samego pocz\u0105tku celowa\u0142 w mo\u017cliwo\u015b\u0107 kompilacji na \u015brodowiska uruchomieniowe r\u00f3\u017cnych platform. Kotlin umo\u015bci\u0142 si\u0119 g\u0142\u00f3wnie na Androidzie, powolutku promuj\u0105c si\u0119 r\u00f3wnie\u017c na j\u0119zyk serwerowy. Nie wolno jednak zapomina\u0107, \u017ce istniej\u0105 te\u017c jego edycje na cho\u0107by JavaScript, iOS, czy r\u00f3wnie\u017c raczkuj\u0105ca edycja Native, uruchamiana w ramach LLVM. Zastanawiali\u015bcie si\u0119 kiedy\u015b, na ile te niszowe edycje Kotlina maj\u0105 powodzenie? Za\u0142oga JetBrains to zrobi\u0142a, i <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">dzi\u0119ki temu mamy teraz ciekawe wyniki ankiety dotycz\u0105cej tego zagadnienia.<\/a> Zaskoczeniem nie b\u0119dzie na pewno, \u017ce najcz\u0119stszym przypadkiem u\u017cycia s\u0105 wsp\u00f3lne buildy aplikacyjne dla Androida i iOSa, ale np. a\u017c 15% ankietowanych stwierdzi\u0142o, \u017ce dziel\u0105 kod mi\u0119dzy frontendem a backendem.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ef2a528.png\" alt=\"\" \/><figcaption>Kotlin Multiplatform, koloryzowane.<\/figcaption><\/figure>\n<p>Tym stwierdzeniem szybko mo\u017cemy przej\u015b\u0107 do drugiego bohatera tej cz\u0119\u015bci (o kt\u00f3rym mogli\u015bcie ju\u017c zreszt\u0105 przeczyta\u0107 w naszej <a href=\"https:\/\/blog.vived.io\/frontend-wednesday-vol-21\/\">edycji frontendowej<\/a>, jest to do\u015b\u0107 unikalny \u201ccrossover\u201d), czyli ScaliJS. Mam osobist\u0105 s\u0142abo\u015b\u0107 do tego j\u0119zyka (min. przez <a href=\"https:\/\/www.youtube.com\/watch?v=N0NaXSqJLZc\">m\u00f3j jedyny talk ever na Krakow Scala User Group<\/a>), ale przyznam, \u017ce nigdy nie dawa\u0142em mu wielkich szans na dynamiczny rozw\u00f3j. O ile jednak ci\u0119\u017cko nazwa\u0107 go czym\u015b wi\u0119cej ni\u017c \u201cnisz\u0105 w niszy\u201d, to jednak nowe edycje ukazuj\u0105 si\u0119 w miar\u0119 regularnie. Ostatnia z nich, <a href=\"https:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\">Scala.js 1.4.0<\/a>, nie przynosi co prawda wielu zmian, podsumowuje jednak zapocz\u0105tkowan\u0105 przez Scala.js 1.3 modularyzacj\u0119, podbijaj\u0105c przy okazji u\u017cywan\u0105 przez Scala.js bazow\u0105 wersj\u0119 Scali z 2.13 na 2.14.<\/p>\n<p>Podsumowuj\u0105c ten dzia\u0142 dziwnych wyda\u0144 j\u0119zyk\u00f3w JVMowych, wr\u00f3cimy w tej chwili do Scali, tym razem w wydaniu Native. Podobnie jak natywny Kotlin, Scala Native uruchamiana jest na LLVM, podobnie jak Scala.js, <a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">wersja 0.4.0<\/a> przynosi upgrade Scalowej bazy, nieco mniej \u015bmia\u0142o ni\u017c ma to przypadek w wersji JavaScriptowej,<br \/>\nbo zaledwie do Scali 2.13. Zakres zmian nie ko\u0144czy si\u0119 jednak na tym &#8211; nowa edycja to znacznie rozwini\u0119ta wsp\u00f3\u0142praca z kodem napisanym w C, zupe\u0142nie nowy Garbage Collector, a tak\u017ce spore zmiany w formacie po\u015brednim <a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">NIR<\/a>.<\/p>\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">Results of the First Kotlin Multiplatform Survey<\/a><\/li>\n<li><a href=\"http:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\/\">Announcing Scala.js 1.4.0<\/a><\/li>\n<li><a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">Scala Native 0.4.0 is here!<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Documentation &#8211; <\/a><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Native Intermediate Representation<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiejsza edycja jest bardzo nietypowa &#8211; znajdziecie w niej nowo\u015bci w GraalVM, Kotlin Multpilatform, Scala.js i Native&#8230; a tak\u017ce dobre praktyki je\u015bli chodzi o uruchamianie Jav\u0119 na ARM. Mamy nadzieje, \u017ce nasze opracowanie pomo\u017ce Wam odnale\u017a\u0107 si\u0119 w tych egzotycznych zak\u0105tkach JVMa.<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10191","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"5"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 22 - 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-tuesday-vol-22\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 22 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiejsza edycja jest bardzo nietypowa - znajdziecie w niej nowo\u015bci w GraalVM, Kotlin Multpilatform, Scala.js i Native... a tak\u017ce dobre praktyki je\u015bli chodzi o uruchamianie Jav\u0119 na ARM. Mamy nadzieje, \u017ce nasze opracowanie pomo\u017ce Wam odnale\u017a\u0107 si\u0119 w tych egzotycznych zak\u0105tkach JVMa.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-26T08:21:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.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-tuesday-vol-22\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 22\",\"datePublished\":\"2021-01-26T08:21:02+00:00\",\"dateModified\":\"2022-09-19T11:10:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\"},\"wordCount\":1004,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\",\"name\":\"JVM Tuesday vol. 22 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\",\"datePublished\":\"2021-01-26T08:21:02+00:00\",\"dateModified\":\"2022-09-19T11:10:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 22\"}]},{\"@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 Tuesday vol. 22 - 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-tuesday-vol-22\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 22 - Vived","og_description":"Dzisiejsza edycja jest bardzo nietypowa - znajdziecie w niej nowo\u015bci w GraalVM, Kotlin Multpilatform, Scala.js i Native... a tak\u017ce dobre praktyki je\u015bli chodzi o uruchamianie Jav\u0119 na ARM. Mamy nadzieje, \u017ce nasze opracowanie pomo\u017ce Wam odnale\u017a\u0107 si\u0119 w tych egzotycznych zak\u0105tkach JVMa.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/","og_site_name":"Vived","article_published_time":"2021-01-26T08:21:02+00:00","article_modified_time":"2022-09-19T11:10:57+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 22","datePublished":"2021-01-26T08:21:02+00:00","dateModified":"2022-09-19T11:10:57+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/"},"wordCount":1004,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/","name":"JVM Tuesday vol. 22 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png","datePublished":"2021-01-26T08:21:02+00:00","dateModified":"2022-09-19T11:10:57+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-22\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 22"}]},{"@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":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-java-na-graalvm-zyskuje-pot-ne-nowe-mo-liwo-ci\">1<a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">. Java na GraalVM zyskuje pot\u0119\u017cne nowe mo\u017cliwo\u015bci<\/a><\/h2>\nGraalVM (nazwa kodowa - Project Metropolis) to jedna z najciekawszych inicjatyw Oracle. Jest to zestaw narz\u0119dzi, dostarczaj\u0105cy uniwersaln\u0105 maszyn\u0119 wirtualn\u0105 dla r\u00f3\u017cnych j\u0119zyk\u00f3w programowania. Projekt ten rozwijany jest od lat, a jego adopcja przekroczy\u0142a chyba oczekiwania samych tw\u00f3rc\u00f3w (w\u0142a\u015bciwie ka\u017cdy licz\u0105cy si\u0119 Javowy Framework chwali si\u0119 obecnie wsparciem dla GraalVM).\n\nNajbardziej znanym wykorzystaniem kompilatora Graal jest z pewno\u015bci\u0105 mo\u017cliwo\u015b\u0107 generowania niezwykle wydajnych, binarnych wersji program\u00f3w przez niego skompilowanych. Do tej pory by\u0142 to jedyny (a przynajmniej jedyny niewymagaj\u0105cy pe\u0142nego JVMa) spos\u00f3b uruchamiania aplikacji Javowych w \u015brodowisku GraalVM. Wraz z wydan\u0105 w zesz\u0142ym tygodniu wersj\u0105 21 (ciekawostka: jej premiera streamowana by\u0142a na\u2026 Twitchu) przynosi ma\u0142\u0105 rewolucj\u0119 - mo\u017cliwo\u015b\u0107 uruchomienia aplikacji Javowych w \u015brodowisku Truffle.\n\nTruffle jest warstw\u0105 po\u015bredni\u0105, okre\u015blan\u0105 czasem jako kompilator kompilator\u00f3w. Jest to hmmm\u2026 narz\u0119dzie do generowania interpretator\u00f3w poszczeg\u00f3lnych j\u0119zyk\u00f3w, generuj\u0105cy ich Abstract Syntax Tree w formacie kompatybilnym do uruchomienia w ramach maszyny wirtualnej Graala. Do tej Truffle dzia\u0142a\u0142 tylko i wy\u0142\u0105cznie dla j\u0119zyk\u00f3w implementowanych. Mo\u017cliwo\u015b\u0107 jego u\u017cycia r\u00f3wnie\u017c w wypadku Javy ma dwie ogromne zalety. Po pierwsze Truffle jest szybki\u2026 diabelnie szybki - w po\u0142\u0105czeniu z GraalVM generuje on bardzo wydajny kod maszynowy. Po drugie za\u015b, Truffle jest napisany w Javie, co oznacza \u017ce mo\u017ce by\u0107 do\u0142\u0105czony jako\u2026 zale\u017cno\u015b\u0107 do projektu. Prowadzi to do sytuacji, kiedy aplikacja Javowa mo\u017ce sama skompilowa\u0107 sw\u00f3j w\u0142asny kod. Jest to tak zwane Metacircularity - cecha, kt\u00f3r\u0105 tw\u00f3rcy okre\u015blaj\u0105 jako (nomen omen) \u015bwi\u0119ty Graal maszyn wirtualnych. W praktyce oznacza to mo\u017cliwo\u015b\u0107 u\u017cycia zar\u00f3wno kompilacji Ahead-of-Time, jak i Just-in-Time w tym samym projekcie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\" alt=\"\" \/>\n<figcaption>Ukradzione z oryginalnego postu, ale nie mog\u0142em si\u0119 powstrzyma\u0107<\/figcaption><\/figure>\nJe\u017celi chcecie si\u0119 dowiedzie\u0107 wi\u0119cej o samym GraalVM - <a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">polecam wprowadzenie w formie wideo po polsku.<\/a>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n \t<li><a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">Devs' Talks #5 - GraalVM to rule them all! Wprowadzenie do GraalVM<\/a><\/li>\n<\/ol>\n<h2 id=\"2-java-na-arm-co-musisz-wiedzie-\"><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">2. Java na ARM - co musisz wiedzie\u0107<\/a><\/h2>\nSchodz\u0105c z temat\u00f3w internali, przechodzimy na hardware.\n\nPraktycznie na ka\u017cdej li\u015bcie najwa\u017cniejszych wydarze\u0144 technologicznych 2020 roku musia\u0142 znale\u017a\u0107 si\u0119 niesamowity wr\u0119cz sukces procesor\u00f3w ARM. G\u0142\u00f3wnie dzi\u0119ki Apple i ich niesamowitym procesorem M1 (dlaczego s\u0105 takie szybkie? <a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Tutaj znajdziecie bardzo fajny artyku\u0142 na ten temat<\/a>), ale na podobny ruch zdecydowa\u0142y si\u0119 te\u017c inne firmy. Jedn\u0105 z nich jest Oracle, kt\u00f3ry postanowi\u0142 udost\u0119pni\u0107 w ramach swojej chmury serwery ARM. Decyzja ta nie pozosta\u0142a bez efektu na Jav\u0119, kt\u00f3rej to wersja, na t\u0105 w\u0142a\u015bnie architektur\u0119, sta\u0142a si\u0119 nagle wa\u017cnym elementem biznesu Oracle.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13eda8923.png\" alt=\"\" \/><\/figure>\nLinkowany artyku\u0142 jest najlepszym, jak do tej pory \u017ar\u00f3d\u0142em informacji o wydajno\u015bci, mo\u017cliwo\u015bciach, lecz r\u00f3wnie\u017c potencjalnych problemach, na jakie mo\u017cemy natkn\u0105\u0107 si\u0119 podczas portowania naszej aplikacji na nowy typ procesora. Znajdziemy w nim te\u017c wiele interesuj\u0105cych detali, takich jak np. sugerowane flagi maszyny wirtualnej lub unikalne metody diagnozowania problem\u00f3w.\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">Java on Arm processors: Understanding AArch64 vs. x86<\/a><\/li>\n \t<li><a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Why Is Apple\u2019s M1 Chip So Fast?<\/a><\/li>\n<\/ol>\n<h2 id=\"3-wysyp-multiplatformowych-edycji-kotlina-i-scali-\">3. Wysyp multiplatformowych edycji Kotlina i Scali<\/h2>\nKo\u0144c\u00f3wka roku by\u0142a bardzo spokojna i powolna, a ilo\u015b\u0107 ciekawych og\u0142osze\u0144 mo\u017cna by\u0142o policzy\u0107 na palcach jednej r\u0119ki - wydaje si\u0119, \u017ce by\u0142a to jednak cisza przed burz\u0105. Pocz\u0105tek roku to wysyp wiadomo\u015bci atakuj\u0105cych nas z r\u00f3\u017cnych stron. Zacz\u0119li\u015bmy od informacji o nowym wydaniu GraalVM, a edycje zako\u0144czymy za\u015b podsumowaniem tego, jak radz\u0105 sobie r\u00f3\u017cne podej\u015bcia do tak zwanego \u201cmultiplatformowego JVM\u201d.\n\nZacznijmy od Kotlina. J\u0119zyk ten od samego pocz\u0105tku celowa\u0142 w mo\u017cliwo\u015b\u0107 kompilacji na \u015brodowiska uruchomieniowe r\u00f3\u017cnych platform. Kotlin umo\u015bci\u0142 si\u0119 g\u0142\u00f3wnie na Androidzie, powolutku promuj\u0105c si\u0119 r\u00f3wnie\u017c na j\u0119zyk serwerowy. Nie wolno jednak zapomina\u0107, \u017ce istniej\u0105 te\u017c jego edycje na cho\u0107by JavaScript, iOS, czy r\u00f3wnie\u017c raczkuj\u0105ca edycja Native, uruchamiana w ramach LLVM. Zastanawiali\u015bcie si\u0119 kiedy\u015b, na ile te niszowe edycje Kotlina maj\u0105 powodzenie? Za\u0142oga JetBrains to zrobi\u0142a, i <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">dzi\u0119ki temu mamy teraz ciekawe wyniki ankiety dotycz\u0105cej tego zagadnienia.<\/a> Zaskoczeniem nie b\u0119dzie na pewno, \u017ce najcz\u0119stszym przypadkiem u\u017cycia s\u0105 wsp\u00f3lne buildy aplikacyjne dla Androida i iOSa, ale np. a\u017c 15% ankietowanych stwierdzi\u0142o, \u017ce dziel\u0105 kod mi\u0119dzy frontendem a backendem.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ef2a528.png\" alt=\"\" \/>\n<figcaption>Kotlin Multiplatform, koloryzowane.<\/figcaption><\/figure>\nTym stwierdzeniem szybko mo\u017cemy przej\u015b\u0107 do drugiego bohatera tej cz\u0119\u015bci (o kt\u00f3rym mogli\u015bcie ju\u017c zreszt\u0105 przeczyta\u0107 w naszej <a href=\"https:\/\/blog.vived.io\/frontend-wednesday-vol-21\/\">edycji frontendowej<\/a>, jest to do\u015b\u0107 unikalny \u201ccrossover\u201d), czyli ScaliJS. Mam osobist\u0105 s\u0142abo\u015b\u0107 do tego j\u0119zyka (min. przez <a href=\"https:\/\/www.youtube.com\/watch?v=N0NaXSqJLZc\">m\u00f3j jedyny talk ever na Krakow Scala User Group<\/a>), ale przyznam, \u017ce nigdy nie dawa\u0142em mu wielkich szans na dynamiczny rozw\u00f3j. O ile jednak ci\u0119\u017cko nazwa\u0107 go czym\u015b wi\u0119cej ni\u017c \u201cnisz\u0105 w niszy\u201d, to jednak nowe edycje ukazuj\u0105 si\u0119 w miar\u0119 regularnie. Ostatnia z nich, <a href=\"https:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\">Scala.js 1.4.0<\/a>, nie przynosi co prawda wielu zmian, podsumowuje jednak zapocz\u0105tkowan\u0105 przez Scala.js 1.3 modularyzacj\u0119, podbijaj\u0105c przy okazji u\u017cywan\u0105 przez Scala.js bazow\u0105 wersj\u0119 Scali z 2.13 na 2.14.\n\nPodsumowuj\u0105c ten dzia\u0142 dziwnych wyda\u0144 j\u0119zyk\u00f3w JVMowych, wr\u00f3cimy w tej chwili do Scali, tym razem w wydaniu Native. Podobnie jak natywny Kotlin, Scala Native uruchamiana jest na LLVM, podobnie jak Scala.js, <a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">wersja 0.4.0<\/a> przynosi upgrade Scalowej bazy, nieco mniej \u015bmia\u0142o ni\u017c ma to przypadek w wersji JavaScriptowej,\nbo zaledwie do Scali 2.13. Zakres zmian nie ko\u0144czy si\u0119 jednak na tym - nowa edycja to znacznie rozwini\u0119ta wsp\u00f3\u0142praca z kodem napisanym w C, zupe\u0142nie nowy Garbage Collector, a tak\u017ce spore zmiany w formacie po\u015brednim <a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">NIR<\/a>.\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">Results of the First Kotlin Multiplatform Survey<\/a><\/li>\n \t<li><a href=\"http:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\/\">Announcing Scala.js 1.4.0<\/a><\/li>\n \t<li><a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">Scala Native 0.4.0 is here!<\/a><\/li>\n \t<li><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Documentation - <\/a><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Native Intermediate Representation<\/a><\/li>\n<\/ol>","innerContent":["<h2 id=\"1-java-na-graalvm-zyskuje-pot-ne-nowe-mo-liwo-ci\">1<a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">. Java na GraalVM zyskuje pot\u0119\u017cne nowe mo\u017cliwo\u015bci<\/a><\/h2>\nGraalVM (nazwa kodowa - Project Metropolis) to jedna z najciekawszych inicjatyw Oracle. Jest to zestaw narz\u0119dzi, dostarczaj\u0105cy uniwersaln\u0105 maszyn\u0119 wirtualn\u0105 dla r\u00f3\u017cnych j\u0119zyk\u00f3w programowania. Projekt ten rozwijany jest od lat, a jego adopcja przekroczy\u0142a chyba oczekiwania samych tw\u00f3rc\u00f3w (w\u0142a\u015bciwie ka\u017cdy licz\u0105cy si\u0119 Javowy Framework chwali si\u0119 obecnie wsparciem dla GraalVM).\n\nNajbardziej znanym wykorzystaniem kompilatora Graal jest z pewno\u015bci\u0105 mo\u017cliwo\u015b\u0107 generowania niezwykle wydajnych, binarnych wersji program\u00f3w przez niego skompilowanych. Do tej pory by\u0142 to jedyny (a przynajmniej jedyny niewymagaj\u0105cy pe\u0142nego JVMa) spos\u00f3b uruchamiania aplikacji Javowych w \u015brodowisku GraalVM. Wraz z wydan\u0105 w zesz\u0142ym tygodniu wersj\u0105 21 (ciekawostka: jej premiera streamowana by\u0142a na\u2026 Twitchu) przynosi ma\u0142\u0105 rewolucj\u0119 - mo\u017cliwo\u015b\u0107 uruchomienia aplikacji Javowych w \u015brodowisku Truffle.\n\nTruffle jest warstw\u0105 po\u015bredni\u0105, okre\u015blan\u0105 czasem jako kompilator kompilator\u00f3w. Jest to hmmm\u2026 narz\u0119dzie do generowania interpretator\u00f3w poszczeg\u00f3lnych j\u0119zyk\u00f3w, generuj\u0105cy ich Abstract Syntax Tree w formacie kompatybilnym do uruchomienia w ramach maszyny wirtualnej Graala. Do tej Truffle dzia\u0142a\u0142 tylko i wy\u0142\u0105cznie dla j\u0119zyk\u00f3w implementowanych. Mo\u017cliwo\u015b\u0107 jego u\u017cycia r\u00f3wnie\u017c w wypadku Javy ma dwie ogromne zalety. Po pierwsze Truffle jest szybki\u2026 diabelnie szybki - w po\u0142\u0105czeniu z GraalVM generuje on bardzo wydajny kod maszynowy. Po drugie za\u015b, Truffle jest napisany w Javie, co oznacza \u017ce mo\u017ce by\u0107 do\u0142\u0105czony jako\u2026 zale\u017cno\u015b\u0107 do projektu. Prowadzi to do sytuacji, kiedy aplikacja Javowa mo\u017ce sama skompilowa\u0107 sw\u00f3j w\u0142asny kod. Jest to tak zwane Metacircularity - cecha, kt\u00f3r\u0105 tw\u00f3rcy okre\u015blaj\u0105 jako (nomen omen) \u015bwi\u0119ty Graal maszyn wirtualnych. W praktyce oznacza to mo\u017cliwo\u015b\u0107 u\u017cycia zar\u00f3wno kompilacji Ahead-of-Time, jak i Just-in-Time w tym samym projekcie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ed1fcd6.png\" alt=\"\" \/>\n<figcaption>Ukradzione z oryginalnego postu, ale nie mog\u0142em si\u0119 powstrzyma\u0107<\/figcaption><\/figure>\nJe\u017celi chcecie si\u0119 dowiedzie\u0107 wi\u0119cej o samym GraalVM - <a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">polecam wprowadzenie w formie wideo po polsku.<\/a>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Java on Truffle \u2014 Going Fully Metacircular<\/a><\/li>\n \t<li><a href=\"https:\/\/www.youtube.com\/watch?v=l6lMkkJvZSc\">Devs' Talks #5 - GraalVM to rule them all! Wprowadzenie do GraalVM<\/a><\/li>\n<\/ol>\n<h2 id=\"2-java-na-arm-co-musisz-wiedzie-\"><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">2. Java na ARM - co musisz wiedzie\u0107<\/a><\/h2>\nSchodz\u0105c z temat\u00f3w internali, przechodzimy na hardware.\n\nPraktycznie na ka\u017cdej li\u015bcie najwa\u017cniejszych wydarze\u0144 technologicznych 2020 roku musia\u0142 znale\u017a\u0107 si\u0119 niesamowity wr\u0119cz sukces procesor\u00f3w ARM. G\u0142\u00f3wnie dzi\u0119ki Apple i ich niesamowitym procesorem M1 (dlaczego s\u0105 takie szybkie? <a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Tutaj znajdziecie bardzo fajny artyku\u0142 na ten temat<\/a>), ale na podobny ruch zdecydowa\u0142y si\u0119 te\u017c inne firmy. Jedn\u0105 z nich jest Oracle, kt\u00f3ry postanowi\u0142 udost\u0119pni\u0107 w ramach swojej chmury serwery ARM. Decyzja ta nie pozosta\u0142a bez efektu na Jav\u0119, kt\u00f3rej to wersja, na t\u0105 w\u0142a\u015bnie architektur\u0119, sta\u0142a si\u0119 nagle wa\u017cnym elementem biznesu Oracle.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13eda8923.png\" alt=\"\" \/><\/figure>\nLinkowany artyku\u0142 jest najlepszym, jak do tej pory \u017ar\u00f3d\u0142em informacji o wydajno\u015bci, mo\u017cliwo\u015bciach, lecz r\u00f3wnie\u017c potencjalnych problemach, na jakie mo\u017cemy natkn\u0105\u0107 si\u0119 podczas portowania naszej aplikacji na nowy typ procesora. Znajdziemy w nim te\u017c wiele interesuj\u0105cych detali, takich jak np. sugerowane flagi maszyny wirtualnej lub unikalne metody diagnozowania problem\u00f3w.\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-on-arm-processors-understanding-aarch64-vs-x86\">Java on Arm processors: Understanding AArch64 vs. x86<\/a><\/li>\n \t<li><a href=\"https:\/\/debugger.medium.com\/why-is-apples-m1-chip-so-fast-3262b158cba2\">Why Is Apple\u2019s M1 Chip So Fast?<\/a><\/li>\n<\/ol>\n<h2 id=\"3-wysyp-multiplatformowych-edycji-kotlina-i-scali-\">3. Wysyp multiplatformowych edycji Kotlina i Scali<\/h2>\nKo\u0144c\u00f3wka roku by\u0142a bardzo spokojna i powolna, a ilo\u015b\u0107 ciekawych og\u0142osze\u0144 mo\u017cna by\u0142o policzy\u0107 na palcach jednej r\u0119ki - wydaje si\u0119, \u017ce by\u0142a to jednak cisza przed burz\u0105. Pocz\u0105tek roku to wysyp wiadomo\u015bci atakuj\u0105cych nas z r\u00f3\u017cnych stron. Zacz\u0119li\u015bmy od informacji o nowym wydaniu GraalVM, a edycje zako\u0144czymy za\u015b podsumowaniem tego, jak radz\u0105 sobie r\u00f3\u017cne podej\u015bcia do tak zwanego \u201cmultiplatformowego JVM\u201d.\n\nZacznijmy od Kotlina. J\u0119zyk ten od samego pocz\u0105tku celowa\u0142 w mo\u017cliwo\u015b\u0107 kompilacji na \u015brodowiska uruchomieniowe r\u00f3\u017cnych platform. Kotlin umo\u015bci\u0142 si\u0119 g\u0142\u00f3wnie na Androidzie, powolutku promuj\u0105c si\u0119 r\u00f3wnie\u017c na j\u0119zyk serwerowy. Nie wolno jednak zapomina\u0107, \u017ce istniej\u0105 te\u017c jego edycje na cho\u0107by JavaScript, iOS, czy r\u00f3wnie\u017c raczkuj\u0105ca edycja Native, uruchamiana w ramach LLVM. Zastanawiali\u015bcie si\u0119 kiedy\u015b, na ile te niszowe edycje Kotlina maj\u0105 powodzenie? Za\u0142oga JetBrains to zrobi\u0142a, i <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">dzi\u0119ki temu mamy teraz ciekawe wyniki ankiety dotycz\u0105cej tego zagadnienia.<\/a> Zaskoczeniem nie b\u0119dzie na pewno, \u017ce najcz\u0119stszym przypadkiem u\u017cycia s\u0105 wsp\u00f3lne buildy aplikacyjne dla Androida i iOSa, ale np. a\u017c 15% ankietowanych stwierdzi\u0142o, \u017ce dziel\u0105 kod mi\u0119dzy frontendem a backendem.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d13ef2a528.png\" alt=\"\" \/>\n<figcaption>Kotlin Multiplatform, koloryzowane.<\/figcaption><\/figure>\nTym stwierdzeniem szybko mo\u017cemy przej\u015b\u0107 do drugiego bohatera tej cz\u0119\u015bci (o kt\u00f3rym mogli\u015bcie ju\u017c zreszt\u0105 przeczyta\u0107 w naszej <a href=\"https:\/\/blog.vived.io\/frontend-wednesday-vol-21\/\">edycji frontendowej<\/a>, jest to do\u015b\u0107 unikalny \u201ccrossover\u201d), czyli ScaliJS. Mam osobist\u0105 s\u0142abo\u015b\u0107 do tego j\u0119zyka (min. przez <a href=\"https:\/\/www.youtube.com\/watch?v=N0NaXSqJLZc\">m\u00f3j jedyny talk ever na Krakow Scala User Group<\/a>), ale przyznam, \u017ce nigdy nie dawa\u0142em mu wielkich szans na dynamiczny rozw\u00f3j. O ile jednak ci\u0119\u017cko nazwa\u0107 go czym\u015b wi\u0119cej ni\u017c \u201cnisz\u0105 w niszy\u201d, to jednak nowe edycje ukazuj\u0105 si\u0119 w miar\u0119 regularnie. Ostatnia z nich, <a href=\"https:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\">Scala.js 1.4.0<\/a>, nie przynosi co prawda wielu zmian, podsumowuje jednak zapocz\u0105tkowan\u0105 przez Scala.js 1.3 modularyzacj\u0119, podbijaj\u0105c przy okazji u\u017cywan\u0105 przez Scala.js bazow\u0105 wersj\u0119 Scali z 2.13 na 2.14.\n\nPodsumowuj\u0105c ten dzia\u0142 dziwnych wyda\u0144 j\u0119zyk\u00f3w JVMowych, wr\u00f3cimy w tej chwili do Scali, tym razem w wydaniu Native. Podobnie jak natywny Kotlin, Scala Native uruchamiana jest na LLVM, podobnie jak Scala.js, <a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">wersja 0.4.0<\/a> przynosi upgrade Scalowej bazy, nieco mniej \u015bmia\u0142o ni\u017c ma to przypadek w wersji JavaScriptowej,\nbo zaledwie do Scali 2.13. Zakres zmian nie ko\u0144czy si\u0119 jednak na tym - nowa edycja to znacznie rozwini\u0119ta wsp\u00f3\u0142praca z kodem napisanym w C, zupe\u0142nie nowy Garbage Collector, a tak\u017ce spore zmiany w formacie po\u015brednim <a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">NIR<\/a>.\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/01\/results-of-the-first-kotlin-multiplatform-survey\/\">Results of the First Kotlin Multiplatform Survey<\/a><\/li>\n \t<li><a href=\"http:\/\/www.scala-js.org\/news\/2021\/01\/12\/announcing-scalajs-1.4.0\/\">Announcing Scala.js 1.4.0<\/a><\/li>\n \t<li><a href=\"https:\/\/www.scala-lang.org\/blog\/2021\/01\/19\/scala-native-0.4-release.html\">Scala Native 0.4.0 is here!<\/a><\/li>\n \t<li><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Documentation - <\/a><a href=\"https:\/\/github.com\/scala-native\/scala-native\/blob\/master\/docs\/contrib\/nir.rst\">Native Intermediate Representation<\/a><\/li>\n<\/ol>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10191","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=10191"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10191\/revisions"}],"predecessor-version":[{"id":10589,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10191\/revisions\/10589"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}