Your SlideShare is downloading. ×
0
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Rust
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
179
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 Памет ООП Заключение БЛАГОДАРЯ!

×