SlideShare una empresa de Scribd logo
1 de 127
Descargar para leer sin conexión
Въведение Rust? TDD Памет ООП Заключение
Rust
за практичния програмист
Петко Борджуков
PlovdivConf
6 юли 2013 г.
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
занимава се с Ruby и Rails
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
занимава се с Ruby и Rails
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
занимава се с Ruby и Rails
@ignisf
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
занимава се с Ruby и Rails
@ignisf
http://gplus.to/ignisf
Въведение Rust? TDD Памет ООП Заключение
За лектора
Петко
занимава се с Ruby и Rails
@ignisf
http://gplus.to/ignisf
https://github.com/ignisf
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Започнат през 2006 г. като личен проект на Грейдън
Хауър, служител на Mozilla
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Започнат през 2006 г. като личен проект на Грейдън
Хауър, служител на Mozilla
Mozilla се включва през 2009 г.
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Започнат през 2006 г. като личен проект на Грейдън
Хауър, служител на Mozilla
Mozilla се включва през 2009 г.
Първа алфа на компилатора през януари 2012 г.
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Започнат през 2006 г. като личен проект на Грейдън
Хауър, служител на Mozilla
Mozilla се включва през 2009 г.
Първа алфа на компилатора през януари 2012 г.
Версия 0.7 – преди няколко дни
Въведение Rust? TDD Памет ООП Заключение
Кратката история на Rust
Започнат през 2006 г. като личен проект на Грейдън
Хауър, служител на Mozilla
Mozilla се включва през 2009 г.
Първа алфа на компилатора през януари 2012 г.
Версия 0.7 – преди няколко дни
Стабилна версия – до края на годината
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Компилируем
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Компилируем
Функционален (горе-долу)
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Компилируем
Функционален (горе-долу)
Конкурентен (по модела на актьорите)
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Компилируем
Функционален (горе-долу)
Конкурентен (по модела на актьорите)
Императивно-процедурен
Въведение Rust? TDD Памет ООП Заключение
Парадигми
Компилируем
Функционален (горе-долу)
Конкурентен (по модела на актьорите)
Императивно-процедурен
Обектно ориентиран
Въведение Rust? TDD Памет ООП Заключение
Фокус върху
Въведение Rust? TDD Памет ООП Заключение
Фокус върху
Type safety
Въведение Rust? TDD Памет ООП Заключение
Фокус върху
Type safety
Memory safety
Въведение Rust? TDD Памет ООП Заключение
Фокус върху
Type safety
Memory safety
Concurrency
Въведение Rust? TDD Памет ООП Заключение
Фокус върху
Type safety
Memory safety
Concurrency
Performance
Въведение Rust? TDD Памет ООП Заключение
Практична функционалност от по-високо ниво
Въведение Rust? TDD Памет ООП Заключение
Практична функционалност от по-високо ниво
Type inferrence
Въведение Rust? TDD Памет ООП Заключение
Практична функционалност от по-високо ниво
Type inferrence
Safe task-based concurrency
Въведение Rust? TDD Памет ООП Заключение
Практична функционалност от по-високо ниво
Type inferrence
Safe task-based concurrency
Функции от по-висок ред
Въведение Rust? TDD Памет ООП Заключение
Практична функционалност от по-високо ниво
Type inferrence
Safe task-based concurrency
Функции от по-висок ред
Полиморфизъм
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Конкурентността!!1
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Конкурентността!!1
Гаранциите за сигурност
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Конкурентността!!1
Гаранциите за сигурност
Много променливи състояния
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Конкурентността!!1
Гаранциите за сигурност
Много променливи състояния
Бавен е
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е кофти в Ruby?
Конкурентността
Конкурентността!!1
Гаранциите за сигурност
Много променливи състояния
Бавен е
Сложен е (семантиката на Smalltalk се събира на листче)
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Тове, че е функционален
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Тове, че е функционален
Синтаксисът е горе-долу лесен
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Тове, че е функционален
Синтаксисът е горе-долу лесен
Прави разработчиците щастливи.
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Тове, че е функционален
Синтаксисът е горе-долу лесен
Прави разработчиците щастливи.
Програмира се бързо с него
Въведение Rust? TDD Памет ООП Заключение
Защо да се интересуваме от Rust?
Какво е яко в Ruby?
Блоковете
Тове, че е функционален
Синтаксисът е горе-долу лесен
Прави разработчиците щастливи.
Програмира се бързо с него
Динамично типизиран е
Въведение Rust? TDD Памет ООП Заключение
Популярният пример
Въведение Rust? TDD Памет ООП Заключение
Популярният пример
Hello World
fn main () {
println("hello?");
}
Въведение Rust? TDD Памет ООП Заключение
Популярният пример
Hello World
fn main () {
println("hello?");
}
Прилича ли ви на нещо познато?
Въведение Rust? TDD Памет ООП Заключение
Още познати неща
Въведение Rust? TDD Памет ООП Заключение
Още познати неща
Parallel Hello World
fn main ( ) {
for 1 0 . t i m e s {
do spawn {
l e t greeting_message = " Hello ? " ;
p r i n t l n ( greeting_message ) ;
}
}
}
Въведение Rust? TDD Памет ООП Заключение
Още познати неща
Parallel Hello World
fn main ( ) {
for 1 0 . t i m e s {
do spawn {
l e t greeting_message = " Hello ? " ;
p r i n t l n ( greeting_message ) ;
}
}
}
Познато?
1 0 . t i m e s do
Thread . new do
greeting_message = " Hello ? "
puts greeting_message
end
end
Въведение Rust? TDD Памет ООП Заключение
Приличия между Ruby и Rust
Променливите са в snake_case
Въведение Rust? TDD Памет ООП Заключение
Приличия между Ruby и Rust
Променливите са в snake_case
Имаме блокове, които използват {}
Въведение Rust? TDD Памет ООП Заключение
Приличия между Ruby и Rust
Променливите са в snake_case
Имаме блокове, които използват {}
Въпреки че промеливите са статични типизирани, имаме
type inferrence, така че няма нужда да декларираме типове
Въведение Rust? TDD Памет ООП Заключение
Приличия между Ruby и Rust
Променливите са в snake_case
Имаме блокове, които използват {}
Въпреки че промеливите са статични типизирани, имаме
type inferrence, така че няма нужда да декларираме типове
Ще видим още прилики по-нататък
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Компилаторът ни се кара повече, ако сгрешим
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Компилаторът ни се кара повече, ако сгрешим
При писане на Rust трябва да се следва PEP8 Style Guide
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Компилаторът ни се кара повече, ако сгрешим
При писане на Rust трябва да се следва PEP8 Style Guide
ВСИЧКО е immutable по подразбиране.
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Компилаторът ни се кара повече, ако сгрешим
При писане на Rust трябва да се следва PEP8 Style Guide
ВСИЧКО е immutable по подразбиране.
Въведение Rust? TDD Памет ООП Заключение
Различия между Ruby и Rust
; (почти) навсякъде
Нямаме блокове, които използват do и end
Малко по-различен синтаксис за дефиниране на функция:
fn вместо def
Понеже нямаме do и end, използваме {} навсякъде
Компилаторът ни се кара повече, ако сгрешим
При писане на Rust трябва да се следва PEP8 Style Guide
ВСИЧКО е immutable по подразбиране. Да, дори
променливите
Въведение Rust? TDD Памет ООП Заключение
Фреймуърк за тестване
В Rust има вграден прост фреймуърк за писане на unit тестове.
Въведение Rust? TDD Памет ООП Заключение
Фреймуърк за тестване
В Rust има вграден прост фреймуърк за писане на unit тестове.
Не е RSpec, но хайде да не бъдем претенциозни...
Въведение Rust? TDD Памет ООП Заключение
Фреймуърк за тестване
В Rust има вграден прост фреймуърк за писане на unit тестове.
Не е RSpec, но хайде да не бъдем претенциозни...
testing.rs
#[test]
fn this_tests_code () {
println("")
}
Въведение Rust? TDD Памет ООП Заключение
След това компилираме тестовете и ги пускаме с командата
$ rustc --test testing.rs
$ ./ testing
Въведение Rust? TDD Памет ООП Заключение
След това компилираме тестовете и ги пускаме с командата
$ rustc --test testing.rs
$ ./ testing
На екрана ще се изведе нещо такова:
$ ./ testing
running 1 test
test this_tests_code ... ok
result: ok. 1 passed; 0 failed; 0 ignored
$
Въведение Rust? TDD Памет ООП Заключение
Управление на паметта
Спорно най-голямото преимущество на Rust
Въведение Rust? TDD Памет ООП Заключение
Управление на паметта
Спорно най-голямото преимущество на Rust
Както и най-сложното за овладяване
Въведение Rust? TDD Памет ООП Заключение
Управление на паметта
Спорно най-голямото преимущество на Rust
Както и най-сложното за овладяване
Rust e garbage collected
Въведение Rust? TDD Памет ООП Заключение
Управление на паметта
Спорно най-голямото преимущество на Rust
Както и най-сложното за овладяване
Rust e garbage collected
Aко искаме да е
Въведение Rust? TDD Памет ООП Заключение
Инструменти за управление на паметта
Три вида указатели
Въведение Rust? TDD Памет ООП Заключение
Инструменти за управление на паметта
Три вида указатели
Управлявани кутии (Managed boxes): let x = @10;
Въведение Rust? TDD Памет ООП Заключение
Инструменти за управление на паметта
Три вида указатели
Управлявани кутии (Managed boxes): let x = @10;
Собствени кутии (Owned boxes): let x = ∼ 10;
Въведение Rust? TDD Памет ООП Заключение
Инструменти за управление на паметта
Три вида указатели
Управлявани кутии (Managed boxes): let x = @10;
Собствени кутии (Owned boxes): let x = ∼ 10;
Указатели на заем (Borrowed pointers): Означават се с &
Въведение Rust? TDD Памет ООП Заключение
Инструменти за управление на паметта
Три вида указатели
Управлявани кутии (Managed boxes): let x = @10;
Собствени кутии (Owned boxes): let x = ∼ 10;
Указатели на заем (Borrowed pointers): Означават се с &
Небезопасни блокове и функции
Въведение Rust? TDD Памет ООП Заключение
Структури
Въведение Rust? TDD Памет ООП Заключение
Структури
Структурите се използват за
”
пакетиране“ на стойности:
Въведение Rust? TDD Памет ООП Заключение
Структури
Структурите се използват за
”
пакетиране“ на стойности:
Структура
struct Monster {
health: int ,
attack: int
}
fn main () {
let m = Monster { health: 10, attack: 20 };
println(int:: to_str(m.health ));
println(int:: to_str(m.attack ));
}
Въведение Rust? TDD Памет ООП Заключение
Когато компилираме и изпълним предния код, на екранът ще
се изведе:
$ rust run dwemthysarray.rs
10
20
$
Въведение Rust? TDD Памет ООП Заключение
Когато компилираме и изпълним предния код, на екранът ще
се изведе:
$ rust run dwemthysarray.rs
10
20
$
Ако пък подадем структурата на fmt!, използвайки формата
%?:
Въведение Rust? TDD Памет ООП Заключение
Когато компилираме и изпълним предния код, на екранът ще
се изведе:
$ rust run dwemthysarray.rs
10
20
$
Ако пък подадем структурата на fmt!, използвайки формата
%?:
$ rust run dwemthysarray.rs
{health: 10, attack: 20}
$
Въведение Rust? TDD Памет ООП Заключение
Когато компилираме и изпълним предния код, на екранът ще
се изведе:
$ rust run dwemthysarray.rs
10
20
$
Ако пък подадем структурата на fmt!, използвайки формата
%?:
$ rust run dwemthysarray.rs
{health: 10, attack: 20}
$
Яко!
Въведение Rust? TDD Памет ООП Заключение
Методи
Методите, са функции, които приемат първи аргумент с име
self.
Въведение Rust? TDD Памет ООП Заключение
Методи
Методите, са функции, които приемат първи аргумент с име
self. Python anyone?
Въведение Rust? TDD Памет ООП Заключение
Методи
Методите, са функции, които приемат първи аргумент с име
self. Python anyone?
Имплементация на метод
struct Monster {
h e a l t h : int ,
a t t a c k : int
}
impl Monster {
fn a t t a c k (& s e l f ) {
p r i n t l n ( fmt ! ( " The ␣ m o n s t e r ␣ a t t a c k s ␣ for ␣ % d ␣ damage . " , s e l f . a t t a c k ) ) ;
}
}
fn main ( ) {
l e t m = Monster { h e a l t h : 10 , a t t a c k : 20 } ;
m. a t t a c k ( ) ;
}
Въведение Rust? TDD Памет ООП Заключение
Методи
Това ще ни върне
$ rust run dwemthysarray.rs
The monster attacks for 20 damage.
$
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Аналог на класовите методи в Ruby и статичните методи в
Ява.
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Аналог на класовите методи в Ruby и статичните методи в
Ява.
Дефинираме ги като метод, само че без self за първи
аргумент.
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Аналог на класовите методи в Ruby и статичните методи в
Ява.
Дефинираме ги като метод, само че без self за първи
аргумент.
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Аналог на класовите методи в Ruby и статичните методи в
Ява.
Дефинираме ги като метод, само че без self за първи
аргумент.
Асоциирана функция
impl Monster {
fn count () {
println("There␣are␣lots␣of␣monsters.");
}
}
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Асоциираните функции намират приложение при
имплементирането на конструктор в Rust.
Въведение Rust? TDD Памет ООП Заключение
Асоциирани функции
Асоциираните функции намират приложение при
имплементирането на конструктор в Rust.
Конструктор
struct Monster {
h e a l t h : int ,
a t t a c k : int
}
impl Monster {
fn a t t a c k (& s e l f ) {
p r i n t l n ( fmt ! ( " The ␣ m o n s t e r ␣ a t t a c k s ␣ for ␣ % d ␣ damage . " , s e l f . a t t a c k ) ) ;
}
fn new ( h e a l t h : int , a t t a c k : int ) −> Monster {
Monster { h e a l t h : h e a l t h , a t t a c k : a t t a c k }
}
}
fn main ( ) {
Monster : : new (20 , 4 0 ) . a t t a c k ( ) ;
}
Въведение Rust? TDD Памет ООП Заключение
Типажи и обобщения (Traits & Generics)
Нещо средно между миксин и интерфейс.
Въведение Rust? TDD Памет ООП Заключение
Типажи и обобщения (Traits & Generics)
Нещо средно между миксин и интерфейс. Абстрактен
клас?
Въведение Rust? TDD Памет ООП Заключение
Типажи и обобщения (Traits & Generics)
Нещо средно между миксин и интерфейс. Абстрактен
клас?
Чрез тях се постига полиморфизъм в Rust
Въведение Rust? TDD Памет ООП Заключение
Лирическо отклонение
Аналогът на списъците в Ruby в Rust са векторите.
Не са хетерогенни като в Ruby
Въведение Rust? TDD Памет ООП Заключение
Лирическо отклонение
Аналогът на списъците в Ruby в Rust са векторите.
Не са хетерогенни като в Ruby
Immutable по подразбиране като всичко останало
Въведение Rust? TDD Памет ООП Заключение
Лирическо отклонение
Аналогът на списъците в Ruby в Rust са векторите.
Не са хетерогенни като в Ruby
Immutable по подразбиране като всичко останало
Дефинирани са им алгебрични оператори като в Ruby
Въведение Rust? TDD Памет ООП Заключение
Лирическо отклонение
Аналогът на списъците в Ruby в Rust са векторите.
Не са хетерогенни като в Ruby
Immutable по подразбиране като всичко останало
Дефинирани са им алгебрични оператори като в Ruby
Въведение Rust? TDD Памет ООП Заключение
Лирическо отклонение
Аналогът на списъците в Ruby в Rust са векторите.
Не са хетерогенни като в Ruby
Immutable по подразбиране като всичко останало
Дефинирани са им алгебрични оператори като в Ruby
Вектори
fn main () {
l e t your_numbers = @[ 1 , 2 , 3 ] ;
l e t my_numbers = @[ 4 , 5 , 6 ] ;
l e t our_numbers = your_numbers + my_numbers ;
p r i n t l n ( fmt ! ( "The␣third␣number␣is␣%d." ,
our_numbers [ 2 ] ) )
}
Въведение Rust? TDD Памет ООП Заключение
Trait
fn print_vec <T: ToStr >(v: &[T]) {
for v.each |&i| {
println(i.to_str ())
}
}
fn main () {
let vec = [1,2,3];
print_vec(vec);
let str_vec = [~"hey", ~"there", ~"yo"];
print_vec(str_vec );
}
Въведение Rust? TDD Памет ООП Заключение
Operator Overloading
Едно време ми се наложи да рисувам ето тази красота:
Въведение Rust? TDD Памет ООП Заключение
Operator Overloading
Едно време ми се наложи да рисувам ето тази красота:
Въведение Rust? TDD Памет ООП Заключение
Operator Overloading
Едно време ми се наложи да рисувам ето тази красота:
Нарича се
”
Аполониева гарнитура“ и е фрактал.
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Центровете и радиусите на окръжностите се изчисляват с
теоремата на Декарт.
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Центровете и радиусите на окръжностите се изчисляват с
теоремата на Декарт.
Нека центъра на окръжност zj е комплексно число (т.е.
zj = xj + i yj ).
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Центровете и радиусите на окръжностите се изчисляват с
теоремата на Декарт.
Нека центъра на окръжност zj е комплексно число (т.е.
zj = xj + i yj ).
Нека кривата kj е реципрочното число на дължината на
радиуса на окръжността.
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Центровете и радиусите на окръжностите се изчисляват с
теоремата на Декарт.
Нека центъра на окръжност zj е комплексно число (т.е.
zj = xj + i yj ).
Нека кривата kj е реципрочното число на дължината на
радиуса на окръжността.
Въведение Rust? TDD Памет ООП Заключение
Сега няма да се плашите.
Центровете и радиусите на окръжностите се изчисляват с
теоремата на Декарт.
Нека центъра на окръжност zj е комплексно число (т.е.
zj = xj + i yj ).
Нека кривата kj е реципрочното число на дължината на
радиуса на окръжността.
Тогава центъра на допираща се до четири други окръжности
окръжност намираме така:
Следствие от комплексната декартова теорема
z4 =
2(zmkm + z2k2 + z3k3) − z1k1
k4
Въведение Rust? TDD Памет ООП Заключение
Фракталите с окръжности са ГАДНИ.
Въведение Rust? TDD Памет ООП Заключение
Фракталите с окръжности са ГАДНИ.
Сериозно.
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Сега вече не съм толкова млад.
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Сега вече не съм толкова млад.
Ето какво се получи:
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Сега вече не съм толкова млад.
Ето какво се получи:
Java
public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 ,
S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){
Complex z = m. z ( ) . m u l t i p l y (m. k )
. add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) )
. add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) )
. m u l t i p l y ( 2 )
. s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) )
. d i v i d e ( new Complex ( k , 0 ) ) ;
return z ;
}
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Сега вече не съм толкова млад.
Ето какво се получи:
Java
public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 ,
S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){
Complex z = m. z ( ) . m u l t i p l y (m. k )
. add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) )
. add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) )
. m u l t i p l y ( 2 )
. s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) )
. d i v i d e ( new Complex ( k , 0 ) ) ;
return z ;
}
Приоритетът на операциите е пълна боза.
Въведение Rust? TDD Памет ООП Заключение
Бях млад и глупав и реших да имплементирам предната
формула на Java.
Сега вече не съм толкова млад.
Ето какво се получи:
Java
public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 ,
S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){
Complex z = m. z ( ) . m u l t i p l y (m. k )
. add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) )
. add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) )
. m u l t i p l y ( 2 )
. s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) )
. d i v i d e ( new Complex ( k , 0 ) ) ;
return z ;
}
Приоритетът на операциите е пълна боза.
Освен това... .add(), .multipy(), .divide()...
Въведение Rust? TDD Памет ООП Заключение
Въведение Rust? TDD Памет ООП Заключение
Ето как може да стане на Rust:
Въведение Rust? TDD Памет ООП Заключение
Ето как може да стане на Rust:
Rust
fn get_daughter_center (m: C i r c l e , a1 : C i r c l e , a2 : C i r c l e ,
a3 : C i r c l e , k : float ) −> Cmplx<float> {
l e t ( p , q ) = (~Cmplx : : new ( 2 . 0 , 0 . 0 ) , ~Cmplx : : new ( k , 0 . 0 ) ) ;
( (m. z ∗ m. k + a2 . z ∗ a2 . k + a3 . z ∗ a3 . k ) ∗ ∗p − a1 . z ∗ a1 . k ) / ∗q
}
Въведение Rust? TDD Памет ООП Заключение
Ето как може да стане на Rust:
Rust
fn get_daughter_center (m: C i r c l e , a1 : C i r c l e , a2 : C i r c l e ,
a3 : C i r c l e , k : float ) −> Cmplx<float> {
l e t ( p , q ) = (~Cmplx : : new ( 2 . 0 , 0 . 0 ) , ~Cmplx : : new ( k , 0 . 0 ) ) ;
( (m. z ∗ m. k + a2 . z ∗ a2 . k + a3 . z ∗ a3 . k ) ∗ ∗p − a1 . z ∗ a1 . k ) / ∗q
}
Пак е рунтаво, но е далеч по-четимо и по-лесно за дебъг от
предишното.
Въведение Rust? TDD Памет ООП Заключение
Заключение
Въведение Rust? TDD Памет ООП Заключение
БЛАГОДАРЯ!

