LINUX.ORG.RU

Презентация «Rust - лучше, чем C++» на русском языке от разработчика из Яндекса

 


7

3

http://tech.yandex.ru/events/cpp-party/june-minsk/talks/1978

Степан Кольцов

Яндекс

Rust — это современный, практический, быстрый и безопасный язык программирования. Некоторые говорят, что Rust — это как C++, если бы его писал человек, знающий Haskell.

Система типов Rust решает главную проблему C++ — небезопасность. C++ очень легко сделать ошибки, которые приведут к поломкам (например, use after free). Rust позволяет писать безопасный код, сохраняя при этом выразительность и околонулевые накладные расходы C++. В докладе будут подробно описаны механизмы языка, которые контролируют безопасность программы.

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


Когда будут биндинги к Qt?

anonymous
()

Почему в примере из туториала, где мы выводим hello, скомпилированный бинарь весит почти 800кб? ЧТО ЭТО??

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

Да я как раз то осилил (в той мере, в которой С++ можно осилить, конечно же, ибо в стандарте С++ столько неоднозначностей и каждый компилятор при этом ещё имеет свойство подливать своего говнеца, что слово «осилить» становится практически бессмысленным). Просто когда после цати лет я вместо С++ познакомился с языками программирования, стало очень жалко потраченного впустую времени.

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

а язык богат фичами как ни один другой

Это какими такими фичами богат С++? Пародией на макросы? Убогой системой типизации? Прикрученным наспех подобием на introspection? Недоделанной стандартной библиотекой? Отсутствием нормальных средств для многопоточного программирования? Ходящими на костылях конструкциями для ФП?

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

А что такого ценного в зеленых потоках? Быстрее «родных» они работать на современном железе не могут, для И/О требуют костылей.. Какой в них смысл?

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

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

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

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

buddhist ★★★★★
()

Презентация «Ненужно - лучше, чем C++» на русском языке от разработчика из Ненужно

очевидный фикс

anonymous
()

что так всем неосиляторам чешется чем-нибудь С++ заменить

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

Там, конечно, всё круто (хотя я понял не больше трети), но всё это не сделает SML языком системного программирования.

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

Какая разница, сколько весит бинарь? Это rts.

Что значит, какая разница? А как же юникс вей? Вот, предположим, сидит у меня 10к утилит средним размером 50кб, то есть общий объем около 500мб. Тут все разработчики вдохновились и переписали свои утилиты на Rust, средний объем вырос до мегабайта, общий объем стал 10 гигов вместо 500 мегабайт. За такое надо в голову бить. Раз уж разработчики Rust позиционируют свой язык как более качественная замена С++, то нужно соответствовать. Более удобный синтаксис никому не интересен. Везде, где в итоге выбрали С++ как основной язык проекта, вопрос о синтаксисе не поднимался вообще.

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

Эта «проблема» в той или иной степени относится ко всем промышленным языкам программирования. Различное написание кода регламентируется внутренними правилами конкретного проекта.

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

требуют на порядки меньше памяти

Вот прямо на порядки? То есть если зеленый поток нормально так укладывается в 10кб, то родной такой же будет отжирать сразу 100кб или даже мегабайт? С чего бы это? Или ты говоришь только про размер контекста, который и там и там - проценты (или доли процента) от размера задачи? И даже при этом, чего такого хранит ОС, что у нее контекст потока оказывается прямо таки на порядки больше, чем у зеленых потоков?

Возможно, планировщик зелёных потоков будет работать оптимальней, чем ОС планировщик

и почему?

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

Зеленые потоки можно размазать по потокам ОС

Тогда зачем городить огород? Можно просто использовать потоки ОС и не придумывать лишних сущностей.

А можно не размазывать

Тогда будет использоваться одно ядро, и соответственно производительность будет проседать.

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

Посмотрел, код на go читается таки существенно проще, и в целом проект как то попродуманнее. Но победит конечно rust, потому что рынок любит уродцев, как выразился Kron73. А впрочем, всё равно, жить будут параллельно.

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

Тогда зачем городить огород? Можно просто использовать потоки ОС и не придумывать лишних сущностей.

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

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

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

И тут вуаля, у тебя уже вроде и зеленые нити появились.

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

Вот прямо на порядки?

На порядок.

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

То есть если зеленая нить укладывается в 300-400 байт (видел такие цифры для Erlang и раннего Rust), то нить ОС берет минимум 12КБайт (4К юзерспейс и 8К ядро).

tailgunner ★★★★★
()

Повезло вам, робятки, що я этот "раст" в душе не видел!

Eddy_Em ☆☆☆☆☆
()

ну переходят сейчас с php на ruby, а С++ то чем не угодил, всё хотят быдлокодить за копейки в будущем.

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

вот я понимаю, почему отказываются от php, руби реально лучше намного, и проекты на нём, более легковесный и просты в обслуживании, но чем замена с++ на go и раст облегчит обслуживание софта и потребление ?

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

чем замена с++ на go и раст облегчит обслуживание софта

