@ProCxx

Страница 1635 из 2477
Evgeniy
09.01.2018
07:48:13
http://blog.llvm.org/2018/01/improving-link-time-on-windows-with.html

Дед Пегас
09.01.2018
07:48:19
Кодец у тебя будет один, но после инстацирования у тебя по факту будет две функции.)

Thorn
09.01.2018
07:48:47
что значит "вызывать в блоке extern"? там объявления

ShadoWalkeR
09.01.2018
07:48:58
Ну это понятно, просто давно хотел с шаблонами поиграться а тут отличная возможность

Google
Олег
09.01.2018
07:49:32
Т.е. принципиальной разницы между foo() и bar<int>() нет.
Интересно, какое имя символа будет у второй. В обычном c++ и в блоке extern "C".

Дед Пегас
09.01.2018
07:50:10
Олег
09.01.2018
07:51:30
В C++ варианте будет с манглингом, в C - без.)
Обрежется ли <int> вместе с манглингом?

Thorn
09.01.2018
07:54:39
https://godbolt.org/g/pEJYva

_Z3funTiET_S0_

Дед Пегас
09.01.2018
08:00:46
Занятно.

ShadoWalkeR
09.01.2018
08:00:58
А не - не получится изза дурацкого Lua. Там же тип значения выводится из того какую функцию дерну для получения из стека - luaL_checkint/luaL_checknumber/luaL_checkunsigned поэтому не шаблонизировать код

Дед Пегас
09.01.2018
08:01:02
Без extern "C" он тоже такое упрт имя напилил.

ShadoWalkeR
09.01.2018
08:02:38
Как мне в свое время в c_plus_plus@c.j.r объясняли - там разница в том, как формруется вызов функции. Кажется в С++ они убираются в виртуальные таблицы или чтото в этом роде - не помню точно

Thorn
09.01.2018
08:03:34
это, судя по всему, про виртуальные методы речь была, а не про шаблоны

ShadoWalkeR
09.01.2018
08:04:32
Я тогда в первый раз столкнулся с extern "C" и спросил как работает. Но это года 4 назад было, поэтому точно не помню уже

Серж
09.01.2018
08:20:07
поправьте меня если я чушь напишу, манглинг нужен для реалзиации adhoc полиморфизма, в си нет перегрузки функции, соответственно невозможно объявить 2 функции с одинаковым именем, вот в с++ и придумали в имя функции кодировать аргументы (манглить), extern C вроде бы в том числе указывает что нужна совметсимость с си ABI, и манглить ничего не надо. То же самое происходит и при инстанцировании шаблона. Вот поцоны на стек оверфлоу гнобят за такой же вопрос: https://stackoverflow.com/questions/4877705/why-cant-templates-be-within-extern-c-blocks

Google
Berkus
09.01.2018
08:43:45
Т.е. принципиальной разницы между foo() и bar<int>() нет.
bar<int?) как будет с сишным манглингом выглядет?

Дед Пегас
09.01.2018
08:44:10
Не затралишЬ!

Berkus
09.01.2018
08:45:02
воот, а в с++ ЕСТЬ

Дед Пегас
09.01.2018
08:45:28
Даладна)

Thorn
09.01.2018
08:48:32
bar<int?) как будет с сишным манглингом выглядет?
в нормальном языке предусмотрели бы возможность указать имя exported символа явно, но это же с++

Andrey
09.01.2018
08:50:56
Напишите предложение в комитет, делов то

Thorn
09.01.2018
08:51:24
и копию в спортлото

Vladislav
09.01.2018
08:51:42
в спорткомитет

Thorn
09.01.2018
08:53:30
в gcc вроде есть атрибут alias, но работает ли он с explicit template instantiation — хз

Berkus
09.01.2018
08:56:07
в gcc есть что-то типа asm_name

по идее должно работать с чем угодно, но хз

Antony
09.01.2018
08:58:56
bar<int?) как будет с сишным манглингом выглядет?
будет выглядеть как bar при том даже если он находится в каких-то namespace

Серж
09.01.2018
08:59:44
а правильный ответ - нискампилируется

Antony
09.01.2018
09:07:12
а правильный ответ - нискампилируется
Почему это? Код в студию :)

Thorn
09.01.2018
09:07:46
см выше ссылку на пример, все компилируется и манглится, как будто extern "C" нет

Google
Berkus
09.01.2018
09:15:02
зачем его вызывать в extern не понятно

Ilia
09.01.2018
09:15:40
Шаблоны разве линкуются?
Шаблоны не линкуются

Дед Пегас
09.01.2018
09:16:01
Шаблоны не линкуются
Это был псевдосарказм.

Berkus
09.01.2018
09:16:15
казалось бы, причем тут JNI
ну там точно такая же фигня с вызовами, как и в луа

ShadoWalkeR
09.01.2018
09:17:14
Я изучаю как для Lua модули делаются на С/С++. Хотел еще с шаблонами поиграться, но опять не срослось ?

