Забавные новости 0й-Ti :)

Тема в разделе "WASM.HEAP", создана пользователем UbIvItS, 18 июн 2018.

Статус темы:
Закрыта.
  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Это - кринж.

    В Плюсах хотя бы есть RAII. А то элитные спецы с васмов массивов на куче навыделяют и половину из них не освободят. Но поскольку их код никто и нигде не использует, кроме их самих, они будут продолжать бить себя тапком в грудь за то, что RAII или Ржавый не нужон, они и так пишут код без мемори ликов.

    Так и где эти дикие размеры бинаря? Я тебе это и в Цэ и в Плюсах соберу в 4кб.
    --- Сообщение объединено, 7 янв 2024 ---
    Ну вопрос в том, насколько они безопаснее. С одной стороны, да, это - абстракция, которая не позволит отдельным спецам себе по ногам в некоторых случаях, но без той же плюсовой RAII обертки никто не поможет тебе не забыть освободить эту абстракцию. В Цэ уже давно идут разговоры о том, чтобы завести в язык defer, а в GCC уже давно есть атрибут cleanup (но он не в стандарте). Меня дико удивляет, почему такую простую и удобную вещь до сих пор не сделали, надеюсь, что она появится в следующей итерации стандарта.

    Да, лучше выкладывать рандомный кринжовый код, который только доказывает аргументацию Рела.
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    868
    Так вот они как раз и разработаны для ЯП в которых есть подобный функционал. Вместо того чтобы создавать кучу классов-оберток, нам нужна всего одна. Вместо кучи для HANDLE (куча объектов CloseHandle, другие FindClose ну и т.д.), HINTERNET (причем тут может быть как WinHttpCloseHandle, так и InternetCloseHandle), у нас есть стандартная реализация для IUnknown (CComPtr). Тоже самое для строк, есть единый BSTR (_bstr_t) и не нужно думать и создавать кучу оберток для освобождения памяти от разных аллокаторов. Сейчас почти любая новая фича в WinAPI реализуется через COM с которым очень удобно работать из тех же плюсов. На С конечно тоже можно работать, но руками писать приходится больше, а также самому следить за ресурсами. Я все это веду к тому что новые функции в WinAPI стараются сделать более безопасными, а старый WinAPI с голым С интерфейсом - это просто наследие. Вот возьми тот же VB6 - в нем как раз вся эта концепция реализована (а это 1998 год на минуточку) и там очень сложно выстрелить себе в ногу используя концепцию безопасного программирования (аналогично и в дотнете), но как только ты начинаешь трогать небезопасные WinAPI (C-ориентированные) интерфейсы - все, ты сам себе хозяин и отвечаешь за все ты, а не компилятор. И из-за этого происходит вылет 99.9% программ, утечка хендлов и т.п. при неправильной работе с ними. Вместо голых указателей - у нас безопасные ссылки, вместо указателей на функции - COM интерфейсы, все типы стандартизованы.

    https://www.cyberforum.ru/visual-basic/thread2621561-page11.html#post14485003

    Вот к примеру безопасный код на VB6 работающий с безопасным WinAPI. Там кстати можно почитать аналогичную дискуссию по поводу безопасного программирования.
     
    Последнее редактирование: 7 янв 2024
  3. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    Thetrik, в связи с этим хочется спросить. Если доверяем компилятору и автовалидации передаваемых данных, то почему бы не уйти на более высокоуровневый язык типа ocalm, или вские разработки под LLVM и потом в нативный код, зачем плюсы и раст?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Ocamlopt (вроде без всяких llvm'ов) в нативный код компилит с древних времен. Вообще, конечно, удивительно своеобразный язык, который на первый взгляд кроме Инрии и ДжейнСтрит не нужон, но много где используется. На секундочку первые версии Ржавого были на Окамле написаны, до того, как они задогфудили компилятор. А компилятор еще одного маргинального языка - Haxe (который используется в основном в геймдеве) до сих пор на Окамле.

    Ну я не спорю, я о том и говорю, что всяческие COM'ы куда удобнее использовать из Плюсов и Шарпов, чем из Цэ, как раз из-за отсутствия в последней привычных абстракций.
     
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    868
    q2e74, ты у меня спрашиваешь о том в чем я не разбираюсь. Почему я юзаю С и плюсы? Просто мне они удобны в некоторых сценариях. Почему я юзаю VB6? Потому что мне он удобен в некоторых сценариях. Почему я юзаю FASM? Потому что он мне удобен в некоторых сценариях. Раст я не использовал никогда, но я понимаю всю эту концепцию безопасного программирования и понимаю что это сделано во благо, а не наоборот. Когда тебя компилятор бьёт по рукам за плохой код - это во благо, особенно на фоне кучи уязвимостей в старом софте.
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    В этом вся замечательная суть языка. Он именно для этого и создавался.

    Ну, а на счет дружелюбной dll, экспортирующей модные молодежные шаблонные классы, думаю, специалистам, разрабатывающим крупные проекты в больших командах, рассказывать не нужно. Одно удовольствие от ее использования и никаких подводных :)
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.454
    Адрес:
    Россия, Нижний Новгород
    Забавно, что в той теме некоторые тоже сопротивляются безопасным концепциям и рассуждают о здравом смысле при написании проверок: «моя прога ожидает на вход только такой файл, кто в здравом уме будет подкладывать что-то другое?»
    Вот с таких компромиссов - здесь проверяем, здесь не проверяем - и начинаются сложноотлаживаемые UB: просто автор решил, что все вокруг работают в здравом уме. А они не работают.
    --- Сообщение объединено, 7 янв 2024 ---
    Да, чтобы было что-то удобнее ассемблера. Как ступенька выше - си справляется превосходно.

    Шаблоны и нельзя экспортировать, ведь это не код, это только, гм, шаблон, по которому будет создаваться код.
    Если соблюдаешь ABI, и если либы используют общий плюсовый рантайм (например, если либы и приложение линкуются динамически с msvcrt), никаких подводных нет, ты можешь передавать владение объектами даже между границами библиотек.
    Если кто-то линкуется с рантаймом статически, то всё, что он создал, освобождать должен тоже он.
    Или, если передавать владение не нужно, из библиотеки наружу отдают не сам объект, а ссылку на интерфейс.

    Все эти нюансы справедливы и для чистого си: соблюсти ABI и соответствие аллокаторов-деаллокаторов, поскольку в си тоже может быть ситуация, что либа со статически влинкованным рантаймом выделила malloc’ом строку, вернула её из библиотеки, а приложение, вместо того, чтобы для освобождения вызвать деструктор из либы, решило освободить её своим free из своего CRT: вот и поймали UB.

    И разработчики на си и плюсах про все эти нюансы знают, поэтому экспортирование плюсовых сущностей - обычное дело.
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Если. Если. Если. Если. Если. Если... То никаких подводных и обычное дело :)
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.454
    Адрес:
    Россия, Нижний Новгород
    Так подводные те же, что в си, он ничем не лучше.
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Без названия.jpeg
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.454
    Адрес:
    Россия, Нижний Новгород
    q2e74 нравится это.
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    q2e74 нравится это.
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    на си - нумберы в основном считаю, а редактор codelite раньше пользовал, теперь в основном на вскод перешёл.
    все - это какие? а выделение памяти - тут подходы могут быть разные: если заведомо знаешь, что на машине есть свободная память в нужном объёме, то лишнюю проверку можно откинуть. другой Вопрос, что при долгих расчётах надо делать чекпойнты, дабы откатывать процесс после обвала.
    вот когда это наследие выпилят и забудут, а так база-то остаётся прежняя. А от новомода лишь тормоза идут, можно ещё вспомнить о дровах в юзермоде. :)
     
    Research нравится это.
  14. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    868
    Я же написал. Как минимум возвращаемые значения функций нужно проверять, а вот такое -
    это по моему мнению верх непрофессионализма и говнокодерства. Задам я огромное количество lines или columns и твой код упадет с AV.
    Так от него кучами оберток отгораживаются чтобы сделать как можно более безопасным и удобным. Даже в самом WINAPI добавляют обертки на существующие проблемные API. Есть SetWindowLong с GWL_WNDPROC, а есть более безопасная SetWindowSubclass. Не с проста ее добавили. Был убогий vfw, а сделали объектно-ориентированный Media Foundation. Тоже самое со звуком waveIn/Out заменили на Core Audio. Даже для окон прикрутили IAccessible, а не какой-то сырой С интерфейс в духе 16-битных систем.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Шарпы, объясняйте свою маленкость: https://habr.com/ru/companies/ruvds/articles/784776/ - очень забавно, понятно, что там нет сборщика мусора и кучи других вещей, делающих Шарпы удобными, но с другой стороны теперь можно с уверенностью сказать, что написать shell-код на Шарпах вполне возможно.
     
  16. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.454
    Адрес:
    Россия, Нижний Новгород
    Даже на хабре есть спецы)
    upload_2024-1-9_1-8-57.png
     
  17. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    меня Ты прям раскритиковал - аж нИмАгу :) Однако, Ты весьма однобоко рассматриваешь проблему - прежде, чем вспоминать про чекеры, надобно ответить на акь минимум 4е Вопроса..

    1. где бегает код.
    2. что за клиенты.
    3. какова длина расчётов.
    4. адекватность ТЗ к доступным ресурсам.
    ++++++
    ещё Ты вспомнил про говнокод.. знай, Товарищ, - говнокод всегда был лучшим товаром для продаж :laugh1::laugh2::laugh3: есть куча прогеров, кои считают, что не пишут говнокода, а в реале они пишут хуже (чем говнокод) - говнокод, кой не продаётся.. вот можем вспомнить жабу - жаба есмь сам идеал говнокодерства и при всём том она - это самый прекрасный яп из когда-либо созданных: пишешь крендель и он работает.. работает ПОЧТИ ВЕЗДЕ, ети его налево :drinks:
    вот Ты сам же и повествуешь про говнокодерство: вот простой пример..

    C style: iC = add_complex_numbers(iX, iY);
    C++ style: iC = iX + iY;
    +++++
    как бЫыыы на плюхе выразительней и короче. Однако, подход плюхи идиотский == на сихе можно получить ровно ту же запись с помощью макросов и не клепать горбатого по чём зря.

    ЗЫ.. у меня нет ща особо времени, чтоб зависать на форуме, тч ответы мб с задержкой всякой длины :)
     
  18. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.454
    Адрес:
    Россия, Нижний Новгород
    Всё можно, но зачем?..
     
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    Ну сделай мне RAII на макросах, или проверку на тип указателя во время компиляции, или может быть сразу borrow checker на макросах?

    Интересно, ответом на вопрос "на чем вы пишите" будет, как и в случае с нашими спецами, "ни на чем не пишу, просто люблю поговорить"?
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.320
    6587442405.jpg
    ...а потому, что нужно уметь боксировать, чтобы защищаться от агрессивных цэшников, которые твердят, что раст не нужон...
     
Статус темы:
Закрыта.