Въведение 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 – преди няколко дни
Стабилна версия – до края на годината
Въведение 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?
Блоковете
Тове, че е функционален
Синтаксисът е горе-долу лесен
Прави разработчиците щастливи.
Програмира се бързо с него
Динамично типизиран е
Въведение 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): Означават се с &
Небезопасни блокове и функции
Въведение 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.
$
Въведение 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.");
}
}
Въведение 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
Едно време ми се наложи да рисувам ето тази красота:
Нарича се
”
Аполониева гарнитура“ и е фрактал.
Въведение 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
Въведение 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()...
Въведение 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
}
Пак е рунтаво, но е далеч по-четимо и по-лесно за дебъг от
предишното.