SPECTRALANG_

// DOCS NAVIGATION

Tipos Primitivos_

SOURCE: content/docs/reference/02-fundamentos.md02 Fundamentos / 3. Tipos Primitivos / Primitive Types

PT-BR:
SpectraLang tem 5 tipos primitivos principais, aliases numéricos e o tipo unit para ausência de valor:

EN-US:
SpectraLang has 5 main primitive types, numeric aliases, and the unit type for absence of value:

Tipo / TypeDescrição PT-BRDescription EN-USExemplos / Examples
intInteiro com sinal (64 bits)Signed integer (64-bit)0, 42, -100, 1_000_000
floatPonto flutuante (64 bits)Double-precision float (64-bit)3.14, -0.5, 1.0
boolBooleanoBooleantrue, false
stringCadeia de caracteres UTF-8UTF-8 character string"hello", "", "linha\nova"
charCaractere Unicode únicoSingle Unicode character'a', '\n', 'Z'
unitAusência de valor (implícito)Absence of value (implicit)(retorno de funções void)

Aliases numéricos aceitos atualmente:

Família / FamilyTipos / TypesABI atual / Current ABI
Inteiros com sinal / Signed integersi8, i16, i32, i64, isizeCanonicalizados para int
Inteiros sem sinal / Unsigned integersu8, u16, u32, u64, usizeCanonicalizados para int
Floatsf16, bf16, f32, f64Canonicalizados para float

Esses aliases deixam a superfície da linguagem pronta para código científico, mas a ABI alpha ainda usa int e float como representação canônica. Semântica de largura exata, overflow e armazenamento compacto são trabalho de backend/runtime futuro.

Promoção Numérica / Numeric Promotion

PT-BR:
A única conversão implícita permitida em SpectraLang é o alargamento de int para float. Todas as outras conversões devem ser explícitas via as quando suportado ou via std.convert.

EN-US:
The only implicit conversion allowed in SpectraLang is widening from int to float. All other conversions must be explicit via supported as casts or std.convert.

module tipos

import std.convert

public func main() {
    let i: int = 42

    // Promoção implícita permitida / Implicit promotion allowed
    let f: float = i
         // int → float: OK

    // Conversão explícita necessária / Explicit conversion required
    let de_volta: int = std.convert.float_to_int(3.9)
  // → 3 (truncado)
    let como_texto: string = std.convert.int_to_string(42)
 // → "42"
    let parsed: int = std.convert.string_to_int("100")
     // → 100

    // ERRO — conversão implícita não permitida / ERROR — implicit conversion not allowed
    // let s: string = 42;    // Erro: tipos incompatíveis
    // let b: bool = 1;       // Erro: int não vira bool implicitamente
}