Size: a a a

Rust — русскоговорящее сообществo

2020 October 14

Э

Эрик in Rust — русскоговорящее сообществo
Сколько проходов по коду надо, чтобы найти все такие проблемы?
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
polunin.ai
teloxide уже на расте написан, ничего тут не поделаешь🤷‍♀
Лол, в телоксиде будет sfinae
источник

s🍞

sel 🍞 in Rust — русскоговорящее сообществo
Эрик
Сколько проходов по коду надо, чтобы найти все такие проблемы?
Но для проверки нижнего необходимо проверять верхний? Это можно рекурсувно решить
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Andrey Vlasov
Лол, в телоксиде будет sfinae
Ну в teloc а не в телоксиде
источник

Э

Эрик in Rust — русскоговорящее сообществo
sel 🍞
Но для проверки нижнего необходимо проверять верхний? Это можно рекурсувно решить
Собственно, мой пример отвратительный, но что я хочу сказать: удаление sfinae блока кода может сломать компиляцию других sfinae блоков.
источник

s🍞

sel 🍞 in Rust — русскоговорящее сообществo
Ну а как еще?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
Сколько проходов по коду надо, чтобы найти все такие проблемы?
Для моего кейса достаточно один раз пройтись🤷‍♀ (там блоки кода параллельные а не последовательные)
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
polunin.ai
Для моего кейса достаточно один раз пройтись🤷‍♀ (там блоки кода параллельные а не последовательные)
Ascended P0lunin
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Вообще это для проц макросов. Хочу имплементировать трейт для своего типа если входящий в макрос тип Clone. Но видимо не судьба🤷‍♀
источник

Э

Эрик in Rust — русскоговорящее сообществo
polunin.ai
Для моего кейса достаточно один раз пройтись🤷‍♀ (там блоки кода параллельные а не последовательные)
Это частный случай. Для частного случая ты и руками можешь зафигачить на одних ошибках компилятора, просто сделав
//#sfinae

//#

line-based комментные блоки и удаляя лайны между этими блоками, если внутри блока компилятор показывает ошибку компиляции. Тут никакого рокет-сайнса не надо. Но глобально удобного sfinae фиг добьёшься.
источник

Э

Эрик in Rust — русскоговорящее сообществo
polunin.ai
Вообще это для проц макросов. Хочу имплементировать трейт для своего типа если входящий в макрос тип Clone. Но видимо не судьба🤷‍♀
А, нет, это не тот частный случай, тебе надо компиляторские ошибки ловить в макросе, а там их только кидать можно вроде бы.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
А, нет, это не тот частный случай, тебе надо компиляторские ошибки ловить в макросе, а там их только кидать можно вроде бы.
Я бы отдавал условный
#[sfinae]
impl Trait for Type {
  fn foo(&self) {
     self.val1.clone()
  }
}

И трейт бы не имплементировался в случае ошибки
источник

Э

Эрик in Rust — русскоговорящее сообществo
Компиляция идёт после проц макросов, нет?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
Компиляция идёт после проц макросов, нет?
да.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну короче, это должно быть в компиляторе, либо в обёртке, компилирующей до компилятора.
источник

Э

Эрик in Rust — русскоговорящее сообществo
По-другому sfinae в макрос ты не засунешь.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да и не нужен он.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если трейт не имплементируется, то это ошибка.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
Если трейт не имплементируется, то это ошибка.
мне плевать имплементируется он или нет) пользователю тоже. это нужно для работы различных проц-макросов между собой.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А то будет у тебя

struct X;

#[sfinae]
impl Default for X {} // <- error originates here

fn main() {
X::default(); // <- but shows here
}
источник