// DOCS NAVIGATION
Tipos Primitivos_
SOURCE: content/docs/reference/02-fundamentos.md — 02 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 / Type | Descrição PT-BR | Description EN-US | Exemplos / Examples |
|---|---|---|---|
int | Inteiro com sinal (64 bits) | Signed integer (64-bit) | 0, 42, -100, 1_000_000 |
float | Ponto flutuante (64 bits) | Double-precision float (64-bit) | 3.14, -0.5, 1.0 |
bool | Booleano | Boolean | true, false |
string | Cadeia de caracteres UTF-8 | UTF-8 character string | "hello", "", "linha\nova" |
char | Caractere Unicode único | Single Unicode character | 'a', '\n', 'Z' |
unit | Ausência de valor (implícito) | Absence of value (implicit) | (retorno de funções void) |
Aliases numéricos aceitos atualmente:
| Família / Family | Tipos / Types | ABI atual / Current ABI |
|---|---|---|
| Inteiros com sinal / Signed integers | i8, i16, i32, i64, isize | Canonicalizados para int |
| Inteiros sem sinal / Unsigned integers | u8, u16, u32, u64, usize | Canonicalizados para int |
| Floats | f16, bf16, f32, f64 | Canonicalizados 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
}