Ржавчина Попадает В Стабильную 1.0 – Ну И Что?


Rust-это попытка Mozilla создать системный язык программирования для замены C и C++. Теперь он достиг стабильной версии 1, и пришло время спросить, есть ли какие-либо причины обратить на это внимание.

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

Ржавчина утверждает, что она быстрая и безопасная.

C быстр, но небезопасен, как доказывают многие проблемы безопасности. C использует указатели, которые близки к металлу, но также очень подвержены ошибкам.

C++ можно сделать более безопасным с помощью интеллектуальных указателей, но стоимость с точки зрения скорости и сложности высока. В любом случае вы можете утверждать, что C++ не является системным языком программирования, потому что он поддерживает слишком много абстракций высокого уровня, таких как объекты, чтобы быть заменой C. Например, у Линуса Торвальдса не будет C++ в ядре Linux, и он, вероятно, прав. Будет ли у него Ржавчина? Вероятно, нет, нет, конечно, нет! 

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

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

Та же основная идея, позволяющая компилятору выполнять эту работу, применяется и к другим областям языка. Абстракции-это то, что делает язык высокого уровня высоким, но они часто могут быть дорогостоящими с точки зрения производительности. Rust пытается использовать “абстракции с нулевой стоимостью”, когда абстракция может быть включена в язык без наложения затрат на производительность на сгенерированный код. Rust имеет множество высокоуровневых функций – вывод типов, сопоставление шаблонов, универсалии, макросы, черты, перегрузка операторов и параллелизм. Вы даже можете заниматься объектно-ориентированным программированием в Rust, но есть некоторые вещи, которые вы должны придумать для себя. Функциональное программирование-это более простой подход для использования в Rust, поскольку он поддерживает такие вещи, как закрытие, функции более высокого порядка, сопоставление шаблонов и итераторы, 

Итак, является ли Rust хорошей альтернативой C или C++?

Вероятно, это не очень хорошая альтернатива C++, который является сложным объектно-ориентированным языком с большим количеством абстракций. Если вы хороший программист на C++, вы, вероятно, найдете Rust ограничительным, особенно если вы хотите использовать ООП.

В качестве альтернативы C может быть лучше, потому что Rust-это язык более высокого уровня, и он, похоже, ловит глупые ошибки, которые вы легко можете сделать в C. Он также создает exe-файл с минимальным временем выполнения, поэтому он подходит для приложений, для которых используется C. Однако, по крайней мере на данный момент, Ржавчина может быть недостаточно быстрой. Он использует промежуточное представление LLVM для своего выходного кода. Затем он компилируется в машинный код LLVM, который имеет то преимущество, что Rust может ориентироваться на множество различных процессоров – x86, различные варианты ARM и так далее. Однако подход LLVM не так оптимизирован, как подход GCC. Это означает, что, хотя код Rust, как правило, быстр, код C может превзойти его более чем в 2 раза. 

У C также есть еще одно огромное преимущество – он очень близок к металлу. Его лучше всего описать как независимый от машины ассемблер, а не язык высокого уровня. Его структуры данных отображаются непосредственно в памяти, и программисты часто думают в терминах низкого уровня. Это причина, по которой они совершают ошибки, но это также причина, по которой использование C рассматривается как простое и прямое. Ржавчина, с другой стороны, кажется набором правил и сложных абстракций, которые предназначены для того, чтобы затруднить компиляцию вашего кода!

Существует также небольшой вопрос, что C существует уже давно и имеет множество инструментов и поддержки. Вы можете выучить C и получить работу программиста, и на данный момент то же самое нельзя сказать с такой уверенностью о Rust. Тем не менее, Rust используется в браузерном движке следующего поколения Mozilla, который является большим проектом, и есть даже призывы включить разработанный Rust код в Firefox.

Нет никаких сомнений в том, что поддержка Mozilla помогает языку иметь достоверность, но достаточно ли этого?

Скорее всего, нет. 


Добавить комментарий