• Nenhum resultado encontrado

Hello World

N/A
N/A
Protected

Academic year: 2022

Share "Hello World"

Copied!
10
0
0

Texto

(1)

Concorrˆ encia sem medo - Rust

Thilo Koch

MAC 5742: Introdu¸c˜ao `a Computa¸c˜ao Paralela e Distribu´ıda Professor Alfredo Goldman Vel Lejbman

IME USP

slides: http://www.ime.usp.br/˜tiko/apresentacao-rust.pdf

12 de junho de 2015

(2)

Introdu¸ c˜ ao

Projeto da Mozilla,

vers˜ao 1.0 em maio 2015,

inicialmente para programa¸c˜ao paralela e distribu´ıda,

agora mais como concorrente de C/C++,

combina controle de baixo n´ıvel sobre desempenho e conveniˆencias de alto n´ıvel,

abstra¸c˜oes com custos zero (tempo de compila¸c˜ao),

garantias de seguran¸ca de mem´oria (unique pointers) - for¸cadas pelo compilador!,

foco na programa¸c˜ao paralela.

(3)

Hello World

Instala¸c˜ao:

$ curl -sf -L https://static.rust-lang.org/rustup.sh | sh

Gerar esqueleto

$ cargo new hello_world --bin

$ cd hello_world

$ tree . .

- Cargo.toml - src

- main.rs

Cargo.toml

[package]

name = "hello_world"

version = "0.1.0"

authors = ["tiko <tiko@ime.usp.br>"]

main.rs

// This is the main function fn main() {

println!("Hello World!");

}

Compilar com rustc (”complainer”)

$ rustc hello.rs

Executar

$ cargo run

Running ‘target/debug/hello_world‘

Hello, world!

(4)

Unique pointers

Mudabilidade faz parte da signature

let a = 1; // immutable per default let a mut = 1; // mutable

Ownership

uma aloca¸c˜ao de mem´oria pertence ao escopo

quando a execu¸c˜ao sai do escopo a mem´oria ´e desalocada

C {

int *x = malloc(sizeof(int));

*x = 5;

free(x);

}

Rust

{

let x = Box::new(5);

}

Rust n˜ao tem destrutores!

(5)

Borrowing

fn main() {

let x = Box::new(5);

add_one(x);

println!("{}", x);

}

fn add_one(mut num: Box<i32>) {

*num += 1;

}

→ Resulta em erro:

error: use of moved value: ‘x‘

println!("{}", x);

fn main() {

let mut x = 5;

add_one(&mut x);

println!("{}", x);

}

fn add_one(num: &mut i32) {

*num += 1;

}

Computa porque ´e apenas um empr´estimo.

(6)

Referˆ encias

E poss´ıvel pedir emprestado:´

v´arias referˆencias para vari´aveis somente para leitura

fn add(x: &i32, y: &i32) -> i32 {

*x + *y }

fn main() {

let x = Box::new(5);

println!("{}", add(&*x, &*x));

println!("{}", add(&*x, &*x));

}

apenas um referˆencias para vari´aveis mud´aveis para escrita (mas n˜ao ao mesmo tempo e n˜ao em combina¸c˜ao com referˆencias de leitura)

fn increment(x: &mut i32) {

*x += 1;

}

fn main() {

let mut x = Box::new(5);

increment(&mut x);

increment(&mut x);

println!("{}", x);

}

existem 7 tipos de ponteiros / referˆencias (inclusive threadsafe).

(7)

Concorrˆ encia

Canais com semˆantica de mandar mensagem como carta

send transfere a ownership

let mut vec = Vec::new();

// do some computation send(&chan, vec);

print_vec(&vec);

->

Error: use of moved value ‘vec‘

existem mutex e locks (data e n˜ao c´odigo) dentro da biblioteca std

outras ferramentas est˜ao em desenvolvimento (bibliotecas)

(8)

A¸c´ ucar sint´ atico

baseado em express˜oes

let y = if x == 5 { 10 } else { 15 };

coment´arios em markdown para a documenta¸c˜ao (rustdoc)

tuplas (lista ordenada com tamanho fixo)

let x: (i32, &str) = (1, "hello");

fn next_two(x: i32) -> (i32, i32) { (x + 1, x + 2) }

match

match x {

1 | 2 => println!("one or two"), 3 => println!("three"),

4 .. 9 => println!("[4,9]") _ => println!("anything"), }

iteradores (iterators) para strings

let a = [0, 1, 2, 3, 4];

for e in a.iter() {

println!("{}", e); // Prints 1, 2, 3 }

Macros (por exemplo println!)

(9)

Aplica¸ c˜ oes

Browser engine (Servo) - projeto da Mozilla

Skylight - analisador de desempenho para aplica¸c˜oes em Rails

M´odulos para o kernel do Linux

Muitas aplica¸c˜oes e bibliotecas ainda em andamento (p2p, web framework, games, ...)

(10)

Fim

The Rust Programming Language http://doc.rust-lang.org/stable/book

Muito obrigado!

Contato: tiko@ime.usp.br

Referências

Documentos relacionados

Then, through multiplanar studies, safety zones were found for insert- ing screw on the lateral mass, following the parameters: anterior height (distance between upper

Não obstante ao custo social sofrido pelos flagelados que se instalaram na capital do estado durante o início do regime Republicano, mais especificamente entre 1900 e 1905, as

Universidade de Brasília um referencial na história da universidade brasileira, criada paralelamente à Lei de Diretrizes e Bases da Educação. As universidades brasileiras chegam

(EF06HI05X) Descrever modificações da natureza e da paisagem realizadas por diferentes tipos de sociedade com destaque para os povos indígenas originários, povos africanos,

Hanyatt fekvés mellett oldalsó középtartás, majd magas tartás.. Haladás

Como contribuições do trabalho, é analisada a influência dos parâmetros de geração do espectrograma e são introduzidas as inovações de filtro de frequências e de gradiente com

Na busca por geração de dados úteis para engenheiros e projetistas, desenvolveu-se este trabalho que foi organizado em dois artigos cujos objetivos foram:

Para determinação das tensões secundárias deve- mos desprezar todos os esforços que provocam tensões primárias, ou seja, devemos informar ao Programa que o peso