Информация об изменениях

Сообщение Re: Rust для начинающих от 22.02.2019 18:14

Изменено 22.02.2019 18:16 Иван Дубров

Re: Rust для начинающих
Здравствуйте, _NN_, Вы писали:

_NN>Закрался тут вопрос в целесообразности замены С++ на Rust как способ улучшить качество кода у начинающих.

_NN>Другие языки не предлагать, т.к. требуется низкоуровневый код, а там выбора сегодня не так много.

_NN>Какие соображения ?


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

Мой опыт с Rust таков, что большую часть времени новичкам примерно всё равно Rust или не Rust, они пользуются уже созданными абстракциями и API. Ну то есть я не могу, конечно, сравнить тех же людей с "а как бы они на Java писали?", но начиная с какого-то момента ошибки и вопросы больше про то, как использовать ту или иную подсистему. Я знаю несколько моментов, где я могу полдня биться чтоб правильно сформулировать типы, но я стараюсь разрабатывать подсистемы так, чтобы прятать подобные вещи за простым интерфейсом или хотя бы за примерами в документации.

А вот создавать такие абстракции -- вот это уже совсем другой уровень, нужно понимать:

1. Динамическая vs статическая диспетчиризация и какая куда больше подходит.
2. Заимствование в владение в масштабах всей системы. Заимствование хорошо работает "локально", но не очень "глобально" и наоборот. И ловушка тут в том, что как только заимствование начинает "заражать" структуры данных (грубо говоря, как в сигнатуре типа данных появляются переменные времени жизни) -- остановить это уже нетривиально.
3. Рекурсивные и циклические структуры данных, и.т.д.
4. Более продвинутое использование типажей.
5. Макросы, когда ничего другое уже не помогает.

На мой взгляд, у совсем новичков (люди сразу после колледжа или буткампа) две проблемы с Rust:

1. Инструменты (IDE, отладка, навигация по коду) так себе.
2. Когда совсем нет понимания владения, сложно пробраться через самые первые концепции с которыми сталкиваешься: Option / Result / Iterator / Vec / String / &str / &[]. Например, как Option<String> превратить в &str? Зачем у Option<T> as_ref()? И.т.д.


Но у нас специфика -- энтерпрайз система, поэтому ситуация может быть иная. Я сам лично занимался низкоуровневым программированием на Rust (микроконтроллеры), но как хобби. Хотя там даже проще было -- благодаря [url = https://github.com/japaric/cortex-m-rtfm]RTFM[/url] и прочим типобезопасным оберткам.
Re: Rust для начинающих
Здравствуйте, _NN_, Вы писали:

_NN>Закрался тут вопрос в целесообразности замены С++ на Rust как способ улучшить качество кода у начинающих.

_NN>Другие языки не предлагать, т.к. требуется низкоуровневый код, а там выбора сегодня не так много.

_NN>Какие соображения ?


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

Мой опыт с Rust таков, что большую часть времени новичкам примерно всё равно Rust или не Rust, они пользуются уже созданными абстракциями и API. Ну то есть я не могу, конечно, сравнить тех же людей с "а как бы они на Java писали?", но начиная с какого-то момента ошибки и вопросы больше про то, как использовать ту или иную подсистему. Я знаю несколько моментов, где я могу полдня биться чтоб правильно сформулировать типы, но я стараюсь разрабатывать подсистемы так, чтобы прятать подобные вещи за простым интерфейсом или хотя бы за примерами в документации.

А вот создавать такие абстракции -- вот это уже совсем другой уровень, нужно понимать:

1. Динамическая vs статическая диспетчиризация и какая куда больше подходит.
2. Заимствование в владение в масштабах всей системы. Заимствование хорошо работает "локально", но не очень "глобально" и наоборот. И ловушка тут в том, что как только заимствование начинает "заражать" структуры данных (грубо говоря, как в сигнатуре типа данных появляются переменные времени жизни) -- остановить это уже нетривиально.
3. Рекурсивные и циклические структуры данных, и.т.д.
4. Более продвинутое использование типажей.
5. Макросы, когда ничего другое уже не помогает.

На мой взгляд, у совсем новичков (люди сразу после колледжа или буткампа) две проблемы с Rust:

1. Инструменты (IDE, отладка, навигация по коду) так себе.
2. Когда совсем нет понимания владения, сложно пробраться через самые первые концепции с которыми сталкиваешься: Option / Result / Iterator / Vec / String / &str / &[]. Например, как Option<String> превратить в &str? Зачем у Option<T> as_ref()? И.т.д.


Но у нас специфика -- энтерпрайз система, поэтому ситуация может быть иная. Я сам лично занимался низкоуровневым программированием на Rust (микроконтроллеры), но как хобби. Хотя там даже проще было -- благодаря RTFM и прочим типобезопасным оберткам.