Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/67: Рейтинг темы: голосов - 67, средняя оценка - 4.67
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14

[Rust] Обсуждение возможностей и предстоящей роли языка Rust

12.02.2015, 04:38. Показов 16678. Ответов 121
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Psilon, чем он тебя так привлек? И почему именно "убийца плюсов"?
Если напишешь развернутый ответ, обещаю вынести в отдельную тему и погонять компилятор пару часов дабы вступить в полемику
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2015, 04:38
Ответы с готовыми решениями:

[Rust] Как привязывать WinAPI-функции к коду на Rust?
Может кто-нить дать код, КАК привязывать вин апишные функции к растовскому коду (на примере MesageBox). ...

Расскажите о своём опыте программирования на Rust
Доброе утро! Расскажите, пожалуйста, о своём опыте программирования на Rust. Можно в сравнении с C# или Delphi. Спасибо.

Обсуждение возможностей языка D
В данной теме я предлагаю обсуждать интересные (и не очень) возможности языка D, делиться кодом и рассказывать про ваши программы,...

121
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
13.02.2015, 10:53  [ТС]
Студворк — интернет-сервис помощи студентам
Так-с, я тут.
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Не могу до сих пор понять: полезны ли макросы вообще?
Разработчики Rust пишут так (http://doc.rust-lang.org/book/macros.html)
Functions are the primary tool that programmers can use to build abstractions. Sometimes, however, programmers want to abstract over compile-time syntax rather than run-time values. Macros provide syntactic abstraction.
Т.е. иногда возникает необходимость "парить над синтаксисом" и рассматривается как средство для его расширения. Тут макросы скорее похожи на таковые в Scheme, чем на сишные (мои изначальные наблюдения были неверны, пока не попробовал сам такое написать).
Вот, например, обрезанная версия макроса assert, который наверняка знаком многим из Си
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Rust
// сигнатура макроса
macro_rules! my_assert {
    // параметры макроса - принимает одно выражение
    // для двух выражений было бы ($left: expr, $right: expr)
    ($cond: expr) => (
        if !$cond {
            // concat! сцепляет строки
            // stringify! преобразует выражение в строку
            println!(concat!("asserion failed: ", stringify!($cond)));
        }
    );
}
 
fn main() {
    // 5 == 5 не вызвало бы появления сообщения
    // должно вывести: assertion failed: 5 == 6
    my_assert!(5 == 6);
}
Я ещё сам до конца с этим не разобрался, и вам не рекомендую делать большие выводы по этому - в книге эта возможность относится к одной из самых сложных (advanced topics).
III: Advanced Topics - Macros
Исходники стандартных макросов на GitHub
1
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 10:57
Ну эти макросы реально круты.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
13.02.2015, 11:01  [ТС]
Ещё по поводу расширений синтаксиса макросами: например, в Rust нет возможности использовать именованные параметры, как, например, в C#
C#
1
2
3
4
5
int Add(int left, int right) {
    return left + right;
}
// ...
int y = Add(left: 5, right: 6);  // y = 11
Однако, внутри скобок в println! такая возможность есть
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Rust
fn add(lhs: i32, rhs: i32) -> i32 {
    lhs + rhs
}
 
fn main() {
    let x = add(5, 6);  // x = 12
    
    // Ошибка компиляции, т.к. Rust не поддерживает именованные параметры
    // let y = add(lhs = 5, rhs = 6);
    
    // Выводит "5 + 6"
    println!("{left} + {right}", left = 5, right = 6);
}
println! (а точнее fmt!) похож на C#-ский String.Format(), но даже шире его.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 11:04
Цитата Сообщение от tezaurismosis Посмотреть сообщение
i32
А что означает эта запись?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
13.02.2015, 11:10  [ТС]
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
А что означает эта запись?
Целочисленный тип данных в 32 бита. Вот, кстати, числовые типы в Rust
C++ (Qt)
1
2
// Rust
u8, u16, u32, u64, uint, i8, i16, i32, i64, int, f32, f64
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 11:13
tezaurismosis, а чем int отличается от i32?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
13.02.2015, 11:23  [ТС]
Dennis Ritchie, судя по документации, на int отводится 64 бита
C++ (Qt)
1
2
3
// Rust
// std::int::BITS
pub const BITS: usize = 64
P.S. Этому типу недолго жить осталось, его заменят на isize, а uint на usize (точнее просто переименуют - вроде бы отличий от i64/u64 нет).
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.02.2015, 14:34
Цитата Сообщение от tezaurismosis Посмотреть сообщение
println! (а точнее fmt!) похож на C#-ский String.Format(), но даже шире его.
в шестом шарпе как раз хотят добавить интерполяцию строк

Добавлено через 8 минут
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Psilon, я не понимаю одного, как функциональный язык может заменить императивный.
Ведь в Rust'e больше развита функциональная сторона?
А зачем восклицательный знак в функции println!()?
функциональная парадигма лучше императивной по всем параметрам И лучше ООП по многим параметрам. Это видно хотя бы по внедрению ФП фич в современные ООП языки: функции первого класса, лямбды, замыкания, монады - это всё ФП фишки И их все больше интегрируется.

У ФП есть большое преимущество: объекты в нём неизменяемые, что приводит нас к возможности писать многопоточный код без синхронизации вообще. То есть нет ни мьютексов, ни семафоров, ни hazard pointers, ни даже lock-free, она тупо не нужна. Поэтому с увеличением многоядерности в аппаратном и программном плане ФП будут всё более выгодными.

Ну и ФП ближе к человеческому мышлению, чем императивный код и ООП. Это еще Дейкстра говорил, когда goto ругал. И это очень просто иллюстрируется - без дебага ошибку в программе нам очень трудно найти. Мы не можем в уме прокрутить эволюцию всех переменных в коде. Только в режиме отладки, наблюдая постоянно за watch'ами, мы можем понять "ага, тут почему-то отрицательное значение, хотя должно быть положительное".

Я не большой сторонник ФП, но слишком много преимуществ у него А недостаток один - мало где ФП учат как первому языку, хотя если учат, то императивный стиль i = i+1 воспринимается более чужеродно, чем для императивщиков - стиль ФП.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 14:39
Цитата Сообщение от Psilon Посмотреть сообщение
функциональная парадигма лучше императивной по всем параметрам
А по скорости?
Цитата Сообщение от Psilon Посмотреть сообщение
А недостаток один - мало где ФП учат как первому языку
Согласен.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.02.2015, 15:20
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
А по скорости?
по скорости средне, но тут больше проблема в том, что архитектура процессорная заточена под императивщину.

Но даже на такой архитектуре Scala чуть быстрее джавы получается: http://benchmarksgame.alioth.d... scala.html

Ну и вакансий на ФП есть, не сказать, что дофига, но есть
Миниатюры
[Rust] Обсуждение возможностей и предстоящей роли языка Rust  
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 15:21
Цитата Сообщение от Psilon Посмотреть сообщение
по скорости средне, но тут больше проблема в том, что архитектура процессорная заточена под императивщину.
Хотите сказать, что если переписать архитектуру, то функциональные языки будут работать быстрее, чем C++?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
13.02.2015, 15:25
Dennis Ritchie, что значит "переписать архитектуру"? Её можно только иначе спроектировать, вот например на хабре пример графовой архитектуры ЭВМ, которую фактически ФП и эмулируют на обычных процессорах.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
16.02.2015, 20:30  [ТС]
-- Буду периодически выкладывать сюда описание возможностей языка, которые мне показались интересными или необычными --
Необычной мне показалась возможность связывать данные с элементами перечисления, например
C++ (Qt)
1
2
3
4
5
6
7
// Rust
enum Character {
    Digit(i32),
    Other,
}
// ...
let ten = Character::Digit(10);
Compound Data Types

Долго думал, что из этого можно рабочего сделать, придумал такую штуку:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Rust
struct Point2D {
    x: f32,
    y: f32
}
 
struct Vector2D {
    from: Point2D,
    to: Point2D
}
 
enum CreationMode {
    Optional(Point2D, Point2D),
    Radius(f32, f32),
    Default
}
 
fn create_vector(mode: CreationMode) -> Vector2D {
    match mode {
        // произвольный вектор
        CreationMode::Optional(_x, _y) => Vector2D { from: _x, to: _y },
        // радиус-вектор
        CreationMode::Radius(_x, _y) => Vector2D {
            from: Point2D { x: 0.0, y: 0.0 },
            to: Point2D { x: _x, y: _y }
        },
        // вектор "по-умолчанию"
        CreationMode::Default => Vector2D {
            from: Point2D { x: 0.0, y: 0.0 },
            to: Point2D { x: 0.0, y: 0.0 }
        }
    }
}
 
fn main() {
    let vec = create_vector(
        CreationMode::Optional(
            Point2D { x: 12.0, y: 1.0 },
            Point2D { x: 2.0, y: 0.0 }));
    println!("({}, {}) -> ({}, {})",
        vec.from.x, vec.from.y,
        vec.to.x, vec.to.y);
}
Этакая перегрузка метода без перегрузки метода Мы можем создавать разные вариации вектора, пользуясь только одним методом.
Если у кого-то есть идеи по-реалистичнее, милости прошу (Psilon, вкатывайся)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.02.2015, 23:19
tezaurismosis, ну афайк одно из самых простых (и мощных) применений - это создание nullable То есть в терминах того же F#

C++
1
2
3
4
5
enum NullableInt
{
   Value(i32),
   Null
}
Хотя могу ошибаться Я в расте не особо, жду stable-версию После этого начну ковырять. Плюс сертификация. Но с радостью буду следить за твоими успехами, и делиться идеями.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
17.02.2015, 13:54  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Я в расте не особо, жду stable-версию
В блоге разрабы пишут, что около 80% (вроде бы) возможностей языка и стандартной библиотеки уже не изменят к stable версии. Так что я предпочту продолжить ковырять, меня язык впечатляет
0
Почетный модератор
12274 / 5341 / 268
Регистрация: 05.04.2011
Сообщений: 14,086
Записей в блоге: 2
18.02.2015, 10:08
 Комментарий администратора 
Господа, вернулись к теме. Оффтоп прекращаем, будьте так любезны.

Тема разделена.

Насчет ФЯП - ООП - сюда

ФЯП или ООП?
2
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
05.03.2015, 03:00
Цитата Сообщение от Psilon Посмотреть сообщение
И если не секрет, чем компилируешь? А то я окромя связки notepad++ и компиля ничего не придумал, подсветка тоже хромает, без IntelliSense как без рук, и прочие невзгоды
sublime text + plugins под rust, и вполне можно писать, и подсветка и ошибки(хотя и криво реализованные пока что)
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
05.03.2015, 11:28  [ТС]
Вот бы автодополнение кода, хотя бы базовое - имена функций и типов, члены перечислений и т.д. Есть такая для Vim'а, но работает с танцами и требует исходники.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
05.03.2015, 11:31
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Вот бы автодополнение кода, хотя бы базовое - имена функций и типов, члены перечислений и т.д. Есть такая для Vim'а, но работает с танцами и требует исходники.
плагин с автодополнением под sublime я тоже видел, но не ставил
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 14
05.03.2015, 12:17  [ТС]
dzrkot, к сожалению оно (как и дополнение для Atom, который я сейчас юзаю для Ржавчины), работают через Racer, про который я выше и написал (просто запамятовал название)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2015, 12:17

[Rust] Time
Подскажите как узнать время в Rust. //Rust extern crate time; fn main() { let now = time::get_time(); ...

Rust+assembler
Как связать язык rust и ассемблер не используя ассемблерные вставки(неудобно использовать их в RUSTе)?

Есть ли у rust будущее?
Вот вчера общался с 1 товарищем на тему перспектив С++, он меня убеждает что язык скоро будет терять популярность, что будущее за Go и...

Rust ошибка E0623
при компиляции появляется ошибка E0623 в документации этот номер пропущен. в чём может быть проблема? ошибка: error: lifetime...

Frontend Для RUST
Нужна помощь! Есть класс Participant, в этом классе есть функция new. impl Participant { /// Create a new `Participant`. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru