📜  Rust 编程语言简介

📅  最后修改于: 2022-05-13 01:55:31.255000             🧑  作者: Mango

Rust 编程语言简介

Rust 是一种快速且内存高效的静态编译语言,具有丰富的类型系统和所有权模型。它可用于为性能关键型服务提供动力,同时保证内存安全和线程安全,使开发人员能够在编译时进行调试。除此之外,Rust 还拥有出色的文档和用户友好的编译器,其中包含集成包管理器等高端工具和具有类型检查和自动完成等功能的多编辑器。 Rust 可以防止所有的崩溃,非常有趣的是,rust 在默认情况下是安全的,就像 JavaScript、Ruby 和Python。这比 C/C++ 强大得多,因为我们不能编写错误的并行代码,你永远看不到 Rust 中的错误。它非常快地很好地表示了许多编程范式。

但是问题来了,既然已经有很多编程语言,比如Python、C++、 Java等,那么为什么还需要开发一种新的编程语言。答案是其他编程语言对您正在运行的硬件有很多控制,例如,您可以对其进行很好的优化,直接转换为汇编代码,但它不是很安全。

所以 Rust 为我们提供了我们可以拥有的所有控制以及我们可以实现的所有安全级别。

Rust 使用 Rust ,这意味着所有标准编译器库都是用 Rust编写的,有一点使用 C 编程语言,但大多数是 Rust。 Rust 的大项目是“servo” ,它是一个写出完全并行的布局引擎的项目,就像 gecko 之类的 Firefox 或 WebKit 在 safari 中。

Servo 构建了布局引擎来从下到上呈现 HTML。



Rust 中的函数:

函数是可以执行类似相关操作的可重用代码块。您已经看到了该语言中最重要的函数之一: main函数,它是许多程序的入口点。您还看到了“fn”关键字,它允许您声明新函数。 Rust 代码使用蛇形大小写作为函数和变量名称的常规样式。在蛇的情况下,所有字母都是小写并下划线单独的单词。

句法:

fn functionname(arguments){
  code
}
  • 要创建一个函数,我们需要使用fn 关键字。
  • 函数名写在 fn 关键字之后
  • 参数在括号内的函数名之后传递
  • 您可以在函数块中编写函数代码

示例:下面的函数只是打印“Hello, World!”在控制台中:

Rust
fn main() {
   println!("Hello, world!");
}


Rust
fn helper() -> Box {
let three = box 3;
return three; //transfer ownership
}
fn main() {
// accuire ownership of return value
let my_three = helper();
}


Rust
let a: ∫
{
let b =3; //b lifetime is not same as a
a =&b;
}  //


Rust
let a: ∫
let b=3;  // a and b have same lifetime
a = &b;


Rust
let x = 2;
x = 9; //it will show an error


Rust
let mut x = 2;
x = 9;  //work correctly


Rust
struct Employee {
  name: String,
  company: String,
  employee_id: u32,
  profile: String
 
}
fn main() {
  let value = Employee {
    name: String::from("Geek"),
    company: String::from("Geeksforgeeks.org"),
    employee_id: 007,
    profile:String::from("Manager"),
 
  };
  println!("Employee: {} of {} Company bearing EmployeeID {} is of {} level.",
    value.name,
    value.company,
    value.employee_id,
    value.profile);
}


Rust
// Rust program to get value from tuple
// using index
fn main() {
    let gfg = ("cp", "algo", "FAANG", "Data Structure");
    
      // complete tuple
    println!("complete tuple = {:?} ", gfg );
    
      // first value
    println!("at 0 index = {} ", gfg.0 );
    
      // second value
    println!("at 0 index = {} ", gfg.1 );
    
      // third value
    println!("at 0 index = {} ", gfg.2 );
    
      // fourth value
    println!("at 0 index = {} ", gfg.3 );
}


输出:



Hello, World!

所有权概念:

所有权的概念是,当您拥有某物时,您可以决定将其传递给其他人,如果您有一本书,并且已经阅读完毕,则可以将其永久交给某人而不必担心。

fn helper() -> Box {
let three = box 3;
return three; //transfer ownership
}
fn main() {
// accuire ownership of return value
let my_three = helper();
}


借贷概念:

可以借用 Rust 中的自有值以允许使用一段时间。 “&”符号代表借用的引用。借来的值有一个生命周期,并且只在那个时间有效。借用防止移动。虽然有有效借用,但我无法转让所有权。我仍然拥有它,但不能转让,直到我将其交出以真正放弃借来的东西。

let a: ∫
{
let b =3; //b lifetime is not same as a
a =&b;
}  //

这里“a”和“b”有不同的生命周期,所以它不起作用。



let a: ∫
let b=3;  // a and b have same lifetime
a = &b;

这里“a”和“b”有相同的生命,所以它会起作用。借用可以嵌套。通过克隆,可以拥有借来的价值。

