{"id":336003,"date":"2023-03-24T12:51:27","date_gmt":"2023-03-24T11:51:27","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=336003"},"modified":"2023-03-24T12:51:30","modified_gmt":"2023-03-24T11:51:30","slug":"o-compilador-k2-sera-estavel-no-kotlin-2-0","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/pt-br\/kotlin\/2023\/03\/o-compilador-k2-sera-estavel-no-kotlin-2-0\/","title":{"rendered":"O compilador K2 ser\u00e1 est\u00e1vel no Kotlin 2.0"},"content":{"rendered":"<p>J\u00e1 faz um bom tempo que estamos trabalhando em um novo front-end para o compilador Kotlin (codinome \u201c<strong>K2<\/strong>\u201d). Esse front-end \u00e9 a parte do compilador que analisa seu c\u00f3digo e executa a an\u00e1lise sem\u00e2ntica, a an\u00e1lise de fluxo de dados, a resolu\u00e7\u00e3o de chamadas e a infer\u00eancia de tipos. Essa \u00e9 a parte do compilador com a qual voc\u00ea, o desenvolvedor, mais interage. \u00c9 tamb\u00e9m a parte do compilador que \u00e9 executada continuamente dentro do seu IDE, relata todas as mensagens de erro e de advert\u00eancia e ajuda voc\u00ea com tarefas como complementa\u00e7\u00e3o autom\u00e1tica, inspe\u00e7\u00f5es com reconhecimento sem\u00e2ntico, inten\u00e7\u00f5es e refatora\u00e7\u00f5es. O novo front-end j\u00e1 est\u00e1 dispon\u00edvel para visualiza\u00e7\u00e3o. Estamos aprimorando-o e estabilizando-o continuamente e planejamos torn\u00e1-lo o front-end do compilador padr\u00e3o numa vers\u00e3o futura do Kotlin. Decidimos chamar essa vers\u00e3o futura de <strong>Kotlin 2.0<\/strong>. Continue lendo para saber mais sobre o roteiro de lan\u00e7amento do Kotlin 2.0, nossa motiva\u00e7\u00e3o e o que esperar dele.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-321786\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/DSGN-15525-Blog-Post-about-Kotlin-2.0_kotlinlang.org_.png\" alt=\"\" width=\"2000\" height=\"656\" \/><\/figure>\n<h2>Qual \u00e9 o roteiro de lan\u00e7amento do Kotlin 2.0?<\/h2>\n<p>Planejamos lan\u00e7ar mais uma vers\u00e3o no formato tradicional como Kotlin 1.9, que tamb\u00e9m incluir\u00e1 atualiza\u00e7\u00f5es do desenvolvimento cont\u00ednuo do front-end do compilador K2 \u00e0 medida que ele se aproxima da estabiliza\u00e7\u00e3o. N\u00e3o haver\u00e1 o Kotlin 1.10. A pr\u00f3xima vers\u00e3o principal depois do Kotlin 1.9 ser\u00e1 o Kotlin 2.0.<\/p>\n<h2>Por que Kotlin 2.0?<\/h2>\n<p>O front-end \u00e9 uma parte importante do compilador, e o front-end do compilador K2 n\u00e3o \u00e9 apenas uma refatora\u00e7\u00e3o do antigo front-end de compilador, mas sim uma total reformula\u00e7\u00e3o do zero com base na nova arquitetura. Publicamos detalhes t\u00e9cnicos sobre as diferen\u00e7as em v\u00e1rios blogs, v\u00eddeos e confer\u00eancias. O artigo <a title=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/10\/the-road-to-the-k2-compiler\/\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/10\/the-road-to-the-k2-compiler\/\" target=\"_blank\" rel=\"noreferrer noopener\">The Road to the K2 Compiler<\/a> \u00e9 um bom lugar para come\u00e7ar se voc\u00ea deseja obter mais informa\u00e7\u00f5es. Resumindo, a nova arquitetura \u00e9 mais r\u00e1pida e mais extens\u00edvel por design, soluciona problemas t\u00e9cnicos no antigo front-end do compilador, corrige bugs e casos complicados em v\u00e1rios lugares e abre caminho para futuras extens\u00f5es da linguagem.\u00a0<\/p>\n<p>Para linguagens de programa\u00e7\u00e3o, a vers\u00e3o principal geralmente \u00e9 incrementada quando recursos de grande porte ou altera\u00e7\u00f5es importantes s\u00e3o introduzidos. No entanto, para programas de software, uma vers\u00e3o principal pode ser incrementada sempre que algo \u00e9 substancialmente reformulado a ponto de significar um grande retrabalho, mesmo que o conjunto de recursos permane\u00e7a basicamente o mesmo. Apesar de o Kotlin ser uma linguagem, decidimos seguir essa pr\u00e1tica de software. Antes de mais nada, o compilador Kotlin \u00e9 um grande software. A vers\u00e3o da linguagem Kotlin \u00e9 definida pela vers\u00e3o de seu compilador. Fornecemos <a href=\"https:\/\/kotlinlang.org\/spec\/introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\">especifica\u00e7\u00f5es Kotlin<\/a> como uma refer\u00eancia \u00e0 linguagem, mas n\u00e3o como sua defini\u00e7\u00e3o.\u00a0<\/p>\n<h2>Isso vai quebrar meu c\u00f3digo?<\/h2>\n<p>O Kotlin muda a cada atualiza\u00e7\u00e3o da vers\u00e3o da linguagem. Novos recursos de linguagem s\u00e3o introduzidos, e bugs antigos s\u00e3o corrigidos. Sempre tentamos minimizar o n\u00famero e o impacto das altera\u00e7\u00f5es importantes e seguir o <a href=\"https:\/\/kotlinlang.org\/docs\/kotlin-evolution.html\" target=\"_blank\" rel=\"noreferrer noopener\">processo de evolu\u00e7\u00e3o da linguagem Kotlin<\/a>. O Kotlin 2.0 n\u00e3o ser\u00e1 diferente nesse aspecto.\u00a0<\/p>\n<p>Estamos evitando conscientemente introduzir novos recursos no Kotlin 2.0. Por si s\u00f3, a reformula\u00e7\u00e3o do front-end do compilador Kotlin \u00e9 uma mudan\u00e7a consider\u00e1vel e introduz uma s\u00e9rie de melhorias. Por um lado, o novo algoritmo de an\u00e1lise de fluxo de dados \u00e9 mais preciso e resulta em melhores convers\u00f5es inteligentes do que antes. Confira <a href=\"https:\/\/youtrack.jetbrains.com\/issues?q=%23KT-4113%20%23KT-1982%20%23KT-7186%20%23KT-28806\" target=\"_blank\" rel=\"noreferrer noopener\">estes issues<\/a> com exemplos concretos. Isso transforma o c\u00f3digo vermelho que n\u00e3o compila no Kotlin 1.9 no front-end antigo em c\u00f3digo verde que compila no Kotlin 2.0. Tecnicamente, este \u00e9 um aspecto definidor do novo recurso da linguagem Kotlin. No entanto, aqui ele \u00e9 simplesmente um efeito colateral de uma nova arquitetura de compilador.<\/p>\n<p>Al\u00e9m disso, v\u00e1rios bugs de longa data foram corrigidos e, inevitavelmente, algumas dessas corre\u00e7\u00f5es podem quebrar o c\u00f3digo que acidentalmente dependia do comportamento incorreto do compilador. Estamos estudando cuidadosamente o impacto de todas as altera\u00e7\u00f5es de comportamento entre o front-end antigo e o novo front-end K2 e fazendo esfor\u00e7os adicionais para replicar o comportamento antigo sempre que poss\u00edvel, mesmo quando isso n\u00e3o nos agrada, se esse comportamento for afetar um n\u00famero consider\u00e1vel de usu\u00e1rios do Kotlin.\u00a0<\/p>\n<p>Estamos empenhados em minimizar o impacto da migra\u00e7\u00e3o do seu c\u00f3digo do Kotlin 1.9 para o Kotlin 2.0. Manteremos voc\u00ea em dia sobre o processo de estabiliza\u00e7\u00e3o do Kotlin 2.0 e forneceremos tempo suficiente para voc\u00ea experimentar o Kotlin 2.0 em seus projetos com anteced\u00eancia para poder relatar quaisquer regress\u00f5es que possamos ter perdido em nossos testes. Nosso trabalho atual est\u00e1 focado em um lan\u00e7amento de qualidade beta do front-end do compilador K2 ainda este ano, que voc\u00ea pode acompanhar neste <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-52604\" target=\"_blank\" rel=\"noreferrer noopener\">issue do roadmap<\/a>.<\/p>\n<h2>E quanto ao suporte do IDE para o Kotlin 2.0?\u00a0<\/h2>\n<p>O plug-in Kotlin IDE est\u00e1 inclu\u00eddo nas atualiza\u00e7\u00f5es do IntelliJ IDEA e do Android Studio. Ele inclui uma c\u00f3pia do front-end do compilador Kotlin para a an\u00e1lise sem\u00e2ntica do seu c\u00f3digo, mas essa n\u00e3o \u00e9 a vers\u00e3o do compilador Kotlin que ir\u00e1 realmente compilar seu c\u00f3digo: a vers\u00e3o real do compilador \u00e9 determinada pelas configura\u00e7\u00f5es nos seus arquivos de build. Portanto, ao compilar seu c\u00f3digo com a vers\u00e3o 2.0 da linguagem Kotlin, voc\u00ea usar\u00e1 o novo front-end do compilador e obter\u00e1 todos os benef\u00edcios de desempenho da nova arquitetura do compilador. No entanto, o IDE ainda poder\u00e1 estar usando o front-end antigo para inspecionar seu c\u00f3digo.\u00a0<\/p>\n<p>Para oferecer a voc\u00ea os benef\u00edcios de desempenho do novo front-end do compilador no seu IDE, estamos escrevendo uma vers\u00e3o completamente nova do plug-in Kotlin IDE, desenvolvida sobre o front-end do compilador K2. No momento, estamos trabalhando para ter uma vers\u00e3o pr\u00e9via p\u00fablica desse novo plug-in de IDE. Voc\u00ea pode acompanhar <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KTIJ-23988\" target=\"_blank\" rel=\"noopener\">este issue<\/a> para ficar a par das atualiza\u00e7\u00f5es.<\/p>\n<h2>O que esperar depois do Kotlin 2.0?<\/h2>\n<p>A nova arquitetura do front-end do compilador Kotlin 2.0 permite a implementa\u00e7\u00e3o limpa de muitos novos recursos interessantes. Alguns desses recursos, como os receptores de contexto <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-10468\" target=\"_blank\" rel=\"noreferrer noopener\">KT-10468<\/a>, j\u00e1 est\u00e3o dispon\u00edveis para visualiza\u00e7\u00e3o no front-end do compilador antigo, mas n\u00e3o estar\u00e3o ativados no Kotlin 2.0 por padr\u00e3o. Em vez disso, eles permanecer\u00e3o no est\u00e1gio de vers\u00e3o pr\u00e9via. A estabiliza\u00e7\u00e3o de novos recursos acontecer\u00e1 em vers\u00f5es futuras do Kotlin 2.x, juntamente com a implementa\u00e7\u00e3o de outras coisas novas que temos no nosso pipeline. Como de costume, compartilharemos atualiza\u00e7\u00f5es regulares sobre nossos planos por meio do <a title=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noreferrer noopener\">roadmap do Kotlin<\/a>.\u00a0<\/p>\n<p>Quando teremos o Kotlin 3.0? Ainda n\u00e3o sabemos. Estamos discutindo provisoriamente muitas grandes mudan\u00e7as futuras na linguagem, especialmente as solicita\u00e7\u00f5es mais populares da nossa \u00faltima <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/12\/kotlin-features-survey-2021-results\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pesquisa sobre recursos do Kotlin<\/a>. Certamente, \u00e9 poss\u00edvel que algumas dessas mudan\u00e7as sejam significativas o suficiente para justificar a pr\u00f3xima vers\u00e3o principal do Kotlin.<\/p>\n<h2>Como voc\u00ea pode ajudar?<\/h2>\n<p>Experimente o novo front-end do compilador e deixe seu feedback! A partir do Kotlin 1.8.20, voc\u00ea pode habilitar uma pr\u00e9via da vers\u00e3o da linguagem Kotlin 2.0 atrav\u00e9s do sinalizador de vers\u00e3o da linguagem Kotlin.<\/p>\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Habilitar o compilador Kotlin K2\" href=\"https:\/\/kotlinlang.org\/docs\/whatsnew-eap.html#new-kotlin-k2-compiler-updates\" target=\"_blank\" rel=\"noopener\">Habilitar o compilador Kotlin K2<\/a><\/p>\n<h2>Saiba mais<\/h2>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html?_ga=2.62142766.385986069.1675687002-2069095727.1675084065&amp;_gl=1*kdn75d*_ga*MjA2OTA5NTcyNy4xNjc1MDg0MDY1*_ga_9J976DJZ68*MTY3NTc4ODEzMC4zNDUuMS4xNjc1NzkwNDE3LjU4LjAuMA..\" target=\"_blank\" rel=\"noreferrer noopener\">Roadmap do Kotlin<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/10\/the-road-to-the-k2-compiler\/\" target=\"_blank\" rel=\"noreferrer noopener\">The Road to the K2 Compiler<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew-eap.html\" target=\"_blank\" rel=\"noreferrer noopener\">O que h\u00e1 de novo no Kotlin 1.8.20-Beta<\/a><\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p><em>Artigo original em ingl\u00eas por:<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":322103,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[],"cross-post-tag":[6284],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/336003"}],"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=336003"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/336003\/revisions"}],"predecessor-version":[{"id":336012,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/336003\/revisions\/336012"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/322103"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=336003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=336003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=336003"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=336003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}