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.
Kof Source
↓
Kof Compiler
↓
Kof IR
↓
┌───┼───────────┐
↓ ↓ ↓
JVM Native KofJS