All streams
Search
Write a publication
Pull to refresh
214
0
gribozavr @gribozavr

Пользователь

Send message
Вот вам простой эксперимент: я скомпилировал Clang в обычном режиме Release+Asserts, и в таком же режиме, но добавив -fno-inline -fno-inline-functions. Измерялось время исполнения тестов (CPU time).

R+A: 12m40.520s
R+A no-inline: 22m29.980s

Выводы о пользе инлайнинга делайте сами.
У LLVM и Clang есть clang-format.
Если вы пишете типичное энтерпрайз GUI приложение, пожирающее мегатонны RAM, в которое меланхоличный пользователь раз в минуту тыкает мышкой и затем размышляет «а что это оно мне написало», то ваш подход оправдан. Я работаю в несколько другой области.
Модули не подразумевают что у вас не будет .h. Они останутся. Модули говорят что у вас не будет #include. В Clang Douglas Gregor идёт дальше и предлагает оставить и #include, но автоматически преобразовывать его в импорт, если .h модульный.

clang.llvm.org/docs/Modules.html
Инлайнинг полезен не только для того чтобы убрать оверхед на вызов функций (но это тоже очень важно для всяких геттеров), а ещё чтобы распространить информацию из места вызова в тело функции и убрать лишнее. Инлайнинг даёт большой положительный эффект по производительности для программ. Именно инлайнинг позволяет убирать оверхед абстракций C++, которые мы так любим.

llvm.org/devmtg/2012-11/Carruth-OptimizingAbstractions.pdf
llvm.org/devmtg/2012-11/videos/Carruth-OptimizingAbstractions.mp4
В статье больше спорных советов, чем полезных. В дополнение к критике выше:

Все определения должны находиться в файлах исходного кода.

class MyClass
{
public:
  int getValue () {return value_;}  // НЕЛЬЗЯ!


Прощай, инлайнинг.
> выпущеные за последние 10 лет новые ОО продукты получают большее распространение, чем их проприетарные аналоги

Тут скорее да, чем нет, но при условии что эти свободные аналоги в первую очередь существуют.
Автор имел ввиду то, что имел ввиду (при условии что переведено правильно):

> Ладно, назовите любой проприетарный продукт, распространённый за последние 10 лет в датацентре… любом датацентре

Кроме того, какая разница когда была выпущена первая версия? Если сейчас нет свободной замены для этого продукта, дата выхода первой версии ничего не меняет.
Ложь.

Например, Vampir: vampir.eu/news/52 — последний релиз летом 2012 года.
OK. Скажем, из области HPC: Gaussian, ANSYS, AMBER, Intel C++ Compiler, Intel Fortran Compiler, PGI Compiler (C, C++, Fortran), Vampir, PBS Pro,…
> Ладно, назовите любой проприетарный продукт, распространённый за последние 10 лет в датацентре… любом датацентре

Любом говорите? Google Search. Gmail. Amazon EC2.
Советам нужна вычитка. Первое, что бросается в глаза — терминология. unsigned — это не атрибут (это вид целочисленных типов), const — это не модификатор (это квалификатор), и методов в C++ тоже нет (есть функции-члены).
На практике это означает что:

> Не следует брать откуда-то файлы stdarg.h и types.h (который на самом деле stddef.h).

Используйте эти заголовки только такими, какие они идут с вашим компилятором.
Не следует брать откуда-то файлы stdarg.h и types.h (который на самом деле stddef.h). Эти файлы — это не часть libc, это builtin заголовки вашего компилятора, они всегда поставляются с компилятором Си, они могут отличаться между версиями компилятора, и конечно же, реализация для, например, gcc и clang, различается.
Вы действительно серьёзно говорите про крон и две секунды в контексте highload?
Highload это не HPC, сколько можно.

А зачем вам на русском?!
Она будет вредна этим людям, да и вы, видимо, не разобрались.

Information

Rating
Does not participate
Location
Украина
Registered
Activity