01Language

A linguagem deve representar intenção.

Kof é uma linguagem geral, fortemente tipada e estaticamente tipada, criada para reduzir drasticamente a complexidade necessária para construir software moderno.

Tipagem forte

Erros importantes devem ser encontrados em compile-time, não em produção.

Tipagem estática

Tipos são verificados pelo compilador; o sistema de tipos é parte do frontend único da linguagem.

Humano primeiro

A linguagem é projetada primeiro para seres humanos: fácil de ler, escrever, aprender e manter.
02Humano primeiro

Boilerplate não é uma feature.

Se o compilador consegue entender a intenção sem exigir vinte linhas de cerimônia, vinte linhas de cerimônia não deveriam existir.

Cerimônia tradicional

User.java
public final class User {
private final String name;
private final String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String name() {
return name;
}
public String email() {
return email;
}
}

Kof

User.kf
record User(String name, String email)

Menos código não significa menos capacidade.

03Sintaxe

Exemplos executáveis

hello.kf
main() {
println("Hello from Kof")
}
add.kf
add(Int a, Int b): Int {
return a + b
}
main() {
println(add(2, 3))
}
user.kf
record User(String name, String email)
main() {
var user = User("Mel", "mel@example.com")
println(user.name())
}
collections.kf
main() {
var users = listOf("Mel", "Kof")
for (var user in users) {
println(user)
}
}
04Estado da linguagem

O que já existe no frontend da linguagem

Recursos abaixo fazem parte da base do compilador (0.6.0). A separação linguagem ≠ compilador ≠ target está documentada em docs/language-reference/ (gramática, sistema de tipos, semântica) e docs/compiler-architecture.md (implementação).

classes com constructor (new opcional; sem getter/setter — campo direto)Disponível
records (SEM038 imutável, 0.3.5+; class X(...) também é record)Disponível
inheritance + dispatch virtualDisponível
interfaces (SEM043 exaustividade)Disponível
constructors + sobrecargaDisponível
val imutável (SEM037)Disponível
exceptions reais (throw String)Disponível
generics (erasure) + Box<T> primitivoDisponível
coleções List/Map/Set + map/filter/reduceDisponível
enum + switch exaustivo (SEM031)Disponível
switch-expressão (SYN001) + guardas (SG-014)Disponível
string operations + kof.strings (escapeJson, word converters)Disponível
control flow (if-expr, for-in, switch)Disponível
lambdas com capturas (3 níveis, Box mutável)Disponível
default parametersDisponível
pattern matching (case String s, Point(x,y), instanceof) + guardsDisponível
sobrecarga top-level (SG-011B) e de método nos 4 backendsDisponível
print heterogêneo em if/switch-expressão (0.4.1)Disponível
assignments compostos bitwise/shift (|= &= <<= >>= >>>=)Disponível
null safety ampliada — Map.get→V?, valor default em primitivo nullableDisponível
arrays multidim new T[a][b] (MULTIANEWARRAY)Disponível
functions sem fun/fn/func (PARSE085 reservadas)Disponível
private/protected checados (SEM046)Disponível
sealed + switch exaustivo sobre subtipos diretos (SEM080/SEM081, 0.6.0)Disponível
variância out/in em declaração + projeção use-site (SEM082, 0.6.0)Disponível
FFI extern com callbacks (trampoline no Native, 0.6.0)Disponível
language specification (docs/language-reference/)Disponível
conformance suite (embrião E2E, previsto)Em desenvolvimento

`fn`/`fun`/`func` são palavras reservadas (SG-001, 06/09) — em qualquer posição dão PARSE085. `let`/`const`/`async` não existem — KofScript é Kof puro (PARSE085). Arrays literais `[1,2,3]` e `Option<T>` não existem.

05One frontend

A linguagem não muda quando o target muda.

frontend único
Kof Source
      ↓
 Kof Compiler
      ↓
 Kof IR
      ↓
  ┌───┬───┬───────┬────┬──────┐
  ↓   ↓   ↓       ↓    ↓      ↓
 JVM Native Script KofJS KofC