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
class 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
class 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. Especificação completa e conformance suite ainda são trabalho planejado.

classes e primary constructorDisponível
recordsDisponível
inheritanceDisponível
interfacesDisponível
constructorsDisponível
exceptions reaisDisponível
genericsDisponível
collections com Map/SetDisponível
enum + switch exaustivoDisponível
string operationsDisponível
control flowDisponível
lambdas com capturasDisponível
default parametersDisponível
language specificationPlanejado
conformance suitePlanejado
05One frontend

A linguagem não muda quando o target muda.

frontend único
Kof Source
     ↓
Kof Compiler
     ↓
Kof IR
     ↓
 ┌───┼───────────┐
 ↓   ↓           ↓
JVM Native     KofJS