Pular para o conteúdo

1. Contratos de propriedade e builds determinísticos

APIs avançadas devem declarar se uma entrada é emprestada, consumida, retornada ou retida. Aplique contratos de propriedade na menor fronteira e teste sucesso, falha de validação, falha de alocação e inicialização parcial. Um método de ciclo de vida não justifica transferência ambígua.

Builds determinísticos começam antes da geração de código. Fixe versões de Flecha e Longbow, versione lockfiles, verifique checksums, ordene entradas antes de serializar e exclua paths e tempos do host que não sejam entradas declaradas. Reconstrua com cache limpo e compare o artefato relevante.

Use contratos de propriedade, ecossistema de pacotes e geração nativa como listas de auditoria.

Exemplo testado

Coloque propriedade da alocação, construção, destruição e transferência em um contrato auditável.

Arquivo: curriculum/main-evidence/single/ownership_contracts.fl

curriculum/main-evidence/single/ownership_contracts.fl
structure Box { own *i32 value; };
unsafe Box Box::init(own *i32 value) override {
return build Box { self.value = value; };
}
unsafe void Box::tear(&self) override { free(self->value); }
unsafe i32 Box::get(&const self) { if self->value == null { return 0; } return *self->value; }
unsafe void consume(own *i32 p) { free(p); }
unsafe (own *i32, error) create() { return new<i32>(42); }
i32 main() {
unsafe {
p, e := create();
if e != none { return 1; }
box := Box::init(p);
return box.get();
}
}

O bloco acima é o arquivo completo executado pelos comandos abaixo.

Alocação, inicialização, transferência e destruição ocorrem sob um contrato de propriedade. Manter essas operações juntas torna visível o ponto em que a responsabilidade muda para o compilador e para a revisão.

Comandos

Comandos
flecha check curriculum/main-evidence/single/ownership_contracts.fl
flecha build curriculum/main-evidence/single/ownership_contracts.fl -o build/ownership_contracts
build/ownership_contracts

Saída esperada

Saída esperada
(stdout vazio)
status de saída: 42

Referência relacionada: /examples/ownership_contracts/.