Size: a a a

2020 June 19

DS

Dolphin Soft in pro.cxx
Согласен, потому и Си и кресты - все еще немного фигня, и столько холивара вокруг
источник

CD

Constantine Drozdov in pro.cxx
Ну я в свою очередь соглашусь, что, наверное, не хорошо использовать нестандартную терминологию :)
источник

CD

Constantine Drozdov in pro.cxx
Надо бы ввести explicit-involved и что-нибудь еще
источник

ПК

Побитый Кирпич... in pro.cxx
Andrey Davydov
Правильно. Но в C# минимальная единица компиляции assembly и их это устраивает по скорости, и в C++ придется после каждого изменения (в т.ч. имлементации) перекомпилировать существенно больше одного translation unit-а.
А как решили соотносить имя модуля и имя файла? Я тут читал, что без этого компилятор должен будет чуть ли не препроцессировать ВСЕ файлы чтоб понять где какой модуль лежит
источник

AD

Andrey Davydov in pro.cxx
Побитый Кирпич
А как решили соотносить имя модуля и имя файла? Я тут читал, что без этого компилятор должен будет чуть ли не препроцессировать ВСЕ файлы чтоб понять где какой модуль лежит
Никак не решали. Но препроцессировать не нужно, достаточно отлексить, причем только верхушку файла, это далеко не так страшно, как препроцессировать весь файл.
источник
2020 June 20

o

osm1um in pro.cxx
Ребята, есть небольшой топик который жутко сложно, долго разбирать (по крайней мере для меня).

Увидел парня, который нарисовал абсолютно на каждой функции в своей программе inline. Аргументирует это тем, что мы избавляемся от накладных расходов при вызове call.

*Чтобы сказать глупость нужно мало времени, а чтобы объяснить...* (а может я глупый)

Вот есть у нас inline, который рекомендует компилятору перенести тело функции в место вызова, что технически избавляет нас от лишней call инструкции. Но не должно же оно так работать!

*Я понимаю, что функции в 5000 строк переносить - плохая затея. Билд в 2ГБ никому не нужен. Но всё же, в относительно небольших проектах это может давать хоть какой-то значительный прирост?*

Вроде всё логично, но жутко глупо одновременно 🙃

Объясните как вообще понимать подобные вещи, я вот сижу и понять не могу. Тесты пока не проводил, да и кажется мне, что всё будет на уровне погрешности...
источник

EZ

Eugene Zhulenev in pro.cxx
Inline это же вообще про linkage а не по инлайнинг, и компиляторы сами решают что и когда инлайнить
источник

CD

Constantine Drozdov in pro.cxx
osm1um
Ребята, есть небольшой топик который жутко сложно, долго разбирать (по крайней мере для меня).

Увидел парня, который нарисовал абсолютно на каждой функции в своей программе inline. Аргументирует это тем, что мы избавляемся от накладных расходов при вызове call.

*Чтобы сказать глупость нужно мало времени, а чтобы объяснить...* (а может я глупый)

Вот есть у нас inline, который рекомендует компилятору перенести тело функции в место вызова, что технически избавляет нас от лишней call инструкции. Но не должно же оно так работать!

*Я понимаю, что функции в 5000 строк переносить - плохая затея. Билд в 2ГБ никому не нужен. Но всё же, в относительно небольших проектах это может давать хоть какой-то значительный прирост?*

Вроде всё логично, но жутко глупо одновременно 🙃

Объясните как вообще понимать подобные вещи, я вот сижу и понять не могу. Тесты пока не проводил, да и кажется мне, что всё будет на уровне погрешности...
Если речь про C++ вы ошибаетесь в том, что значит inline
источник

CD

Constantine Drozdov in pro.cxx
Расскажите товарищу, что можно включить LTO
источник

o

osm1um in pro.cxx
Constantine Drozdov
Если речь про C++ вы ошибаетесь в том, что значит inline
Я что-то не так понял?
источник

CD

Constantine Drozdov in pro.cxx
osm1um
Я что-то не так понял?
источник

o

osm1um in pro.cxx
Eugene Zhulenev
Inline это же вообще про linkage а не по инлайнинг, и компиляторы сами решают что и когда инлайнить
Разве это не только в C++17 его пометили как обязательный external linkage?
источник

o

osm1um in pro.cxx
*The original intent of the inline keyword was to serve as an indicator to the optimizer that inline substitution of a function is preferred over function call, that is, instead of executing the function call CPU instruction to transfer control to the function body, a copy of the function body is executed without generating the call.*
источник

CD

Constantine Drozdov in pro.cxx
osm1um
*The original intent of the inline keyword was to serve as an indicator to the optimizer that inline substitution of a function is preferred over function call, that is, instead of executing the function call CPU instruction to transfer control to the function body, a copy of the function body is executed without generating the call.*
Because the meaning of the keyword inline for functions came to mean "multiple definitions are permitted" rather than "inlining is preferred", that meaning was extended to variables.
источник

o

osm1um in pro.cxx
Constantine Drozdov
Because the meaning of the keyword inline for functions came to mean "multiple definitions are permitted" rather than "inlining is preferred", that meaning was extended to variables.
Это не спецификация для переменных? Мне всю жизнь врали? 😂

Ладно, объясните тогда как он теперь работает для функций, а то я в край запутался 🗿
источник

o

osm1um in pro.cxx
Вроде работает 🤷‍♂️

https://godbolt.org/z/_SEdJE
источник

EZ

Eugene Zhulenev in pro.cxx
Если убрать inline то main ведь точно такой же, просто print нету в бинарнике
источник

EZ

Eugene Zhulenev in pro.cxx
__attribute__((always_inline)) форсит тот самый инлайнинг
источник

EZ

Eugene Zhulenev in pro.cxx
а обычный inline это для функций в хедерах
источник

o

osm1um in pro.cxx
Eugene Zhulenev
Если убрать inline то main ведь точно такой же, просто print нету в бинарнике
Неа. Время весёлого C++'са 🙃

https://godbolt.org/z/F9jnX3
источник