Berkus
(сейчас вот)
Дмитрий ⬡
(сейчас вот)
Клёво! А это имеется в виду какой компилятор?
Andrei
Дмитрий ⬡
Код в студию.
https://github.com/LDVSOFT/spbau-term7-graphics/tree/master/hw4 . Что для сборки нужно в README написано.
Падает в Hw4Window::gl_render_marching, в данный момент я с помощью valgrind выкидываю вызовы OpenCL и смотрю на то, что остаётся. В какой-то момент явно повреждается код/данные аллокатора(без идей как ловить).
ShadoWalkeR
Добрый день, подскажите вот такой вопрос - в extern "C" оборачиваются функции в С++, которые будут API для вещей работающих только с сишными библиотеками и насколько помню вещей добавленных в С++ там не должно быть. А как в данном случае обрабатываются шаблоны? Насколько помню они вычисляются на этапе компиляции и если я вызов засуну в блок extern "C", то в результате там должна оказаться готовая функция.
Max
Привет
🦥Alex Fails
Шаблоны емнип будут все равно как extern "C++" линковаться
Крылатый
Шаблоны разве линкуются?
Крылатый
Вроде как только их инстансы.
Vladislav
конкретные инстанциации - да
Крылатый
Т.е. принципиальной разницы между foo() и bar<int>() нет.
ShadoWalkeR
У меня есть одинаковый код для int и float. Чтобы не копипастить хочу шаблонную функцию написать и вызывать её в блоке extern
Крылатый
Ну, всё верно.
Evgenii
http://blog.llvm.org/2018/01/improving-link-time-on-windows-with.html
Крылатый
Кодец у тебя будет один, но после инстацирования у тебя по факту будет две функции.)
Thorn
что значит "вызывать в блоке extern"? там объявления
ShadoWalkeR
Ну это понятно, просто давно хотел с шаблонами поиграться а тут отличная возможность
Крылатый
Thorn
https://godbolt.org/g/pEJYva
Thorn
_Z3funTiET_S0_
Крылатый
Занятно.
ShadoWalkeR
А не - не получится изза дурацкого Lua. Там же тип значения выводится из того какую функцию дерну для получения из стека - luaL_checkint/luaL_checknumber/luaL_checkunsigned поэтому не шаблонизировать код
Крылатый
Без extern "C" он тоже такое упрт имя напилил.
ShadoWalkeR
Как мне в свое время в c_plus_plus@c.j.r объясняли - там разница в том, как формруется вызов функции. Кажется в С++ они убираются в виртуальные таблицы или чтото в этом роде - не помню точно
Thorn
это, судя по всему, про виртуальные методы речь была, а не про шаблоны
ShadoWalkeR
Я тогда в первый раз столкнулся с extern "C" и спросил как работает. Но это года 4 назад было, поэтому точно не помню уже
Сережа
поправьте меня если я чушь напишу, манглинг нужен для реалзиации adhoc полиморфизма, в си нет перегрузки функции, соответственно невозможно объявить 2 функции с одинаковым именем, вот в с++ и придумали в имя функции кодировать аргументы (манглить), extern C вроде бы в том числе указывает что нужна совметсимость с си ABI, и манглить ничего не надо. То же самое происходит и при инстанцировании шаблона.
Вот поцоны на стек оверфлоу гнобят за такой же вопрос:
https://stackoverflow.com/questions/4877705/why-cant-templates-be-within-extern-c-blocks
🐙 Antony
Berkus
Крылатый
Крылатый
Не затралишЬ!
Berkus
воот, а в с++ ЕСТЬ
Крылатый
Даладна)
Oleg
Berkus
Andrey
Напишите предложение в комитет, делов то
Thorn
и копию в спортлото
Vladislav
в спорткомитет
Thorn
в gcc вроде есть атрибут alias, но работает ли он с explicit template instantiation — хз
Berkus
в gcc есть что-то типа asm_name
Berkus
по идее должно работать с чем угодно, но хз
Сережа
а правильный ответ - нискампилируется
🐙 Antony
Thorn
см выше ссылку на пример, все компилируется и манглится, как будто extern "C" нет
Thorn
Berkus
Berkus
зачем его вызывать в extern не понятно
Vladislav
Крылатый
Это был псевдосарказм.
ShadoWalkeR
Я изучаю как для Lua модули делаются на С/С++. Хотел еще с шаблонами поиграться, но опять не срослось 😃
Alexey
Александр
народ, есть онлайн компиляторы старых версий MSVC? на godbolt только последняя висит
ShadoWalkeR
С этим понятно. Шаблоны - это так личная хотелка была)
Matwey
Господа
Matwey
А можно ли как-нибудь проконтролировать что в иерархии классов с множественным наследованием
Matwey
Заданный тип B не является предком более одного раза?
Andrey
Можно пометить его везде виртуал
Andrey
Чтобы точно был один раз
Thorn
там можно выключить кнопочку demangle, будет видно реальные символы
🐙 Antony
упс :) Значит явно проинстанцированные шаблоны он в любом случае манглит
🐙 Antony
Получается, что только через http://www.boost.org/doc/libs/1_66_0/doc/html/BOOST_DLL_ALIAS.html можно экспортнуть с нормальным именем
Vladislav
Berkus
Ned
Кто знает, в какой момент загрузки linux в память подтягивается libc?
Alexander "SonnySlave"
Thorn
Anonymous
^ вот и ответ.
Ned
Ned
Но теперь более широкий вопрос. Какие вообще либы могут понадобиться линъядру для загрузки?
Ned
Или там всё полностью статическое?
Egor
Не, ну, есть модули