Pull to refresh
118
-36.2
Send message

и откуда компилятор узнает кто у вас составляет "локальный проект"? А про хедеры подключаемые несколько раз что он скажет? Что будет с инкрементальной компиляцией? И почему вы при таком подходе не сделаете unity сборку, которая соберёт все .cpp в один файл?

С одной стороны это хорошо, ведь это можно эффективно использовать как ключ с эффективным сравнением - нам не нужно проверять две строки посимвольно, достаточно сравнить указатель.

ну, вообще-то нет...

 изменить стратегию компиляции? Решение буквально очевидно

расскажете "очевидное" решение? Стратегия компиляции из С проста и гениальна, у неё куча преимуществ. Я так понимаю автор предлагает какой то "глобальный неймспейс" в котором, видимо, весь С++ код мира собран, иначе откуда компилятор поймёт что там есть неизвестно

Проблемы со специализациями решаются элементарным правилом, не делать специализации хрен знает где в .cpp файле, а делать либо в том файле где объявлен тип, либо в том где объявлено то что специализируют

а если на С++ написать функцию которая это делает, то окажется можно сделать за одну строку:

make_what_we_need();

люди как будто не понимают, что этот дсл надо ещё реализовать

это какой то уже бред в активной стадии, под перфоманс написать свой язык и компилятор

в прошлый раз когда этот код появлялся в комментариях уже предлагали

auto [data, lock] = d.modify();

но видимо код был идеален и поэтому не изменился


предложенный подход вовсе никак не решает проблемы, где нужно распараллеливание. Это совсем другие задачи и мьютексов с кондварами там быть не должно

Дальше, ещё конкретнее про реализацию. Совершенно неочевидные наборы перегрузок:

    inline void view(std::function<void(const T&)> block) const {
        LockRead lock(_mutex);
        block(_state);
    }

    template<typename R>
    inline R view(std::function<R(const T&)> block) const {
        LockRead lock(_mutex);
        return block(_state);
    }


вторая перегрузка никогда не выберется (пока вы не проведёте нетривиальные манипуляции), потому что для вывода типа нельзя делать вывод типа. Более того, она вовсе не нужна, достаточно просто

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?

Если я расширяю перечисление в Rust - язык мне

ничего не говорит, потому что стоит default

А вырожденные случаи можно выдумывать вечно, вопрос только зачем вы их написали

.использовать другой банк, нет?

напомните что сделать, чтобы джаваскрипт на сайте перестал быть таким медленным? Использовать другой браузер?.. Что-то не работает...

поддержкой конкуренции 

именно конкуренция завела айти туда где оно есть. Конкуренция форсит заработать больше денег с меньшими затратами и игнорировать качество продукта.

Регулирование вносит коррективы в то, по каким критериям бизнес считает что-то оправданным. Например сейчас популярно говорить "естественный отбор перестал работать", нет, он стал работать по другому. И общество заинтересовано отбирать не компании, которые любым способом добились успеха (например убив конкурента физически), а те которые сделали именно продукт лучше (не быстрее сделанное / лучше разрекламированное, а просто лучше)

я не говорил ничего про независимых разработчиков, конкретные виды приложений/сайтов и используемый для получения прибыли и проч. Иначе на данный момент можно поставить майнер в приложение для банка и все вынуждены будут его использовать, ведь другого приложения этого банка нет

что тут писать ,это же блог компании отус, итак всё ясно

Решение простое, для кода который исполняется не у тебя(приложения, браузерный жс) ввести некий налог для компаний, чтобы они оплачивали электричество которое я трачу для просмотра их херни

Появится стимул думать

Так всё-таки что будет, если СЛУЧАЙНО не выспаться и забыть "сделать { }"?

покажите мне как вы случайно забудете скоп переменной, очевидно тоже не понимаете о чём речь

В плюсах сделаете { } просто и в конце jthread сделает join()". А что будет, если не "сделать { }"? 

с каждым сообщением всё смешнее и смешнее. Покажите мне как вы сделаете переменную без скоупа)

В качестве доп задания можете посчитать сложность операции, понять что происходит в коде и осознать, что это эквивалентно сортировке и проверка уникальности элементов, только хуже

Внезапно, в дебаге и релизе код эквивалентен, значит отключи релиз и в дебаге увидишь вызов функции-проверки. Ах да, ты же уже видел этот код, просто зачем то продолжаешь щитпостить

1
23 ...

Information

Rating
Does not participate
Registered
Activity