The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Rust 1.54, opennews (??), 29-Июл-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


369. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от Кир (?), 30-Июл-21, 16:48 
> И они при этом _не могут_ полностью заменить макросы для такой банальной вещи, как определить, под какую ОС компилируем

Ты правда настаиваешь, что

#[cfg(target_os = "macos")]
fn macos_only() {
  // ...
}

чем-то принципиально лучше чем
#ifdef __linux__
void linux_only() {
}
#endif
?
Как по мне, те же шарики, вид сбоку. Как минимум, в сишном варианте писать меньше: можно в один блок насовать много платформоспецифичного.

> Язык, в котором в try catch можно упихнуть всю функцию, примерно так: void func() try {} catch(...) {}

Да просто как жить-то теперь?

> Язык, в котором для проброса rvalue-ссылок нужно городить огород из шаблонов и std::forward? Вместе с самими rvalue/lvalue ссылками.

о, ты слышал про std::forward, молодец. а про std::move слышал?

> Да по библиотекам, unique_ptr должен был быть очень простой, очень эффективной обёрткой над обычным указателем

Он такой и есть ))

> Вместе с тем в новой редакции появились концепты с ещё одним новым, интересным синтаксисом?

Появились, и что? Полезная штука.

template<int N>
concept power_of_two = (N & (N-1)) == 0;

template<int N = 256>
auto fft(/*...*/) requires power_of_two<N> {
    cout << "Doing fast Fourier transform by " << N << " samples." << endl;
    //...
}

проделай такое на ржавом, пример в студию.

Ответить | Правка | К родителю #121 | Наверх | Cообщить модератору

562. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от Аноним (571), 01-Авг-21, 08:36 
Зря спорите, по хитровыкрученным конструкциям оба хороши.
Ответить | Правка | Наверх | Cообщить модератору

628. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним зеленый (?), 02-Авг-21, 13:44 
>проделай на расте

Я не тот чел, но вот константная функция которая вычисляется во время компиляции.

const fn power_of_two(n: u32) -> u32 {
    if n & (n-1) != 0 { panic!("oops"); }
    return n;
}

Ответить | Правка | К родителю #369 | Наверх | Cообщить модератору

655. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Кир (?), 04-Авг-21, 00:22 
Нет, мне не нужно, чтобы функция вычислялась в компайл-тайме, мне нужно, чтобы компилятор проверил, что шаблон параметризуется не абы каким целым N, а степенью двойки. А работать функция должна в рантайме, выполняя N-точечное БПФ на данных, скажем, читаемых из файла.
Ответить | Правка | Наверх | Cообщить модератору

661. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним зеленый (?), 05-Авг-21, 20:42 
Пока не запилили в языке, вот таким макросом можно:

macro_rules! const_assert {
    ($x:expr $(,)?) => {
        const _: [(); 0 - !{ const ASSERT: bool = $x; ASSERT } as usize] = [];
    };
}

Это ассерт статических значений - стадии компиляции. (Из крейта static_assertions)
Ответить | Правка | Наверх | Cообщить модератору

662. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Кир (?), 05-Авг-21, 23:33 
Мои глаза.... Ты должен мне глаза!
Ответить | Правка | Наверх | Cообщить модератору

666. "Выпуск языка программирования Rust 1.54"  +1 +/
Сообщение от Ф1 (?), 06-Авг-21, 13:58 
> Мои глаза.... Ты должен мне глаза!

Как художник художнику, у нас C++ программистов в этих глазах такое бревно, что должно быть стыдно такое про раст писать.

Ответить | Правка | Наверх | Cообщить модератору

667. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от n00by (ok), 07-Авг-21, 11:17 
Чем-то отличается от устаревшего?

#define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(COND)?1:-1]

Ответить | Правка | Наверх | Cообщить модератору

668. "Выпуск языка программирования Rust 1.54"  –1 +/
Сообщение от Кир (?), 07-Авг-21, 14:45 
Серьезно? Смотри, static_assert в C++:

template<int N = 256>
auto fft(/*...*/) {
    static_assert((N & (N-1)) == 0, "Assert message");
    cout << "Doing fast Fourier transform by " << N << " samples." << endl;
    // ...
}

Ответить | Правка | К родителю #666 | Наверх | Cообщить модератору

669. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Аноним (-), 07-Авг-21, 17:49 
> Серьезно? Смотри, static_assert в C++:
>
template<int N = 256> 
> auto fft(/*...*/) {
>     static_assert((N & (N-1)) == 0, "Assert message");


"Серьезно? Смотри, жопа!"
Он привел _реализацию_ static_assert на мкаросах (а не вызов
const_assert!(std::mem::size_of::<String>() == 24);)

ты - просто вызов (реализованной где-то в недрах компилятора).

Ответить | Правка | Наверх | Cообщить модератору

670. "Выпуск языка программирования Rust 1.54"  +/
Сообщение от Кир (?), 09-Авг-21, 02:30 
Ты не поверишь, какой магии можно накрутить в C++, но разве этим стоит хвастаться? По-моему, реализованный в компиляторе static_assert в миллион раз лучше всяких коловерчений на расте, не говоря уж про концепты. Именно эту мысль и хотелось подчеркнуть )
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру