The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.38"
Отправлено Ordu, 27-Сен-19 21:31 
> Если не сложно, то можно немного подробнее? Правда очень интересно.

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

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

Прям скажем, все эти правила выполнять в C не удастся, потому что, например, C не позволяет отразить в типе указателя, куда этот указатель указывает -- на стек, в кучу, в статическую память? С точки зрения C, char* и в Африке char*, с точки зрения rust'а, могут быть нюансы: Box<c_char> -- это указатель на кучу, и соответственно код который перевыделяет память, будет принимать Box<c_char>, и с указателем на стек откажется работать. В C так не сделать, или можно но слишком сложно, может макросами и можно упростить, реализовав тривиальную параметризацию типов, да и то не факт. Но многие правила въедаются не то, что в мозг, они въедаются в пальцы, и твои пальцы отказываются потом писать с нарушением правил.

Эти правила ограничивают полёт мысли и творческую свободу, конечно, но опыт раста может помочь и здесь: есть Learning Rust With Entirely Too Many Linked Lists[1] и есть Rustonomicon[2], если ты скуришь их, попробуешь это на практике и посмотришь как делают другие, то ты не просто будешь знать правила, ты будешь знать как и когда их можно нарушать так, чтобы минимизировать негативные последствия. И опять же не запутаться соплями в борроу-чекере при этом.

Эти знания и навыки вполне можно перенести и в C, и соблюдать (или осмысленно нарушать) эти правила несмотря на то, что компилятор C совершенно не парится об этом и не может отслеживать lifetime'ы и ownership. И на то, чтобы освоить эти правила под чутким руководством borrow-checker'а, будет достаточно, на мой взгляд, 1-3 лет чтения мануалов, написания кода, чтения кода (преимущественно кода std, преимущественно прямо в браузере по ссылке из документации на std) и общения на реддите. Чтобы то же самое освоить с C, потребуется лет пять и ещё хороший ментор, который будет ревьюировать твой код, то есть реально сидеть, вникать и пороть тебя розгами.

[1] https://rust-unofficial.github.io/too-many-lists/
[2] https://doc.rust-lang.org/nomicon/

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру