Scala 3.1.2 lançado

Scala 3.1.2 foi lançado , e esta nova versão traz algumas melhorias importantes que a comunidade estava esperando. Os destaques específicos da atualização são:

Versão de saída configurável do Scala

A nova versão traz uma possibilidade experimental de configurar a versão de saída do Scala. Isso significa que o compilador agora pode gerar arquivos TASTy e classfiles no formato usado por versões secundárias mais antigas do Scala (atualmente apenas 3.0.x), especificando efetivamente a menor versão do compilador que pode ler seu código compilado.

Ao compilar a biblioteca com Scala 3.1.2, você pode definir a versão de saída para Scala 3.0. Sua biblioteca pode ser usada por código compilado com Scala 3.0, 3.1 ou qualquer versão futura. Todos os arquivos TASTy gerados serão compatíveis com Scala 3.0 e posterior.

Embora a configuração do compilador em si não seja explicitamente marcada como experimental (seu sinalizador correspondente não é -Xou -Yprefixado em seu nome), seu papel no ecossistema mais amplo da biblioteca Scala ainda não foi determinado. Autoridades dizem que está aguardando feedback dos mantenedores da biblioteca. Adoraria ouvir o público para orientar a seleção da estratégia certa para suportar o código compilado para versões anteriores do Scala, de modo que um equilíbrio possa ser encontrado entre as possibilidades de compatibilidade e evolução da linguagem.

Suporte atual

Você pode definir a versão de saída do Scala usando um novo sinalizador do compilador chamado -scala-output-version com uma versão de lançamento secundária como argumento.

A partir da versão 1.7.0-M1, existe um scalaOutputVersion que não apenas define os sinalizadores do compilador, mas também determina qual versão da biblioteca padrão será especificada como uma dependência do seu projeto.

scalaOutputVersion  foi projetado para funcionar sem problemas em situações em que você ainda é forçado a compilar cruzadamente (por exemplo, se seu projeto contém macros, mas você deseja oferecer suporte a Scala 2 e 3). Nesse caso, se o compilador em scalaVersion ainda não suporta o sinalizador -scala-output-version, você só precisa ter certeza de que scalaOutputVersion está definido com o mesmo valor que scalaVersion (equivalente a não definir scalaOutputVersion). Por exemplo

ThisBuild / scalaVersion := "3.1.2"
ThisBuild / crossScalaVersions := List("2.13.8", "3.1.2")
ThisBuild / scalaOutputVersion := {
  CrossVersion.partialVersion(scalaVersion.value) match {
    case Some((3, _)) => "3.0.2"
    case _ => scalaVersion.value
  }
}

Modificações em outros sinalizadores de compatibilidade

Os sinalizadores de compatibilidade de saída atuais são um pouco confusos e adicionar um novo sinalizador só piorará as coisas. Portanto, os funcionários decidiram renomear o logotipo existente. -release agora é -java-output-version e -Xtarget é -Xunchecked-java-output-version. Para compatibilidade, os nomes antigos são reservados como aliases.

outras melhorias

  • Agora você pode passar o sinalizador -Xmacro-settings durante a compilação para personalizar o comportamento das macros em seu código. Esse recurso ainda é experimental. Por exemplo, você pode compilar o seguinte código com -Xmacro-settings:present,key=value:
//> using options "-Xmacro-settings:present,key=value"

import scala.quoted.*

inline def customizable = ${ customizableImpl }

def customizableImpl(using Quotes) =
  import quotes.reflect.*
  val settings = CompilationInfo.XmacroSettings

  val present    = settings.contains("present")       // true
  val notPresent = settings.contains("not-present")   // false
  val withValue  = settings.collectFirst {            // Some("value")
    case s"key=$value" => value
  }

  ??? // Do something fancy with your settings
  • Você pode executar comandos scala com o sinalizador -e para executar rapidamente instruções Scala a partir da linha de comando.
  scala -e "println(22*38)"

imprimirá 836 na saída padrão e sairá do processo Scala.

  • Existem algumas novas otimizações no typer que podem levar a melhorias significativas de velocidade em alguns casos. Você pode encontrar mais informações e resultados de benchmark no PR associado .

Mais detalhes podem ser encontrados no blog oficial .

Acho que você gosta

Origin www.oschina.net/news/193182/scala-3-1-2-released
Recomendado
Clasificación