Программирование на Rust для разработчиков Python

Перевод | Автор оригинала: softwaresim

Какой язык программирования выбрать для следующего бизнес-проекта?

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

Здесь на помощь приходит Rust. Очевидно, что Rust не единственная альтернатива Python, но он обладает определенными функциями, которые делают его очень предпочтительным в определенных средах.

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

Итак, в контексте потребностей команды, сможет ли Python удовлетворить требования? Или лучше подумать о включении Rust в рабочие процессы команды?

Чтобы ответить на эти вопросы, нам нужно лучше понять, что делает эти языки программирования уникальными!

Если вы ищете язык программирования для проекта в области науки о данных, прочтите наше руководство с подробным описанием наиболее популярных языков статистики. Это руководство поможет вам разработать структурированный подход к выбору языка программирования, а также познакомит вас с плюсами и минусами нескольких языков, включая Python, R и MATLAB.

Что такое Python?

Вкратце о Python:

Python - это язык программирования общего назначения, который подчеркивает простоту и ясность кодирования. Согласно опросу разработчиков Stack Overflow 2021, Python является третьим по популярности языком программирования: 48,24% респондентов активно используют его в своих проектах.

Простой синтаксис Python сделал его языком программирования для начинающих. Более того, экосистема Python содержит сотни тысяч библиотек (пакетов) практически для любых нужд. Эти библиотеки включают модули для веб-разработки, разработки игр, создания графического пользовательского интерфейса (GUI), парсинга веб-страниц, научных вычислений и искусственного интеллекта.

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

Что такое Rust?

В двух словах о Rust:

Выпущенный в 2010 году, Rust все еще находится на ранней стадии внедрения и не может сравниться с Python по популярности. Согласно опросу разработчиков Stack Overflow 2021, только около 7,03% разработчиков используют Rust.

Но, несмотря на низкую долю рынка, Rust - самый любимый язык программирования из всех, 86,98% разработчиков желают продолжать использовать его в своих проектах. Более того, Rust сохраняет этот статус шесть лет подряд!

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

Как язык программирования общего назначения Rust, как и Python, снова может служить основой для любого проекта. В нем есть библиотеки для математических вычислений, веб-разработки, разработки игр и обработки текста, среди прочего.

Кроме того, в последнее время Rust нашел все более широкое применение в исследованиях. Все больше и больше исследователей предпочитают программировать свои научные проекты на Rust - в первую очередь из-за производительности и эффективности языка.

Rust vs Python - Сравнение основных характеристик языков

Теперь, когда у нас есть четкое представление о функциях и назначении Rust и Python, мы можем сопоставить их друг с другом. Ниже мы сравним языки с точки зрения их:

Безопасность

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

Rust разработан с учетом требований безопасности и защиты памяти. Стандартная реализация Rust даже называется Safe Rust, что ясно демонстрирует намерения создателей Rust в отношении языка.

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

В отличие от Python, в Rust нет сборки мусора. Вместо этого Rust выполняет управление памятью с помощью функций безопасности. Кроме того, Rust не компилирует код, который считает небезопасным - всякий раз, когда нарушаются его передовые методы, язык выдает сообщение об ошибке, описывающее, что пошло не так.

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

Это не означает, что Python небезопасен. Как язык высокого уровня, Python обрабатывает выделение и освобождение памяти «за кулисами», оставляя мало возможностей для внесения уязвимостей в код или запуска утечек памяти. Однако Python не имеет эквивалента строгому набору правил кодирования Rust и, следовательно, требует от пользователей большей осторожности с точки зрения безопасности.

Производительность

Rust значительно быстрее и эффективнее Python. Однако многие пакеты Python фактически написаны на других, более быстрых языках программирования, что может несколько компенсировать разницу в производительности в некоторых приложениях.

Производительность - еще один важный аргумент в пользу языка программирования Rust. Rust предлагает производительность, сопоставимую с C и C++. Фактически, в некоторых приложениях Rust часто выполняет вычисления быстрее, чем C/C++!

С другой стороны, Python известен своей медлительностью. Как интерпретируемый язык программирования Python - один из самых медленных языков программирования в отрасли, и он на световые годы отстает от Rust с точки зрения производительности. Rust часто обеспечивает выполнение в десять раз быстрее, чем Python!