Rust 中的内存管理:

  1. Rust 具有细粒度的内存管理,但一旦创建就会自动管理。
  2. 在 Rust 中,当您分配内存时,您永远不必真正释放它,您可以决定何时释放它,但永远不要调用它。 Rust 会自动处理它。
  3. 每个变量都有一个有效的范围,一旦超出范围,它就会自动解除分配。
  4. 在 Rust 中,每个程序都从操作系统分配内存。
  5. Rust 也有一个共享内存,我们可以在其中引用数据,我们可以使用所有权来跟踪引用计数。

不同的记忆:

堆:

  • 它是最大的内存块,由 Rust 所有权模型管理。
  • 在这个地方,存储了所有的动态数据。

堆:



  • rust 中的所有值都分配在堆栈上。
  • 此时,默认分配静态内存。
  • 每个线程有一个堆栈。
  • 它包括结构和指向动态数据的指针。

可变性:

默认情况下,rust 中的值是不可变的,并且必须标记为可变的(如果需要)。

例子:

let x = 2;
x = 9; //it will show an error

上面的例子将显示一个错误,因为我们没有将它标记为可变的。



let mut x = 2;
x = 9;  //work correctly

这将正常工作,因为我们已将其标记为可变的。在这种情况下,我们明确地改变了它。

Rust 中的结构:

该结构体是 rust 中用户定义的数据类型,用于组合不同类型的不同数据项。结构将数据定义为键值对。 struct关键字用于在 Rust 中定义结构。

句法:



struct Name_of_structure {
  field1:data_type,
  field2:data_type,
  field3:data_type
}

例子:

struct Employee {
  name: String,
  company: String,
  employee_id: u32,
  profile: String
 
}
fn main() {
  let value = Employee {
    name: String::from("Geek"),
    company: String::from("Geeksforgeeks.org"),
    employee_id: 007,
    profile:String::from("Manager"),
 
  };
  println!("Employee: {} of {} Company bearing EmployeeID {} is of {} level.",
    value.name,
    value.company,
    value.employee_id,
    value.profile);
}

输出:

Employee: Geek of Geeksforgeeks.org Company bearing EmployeeID 7 is of Manager level.



这是我们如何在 Rust 中创建结构的一个例子。这将完美编译。

元组:

rust 中的元组是一种有限异构复合数据类型,这意味着它可以一次存储多个值。 在元组中,没有将元素添加到元组的内置方法。我们可以使用索引来获取元组的值,也不能使用 for 循环遍历元组。

Rust 中的元组使用小括号定义,如下所示:

Syntax: ("geeksforgeeks", 1, 'geek')

例子:

// Rust program to get value from tuple
// using index
fn main() {
    let gfg = ("cp", "algo", "FAANG", "Data Structure");
    
      // complete tuple
    println!("complete tuple = {:?} ", gfg );
    
      // first value
    println!("at 0 index = {} ", gfg.0 );
    
      // second value
    println!("at 0 index = {} ", gfg.1 );
    
      // third value
    println!("at 0 index = {} ", gfg.2 );
    
      // fourth value
    println!("at 0 index = {} ", gfg.3 );
}

输出:

complete tuple = ("cp", "algo", "FAANG", "Data Structure") 
at 0 index = cp 
at 0 index = algo 
at 0 index = FAANG 
at 0 index = Data Structure 

Rust 类型系统:

在 Rust 中,每个变量、值和项目都有一个类型。类型定义了它持有多少内存以及可以对值执行哪些操作。下表列出了 Rust 中的所有类型:

TypeContents
Primitive TypesBoolean, Numeric, Textual, Never
Sequence TypesTuple, Array, Slice
User-defined TypesStruct, Enum, Union
Function TypesFunctions, Closures
Pointer TypesReferences, Raw pointers, Function pointers
Trait TypesTrait objects, Impl trait

Rust 的优缺点:

好处:

  1. 快速调试和测试:Rust 是一种速度非常快的语言,支持快速有效的调试。
  2. 与其他语言相比,Rust 支持更复杂的代码,因此我们可以用更少的代码实现更多。
  3. 它支持跨平台开发。
  4. 易于集成:Rust 可以很容易地与 C 和许多其他著名的编程语言集成。
  5. Rust 比其他编程语言更安全。
  6. 有一个广泛的开发者社区支持 Rust。

缺点:

  1. 由于复杂性,学习 Rust 可能需要更长的时间。
  2. 在 Rust 中,代码效率较低,编译也需要更多时间。
  3. 由于它更复杂,因此完成用 Rust 编写的应用程序可能需要更多时间。
  4. 它是一种新语言,因此需要更多时间来传播,并且 Rust 中的工作也可能不像其他流行的编程语言那样多。
  5. 在某些情况下,rust 会泄漏内存并变得比流行的编程语言慢。