Size: a a a

2020 May 02

EG

Emmanuel Goldstein in rust_offtopic
Функция хранит своё имя в эстетических целях
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Теперь мне нужно как-то избавиться от этого пиздеца.
[("def", def), ("defn", defn), ...].iter()
 .map(|(x, y)| Function { name: Cow::Borrowed(x), call : Arc::new(y))
 .collect()


Мб into_iter или там вектор вместо массива, но суть та же
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Тогда придётся дублировать имя два раза — в ключе и в значении
а зачем тебе в значении?
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
а зачем тебе в значении?
spli> (defn 'add '(a b) '(+ a b))
{function add} :: function
spli> add
{function add} :: function
источник

VS

Victor Sapiens in rust_offtopic
Ты этого чувака имел в виду? https://gist.github.com/Horusiath/6051e87fb9f3e81dc2dfed93519fb753
источник

AZ

Alex Zhukovsky in rust_offtopic
не уверен, не помню уже
источник

VS

Victor Sapiens in rust_offtopic
Там такое говно на рефлексии шо писец. Ну нафиг.
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
[("def", def), ("defn", defn), ...].iter()
 .map(|(x, y)| Function { name: Cow::Borrowed(x), call : Arc::new(y))
 .collect()


Мб into_iter или там вектор вместо массива, но суть та же
Всё равно громоздко будет
Нужно разносить по файлам и собирать общий список билтинов по кускам
источник

VS

Victor Sapiens in rust_offtopic
Для игры не годиться. У меня раз в 10 миллисекунд новый стейт игры на клиент летит
источник

p

polunin.ai in rust_offtopic
@emmanuelGoldstein кстати доступ в словарь быстрее чем в вектор и в рантайме это будет быстрее
источник

VS

Victor Sapiens in rust_offtopic
Хотя таки да, Orleans тоже не подошёл из-за тормознутости.
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
@emmanuelGoldstein кстати доступ в словарь быстрее чем в вектор и в рантайме это будет быстрее
Это превращается в словарь при добавлении в контекст
источник

EG

Emmanuel Goldstein in rust_offtopic
И ещё прежде чем идти дальше, я хочу сделать рефакторинг типа function.
Сейчас он хранит кроме имени только Arc<dyn Fn> и это проблематично тем, что потом неясно, как делать модули
источник

EG

Emmanuel Goldstein in rust_offtopic
Нужно, видимо, для user-defined функций сохранять их тело и список аргументов, чтобы создавать заново при лоаде модуля
источник

EG

Emmanuel Goldstein in rust_offtopic
А для билтин-функций сохранять тот факт, что они билтин, чтобы их потом в списке билтинов найти
источник

VS

Victor Sapiens in rust_offtopic
А не, гоню. Раз в 10 миллисекунд обновляется стейт. Раз в 30 миллисекунд отправляется на клиент чтобы канал не забивать. Да и один фиг TCP а не UDP. Можно было бы и раз в 50 отправлять
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Или ещё более тривиальный пример:
fn extend_lifetime<'a, T>(val: &'a T) -> &'static T {
   unsafe { std::mem::transmute(val) }
}

Эта функция не создаёт UB сама по себе, но на окончании лайфтайма 'a (где-то в сейф-коде) у тебя инвалидируется ссылка и сломается гарантия на валидность ссылок там, где ты об этом не подозреваешь.
Про эту функцию можно сказать, что она отключает проверку на лайфтайм (ответ на этот аргумент: да, отключает, но это ни за что не заработает, поэтому непонятно, зачем её отключать).
просто эта функция должна быть unsafe
источник

EG

Emmanuel Goldstein in rust_offtopic
Alex Zhukovsky
просто эта функция должна быть unsafe
Должна, но, как видишь, она не.
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Всё равно громоздко будет
Нужно разносить по файлам и собирать общий список билтинов по кускам
ну вон челики в сишарпе это рефлекшном делают
источник

AZ

Alex Zhukovsky in rust_offtopic
Emmanuel Goldstein
Должна, но, как видишь, она не.
она в стд и не ансейф?
источник