to post messages and comments.

C++

TIL en.cppreference.com А нахрена неквалифицированные перегруженные функции протекают из неймспейсов? С учётом того что перегруженные функции никак перегруженными не объявляются это выглядит как отстрел ноги, нет?

factorio.com
"Step 3 — Getting rid of boost
Boost is a special kind of demon. It lures you in by giving you all these cool and simple to use features, and then it beats your soul from you by increasing compilation times absurdly. There are two main problems. Problem one is that they don't care much about compile times and two, they want to have everything nice and generic ad absurdum, and they even defend it as the correct style. The result is, that changing boost::mpl::vector66 to std::variant can improve the compile time from 1:44 to 1:20 and getting rid of templates completely by using unions can decrease the compile time to 0:53. I'm talking about changing 2 headers of 2 classes in a project with 3390 files, 410k lines of code and 15Mb of source code. Everything that was compiled to Factorio, GUI, graphics library, networking, entity logic, scripting, modding, logistic system... all these things together took the same time to compile as two instances of boost::mpl::vector. Our current goal is to get rid of the boost library completely."

На highloadcup 195 секунд, 13 место перед финальным разбором.
Я налажал где только мог, последующая оптимизация только замедляла все. Вопросов больше чем ответов. Более поздние версии тормознее чем более ранние. memcmp(4 bytes) дольше чем ((int)c) = 0x0A0D0A0D. Опция -O3 медленнее на 10% чем no optimizations.

НО! Непонятно, как у людей еще быстрей, архитектура вроде одинаковая. Читаем решения.

Программировали с @tilarids на гейбуках, там же меряли (!!) (для чего? все равно корелляции с офиц линукс-тестилкой по перфомансу не было). Учет версий вели с трудом. Тест корректности ответов я написал в предпоследний день, наполовину. До того только "пилил", "точить пилу" было некогда 8).

Жажда адреналина и дух соревновательности это всё. Ради него. Следует задуматься. Его-то я получил сполна, а первое место — нет 8)

Что я делаю неправильно, что чувствую потребность в таких конструкциях?

#define ZIP(__x_, __xs_, __y_, __ys_) \
     for(auto __x_ = __xs_.begin(); __x_ == __xs_.begin();) \
         for(auto __y_ = __ys_.begin(); \
             __y_ != __ys_.end() && __x_ != __xs_.end(); \
             __y_++, __x_++)
int main()
{
     std::vector<int> xs(3);
     xs = {0, 1, 2};
     std::vector<double> ys(4);
     ys = {3.5, 2.5, 1.5, 0.5};
     
     ZIP(x, xs, y, ys){
         std::cout<<(*x)<<" "<<(*y)<<"\n";
     }
}

Вывод:
0 3.5
1 2.5
2 1.5

C++

смотря видео о многомерных массивах, памяти , оптимизации , решил проверить утверждение , что обход массива по строчкам быстрее чем по столбцам.У меня вышло в 4.5 раза . Вроде не ошибка, а при больших объемах данных может стать не приятно ....

С годами, мое мнение, что идейные C++ программисты — просто ебаные невменяемые задроты, аутисты и неадекваты, только подтверждается.

Их не волнует ни сдача продуктов, ни сложность дебага, ни даже красота и простота кода. Ни концепции, ни идеи, ни логика, ни продакшн, ни даже бабки. Нихуя.

Их волнует только то, как бы выдрочиться в кругу таких же задротов: Смотрите! Я знаю шаред_птр! А я! А я! Интрузив_птр! А я знаю как правильно писать деструкторы! А я вчера квиксорт написал и он не сегфолтится! А я буст воткнул в проект! А я! Мама, смотря, я на темплейтах написал числа фибоначчи!

Пиздец блядь, гвозди бы делать из этих людей.

gcc.gnu.org
"Since the first member was constructed successfully, I'd expect its
destructor to be called. Granted, I don't know the exact standard
wording, but my general idea is that once a constructor call
succeeds, an object starts to exist, thus it must at some point
cease to exist, and then its destructor must be called. clang 3.5.0
and visual c++ (according to webcompiler.cloudapp.net
without the GCC extension "(a[2]) { ... }") do call the destructor
every time."

C++