При этом производительность Python во многом зависит от того, какой пакет библиотеки используется. Возьмем, к примеру, матричные вычисления - стандартные списки Python оказываются в них ужасно неэффективными. Однако, если бы команда вместо этого использовала статистические библиотеки, такие как SciPy или NumPy, можно было бы добиться существенно лучшей производительности. Это потому, что эти пакеты Python (и многие другие) реализованы на более быстрых низкоуровневых языках, что позволяет пользователям наслаждаться хорошей или лучшей производительностью, оставаясь в интуитивно понятной среде Python.

В конце концов, Rust, вероятно, превзойдет Python в большинстве ситуаций, но Python также может быть жизнеспособным выбором, когда важна скорость - все зависит от приложений и используемых пакетов библиотек.

Экосистема

Экосистема Python богаче, предлагая пакеты для широкого спектра приложений, таких как машинное обучение / глубокое обучение, наука о данных, статистика, научные вычисления, визуализация данных и веб-разработка.

Python обладает множеством пакетов библиотек, предназначенных для использования в самых разных отраслях, от искусственного интеллекта до создания приложений. PyPi, индекс пакетов Python, по состоянию на сентябрь 2021 года содержал более 300 000 пакетов, в то время как Crates.io (реестр пакетов Rust) содержал около 67 000 пакетов (на языке Rust они назывались «крэйтами»).

Python особенно популярен в машинном обучении / глубоком обучении благодаря популярным пакетам, таким как TensorFlow (разработанный Google), Keras API, построенный на основе TensorFlow для облегчения его использования), PyTorch (разработанный Facebook) и scikit-learn. На эти библиотеки не влияет низкая производительность Python, потому что их бэкэнд не написан исключительно на Python - многие из них реализованы на C++, C или CUDA (API, который позволяет разработчикам использовать графические процессоры NVIDIA для вычислений общего назначения).

Пакеты Rust также позволяют использовать язык практически для всего и вся, но в некоторых областях он слабее Python. Python, возможно, не имеет аналогов в области искусственного интеллекта и силен в науке о данных и статистике, а его огромная сокровищница пакетов может помочь организациям создать основу для любого проекта.

Тем не менее, если мы рассмотрим конкретные преимущества Rust, а именно безопасность памяти и отличную производительность, небольшая экосистема может не показаться проблематичной. Когда важна скорость, возможно, стоит написать код на Rust, даже если для этого потребуется некоторое обучение и реализация алгоритмов с нуля.

Интуитивность и простота использования

Python - это более удобный для начинающих язык программирования и гораздо лучший выбор для новичков в программировании (если мы не учитываем различия в вариантах использования Python и Rust).

Синтаксис Python ясен и прост, что значительно сокращает время изучения языка.

В частности, Python требует минимального количества знаков препинания (например, точки с запятой не требуются в конце операторов) и не требует от пользователей указывать тип переменных при их объявлении. В языке также широко используются отступы для определения порядка выполнения кода и улучшения читаемости.

В совокупности эти функции снижают входной барьер для Python, что является одной из причин безумной популярности языка. Тем не менее, использование отступов может расстроить опыт программирования на Python - одно лишнее место в коде может вызвать ошибки, которые может быть трудно исправить.

Rust, напротив, имеет синтаксис, похожий на C и C++. Благодаря этому Rust будет знаком многим, и те, кто презирает выбор дизайна Python, могут также отдать предпочтение синтаксису Rust.

Но что бы вы ни думали о философии дизайна Python, Rust, безусловно, труднее изучить. Не только из-за синтаксиса, но и из-за правил программирования Rust, безопасных для памяти, вероятно, очень часто заставят новичков ломать голову в замешательстве.

Здесь следует помнить одну вещь: сообщения об ошибках Rust в некоторых случаях более полезны, чем сообщения Python. Например, если вы неправильно введете имя переменной в Rust, компилятор выдаст исключение (как и ожидалось) и намекнет, что существует переменная с именем, похожим на то, что было введено. В Python вы получаете общую ошибку, которая просто сообщает вам, что имя переменной не определено.

