LINUX.ORG.RU

На Rust запилили Coroutine, Go можно выкидывать?

 ,


3

5

Мониторю гитхаб тренды по расту, вот такое поделие обнаружилось https://github.com/zonyitoo/coio-rs С растом слабо знаком, особо не разбирался, но как я понимаю «Work-stealing coroutine scheduling» тоже самое как и в goroutine?

★★★★★

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

Ответ на: комментарий от anonymous

Так и в «стандартном менеджере языка» может чего-то не оказаться.

Несколько разная вероятность. Опять же, в случае языка - это дополнительный фильтр сырости/востребованности либы.

И это хорошо.

Чем хорошо?

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

Вообще-то, да - жуть

Как страшно жить.

Сколько ещё раз повторить, что unwrap и undefined behaviour - разные вещи?

А не объяснишь как в таком простом случае вообще речь могла идти об «undefined behaviour»?

Result - не трейт. И что значит «добавили своих Result»?

Зато ToPrimitive - трейт, рад, что сообщил тебе эту новость. А второе - если бы Result пробрасывался выше или были свои -> Option.

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

масса платформ и библиотек:
over 14000 packages

Не то чтобы масса, особенно если учитывать, что не только для С++.

Ну и офтопика нет, да.

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

Ну и офтопика нет, да.

Есть. cygwin же.

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

Как страшно жить.

Ну хватит паясничать-то. Я надеюсь, что мы достигли понимания в том, что уровень гарантий разный?

А не объяснишь как в таком простом случае вообще речь могла идти об «undefined behaviour»?

Ну как же:

The behavior is undefined if *this does not contain a value

Это в плюсовых аналогах Option.

А второе - если бы Result пробрасывался выше или были свои -> Option.

Это ты о том, что пришлось бы возвращать Option<Rect>? Или о чём?

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

Я надеюсь, что мы достигли понимания в том, что уровень гарантий разный?

Да.

Это в плюсовых аналогах Option.

Я про конкретно данный код на rust. Он спокойно заменяется на аналог на С++:

Rect<int32_t>( { origin.x, origin.y }, { size.x, size.y } );

Который ничуть не опаснее кода на rust.

Это ты о том, что пришлось бы возвращать Option<Rect>? Или о чём?

Да, если бы им вдруг захотелось этого. Ведь если при создании Rect якобы могут быть ошибки, то логично предположить, что и наверх неплохо было бы об этом сообщать.

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

Да.

Ну и хорошо. Потому что спорить с тем, что unwrap местами замусоривает код не буду. Что поделать - такая цена за «явную обработку ошибок». Как по твоему выглядел бы идеальный вариант?

Я бы предпочёл чтобы они прекратили изображать «отказ от исключений» - это здорово бы разгрузило апи в некоторых местах. Но тут многие не согласятся.

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

Как по твоему выглядел бы идеальный вариант?

А нет его. Где-то идеально подходят исключения, где-то хватит вернуть 0, -1 или т.п., а где-то и Option будет хорош. Разные случаи - разные решения.

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

Случай mio показывает, что со «стандартизированным менеджером» егто сделают за тебя. Автор крейта, ага.

Покажи мне репу с deb и rpm

То есть на утверждение «дистроспецифичный пакет здесь не нужен» ты отвечаешь «покажи мне его». Логика окей.

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

Повторяю - в расте нельзя использовать значение, если вернулась ошибка.

А если значение все-таки нужно?

anonymous
()
Ответ на: комментарий от ozkriff

от бабушек из деревень вернулись. там с интернетами иногда нехорошо бывает.

anonymous
()
Ответ на: комментарий от tailgunner

ничего лучше исключений ещё не придумали. они поддерживаются на уровне объектников dwarf, есичо. так что любой язык может (но не хочет) в нормальную обработку ошибок.

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

ничего лучше исключений ещё не придумали

Это аргумент в пользу Go или Rust?

они поддерживаются на уровне объектников dwarf, есичо.

Вау, круто.

так что любой язык может (но не хочет) в нормальную обработку ошибок.

Что, вот прям-таки сгенерировал атрибуты DWARF и всё, исключения работают?

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

Как он может быть не нужен? Как ты софт-то в систему ставить будешь?

А я не ставлю софт в систему. Я скачиваю исходники для сборки.

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

Возврат к старому трэшу make && make install в новой упаковке?

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

Я скачиваю исходники для сборки.

Серьёзно? А зачем?

Чтобы собирать программы, естественно.

Возврат к старому трэшу make && make install в новой упаковке?

Откуда вдруг взялось make install?

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

Чтобы собирать программы, естественно.

А зачем? Мы вроде о менеджера пакетах говорим. Некоторые из них так делают, но тебе то самому зачем?

Откуда вдруг взялось make install?

Так ты зачем собираешь? От нечего делать? Зачем собирать, если не ставить?

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

Где-то идеально подходят исключения, где-то хватит вернуть 0, -1 или т.п., а где-то и Option будет хорош.

Ну с исключениями понятно. Но вот про возврат числа - можешь привести пример, где этот вариант будет лучше чем Option?

Мне это видится следующим образом: если у нас есть ровно один вариант ошибки (тот же -1), то Option всем лучше. Если диапазон ошибочных кодов, то тут Result. А в каком случае будут удобны числа даже хз.

Возможно, ты назовёшь преимуществом отсутствие unwrap для числа, но тут я не соглашусь. Да и «сишные» апи, где результат инт и отдельные значения значат что-то особое на расте делать можно, хотя это не кажется мне хорошей идеей.

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

