и откуда компилятор узнает кто у вас составляет "локальный проект"? А про хедеры подключаемые несколько раз что он скажет? Что будет с инкрементальной компиляцией? И почему вы при таком подходе не сделаете unity сборку, которая соберёт все .cpp в один файл?
С одной стороны это хорошо, ведь это можно эффективно использовать как ключ с эффективным сравнением - нам не нужно проверять две строки посимвольно, достаточно сравнить указатель.
изменить стратегию компиляции? Решение буквально очевидно
расскажете "очевидное" решение? Стратегия компиляции из С проста и гениальна, у неё куча преимуществ. Я так понимаю автор предлагает какой то "глобальный неймспейс" в котором, видимо, весь С++ код мира собран, иначе откуда компилятор поймёт что там есть неизвестно
Проблемы со специализациями решаются элементарным правилом, не делать специализации хрен знает где в .cpp файле, а делать либо в том файле где объявлен тип, либо в том где объявлено то что специализируют
вторая перегрузка никогда не выберется (пока вы не проведёте нетривиальные манипуляции), потому что для вывода типа нельзя делать вывод типа. Более того, она вовсе не нужна, достаточно просто
return (R)block(_state) это сработает и с void с и другими типами
Не первый раз вижу этот код и снова повторю, во-первых, подход заставляет компилировать вместо N типов данных и K мьютексов все N * K пар мьютекс - данные, но это самая малая проблема.
Ещё такой подход сильно провоцирует гонки апи, когда взяли лок и достали например .empty() у вектора, а дальше сделали лок и .pop_back, а вектор уже пуст. В общем не получится у вас "не думать" когда пишете код
Факт в том, что не должно быть никаких мьютексов в публичном апи, должен быть понятный интерфейс обычного класса, например структуры данных, который этот мьютекс прячет, а уж там вы вряд ли забудете залочить мьютекс + явно подумаете больше над API
Ну и наконец самая главная проблема, что за чертовщина на уровне реализации? Зачем все эти std::function, std::condition_variable_any., прости господи .template extract<packaged_task<....>>? Что с интерфейсом, откуда тут взялись when и подобное? Это что, фьючи?
именно конкуренция завела айти туда где оно есть. Конкуренция форсит заработать больше денег с меньшими затратами и игнорировать качество продукта.
Регулирование вносит коррективы в то, по каким критериям бизнес считает что-то оправданным. Например сейчас популярно говорить "естественный отбор перестал работать", нет, он стал работать по другому. И общество заинтересовано отбирать не компании, которые любым способом добились успеха (например убив конкурента физически), а те которые сделали именно продукт лучше (не быстрее сделанное / лучше разрекламированное, а просто лучше)
я не говорил ничего про независимых разработчиков, конкретные виды приложений/сайтов и используемый для получения прибыли и проч. Иначе на данный момент можно поставить майнер в приложение для банка и все вынуждены будут его использовать, ведь другого приложения этого банка нет
Решение простое, для кода который исполняется не у тебя(приложения, браузерный жс) ввести некий налог для компаний, чтобы они оплачивали электричество которое я трачу для просмотра их херни
В качестве доп задания можете посчитать сложность операции, понять что происходит в коде и осознать, что это эквивалентно сортировке и проверка уникальности элементов, только хуже
Внезапно, в дебаге и релизе код эквивалентен, значит отключи релиз и в дебаге увидишь вызов функции-проверки. Ах да, ты же уже видел этот код, просто зачем то продолжаешь щитпостить
и откуда компилятор узнает кто у вас составляет "локальный проект"? А про хедеры подключаемые несколько раз что он скажет? Что будет с инкрементальной компиляцией? И почему вы при таком подходе не сделаете unity сборку, которая соберёт все .cpp в один файл?
ну, вообще-то нет...
расскажете "очевидное" решение? Стратегия компиляции из С проста и гениальна, у неё куча преимуществ. Я так понимаю автор предлагает какой то "глобальный неймспейс" в котором, видимо, весь С++ код мира собран, иначе откуда компилятор поймёт что там есть неизвестно
Проблемы со специализациями решаются элементарным правилом, не делать специализации хрен знает где в .cpp файле, а делать либо в том файле где объявлен тип, либо в том где объявлено то что специализируют
а если на С++ написать функцию которая это делает, то окажется можно сделать за одну строку:
make_what_we_need();
люди как будто не понимают, что этот дсл надо ещё реализовать
это какой то уже бред в активной стадии, под перфоманс написать свой язык и компилятор
в прошлый раз когда этот код появлялся в комментариях уже предлагали
но видимо код был идеален и поэтому не изменился
предложенный подход вовсе никак не решает проблемы, где нужно распараллеливание. Это совсем другие задачи и мьютексов с кондварами там быть не должно
Дальше, ещё конкретнее про реализацию. Совершенно неочевидные наборы перегрузок:
вторая перегрузка никогда не выберется (пока вы не проведёте нетривиальные манипуляции), потому что для вывода типа нельзя делать вывод типа. Более того, она вовсе не нужна, достаточно просто
return (R)block(_state) это сработает и с void с и другими типами
https://godbolt.org/z/59cazh9dE
Почему подобной перегрузки с возвращением значения из modify нет - не знаю, кажется очень странным
Не первый раз вижу этот код и снова повторю, во-первых, подход заставляет компилировать вместо N типов данных и K мьютексов все N * K пар мьютекс - данные, но это самая малая проблема.
Ещё такой подход сильно провоцирует гонки апи, когда взяли лок и достали например .empty() у вектора, а дальше сделали лок и .pop_back, а вектор уже пуст. В общем не получится у вас "не думать" когда пишете код
Факт в том, что не должно быть никаких мьютексов в публичном апи, должен быть понятный интерфейс обычного класса, например структуры данных, который этот мьютекс прячет, а уж там вы вряд ли забудете залочить мьютекс + явно подумаете больше над API
Ну и наконец самая главная проблема, что за чертовщина на уровне реализации? Зачем все эти std::function, std::condition_variable_any., прости господи .template extract<packaged_task<....>>? Что с интерфейсом, откуда тут взялись when и подобное? Это что, фьючи?
а зачем делать вариант из була инта и const char* и запускать визит с перегрузкой для bool?
ничего не говорит, потому что стоит default
А вырожденные случаи можно выдумывать вечно, вопрос только зачем вы их написали
напомните что сделать, чтобы джаваскрипт на сайте перестал быть таким медленным? Использовать другой браузер?.. Что-то не работает...
именно конкуренция завела айти туда где оно есть. Конкуренция форсит заработать больше денег с меньшими затратами и игнорировать качество продукта.
Регулирование вносит коррективы в то, по каким критериям бизнес считает что-то оправданным. Например сейчас популярно говорить "естественный отбор перестал работать", нет, он стал работать по другому. И общество заинтересовано отбирать не компании, которые любым способом добились успеха (например убив конкурента физически), а те которые сделали именно продукт лучше (не быстрее сделанное / лучше разрекламированное, а просто лучше)
я не говорил ничего про независимых разработчиков, конкретные виды приложений/сайтов и используемый для получения прибыли и проч. Иначе на данный момент можно поставить майнер в приложение для банка и все вынуждены будут его использовать, ведь другого приложения этого банка нет
что тут писать ,это же блог компании отус, итак всё ясно
Решение простое, для кода который исполняется не у тебя(приложения, браузерный жс) ввести некий налог для компаний, чтобы они оплачивали электричество которое я трачу для просмотра их херни
Появится стимул думать
покажите мне как вы случайно забудете скоп переменной, очевидно тоже не понимаете о чём речь
с каждым сообщением всё смешнее и смешнее. Покажите мне как вы сделаете переменную без скоупа)
В качестве доп задания можете посчитать сложность операции, понять что происходит в коде и осознать, что это эквивалентно сортировке и проверка уникальности элементов, только хуже
Внезапно, в дебаге и релизе код эквивалентен, значит отключи релиз и в дебаге увидишь вызов функции-проверки. Ах да, ты же уже видел этот код, просто зачем то продолжаешь щитпостить