
BG Development · За реклама · За контакти |
![]() ![]() ![]() ![]() ![]() |
Здравей! ( Включване | Регистриране ) |
Bender++ | Публикувана на: 28-04-2025, 09:32 |
![]() Мнения: 68 Преглеждания: 2212 |
Има някакъв проект, но аз не пиша ЦПП и. нямам лично наблюдения: https://cxx.rs/ |
Форум: Други · Преглед: #502451 |
Bender++ | Публикувана на: 27-04-2025, 22:24 | ||
![]() Мнения: 68 Преглеждания: 2212 |
Тук всичко е compile-time,което прави ръст толкова привлекателен. В рънтайм има други проверки - примерно в дебъг решим компилатора инжектира асърти за over/under-flow при математически операции, които липсват в release режим. |
||
Форум: Други · Преглед: #502445 |
Bender++ | Публикувана на: 27-04-2025, 22:13 | ||||
![]() Мнения: 68 Преглеждания: 2212 |
Ръст има енъми които представляват tagged unions. Например в Ц може да направиш мещо такова (llm code ahead):
И разбира се нищо не ти пречи да игнорираш така и да интерпретираш данните грешно. Ръст първо като синтаксис го прави по-елегантно, а също е невъзможно да интерпретираш данните грешно:
А от друга страна прави определени оптимизации. Има едно нещо което наричат "ниша" и това е стойност, която е невалидна за даден тип. Примерно, Box<T> в Ц ще го напишеш като *Т. Тъй като в Ръст няма NULL, това че *T може да лиспва ще го напишеш като Option<Box<T>>. Съответно компилатора знае, че null е невалидна стойност и ще ползва тази ниша за да реализира Option::None варианта. Тази оптимизация разбира се я няма за всички типове, но я има за поинтер и файл дескриптори, което ти дава същия машинен код като в Ц, само че е тайп-сейф. За тези типове, които нямат такава "ниша" се ползва допълнителен таг, и размера на Option<T> става по-голям от колкото само на T заради тага и падинга. ---- Mинус на грешките като return values вместо exceptions е че имаш един бранч който винаги трябва да проверяваш на практика на почти всяко извикване на функция без значение дали има грешка или не. В ръст този бранч е красиво скрит зад ? оператора, докато в голанг, гофърите пишат 3 реда if err != nil за всяко извикване на функция. Но и в двата случая присъства. Докато с exceptions. плащаш за грешката само ако се случи, и хепи пътя остава чист. Минус на изцепшъните е ,че не работят добре с функционалния стил, който е доста популярен напоследък |
||||
Форум: Други · Преглед: #502444 |
Bender++ | Публикувана на: 27-04-2025, 19:05 | ||||
![]() Мнения: 68 Преглеждания: 2212 |
Според зависи. На някои платформи, примерно embedded няма stack undwinding и съответно catch_unwind() няма да направи нищо ![]()
|
||||
Форум: Други · Преглед: #502438 |
Bender++ | Публикувана на: 26-04-2025, 12:11 | ||||
![]() Мнения: 68 Преглеждания: 2212 |
за това в Джава има try-finally:
но да, с деструктори е по-лесно и няма толкова бойлерплейт, въпреки че има други проблеми, примерно в Ръст може да имаш BufWriter и деструктора flush()-ва буфер, но ако не може да го флъшне грешката се поглъща, та ако искаш да си сигурен,че данните са се записали, трябва сам да извикаш bufWriter.flush() и да провериш за грешка |
||||
Форум: Други · Преглед: #502414 |
Bender++ | Публикувана на: 26-04-2025, 10:02 |
![]() Мнения: 68 Преглеждания: 2212 |
Не |
Форум: Други · Преглед: #502412 |
Bender++ | Публикувана на: 25-04-2025, 23:37 | ||||||||
![]() Мнения: 68 Преглеждания: 2212 |
Има няколко механизма, които работят заедно: * Идеята за ownership - всяка променлива може да има само 1 owner, Когато променливата излезе от скоуп, паметта се деалокира. * Ръст прави разлика между read-only & mutable променливи & референции. По подразбиране, всичко е read-only. Може да имаш колкото си искаш RO референции към нещо, стига да нямаш нито една mut референция. Или може да имаш само 1 единствена mut референця, но тотгава - нито една RO. Тоест ако се опиташ да подадеш някаква структура чрез референция (разбирай чрез малко по-специален поинтер), компилатора няма да ти посволи да създадеш 2 референции едновременно които да позволяват промяна на данните - тоест ако можеш да ги променяш само от 1 място, то тогава няма как да имаш data race. * Почти всичко има move семантика, за разлика от легаси езиците, където всичко има copy семантика. Copy семантика имат само типовече които имплементират Copy интерфейса, като има ограничения кой може да го имплементира - само типове които нямат деструктор и тези, чиито всички мембъри имплементират копи.. Тоест като подадеш като параметър някаква структура по стойност, тя се "мести" и е компилационна грешка да имаш указател към невалидна памет (тоест старата променлива), следователно пак имаш само един owner, следователно няма как да имаш data race ако може да пишеш само от едно място. * Има 2 интерфейса - Send & Sync, които се имплементират автоматично от компилатора, но може и ръчно: - Send - инстанциите на типа Т може да се местят между нишките - Sync - референции към типа Т (&T) могат да се местят между нишките (тоест може да имаме споделен достъп) Примери Ownership & Move semantics:
Shared & Exclusive references:
Rc<T> е смарт reference counted поинтер, който не е Send защото ако се ползва от много нишки еновременно, брояча ще се намаже
Sync: Arc<T> е смарт atomic reference counted поинтер, който е Send защото атомик брояча може безопасно да се модифицира от няколко нишки едновременно Мутекса е sync, защото имплементацията му се грижи да не се нарушават правилата на езика. Може от колкото си искаш нишки да кажеш lock(), и той ще се погрижи максимум 1 нишка да държи лока във всеки идин момент от времето и по този начин да имаш 0 или 1 mutable референции.
|
||||||||
Форум: Други · Преглед: #502407 |
Bender++ | Публикувана на: 25-04-2025, 19:58 | ||||||||||
![]() Мнения: 68 Преглеждания: 2212 |
Holy Rust не e Golang, и този проблем го няма
![]() ![]() ![]() ![]() Нямаш ли хубава билд система, нямаш нищо. Даже умрялата билдсистема в голанг е по-добре от цмаке
правилата на езика правят невъзможни race conditions в safe rust. Винаги може в unsafe с raw pointers да намажеш нещата ![]()
това в ръст му казваме panic_handler и за ембеддед имаш няколко опции - безхраен цикъл, halt на цпу-то, etc.
Нуждите на user-space & kernel space са различни |
||||||||||
Форум: Други · Преглед: #502405 |
Bender++ | Публикувана на: 19-03-2025, 12:50 |
![]() Мнения: 3 Преглеждания: 815 |
на 5цата не съм ги отварял, но на 4ката бяха с буксичка, трябва да имаш много голям талант за да НЕ се справиш сам |
Форум: Разни · Преглед: #502290 |
Bender++ | Публикувана на: 15-03-2025, 23:47 |
![]() Мнения: 26 Преглеждания: 4629 |
не бях отварял телеграма от доста време, и вече РИА Новости е блокиран в българия ![]() |
Форум: Разни · Преглед: #502272 |
Bender++ | Публикувана на: 11-03-2025, 15:05 | ||
![]() Мнения: 26 Преглеждания: 4629 |
споко, на следващите избори Цар Тръмп ще забрани грешните кандидати ![]() |
||
Форум: Разни · Преглед: #502247 |
Bender++ | Публикувана на: 11-03-2025, 15:03 | ||||
![]() Мнения: 35 Преглеждания: 5510 |
соросоидите гледат нова, четат свободна европа и шмъркат белото на зеления няма как да попадна в тази категория по нито едно направление |
||||
Форум: Разни · Преглед: #502246 |
Bender++ | Публикувана на: 10-03-2025, 00:18 | ||
![]() Мнения: 29 Преглеждания: 3165 |
Такива чуждестранни агенти казват каквото им се нареди. Важното е шефовете какво казват, и тук да ви насоча към речта на Джефри Сакс към ЕСССР, ако не сте я гледали вече https://www.youtube.com/watch?v=u4c-YRPXDoM |
||
Форум: Разни · Преглед: #502209 |
Bender++ | Публикувана на: 10-03-2025, 00:15 |
![]() Мнения: 35 Преглеждания: 5510 |
Какъв ти е проблема с приложението ? Аз компютър ползвам само да гледам филми, и то защото нямам телевизор. Всичко си правя с телефона |
Форум: Разни · Преглед: #502208 |
Bender++ | Публикувана на: 22-02-2025, 14:36 | ||
![]() Мнения: 12 Преглеждания: 7561 |
На всякъде е така. |
||
Форум: Разни · Преглед: #502103 |
Bender++ | Публикувана на: 22-02-2025, 14:34 |
![]() Мнения: 15 Преглеждания: 5917 |
Просто и четливо и Rxjava не могат да са в едно изречение. Няма смисъл да си губиш времето с това извращение. Ползвай greeen threads, али ако поради някаква причина не можеш - по-добре го пренапиши на golang отколкото да се мъчиш с тая шитня |
Форум: Java/Kotlin · Преглед: #502102 |
Bender++ | Публикувана на: 14-12-2024, 19:43 | ||||
![]() Мнения: 286 Преглеждания: 17896 |
да ![]() |
||||
Форум: Разни · Преглед: #501775 |
Bender++ | Публикувана на: 10-12-2024, 13:20 | ||
![]() Мнения: 286 Преглеждания: 17896 |
На пункта чичката само повтаряше "ей тази като електричка бе" . Евро 6д, мина без проблем |
||
Форум: Разни · Преглед: #501756 |
Bender++ | Публикувана на: 28-11-2024, 19:00 |
![]() Мнения: 11 Преглеждания: 1905 |
Дай му един перманентен бан на този мангалоиден спинозен хермафродит. |
Форум: Разни · Преглед: #501729 |
Bender++ | Публикувана на: 23-11-2024, 12:56 |
![]() Мнения: 1946 Преглеждания: 113198 |
Видяхте ли клипчетата от теста на ICBM-а изстрелян по хохлите ? Трябваше по варшава и берлин ![]() |
Форум: Разни · Преглед: #501698 |
Bender++ | Публикувана на: 01-09-2024, 09:07 | ||
![]() Мнения: 1946 Преглеждания: 113198 |
и окопната война беше отживелица |
||
Форум: Разни · Преглед: #501225 |
Bender++ | Публикувана на: 31-08-2024, 21:12 |
![]() Мнения: 1946 Преглеждания: 113198 |
Ще е голям резил ако рашките им унищожат ефките на земята. Трябва поне един полет над русия да има, та да разберем кое е по-добро - с400 или фките |
Форум: Разни · Преглед: #501221 |
Bender++ | Публикувана на: 17-08-2024, 22:42 |
![]() Мнения: 1946 Преглеждания: 113198 |
Като отворя днеса, има 27 статии на тема бълграия от денс, и 3 на тема 404. Просто журналята работят като катаджиите - само по поръчка, иначе нито са видели ,нито са чули |
Форум: Разни · Преглед: #501121 |
Bender++ | Публикувана на: 17-08-2024, 08:42 |
![]() Мнения: 1946 Преглеждания: 113198 |
https://t.me/boris_rozhin/133926?single |
Форум: Разни · Преглед: #501111 |
Bender++ | Публикувана на: 15-08-2024, 22:06 | ||
![]() Мнения: 286 Преглеждания: 17896 |
Да не караш някакъв хибриден миксер ? Аз такъв разход имам само като се пусна по нанадолнището от рилските езера до сапарева баня без да пипам газта |
||
Форум: Разни · Преглед: #501081 |