а расскажите мне за виртуальное наследование. Если есть class Base, class Derived1 : virtual Base и class Derived2 : Derived1, Base, то как они в памяти лягут?

Смотрел одного летсплеера, он играл, играл, и тут у него игра вылетела. И прямо такое неподдельное удивление. Игра на консоли — и вылетает! Ну надо же, какой нежданчик! И у яблочников такое удивление встречал. Надо же, на Макосе программы тоже глючат и падают! И на Линуксе, представьте себе. Уж их собирали-собирали, в репозитории пакетов отправляли-отправляли. Как только над ними ни колдовали, какой только хренью, кроме того, что действительно поможет, ни занимались, а они всё равно падают и глючат.

Пользователей пека через уязвимости в программах, написанных на C и C++, имеют в хвост и в гриву двадцать лет, и всем плевать. А что, на игровых консолях в ходу какие-то другие языки разработки? Или, может, на Макинтошах Objective-C штурмует высоты безопасной разработки, конкурируя с Ada, Cyclone и Rust? Я что-то не слышал таких новостей. Так откуда эти завышенные ожидания? Можно только поздравить маркетологов, которые продают консоли и макинтоши как будто это философский камень, на котором программы на C и C++ чудесным образом начинают работать как-то не так, как обычно.

Короче, есть код:
my_shortcut = new QxtGlobalShortcut(this);
connect(my_shortcut, SIGNAL(activated()), m_model, SLOT(my_paste()));
my_shortcut->setShortcut(QKeySequence(QKeySequence::Paste));

Глобально перехватывает нажатие Ctrl+V и делает кое-что своё. Всё как бы работает, но есть один нюанс, после того, как моя программа вешается на шорткат, система больше не вставляет. Как выполнить свой код и вернуть шорткат системе, чтобы она тоже увидела, что пользователь вставить хочет и вставила бы?

OpenOCD прекрасно умеет обращаться с stm32 через stlink.
Прошить main.bin, проверить и сбросить МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "program main.bin verify reset"
Остановить МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "init" -c "reset halt" -c "exit"
Запустить (сбросить) МК:
openocd -f "interface/stlink-v2.cfg" -f "target/stm32f1x_stlink.cfg" -c "init" -c "reset run" -c "exit"
З.Ы.: Если не добавить -c "init" будет ругаться на неизвестную команду "reset".
З.Ы.Ы.: Если не добавить -c "exit" то останется в ожидании коннекта GDB.
З.Ы.Ы.Ы.: GDB нужно коннектить на порт 3333.

Можно бросать исключение как только заподозрено неладное и стучать на сервер по делу, а можно позволить ошибке дать метастазы, коллекционировать на сервере дампы, и по метастазам, разползшимся по всему дампу, определять, откуда они пошли.
<pewpew> плесну-ка и я бензинчику в ваш костёрчик: знаете ли вы, что когда флайлинк падает, он отправляет на сервер дамп памяти, в котором есть, в том числе, и ваши пароли?
<Karumo> pewpew, плеснул так плеснул....
<pewpew> то-то же, бережней обращайся с предметом, не роняй почём зря
<Karumo> у меня он пока не падал, да и паролей я там предусмотрительно не держу)
<HackFresse> но там — это ж в оперативке
<FlylinkDC-dev> pewpew полный дамп формируется если юзер соглашается с этим, а также если стек падения ранее не встречался. все последующие дампы такого типа идут в mini формате.
<FlylinkDC-dev> вот пример топового стека — yadi.sk все дампы мини и содержат только стек.
<FlylinkDC-dev> но раз тут такие параноики завелись можно будет приделать затирку пароля после отправки на сервер
<FlylinkDC-dev> pewpew предлагай где хранить пароль. чтобы он не попадал в дамп.

Был такой компилятор AdaMagic, умел транслировать Ada в C и C++. Там ещё и в Java компиляция была, но это и сейчас есть в GNAT. Потом SofCheck был куплен AdaCore, и этот компилятор пропал из поля зрения. Однако, его продают под другим брендом тут. Его там завернули в какой-то AppCOE на базе Eclipse, но всё это можно развернуть, выкинуть лишнее и докопаться до самых важных файликов, adacgen.exe и adabgen.exe. На них навешена типа защита. Типа — потому что там, во-первых, есть отладочная информация, во-вторых, неиспользуемые функции не выбрасываются. Очень пригодилась мне такая неиспользуемая функция, как write_license_file, например.