Я не предлагаю менять Си++ на Rust. Преимущество Rust перед Си - более богатая и выразительная система типов, перед Си++ - то же + относительная простота.

и потребление ?

Щито?

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

Мантис написанный на php ест больше чем redmine написанный на руби, при тех же функциях и кол-ве опций. Хотя возможно я что-то лишнее не отключил в мантисе.

erzent ☆☆
()
Ответ на: комментарий от aedeph_

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

erzent ☆☆
()
Ответ на: комментарий от ddos3

> Зеленые потоки можно размазать по потокам ОС
Тогда зачем городить огород? Можно просто использовать потоки ОС и не придумывать лишних сущностей.
> А можно не размазывать
Тогда будет использоваться одно ядро, и соответственно производительность будет проседать.

Это если выбирать одно из двух.

Если использовать оба подхода:

- что не зависит друг от друга (или совсем-совсем требует блокировки) - разбрасывать по OS threads

- всё остальное - ставить в очереди на исполнение.

Получим лучшее из двух.

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

ставить в очереди на исполнение.

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

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

лору же прямо говорить нельзя, тема мертва будет.

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

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

Почему ты убрал Erlang из цитаты?

1) Мы обсуждаем Rust 2) Erlang мне не интересен 3) можешь привести пруфлинки и про Erlang, если хочешь, они никому не помешают.

Твое право.

Я это рассматриваю как признание, что про 300-400 байт на поток в rust - это никак не связанная с реальностью выдумка.

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

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

Обычно зеленый поток это:

  • указатель на (байт)код текущей инструкции треда
  • указатель на стек
  • состояние (один из «заблокирован-по-причине», «готов к работе»)

Рантайм создает очередь из таких структур. Создаются элементарно, уничтожаются элементарно.

OS треды обрабатывают такую очередь (или такие очереди).

Против очередей я ничего не имею.

Но это самая простая реализация зеленых потоков :]

UPD: поправил скобку

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

1) Мы обсуждаем Rust

Не знаю насчет «нас», но я говорил о зеленых нитях.

Я это рассматриваю как признание

Рассматривай.

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

Хотя в данный момент Rust ещё не подходит для использования в продакшне, его всё равно стоит изучать.

Еще один паскаль?

Паскаль-то тут с какого боку? Вроде же, потомков Паскаля, которые готовы к использованию в производстве, более чем хватает. Всякие там ады, модулы, обероны, компонентные паскали... Java, в конце концов)

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

Обычно очередью исполнения называют очередь, в которую один потом (или несколько) помещает задачи для последующего исполнения, а другой поток (или несколько) - забирают задачи и исполняют их. В этом случае родные потоки прекрасно справляются с задачей.

То, что ты описываешь, это просто зеленые потоки без всяких очередей.

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

было уже в freebsd 6.0 потоки в режиме пользователя. KSE называлось

непонятно зачем городить для этого еще один язык

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

То, что ты описываешь, это просто зеленые потоки без всяких очередей.

Кто-то должен исполнять зеленый поток. Весь смысл в них в том, что планировщик реализован рантаймом языка (или либы), не OS.

Если мы имеем M OS treads (исполнители) и N green threads (задания) - какие логические структуры данных можно выбрать для реализации планировщика green threads?

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

Да че вы вообще их сравниваете? Go это язык со сборщиком мусора. Rust в общем нет (да, я знаю про опциональный gc). На Rust по идее можно эффективно писать ОС и игры.

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

Давай еще раз: термин «очередь исполнения» (execution queue) имеет определенное более-менее устоявшееся значение. Ты его применил в другом значении, что вызвало некоторое недопонимание, которое уже разрешилось. Дальше-то ты мне что пытаешься доказать? Зеленые потоки можно внутри рантайма кучей способов реализовать, в том числе используя очередь. От этого они не превратятся из зеленых потоков в execution queue или даже в просто queue (если не понимаешь почему, гугли термины «инкапсуляция» и «сокрытие реализации»).

А по теме: ненужное баловство эти зеленые потоки.

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

Оно тогда не запускается, если rust удалить

В системе должна быть динамическая версия стандартной библиотеки ржавчины, само собой.

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

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

Вот прямо на порядки? То есть если зеленый поток нормально так укладывается в 10кб, то родной такой же будет отжирать сразу 100кб или даже мегабайт? С чего бы это? Или ты говоришь только про размер контекста, который и там и там - проценты (или доли процента) от размера задачи? И даже при этом, чего такого хранит ОС, что у нее контекст потока оказывается прямо таки на порядки больше, чем у зеленых потоков?

Когда последний раз я проверял, стек по умолчанию отжирал 2 мегабайта. Можно его ограничить, но что будет, если вдруг потоку понадобится что-нибудь рекурсивно повызывать? Возможности динамически расширить стек, когда он кончился, я не видел в C. В зелёных потоках это реализуемо.

и почему?

Например потому, что в типичной ОС работают тысячи потоков максимум. Как себя поведут алгоритмы планировщика на миллионах потоков я не знаю. Есть предположение, что не очень хорошо.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.