Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Имхо, в ближайшие лет 5-10 все как было на C/C++, так и останется. Пока какие-то компании не начнут вливать деньги в популяризацию (как эппл делает со свифтом и гугл с котлином, например).
Кстати, любопытно, есть ли в природе серьезные low level проекты на расте? Встречал его только в файрфоксе.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
А ты с какой целью интересуешься? Чего хочешь получить в итоге, обратив внимание на Rust?
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
Язык определенно того стоит, даже если ты не будешь никогда писать на нем.
Rust — это такая любопытная смесь языков С и Haskell. Одновременно системный язык без сборщика мусора, но где довольно много общих вещей с Haskell. Взять те же классы типов, которые в Rust более известны как трейты. Классы типов — это, вообще, один из трех основных столпов языка Haskell (наряду с ФП и очень простым базовым языком, к которому сводится сам Haskell). Классы типов красной чертой проходят по всему дизайну этих обоих языков. В то же время, в Rust нет сборщика мусора, и в текущей реализации довольно простое и эффективное представление объектов в памяти, т.е. уровень языка позволяет писать системные вещи.
Где Rust может быть эффективнее C++ при исполнении кода? В своих экспериментах я обнаружил прелюбопытную вещь. В Rust крайне эффективно реализовано перемещение объектов, которое обычно сводится к простому побитовому копированию небольшого заголовка (handle) объекта из стека, это часто всего несколько байт. Такое быстрое перемещение особенно становится важным, если вы начнете широко использовать комбинаторы, например, для асинхронного программирования. Комбинаторы — это по сути вложенные функции. И там как раз важно, чтобы быстро работало перемещение объектов при создании новых замыканий.
И меня, честно говоря, удивило, что в таких задачах Rust может по скорости исполнения кода дать фору такому маститому и титулованному жеребцу как C++. Это объясняется тем, что семантика перемещения в C++, мягко говоря, сложнее, и там есть нетривиальные моменты, связанные с тем, что код в C++ должен по возможности быть безопасным относительно исключений. Поэтому даже банальное перемещение объекта по конструктору, который не помечен как noexcept, будет много дороже, чем перемещение объекта в замыкание в языке Rust. Просто в Rust исключений, кроме паники, по сути больше и нет. И в Rust здесь не платят за то, что не используют. Более того, Rust не вызывает деструктор для уже перемещенного объекта, т.е. не выполняет лишнюю работу, которую делает C++, для которого еще нужно "обнулить" перемещенный объект, чтобы для такого объекта отработал деструктор.
Я привел лишь частный пример. Безусловно можно найти вещи, которые будут эффективнее и проще в С++, но далеко не все так однозначно, как обычно бывает в жизни.
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Безбажных?! Идиллия. Такого не бывает, и никогда не будет. Главный источник ошибок в программе — это сам человек, его логические ошибки, взаимное недопонимание, незнание и прочие вещи, хотя от каких-то ошибок язык и может спасать.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Пока (уже два года) наблюдаю мелкие баги в ФФ. Не боги баги дебажат.
Что принципиально нового в расте? усложнение синтакса в надежде защититься от случайного кирпича на голову?
Здравствуйте, dsorokin, Вы писали:
D>Язык определенно того стоит, даже если ты не будешь никогда писать на нем. D>Rust — это такая любопытная смесь языков С и Haskell.
Может лучше с Haskell разобраться в таком разе? Вот уж где новый дивный мир с кучей интересных концептов.
D>И меня, честно говоря, удивило, что в таких задачах Rust может по скорости исполнения кода дать фору такому маститому и титулованному жеребцу как C++.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
Я б не стал. Мне интуиция подсказывает! Первый взгляд на язык должен восхищать. А когда я взглянул на Ржавого, недоумённо почесал затылок и подумал — нафиг надо?...
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Так пророчит кто — промоутеры? Из тех, кто реально пишет "безбажные ОС", хочет кто-нть эту Ржу?
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, dsorokin, Вы писали:
D>>И меня, честно говоря, удивило, что в таких задачах Rust может по скорости исполнения кода дать фору такому маститому и титулованному жеребцу как C++.
KP>Разве что на синтетических примерах, но на "фору" это никак не тянет
Я имел в виду вполне конкретный тип задач. Среднестатистическому программисту они известны больше под видом асинхронных вычислений, но далеко ими не исчерпываются. Скажем, вычисление std::future из C++ и вычисление Future из Rust. Пример комбинатора в C++: then. Его более близкая к первоосновам форма в Rust: and_then.
Это все вокруг монад. Вот, на этих вполне конкретных вещах Rust имеет преимущество.
Здравствуйте, Kolesiki, Вы писали:
K>Я б не стал. Мне интуиция подсказывает! Первый взгляд на язык должен восхищать. А когда я взглянул на Ржавого, недоумённо почесал затылок и подумал — нафиг надо?...
А что не так с первым взглядом? Нормальная модульность и система сборки сразу, zero costs abstractions, автоматические проверки косяков при компиляции, отсутствие сборщика мусора и низкоуровневость, вменяемый синтаксис, пофикшен косяк с null. По мне — просто охрененный язык там, где нужна низкоуровневость, где максимальные требования к быстродействию, объему памяти и т.д.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
Отвечая на главный вопрос, заданный в теме, нет, лично для меня Rust заменить не может C++ по той простой причине, что Rust не поддерживается на Эльбрусах. Show stopper как он есть.
В 2009 году, когда бравые ребята из мозиллы начали переписывать свой браузер на раст, их браузер занимал >20% рынка. Сегодня firefox занимает <10% рынка.
Кстати, тот же маневр они проворачивают уже не в первый раз: в 90е точно так же решили переписать нетскейп навигатов заново, но при этом вообще потеряли рынок. С 80% процентов упали до нескольких процентов.
Здравствуйте, Shmj, Вы писали:
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Переписывать всё с нуля очень дорого, а смысла никакого. Я точно так же могу утверждать, что в ближайшем будущем все ядра ОС, драйвера, прикладные приложения будут переписаны на Brainfuck, у него великое будущее. Но в реальности лидеров вряд ли удастся потеснить, они будут пребывать на вершине в течении десятилетий.
На Раст сейчас валят хипстеры с Руби. Они пишут на Расте свои веб фреймвоки, потому что это единственное, что они умеют делать. Квалификация этих хипстеров, как известно, немногим выше ПХП и Джава скриптеров. Системщики на Раст не особо большое внимание обращают. Поэтому будущее у Раста в системном программировании под вопросом. Ну, а для веба он тоже на самом деле не годится. Сильно низкоуровневый. Ни в ту, ни в другую нишу он не вписывается.
Здравствуйте, Mamut, Вы писали:
M>Вместо того, чтобы определять модуль в самом файле, модуль определяется, а потом импортируется в вызывающем файле.
Если бы файл требовалось начинать чем-то вроде Module name, то было бы лучше?
Я всё-таки считаю, что модуль определяется в файле, просто неявно. А mod name этот модуль импортирует, но не определяет.
Здравствуйте, Shmj, Вы писали:
S>Стоит ли обратить внимание на Rust?
S>Пророчат что это язык для написания безбажных ядер операционных систем и т.д.
Вот интересное сравнение производительности, где Rust обходит C++ на нескольких (не всех) задачах. Интересен он тем, что во-первых, используются неэквивалентные подходы (зачем в первой задаче OpenMP, например), во-вторых код на Rust использует unsafe, что как бы намекает. Думаю, если правильно переписать решения на C++, то порядок будет наведен.