راست (زبان برنامه‌نویسی)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Rust
144px
پارادایم(ها) compiled, concurrent, functional, imperative, object-oriented, structured
تاریخ ظهور 2010
طراح Graydon Hoare
توسعه‌دهنده Rust Project Developers
انتشار پیش‌نمایش 0.8[۱] (۲۶ سپتامبر ۲۰۱۳؛ ۲۱۱ روز پیش)
تایپ‌سیستم static, strong, inferred, structural
تأثیرگرفته از Alef, C#, C++, Camlp4, لیسپ معمولی, Cyclone, Erlang, Haskell, Hermes, Limbo, Napier, Napier88, Newsqueak, NIL, Ocaml, Racket, Ruby, Sather, Standard ML
زبان پیاده‌سازی Rust
سیستم‌عامل لینوکس, اواس ده, Windows, FreeBSD
پروانه Apache License 2.0 or پروانه ام‌آی‌تی[۲]
پسوندهای معمول .rs

راست (به انگلیسی: Rust) یک زبان برنامه‌نویسی ترجمه شده، عام منظوره و چند الگویی است که توسط تحقیقات موزیلا توسعه یافته است..[۳]این زبان طراحی شده است تا یک زبان مطمئن، همسو و عملی باشد[۴][۵] که مدل‌های تابعی خالص، امری-رویه‌ای و شی گرا را پشتیبانی می‌کند. زبان از یک پروژه شخصی توسط توسعه دهنده Graydon Hoare به وجود آمد، که او کار بر روی آن را در سال ۲۰۰۶ آغاز کرد؛ کارفرمای او موزیلا، در سال ۲۰۰۹ درگیر این پروژه شد[۶] و رسماً آن را برای اولین بار در سال ۲۰۱۰ پرده برداری کرد.[۷] در همان سال، کار از کامپایلرهای اولیه (نوشته شده در OCaml) خود را به کامپایلر خود میزبان نوشته شده در Rust تغییر داد.[۸]چیزی که به عنوان rustc شناخته شد، با موفقیت خود را در سال ۲۰۱۱ کامپایل کرد.[۹] کامپایلر خود میزبان از LLVM به عنوان backend استفاده می‌کند.
اولین نسخه از کامپایلر Rust، که آلفا نام گذاری شد در ژانویه ۲۰۱۲ منتشر شد.[۱۰]نسخه فعلی (نسخه 0.8)، در سپتامبر 2013 منتشر شده است.[۱]
Rust به طور کامل در بازخورد باز و همکاری و کمک از جامعه توسعه یافته است. طراحی این زبان از طریق تجربه حاصل از نوشتن موتور چیدمان Servo اصلاح شده و Rust خودش را کامپایل کرده است.[۱۱]اگر چه توسعه آن با حمایت مالی موزیلا و سامسونگ بوده است،اما یک پروژه ی اجتماعی است.بخش بزرگی از تصدیقات نسخه ی فعلی از اعضای جامعه می باشد.[۱۲]

توصیف[ویرایش]

هدف Rust این است که یک زبان خوب برای ایجاد مجموعه ی بزرگی از مشتری ها و سرور برنامه هایی که بر روی اینترنت اجرا می شوند باشد.[۱۳]این امر زیان را به یکی از ویژگی های مجموعه با تاکید بر ایمنی، کنترل از طرح حافظه و همزمانی هدایت می کند. اگز عملکرد زبان تنها عامل مورد توجه باشد، عملکرد قابل اطمینان بودن کد همانطور که انتظار می رودآن را کندتر از ++C میکند اما پیشگیری های از پیش تعریف شده در Rust با احتساب اقدامات محتاطانه ای که زبان ++C به طور دستی انجام می دهد، از نظر سرعت برابری می کند(و یا حتی سریعتر است.)[۱۴]
نحو زبان Rust مشابه C و ++C است؛ با بلاک هایی از کد که بین آکولاد ها محدود شده است و کلمات کلیدی کنترل جریان مانند while ,do ,else ,if و for. البته تمام کلمات کلیدی C و ++C وجود ندارد اما به هر حال دیگران(مانند تطابق واژه کلیدی برای انشعاب چند جهت) برای برنامه نویسانی که از این زبان ها می آیند کمتر آشنا خواهد بود. با وجود شباهت نحوی،Rust از نظر معنایی با C و C + + متفاوت است.

