2. Memória bruta e o primeiro programa unsafe
A forma segura deve ser a padrão:
i32 main() { i32 value = 42; reference := &value; stdoutln(*reference); return 0;}O menor equivalente bruto precisa de fronteira explícita:
i32 main() { i32 value = 42; unsafe { *i32 pointer = &raw value; stdoutln(*pointer); } return 0;}Os dois programas qualificados imprimem 42 e retornam zero. No primeiro, o
compilador acompanha o empréstimo. No segundo, a revisão deve provar que o
ponteiro não é nulo, está alinhado, aponta para i32 vivo, permite o acesso e
não é usado depois de value morrer. A prova é maior embora a sintaxe seja
parecida.
Execute o par verificado exato do repositório:
flecha check curriculum/fixtures/unsafe-first/safe.flflecha build curriculum/fixtures/unsafe-first/safe.fl -o build/safe-firstbuild/safe-firstflecha check curriculum/fixtures/unsafe-first/unsafe.flflecha build curriculum/fixtures/unsafe-first/unsafe.fl -o build/unsafe-firstbuild/unsafe-first4242new<T> bruto também retorna erro de alocação e cria obrigação de limpeza.
Associe cada sucesso a exatamente um free, inclusive em retornos antecipados.