LINUX.ORG.RU

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

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

фьючерсы сильно дешевле тредов.

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

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

А на ассемблере писать сильно дешевле чем на пайтоне. Ну и что. Треды это классная высокоуровневая абстракция, накладные расходы на которую в 99% задач совершенно несущественны. Нет, будем придумывать какую-то муть в язык ради того самого 1%.

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

Вон гоферы изобрели зеленые треды, нормально получилось. Если уж сильно хочется, можно и так.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

треды - это уже, мягко говоря, не абстракция, а конкретная реализация.

во-вторых, проблема тредов не в тормозах, а в синхронизации: дедлоки, отладка, вот это все

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

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Можно подумать, с асинхронщиной сложно дедлок сделать. Или там отладка проще. Вот про отладку вообще лучше не говорить! Там в этой лапше вообще не понять, кто кого куда.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Вон гоферы изобрели зеленые треды, нормально получилось

я особой разницы не вижу. фьючерсы - это низкоуровневая абстракция, на которой уже строится асинк.

Если уж сильно хочется, можно и так.

я понял, в го пихать фичу для 1% задач - нормально, а в раст - ни-ни

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

я особой разницы не вижу. фьючерсы - это низкоуровневая абстракция, на которой уже строится асинк.

Ну я не про фьючерсы, а именно про async/await конструкции в языке.

я понял, в го пихать фичу для 1% задач - нормально, а в раст - ни-ни

Ну это фишка го. Типа ерланг релоадед. В расте они тоже когда-то были, кстати.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Можно подумать, с асинхронщиной сложно дедлок сделать

только если нарочно захотеть. с тредами всякие там мьютексы - это норма жизни и необходимость; в асинх это скорее исключение

Или там отладка проще

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

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)

че-то я вот это не понял:

https://doc.rust-lang.org/std/mem/union.MaybeUninit.html

Moreover, uninitialized memory is special in that the compiler knows that it does not have a fixed value. This makes it undefined behavior to have uninitialized data in a variable even if that variable has an integer type, which otherwise can hold any fixed bit pattern:

use std::mem::{self, MaybeUninit};

let x: i32 = unsafe { mem::uninitialized() }; // undefined behavior!
// The equivalent code with `MaybeUninit<i32>`:
let x: i32 = unsafe { MaybeUninit::uninit().assume_init() }; // undefined behavior!

чем их тут-то mem::uninitialized() не устроил?

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Да, я вот сейчас новость оформлял и не понял в чем прикол. Говорят MaybeUninit более безопасный тип, а mem::uninitialized<bool> может дать undefined behavior

snake266 ★★★
()
Ответ на: комментарий от snake266

ну т.е. компилятор делает какие-то там оптимизации… но я в упор не пойму, что там можно с неинициализированным интом такого наоптимизировать, что он крашнется…

про bool, допустим, понятно.

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Видимо, вот это:

https://github.com/rust-lang/rust/issues/53491#issuecomment-414504548

LLVM defines uninitialized data as Poison, which is distinct from «some arbitrary but valid bit pattern.» Branching based on a Poison value or using it to compute an address which is then dereferenced is UB.

Хм, хотя в примере никакого использования `x` нет.

red75prim ★★★
()
Последнее исправление: red75prim (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Ну да. Говорят, что скоро шаблоны изобретут. Ещё бы исключения изобрели...

Legioner ★★★★★
()
Ответ на: комментарий от MyTrooName

Ну дописать про --ofline хотел. Где-то что-то не так?

snake266 ★★★
()
Ответ на: комментарий от MyTrooName

В мастере уже почти перешли, так что скоро, наверно.

Pacmu3ka
()
Ответ на: комментарий от Legioner

Ну на жабе я использую Future + ThreadPool.
Не надо плодить треды на каждый запрос, а N тердов выполняют 100500 запросов. Ну и для IO соответственно используется nio.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от Legioner

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

Что за лютый бред? Ты упоротый что ли? Почитай учебник про архитектуру x86, может тогда поймешь как оно внутри работает и на кой дедушки это придумали. А треды с мьютексами засунь себе в программы.

st4l1k ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.