Kotlin 1.1 - Suporte a Javascript, Coroutines e mais

Esse texto é uma tradução direta e autorizada do post da JetBrains sobre o release do Kotlin 1.1, feito no blog oficial da linguagem. Caso alguém tenha alguma sugestão ou errata para a tradução, por favor, comente! :)

Hoje lançamos o Kotlin 1.1. É um grande passo a frente, permitindo o uso do Kotlin em muitos cenários novos, e esperamos que você goste.

Nossa visão para Kotlin é permitir o uso de uma única linguagem expressiva, performática e fortemente tipada em todos os componentes de uma aplicação moderna. O Kotlin 1.1 cumpre duas etapas principais para este objetivo.

Primeiramente, o target para JavaScript não é mais experimental e suporta todos os recursos de linguagem do Kotlin, uma grande parte da biblioteca padrão, assim como a interoperabilidade com o JavaScript. Isso permite que você migre o frontend do browser das suas aplicações para Kotlin, enquanto continua a usar frameworks modernos para desenvolvimento JavaScript, como o React.

Em segundo lugar, estamos apresentando suporte para as coroutines. Como uma alternativa leve às threads, as coroutines permitem backends muito mais escaláveis de aplicações, suportando cargas maciças de trabalho em uma única instância da JVM. Além disso, as coroutines são uma ferramenta muito expressiva para implementar comportamentos assíncronos, o que é importante para a criação de interfaces de usuário responsivas em todas as plataformas.

Abaixo descrevemos melhor essas duas mudanças. Em outras notícias: adicionamos apelidos de tipos (type aliases), bound callable references, desestruturação de lambdas e muito mais. Veja os detalhes na nossa página de O que há de novo (veja também os exemplos executáveis!).

Coroutines

As coroutines em Kotlin tornam um código assíncrono não-bloqueante tão direto quanto o código síncrono simples.

A programação assíncrona está tomando o mundo, e a única coisa que nos impede de usá-la é que um código não-bloqueante acrescenta uma complexidade considerável aos nossos sistemas. O Kotlin agora oferece meios para se domar essa complexidade, fazendo das coroutines "cidadãos first-class" na linguagem através de um único premissa: suspensão de funções. Tal função (ou lambda) representa uma computação que pode ser suspensa (sem bloquear qualquer segmento) e retomada mais tarde.

Tecnicamente, as coroutines são meios leves de cooperação multitarefa (muito semelhantes às fibras). Em outras palavras, eles são apenas threads muito melhores: quase gratuitas para se iniciar e manter por perto, extremamente baratas de se suspender (suspensão está para coroutines assim como bloqueio está para threads), muito fácil de compor e personalizar.

Nós projetamos as coroutines para a máxima flexibilidade: muito pouco é fixo na linguagem, e muito pode ser feito como uma biblioteca. O projeto kotlinx.coroutines possui bibliotecas em cima de Rx, CompletableFuture, NIO, JavaFx e Swing. Bibliotecas semelhantes podem ser escritas para Android e JavaScript. Mesmo muitas constructs embutidas disponíveis em outras línguas podem agora ser expressas como bibliotecas Kotlin. Isso inclui generators/yields do Python, channels/select do Go e async/await do C#:

Leia mais nas nossas docs.

Uma nota importante: Com todos os benefícios que elas trazem, as coroutines do Kotlin são parte de um design bastante novo que requer um teste de batalha extensivo antes de afirmarmos que está 100% certo e completo. É por isso que vamos lançá-la sob uma bandeira de opt-in "experimental". Não esperamos que as regras da linguagem sejam alteradas, mas as APIs podem exigir alguns ajustes no Kotlin 1.2.

Suporte a Javascript

Como mencionado acima, todos os recursos de linguagem no Kotlin 1.1, incluindo as coroutines, funcionam em JVM/Android e JavaScript. Isto significa que uma aplicação web pode ser escrita inteiramente em Kotlin, e já temos alguma experiência em fazer isso dentro do JetBrains. Vamos publicar tutoriais e outros materiais sobre isso em breve.

O Kotlin para JavaScript tem tipos dinâmicos para interoperar com o código JavaScript “nativo”. Para usar bibliotecas bem conhecidas através de APIs tipadas, você pode usar o conversor ts2kt juntamente com headers do DefinitelyTyped.

Nós suportamos tanto Node.js quanto o navegador. A biblioteca padrão do Kotlin está disponível para uso através de npm.

Leia mais nas nossas docs.

Ferramentas

O Kotlin 1.1 não é um grande release em termos de ferramentas: preferimos lançar ferramentas que não afetem a linguagem em si assim que elas ficaram prontas, então você já viu muitas dessas melhorias nas versões 1.0.x do Kotlin. Para destacar algumas:

  • Plugins do Kotlin para todas as grandes IDEs: IntelliJ IDEA, Android Studio, Eclipse e NetBeans
  • Compilação incremental no IntelliJ IDEA e Gradle
  • Plugins do compilador para Spring, JPA e Mockito (fazendo classes abertas e gerando construtores no-arg)
  • kapt para processamento de anotações
  • Suporte a Lint para projetos Android
  • Inúmeras intenções de IDE, inspeções, ajustes rápidos, refatorações e melhorias de code completion