А если значение все-таки нужно?

Как это? Покажи псевдокодом что ли.

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

А зачем? Мы вроде о менеджера пакетах говорим. Некоторые из них так делают, но тебе то самому зачем?

Мы же о «пакетном менеджере» для языка? Тогда это нужно, в первую очередь, разработчикам. Есть говорить о С++, то там без исходников бывает, что вообще никак. Да и в остальном лишним не будет.

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

Чтобы собирать программы, естественно.

А зачем?

Допустим, это часть моей работы. Я пишу программы for fun and profit.

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

Мы же о «пакетном менеджере» для языка?

О его нужности для нативного «системного» языка.

Тогда это нужно, в первую очередь, разработчикам

Какую проблему решает?

anonymous
()
Ответ на: комментарий от tailgunner

Допустим, это часть моей работы. Я пишу программы for fun and profit.

Твоя работа собирать чужие программы и не ставить их при этом в систему?

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

Допустим, это часть моей работы. Я пишу программы for fun and profit.

Твоя работа собирать чужие программы

Моя работа - писать программы с использованием чужих библиотек.

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

Так. Свои программы ты собираешься, ок. А библиотеки зачем собираешь?

Ещё интересно, пользуется ли кто-то твоим софтом? Как он распространяется? Неужели людям нужно качать твои сырцы и все библиотеки и все это собирать? А запускать потом как?

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

А библиотеки зачем собираешь?

Если «собираешь» в смысле «build», то для того, чтобы слинковать их со своей программой.

Ещё интересно, пользуется ли кто-то твоим софтом?

Это нерелевантно.

Как он распространяется?

Да как угодно - сырцами в тарболе, бинарями в тарболе, deb/rpm/msi, ссылкой на crates.io. Всё это не имеет отношения к тому, как я создаю среду сборки для своего поделия - и именно создание этой среды является главной функцией языкового менеджера пакетов.

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

Да как угодно - сырцами в тарболе, бинарями в тарболе, deb/rpm/msi, ссылкой на crates.io. Всё это не имеет отношения к тому, как я создаю среду сборки для своего поделия

Ага, а потом удивляемся, что на «проде» не работает или работает не так, как в «среде сборке». Толк-то какой от этого?

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

Ага, а потом удивляемся, что на «проде» не работает или работает не так, как в «среде сборке»

Удивляются те, кто разрабатывает и тестирует на версиях в одном дистрибутиве, а запускает - на версиях в другом.

Толк-то какой от этого?

От того, что в «проде» не работает? Никакого.

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

От твоей «среды сборки», которая, как я понял, никакого отношения к работе с дистрами, пакетами(их версиями и их зависимостями) и окружениями не имеет.

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

Толк-то какой от этого?

От того, что в «проде» не работает?

От твоей «среды сборки»

Очевидно, толк в том, что в ней собираются программы.

tailgunner ★★★★★
()
Ответ на: с разморозкой от anonymous

deprecated

И что с того? C — это не пистон, из которого за два года могут выкинуть половину стандартной библиотеки по мановению волшебной бороды Гвидо. gets - deprecated & dangerous, и все-таки он по-прежнему в glibc. *context будут там висеть ооочень долго.

И уж если на то пошло, честные корутины очень тривиально реализуются в сишке: нужен только способ переключить стек (ASM или портабельный sigaltstack), а переключение даровано аж самим стандартом: setjmp/longjmp.

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

А какой толк в такой сборке, если она не имеет никакого отношения к поставке и пр? Я, наверное, не так понял что-то.

Я другой анонимус.

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

А какой толк в такой сборке, если она не имеет никакого отношения к поставке и пр?

Эта сборка дает на выходе бинарь. Если хочешь, можешь его распространять (можешь упаковать его в deb/rpm/whatever). А можешь просто запускать его с целью отладки программы.

Я, наверное, не так понял что-то.

Я уже почти страницу фигею, объясняя совершенно очевидные вещи.

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

Во время запила servo, понадобился GC для сборки мусора за javascript'ом

servo это рендер странички, причем тут javascript? javascript движок они еще даже писать не начали, там все на плюсах

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

Ого, здесь еще и правила есть ) Разочаровывает меня данный ресурс, то в новостях каменты потрут, то теперь еще и на форуме: прыжок на месте попытка улетететь. А я то думал, надежное пристанище...

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

в rust тоже можно не заморачиваться с Option

Каким макаром?

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

В расте нет null, упорыш. Сначала осиль, потом критикуй.

Бегом под коврик, вас там уже двое будет.

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

Minecraft приуныл.

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

Разве они там теперь не адово страдают с поддержкой этого разжиревшего прототипа? Вроде как, им же пришлось делать плюсовую версию.

ozkriff
()
Ответ на: комментарий от DarkEld3r

Хочешь как в хаскеле?

Имхо нормальный сахар для монад нигде не помешает.

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

Вроде как, им же пришлось делать плюсовую версию.

Если ты про Minetest - это сторонний и опенсорсный клон.

anonymous
()
Ответ на: комментарий от ozkriff

Minecraft приуныл.

Толсто, тетрисы и на питоне можно писать)

Вот именно, что толсто. Не являюсь фанатом майнкрфата (да и не играл ни разу), но создание и поддержка мира там достаточно сложная задача.

Есть, к примеру, minetest - клон, который делают на том самом с++. Так тормоза там, говорят, не сильно меньше, чем в оригинальной java версии. А на условном «питоне» оно бы и не завелось, наверное

А переписывали minecraft с java на с++, насколько я знаю, исключительно для мобильных версий

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