
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

Дед Пегас
09.01.2018
07:50:10

Олег
09.01.2018
07:51:30

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

Antony
09.01.2018
08:36:35

Google

Berkus
09.01.2018
08:43:45

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

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

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

Олег
09.01.2018
08:46:23

Thorn
09.01.2018
08:48:32

Berkus
09.01.2018
08:50:26

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

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

Antony
09.01.2018
09:07:12

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

Berkus
09.01.2018
09:14:14

Google

Ilia
09.01.2018
09:15:01

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

Ilia
09.01.2018
09:15:40

Vladislav
09.01.2018
09:15:42

Дед Пегас
09.01.2018
09:16:01

Berkus
09.01.2018
09:16:15

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

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

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

Berkus
09.01.2018
10:20:34

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

Alexander
09.01.2018
10:28:55

fox.cpp
09.01.2018
10:29:44

Thorn
09.01.2018
10:30:11

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 тоже можно юзать)

Antony
09.01.2018
10:53:45

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

Google

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

Evgeniy
09.01.2018
11:09:29

pavel
09.01.2018
11:10:12

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

pavel
09.01.2018
11:22:37

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

Ned Ogl
09.01.2018
11:40:30

Berkus
09.01.2018
11:41:02

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