Файл license_key.txt генерить научился, зашифрованные DES файлы типа libadartl.a.enc, разшифровал, для PDF пароль нашёл, поставлю qpdf и тоже разшифрую, впрочем, PDF в открытом виде можно и так скачать с сайта. Сейчас пишу инструкции, чтобы мои действия можно было повторить со следующими версиями. Вообще, не похоже, чтобы новый владелец-индиец разбежался развивать этот компилятор, он, скорее, вокруг достраивает всякие OS абстракторы на C, так что смысла большого обновляться не вижу, но тем не менее. Если думать на тему использования вместе со всякими emscripten, то от libadartl.a толку не очень много, но на всякий случай оно есть. С самим компилятором надо ещё разбираться. Он по умолчанию работает в режиме Ada->C->GCC, но в GCC есть GNAT, который гораздо лучше, и если кто-то заинтересовался AdaMagic, как я, то сценарий изпользования у него будет позабористее, и надо читать доки.

Таким образом, теперь есть компилятор Ada->C/C++, с помощью которого можно целиться во всякие дурацкие, но иногда нужные платформы, хостится он либо на Windows, либо на Linux, а через эмуляторы можно потенциально запускать из ещё большего набора OS. По плану выложить на форум только для зарегистрированных пользователей. Раз и навсегда адвокаты языков программирования, для которых на всех платформах есть транслятор, уедят.

Всё же он больше обычный ребенок в свои 13 лет, чем красноглазый слизень шлепающий тентаклями по клавиатуре спектрума, каким был я. Посему осторожничаю, не вываливаю ему в бошку все эти прикольные штуки и страшные слова, чтобы интерес не убить. Все же детям тяжко с абстракциями, им надо визуально воспринимать. Думаю, может из консоли в гуй вылезти? Ну там шарики-квадратики в 2d порисовать, повращать, подвигать. И в таком бэкграунде двигать в сторону структур и алгоритмов. Есть чо такое в этих ваших виндовсах, чтобы быстро и в минимум строк: либа/фреймворк,  рисующая графические примитивы, скрывающая до поры до времени все кишки? GDI?

Надо было по работе скомпилировать Wt, а он на C++. Причём, если говорят «беда не приходит одна», то это именно тот случай. Если C++, то ещё и boost, а если boost, то ещё и boost.spirit. Короче, на всю голову больные. Нет бы на C с классиками пописывать и не напрягать тех, кому это потом компилировать. Нет бы взять обычный внешний генератор парсеров. Настрадался я от этого boost.spirit. То там string table overflow at offset 10000004 в section .debug_frame случится, то
function_operator_10.hpp: In instantiation of 'const typename boost::phoenix::detail::expression::function_eval<F, A0, A1, A2, A3, A4>::type boost::phoenix::function<F>::operator()(const A0&…
Ну это манипуляциями с ключиками ещё как-то преодолел. Дальше проблемы, компоновщику тупо памяти не хватает. Вот тут посоветовали взять сборку отсюда. Не подошло:
c:/TDM/TDM-GCC-64-2017-01-07/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/TDM/TDM-GCC-64-2017-01-07/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/liblto_plugin-0.dll: error in plugin cleanup (ignored)
c:/TDM/TDM-GCC-64-2017-01-07/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/TDM/TDM-GCC-64-2017-01-07/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/liblto_plugin-0.dll: error loading plugin
И библиотеку указанную тоже пробовал заменять. Никак. Откатился на оригинальный ld.exe

Впрочем, оказалось, что снять у него ограничения по памяти не так сложно. Открыл HIEW, по смещению 0x96 пропатчил 0f 03 на 2f 03, что соответствует включению флага IMAGE_LARGE_ADDRESS_AWARE, и этим компоновщиком наконец смог собрать. Научить программы использовать больше памяти не так уж сложно, оказывается.

Using C++ classes in JavaScript
Вычитал тут такое:
JavaScript will automatically garbage collect any of the wrapped C++ objects when there are no more references. If the C++ object doesn’t require specific clean up (i.e. it doesn’t have a destructor) then no other action needs to be taken.Это каким, интересно, образом, движок JavaScript залезет в кучу emscripten и пометит область памяти как неиспользуемую именно тем способом, каким это делает текущая версия аллокатора emscripten