Más contenido relacionado

Destacado

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 

Destacado (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

Rust

  • 1. Въведение Rust? TDD Памет ООП Заключение Rust за практичния програмист Петко Борджуков PlovdivConf 6 юли 2013 г.
  • 2. Въведение Rust? TDD Памет ООП Заключение За лектора Петко
  • 3. Въведение Rust? TDD Памет ООП Заключение За лектора Петко занимава се с Ruby и Rails
  • 4. Въведение Rust? TDD Памет ООП Заключение За лектора Петко занимава се с Ruby и Rails
  • 5. Въведение Rust? TDD Памет ООП Заключение За лектора Петко занимава се с Ruby и Rails @ignisf
  • 6. Въведение Rust? TDD Памет ООП Заключение За лектора Петко занимава се с Ruby и Rails @ignisf http://gplus.to/ignisf
  • 7. Въведение Rust? TDD Памет ООП Заключение За лектора Петко занимава се с Ruby и Rails @ignisf http://gplus.to/ignisf https://github.com/ignisf
  • 8. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust
  • 9. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust Започнат през 2006 г. като личен проект на Грейдън Хауър, служител на Mozilla
  • 10. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust Започнат през 2006 г. като личен проект на Грейдън Хауър, служител на Mozilla Mozilla се включва през 2009 г.
  • 11. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust Започнат през 2006 г. като личен проект на Грейдън Хауър, служител на Mozilla Mozilla се включва през 2009 г. Първа алфа на компилатора през януари 2012 г.
  • 12. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust Започнат през 2006 г. като личен проект на Грейдън Хауър, служител на Mozilla Mozilla се включва през 2009 г. Първа алфа на компилатора през януари 2012 г. Версия 0.7 – преди няколко дни
  • 13. Въведение Rust? TDD Памет ООП Заключение Кратката история на Rust Започнат през 2006 г. като личен проект на Грейдън Хауър, служител на Mozilla Mozilla се включва през 2009 г. Първа алфа на компилатора през януари 2012 г. Версия 0.7 – преди няколко дни Стабилна версия – до края на годината
  • 14. Въведение Rust? TDD Памет ООП Заключение Парадигми
  • 15. Въведение Rust? TDD Памет ООП Заключение Парадигми Компилируем
  • 16. Въведение Rust? TDD Памет ООП Заключение Парадигми Компилируем Функционален (горе-долу)
  • 17. Въведение Rust? TDD Памет ООП Заключение Парадигми Компилируем Функционален (горе-долу) Конкурентен (по модела на актьорите)
  • 18. Въведение Rust? TDD Памет ООП Заключение Парадигми Компилируем Функционален (горе-долу) Конкурентен (по модела на актьорите) Императивно-процедурен
  • 19. Въведение Rust? TDD Памет ООП Заключение Парадигми Компилируем Функционален (горе-долу) Конкурентен (по модела на актьорите) Императивно-процедурен Обектно ориентиран
  • 20. Въведение Rust? TDD Памет ООП Заключение Фокус върху
  • 21. Въведение Rust? TDD Памет ООП Заключение Фокус върху Type safety
  • 22. Въведение Rust? TDD Памет ООП Заключение Фокус върху Type safety Memory safety
  • 23. Въведение Rust? TDD Памет ООП Заключение Фокус върху Type safety Memory safety Concurrency
  • 24. Въведение Rust? TDD Памет ООП Заключение Фокус върху Type safety Memory safety Concurrency Performance
  • 25. Въведение Rust? TDD Памет ООП Заключение Практична функционалност от по-високо ниво
  • 26. Въведение Rust? TDD Памет ООП Заключение Практична функционалност от по-високо ниво Type inferrence
  • 27. Въведение Rust? TDD Памет ООП Заключение Практична функционалност от по-високо ниво Type inferrence Safe task-based concurrency
  • 28. Въведение Rust? TDD Памет ООП Заключение Практична функционалност от по-високо ниво Type inferrence Safe task-based concurrency Функции от по-висок ред
  • 29. Въведение Rust? TDD Памет ООП Заключение Практична функционалност от по-високо ниво Type inferrence Safe task-based concurrency Функции от по-висок ред Полиморфизъм
  • 30. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby?
  • 31. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността
  • 32. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността Конкурентността!!1
  • 33. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността Конкурентността!!1 Гаранциите за сигурност
  • 34. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността Конкурентността!!1 Гаранциите за сигурност Много променливи състояния
  • 35. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността Конкурентността!!1 Гаранциите за сигурност Много променливи състояния Бавен е
  • 36. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е кофти в Ruby? Конкурентността Конкурентността!!1 Гаранциите за сигурност Много променливи състояния Бавен е Сложен е (семантиката на Smalltalk се събира на листче)
  • 37. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby?
  • 38. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете
  • 39. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете Тове, че е функционален
  • 40. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете Тове, че е функционален Синтаксисът е горе-долу лесен
  • 41. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете Тове, че е функционален Синтаксисът е горе-долу лесен Прави разработчиците щастливи.
  • 42. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете Тове, че е функционален Синтаксисът е горе-долу лесен Прави разработчиците щастливи. Програмира се бързо с него
  • 43. Въведение Rust? TDD Памет ООП Заключение Защо да се интересуваме от Rust? Какво е яко в Ruby? Блоковете Тове, че е функционален Синтаксисът е горе-долу лесен Прави разработчиците щастливи. Програмира се бързо с него Динамично типизиран е
  • 44. Въведение Rust? TDD Памет ООП Заключение Популярният пример
  • 45. Въведение Rust? TDD Памет ООП Заключение Популярният пример Hello World fn main () { println("hello?"); }
  • 46. Въведение Rust? TDD Памет ООП Заключение Популярният пример Hello World fn main () { println("hello?"); } Прилича ли ви на нещо познато?
  • 47. Въведение Rust? TDD Памет ООП Заключение Още познати неща
  • 48. Въведение Rust? TDD Памет ООП Заключение Още познати неща Parallel Hello World fn main ( ) { for 1 0 . t i m e s { do spawn { l e t greeting_message = " Hello ? " ; p r i n t l n ( greeting_message ) ; } } }
  • 49. Въведение Rust? TDD Памет ООП Заключение Още познати неща Parallel Hello World fn main ( ) { for 1 0 . t i m e s { do spawn { l e t greeting_message = " Hello ? " ; p r i n t l n ( greeting_message ) ; } } } Познато? 1 0 . t i m e s do Thread . new do greeting_message = " Hello ? " puts greeting_message end end
  • 50. Въведение Rust? TDD Памет ООП Заключение Приличия между Ruby и Rust Променливите са в snake_case
  • 51. Въведение Rust? TDD Памет ООП Заключение Приличия между Ruby и Rust Променливите са в snake_case Имаме блокове, които използват {}
  • 52. Въведение Rust? TDD Памет ООП Заключение Приличия между Ruby и Rust Променливите са в snake_case Имаме блокове, които използват {} Въпреки че промеливите са статични типизирани, имаме type inferrence, така че няма нужда да декларираме типове
  • 53. Въведение Rust? TDD Памет ООП Заключение Приличия между Ruby и Rust Променливите са в snake_case Имаме блокове, които използват {} Въпреки че промеливите са статични типизирани, имаме type inferrence, така че няма нужда да декларираме типове Ще видим още прилики по-нататък
  • 54. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде
  • 55. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end
  • 56. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def
  • 57. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде
  • 58. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде Компилаторът ни се кара повече, ако сгрешим
  • 59. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде Компилаторът ни се кара повече, ако сгрешим При писане на Rust трябва да се следва PEP8 Style Guide
  • 60. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде Компилаторът ни се кара повече, ако сгрешим При писане на Rust трябва да се следва PEP8 Style Guide ВСИЧКО е immutable по подразбиране.
  • 61. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде Компилаторът ни се кара повече, ако сгрешим При писане на Rust трябва да се следва PEP8 Style Guide ВСИЧКО е immutable по подразбиране.
  • 62. Въведение Rust? TDD Памет ООП Заключение Различия между Ruby и Rust ; (почти) навсякъде Нямаме блокове, които използват do и end Малко по-различен синтаксис за дефиниране на функция: fn вместо def Понеже нямаме do и end, използваме {} навсякъде Компилаторът ни се кара повече, ако сгрешим При писане на Rust трябва да се следва PEP8 Style Guide ВСИЧКО е immutable по подразбиране. Да, дори променливите
  • 63. Въведение Rust? TDD Памет ООП Заключение Фреймуърк за тестване В Rust има вграден прост фреймуърк за писане на unit тестове.
  • 64. Въведение Rust? TDD Памет ООП Заключение Фреймуърк за тестване В Rust има вграден прост фреймуърк за писане на unit тестове. Не е RSpec, но хайде да не бъдем претенциозни...
  • 65. Въведение Rust? TDD Памет ООП Заключение Фреймуърк за тестване В Rust има вграден прост фреймуърк за писане на unit тестове. Не е RSpec, но хайде да не бъдем претенциозни... testing.rs #[test] fn this_tests_code () { println("") }
  • 66. Въведение Rust? TDD Памет ООП Заключение След това компилираме тестовете и ги пускаме с командата $ rustc --test testing.rs $ ./ testing
  • 67. Въведение Rust? TDD Памет ООП Заключение След това компилираме тестовете и ги пускаме с командата $ rustc --test testing.rs $ ./ testing На екрана ще се изведе нещо такова: $ ./ testing running 1 test test this_tests_code ... ok result: ok. 1 passed; 0 failed; 0 ignored $
  • 68. Въведение Rust? TDD Памет ООП Заключение Управление на паметта Спорно най-голямото преимущество на Rust
  • 69. Въведение Rust? TDD Памет ООП Заключение Управление на паметта Спорно най-голямото преимущество на Rust Както и най-сложното за овладяване
  • 70. Въведение Rust? TDD Памет ООП Заключение Управление на паметта Спорно най-голямото преимущество на Rust Както и най-сложното за овладяване Rust e garbage collected
  • 71. Въведение Rust? TDD Памет ООП Заключение Управление на паметта Спорно най-голямото преимущество на Rust Както и най-сложното за овладяване Rust e garbage collected Aко искаме да е
  • 72. Въведение Rust? TDD Памет ООП Заключение Инструменти за управление на паметта Три вида указатели
  • 73. Въведение Rust? TDD Памет ООП Заключение Инструменти за управление на паметта Три вида указатели Управлявани кутии (Managed boxes): let x = @10;
  • 74. Въведение Rust? TDD Памет ООП Заключение Инструменти за управление на паметта Три вида указатели Управлявани кутии (Managed boxes): let x = @10; Собствени кутии (Owned boxes): let x = ∼ 10;
  • 75. Въведение Rust? TDD Памет ООП Заключение Инструменти за управление на паметта Три вида указатели Управлявани кутии (Managed boxes): let x = @10; Собствени кутии (Owned boxes): let x = ∼ 10; Указатели на заем (Borrowed pointers): Означават се с &
  • 76. Въведение Rust? TDD Памет ООП Заключение Инструменти за управление на паметта Три вида указатели Управлявани кутии (Managed boxes): let x = @10; Собствени кутии (Owned boxes): let x = ∼ 10; Указатели на заем (Borrowed pointers): Означават се с & Небезопасни блокове и функции
  • 77. Въведение Rust? TDD Памет ООП Заключение Структури
  • 78. Въведение Rust? TDD Памет ООП Заключение Структури Структурите се използват за ” пакетиране“ на стойности:
  • 79. Въведение Rust? TDD Памет ООП Заключение Структури Структурите се използват за ” пакетиране“ на стойности: Структура struct Monster { health: int , attack: int } fn main () { let m = Monster { health: 10, attack: 20 }; println(int:: to_str(m.health )); println(int:: to_str(m.attack )); }
  • 80. Въведение Rust? TDD Памет ООП Заключение Когато компилираме и изпълним предния код, на екранът ще се изведе: $ rust run dwemthysarray.rs 10 20 $
  • 81. Въведение Rust? TDD Памет ООП Заключение Когато компилираме и изпълним предния код, на екранът ще се изведе: $ rust run dwemthysarray.rs 10 20 $ Ако пък подадем структурата на fmt!, използвайки формата %?:
  • 82. Въведение Rust? TDD Памет ООП Заключение Когато компилираме и изпълним предния код, на екранът ще се изведе: $ rust run dwemthysarray.rs 10 20 $ Ако пък подадем структурата на fmt!, използвайки формата %?: $ rust run dwemthysarray.rs {health: 10, attack: 20} $
  • 83. Въведение Rust? TDD Памет ООП Заключение Когато компилираме и изпълним предния код, на екранът ще се изведе: $ rust run dwemthysarray.rs 10 20 $ Ако пък подадем структурата на fmt!, използвайки формата %?: $ rust run dwemthysarray.rs {health: 10, attack: 20} $ Яко!
  • 84. Въведение Rust? TDD Памет ООП Заключение Методи Методите, са функции, които приемат първи аргумент с име self.
  • 85. Въведение Rust? TDD Памет ООП Заключение Методи Методите, са функции, които приемат първи аргумент с име self. Python anyone?
  • 86. Въведение Rust? TDD Памет ООП Заключение Методи Методите, са функции, които приемат първи аргумент с име self. Python anyone? Имплементация на метод struct Monster { h e a l t h : int , a t t a c k : int } impl Monster { fn a t t a c k (& s e l f ) { p r i n t l n ( fmt ! ( " The ␣ m o n s t e r ␣ a t t a c k s ␣ for ␣ % d ␣ damage . " , s e l f . a t t a c k ) ) ; } } fn main ( ) { l e t m = Monster { h e a l t h : 10 , a t t a c k : 20 } ; m. a t t a c k ( ) ; }
  • 87. Въведение Rust? TDD Памет ООП Заключение Методи Това ще ни върне $ rust run dwemthysarray.rs The monster attacks for 20 damage. $
  • 88. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции
  • 89. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Аналог на класовите методи в Ruby и статичните методи в Ява.
  • 90. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Аналог на класовите методи в Ruby и статичните методи в Ява. Дефинираме ги като метод, само че без self за първи аргумент.
  • 91. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Аналог на класовите методи в Ruby и статичните методи в Ява. Дефинираме ги като метод, само че без self за първи аргумент.
  • 92. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Аналог на класовите методи в Ruby и статичните методи в Ява. Дефинираме ги като метод, само че без self за първи аргумент. Асоциирана функция impl Monster { fn count () { println("There␣are␣lots␣of␣monsters."); } }
  • 93. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции
  • 94. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Асоциираните функции намират приложение при имплементирането на конструктор в Rust.
  • 95. Въведение Rust? TDD Памет ООП Заключение Асоциирани функции Асоциираните функции намират приложение при имплементирането на конструктор в Rust. Конструктор struct Monster { h e a l t h : int , a t t a c k : int } impl Monster { fn a t t a c k (& s e l f ) { p r i n t l n ( fmt ! ( " The ␣ m o n s t e r ␣ a t t a c k s ␣ for ␣ % d ␣ damage . " , s e l f . a t t a c k ) ) ; } fn new ( h e a l t h : int , a t t a c k : int ) −> Monster { Monster { h e a l t h : h e a l t h , a t t a c k : a t t a c k } } } fn main ( ) { Monster : : new (20 , 4 0 ) . a t t a c k ( ) ; }
  • 96. Въведение Rust? TDD Памет ООП Заключение Типажи и обобщения (Traits & Generics) Нещо средно между миксин и интерфейс.
  • 97. Въведение Rust? TDD Памет ООП Заключение Типажи и обобщения (Traits & Generics) Нещо средно между миксин и интерфейс. Абстрактен клас?
  • 98. Въведение Rust? TDD Памет ООП Заключение Типажи и обобщения (Traits & Generics) Нещо средно между миксин и интерфейс. Абстрактен клас? Чрез тях се постига полиморфизъм в Rust
  • 99. Въведение Rust? TDD Памет ООП Заключение Лирическо отклонение Аналогът на списъците в Ruby в Rust са векторите. Не са хетерогенни като в Ruby
  • 100. Въведение Rust? TDD Памет ООП Заключение Лирическо отклонение Аналогът на списъците в Ruby в Rust са векторите. Не са хетерогенни като в Ruby Immutable по подразбиране като всичко останало
  • 101. Въведение Rust? TDD Памет ООП Заключение Лирическо отклонение Аналогът на списъците в Ruby в Rust са векторите. Не са хетерогенни като в Ruby Immutable по подразбиране като всичко останало Дефинирани са им алгебрични оператори като в Ruby
  • 102. Въведение Rust? TDD Памет ООП Заключение Лирическо отклонение Аналогът на списъците в Ruby в Rust са векторите. Не са хетерогенни като в Ruby Immutable по подразбиране като всичко останало Дефинирани са им алгебрични оператори като в Ruby
  • 103. Въведение Rust? TDD Памет ООП Заключение Лирическо отклонение Аналогът на списъците в Ruby в Rust са векторите. Не са хетерогенни като в Ruby Immutable по подразбиране като всичко останало Дефинирани са им алгебрични оператори като в Ruby Вектори fn main () { l e t your_numbers = @[ 1 , 2 , 3 ] ; l e t my_numbers = @[ 4 , 5 , 6 ] ; l e t our_numbers = your_numbers + my_numbers ; p r i n t l n ( fmt ! ( "The␣third␣number␣is␣%d." , our_numbers [ 2 ] ) ) }
  • 104. Въведение Rust? TDD Памет ООП Заключение Trait fn print_vec <T: ToStr >(v: &[T]) { for v.each |&i| { println(i.to_str ()) } } fn main () { let vec = [1,2,3]; print_vec(vec); let str_vec = [~"hey", ~"there", ~"yo"]; print_vec(str_vec ); }
  • 105. Въведение Rust? TDD Памет ООП Заключение Operator Overloading Едно време ми се наложи да рисувам ето тази красота:
  • 106. Въведение Rust? TDD Памет ООП Заключение Operator Overloading Едно време ми се наложи да рисувам ето тази красота:
  • 107. Въведение Rust? TDD Памет ООП Заключение Operator Overloading Едно време ми се наложи да рисувам ето тази красота: Нарича се ” Аполониева гарнитура“ и е фрактал.
  • 108. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите.
  • 109. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите. Центровете и радиусите на окръжностите се изчисляват с теоремата на Декарт.
  • 110. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите. Центровете и радиусите на окръжностите се изчисляват с теоремата на Декарт. Нека центъра на окръжност zj е комплексно число (т.е. zj = xj + i yj ).
  • 111. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите. Центровете и радиусите на окръжностите се изчисляват с теоремата на Декарт. Нека центъра на окръжност zj е комплексно число (т.е. zj = xj + i yj ). Нека кривата kj е реципрочното число на дължината на радиуса на окръжността.
  • 112. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите. Центровете и радиусите на окръжностите се изчисляват с теоремата на Декарт. Нека центъра на окръжност zj е комплексно число (т.е. zj = xj + i yj ). Нека кривата kj е реципрочното число на дължината на радиуса на окръжността.
  • 113. Въведение Rust? TDD Памет ООП Заключение Сега няма да се плашите. Центровете и радиусите на окръжностите се изчисляват с теоремата на Декарт. Нека центъра на окръжност zj е комплексно число (т.е. zj = xj + i yj ). Нека кривата kj е реципрочното число на дължината на радиуса на окръжността. Тогава центъра на допираща се до четири други окръжности окръжност намираме така: Следствие от комплексната декартова теорема z4 = 2(zmkm + z2k2 + z3k3) − z1k1 k4
  • 114. Въведение Rust? TDD Памет ООП Заключение Фракталите с окръжности са ГАДНИ.
  • 115. Въведение Rust? TDD Памет ООП Заключение Фракталите с окръжности са ГАДНИ. Сериозно.
  • 116. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java.
  • 117. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java. Сега вече не съм толкова млад.
  • 118. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java. Сега вече не съм толкова млад. Ето какво се получи:
  • 119. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java. Сега вече не съм толкова млад. Ето какво се получи: Java public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 , S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){ Complex z = m. z ( ) . m u l t i p l y (m. k ) . add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) ) . add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) ) . m u l t i p l y ( 2 ) . s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) ) . d i v i d e ( new Complex ( k , 0 ) ) ; return z ; }
  • 120. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java. Сега вече не съм толкова млад. Ето какво се получи: Java public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 , S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){ Complex z = m. z ( ) . m u l t i p l y (m. k ) . add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) ) . add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) ) . m u l t i p l y ( 2 ) . s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) ) . d i v i d e ( new Complex ( k , 0 ) ) ; return z ; } Приоритетът на операциите е пълна боза.
  • 121. Въведение Rust? TDD Памет ООП Заключение Бях млад и глупав и реших да имплементирам предната формула на Java. Сега вече не съм толкова млад. Ето какво се получи: Java public static Complex getDaughterCenter ( S o d d y C i r c l e m, S o d d y C i r c l e a1 , S o d d y C i r c l e a2 , S o d d y C i r c l e a3 , double k ){ Complex z = m. z ( ) . m u l t i p l y (m. k ) . add ( a2 . z ( ) . m u l t i p l y ( a2 . k ) ) . add ( a3 . z ( ) . m u l t i p l y ( a3 . k ) ) . m u l t i p l y ( 2 ) . s u b t r a c t ( a1 . z ( ) . m u l t i p l y ( a1 . k ) ) . d i v i d e ( new Complex ( k , 0 ) ) ; return z ; } Приоритетът на операциите е пълна боза. Освен това... .add(), .multipy(), .divide()...
  • 122. Въведение Rust? TDD Памет ООП Заключение
  • 123. Въведение Rust? TDD Памет ООП Заключение Ето как може да стане на Rust:
  • 124. Въведение Rust? TDD Памет ООП Заключение Ето как може да стане на Rust: Rust fn get_daughter_center (m: C i r c l e , a1 : C i r c l e , a2 : C i r c l e , a3 : C i r c l e , k : float ) −> Cmplx<float> { l e t ( p , q ) = (~Cmplx : : new ( 2 . 0 , 0 . 0 ) , ~Cmplx : : new ( k , 0 . 0 ) ) ; ( (m. z ∗ m. k + a2 . z ∗ a2 . k + a3 . z ∗ a3 . k ) ∗ ∗p − a1 . z ∗ a1 . k ) / ∗q }
  • 125. Въведение Rust? TDD Памет ООП Заключение Ето как може да стане на Rust: Rust fn get_daughter_center (m: C i r c l e , a1 : C i r c l e , a2 : C i r c l e , a3 : C i r c l e , k : float ) −> Cmplx<float> { l e t ( p , q ) = (~Cmplx : : new ( 2 . 0 , 0 . 0 ) , ~Cmplx : : new ( k , 0 . 0 ) ) ; ( (m. z ∗ m. k + a2 . z ∗ a2 . k + a3 . z ∗ a3 . k ) ∗ ∗p − a1 . z ∗ a1 . k ) / ∗q } Пак е рунтаво, но е далеч по-четимо и по-лесно за дебъг от предишното.
  • 126. Въведение Rust? TDD Памет ООП Заключение Заключение
  • 127. Въведение Rust? TDD Памет ООП Заключение БЛАГОДАРЯ!