20-05-2023
Семантика: |
мультипарадигмальный: параллельное, функциональное, объектно-ориентированное, императивное, структурное программирование |
---|---|
Тип исполнения: | |
Появился в: |
2010 |
Автор(ы): |
Грэйдон Хор |
Расширение файлов: |
.rs .rc |
Релиз: | |
Типизация данных: |
статическая, строгая, с выводом типов, опционально динамическая |
Основные реализации: |
rustc |
Испытал влияние: |
Alef, C++, Camlp4, Common Lisp, Erlang, Haskell, Hermes, Limbo, Napier, Napier88, Newsqueak, NIL, Sather, OCaml, Standard ML |
Лицензия | |
Сайт: |
rust-lang.org |
Rust — экспериментальный язык программирования, разрабатываемый Mozilla Research[1]. Работа над языком была начата Грэйдоном Хоаром в 2006 году, в 2009[2] к разработке подключилась Mozilla, и в 2010 году язык был официально представлен на Mozilla Summit 2010[3]. Также в 2010 году разработка языка была переведена с использования компилятора, написанного на OCaml, на компилятор, написанный на Rust, с использованием LLVM в качестве back-end[4]. В следующем году он успешно скомпилировал сам себя[5].
Основная задача Rust — быть удобным языком для написания больших клиент-серверных приложений, работающих в сети Интернет. Такое позиционирование привело к выбору функциональных возможностей с акцентом на безопасность, контроль за использованием памяти и параллельное выполнение задач. Разработчиками языка ставится задача достичь производительности приложений на Rust сравнимой с производительностью C++-приложений[6]. Rust намеренно не включает в себя каких-то новых и непроверенных идей. Проект нацелен на сбор лучших возможностей из уже существующих языков и решений.
Нижеследующие примеры являются рабочими при сборке с помощью компилятора Rust от 6 мая 2013. В то же время, с учётом того, что язык находится в стадии активной разработки, код может не работать в более поздних версиях.
extern mod std; fn main() { let args = os::args(); io::println(fmt!("hello world from '%s'!", args[0])); }
Пара примеров реализации функции поиска факториала, в рекурсивном и итеративном стилях:
/* The branches in this function exhibit Rust's optional implicit return values, which can be utilized where a more "functional" style is preferred. Unlike C++ and related languages, Rust's `if` construct is an expression rather than a statement, and thus has a return value of its own. */ fn fac_recur(n: int) -> int { if n <= 1 { 1 } else { n * fac_recur(n-1) } } fn fac_iter(n: int) -> int { // Variables must be declared with the `mut` keyword in order to be mutable. let mut i = 1, result = 1; while i <= n { result *= i; i += 1; } return result; // An explicit return, in contrast to the above. }
auto_ptr
or the C++0x unique_ptr
), and reference counting via shared_ptr
or COM. One of the goals of Rust’s type system is to support these patterns exactly as C++ does, but to enforce their safe usage. In this way, the goal is to be competitive with the vast majority of idiomatic C++ in performance, while remaining memory-safe…» Проверено 17 апреля 2012. Архивировано из первоисточника 18 сентября 2012.Rust.