Top.Mail.Ru
Ответы

Rust или C++?

Посоветуйте пж, не могу определиться: Что лучше начать изучать в 2023, Rust или С++?
Мне для игр, в том числе свои движки поделывать, и с ML баловаться.
Сложноть изучения не имеет значения. Просто как я понимаю, Rust ещё сыроватый и развивается не сказать что очень быстро, а что будет с С++ в дальнейшем хз, вроде как от него потихоньку отказываются или нет?

По дате
По рейтингу
Аватар пользователя
Новичок

Мне ещё 10 лет назад где-то один спец из сервисной службы провайдера говорил, что C++ -- мёртвый язык. А на нём сих пор программы пишут.

Аватар пользователя
Мудрец

Сложность не имеет значения? Уважаемый, вы вообще не представляете, о чем говорите. Rust - это очень интересный язык, но программировать на нем порою бывает необычайно сложно. Начинать его учить как первый язык, на мой взгляд, - это далеко не лучшая идея. Ибо как только вы чуть-чуть отойдете от уровня ХэлоВорда, в гости заглянут Borrow Check и Контроль Времени Жизни. Порою эти вещи выносят мозг с эффективностью, сопоставимой с дробовиком 12 калибра. Приведу наглядный пример: есть такая штука, как связанный список. В простейшем случае его элемент - это какая-то структура, содержащая в себе данные и указатель на следующую такую структуру. Чтобы это работало на C/C++, достаточно написать что-то вроде

12345
 struct Node
{
    int data; // Данные, которые мы храним в элементе связанного списка
    struct Node* next; // Указатель на следующий элемент
}; 

На Rust у нас есть две возможности:

  1. Написать примерно то же самое и засунуть всю обработку в unsafe блок

  2. Если нет желания использовать unsafe блок, то определение узла превратится во что-то типа

1234567891011121314151617181920212223
 use std::rc::Rc; 
use std::rc::Weak; 
use std::cell::RefCell; 
 
//  Введем новый тип данных Link для описания выделенного в куче узла 
//  чтобы сократить писанину. Rc дает возможость иметь несколько ссылок на 
//  данные, но все они неизменяемые, а RefCell позволяет внутри себя иметь 
//  возможность данные изменить 
type    Link<T> = Rc::<RefCell::<Node<T>>>; 
//  Новый тип данных WeakLink нужен для создания и работы с невладеющими 
//  ссылками на узлы связанного списка 
type    WeakLink<T> = Weak::<RefCell::<Node<T>>>; 
 
//------------------------------------------------------------------- 
//  Элемент (узел) связанного списка 
//------------------------------------------------------------------- 
struct Node<T> 
{ 
    value:  T, 
    next :  Option::<Link<T>>, 
} 
//------------------------------------------------------------------- 
 

Обратите внимание на тип Link - чтобы обойти ряд ограничений, которые Rust накладывает на программиста, приходится использовать подобные, весьма нетривиальные конструкции. Это плата за гарантированную безопасность.

Начните изучение с Си, потом переходите к Си++ и только потом, когда немного научитесь этим языкам, пытайтесь подступиться к Rust.

Аватар пользователя
Высший разум

Изучай азы ассемблера и азы си, а си++ углубленней, тогда уже почти любой язык не так тебе будет страшен. Можно начать вообще с автомата тьюринга допустим https://kpolyakov.spb.ru/prog/turing.htm

Аватар пользователя
Искусственный Интеллект

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