Pull to refresh
4
0.1
Send message

что компилятор в принципе не имеет понятия UB

Не помню тут ли писали или к другой статье, насчет поведения +, что у раста переполнение в дебаге это trap, а в релизе wrap around (я подозреваю на проверяемой платформе).
Я сам не проверял, но если это так, то понятие UB должно быть. Иначе как сделать я просто не представляю, иначе дефайненый wrap around начнет сильно замедлять код на определенных архитектурах.
Если это все так, то поведение + по сути не отличается от clang со включенным ubsan в дебаге.

Ну кажется ваш собеседник именно это и имел ввиду, что нельзя просто так бесплатно сделать поведение определенным. Будет цена в виде оверхеда на платформах которым не повезло.
А пачка интринзиков с опредененным поведением есть и в gcс, так же как опция -fwrapv, которая делает определенным поведение +.

Не очень понял ваш ответ, не делать оптимизаций разве достаточно?
Я правильно понимаю что вы имеете виду что rust отключит оптимизацию, но оставит один единственный add этой платформы? Ну это же настоящий межплатформенный UB, на одной платформе получим одно, на другой - другое.
Единственное как можно избежать тут UB - это рассчитеть на поведение одной платформы, и добавить лишних инструкций на другой платформе, где поведение add отличается. Тоесть на этих платформах без UB компилер будет генерить менее эффективный код. Или я что-то не так понимаю?

В документации написано что этот анализатор пока только для C, а на С++ может косячить. Так что да, видимо gcc тут плохой пример. Но как ниже показали clang c -Wdangling-gsl таки справился и при исправлении варнинг уходит.

Справедливости ради, анализатор gcc ваш пример сразу поймал:

./1.cpp:3:29: warning: use of uninitialized value ‘<unknown>’ [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
    3 | std::string read() { return "foo"; }
      |                             ^~~~~
  ‘std::string read()’: events 1-3
    |
    |    3 | std::string read() { return "foo"; }
    |      | ^~~                         ~~~~~
    |      | |                           |
    |      | |                           (3) use of uninitialized value ‘<unknown>’ here
    |      | (1) region created on stack here
    |      | (2) capacity: 8 bytes
    |
./1.cpp:3:29: warning: use of uninitialized value ‘<unknown>’ [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
    3 | std::string read() { return "foo"; }
      |                             ^~~~~
  ‘int main()’: events 1-2
    |
    |    4 | int main() {
    |      |     ^~~~
    |      |     |
    |      |     (1) entry to ‘main’
    |    5 |     std::string_view s = read();
    |      |                          ~~~~~~
    |      |                              |
    |      |                              (2) calling ‘read’ from ‘main’
    |
    +--> ‘std::string read()’: events 3-6
           |
           |    3 | std::string read() { return "foo"; }
           |      | ~~~         ^~~~            ~~~~~
           |      | |           |               |
           |      | |           |               (6) use of uninitialized value ‘<unknown>’ here
           |      | |           (3) entry to ‘read’
           |      | (4) region created on stack here
           |      | (5) capacity: 8 bytes
           |

Ctrl+P - fuzzy поиск по посещенным папкам - реально удобно и быстро. В Фаре только плагином похожее можно сделать.

В far2l это есть из коробки - Alt-F12 выводит список недавно посещенных, Ctrl-Alt-F ищет в этом списке.

Если что travis-ci дает бесплатно контейнеры для сборки опенсорса с гитхаба, можно настройить автосборку при коммите и загрузку артефактов. И вроде есть еще пара бесплатных вариантов.

Если нацелен на замену, хорошо бы бенчмарки посмотреть, есть такие?

У gcc\clang есть рантаймовые asan, tsan, ubsan, которые замедляют выполнение. У msvc только asan.

Просто FYI: баг открывать не надо, если поставить gcc опцию -fwrapv то результат будет соответствовать clang.

Да, я тоже работал с такими где не выровненное чтение - креш. Я не про это, а про то что тут выравнивание нужно не только для скорости, (инструкцию можно применить и другую, ситуация для asan не поменяется) но и для гарантии непересечения страницы загрузкой.

Все верно, но проблема слегка ортогональна sse, при загрузке int64 или int32 принципиально все то же самое - главное на другую страницу не обратиться, затем и выравнивание. То есть это для целого набора архитектур безопасно, не безопасные еще поискать надо.

Точно такое же UB есть в Qt в qustrlen, и оно там просто подавлено для asan через __attribute__((__no_sanitize_address__)).

Все эти __aeabi_fmul так же довольно сильно тормозят код. Их вставляет стандартный arm gcc, даже если указать neon, а вот в android ndk от них избавились (когда gcc еще там был). Насчет clang не помню, но вроде так же. Так что есть еще куда ускорять.

Погодите, 150к loc это примерно 6мб? Это довольно немного. Для сравнения Qt - 1.2 гб

Есть кросс-платформенные аналоги WinMerge: KDiff3 и Meld.

А не думаете с многопроцессной системы на мультитредную перейти? Какие сдерживающие факторы?

Как я понял autotools для конструирования configure.ac дает некие хелперы типа AC_SEARCH_LIBS. Но большую часть кода надо будет написать вручную. В результате оно работает у разработчика, но часто просто море мелких багов. Например из того что встречал - конфигур корректно находит либу через pkgconfig, но потом начинает тестировать фичи и делает просто -lлиба $LIBS, корректно подставить LIBS из pkgconfig забывают, да и самостоятельно писать -lлиба тут некорректно, надо было pkg-config либа --libs.
В результате проверки провалились, но либа подцепилась, имеем молча недоработающее приложение. Meson же дает возможность не писать больше ручного кода -> меньше ошибок в разных конфигурациях.

Про select дополню что на винде он тоже не рекомендуется, если дескрипторов может быть много (хотя их и можно расширить на этапе компиляции). Помимо completion ports есть специальные WSAEnumNetworkEvents для этого.

На VNC у меня тоже не получалось. А xrdp\freerdp пробовали? У меня с ними даже лучше чем с последними десятками. По ссылке выше вроде тоже они используются.

1
23 ...

Information

Rating
3,363-rd
Location
Россия
Registered
Activity