@ProCxx

Страница 2287 из 2477
Ilia
19.08.2018
06:32:09
Ок. Хочу пример когда сишный интерфейс пострадает от ABI совместимости
Изменение function call convention. Изменение именования функций. Было уже 20 раз

Nik
19.08.2018
06:36:24
Изменение function call convention. Изменение именования функций. Было уже 20 раз
Function call convention на 64-бит системах один. Раньше он был частью типа функции - т.е. если ты cdecl позвал как stdcall - ссзб. Что такое изменение именования функций вообще не понял. Манглинга нету, а простое переименование относится к ABI как слон к балерине.

Ilia
19.08.2018
06:47:24
Microsoft например добавлял впереди _. Плюс lover case upper case.

Nik
19.08.2018
06:52:55
И до сих пор добавляет, правда? При этом есть .def файл, в котором можно имена указать как захочешь. ABI совместимость это не трогает. ABI совместимость между платформами не существует, потом пофигу что там добавляет msvc, пока он это добавляет всегда и это документировано. Проблемы с ABI это, например, когда ты на той же платформе берешь компилятор посвежей и ничего не меняя в коде просто компилируешь новый бинарь, и после этого клиенты, которые правильно работали со старой версией отваливаются нафиг

Google
Andrey
19.08.2018
08:32:13
Увы, если подразумеваемой тобой хернёй не страдать, проблем будет ещё больше, чем если страдать
Name mangling, конечно, никто никогда менять не будет (хотя это и не гарантируется Microsoft'ом), но, скажем, в VS2017 в С++ поменялся layout классов с несколькими пустыми базами, поэтому для обратной совместимости даже ввели __declspec(layout_version(19)). Для C layout структур не менялся и никогда не будет меняться.

Joy
19.08.2018
09:42:26
Господа, прошу помощи в личку. Суть - не могу настроить сборку проекта.

cmake тут

https://pastebin.ubuntu.com/p/vvTr7TmdD4/

структура проекта: /src/main.cpp /src/statemachine.cpp /include/statemachine.hpp /include/state.hpp /include/DEFINITIONS.h /build CMakeList.txt собирать пытаюсь из build

на этапе линковки получаю

/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main'

ранее это был проект с sfml, я повырезал из cmakelist всё лишнее, но может как-то криво повырезал, уже часа два бьюсь

или с благодарностью приму в дар рабочий "универсальный" cmakelist для небольших проектов

Roman
19.08.2018
10:03:00
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/../../../../lib/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main'
Линкер не находит функцию main. Похоже что у тебя main.cpp не добавлен в список файлов на компиляцию.

Joy
19.08.2018
10:04:05
[ 33%] Building CXX object CMakeFiles/pocketdung.dir/src/main.cpp.o [ 66%] Building CXX object CMakeFiles/pocketdung.dir/src/statemachine.cpp.o

после этого ошибка

до линкера дошло, все (а их целых ДВА) файла проекта скомпилились перед этим

Google
Roman
19.08.2018
10:09:28
Включи verbose mode и посмотри какие обьектники линкеру передаются. Функция main у тебя есть?

Egor
19.08.2018
10:21:22
никто не встречал на винде, что SetUnhandledExceptionFilter не вызывается из std::thread, т.к. они noexcept?

Egor
19.08.2018
10:52:43
в main() ставим SetUnhandledExceptionFilter, далее std::thread t([] { throw 5; });, наш обработчик не вызовется, вместо него будет терминейт, т.к. std::thread помечен, как noexcept и он не даёт вызвать хендлер

Евгений
19.08.2018
10:54:21
Щас бы эксепшоны из тредов ловить в другом потоке

В 2к18

Constantine
19.08.2018
10:54:27
хм... так отдельные потоки изолированы по исключениям

Egor
19.08.2018
10:54:51
получается даже по SEH

Constantine
19.08.2018
10:55:29
SEH это не про throw 5; я полагаю

Egor
19.08.2018
10:55:30
мне минидамп надо сделать, а там terminate()

Constantine
19.08.2018
10:55:59
так terminate вызван обработчиком

вообще там обертки с catch-ем есть для промизов

Egor
19.08.2018
10:56:39
нет, он компилятором впихивается из-за noexcept

Constantine
19.08.2018
10:57:03
да, но исключение было обработано

Egor
19.08.2018
10:57:05
т.е. CreateThread будет работать так, а std::thread уже нет

What's happening here is that std::thread is defined as noexcept which enforces termination if an unhandled exception propagates out of it. As such, the throw inside the thread should never have propagated out and the handler set in SetUnhandledExceptionFilter shouldn't have been invoked in any case. To catch this scenario, use set_terminate in addition to SetUnhandledExceptionFilter.

https://developercommunity.visualstudio.com/content/problem/235602/setunhandledexceptionfilter-callback-not-invoked-f.html

Constantine
19.08.2018
10:58:05
вы же понимаете, что исключение до UnhandledExceptionFilter вообще не дошло?

Ivan
19.08.2018
10:58:12
мне минидамп надо сделать, а там terminate()
https://en.cppreference.com/w/cpp/error/set_terminate

Вот можно попробовать

Google
Egor
19.08.2018
10:58:25
set_terminate уже начал делать

но в set_terminate я уже не могу получить исключение, компилятор пишет: error C2707: '_exception_info': bad context for intrinsic function note: _exception_info() outside an exception filter

Constantine
19.08.2018
10:59:46
так поймайте его кек

Egor
19.08.2018
11:00:12
ну для каждой std::thread обёртку придётся делать

Egor
19.08.2018
11:00:30
видимо, включая SEH

Constantine
19.08.2018
11:00:49
а вы собираетесь SEH в лицо получать?

там, вроде, даже под /EHsc это черевато

Egor
19.08.2018
11:01:14
а куда его ещё получать?

Constantine
19.08.2018
11:01:28
SEH не должно триггериться

Egor
19.08.2018
11:01:53
ну вот в минидампе посмотрю и исправлю, где вылезло

Constantine
19.08.2018
11:02:24
если у вас pagefault падает в область вне вашей памяти, то вы уже совершенно точно в UB области плюсов

Egor
19.08.2018
11:03:05
да я и хотел бы винапи хендлер в этом месте и минидамп

Constantine
19.08.2018
11:04:33
ну так не запускайте бросающие исключения потоки просто так)

