As linguagens de programação diferem na forma como lidam com a memória e impõem as regras de gerenciamento de memória. Go e Python empregam coletores de lixo, para que os desenvolvedores possam se concentrar em escrever código. C e C++ dão aos programadores a responsabilidade de gerenciar a memória em um nível inferior.

Rust trata o gerenciamento de memória de maneira diferente, usando conceitos que chama de propriedade e empréstimo. Ele usa um "verificador de empréstimo" para reforçar a segurança da memória com eficiência.

O que é propriedade?

A propriedade é um recurso e convenção do Rust que ajuda a garantir a segurança da memória de programas sem um coletor de lixo. É outra forma de abordar o problema de vazamentos de memória em seu código.

O compilador Rust verifica se um programa obedece às regras de propriedade em tempo de compilação. Se o programa seguir essas regras, ele poderá ser executado. Se isso não acontecer, o compilador se recusa a produzir um executável.

Rust verifica as regras de propriedade usando o

instagram viewer
cheque emprestado. O verificador de empréstimo verifica o modelo de propriedade e decide se um valor na memória (pilha ou pilha) está fora do escopo ou não. Se um valor estiver fora de seu escopo, não será acessível a outras partes do programa, a menos que seja emprestado.

As regras de propriedade

No Rust, cada variável possui o valor com o qual foi inicializada e só pode haver um proprietário. Quando o proprietário estiver fora do escopo, o valor será descartado. É importante entender os detalhes das regras de propriedade.

A primeira regra de propriedade é que cada variável possui seu valor inicializado.

deixar proprietário = Corda::de um");

o proprietário a variável acima possui a string 1 e, ao contrário de linguagens como Python e Go, esse valor será descartado na reatribuição de variável.

A segunda regra de propriedade é que duas variáveis ​​não podem apontar para o mesmo local de memória; cada valor pode ter apenas um proprietário.

deixar novo_proprietário = proprietário;

o novo dono variável agora possui o valor armazenado no local de memória do proprietário variável. Se você tentar usar o proprietário variável, o compilador entrará em pânico e se recusará a gerar um executável.

Na maioria das linguagens que usam coletores de lixo, duas variáveis ​​podem apontar para o mesmo local de memória. Aqui está um exemplo de código JavaScript equivalente:

deixar dono = "dono";
deixar novo_proprietário = proprietário;
console.log (novo_proprietário);

A execução do código JavaScript acima funciona sem erros e, se você fizer o mesmo em Go ou Python, seu programa funcionará sem erros também.

A terceira regra de propriedade é que quando uma variável está fora do escopo declarado, o valor é descartado e a memória é desalocada.

// uma variável em um escopo separado
{
deixar exemplo = Corda::from("Aqui está um novo escopo");
}

imprimir!("{}", exemplo)

Você não pode acessar o exemplo variável fora de seu escopo; tentar fazer isso fará com que o compilador entre em pânico.

Propriedade em Funções

Quando você passa um valor para uma função como argumento, a função pode acessar essa variável mesmo que ela não tenha sido declarada em seu escopo:

fnimpressora(valor: Corda) -> Corda {
Retorna valor
}

fna Principal() {
deixar x = Corda::from("Imprime um valor"); // x possui o valor da string

// a propriedade é movida para a função de impressora aqui
imprimir!("{} O Resultado de Imprimir X é que -:", impressora (x));
}

A função pode acessar essa variável porque Rust move a propriedade dela para a função em tempo de compilação.

Você pode pensar que ainda é possível usar a variável posteriormente em seu escopo original:

fnimpressora(valor: Corda) -> Corda {
Retorna valor
}

fna Principal() {
deixar x = Corda::from("Imprime um valor");
imprimir!("{} O Resultado de Imprimir x é que ele -:", impressora (x));

// Tentando usar a variável depois que a propriedade de seu valor foi transferida
println!("{} não deve ser acessível", x)
}

Mas se você tentar isso, o compilador entrará em pânico e se recusará a produzir um executável:

Rust prioriza a reutilização de código

A reutilização de código é uma prática essencial, mas para praticar a reutilização de código você precisa entender as regras de propriedade da Rust.

Rust é uma linguagem de programação muito flexível. Ele fornece conceitos como empréstimo, movimentação, cópia e clonagem de propriedade para reutilização variável.