نمونه ها[ویرایش]

نمونه کد زیر برای Rust نسخه 0.8 معتبر می باشد. نحو و معناشناسی ممکن است در نسخه های بعدی را تغییر یابد.

برنامه Hello World:

fn main() {
    println("hello, world");
}

دو نمونه از تابع فاکتوریل در ساختار های بازگشتی و ترتیبی :

/* 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 recursive_factorial(n: int) -> int {
    if n <= 1 { 1 }
    else { n * recursive_factorial(n-1) }
}
 
fn iterative_factorial(n: int) -> int {
    // Variables are declared with `let`.
    // The `mut` keyword allows these variables to be mutated.
    let mut i = 1;
    let mut result = 1;
    while i <= n {
        result *= i;
        i += 1;
    }
    return result; // An explicit return, in contrast to the prior function.
}
 
fn main() {
    println!("Recursive result: {:i}", recursive_factorial(10));
    println!("Iterative result: {:i}", iterative_factorial(10));
}

یک نمایش ساده از قابلیت همزمانی ساده از Rust :

/* This function creates ten "tasks" that all execute concurrently. Run it
   several times and observe the irregular output that results as each task
   races on stdout, due to the fact that each task may yield both between
   successive calls to `println` and within the `println` function itself. */
fn main() {
    // This string is immutable, so it can safely be accessed from multiple tasks.
    let message = "Look at me, I'm in a lightweight thread!";
    // `for` loops work with any type that implements the `Iterator` trait.
    for num in range(0, 10) {
        do spawn {
            println(message);
            // `println!` is a macro that statically verifies a format string.
            // Macros are structural (as in Scheme) rather than textual (as in C).
            println!("This message brought to you by task {:i}.", num);
        }
    }
}

منابع[ویرایش]

  1. ۱٫۰ ۱٫۱ Rust Release Notes
  2. "COPYRIGHT". Rust compiler source repository. Retrieved 2012-12-17. 
  3. "The Rust Language". Lambda the Ultimate. 2010-07-08. Retrieved 2010-10-30. 
  4. "The Rust Programming Language". Retrieved 2012-10-21. 
  5. "Doc language FAQ". Retrieved 2012-10-21. 
  6. "Project FAQ". 2010-09-14. Retrieved 2012-01-11. 
  7. "Future Tense". 2011-04-29. Retrieved 2012-02-06. "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." 
  8. Hoare, Graydon (2010-10-02). "Rust Progress". Retrieved 2010-10-30. 
  9. Hoare, Graydon (2011-04-20). "[rust-dev] stage1/rustc builds". Retrieved 2011-04-20. "After that last change fixing the logging scope context bug, looks like stage1/rustc builds. Just shy of midnight :)" 
  10. catamorphism (2012-01-20). "Mozilla and the Rust community release Rust 0.1 (a strongly-typed systems programming language with a focus on memory safety and concurrency)". Retrieved 2012-02-06. 
  11. Peter Bright (2013-04-03). "Samsung teams up with Mozilla to build browser engine for multicore machines". Retrieved 2013-04-04. 
  12. "Rust Contributors". 
  13. Avram, Abel (2012-08-03). "Interview on Rust, a Systems Programming Language Developed by Mozilla". InfoQ. Retrieved 2013-08-17. "GH: A lot of obvious good ideas, known and loved in other languages, haven't made it into widely-used systems languages... There were a lot of good competitors in the late 70s and early 80s in that space, and I wanted to revive some of their ideas and give them another go, on the theory that circumstances have changed: the internet is highly concurrent and highly security-conscious, so the design-tradeoffs that always favor C and C++ (for example) have been shifting." 
  14. Walton, Patrick (2010-12-05). "C++ Design Goals in the Context of Rust". Retrieved 2011-01-21. "… 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…"