Kotlin logo

The Kotlin Blog

Kotlin Programming Language by JetBrains

Kotlin Releases

Versão 1.4.30 lançada com um novo back-end de JVM e recursos de linguagem e multiplataformas

O Kotlin 1.4.30 já está disponível. Este é o último lançamento incremental 1.4 e, portanto, temos muitos novos recursos experimentais que planejamos tornar estáveis na versão 1.5.0. Gostaríamos muito que você experimentasse esses recursos e compartilhasse seus comentários conosco. Esperamos que você goste de testar todas essas novas atualizações. Não deixe de compartilhar sua opinião conosco.

O que mudou neste lançamento:

Recursos de linguagem e compilador

Decidimos abordar duas das atualizações mais significativas em posts de blog à parte, para que possamos fornecer mais detalhes sobre esses recursos.

Compilador

O novo back-end de JVM atingiu o nível Beta e agora produz binários estáveis. Isso significa que você pode usá-lo com segurança nos seus projetos.

Mais detalhes sobre a atualização, maneiras de habilitar o novo back-end IR de JVM e como você pode ajudar a estabilizá-lo podem ser encontrados aqui.

Visualização dos novos recursos da linguagem

Entre os novos recursos de linguagem que planejamos lançar no Kotlin 1.5.0 estão classes de valores inline, registros de JVM e interfaces seladas. Você pode ler mais detalhes sobre eles neste post. Confira a seguir uma breve visão geral:

Classes inline. Classes inline eram um recurso de linguagem separado, mas agora se tornaram uma otimização de JVM específica para uma classe de valor com um parâmetro. Classes de valores representam um conceito mais geral e oferecerão suporte a diferentes otimizações no futuro. Elas atualmente oferecem suporte a classes inline, e esse suporte se estenderá a classes primitivas Valhalla quando o projeto Valhalla estiver disponível.

Registros Java. Outra melhoria futura no ecossistema JVM são os registros Java. Eles são análogos às classes data do Kotlin, usadas principalmente como simples portadores de dados. A interoperabilidade com o Java sempre foi e será uma prioridade para o Kotlin. O código Kotlin “entende” os novos registros Java e os vê como classes com propriedades Kotlin.

Interfaces seladas. Interfaces podem ser declaradas como seladas e também como classes. O modificador selado funciona nas interfaces da mesma maneira: todas as implementações de uma interface selada são conhecidas em tempo de compilação. Depois que um módulo com uma interface selada é compilado, nenhuma nova implementação pode aparecer.

Portanto, pedimos que você experimente esses recursos de linguagem e compartilhe seus comentários conosco. Gostaríamos de saber quais são as expectativas que você tem em relação a eles, os casos de uso em que deseja aplicar esses recursos e quaisquer pensamentos ou ideias que você tenha sobre eles.

Você pode encontrar uma descrição detalhada dos novos recursos de linguagem e instruções sobre como experimentá-los neste post de blog.

Ferramentas de compilação

Suporte para cache de configuração no plug-in Kotlin Gradle

A partir do Kotlin 1.4.30, o plug-in Kotlin Gradle é compatível com o cache de configuração do Gradle. Isso acelera o processo de compilação. Por exemplo, Square, que usa o Kotlin para Android, tem uma compilação (Android, Java, Kotlin) de 1800 módulos. Sua equipe reporta os seguintes números:

  • A primeira compilação demorou 16 minutos e 30 segundos.
  • A segunda foi muito mais rápida, demorando 5 minutos e 45 segundos.
    Mais especificamente, para Square, o Cache de Configuração economiza 1 minuto e 10 segundos de configuração e criação de gráfico de tarefa por compilação.

Quando você executa o comando, o Gradle executa a fase de configuração e calcula o gráfico da tarefa. O Gradle armazena em cache o resultado e o reutiliza para compilações subsequentes, economizando tempo.

Para começar a usar esse recurso, use o comando Gradle ou configure seu IDE baseado no IntelliJ. E, se alguma coisa não funcionar como esperado, informe via YouTrack.

Observe que esse recurso ainda está em estágio Alpha para multiplataforma.

Kotlin/Native

Melhorias no tempo de compilação

Melhoramos o tempo de compilação na versão 1.4.30. O tempo necessário para recompilar o framework de amostra de armazenamento de dados e rede KMM foi reduzido de 9,5 segundos (na 1.4.10) para 4,5 segundos (na 1.4.30).

