Pular para o conteúdo

Constantes em código de tempo de execução

Uma constante de namespace é avaliada uma vez pelo front-end e pode ser referenciada pelo nome em código comum de tempo de execução:

namespace Limits
private const MAXIMUM_ATTEMPTS: Int = 3
function main()
print(`máximo de tentativas={MAXIMUM_ATTEMPTS}`)
end

O compilador substitui o valor Int já verificado no HIR tipado. Ele não cria armazenamento mutável de módulo, consulta de nome em tempo de execução nem uma global implícita.

O inicializador pode chamar funções de tempo de compilação elegíveis:

@CompileTime
private function doubled(value: Int): Int
return value * 2
end
private const BUFFER_SIZE = doubled(512)
function main()
print(`tamanho do buffer={BUFFER_SIZE}`)
end

doubled é executada durante a compilação, e cada uso em tempo de execução recebe 1024.

A rc.3 pode substituir estes valores imutáveis:

  • nil, Boolean, inteiros, valores de ponto flutuante e String;
  • tuplas fixas compostas recursivamente por esses primitivos.

Agregados mutáveis ou com identidade ainda não são formatos de constantes de tempo de execução. A visibilidade continua valendo quando outro Module ou Bubble referencia a declaração.