Rust или C++?
Посоветуйте пж, не могу определиться: Что лучше начать изучать в 2023, Rust или С++?
Мне для игр, в том числе свои движки поделывать, и с ML баловаться.
Сложноть изучения не имеет значения. Просто как я понимаю, Rust ещё сыроватый и развивается не сказать что очень быстро, а что будет с С++ в дальнейшем хз, вроде как от него потихоньку отказываются или нет?
Мне ещё 10 лет назад где-то один спец из сервисной службы провайдера говорил, что C++ -- мёртвый язык. А на нём сих пор программы пишут.
Сложность не имеет значения? Уважаемый, вы вообще не представляете, о чем говорите. Rust - это очень интересный язык, но программировать на нем порою бывает необычайно сложно. Начинать его учить как первый язык, на мой взгляд, - это далеко не лучшая идея. Ибо как только вы чуть-чуть отойдете от уровня ХэлоВорда, в гости заглянут Borrow Check и Контроль Времени Жизни. Порою эти вещи выносят мозг с эффективностью, сопоставимой с дробовиком 12 калибра. Приведу наглядный пример: есть такая штука, как связанный список. В простейшем случае его элемент - это какая-то структура, содержащая в себе данные и указатель на следующую такую структуру. Чтобы это работало на C/C++, достаточно написать что-то вроде
struct Node
{
int data; // Данные, которые мы храним в элементе связанного списка
struct Node* next; // Указатель на следующий элемент
};
На Rust у нас есть две возможности:
Написать примерно то же самое и засунуть всю обработку в unsafe блок
Если нет желания использовать unsafe блок, то определение узла превратится во что-то типа
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.
это специальный язык для пожилых си-программистов, страдающих деменцией.
то есть, им работу с указателями доверить уже нельзя, потому что они сами не в состоянии контролировать свою память, и вообще микроменеджментом заниматься здоровье не позволяет, но как-то надо на жизнь зарабатывать - вот к ним и приставляют занудную няньку, которая следит, чтобы они ещё на этапе разработки вдоволь настрелялись себе в ногу...