Alexey
09.01.2018
09:24:34
Александр
09.01.2018
09:25:12
народ, есть онлайн компиляторы старых версий MSVC? на godbolt только последняя висит

ShadoWalkeR
09.01.2018
09:25:12
С этим понятно. Шаблоны - это так личная хотелка была)

Matwey
09.01.2018
09:46:59
Господа

А можно ли как-нибудь проконтролировать что в иерархии классов с множественным наследованием

Заданный тип B не является предком более одного раза?

Andrey
09.01.2018
09:48:27
Можно пометить его везде виртуал

Чтобы точно был один раз

Antony
09.01.2018
09:49:46
см выше ссылку на пример, все компилируется и манглится, как будто extern "C" нет
Да, похоже что в случае с явным инстанцированием шаблонной функции он сохраянет её полное имя без манглинга .type int fun<int>(int), @function : https://godbolt.org/g/CQH1y8 При этом у не шаблонных функций он откусывает все параметры и возвращаемое значение, и не манглит имя (см .type test, @function и .type test2, @function )

Thorn
09.01.2018
09:50:27
там можно выключить кнопочку demangle, будет видно реальные символы

Antony
09.01.2018
10:01:15
упс :) Значит явно проинстанцированные шаблоны он в любом случае манглит

Получается, что только через http://www.boost.org/doc/libs/1_66_0/doc/html/BOOST_DLL_ALIAS.html можно экспортнуть с нормальным именем

Google
Vladislav
09.01.2018
10:06:11
Получается, что только через http://www.boost.org/doc/libs/1_66_0/doc/html/BOOST_DLL_ALIAS.html можно экспортнуть с нормальным именем
а как их потом использовать из C? Boost же создает отдельную секцию для этих алиасов, если я правильно помню

Berkus
09.01.2018
10:20:34
упс :) Значит явно проинстанцированные шаблоны он в любом случае манглит
ну вообще разумно - хочешь экспортировать, заворачивай в сишечку )

Ned Ogl
09.01.2018
10:26:36
Кто знает, в какой момент загрузки linux в память подтягивается libc?

fox.cpp
09.01.2018
10:29:44
Кто знает, в какой момент загрузки linux в память подтягивается libc?
Что-то я сомневаюсь, что ядро волнуется о загрузке каких-то файликов для юзерспейса.

Thorn
09.01.2018
10:30:11
Кто знает, в какой момент загрузки linux в память подтягивается libc?
вероятно, при старте первого динамически линкованного бинарника

fox.cpp
09.01.2018
10:30:23
^ вот и ответ.

Ned Ogl
09.01.2018
10:30:59
Но теперь более широкий вопрос. Какие вообще либы могут понадобиться линъядру для загрузки?

Или там всё полностью статическое?

Egor
09.01.2018
10:32:29
Не, ну, есть модули

fox.cpp
09.01.2018
10:32:32
Там вообще нет понятия 'либа', я так думаю.

Thorn
09.01.2018
10:32:55
ядру только .ko модули могут понадобиться. см. содержимое initrd

fox.cpp
09.01.2018
10:33:30
Разве что модули, и то, они загружаются не самим ядром, а скриптами в initramfs, udev и прочей дрянью.

Ned Ogl
09.01.2018
10:35:47
Все, вопросов нет

Я тут с пеной у рта доказываю человеку, что не обязательно иметь libc (или вообще хоть какую-то привязку к С), чтобы запустить ядро линя (с условно заменённым /sbin/init)

Хотел убедиться прост

fox.cpp
09.01.2018
10:38:29
Ну, C без libc тоже можно юзать)

ShadoWalkeR
09.01.2018
10:54:33
Ого какое обсуждение вызвал мой вопрос ?

Google
pavel
09.01.2018
11:00:23
Степень фундаментальности вопроса прямо пропорциональна силе срачевания от него. Спроси про природу пространства-времени - вообще в религию уйдут.

pavel
09.01.2018
11:10:12
сила срачевания обратно пропорциональна пониманию)
@EvgeniyZh понимание по какому угодно предмету маловероятно на всей выборке человеков в интернете

Alexander
09.01.2018
11:10:36
оффтопим, молодые люди

pavel
09.01.2018
11:22:37
оффтопим, молодые люди
Как и ты со своими "на 17-й секунде".

Berkus
09.01.2018
11:39:23
а юзерспейсу когда понадобится тогда и подтянет

Berkus
09.01.2018
11:41:02
кинь ссыль
https://t.me/pro_osdev

Matwey
09.01.2018
11:57:08
только-что узнал про "delegate to sister"

о сколько нам открытий чудных

Antony
09.01.2018
11:59:04
готовит С++ стандарт двадцатый

Александр
09.01.2018
12:37:55
кто?

Berkus
09.01.2018
12:41:09
стандарт

Серж
09.01.2018
12:42:16
его один человек в силе будет охватить целиком?

Александр
09.01.2018
12:43:18
стандарт
А готовит кто?

Simon
09.01.2018
12:44:06
Berkus
09.01.2018
12:48:35

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