The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.60"
Отправлено Аноним, 10-Апр-22 21:44 
> А, так вы вообще не понимаете и не разбираетесь о чём пишете.
> comptime используется гораздо шире, чем вычисление констант. Вы вообще не о том.  
> вычисление констант

"Свои недостатки мы очень любим приписывать другим"(с)

> Сравнивать надо с этим убожеством в виде макросов https://doc.rust-lang.org/src/std/macros.rs.html#96-101.
> Что-то на нормальный Rust совсем не похоже.

Опять что-то придумал и оспорил. Молодец, так держать!

> Вот это сделать на Rust слабо?
> https://github.com/ziglang/zig/blob/master/lib/std/comptime_...

Надул щечки, будто сам лично писал.
Погоди, шнурки поглажу ...


#![allow(unused)]
#![feature(const_for)]
#![feature(const_fn_trait_bound)]
#![feature(const_mut_refs)]


struct KV<'a,T> {key:&'a str,val:T}
struct MyMap<'a,T> {kvs:&'a [KV<'a,T>]}

const fn get<T:Copy>(key:&'static str, map:MyMap<T>) -> Option<T> {
  
   for kv in map.kvs.into_iter() {
     if (kv.key == key) {return Some(kv.val)}
   }
   return None;
}


fn main() {
const a:KV<i32> = KV {key: "hello", val: 1};
const b:KV<i32> = KV {key: "foo", val: 2};
const c:KV<i32> = KV {key: "bar", val:100500};
const map:MyMap<i32> = MyMap{kvs: &[a,b,c]};
println!("foo = {}, bar = {}", get("foo",map).unwrap(), get("bar",map).unwrap_or(42));
}


Да, оно проверяет все _полностью_ в компайлтайме.

% rustc -O -Zunleash-the-miri-inside-of-you=yes const.rs
% ./const
foo = 2, bar = 100500

_ZN5const4main17hf11e025cf5259379E:
        .cfi_startproc
        sub     rsp, 88
        .cfi_def_cfa_offset 96
        mov     dword ptr [rsp], 2
        mov     dword ptr [rsp + 4], 100500
        mov     rax, rsp
        mov     qword ptr [rsp + 8], rax
        mov     rax, qword ptr [rip + _ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17h3319aa4b4b98306eE@GOTPCREL]
        mov     qword ptr [rsp + 16], rax
        lea     rcx, [rsp + 4]
        mov     qword ptr [rsp + 24], rcx
        mov     qword ptr [rsp + 32], rax
        lea     rax, [rip + .L__unnamed_1]
        mov     qword ptr [rsp + 40], rax
        mov     qword ptr [rsp + 48], 3
        mov     qword ptr [rsp + 56], 0
        lea     rax, [rsp + 8]
        mov     qword ptr [rsp + 72], rax
        mov     qword ptr [rsp + 80], 2
        lea     rdi, [rsp + 40]
        call    qword ptr [rip + _ZN3std2io5stdio6_print17h07b90b286b5e6a91E@GOTPCREL]
        add     rsp, 88
        .cfi_def_cfa_offset 8
        ret


 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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