Pull to refresh
118
-36.2
Send message

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

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()". А что будет, если не "сделать { }"? 

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

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

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

"создание массив, сортировка и проверка на наличие повторений", видимо, в количестве строк асма выражается, ясно, понятно. 

тогда докажи, что добавленные строки это НЕ сортировка и проверка уникальности элементов с выдачей ошибки, если они не уникальные. Это даже в иссуе на гитхабе . Ты просто отрицаешь очевидное, https://github.com/rust-lang/rust/issues/104642
буквально написано что же там проверяется

"создание массив, сортировка и проверка на наличие повторений", видимо, в количестве строк асма выражается, ясно, понятно. 

а в чём они в бинарном коде ещё могут измеряться?

Ты сидишь и нагло лжёшь, что "вот, ничего тут нет", я показывааю что оно тут есть и немало, ты пытаешься с темы съехать

Нет ну тут уже совсем без мата сложно с растерами, ладно взял опять релиз, ладно взял блекбокс вместо адекватного получения данных извне за счёт вызова форвард декларированной функции, так ведь отрицает базовую логику:

    let mut array = black_box([black_box(111), black_box(222), black_box(333)]);
    let [a, b] = array.get_many_mut([0, 2]).unwrap();

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

    let mut array = [111, 222, 333];
    let [a, b] = array.get_many_mut([black_box(0), 2]).unwrap()

Тогда получается 146 строк асм против 97 когда неизвестный индекс.

https://godbolt.org/z/G1713zaPj

Вы просто показываете то что вы пришли из питона и ничего не смыслите ни в оптимизациях, ни в расте

1
23 ...

Information

Rating
Does not participate
Registered
Activity