Rust for Python Programmers #4 — Strings

Juliano Fischer Naves
3 min readSep 1, 2023

--

Greetings, fellow developers! In this exciting part of our Rust journey for Python programmers, we’re diving into the world of strings. Strings are a fundamental data type in programming, and each language has its own way of handling them. Today, we’ll explore how Python and Rust differ when it comes to strings, covering declaration, usage, and operations.

Declaring Strings

Python

In Python, you can declare strings using single, double, or triple quotes:

single_quoted = 'Hello, World!'
double_quoted = "Hello, World!"
triple_quoted = '''Hello,
World!'''

Python is flexible in this regard, allowing you to choose the style that best suits your needs.

Rust

In Rust, strings are more complex. There are two primary string types: String and string literals. Here's how you can declare them:

let string_literal = "Hello, World!";
let string_type = String::from("Hello, World!");
  • string_literal is a string literal, and its type is determined at compile-time.
  • string_type is an instance of the String type, a dynamic string that can grow or shrink during runtime.

String Usage

Python

Python’s strings are simple to use. You can concatenate them with the + operator and access individual characters using indexing:

greeting = "Hello, "
name = "Alice"
message = greeting + name
first_char = message[0] # Accessing the first character
third_char = message[2]

Rust

Rust strings offer more control over memory and safety but require a bit more effort:

let greeting = String::from("Hello, ");
let name = String::from("Alice");
let message = greeting + &name; // String concatenation
let first_char = message.chars().next(); // Accessing the first character
let third_char = my_string.chars().nth(2);
  • Rust uses the + operator for concatenation, but it takes ownership of the left operand (greeting) and borrows the right operand (&name).
  • Accessing individual characters is more explicit in Rust using iterators.

String Operations

Python

Python provides a rich set of string operations, including substring extraction, searching, and more. For example:

pythonCopy codetext = "Python is awesome"
substring = text[7:10] # Extracts "is "
position = text.find("awesome") # Finds the position of "awesome"

Rust

Rust’s standard library offers string manipulation methods, but it requires a different approach:

let text = "Rust is amazing";
let substring = &text[5..7]; // Extracts "is"
let position = text.find("amazing"); // Finds the position of "amazing"
  • Rust uses slicing to extract substrings. In Rust, a slice is a reference to a contiguous sequence of elements in a collection. When it comes to strings, Rust slices (&str) are a reference to a portion of a String or a string literal. Slices in Rust are very powerful because they allow you to work with substrings without making copies of the original data.

Wrapping Up

Both Python and Rust have their strengths and trade-offs when it comes to handling strings. Python offers simplicity and ease of use, making it great for quick development. On the other hand, Rust’s approach provides better memory control and safety, making it suitable for systems programming and building high-performance applications.

Rust, slices are more than just convenient substrings; these references provide a secure and efficient way to access portions of data without the need for costly copying.

--

--