Nós continuaremos trabalhando para tornar nossas ferramentas ainda melhores e forneceremos as atualizações nas versões 1.1.x.

Primeiro ano de Kotlin: Adoção e Comunidade

Em resumo, o Kotlin está crescendo. Vimos mais de 160 mil pessoas utilizando Kotlin durante o ano passado. Os projetos de OSS no GitHub cresceram de 2,4M para 10M de linhas de código em Kotlin (cerca de 4x). Nossa comunidade no Slack cresceu de 1400 para mais de 5700 pessoas (mais de 4x). Diversos meetups e grupos de usuário são organizados pela comunidade ao redor do mundo. Estamos vendo mais e mais livros e cursos online publicados.

Kotlin é igualmente forte entre desenvolvedores server-side e Android (uma divisão de aproximadamente 50/50). O Spring Framework 5.0 apresentou o suporte ao Kotlin, assim como o vert.x 3.4. O Gradle e TeamCity estão usando o Kotlin para criar scripts. Mais projetos utilizando Kotlin podem ser encontrados em kotlin.link.

Muitas empresas bem conhecidas estão usando Kotlin: Amazon Web Services, Pinterest, Coursera, Netflix, 99, Uber, Square, Trello, Basecamp, entre outros. A Corda, um ledger distribuído desenvolvido por um consórcio de bancos bem conhecidos (como Goldman Sachs, Wells Fargo, J.P. Morgan, Deutsche Bank, UBS, HSBC, BNP Paribas, Société Générale), tem mais de 90% de Kotlin na sua base de código.

Somos gratos a todos os nossos usuários, contribuidores e advocates em todas as partes do mundo. Seu apoio é muito importante para nós!

Organizando seu próprio evento do Kotlin 1.1

O Kotlin 1.1 é um bom motivo para se reunir com o seu grupo de usuários locais e amigos. Nós preparamos alguns materiais para ajudar você a organizar esse tipo de evento. No dia 23 de março nós vamos transmitir sessões ao vivo com os membros da equipe Kotlin, além de haver um pacote de organizadores que inclui alguns swags e uma Pesquisa de Futuras Features. Encontre mais informações e registre seu evento aqui.

O que vem pela frente

Para tornar Kotlin uma linguagem verdadeiramente full-stack, vamos fornecer ferramentas e suporte a linguagem para compilar o mesmo código em múltiplas plataformas. Isso facilitará o compartilhamento de módulos entre o cliente e o servidor. Continuaremos trabalhando na melhoria do suporte a ferramentas e bibliotecas JavaScript. Entre outras coisas, a compilação incremental para a plataforma JavaScript já está em andamento. Fique atento às atualizações 1.1.x.

O Java 9 está chegando em breve, e nós forneceremos suporte para seus novos recursos antes que ele seja lançado.

Esperamos muitos feedbacks sobre as coroutines nos próximos meses, e melhorar esta área da linguagem (em termos de desempenho e funcionalidade) está entre as nossas prioridades.

Além disso, nossa próxima versão será principalmente focada em manutenção, melhorias de desempenho, infra-estrutura e bugfixing.

P.S. Funcionar em múltiplas plataformas é uma direção estratégica para o Kotlin. Com o 1.1 podemos rodar em servidores, desktops, dispositivos Android e navegadores, mas no futuro vamos compilar o Kotlin para código nativo e rodar em muitas outras plataformas (incluindo, por exemplo, iOS e dispositivos embutidos). Uma grande equipe aqui no JetBrains está trabalhando neste projeto, e esperamos mostrar algo interessante muito em breve. No entanto, isso não tem como alvo nenhuma versão específica.

Instruções de Instalação

Como sempre, você pode testar o Kotlin online em try.kotlinlang.org.

As novas referências da API com exemplos reais estão disponíveis aqui.

Compatibilidade: No Kotlin 1.1, a linguagem e a biblioteca padrão são retrocompatíveis: Se algo é compilado e executado na versão 1.0, vai se manter funcionando na 1.1. Para auxiliar equipes grandes que atualizam gradualmente, nós disponibilizamos um switch de compilador que desativa novos recursos. Aqui está um documento cobrindo possíveis armadilhas.

No Maven/Gradle: Use o número de versão 1.1.0 para o compilador e a biblioteca padrão.

No IntelliJ IDEA: A versão 2017.1 da IDE tem o Kotlin 1.1 embutido, em versões anteriores instale ou atualize o plugin para a versão 1.1.

No Android Studio: Instale ou atualize o plugin através do Plugin Manager (Preferences > Plugins).

No Eclipse: Instale o plugin usando o Marketplace.

O compilador em linha de comando pode ser baixado na página de releases do 
GitHub.

Tenham um ótimo Kotlin!

Show your support

Clapping shows how much you appreciated Walmyr Carvalho’s story.