> А, так вы вообще не понимаете и не разбираетесь о чём пишете.
> 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