BG Development


Страници: (8) 1 2 [3] 4 5 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Къде е Ръждата?!
SuN
Публикувано на: 26-04-2025, 05:58
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 13463
Регистриран на: 27.01.05



QUOTE (dvader @ 25-04-2025, 21:34)
QUOTE (Bender @ ++25-04-2025, 19:58)
правилата на езика правят невъзможни race conditions в safe rust.

Как става номера?
Питам съвсем сериозно, щото подозирам, че просто са вградили статичен анализатор в езика.

Заклеваш се, че в unsafe кода не правиш глупости, а компилатора се прави, че в safe кода всичко е точно: https://github.com/rust-lang/rust/issues/90308


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
Дон Реба
Публикувано на: 26-04-2025, 07:00
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 10496
Регистриран на: 11.11.06



QUOTE (dvader @ 25-04-2025, 15:53)

Точно за това иде реч - НЕ Е по-малко писане, защото ще пишеш if (0 == на *всяка* функция по веригата - fopen, fread и накрая на fclose.

айде бе, ще пиша ли? я да погледна в кода си - ами не пиша. виждал съм такъв код и ме дразни.
проверявам само fopen за да изкарам съобщение за потребителя "ей тоя файл не се отваря", fwrite и тн по дефолт не ги проверявам. това ми е дефолта, но ако има реален юзкейс изискващ нещо допълнително, чак тогава го правя. например във фирмата работим с големи файлове , които се пишат във мрежа. случвало се е мрежата да дефектира и файла да се запише частично , затова в края на записа също правя проверка. но самото писане е без проверки, защото не може да фейлне само един запис, фейлват всички от дефекта нататък. ще кажеш ами ако може? ако може горя. но мен това ми е философията - оставям практиката да води, а не "логиката". за 30 години практика съм пробвал различни подходи, вкл и изцепшъни, но съм си избрал точно тоя
PM
Top
dvader
Публикувано на: 26-04-2025, 08:11
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5419
Регистриран на: 12.07.05



QUOTE (Дон Реба @ 26-04-2025, 07:00)
айде бе, ще пиша ли? я да погледна в кода си - ами не пиша. виждал съм такъв код и ме дразни.

Очевидно, за кейсовете когато не ни трябва да проверяваме за грешки дискусията error vs exception е безпредметна.

Ако кодът, който викаш е е достатъчно "плосък" (няма голямо ниво на вложеност) тогава вероятно няма разлика как ще проверяваш.

Ако, обаче, не викаш fwrite директно ами викаш някой sql.insert (който ще викне fwrite, който ще викне send щото базата е в мрежата), тогава цялата верига от insert() горе до send() долу ще трябва да проверява за грешка и да я връща нагоре, докато с try/catch всичко това става автомагично.

Това мнение е било редактирано от dvader на 26-04-2025, 08:13


--------------------
I find your lack of faith disturbing
PM
Top
dvader
Публикувано на: 26-04-2025, 08:21
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5419
Регистриран на: 12.07.05



QUOTE (Bender++ @ 25-04-2025, 23:37)
Има няколко механизма, които работят заедно:

Мен повече ме притесняват deadlock/livelock сценариите.
Пример:

Нишка 1:
mutex_a.lock();
mutex_b.lock();

Нишка 2:
mutex_b.lock();
mutex_a.lock();

Това нещо компилатора хваща ли го?


--------------------
I find your lack of faith disturbing
PM
Top
Bender++
Публикувано на: 26-04-2025, 10:02
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 608
Регистриран на: 18.04.21



Не


--------------------
Слава на Цар Путин! Долу украинските фашисти!
PMEmail Poster
Top
Дон Реба
Публикувано на: 26-04-2025, 11:28
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 10496
Регистриран на: 11.11.06



QUOTE (dvader @ 26-04-2025, 08:11)

Ако, обаче, не викаш fwrite директно ами викаш някой sql.insert (който ще викне fwrite, който ще викне send щото базата е в мрежата), тогава цялата верига от insert() горе до send() долу ще трябва да проверява за грешка и да я връща нагоре, докато с try/catch всичко това става автомагично.

ами не е така, много ясно че всичкия реален код е дървовиден, вкл и моя. освен това дори да беше проверки по цялата верига (виждал съм такъв код и не го одобрявам), то вредата от употребата на изцепшъни също се вдига пропорционално. примерно между писанията заключваме и отключваме разни неща. заключиш, пишеш, гръмва изцепка и отключването се прескача. нещото остава заключено, разни нишки увисват върху него и край, програмата забива. "телепортирането" не е добро, както и да го погледнеш. в С++ специално тоя сценарий можеш да го заобиколиш с RAII но модерните езици нямат деструктори, така че нямат RAII. и убеден съм дори с RAII можеш да се нахендриш пак. иначе try-catch е добро като глобална защита срещу неочакван краш, буташ цялия main вътре и ако кеча се задейства показваш табела "нещо се осра, искаш ли да пробваме запис на нещата преди рестарт" или от тоя сорт
PM
Top
Bender++
Публикувано на: 26-04-2025, 12:11
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 608
Регистриран на: 18.04.21



QUOTE
гръмва изцепка и отключването се прескача. нещото остава заключено, разни нишки увисват върху него и край,


за това в Джава има try-finally:

CODE

lock.lock()
try{
   // throw
} finally{
   lock.unlock()
}


но да, с деструктори е по-лесно и няма толкова бойлерплейт, въпреки че има други проблеми, примерно в Ръст може да имаш BufWriter и деструктора flush()-ва буфер, но ако не може да го флъшне грешката се поглъща, та ако искаш да си сигурен,че данните са се записали, трябва сам да извикаш bufWriter.flush() и да провериш за грешка

Това мнение е било редактирано от Bender++ на 26-04-2025, 12:13


--------------------
Слава на Цар Путин! Долу украинските фашисти!
PMEmail Poster
Top
dvader
Публикувано на: 26-04-2025, 13:54
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5419
Регистриран на: 12.07.05



QUOTE (Дон Реба @ 26-04-2025, 11:28)
освен това дори да беше проверки по цялата верига (виждал съм такъв код и не го одобрявам),

Ами не мога да те разбера - къде проверяваш за грешки тогава?
Или викаш exit на fwrite фейлне?


--------------------
I find your lack of faith disturbing
PM
Top
thrawn
Публикувано на: 26-04-2025, 16:47
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3864
Регистриран на: 17.01.17



Цялата ви драма с тия изключения е, че не сте длъжни да ги обработвате. Затова се зарязват необработени (по малко писане), не сте длъжни да ги декларирате (не се знае от къде какво може да гръмне) което води до тия скокове на горе по-веригата, до място на което някой е решил да хване нещо.

Основната разлика между изключението и връщан статус за грешка е, че изключението не бива (не, че не може) да се ползва за логически операции (flow control), докато върнат статус за грешка може да се използва в логически оператор (то и това му е идеята). Така че, въпреки приликите двете не са директно заменяеми и много често се налага да се ползват успоредно (пиша го от позицията на човек пишещ основно на java, демек принуден да ползва/обработва изключения почти на всеки ред)
PMEmail Poster
Top
Дон Реба
Публикувано на: 26-04-2025, 16:49
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 10496
Регистриран на: 11.11.06



QUOTE (dvader @ 26-04-2025, 13:54)
QUOTE (Дон Реба @ 26-04-2025, 11:28)
освен това дори да беше проверки по цялата верига (виждал съм такъв код и не го одобрявам),

Ами не мога да те разбера - къде проверяваш за грешки тогава?
Или викаш exit на fwrite фейлне?

e нали ти казах - в началото (fopen) и евентуално в края. exit не викам никога. само юзера има право да затвори програмата.
PM
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (8) 1 2 [3] 4 5 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0