Я ничего не знаю про go, но имею небольшой опыт с rust. Ваш пример некорректен. Использовать clone() на ровном месте - моветон. Есть как минимум два способа исправить пример:
Вернуть из foo только что модифицированный a:
fn foo(mut a: Vec<&str>) -> Vec<&str> {
a.push("NIGHTMARE");
a
}
fn main1() {
let mut a = vec!["Hello", "world", "!"];
a = foo(a);
println!("{:?}", a);
}
Что поделать. Если бы начальная легенда оправдалась, то конечно статья получилась бы намного интереснее. Когда делаешь подобную работу всегда хочется найти какую-то экзотику, но, к сожалению, её тут нет (хотя может наоборот — к счастью). Так или иначе, подтверждение ожиданий — тоже результат.
Не претендую на истину в последней инстанции, но в упомянутой Вами википедии написано, что алгоритм RDRAND использует аппаратный источник энтропии для получения 256-битного значения, которое используется для инициализации ГПСЧ. Такую комбинацию из внешнего источника энтропии и криптостойкого ГПСЧ допустимо (или даже принято) понимать под ГСЧ.
Обновил статью и добавил визуализацию последовательностей на плоскости и в 3D. Результаты по Android, но на других платформах картина точно такая же — везде хаос.
Я ничего не знаю про go, но имею небольшой опыт с rust. Ваш пример некорректен. Использовать clone() на ровном месте - моветон. Есть как минимум два способа исправить пример:
Вернуть из foo только что модифицированный a:
Передать в foo ссылку на a: