Memória e recursos
Memória determinística: o mapa Item por item da parte 3 da referência Deep Tech — ownership, borrow checker, lifetimes, smart pointers e layout — cruzado com o que o DataForge tem, e o que não tem por decisão.
A terceira parte de uma referência Deep Tech descreve o gerenciamento determinístico de memória: ownership, borrow checker, lifetimes, smart pointers e layout. Ela foi escrita para uma linguagem compilada com memória manual. O DataForge é interpretado e tem coletor — então a pergunta certa não é "como copiar Rust", e sim o que dessa disciplina continua valendo aqui .
A diferença que muda tudo
Num interpretador com coleta automática, um valor nunca vira endereço inválido: não há use-after-free, dangling pointer nem double free de memória. O que sobra — e continua caro — é o recurso (arquivo, conexão, cadeado) e o aliasing (dois donos escrevendo no mesmo objeto). É exatamente isso que Arcane.Posse cobre.
Item No DataForge Onde modelo de ownership, propriedade exclusiva P.dono(valor, ao_soltar) — opt-in : vale para o que você declaraPosse movimentação mover(): quem move, perde; usar depois é erro, e o check acusa antes (posse-movida)Posse cópia e clone copiar() (mesmo valor) e clonar() (cópia) — a distinção é explícitaPosse borrowing, aliasing, mutabilidade usar/mudar no dono e ler/escrever na célula: muitos leem OU um escrevePosse destrutores, RAII soltar() roda o finalizador agora ; P.com e P.com_escopo soltam até no erroEscopo regras de acesso cobradas quando roda; o check prova o subconjunto que o fluxo de um arquivo permite Posse
Item No DataForge Onde regras de empréstimo, referência compartilhada e mutável ler (N) XOR escrever (1), cobrado em execução — como o RefCellPosse exclusividade de mutabilidade, aliasing seguro a célula recusa escrever no meio de uma leitura, com a mensagem dizendo quem está lendo Posse análise de dataflow o check segue o fluxo de um arquivo: move, solta, devolve, passa adiante Análise estática diagnósticos posse-movida (erro), recurso-vazado e emprestimo-escapa (avisos)Posse verificação em tempo de compilação não existe : não há inferência de região. A garantia é em execução, e a prova estática é o que o literal e o fluxo permitem— NLL (non-lexical lifetimes) não se aplica , e na prática o efeito é o mesmo: o empréstimo acaba no fim do corpo que o recebeu, e não no fim do blocoPosse
Item No DataForge Onde tempo de vida de um recurso o escopo : P.escopo() solta tudo na ordem inversa; defer faz o mesmo sem objeto novo Escopo lifetime de um empréstimo o corpo de usar/mudar/ler/escrever; pedi-lo fora dele devolve um empréstimo já encerrado Posse lifetimes explícitos ('a), elisão, bounds não existem : não há região a anotar, porque não há como um valor virar endereço inválido— lifetimes em structs, funções e traits não se aplicam pelo mesmo motivo; o que existe é a posse do recurso guardado num campo— subtyping, covariância, contravariância, invariância não existem como declaração: a herança dá subtipagem de valor, e coleção genérica é conferida item a itemGenerics
Item No DataForge Onde Box<T>P.dono(valor) — posse exclusiva com destrutorPosse Rc<T>P.compartilhado(valor) — contagem determinísticaPosse Arc<T>, atomic reference countingP.atomico(valor) — a mesma coisa, válida entre threadsPosse weak references P.fraco(c) (responde Talvez) e Mem.fraca(obj) / Mem.mapa_fraco()Layout ciclos de referência acontecem, e são mostrados : um ciclo forte não chega a zero; a volta fraca o quebra Posse referências toda variável já é uma: o valor é um objeto, e a atribuição não copia Variáveis ponteiros crus, heap, stack não existem : não há endereço exposto nem escolha de onde o valor mora—
Item No DataForge Onde stack frames quadros de chamada, com teto de mil; yield f(…) vira salto e não tem teto Ações object/struct layout slots contra dicionário — medido : Mem.layout e Mem.comparar_layoutLayout heap allocation toda alocação é do runtime; não há escolha — alignment, padding, cache lines, ABI não se aplicam : não há layout fixo nem binárioLayout endianness existe onde importa: Arcane.Bytes.empacotar/desempacotar, na fronteira do arquivo e da rede Arcane.Bytes nullability void, com ?? e ?.; e a união String | Void diz isso no tipoTipos nomeados zero-sized types não existem : todo valor ocupa alguma coisa— enum layout um membro de enum é um objeto com nome, valor e índice — sem representação binária escolhida Records e enums
Das cinco seções da parte 3, três têm resposta de verdade aqui — ownership, disciplina de empréstimo e smart pointers —, porque elas falam de protocolo , e protocolo existe em qualquer linguagem. As outras duas — lifetimes anotados e layout binário — falam de representação , e representação é assunto de quem compila.
O que o DataForge oferece no lugar delas: liberação determinística onde importa (soltar, com, escopo), medida real de custo por objeto (Mem.layout), e a travessia de processo quando o problema é CPU e não memória.
Anterior
← Memória e layout
Próximo
Visão geral →