Pretendemos continuar otimizando o compilador. Você pode acompanhar o issue no YouTrack.

Suporte ao simulador watchOS de 64 bits

Com a versão 1.3.60 do Kotlin em outubro de 2018, apresentamos suporte para a compilação 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 watchosX64 Kotlin/Native pode ser usado para executar o simulador watchOS na arquitetura de 64 bits e funciona no WatchOS a partir da versão 7.0.

Suporte ao SDK Xcode 12.2

O Kotlin/Native agora oferece suporte ao Xcode 12.2. Os frameworks do macOS que foram adicionados à versão Xcode 12.2 podem ser usados com essa atualização do Kotlin. Por exemplo, o framework MLCompute agora está disponível para usuários que desenvolvem aplicações para macOS.

Kotlin/JS

Inicialização lenta de protótipo para propriedades de nível superior

Disponibilizamos a inicialização lenta (lazy) de propriedades de nível superior como Experimental. Você pode ler mais sobre isso em Novidades.

Biblioteca padrão

API independente de parâmetros de localização para texto em maiúsculas/minúsculas

Esta versão apresenta uma API experimental independente de parâmetros de localização para alterar a capitalização de strings e caracteres. As funções atuais toLowerCase(), toUpperCase(), capitalize(), decapitalize() da API são sensíveis aos parâmetros de localização, o que não é óbvio e inconveniente em alguns casos. As diferenças nas configurações de localidade da plataforma afetam o comportamento do código, por exemplo, na configuração turca, quando a string “kotlin” é convertida por toUpperCase, isso resulta em "KOTLİN", e não em "KOTLIN". Agora, ele usa a localidade raiz e, portanto, funcionará conforme o esperado.

Você pode encontrar a lista completa de alterações das funções de processamento de texto em KEEP. Lembre-se de que essa API é experimental. Compartilhe seus comentários conosco no YouTrack.

API não ambígua para conversão de Char

As funções de conversão atuais de Char em números, que retornam seu código UTF-16 expresso em diferentes tipos numéricos, são frequentemente confundidas com a conversão semelhante de String-to-Int, que retorna o valor numérico de uma string.

Para evitar essa confusão, decidimos separar as conversões de Char em dois conjuntos de funções claramente nomeadas: funções para obter o código inteiro de Char e para construir Char e funções para converter Char no valor numérico do dígito que ele representa.

Esse recurso também é Experimental, mas planejamos torná-lo estável para a versão 1.5.0. Veja mais detalhes em KEEP.

Saiba mais sobre todas as atualizações para a versão 1.4.30 em Novidades e também nos posts de blog Novo back-end de JVM e Recursos da linguagem.

Como atualizar

O IntelliJ IDEA sugerirá a atualização do plug-in Kotlin para a versão 1.4.30 automaticamente, ou você pode atualizá-lo manualmente seguindo estas instruções. O plug-in Kotlin para Android Studio Arctic Fox será lançado posteriormente.

Se quiser trabalhar em projetos existentes criados com versões anteriores do Kotlin, use a versão 1.4.30 do Kotlin na configuração do projeto. Para obter mais informações, consulte os documentos para Gradle e Maven.

Você pode baixar o compilador de linha de comando na página de lançamento do Github.

Os detalhes do lançamento e a lista de bibliotecas compatíveis estão disponíveis aqui.

Se tiver problemas com a nova versão, você poderá encontrar ajuda no Slack (receba um convite aqui ) e reportar issues no nosso YouTrack.

Antes de atualizar seus projetos para a versão mais recente do Kotlin, você pode experimentar a nova linguagem e os recursos da biblioteca padrão online em play.kotl.in.

Colaboradores externos

Gostaríamos de agradecer também a todos os nossos colaboradores externos cujas solicitações pull foram incluídas neste lançamento:

Jinseong Jeon
Toshiaki Kameyama
pyos
Mads Ager
Steven Schäfer
Mark Punzalan
Ivan Gavrilovic
Kristoffer Andersen
Bingran
Juan Chen
zhelenskiy
Kris
Hung Nguyen
Victor Turansky
AJ
Louis CAD
Kevin Bierhoff
Hollow Man
Francesco Vasco
Uzi Landsmann
Dominik Wuttke
Derek Bodin
Ciaran Treanor
rbares
Martin Petrov
Yuya Urano
KotlinIsland
Jiaxiang Chen
Jake Wharton
Sam Wang
MikeKulasinski-visa
Matthew Gharrity
Mikhail Likholetov

Discover more