Но в целом с Python легче начать, и многие из вас, вероятно, сочтут код Python более визуально приятным.

Документация и сообщество

И Rust, и Python имеют отличную документацию и процветающие сообщества, но для Python доступно больше ресурсов из-за его популярности и принятия.

Ни один из языков не испытывает недостатка в наличии образовательных ресурсов. Python и Rust имеют хорошо разработанную всестороннюю стандартную документацию, и их [сообщества](Rust Communities «Rust Communities») чрезвычайно дружелюбны к новичкам. Независимо от того, какой язык вы выберете для своего проекта, у вас не будет недостатка в информации, хотя Python в целом покрыт лучше.

Но учитывая, насколько Rust меньше Python, монументальные усилия команды Rust по документированию своего языка заслуживают похвалы. Документация Rust аккуратно и логично организована в разделы, охватывающие аспекты Rust-подобия, его менеджера пакетов Cargo, основных функций языка и его основных функций и концепций. Индекс ошибок компилятора Rust - особенно полезный ресурс, который содержит коды ошибок Rust, а также подробные объяснения и примеры плохих и рабочих кодов. Индекс ошибок также является интерактивным, и пользователи могут запускать, редактировать и отлаживать представленный код в своих веб-браузерах.

Таким образом, хотя проникновение Rust на рынок не идет ни в какое сравнение с проникновением Python, его превосходная документация делает процесс адаптации довольно плавным. Тем не менее, имейте в виду, что освоение Rust может занять гораздо больше времени, чем Python.

Когда использовать Rust? Когда использовать Python?

В противостоянии Rust и Python не было объявлено победителя - каждый язык имеет определенные преимущества, которые делают его подходящим для конкретных приложений. Чтобы суммировать сильные и слабые стороны Rust и Python, некоторые из лучших вариантов использования для каждого языка описаны в следующей таблице.

Используйте Rust, если:Используйте Python, если:
Команда работает с большими наборами данных и требует высокой производительностиКоманда создает проект для целей ИИ, статистики или науки о данных.
Команда создает безупречное приложение с небольшим количеством ошибок или без нихКоманде нужно быстро развернуть рабочий продукт
Команде требуется дополнительная степень безопасностиКоманда ценит удобочитаемость и простоту кода

Таким образом, эта таблица предлагает:

Следующие шаги

Пытаясь выбрать язык программирования для своего проекта, не увлекайтесь вечными спорами о «лучшем языке в мире». Языки программирования - это просто инструменты, предназначенные для достижения конкретных целей, и ни один универсальный язык не может удовлетворить все наши потребности.

Выбор языка программирования сводится к пониманию требований вашего проекта и уверенности в том, что ваш набор инструментов сможет поддержать вас на пути к вашим целям. Будьте гибкими, не зацикливайтесь на языке программирования только потому, что он нравится или популярен, и убедитесь, что у вас есть универсальный арсенал инструментов (программных или нет) для достижения ваших целей!

Если члены вашей команды заинтересованы в быстром знакомстве с любым языком, ознакомьтесь с этими бесплатными вводными курсами для самостоятельного изучения Python или Rust.

Использованная литература:

Curcio, K., Navarro, T., Malucelli, A., & Reinehr, S. (2018). Requirements engineering: A systematic mapping study in agile software development. Journal of Systems and Software, 139, 32-50.

Kasauli, R., Liebel, G., Knauss, E., Gopakumar, S., & Kanagwa, B. (2017, September). Requirements engineering challenges in large-scale agile system development. In 2017 IEEE 25th International Requirements Engineering Conference (RE) (pp. 352-361). IEEE.

Vogelsang, A., & Borg, M. (2019, September). Requirements engineering for machine learning: Perspectives from data scientists. In 2019 IEEE 27th International Requirements Engineering Conference Workshops (REW) (pp. 245-251). IEEE.

Zamudio, L., Aguilar, J. A., Tripp, C., & Misra, S. (2017, July). A requirements engineering techniques review in agile software development methods. In International Conference on Computational Science and Its Applications (pp. 683-698). Springer, Cham.