Movatterモバイル変換


[0]ホーム

URL:


Packt
Search iconClose icon
Search icon CANCEL
Subscription
0
Cart icon
Your Cart(0 item)
Close icon
You have no products in your basket yet
Save more on your purchases!discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Profile icon
Account
Close icon

Change country

Modal Close icon
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timerSALE ENDS IN
0Days
:
00Hours
:
00Minutes
:
00Seconds
Learning Hub> How-To Tutorials>
Perform Advanced Programming with Rust
Read more

Perform Advanced Programming with Rust

Save for later
Packt Editorial Staff
  • 420 min read
  • 2018-04-23 15:00:17
    • 0Likes
    • 0Comments

    article-image

    Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. In today’s tutorial we are focusing on equipping you with recipes to programming with Rust and also help you define expressions, constants, and variable bindings. Let us get started:

    Defining an expression


    An expression, in simple words, is a statement in Rust by using which we can create logic and workflows in the program and applications. We will deep dive into understanding expressions and blocks in Rust.

    Getting ready


    We will require the Rust compiler and any text editor for coding.

    How to do it...


    Follow the ensuing steps:

    1. Create a file named expression.rs with the next code snippet.
    2. Declare the main function and create the variables x_val, y_val, and z_val:

    //  main  point  of  execution fn  main()  {//  expressionlet  x_val  =  5u32;//  y  blocklet  y_val  =  {let  x_squared  =  x_val  *  x_val;let  x_cube  =  x_squared  *  x_val;//  This  expression  will  be  assigned  to  `y_val`x_cube  +  x_squared  +  x_val};//  z  blocklet  z_val  =  {//  The  semicolon  suppresses  this  expression  and  `()`  is assigned  to  `z`2  *  x_val;};//  printing  the  final  outcomes println!("x  is  {:?}",  x_val); println!("y  is  {:?}",  y_val); println!("z  is  {:?}",  z_val);}


    You should get the ensuing output upon running the code. Please refer to the following screenshot:

    advanced-programming-with-rust-img-0

    How it works...


    All the statements that end in a semicolon (;) are expressions. A block is a statement that has a set of statements and variables inside the {} scope. The last statement of a block is the value that will be assigned to the variable. When we close the last statement with a semicolon, it returns () to the variable.

    In the preceding recipe, the first statement which is a variable named x_val , is assigned to the value 5. Second, y_val is a block that performs certain operations on the variable x_val and a few more variables, which are x_squared and x_cube that contain the squared and cubic values of the variable x_val , respectively. The variables x_squared and x_cube , will be deleted soon after the scope of the block.

    The block where we declare the z_val variable has a semicolon at the last statement which assigns it to the value of (), suppressing the expression. We print out all the values in the end.

    We print all the declared variables values in the end.

    Defining constants


    Rust provides the ability to assign and maintain constant values across the code in Rust. These values are very useful when we want to maintain a global count, such as a timer-- threshold--for example. Rust provides two const keywords to perform this activity. You will learn how to deliver constant values globally in this recipe.

    Getting ready


    We will require the Rust compiler and any text editor for coding.

    How to do it...


    Follow these steps:

    1. Create a file named constant.rs with the next code snippet.
    2. Declare the global UPPERLIMIT using constant:

    //  Global  variables  are  declared  outside  scopes  of  otherfunctionconst  UPPERLIMIT:  i32  =  12;

    1. Create the is_big function by accepting a single integer as input:

    //  function  to  check  if  bunber fn  is_big(n:  i32)  ->  bool  {//  Access  constant  in  some  functionn  >  UPPERLIMIT}

    Unlock access to the largest independent learning library in Tech for FREE!
    Get unlimited access to 7500+ expert-authored eBooks and video courses covering every tech area you can think of.
    Renews at $19.99/month. Cancel anytime
    1. In the main function, call the is_big function and perform the decision-making statement:

    fn  main()  {let  random_number  =  15;//  Access  constant  in  the  main  thread println!("The  threshold  is  {}",  UPPERLIMIT); println!("{}  is  {}",  random_number,  if is_big(random_number)  {  "big"  }  else  {  "small"});//  Error!  Cannot  modify  a  `const`.//  UPPERLIMIT  =  5;}


    You should get the following screenshot as output upon running the preceding code:

    advanced-programming-with-rust-img-1

    How it works...


    The workflow of the recipe is fairly simple, where we have a function to check whether an integer is greater than a fixed threshold or not. The UPPERLIMIT variable defines the fixed threshold for the function, which is a constant whose value will not change in the code and is accessible throughout the program.

    We assigned 15 to random_number and passed it via is_big  (integer  value); and we then get a boolean output, either true or false, as the return type of the function is a bool type. The answer to our situation is false as 15 is not bigger than 12, which the UPPERLIMIT value set as the constant. We performed this condition checking using the if...else statement in Rust.

    We cannot change the UPPERLIMIT value; when attempted, it will throw an error, which is commented in the code section.

    Constants declare constant values. They represent a value, not a memory address: type  =  value;

    Performing variable bindings


    Variable binding refers to how a variable in the Rust code is bound to a type. We will cover pattern, mutability, scope, and shadow concepts in this recipe.

    Getting ready


    We will require the Rust compiler and any text editor for coding.

    How to do it...


    Perform the following step:

    1. Create a file named binding.rs and enter a code snippet that includes declaring the main function and different variables:

    fn  main()  {//  Simplest  variable  binding let  a  =  5;//  patternlet  (b,  c)  =  (1,  2);//  type  annotation let  x_val:  i32  =  5;//  shadow  example let  y_val:  i32  =  8;{println!("Value  assigned  when  entering  the scope  :  {}",  y_val);  //  Prints  "8".let  y_val  =  12;println!("Value  modified  within  scope  :{}",  y_val);//  Prints  "12".}println!("Value  which  was  assigned  first  :  {}",  y_val);//  Prints  "8". let  y_val  =  42;println!("New  value  assigned  :  {}",  y_val);//Prints  "42".}


    You should get the following screenshot as output upon running the preceding code:

    advanced-programming-with-rust-img-2

    How it works...


    The let statement is the simplest way to create a binding, where we bind a variable to a value, which is the case with variable a. To create a pattern with the let statement, we assign the pattern values to b and c values in the same pattern. Rust is a statically typed language. This means that we have to specify our types during an assignment, and at compile time, it is checked to see if it is compatible. Rust also has the type reference feature that identifies the variable type automatically at compile time. The variable_name  : type is the format we use to explicitly mention the type in Rust. We read the assignment in the following format:

    x_val is a binding with the type i32 and the value 5.


    Here, we declared x_val as a 32-bit signed integer. However, Rust has many different primitive integer types that begin with i for signed integers and u for unsigned integers, and the possible integer sizes are 8, 16, 32, and 64 bits.

    Variable bindings have a scope that makes the variable alive only in the scope. Once it goes out of the scope, the resources are freed.

    A block is a collection of statements enclosed by {}. Function definitions are also blocks! We use a block to illustrate the feature in Rust that allows variable bindings to be shadowed. This means that a later variable binding can be done with the same name, which in our case is y_val. This goes through a series of value changes, as a new binding that is currently in scope overrides the previous binding. Shadowing enables us to rebind a name to a value of a different type. This is the reason why we are able to assign new values to the immutable y_val variable in and out of the block.

    [box type="shadow" width=""]This article is an extract taken fromRust Cookbook written by Vigneshwer Dhinakaran. You will find more than 80 practical recipes written in Rust that will allow you to use the code samples right away in your existing applications.[/box]

    Read More

    20 ways to describe programming in 5 words

    Top 5 programming languages for crunching Big Data effectively


     

     


    • 0Likes
    • 0Comments

    Recommendations for you

    Left arrow icon
    Mathematics of Machine Learning
    Mathematics of Machine Learning
    Read more
    May 2025730 pages
    eBook
    eBook
    $23.99$47.99
    $47.98$59.99
    Building Agentic AI Systems
    Building Agentic AI Systems
    Read more
    Apr 2025288 pages
    Full star icon4 (1)
    eBook
    eBook
    $38.99$43.99
    $54.99
    LLM Engineer's Handbook
    LLM Engineer's Handbook
    Read more
    Oct 2024522 pages
    Full star icon4.9 (28)
    eBook
    eBook
    $47.99
    $59.99
    Building AI Agents with LLMs, RAG, and Knowledge Graphs
    Building AI Agents with LLMs, RAG, and Knowledge Graphs
    Read more
    Jul 2025560 pages
    Full star icon1 (1)
    eBook
    eBook
    $42.99$47.99
    $59.99
    Graph Machine Learning
    Graph Machine Learning
    Read more
    Jul 2025434 pages
    eBook
    eBook
    $38.99$43.99
    $54.99
    Generative AI with LangChain
    Generative AI with LangChain
    Read more
    May 2025480 pages
    eBook
    eBook
    $23.99$47.99
    $47.98$59.99
    LLM Design Patterns
    LLM Design Patterns
    Read more
    May 2025534 pages
    eBook
    eBook
    $38.99$43.99
    $54.99
    Model Context Protocol
    Model Context Protocol
    Read more
    Jul 2025161 pages
    eBook
    eBook
    $22.99$25.99
    Right arrow icon

    Related Articles

    article-image-from-c98-to-c23-the-arithmetic-mean-benchmarked-and-optimized
    article-image-henrique-campos-on-game-development-patterns-with-godot-4
    article-image-revolutionising-work-and-everyday-life-with-chatgpt
    M.T. White
    16 Dec 2024

    Revolutionising Work and Everyday Life with ChatGPT

    10 min read
    M.T. White
    16 Dec 2024
    10 min read
    article-image-building-trust-in-ai-the-role-of-rag-in-data-security-and-transparency

    Comments (0)

    No comments for this article yet!

    [8]ページ先頭

    ©2009-2025 Movatter.jp