{"id":121431,"date":"2021-03-05T04:39:44","date_gmt":"2021-03-05T03:39:44","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=121431"},"modified":"2021-03-05T04:47:02","modified_gmt":"2021-03-05T03:47:02","slug":"versao-1-4-30-lancada-com-um-novo-back-end-de-jvm-e-recursos-de-linguagem-e-multiplataformas","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/pt-br\/kotlin\/2021\/03\/versao-1-4-30-lancada-com-um-novo-back-end-de-jvm-e-recursos-de-linguagem-e-multiplataformas\/","title":{"rendered":"Vers\u00e3o 1.4.30 lan\u00e7ada com um novo back-end de JVM e recursos de linguagem e multiplataformas"},"content":{"rendered":"<p>O Kotlin 1.4.30 j\u00e1 est\u00e1 dispon\u00edvel. Este \u00e9 o \u00faltimo lan\u00e7amento incremental 1.4 e, portanto, temos muitos novos recursos experimentais que planejamos tornar est\u00e1veis na vers\u00e3o 1.5.0. Gostar\u00edamos muito que voc\u00ea experimentasse esses recursos e compartilhasse seus coment\u00e1rios conosco. Esperamos que voc\u00ea goste de <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#how-to-update\">testar<\/a> todas essas novas atualiza\u00e7\u00f5es. N\u00e3o deixe de compartilhar sua opini\u00e3o conosco.<\/p>\n<\/p>\n<p>O que mudou neste lan\u00e7amento:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#language-features-compiler\">Recursos de linguagem e compilador<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#compiler\">O novo back-end de JVM foi para Beta.<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#language-features\">Atualiza\u00e7\u00e3o em classes de valores, registros de JVM e interfaces seladas.<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#build-tools\">Ferramentas de compila\u00e7\u00e3o<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#cache-support\">Suporte para cache de configura\u00e7\u00e3o no plug-in Kotlin Gradle.<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#kotlin-native\">Kotlin\/Native<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#performance-improvements\">Melhorias no tempo de compila\u00e7\u00e3o.<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#64-bit-watchos-simulator-support\">Suporte ao simulador watchOS de 64 bits.<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#xcode-sdk-support\">Suporte ao SDK Xcode 12.2.<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#kotlin-js\">Kotlin\/JS<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#prototype-lazy-initialization\">Inicializa\u00e7\u00e3o lenta de prot\u00f3tipo para propriedades de n\u00edvel superior.<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#standard-library\">Biblioteca padr\u00e3o<\/a>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#locale-agnostic-api\">API independente de par\u00e2metros de localiza\u00e7\u00e3o para formata\u00e7\u00e3o de texto em mai\u00fasculas\/min\u00fasculas.<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/kotlin-1-4-30-released\/#char-conversion\">API n\u00e3o amb\u00edgua para convers\u00e3o de Char.<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Recursos de linguagem e compilador<\/h2>\n<p><a name = \"language-features-compiler\"><\/a><\/p>\n<p>Decidimos abordar duas das atualiza\u00e7\u00f5es mais significativas em posts de blog \u00e0 parte, para que possamos fornecer mais detalhes sobre esses recursos. <\/p>\n<h3>Compilador<\/h3>\n<p><a name = \"compiler\"><\/a><\/p>\n<p>O novo back-end de JVM atingiu o n\u00edvel <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html\" target=\"_blank\" rel=\"noopener\">Beta<\/a> e agora produz bin\u00e1rios est\u00e1veis. Isso significa que voc\u00ea pode us\u00e1-lo com seguran\u00e7a nos seus projetos. <\/p>\n<p>Mais detalhes sobre a atualiza\u00e7\u00e3o, maneiras de habilitar o novo back-end IR de JVM e como voc\u00ea pode ajudar a estabiliz\u00e1-lo podem ser encontrados <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/the-jvm-backend-is-in-beta-let-s-make-it-stable-together\/\">aqui<\/a>.<\/p>\n<h3>Visualiza\u00e7\u00e3o dos novos recursos da linguagem<\/h3>\n<p><a name = \"language-features\"><\/a><\/p>\n<p>Entre os novos recursos de linguagem que planejamos lan\u00e7ar no Kotlin 1.5.0 est\u00e3o <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42434?_ga=2.184548070.1394575398.1610963436-619426049.1589386231\" target=\"_blank\" rel=\"noopener\">classes de valores inline<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42430?_ga=2.184548070.1394575398.1610963436-619426049.1589386231\" target=\"_blank\" rel=\"noopener\">registros de JVM<\/a> e <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42433?_ga=2.154677880.1394575398.1610963436-619426049.1589386231\" target=\"_blank\" rel=\"noopener\">interfaces seladas<\/a>. Voc\u00ea pode ler mais detalhes sobre eles <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/\">neste post<\/a>. Confira a seguir uma breve vis\u00e3o geral:<\/p>\n<p><strong>Classes inline.<\/strong> Classes inline eram um recurso de linguagem separado, mas agora se tornaram uma otimiza\u00e7\u00e3o de JVM espec\u00edfica para uma classe de valor com um par\u00e2metro. Classes de valores representam um conceito mais geral e oferecer\u00e3o suporte a diferentes otimiza\u00e7\u00f5es no futuro. Elas atualmente oferecem suporte a classes inline, e esse suporte se estender\u00e1 a classes primitivas Valhalla quando o projeto Valhalla estiver dispon\u00edvel.<\/p>\n<p><strong>Registros Java.<\/strong> Outra melhoria futura no ecossistema JVM s\u00e3o os <a href=\"https:\/\/openjdk.java.net\/jeps\/395\" target=\"_blank\" rel=\"noopener\">registros Java<\/a>. Eles s\u00e3o an\u00e1logos \u00e0s classes <code>data<\/code> do Kotlin, usadas principalmente como simples portadores de dados. A interoperabilidade com o Java sempre foi e ser\u00e1 uma prioridade para o Kotlin. O c\u00f3digo Kotlin &#8220;entende&#8221; os novos registros Java e os v\u00ea como classes com propriedades Kotlin.<\/p>\n<p><strong>Interfaces seladas.<\/strong> Interfaces podem ser declaradas como seladas e tamb\u00e9m como classes. O modificador selado funciona nas interfaces da mesma maneira: todas as implementa\u00e7\u00f5es de uma interface selada s\u00e3o conhecidas em tempo de compila\u00e7\u00e3o. Depois que um m\u00f3dulo com uma interface selada \u00e9 compilado, nenhuma nova implementa\u00e7\u00e3o pode aparecer.<\/p>\n<p>Portanto, pedimos que voc\u00ea experimente esses recursos de linguagem e compartilhe seus coment\u00e1rios conosco. Gostar\u00edamos de saber quais s\u00e3o as expectativas que voc\u00ea tem em rela\u00e7\u00e3o a eles, os casos de uso em que deseja aplicar esses recursos e quaisquer pensamentos ou ideias que voc\u00ea tenha sobre eles. <\/p>\n<p>Voc\u00ea pode encontrar uma descri\u00e7\u00e3o detalhada dos novos recursos de linguagem e instru\u00e7\u00f5es sobre como experiment\u00e1-los neste <a href=\"https:\/\/blog.jetbrains.com\/?post_type=kotlin&amp;p=111522&amp;preview=true&amp;do_not_cache=1612175412\">post de blog<\/a>.<\/p>\n<h2>Ferramentas de compila\u00e7\u00e3o<\/h2>\n<p><a name = \"build-tools\"><\/a><\/p>\n<h3>Suporte para cache de configura\u00e7\u00e3o no plug-in Kotlin Gradle<\/h3>\n<p><a name = \"cache-support\"><\/a><\/p>\n<p>A partir do Kotlin 1.4.30, o plug-in Kotlin Gradle \u00e9 compat\u00edvel com o <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/configuration_cache.html\" target=\"_blank\" rel=\"noopener\">cache de configura\u00e7\u00e3o do Gradle<\/a>. Isso acelera o processo de compila\u00e7\u00e3o. Por exemplo, <a href=\"https:\/\/squareup.com\" target=\"_blank\" rel=\"noopener\">Square<\/a>, que usa o Kotlin para Android, tem uma compila\u00e7\u00e3o (Android, Java, Kotlin) de 1800 m\u00f3dulos. Sua equipe reporta os seguintes n\u00fameros:<\/p>\n<ul>\n<li>A primeira compila\u00e7\u00e3o demorou 16 minutos e 30 segundos.<\/li>\n<li>A segunda foi muito mais r\u00e1pida, demorando 5 minutos e 45 segundos.<br \/>\nMais especificamente, para Square, o Cache de Configura\u00e7\u00e3o economiza 1 minuto e 10 segundos de configura\u00e7\u00e3o e cria\u00e7\u00e3o de gr\u00e1fico de tarefa por compila\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Quando voc\u00ea executa o comando, o Gradle executa a fase de configura\u00e7\u00e3o e calcula o gr\u00e1fico da tarefa. O Gradle armazena em cache o resultado e o reutiliza para compila\u00e7\u00f5es subsequentes, economizando tempo.<\/p>\n<p>Para come\u00e7ar a usar esse recurso, <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/configuration_cache.html#config_cache:usage\" target=\"_blank\" rel=\"noopener\">use o comando Gradle<\/a> ou <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/configuration_cache.html#config_cache:ide:intellij\" target=\"_blank\" rel=\"noopener\">configure seu IDE baseado no IntelliJ<\/a>. E, se alguma coisa n\u00e3o funcionar como esperado, informe via <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KT\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>. <\/p>\n<p>Observe que esse recurso ainda est\u00e1 em est\u00e1gio <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html\" target=\"_blank\" rel=\"noopener\">Alpha<\/a> para multiplataforma.<\/p>\n<h2>Kotlin\/Native<\/h2>\n<p><a name = \"kotlin-native\"><\/a><\/p>\n<h3>Melhorias no tempo de compila\u00e7\u00e3o<\/h3>\n<p><a name = \"performance-improvements\"><\/a><\/p>\n<p>Melhoramos o tempo de compila\u00e7\u00e3o na vers\u00e3o 1.4.30. O tempo necess\u00e1rio para recompilar o framework de <a href=\"https:\/\/github.com\/kotlin-hands-on\/kmm-networking-and-data-storage\/tree\/final\" target=\"_blank\" rel=\"noopener\">amostra de armazenamento de dados e rede KMM<\/a> foi reduzido de 9,5 segundos (na 1.4.10) para 4,5 segundos (na 1.4.30).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/02\/image-18-1024x582.png\" alt=\"\" \/><\/p>\n<p>Pretendemos continuar otimizando o compilador. Voc\u00ea pode acompanhar o issue no <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42294?_ga=2.78639700.1394575398.1610963436-619426049.1589386231\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/p>\n<h3>Suporte ao simulador watchOS de 64 bits<\/h3>\n<p><a name = \"64-bit-watchos-simulator-support\"><\/a><\/p>\n<p>Com a <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2019\/11\/kotlin-1-3-60-released\/\">vers\u00e3o 1.3.60 do Kotlin<\/a> em outubro de 2018, apresentamos suporte para a compila\u00e7\u00e3o de aplicativos Kotlin para simuladores Apple Watch. Em novembro passado, a arquitetura do simulador Apple Watch foi alterada de i386 para x86_64, criando problemas para desenvolvedores que trabalham nesse recurso. O novo destino <code>watchosX64<\/code> Kotlin\/Native pode ser usado para executar o simulador watchOS na arquitetura de 64 bits e funciona no WatchOS a partir da vers\u00e3o 7.0.<\/p>\n<h3>Suporte ao SDK Xcode 12.2<\/h3>\n<p><a name = \"xcode-sdk-support\"><\/a><\/p>\n<p>O Kotlin\/Native agora oferece suporte ao Xcode 12.2. Os frameworks do macOS que foram adicionados \u00e0 vers\u00e3o Xcode 12.2 podem ser usados com essa atualiza\u00e7\u00e3o do Kotlin. Por exemplo, o framework MLCompute agora est\u00e1 dispon\u00edvel para usu\u00e1rios que desenvolvem aplica\u00e7\u00f5es para macOS.<\/p>\n<h2>Kotlin\/JS<\/h2>\n<p><a name = \"kotlin-js\"><\/a><\/p>\n<h3>Inicializa\u00e7\u00e3o lenta de prot\u00f3tipo para propriedades de n\u00edvel superior<\/h3>\n<p><a name = \"prototype-lazy-initialization\"><\/a><\/p>\n<p>Disponibilizamos a inicializa\u00e7\u00e3o lenta (lazy) de propriedades de n\u00edvel superior como <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html\" target=\"_blank\" rel=\"noopener\">Experimental<\/a>. Voc\u00ea pode ler mais sobre isso em <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html\" target=\"_blank\" rel=\"noopener\">Novidades<\/a>.<\/p>\n<h2>Biblioteca padr\u00e3o<\/h2>\n<p><a name = \"standard-library\"><\/a><\/p>\n<h3>API independente de par\u00e2metros de localiza\u00e7\u00e3o para texto em mai\u00fasculas\/min\u00fasculas<\/h3>\n<p><a name = \"locale-agnostic-api\"><\/a><\/p>\n<p>Esta vers\u00e3o apresenta uma <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html\" target=\"_blank\" rel=\"noopener\">API experimental independente de par\u00e2metros de localiza\u00e7\u00e3o<\/a> para alterar a capitaliza\u00e7\u00e3o de strings e caracteres. As fun\u00e7\u00f5es atuais <code>toLowerCase()<\/code>, <code>toUpperCase()<\/code>, <code>capitalize()<\/code>, <code>decapitalize()<\/code> da API s\u00e3o sens\u00edveis aos par\u00e2metros de localiza\u00e7\u00e3o, o que n\u00e3o \u00e9 \u00f3bvio e inconveniente em alguns casos. As diferen\u00e7as nas configura\u00e7\u00f5es de localidade da plataforma afetam o comportamento do c\u00f3digo, por exemplo, na configura\u00e7\u00e3o turca, quando a string \u201ckotlin\u201d \u00e9 convertida por <code>toUpperCase<\/code>, isso resulta em &quot;KOTL\u0130N&quot;, e n\u00e3o em &quot;KOTLIN&quot;. Agora, ele usa a localidade raiz e, portanto, funcionar\u00e1 conforme o esperado.<\/p>\n<p>Voc\u00ea pode encontrar a lista completa de altera\u00e7\u00f5es das fun\u00e7\u00f5es de processamento de texto em <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/stdlib\/locale-agnostic-string-conversions.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>. Lembre-se de que essa API \u00e9 experimental. Compartilhe seus coment\u00e1rios conosco no <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-42437\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/p>\n<h3>API n\u00e3o amb\u00edgua para convers\u00e3o de Char<\/h3>\n<p><a name = \"char-conversion\"><\/a><\/p>\n<p>As fun\u00e7\u00f5es de convers\u00e3o atuais de Char em n\u00fameros, que retornam seu c\u00f3digo UTF-16 expresso em diferentes tipos num\u00e9ricos, s\u00e3o frequentemente confundidas com a convers\u00e3o semelhante de String-to-Int, que retorna o valor num\u00e9rico de uma string.<\/p>\n<p>Para evitar essa confus\u00e3o, decidimos separar as convers\u00f5es de Char em dois conjuntos de fun\u00e7\u00f5es claramente nomeadas: fun\u00e7\u00f5es para obter o c\u00f3digo inteiro de <code>Char<\/code> e para construir <code>Char<\/code> e fun\u00e7\u00f5es para converter <code>Char<\/code> no valor num\u00e9rico do d\u00edgito que ele representa.<\/p>\n<p>Esse recurso tamb\u00e9m \u00e9 <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/evolution\/components-stability.html\" target=\"_blank\" rel=\"noopener\">Experimental<\/a>, mas planejamos torn\u00e1-lo est\u00e1vel para a vers\u00e3o 1.5.0. Veja mais detalhes em <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/master\/proposals\/stdlib\/char-int-conversions.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>.<\/p>\n<h3>Saiba mais sobre todas as atualiza\u00e7\u00f5es para a vers\u00e3o 1.4.30 em <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/whatsnew1430.html\" target=\"_blank\" rel=\"noopener\">Novidades<\/a> e tamb\u00e9m nos posts de blog <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/the-jvm-backend-is-in-beta-let-s-make-it-stable-together\/\">Novo back-end de JVM<\/a> e <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/02\/new-language-features-preview-in-kotlin-1-4-30\/\">Recursos da linguagem<\/a>.<\/h3>\n<h2>Como atualizar<\/h2>\n<p><a name = \"how-to-update\"><\/a><\/p>\n<p>O IntelliJ IDEA sugerir\u00e1 a atualiza\u00e7\u00e3o do plug-in Kotlin para a vers\u00e3o 1.4.30 automaticamente, ou voc\u00ea pode atualiz\u00e1-lo manualmente seguindo <a href=\"https:\/\/kotlinlang.org\/docs\/releases.html#update-to-a-new-release\" target=\"_blank\" rel=\"noopener\">estas instru\u00e7\u00f5es<\/a>. O plug-in Kotlin para Android Studio Arctic Fox ser\u00e1 lan\u00e7ado posteriormente.<\/p>\n<p>Se quiser trabalhar em projetos existentes criados com vers\u00f5es anteriores do Kotlin, use a vers\u00e3o 1.4.30 do Kotlin na configura\u00e7\u00e3o do projeto. Para obter mais informa\u00e7\u00f5es, consulte os documentos <a href=\"http:\/\/kotlinlang.org\/docs\/reference\/using-gradle.html\" target=\"_blank\" rel=\"noopener\">para Gradle<\/a> e <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/using-maven.html\" target=\"_blank\" rel=\"noopener\">Maven<\/a>.<\/p>\n<p>Voc\u00ea pode baixar o compilador de linha de comando na <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/releases\/tag\/v1.4.30\" target=\"_blank\" rel=\"noopener\">p\u00e1gina de lan\u00e7amento do Github<\/a>.<\/p>\n<p>Os detalhes do lan\u00e7amento e a lista de bibliotecas compat\u00edveis est\u00e3o dispon\u00edveis <a href=\"https:\/\/kotlinlang.org\/releases.html#release-details\" target=\"_blank\" rel=\"noopener\">aqui<\/a>.<\/p>\n<p>Se tiver problemas com a nova vers\u00e3o, voc\u00ea poder\u00e1 encontrar ajuda no <a href=\"http:\/\/kotlinlang.slack.com\/\" target=\"_blank\" rel=\"noopener\">Slack<\/a> (receba um convite <a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up?_ga=2.134077326.1218289669.1605167163-154294388.1603171954\" target=\"_blank\" rel=\"noopener\">aqui <\/a>) e reportar issues no nosso <a href=\"https:\/\/youtrack.jetbrains.com\/issues\/KT\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/p>\n<p>Antes de atualizar seus projetos para a vers\u00e3o mais recente do Kotlin, voc\u00ea pode experimentar a nova linguagem e os recursos da biblioteca padr\u00e3o online em <a href=\"http:\/\/play.kotl.in\/\" target=\"_blank\" rel=\"noopener\">play.kotl.in<\/a>.<\/p>\n<h2>Colaboradores externos<\/h2>\n<p>Gostar\u00edamos de agradecer tamb\u00e9m a todos os nossos colaboradores externos cujas solicita\u00e7\u00f5es pull foram inclu\u00eddas neste lan\u00e7amento:<\/p>\n<p><a href=\"https:\/\/github.com\/jsjeon\" target=\"_blank\" rel=\"noopener\">Jinseong Jeon<\/a><br \/>\n<a href=\"https:\/\/github.com\/t-kameyama\" target=\"_blank\" rel=\"noopener\">Toshiaki Kameyama<\/a><br \/>\n<a href=\"https:\/\/github.com\/pyos\" target=\"_blank\" rel=\"noopener\">pyos<\/a><br \/>\n<a href=\"https:\/\/github.com\/madsager\" target=\"_blank\" rel=\"noopener\">Mads Ager<\/a><br \/>\n<a href=\"https:\/\/github.com\/sfs\" target=\"_blank\" rel=\"noopener\">Steven Sch\u00e4fer<\/a><br \/>\n<a href=\"https:\/\/github.com\/punzki\" target=\"_blank\" rel=\"noopener\">Mark Punzalan<\/a><br \/>\n<a href=\"https:\/\/github.com\/gavra0\" target=\"_blank\" rel=\"noopener\">Ivan Gavrilovic<\/a><br \/>\n<a href=\"https:\/\/github.com\/kandersen\" target=\"_blank\" rel=\"noopener\">Kristoffer Andersen<\/a><br \/>\n<a href=\"https:\/\/github.com\/bingranl\" target=\"_blank\" rel=\"noopener\">Bingran<\/a><br \/>\n<a href=\"https:\/\/github.com\/juan-chen\" target=\"_blank\" rel=\"noopener\">Juan Chen<\/a><br \/>\n<a href=\"https:\/\/github.com\/zhelenskiy\" target=\"_blank\" rel=\"noopener\">zhelenskiy<\/a><br \/>\n<a href=\"https:\/\/github.com\/zekehul\" target=\"_blank\" rel=\"noopener\">Kris<\/a><br \/>\n<a href=\"https:\/\/github.com\/hungvietnguyen\" target=\"_blank\" rel=\"noopener\">Hung Nguyen<\/a><br \/>\n<a href=\"https:\/\/github.com\/turansky\" target=\"_blank\" rel=\"noopener\">Victor Turansky<\/a><br \/>\n<a href=\"https:\/\/github.com\/ajalt\" target=\"_blank\" rel=\"noopener\">AJ<\/a><br \/>\n<a href=\"https:\/\/github.com\/LouisCAD\" target=\"_blank\" rel=\"noopener\">Louis CAD<\/a><br \/>\n<a href=\"https:\/\/github.com\/kevin1e100\" target=\"_blank\" rel=\"noopener\">Kevin Bierhoff<\/a><br \/>\n<a href=\"https:\/\/github.com\/HollowMan6\" target=\"_blank\" rel=\"noopener\">Hollow Man<\/a><br \/>\n<a href=\"https:\/\/github.com\/fvasco\" target=\"_blank\" rel=\"noopener\">Francesco Vasco<\/a><br \/>\n<a href=\"https:\/\/github.com\/uzilan\" target=\"_blank\" rel=\"noopener\">Uzi Landsmann<\/a><br \/>\n<a href=\"https:\/\/github.com\/dominikwuttke\" target=\"_blank\" rel=\"noopener\">Dominik Wuttke<\/a><br \/>\n<a href=\"https:\/\/github.com\/bodin\" target=\"_blank\" rel=\"noopener\">Derek Bodin<\/a><br \/>\n<a href=\"https:\/\/github.com\/ciarant\" target=\"_blank\" rel=\"noopener\">Ciaran Treanor<\/a><br \/>\n<a href=\"https:\/\/github.com\/rbares\" target=\"_blank\" rel=\"noopener\">rbares<\/a><br \/>\n<a href=\"https:\/\/github.com\/mpetrov\" target=\"_blank\" rel=\"noopener\">Martin Petrov<\/a><br \/>\n<a href=\"https:\/\/github.com\/yurano\" target=\"_blank\" rel=\"noopener\">Yuya Urano<\/a><br \/>\n<a href=\"https:\/\/github.com\/KotlinIsland\" target=\"_blank\" rel=\"noopener\">KotlinIsland<\/a><br \/>\n<a href=\"https:\/\/github.com\/neetopia\" target=\"_blank\" rel=\"noopener\">Jiaxiang Chen<\/a><br \/>\n<a href=\"https:\/\/github.com\/JakeWharton\" target=\"_blank\" rel=\"noopener\">Jake Wharton<\/a><br \/>\n<a href=\"https:\/\/github.com\/samofcorinth\" target=\"_blank\" rel=\"noopener\">Sam Wang<\/a><br \/>\n<a href=\"https:\/\/github.com\/MikeKulasinski-visa\" target=\"_blank\" rel=\"noopener\">MikeKulasinski-visa<\/a><br \/>\n<a href=\"https:\/\/github.com\/gharrma\" target=\"_blank\" rel=\"noopener\">Matthew Gharrity<\/a><br \/>\n<a href=\"https:\/\/github.com\/McCreeMainer\" target=\"_blank\" rel=\"noopener\">Mikhail Likholetov<\/a><\/p>\n","protected":false},"author":1086,"featured_media":113707,"comment_status":"closed","ping_status":"closed","template":"","categories":[4113,907],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/121431"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=121431"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/121431\/revisions"}],"predecessor-version":[{"id":121435,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/121431\/revisions\/121435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/113707"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=121431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=121431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=121431"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=121431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}