«Под Куполом» спонсировался Microsoft, и поэтому там у всех виндопланшеты с Windows 8. А в S02E08 хакер ломает комп, и что же на компе? Неужели тоже винды? Да, винды. Седьмые.

Но в восьмёрке–то все сишные и плюсовые компоненты переписали на Аде, такой Windows хакеры бы не сломали, уж конечно

Надеюсь, это я чего-то не понимаю и на с++ можно написать удобнее?

class SuperModel {
  public:
    int priorSizeX;
    int priorSizeY;
    int hueSize;
    int satSize;
    int valSize;
    SuperModel(int _priorSizeX=100, int _priorSizeY=100, 
               int _hueSize=60, int _satSize=32, int _valSize=16) :
                    priorSizeX{_priorSizeX}, priorSizeY{_priorSizeY},
                    hueSize{_hueSize}, satSize{_satSize}, valSize{_valSize} 
    {              
         ...
    }               
};

C++ ?

Жуйк, а никто не подскажет, отличается ли в плюсцах представление в памяти классов и структур? В частности интересует наличие указателя на vtable при использовании виртуальных методов в структуре и отличия по смещениям по сравнению с классами. Точнее экземплярами классов.

Статья на хабре про развитие C++ (точнее отчёт о встрече в Оулу, где утвердили черновик стандарта C++17).

Самые заплюсованные комментарии:
"Хочется думать, что рано или поздно у них руки дойдут и до модулей. Серьезно, я готов недополучить всех этих плюшек, да даже ranges и concepts, лишь бы сделали модули. "

"Безобразное усложнение С++ волей-неволей заставляет смотреть в сторону Rust. "

"- К тому же, в упор непонятно, почему это length() — функция, а не свойство строки.
— Потому что в C++ нет свойств? Или я что-то пропустил?"

"Непонятно чем он[комитет] вообще занят. Импортов нет, концептов нет, filesystem нет. Даже pragma once(или ее аналог) не могут в язык внести. "

"- Особенно неоднозначное отношение к string_view — как говорится если раньше было два способа написать функцию работающую со строками, то теперь их три. И каждый из них по-своему плохой.

Впитывая в себя куски из boost'а стандарт становится такой же беспорядочной помойкой — безумно распухшей коллекцией «прикольных фишечек».

— string_view это как раз очень хорошо — но чертовски поздно. Как и array_view. Надеюсь, к 20-му году прикрутят. А должны были вкрутить ещё в самом начале, в крайнем случае в 11-й версии. Но не судьба."

"Потому что стандарт распух до неприличия — а многих действительно важных вещей нет до сих пор. А многих, таких как простого менеджера зависимостей и сборки, не будет никогда.
Поэтому С++ со временем выдавят. На это уйдёт куча времени, но его место займут другие языки. Что забавно, С, думаю, останется сильно дольше — т.к. он гораздо проще."

"Пора рефакторить язык "

"Есть мнение — на собеседованиях вопросов прибавится. Код останется прежним. "

"Шел 2016 год, а я так и не мог написать в программе std::optional; (ага, я в курсе что через пару лет заработает).
Зато постоянно добавляют кучу адовой эзотерики. Если раньше я мог сказать, что знаю С++, то теперь уже точно нет.

Интересно, помогает ли все это это языку? Если 10 лет назад на нем писали почти всё, то теперь он скатывается в нишевые направления — 3D движки, OpenCV, микроконтроллеры и немного десктопного Qt (сужу по заказам на UpWork).
Лично для меня, как стандартный C++/STL был непригодным к использованию 10 лет назад, так он и остается до сих пор (Строки, работа с файлами, сеть, потоки и т.д.). Даже долбаное кросплатформенное приложение с нативным GUI интерфейсом невозможно создать (когда там графический интерфейс появился, в начале 90х?). Утешает только Qt. "

На чём нынче принято делать асинхронщину в C++? Надо чтобы работало под виндой в том числе.
Варианты:
1. треды (вроде просто, но есть подводные камни)
2. libev
3. libuv
4. boost.asio

Может ещё что?