Системное программирование

От C до Rust

Ключевые концепции и примеры кода для разработчиков C

Rust — это современный язык программирования, который в последнее время приобрел популярность благодаря своей безопасности, производительности и выразительному синтаксису. По сравнению с C, более традиционным языком, Rust имеет некоторые ключевые отличия в синтаксисе и концепциях. В этой статье мы рассмотрим основы синтаксиса Rust и сравним его с C в отношении определений функций, переменных и типов.

Эта статья предназначена для программистов на C, которые заинтересованы в изучении Rust и хотят понять сходства и различия между двумя языками. Прочитав эту статью, вы сможете написать простую программу на Rust, но, возможно, вы все еще будете думать на C, что может привести к тому, что код на Rust будет не таким элегантным, как мог бы быть.

Тем не менее, это хорошая отправная точка для изучения Rust, а в последующих статьях будут рассмотрены более сложные темы, такие как владение, заимствование и обработка ошибок в Rust. А пока наслаждайтесь этим простым сравнением синтаксиса C и Rust.

Функции

Функции с аргументами

Вот пример простой функции Rust, которая принимает два целых числа в качестве аргументов и возвращает их сумму:

fn sum(a: i32, b: i32) -> i32 {
    return a + b;
}

В C эквивалентная функция будет выглядеть так:

int sum(int a, int b) {
    return a + b;
}

Функция без аргументов

Пример функции Rust без аргумента:

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

Как видно без аргументов, мы просто удаляем «-> i32» в конце объявления функции.

Это эквивалентно C:

#include <stdio.h>

void main() {
    printf("Hello, world!\n");
}

Переменные

Местный

Вот пример программы на Rust, которая объявляет переменную типа i32 и инициализирует ее значением 42:

fn main() {
    let a: i32 = 42;
    println!("a = {}", a);
}

В C эквивалентная программа будет выглядеть так:

#include <stdio.h>

int main() {
    int a = 42;
    printf("a = %d\n", a);
    return 0;
}

Глобальный

В Rust обычно избегают глобальных переменных, потому что система владения и заимствования Rust затрудняет безопасное и эффективное управление глобальным состоянием. Однако в Rust есть возможность объявлять глобальные переменные с помощью ключевого слова static. Вот пример:

static mut GLOBAL_VAR: i32 = 0;
fn main() {
    unsafe {
        GLOBAL_VAR += 1;
        println!("{}", GLOBAL_VAR);
    }
}

В этом примере ключевое слово static используется для объявления глобальной переменной GLOBAL_VAR, которая инициализируется значением 0. Ключевое слово mut указывает, что переменная является изменяемой, что означает, что ее можно изменить во время выполнения. Блок unsafe используется для доступа и изменения переменной, поскольку изменение глобальной переменной из нескольких потоков может привести к гонкам данных и другому неопределенному поведению.

В C эквивалентный код:

#include <stdio.h>

int main() {
    global_var++;
    printf("global_var = %d\n", global_var);
    return 0;
}

Петли

Для цикла

Вот пример цикла Rust for, который перебирает диапазон значений:

fn main() {
    for i in 1..=10 {
        println!("{}", i);
    }
}

В C эквивалент цикла for будет выглядеть так:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}

Пока цикл

Простой цикл while в Rust

let mut i = 0;
while i < 10 {
    println!("i = {}", i);
    i += 1;
}

Эквивалент в C:

int i = 0;
while (i < 10) {
    printf("i = %d\n", i);
    i++;
}

Цикл Do-While

Простой цикл do-while в Rust:

let mut i = 0;
loop {
    println!("i = {}", i);
    i += 1;
    if i >= 10 {
        break;
    }
}

Его эквивалент в C:

int j = 0;
do {
    printf("j = %d\n", j);
    j++;
} while (j < 10);

Заключение

В заключение, Rust — это современный и мощный язык программирования, который приобрел большую популярность в последние годы. Для программистов C, заинтересованных в изучении Rust, понимание сходств и различий между синтаксисом C и Rust имеет решающее значение для написания эффективного и действенного кода Rust. Мы рассмотрели некоторые основные концепции Rust, такие как определения функций, переменные и типы, и предоставили сравнения с аналогичными концепциями в C. Если вы нашли эту статью полезной, пожалуйста, хлопните в ладоши и следите за другими подобными материалами.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу