A Tese

Por que escolher Artcode?

Nós não escondemos os trade-offs. Nós entregamos o vocabulário para você gerenciá-los.

O Problema: A Lei do Cobertor Curto

Por décadas, escolher uma linguagem significou escolher qual dor você estava disposto a sofrer. Precisava de performance? Perdia segurança. Queria produtividade? Sacrificava tipagem e controle. Artcode foi projetada para quebrar essa dicotomia com um princípio: Complexidade Progressiva.

Necessidade Linguagem Comum Custo Oculto
Máxima performance C / C++ Sem segurança de memória. Segfaults, UB, CVEs.
Segurança de memória Rust 6+ meses de curva antes de ser produtivo.
Rápida prototipagem Python / Ruby Sem tipos, sem null safety. Bugs em runtime.
Leveza e clareza Go Teto artificial. Expressividade limitada.
Apps mobile/server Swift / Kotlin Presos a ecossistemas corporativos.

🛡️

Artcode vs. Go

Uma questão de teto

Onde Go acerta: Simplicidade intencional. Goroutines, GC eficiente, binários pequenos, compilação rápida. Para serviços Backend, é excelente.

Onde Go falha:

1. Expressividade limitada

Go introduziu genéricos apenas em 1.18, com limitações. O sistema de tipos da Artcode é nativo e exaustivo: enums com payloads, pattern matching que força cobertura total, e Result<T, E> integrado.

pattern_matching.art
// O compilador forca que todos os cases sejam tratados:
match resposta {
    case .Ok(let dados): processar(dados)
    case .Timeout:       retry_later()
    case .Err(let e):   log_error(e)
    // Esquecer um case = erro de compilação
}

2. GC tem pausas

Em sistemas de tempo real (jogos, trading, VoIP), as pausas do GC do Go são inaceitáveis. Artcode tem ARC determinístico por padrão e Arenas para latência zero — nenhuma pausa, nenhuma surpresa.

3. Concorrência mais expressiva

Go usa goroutines + channels — funcional, mas manual. Artcode tem o Modelo de Atores como primitiva de primeira classe: isolamento de estado por design, sem data races fora de blocos performant.

Vantagem Artcode: Começa tão simples quanto Go, mas quando o seu sistema escalar, você não precisa trocar de linguagem. Go te impõe um teto; Artcode cresce com você.
Critério Go Artcode
Simplicidade inicial Muito simples Equivalente
Performance eventual ⚠️ Limitada pelo GC AOT + Arenas
Expressividade Verboso Pattern matching, traits
Concorrência ⚠️ Channels manuais Atores + baixo nível opt-in

Artcode vs. Rust

O caminho livre de atrito

Onde Rust acerta: Performance de C++ com segurança de memória compile-time. O borrow checker é um feito de engenharia sem paralelo.

1. A muralha da curva de aprendizado

O borrow checker é necessário para as garantias do Rust, mas torna os primeiros meses frustrantes. A maioria demora 3-6 meses para se tornar produtivo. Para times que precisam de onboarding rápido, é risco alto.

Artcode tem a mesma intenção de segurança, mas com escada de acesso. Você não precisa entender lifetimes para escrever o primeiro sistema concorrente seguro.

2. Integração, não competição

Nossa estratégia mais inteligente: FFI zero-cost com Rust. Ambas usam LLVM. Tipos compartilhados sem serialização. Use Rust para core libs; Artcode para lógica de aplicação. Você ganha crates.io de graça.

3. Iteração instantânea

Rust não tem modo JIT. Cada iteração exige cargo build. Artcode oferece execução JIT instantânea em dev (art run), o custo do AOT só vem quando você quer produção.

Vantagem Artcode: Artcode não compete com Rust — se integra a ele. Use Rust para as suas bibliotecas de core. Use Artcode para a camada de produto. Zero overhead na fronteira.
Critério Rust Artcode
Segurança de memória Compile-time ARC + escada
Curva de aprendizado Muito íngreme Progressiva
Iteração em dev ⚠️ Compilação completa JIT instantâneo
Interoperabilidade Base FFI zero-cost
Produtividade inicial ⚠️ Alta fricção Inferência total

🐍

Artcode vs. Python

Segurança não é opcional

Onde Python acerta: Fácil de ler, ecossistema vasto, prototipagem extremamente rápida. Para ciência de dados e automação, é a ferramenta certa.

1. O bug invisível mais caro: None

Em Python, qualquer variável pode ser None. Bugs silenciosos que explodem em produção. Refactoring é aterrorizante porque nenhum tipo é garantido.

Em Artcode, null não existe. A ausência de valor é um tipo explícito (Optional<T>) que o compilador obriga tratar.

null_safety.art
func buscar(id: Int) -> Optional<User> {
    if id <= 0 { return .None }
    return .Some(db.find(id))
}

match buscar(42) {
    case .Some(let u): exibir(u)
    case .None:        erro("Não encontrado")
    // Compilador não deixa esquecer .None
}

2. Performance que escala

Python é lento por design (GIL, duck typing). Precisa de extensões em C (NumPy). Artcode executa nativamente com AOT LLVM quando necessário, sem depender de FFI.

Vantagem Artcode: Mesma produtividade inicial do Python, mas com tipos verificáveis, null safety completo e performance nativa. Sem surpresas em produção.
Critério Python Artcode
Produtividade inicial Muito alta Equivalente
Null safety None em todo lugar Optional<T>
Performance Lento JIT + AOT LLVM
Segurança de tipos Hints opcionais Forte e verificável

🌐

Artcode vs. JavaScript / TypeScript

Tipos reais, concorrência real

TypeScript melhorou imensamente o JS com tipos, mas eles são apagados em runtime. Você pode ter código perfeitamente tipado que explode com erros de tipo em produção.

O modelo de concorrência do JS (event loop + Promises) não previne data races em ambientes multi-worker. O Modelo de Atores da Artcode isola estado por construção.

Aplicações Node.js precisam distribuir o runtime. Artcode compila para binários nativos minúsculos — ideais para CLIs, daemons e sistemas embarcados.

Vantagem Artcode: Tipos que existem de verdade, concorrência que não pode ter data races, e binários que cabem em qualquer lugar.

Honestidade

Trade-offs da v0.1.0

Nenhum documento de marketing sério omite limitações reais.

⏳ Ecossistema de Pacotes

Ainda não temos um registry próprio. Dependemos da FFI com Rust/C para bibliotecas de terceiros.

⏳ WASM e GPU

Compilação para WebAssembly e aceleração por GPU estão previstos para v0.2+.

⏳ LSP Avançado

O servidor de linguagem fornece diagnósticos em tempo real. Autocompletar e refatoração vêm nas próximas versões.

⏳ Time-Travel Debugging

Planejado para integração no debugger. Atualmente em design de API.

O que entregamos sólido na v0.1.0

  • Lexer, Parser, Interpreter e Type Checker completos e testados
  • Diagnósticos estruturados com spans e sugestões
  • Atores, Pattern Matching, Enums, Closures, f-Strings, ARC, weak/unowned, Arenas
  • CLI unificada: art run, art fmt, art lint, art lsp
  • Suíte de testes com 17+ módulos (golden, integração, unitários)

Pronto para experimentar?

Instale, escreva art run hello.art, e descubra que a curva de aprendizado que você temia não existe aqui.