Rust (язык программирования)

Rust (язык программирования)
Rust
Семантика:

мультипарадигмальный: параллельное, функциональное, объектно-ориентированное, императивное, структурное программирование

Тип исполнения:

компилируемый

Появился в:

2010

Автор(ы):

Грэйдон Хор

Расширение файлов:

.rs .rc

Релиз:

0.4 (15 октября 2012)

Типизация данных:

статическая, строгая, с выводом типов, опционально динамическая

Основные реализации:

rustc

Испытал влияние:

Alef, C++, Camlp4, Common Lisp, Erlang, Haskell, Hermes, Limbo, Napier, Napier88, Newsqueak, NIL, Sather, Standard ML

Лицензия

MIT

Сайт:

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 от 23 июля 2012. В то же время, с учетом того, что язык находится в стадии активной разработки, код может не собираться на данное время.

Hello world:

fn main(args: ~[str]) {
    io::println("hello world from '" + 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;
    }
    ret result;  // An explicit return, in contrast to the above.
}

Ссылки

  1. The Rust Language. Lambda the Ultimate (8 июля 2010). Архивировано из первоисточника 23 ноября 2012. Проверено 30 октября 2010.
  2. Project FAQ (14 сентября 2010). Проверено 17 апреля 2012.
  3. Future Tense (29 апреля 2011). — «At Mozilla Summit 2010, we launched Rust, a new programming language motivated by safety and concurrency for parallel hardware, the “manycore” future which is upon us.»  Архивировано из первоисточника 18 сентября 2012. Проверено 17 апреля 2012.
  4. Hoare, Graydon Rust Progress (2 октября 2010). Архивировано из первоисточника 18 сентября 2012. Проверено 17 апреля 2012.
  5. Hoare, Graydon [rust-dev] stage1/rustc builds (20 апреля 2011). — «After that last change fixing the logging scope context bug, looks like stage1/rustc builds. Just shy of midnight :)»  Проверено 17 апреля 2012.
  6. Walton, Patrick C++ Design Goals in the Context of Rust (5 декабря 2010). — «… It’s impossible to be “as fast as C” in all cases while remaining safe… C++ allows all sorts of low-level tricks, mostly involving circumventing the type system, that offer practically unlimited avenues for optimization. In practice, though, C++ programmers restrict themselves to a few tools for the vast majority of the code they write, including stack-allocated variables owned by one function and passed by alias, uniquely owned objects (often used with 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…»  Архивировано из первоисточника 18 сентября 2012. Проверено 17 апреля 2012.

Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное



Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»