Rust Programing Language
Rust Programing Language
Alunos:
João Marcelo Diniz M. da Silva
Histórico
Desenvolvimento (2006 – 2012)
→ Originária de um projeto pessoal de Graydon Hoare, então pesquisador da
Mozilla (2006);
→ Patrocínio da Mozilla para desenvolvimento do Servo (2009);
→ Rust é oficialmente anunciado pela Mozilla (2010);
→ O primeiro compilador foi escrito em OCalm e, posteriormente, em LLVM;
→ Compilador próprio escrito em Rust (2011);
Evolução (2012 – 2019)
→ Versão 0.2 (2012): adição de Classe;
→ Versão 0.3 (2012): adição de “Destructors” e Polimorfismo;
→ Versão 0.4 (2012):
- remoção de Classe, que foram substituídas por Structs;
- adição da tipagem estática e remoção da análise de estado-tipo;
Tamanho: Limpeza:
→ Fixo; → Final do programa
Tempo de Vida:
→ Programa
Regiões de Memória – STACK (pilha)
Conteúdo:
→ Argumento de funções, variáveis locais(escopo);
→ Tamanho de compilação conhecido (tamanho as variáveis);
Tamanho: Limpeza:
→ Dinâmico (tamanho da pilha); → Retorno da função
Tempo de Vida:
→ Função (escopo)
Regiões de Memória – HEAP
Conteúdo:
→ Valores dinâmicos, valores de tamanho dinâmicos (String);
→ Tamanho de compilação desconhecido;
Tamanho: Limpeza:
→ Dinâmico (limite do computador); → R.A.I.I. (drop) [Rust]
Tempo de Vida:
→ A definir pelo programador ou pela linguagem
Borrow Checker
Dangling Pointers → ponteiros que não apontam para nenhum valor ou área de valor;
Data Races → exemplo: uma lista que é alterada por diferentes métodos | problema de
integridade;
Copy e Referência
main () -> STACK HEAP
X 43
y 43
main () -> STACK HEAP
X 43
y
Ownership — Princípios
Borrowing
IV. Referência a valores (&)
main () -> STACK HEAP
nome_1 S(“Diniz”)
main () -> STACK HEAP
nome_1
nome_2 S(“Diniz”)
Em funções
HEAP
main () -> STACK
name
name S(“Diniz”)
Borrowing em funções
HEAP
main () -> STACK
name S(“Diniz”)
&name
Estruturas de controle e repetição
Expressões IF
➔ Em Rust todas as expressões IF começam com a palavra-chave ``if'', seguida por
uma condição e chaves abrindo e fechando o bloco.
➔ Ao contrário de linguagens como Ruby e JavaScript, o Rust não tentará converter
automaticamente tipos não booleanos em booleanos.
Várias condições com If e Else
➔ Embora 6 seja divisível por 2, em Rust o bloco é executado apenas para a primeira
condição verdadeira e, uma vez que encontra uma, nem verifica o resto.
Repetição com Loops
Nas assinaturas de função, você deve declarar o tipo de cada parâmetro. Esta é uma decisão
deliberada no design do Rust.
Declarações e Expressões
Funções com valores de retorno