всякие promise-ы в этом случае exception_ptr через потоки таскают

Egor
19.08.2018
11:06:19
да мало ли кто, какая библиотека что создаст и что кинет, тут общий подход от системы рубится ноексептом

Constantine
19.08.2018
11:06:58
а если какая библиотека вызовет _exit

Egor
19.08.2018
11:07:19
всё в порядке, хочу видеть краши

Constantine
19.08.2018
11:07:33
_exit это по сути ::ExitProcess без всего

Google
Egor
19.08.2018
11:07:49
подходит

Constantine
19.08.2018
11:07:59
если библиотека работает не как надо - вопрос к авторам библиотеки

Egor
19.08.2018
11:08:15
само собой

проверил SEH из std::thread обрабатываются SetUnhandledExceptionFilter, тогда всё более менее

Yarique
19.08.2018
12:17:55
Подскажите, пожалуйста, тезисно: почему std::bind или boost::bind хуже чем использование лямбд?

Rime
19.08.2018
12:28:32
Это типа библиотека такая?

Случаем не для Serialization?

Соломончик
19.08.2018
12:29:08
Yarique
19.08.2018
12:29:23
Это типа библиотека такая?
Это больше чем библиотека

Соломончик
19.08.2018
12:29:25
одна из самых известных для плюсов

Yarique
19.08.2018
12:29:46
Она выглядит бесконечной

ed
19.08.2018
12:33:52
Негласный плюсовый стандарт

Max
19.08.2018
12:35:30
Подскажите, пожалуйста, тезисно: почему std::bind или boost::bind хуже чем использование лямбд?
Тезисно -- потому что bind медленнее. Он тянет за собой аллокации памяти и лишает компилятор возможности соптимизировать вызов. В то время как лямбда занимает просто один прямой вызов, и может даже и просто заинлайниться.

Rime
19.08.2018
12:56:21
Это больше чем библиотека
Как работать в ней с Serialization? А-то не знаю где там туториалы по ней искать или типа того, для собственного движка 2D игры

Google
Max
19.08.2018
12:59:11
А [x=big_thing, v=vector]{ /* some code */ } Не будет тянуть разве аллокации ?
Безусловно, будет. Так же как и вызов функции с такой сигнатурой. Стоит рассмотреть возможность передавать это по ссылке. Только bind сделает ещё и свои дополнительные аллокации.

Побитый
19.08.2018
13:03:41
Подскажите, пожалуйста, тезисно: почему std::bind или boost::bind хуже чем использование лямбд?
У bind просто читаемость сильно хуже. Большинство вещей для которых юзают bind, можно сделать через лямбду.

Yarique
19.08.2018
13:10:25
boost::asio::async_write( m_socket, boost::asio::buffer(m_pending_sends.front()), boost::asio::bind_executor( m_io_strand, [ self=shared_from_this(), send_buffer_it=m_pending_sends.begin() ] (auto &&ec, auto &&...) { self->HandleSend(ec,send_buffer_it); } ) ); А такая лямбда лишних аллокаций динамических не должна добавлять?

?????
19.08.2018
13:10:35
Ща

https://www.youtube.com/watch?v=JtUZmkvroKg

Yarique
19.08.2018
13:38:29
https://www.youtube.com/watch?v=JtUZmkvroKg
В этом видео нет про производительность(:

?????
19.08.2018
13:40:28
В этом видео нет про производительность(:
Хм, странно, вроде это было оно

Может быть в том, что назвается the cost of lambdas

Xessao
19.08.2018
13:54:33
Yarique
19.08.2018
14:18:42
Слишком жирно.
Скорее площадка для подготовки технических спецификаций новых стандартов и иногда качественные готовые решения

Matwey
19.08.2018
14:36:40
Господа

А вот кто знает

Страница 2287 из 2477