Date post: | 10-Aug-2015 |
Category: |
Technology |
Upload: | michael-pankov |
View: | 110 times |
Download: | 3 times |
Почему Rust стоит вашего внимания
Панков Михаил
14 мая 2015 г
Панков Михаил Почему Rust стоит вашего внимания
Что такое Rust
Безопасность работы с памятьюБезопасные Java C Python RubyОпасные C C++
Среда исполнения и эффективностьБайт-код большая среда и сборщик мусора Java C Машинный код маленькая среда ручное управлениепамятью C C++
RustБезопасный при этом компилируется в машинный код
Проще встраиватьПроще профилироватьСтатически гарантирует безопасность работы с памятью
Панков Михаил Почему Rust стоит вашего внимания
Что такое Rust (продолжение)
Rust mdash системный язык программирования который быстроработает предотвращает почти все падения и устраняет гонкипо данным
Панков Михаил Почему Rust стоит вашего внимания
Hello World
1 fn main() 2 println(Привет мир)3
Панков Михаил Почему Rust стоит вашего внимания
Детсадовский калькулятор
1 fn main() 2 let program = + + - 3 let mut accumulator = 04 for token in programchars() 5 match token 6 rsquo+rsquo =gt accumulator += 17 rsquo-rsquo =gt accumulator -= 18 rsquorsquo =gt accumulator = 29 rsquorsquo =gt accumulator = 2
10 _ =gt игнорируем всё остальное 11 12 13 println(Программа вычислила значение 14 program accumulator)15
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Что такое Rust
Безопасность работы с памятьюБезопасные Java C Python RubyОпасные C C++
Среда исполнения и эффективностьБайт-код большая среда и сборщик мусора Java C Машинный код маленькая среда ручное управлениепамятью C C++
RustБезопасный при этом компилируется в машинный код
Проще встраиватьПроще профилироватьСтатически гарантирует безопасность работы с памятью
Панков Михаил Почему Rust стоит вашего внимания
Что такое Rust (продолжение)
Rust mdash системный язык программирования который быстроработает предотвращает почти все падения и устраняет гонкипо данным
Панков Михаил Почему Rust стоит вашего внимания
Hello World
1 fn main() 2 println(Привет мир)3
Панков Михаил Почему Rust стоит вашего внимания
Детсадовский калькулятор
1 fn main() 2 let program = + + - 3 let mut accumulator = 04 for token in programchars() 5 match token 6 rsquo+rsquo =gt accumulator += 17 rsquo-rsquo =gt accumulator -= 18 rsquorsquo =gt accumulator = 29 rsquorsquo =gt accumulator = 2
10 _ =gt игнорируем всё остальное 11 12 13 println(Программа вычислила значение 14 program accumulator)15
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Что такое Rust (продолжение)
Rust mdash системный язык программирования который быстроработает предотвращает почти все падения и устраняет гонкипо данным
Панков Михаил Почему Rust стоит вашего внимания
Hello World
1 fn main() 2 println(Привет мир)3
Панков Михаил Почему Rust стоит вашего внимания
Детсадовский калькулятор
1 fn main() 2 let program = + + - 3 let mut accumulator = 04 for token in programchars() 5 match token 6 rsquo+rsquo =gt accumulator += 17 rsquo-rsquo =gt accumulator -= 18 rsquorsquo =gt accumulator = 29 rsquorsquo =gt accumulator = 2
10 _ =gt игнорируем всё остальное 11 12 13 println(Программа вычислила значение 14 program accumulator)15
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Hello World
1 fn main() 2 println(Привет мир)3
Панков Михаил Почему Rust стоит вашего внимания
Детсадовский калькулятор
1 fn main() 2 let program = + + - 3 let mut accumulator = 04 for token in programchars() 5 match token 6 rsquo+rsquo =gt accumulator += 17 rsquo-rsquo =gt accumulator -= 18 rsquorsquo =gt accumulator = 29 rsquorsquo =gt accumulator = 2
10 _ =gt игнорируем всё остальное 11 12 13 println(Программа вычислила значение 14 program accumulator)15
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Детсадовский калькулятор
1 fn main() 2 let program = + + - 3 let mut accumulator = 04 for token in programchars() 5 match token 6 rsquo+rsquo =gt accumulator += 17 rsquo-rsquo =gt accumulator -= 18 rsquorsquo =gt accumulator = 29 rsquorsquo =gt accumulator = 2
10 _ =gt игнорируем всё остальное 11 12 13 println(Программа вычислила значение 14 program accumulator)15
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию
1 let v = vec[1 2 3]2
3 let v2 = v4
5 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Перемещение по умолчанию (продолжение)
1 fn take(v Veclti32gt) 2 что здесь происходит - неважно3 4
5 let v = vec[1 2 3]6
7 take(v)8
9 println(v[0] is v[0])
error use of moved value lsquovlsquoprintln(v[0] is v[0])
^
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память
1 void allocate_new_buffer(size_t number)2 3 return malloc(number sizeof (int))4 5 int main(int argc char argv[])6 7 int numbers = allocate_new_buffer(10)8 for (int i = 0 i lt 10 ++ i) 9 numbers[i] = i
10 11 12 free(numbers)13 14
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Как использовать освобождённую память (продолжение)
1 void allocate_new_buffer(size_t number) 2 int main(int argc char argv[])3 4 int numbers = allocate_new_buffer(10)5 for (int i = 0 i lt 10 ++ i) 6 numbers[i] = i7 8 9 free(numbers)
10 11 for (int i = 0 i lt 10 ++ i) 12 printf(d numbers[i])13 14
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Как обратиться к освобождённой памяти в Rust
1 fn allocate_new_buffer(number usize) -gt Vecltisizegt 2 return Vecwith_capacity(number)3 4 fn main() 5 let mut numbers = allocate_new_buffer(10)6 numbersextend(010)7 8 drop(numbers)9
10 println( numbers)11 ^^^^^^^12 error use of moved value13
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Идиоматичный код на Rust
1 fn main() 2 let numbers Veclt_gt = (010)collect()3 4 println( numbers)5 [0 1 2 3 4 5 6 7 8 9]6 неявный вызов drop(numbers)7
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Заимствование
1 fn main() 2 let mut x = 423 let y = ampmut x4 y = 435 x = 446
511 error cannot assign to lsquoxlsquo because it is borrowedx = 44^~~~~~
319 note borrow of lsquoxlsquo occurs herelet y = ampmut x
^error aborting due to previous error
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость
1 void process(stdstring input)2 3 for (auto i = inputbegin() i = inputend() ++ i) 4 if (i == rsquoorsquo) 5 inputpush_back(rsquozrsquo)6 7 8 stdcout ltlt input9
10 int main(int argc char argv[])11 12 auto string = Hello world13 process(string)14 return 015
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust
1 fn process(input String) 2 for c in inputchars() 3 if c == rsquoorsquo 4 inputpush(rsquozrsquo)5 ^^6 Cannot borrow immutable local variable7 as mutable8 9
10 11
12 fn main() 13 let string = Hello worldto_string()14 process(string)15
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Изменяемость в Rust (продолжение)
1 fn process(mut input String) 2 for c in inputchars() 3 ^^^^^4 previous borrow occurs here5 if c == rsquoorsquo 6 inputpush(rsquozrsquo)7 ^^8 Cannot borrow lsquoinputlsquo as mutable9 because itrsquos also borrowed as immutable
10 11 12 13 fn main() 14 let string = Hello worldto_string()15 process(string)16
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Время жизни
1 struct Fooltrsquoagt 2 x amprsquoa i323 4 fn main() 5 let x -+ x оживает6 |7 |8 let y = amp5 ---+ y оживает9 let f = Foo x y ---+ f оживает
10 x = ampfx | | здесь ошибка11 ---+ f и y умирают12 |13 println( x) |14 -+ x умирает
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Типажи
1 struct Circle 2 x f643 y f644 radius f645 6 trait HasArea 7 fn area(ampself) -gt f648 9 impl HasArea for Circle
10 fn area(ampself) -gt f64 11 stdf64constsPI (selfradius selfradius)12 13
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Обобщённое программирование Ограничения
1 fn print_arealtTgt(shape T) 2 println(Площадь фигуры shapearea())3 4 error type lsquoTlsquo does not implement any method in scope5 named lsquoarealsquo6
7 fn print_arealtT HasAreagt(shape T) 8 println(Площадь фигуры shapearea())9
10 ok
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust
1 pub struct Fd 2 raw_fd c95_tc_int3 4 impl Fd 5 pub fn open(path ampstr) -gt ResultltFd i32gt 6 let c_path = CStringnew(path)unwrap()7 let fd = unsafe 8 posix88_ffcntlopen(c_pathas_ptr()9 posix88_cO_RDONLY 0)
10 as i3211 if fd gt -1000 ampamp fd lt 0 12 return Err(-fd)13 14 Ok(Fd raw_fd fd )15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (продолжение)
1 pub fn raw(ampself) -gt c95_tc_int 2 selfraw_fd3 4 pub fn get_size(ampself) -gt Resultlti64 i32gt 5 6 Ok(file_infost_size)7 8 9 impl Drop for Fd
10 fn drop(ampmut self) 11 unsafe 12 posix88_funistdclose(selfraw_fd)13 14 15
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RAII в Rust (использование)
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd fdFd4 match maybe_fd 5 Ok(f) =gt fd = f6 Err(errno) =gt 7 print_error(8 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))9 return Err(())
10 11 12 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Обрабатываем ошибки идиоматично
1 fn read_print_file(path ampstr) -gt Resultlt() ()gt 2 let maybe_fd = fdFdopen(path)3 let fd = match maybe_fd 4 Ok(f) =gt f5 Err(errno) =gt 6 print_error(7 ampformat(Couldnrsquot open file c_helpersstrerror(errno)))8 return Err(())9
10 11 let mut remaining_file_size = fdget_size()unwrap()
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки
$ ls -l bootmemtest86+elf-rw-r--r-- 1 root root 178176 марта 12 2014 bootmemtest86+elf$ time hd bootmemtest86+elfhd bootmemtest86+elf 011s user 006s system8 cpu 1929 total$ time hexdumphexdump bootmemtest86+elfhexdumphexdump bootmemtest86+elf 006s user 007s system6 cpu 2031 total$ time rexdumprexdump bootmemtest86+elfrexdump bootmemtest86+elf 014s user 007s system10 cpu 2056 total$
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Ложь и бенчмарки (продолжение)
C mdash BSD C mdash моя Rust mdash моя0
02
04
06
08
1
09
отно
ситель
ноебы
стродействие
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Как устроить гонку по данным
1 THREADS = 102 COUNT = 503 $x = 14 THREADStimesmap |t|5 Threadnew 6 COUNTtimes |c|7 a = $x + 18 sleep 00019 puts Thread t wrote a
10 $x = a11 12 13 each(ampjoin)14 puts Got $x = $x
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 0
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 stdthreadspawn(|| 7 for _ in 0count 8 let a = x + 1 error closure borrows x9 stdthreadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Что говорит компилятор
data-racers628 1210 error closure may outlive thecurrent function but it borrows lsquoxlsquowhich is owned by the current function [E0373]
data-racers6 stdthreadspawn(|| data-racers7 for _ in 0count data-racers8 let a = x + 1data-racers9 stdthreadsleep_ms(1)data-racers10 x = adata-racers11
data-racers825 826 note lsquoxlsquo is borrowed heredata-racers8 let a = x + 1
^
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 1
1 fn main() 2 let threads = 103 let count = 504 let mut x = 15 for _ in 0threads 6 threadscoped(|| warning thread will be7 for _ in 0count immideately joined8 let a = x + 19 threadsleep_ms(1)
10 x = a11 12 )13 14 println(The result is x)15
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Потокобезопасный код на Rust попытка 2
1 2 let mut guards VecltJoinGuardlt()gtgt = Vecnew()3 for _ in 0threads 4 let g JoinGuardlt()gt =5 threadscoped(|| 6 for _ in 0count 7 let a = x + 1 error cannot borrow lsquoxlsquo8 threadsleep_ms(1) mutably borrowed9 x = a
10 11 )12 guardspush(g)13 14 drop(guards)15 println(The result is x)
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Рабочий потокобезопасный код на Rust
1 fn main() 2 let threads = 103 let count = 504 let x = ampAtomicUsizenew(1)5 let _ Veclt_gt = (0threads)map(|_| 6 threadscoped(move || 7 for _ in 0count 8 threadsleep_ms(1)9 xfetch_add(1 OrderingSeqCst)
10 11 )12 )collect()13 println(The result is xload(OrderingSeqCst))14
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Тестирование
1 [test]2 fn it_works() 3 assert_eq(4 add_two(2))4
$ cargo testCompiling adder v001 (filehomeyouprojectsadder)
Running targetadder-91b3e234d4ed382arunning 1 testtest it_works oktest result ok 1 passed 0 failed 0 ignored 0 measured
Doc-tests adderrunning 0 teststest result ok 0 passed 0 failed 0 ignored 0 measured
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Бенчмарки
1 [bench]2 fn bench_add_two(b ampmut Bencher) 3 biter(|| add_two(2))4
$ cargo benchCompiling adder v001 (filehomestevetmpadder)
Running targetreleaseadder-91b3e234d4ed382a
running 2 teststest testsit_works ignoredtest testsbench_add_two bench 1 nsiter (+- 0)
test result ok 0 passed 0 failed 1 ignored 1 measured
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Стабильность
master A - B - C - - G - H - I - J - K
beta - Krsquo
stable - Irsquo - Jrsquo - Krsquo | |
100 - Ersquo - Grsquo | || | |
101 - Irsquo | || |
110 ||
111
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Инструменты
Автодополнение с RacerНавигация по коду rusty-tagsПроверка кода в реальном времени flycheck-rust syntastic
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Инфраструктура
Cratesio mdash 2000 контейнеровРазработка языка на GitHubИзменения через RFC из основной команды илисообщества
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Cargo
СборкаЗависимости
CratesiogitCargolockcargo update
ДокументацияТесты бенчмаркиЗаливка на Cratesio
cargo publish
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
IDE mdash RustDT
httpsgithubcomRustDTRustDT
Поддерка CargoАвтодополнение и поиск определенийОтладка
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RustDT Редактор
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RustDT Автодополнение
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
RustDT Отладка
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust
Servo400 тысяч строк кода4-х поточная версия отрисовывает Reddit в 5 раз быстрееGecko (55 против 250 миллисекунд)Pistonhematite mdash клон MinecraftIron84 тысячи запросов в секунду для простейшего сервера
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
84 тысячи запросов в секунду
httpwwwyesodwebcomblog201103preliminary-warp-cross-language-benchmarks
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Кто уже использует Rust (продолжение)
OpenDNSSkylightMaidSafe
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Ресурсы
Книга laquoЯзык программирования Rustraquohttpsgithubcomkgvrust_book_ru
IRC канал на русскомhttpclient00chatmibbitcomserver=ircmozillaorgampchannel=23rust-ru
Русский StackOverflow mdash тег Rusthttprustackoverflowcomquestionstaggedrust
Лента событий на Timepadhttpsrust-v-moskvetimepadru
Веб-интерфейс к компиляторуhttpplayrust-langorg
Домашняя страница со ссылками на англоязычныересурсыhttpwwwrust-langorg
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания
Где найти этот доклад
httpmichaelpankovcomwhy-rust-matterspdf
Панков Михаил Почему Rust стоит вашего внимания