Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, DarkEld3r, Вы писали:
DE>>Паники ровно в той же степени непредсказуемы как std::abort или throw 1 в сторонних библиотеках. То есть, встретиться могут и да, нет механизма контроля (с оговорками), но обычно так делать не принято. Есть некоторое количество исключений вроде доступа по индексу. Против таких методов из стандартной библиотеки помогает (изкоробочный) линтер.
KP>Паники отключаются? Критический код не может содержать исключений (паник и всего на них похожего) и динамического выделения памяти.
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, Zhendos, Вы писали:
Z>>А чем это отличается от unique_ptr/shared_ptr/atomic_shared_ptr ?
KP>В точку! Та же хренота, но в других местах ты еще и компилятор ублажаешь, вместо того что бы код писать.
Не знаю, у меня опыт противоположный. Компилятор именно помогает,
была довольно много случаев когда была неочевидная зависимость данных друг от друга (тип тут "callback"
менят то-то, тут вызывается эта функция и в итоге меняется то-то)
и компилятор это выявлял. Правда я долго разбирался что не нравиться компилятору.
Но так же я бы это делал и в C++ только под давлением стресса, так как у меня был бы "core dump",
и пользователи интересующиеся "а когда же это починят".
А вот "Cell" очень редко приходилось использовать, и только в начале использования Rust,
потом пересмотрел архитектуру и как-то незаметно вообще прекратил его использовать.
Здравствуйте, Zhendos, Вы писали:
Z>Есть такой "crate" для валидации на стадии компиляции что данная функция не может Z>вызывать "panic": https://docs.rs/no-panic/latest/no_panic/
Этого мало, нужна возможность собрать приложение "без паник" целиком. C++ позволяет собрать код с выключенными исключениями.
Здравствуйте, Zhendos, Вы писали:
Z>была довольно много случаев когда была неочевидная зависимость данных друг от друга (тип тут "callback" Z>менят то-то, тут вызывается эта функция и в итоге меняется то-то) Z>и компилятор это выявлял. Правда я долго разбирался что не нравиться компилятору. Z>Но так же я бы это делал и в C++ только под давлением стресса, так как у меня был бы "core dump", Z>и пользователи интересующиеся "а когда же это починят".
Юнит тесты не пишешь что-ли? Детская ошибка которую всегда ловят тесты
UPD. а вот такой подход приносит проблемы в любом языке:
тип тут "callback" менят то-то, тут вызывается эта функция и в итоге меняется то-то
И от проблемного дизайна Rust не спасает, а вот функциональщина тебя бы тут как раз спасла.
Здравствуйте, T4r4sB, Вы писали:
TB>У вас там всё на shared_ptr + weak_ref , я так понимаю?
Мой С++ код вообще не использует std::
Но тем не менее всё по контейнерам и голых королей указателей наружу не торчит
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
vaa>>его написали два крутых чувака из мира C|C++ DE>И ты ещё говоришь о "молодёжи падкой на рекламу". (:
Реклама — это когда чуваки с огнм в глазах рассказывают что то что они сделали — огого!
А когда чуваки сделавшие проверенное на практике огого и не единожды, делают очередное нечто, небрежно выкладывая его в репозиторий — это авторитет и репутация.
Не надо путать рекламу с репутацией.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Какой знакомый аргумент
Ты взрослый дядя, нормальный аргумент. В старых проектах бывает всяко. В новых не бывает, если разработчики следуют хорошим практикам, и для плюсов это C++ Core Guidelines. Вот тут
KP>Ты взрослый дядя, нормальный аргумент. В старых проектах бывает всяко. В новых не бывает, если разработчики следуют хорошим практикам, и для плюсов это C++ Core Guidelines. Вот тут
Здравствуйте, ononim, Вы писали:
KP>>Ты взрослый дядя, нормальный аргумент. В старых проектах бывает всяко. В новых не бывает, если разработчики следуют хорошим практикам, и для плюсов это C++ Core Guidelines. Вот тут
Здравствуйте, kaa.python, Вы писали:
KP>Паники отключаются?
Что значит отключаются? Сейчас доступны две стратегии обработки паники: "обычная" (размотка стека и т.д.), и моментальный abort. Вторая позволяет не генерировать лишний код. Запретить паниковать стороннему коду, как и в С++, нельзя. Есть только костыльный способ проверить может ли код выбрасывать панику. Ну и линтер умеет предупреждать об использовании таких методов из стандартной библиотеки.
Здравствуйте, kaa.python, Вы писали:
KP>C++ позволяет собрать код с выключенными исключениями.
С++ как раз не позволяет (в стандарте про это ни слова), позволяют отдельные реализации. Если мы говорим о штуках вроде -fno-exceptions, то так (заменять исключения на аборт и выкидывать код размотки стека) и раст умеет.
Здравствуйте, landerhigh, Вы писали:
L>Архитектура "на shared" указателях — это отсутсвие архитектуры.
Ну т.е. выходит куча managed языков да и вообще всё, где есть GC — с отсутствующей архитектурой.
В том числе шарп и жаба, потому как хоть там и нет явных shared указателей объект жив пока на него хоть кто то ссылается.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, kaa.python, Вы писали:
KP>А зачем их вообще помнить? Не храни итераторы за пределами текущей области видимости. Не удаляй объекты из коллекции в цикле. Если следовать этим двум простым принципам ты никогда не получишь проблемы с итераторами. Ситуация когда тебе эти два правила надо нарушить невероятно редкая (я реже чем раз в год сталкиваюсь), ну и если уж случилось такое — перечитать правила инвалидации итератора для конкретного контейнера дело 5-ти минут. Это вообще ничто по сравнению с усилиями на ублажение компилятора Rust.
Ну, вообще-то, если удалять в цикле — то это часто оптимальнее. Но да, тут надо почитать немного о правилах инвалидации для конкретного типа контейнера. И безусловно, это гораздо проще, чем постоянная борьба с языком, как в случае раста.
В любом случае, всегда есть что-то типа std::transform
TB>>А ещё очень круто, когда у тебя есть проект, в котором спокойно указатели используются в качестве ключей хеш-мапы, это наверное команда не осилила гайды. Проект называется LLVM, если что.
KP>Ну бывает, проект древний, с очень серьезными требованиями к скорости. Это всяко единичный случай.
LLVM — Первый выпуск — 24 октября 2003
GCC — Первый выпуск — 23 мая 1987
Это смотря с чем древность сравнивать. GCC, кстати, как я слышал, таки переехал/переезжает на плюсики. А LLVM вроде изначально плюсовый, хоть и стартовал на весьма старой на текущий момент версии плюсиков. Хотя и 0x03 были весьма годными.
А указатели как ключи мапы — вообще не вижу криминала, если это целесобразно требованиям производительности. Немного аккуратности, завернуть это в безопасный API — и нет проблем, можно хоть индусам давать в использование