
Linguagem Vx leva topologia de hardware ao sistema de tipos
O que é Vx
Vx é uma linguagem de programação de sistemas para computação heterogênea, disponível para macOS em Apple Silicon e Linux x86_64 sob licença Apache 2.0 com LLVM Exceptions. A tese central é que a heterogeneidade de hardware pertence ao sistema de tipos, não ao runtime: CPU, GPU, NPU e memórias de aceleradores fazem parte dos tipos, de modo que uma thread de host desreferenciar um ponteiro de dispositivo vira erro de compilação, não uma falha em produção.
Onde os dados vivem é parte do tipo
Na maioria das linguagens, o acelerador é infraestrutura gerida por um runtime opaco. Em Vx, é semântica: um tensor fixado na memória de alta largura de banda de um NPU tem tipo diferente de um na DRAM do host, e cruzar entre eles exige uma chamada explícita de transfer() - mesmo quando o limite de hardware não tem custo, como na memória unificada da Apple, onde a transferência compila para quase nada. A justificativa é que a localidade dos dados deve ser verificável lendo o código-fonte, não perfilando o binário.
O que o compilador elimina
O type checking antecipa uma classe de erros que normalmente aparecem como crash em runtime, corrupção silenciosa ou falta de memória em pleno treinamento:
- Tipagem de espaço de endereçamento: ponteiro de dispositivo usado pelo host, ou um
Pinned<T, NPU_SRAM>escapando para o host. - Admissão de capacidade: verifica, contra a máquina declarada e antes de gerar binário, se o conjunto de trabalho cabe na memória alvo.
- Contratos de costura: leitura de buffer cuja transferência assíncrona ainda não ficou visível, verificada por um provador SMT.
- Tipos lineares: uso após movimentação de buffer consumido, com borrow checker com variância e rastreamento de regiões.
- Alcance de topologia: transferência entre espaços de memória sem caminho declarado entre eles.
- Autodiff: diferenciação de região cujo adjacente não está definido.
A máquina é declarada, não presumida
Em vez de um modelo de custo embutido no compilador, Vx lê um arquivo de máquina descrevendo a hierarquia de memória e o interconecte de um componente real. O repositório traz arquivos para H100, H200, B200, A100, MI300X, Apple M4 e nós multi-GPU, cada um citando fontes e marcando números não verificados. As unidades usam conversões inteiras exatas: prefixos SI são decimais (GB = 10⁹) e IEC são binários (GiB = 2³⁰).
Como compila
Todo símbolo e tipo é um identificador plano de 256 bits; o sistema nominal com boxing obrigatório para tipos recursivos desacopla módulos, permitindo compilação paralela entre núcleos sem engine de consultas nem contenção de travas. O mesmo código-fonte produz MLIR byte-idêntico em modo serial ou paralelo - propriedade assegurada na suíte de testes, incluindo recompilação com seeds de hash novas. A garantia vale para o MLIR do frontend; o que vem depois pertence ao LLVM. Os backends cobrem CPU (x86-64, arm64), NVIDIA GPU (via NVVM → PTX → SASS), Apple AMX/ANE via CoreML e regiões remotas distribuídas. Fabricantes estendem o compilador por plugins de pass MLIR.
Quando não usar
O projeto reconhece limites: usuários de PyTorch mutam arquitetura no meio de um loop, imprimem formas de tensor e seguem em frente; em Vx, essa dinamicidade exige trabalho real. A linguagem é indicada para o que precisa ser correto e rápido em dez tipos de silício, e não para o que ainda está em fase de exploração.