Loyd
Ну, он же всё равно собирает
Loyd
Что-то я пропустил
Loyd
clippy через rustup component можно ставить?
Oleg
Да
Loyd
У меня оно везде как install clippy в тревисе
Loyd
Пнятно, спасибо
Vladimir
ну эт новая фича
Vladimir
его добавили в компоненты буквально неделю назад
red75prime
Vladimir
Vladimir
или она на стеке не живет вообще?
red75prime
Скопируется только bar или ошибка компиляции будет, не помню точно. На стеке они размещаются с помощью alloca c нужным размером.
Vladimir
ну если скопируется только бар - эт странно. А если ошибка компиляции, то выходит всетакие immovable, окей спасибо
Денис
где там переменная длина?
Денис
int array[] — просто указатель на начало массива
Vladimir
доброе утро
Денис
доброе
Vladimir
https://en.wikipedia.org/wiki/Variable-length_array
Vladimir
вот тут это указатель, а в структуре, указателем будет st.arr
Денис
.....
Денис
как это всё связано?
Vladimir
У меня телега сломалась посреди предложения
Vladimir
Смотри, чтоб получить значение по указателю в структуре нужно сделать дереф
*st.pointer; в vla дереф делать не нужно, указателем является оффсет филда
Vladimir
Условно
Денис
и да, это называется — https://en.wikipedia.org/wiki/Flexible_array_member
Денис
ну лан, я на самом деле стриггерился на это — https://t.me/rustlang_ru/146125
Денис
не надо так )
Kerrigan
кстати, yew умеет на выходе давать asmjs?
Kerrigan
жуткий коварный смех на фоне
Berkus
Αλεχ
https://rust-lang-nursery.github.io/edition-guide/2018/index.html
𝙽𝚒𝚌𝚔
No more extern crate \m/
Berkus
waaaaa.... cool
𝙽𝚒𝚌𝚔
fn r#match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
достаточно гм... новаторский синтаксис. А бэктики ` где-нибудь в расте используются?
Berkus
mod.rs is no longer needed when placing submodules in a subdirectory.
ПРЕКРАСНО
𝙽𝚒𝚌𝚔
в модулях вообще всё прекрасно, а вот в лайфтаймах насыпали магического сахара, так что ну... надо смотреть.
Berkus
https://github.com/rust-lang/rust/issues/44660#issuecomment-405982193
kitsu
kitsu
а в чем фишка dyn? чот не понял
Berkus
в том что видно что это трейт объект
kitsu
а, ясно
Berkus
fn returns_closure() -> impl Fn(i32) -> i32 {
|x| x + 1
}
мням, стрелочки начали напоминать хаскель)
Stanislav
kitsu
или питон
да много таких яп
Alexander
Да надо было сразу хаскельный синтаксис для объявления функций брать, вместе со встроенным паттерн-матчингом, чего уж там... 😂
Berkus
Антон
𝙽𝚒𝚌𝚔
просто раст дезигнеры уже видели как прикольно в хаскеле, и они решили попробовать альтернативный вариант, чтобы было ещё прикольнее 😊
Антон
И сборщик мусора, если уж на то пошло
𝙽𝚒𝚌𝚔
здесь ни слова о сборщике нет. Только о словах, которые мы говорим компилятору про тип returns_closure
Anonymous
Alexander
𝙽𝚒𝚌𝚔
Αλεχ
Αλεχ
насколько я помню)
Αλεχ
юзать невозможно
𝙽𝚒𝚌𝚔
юзать невозможно
ты не прав, всё что могу сказать. Достаточно интуитивно и прямолинейно, и предсказуемо работает
𝙽𝚒𝚌𝚔
Нужно только учитывать monomorphism restriction
𝙽𝚒𝚌𝚔
в отдельных случаях
Антон
юзать невозможно
Эм, в чём это выражается? По моему опыту — разве что только в порой чрезмерно обобщённых ошибках типов
Αλεχ
"скажи спасибо что ты пишешь не на языке с фуллинеренсом по хиндли-милнеру, где при изменении одного типа надо делать унификацию для половины сорцев" ©
𝙽𝚒𝚌𝚔
чё?
𝙽𝚒𝚌𝚔
сложная мысль, я не осилил
𝙽𝚒𝚌𝚔
а понял. Ну неправда это, ты явно ограничиваешь вывод сигнатурой функции, и выводится всё барахлишко для локальных определений и это прекрасно.
Αλεχ
собсна, я с друганом когда обсуждал, он мне родил такой рагумент в процессе разговора
Αλεχ
алгоритм устроен так, что место ошибки определить невозможно
хм строит систему из пицотыщ уравнений и потом начинает ее решать унификацией
то есть он берет какоето уравнение, подставляет туда абстрактный аргумент, по нему подставляет в другое у-е и т.д. - в каком-то у-е на аругмент накладывается ограничение, аргумент становится более конкретным
если где-то ошибка - то В НЕКОТОРОМ месте в графе возникнет противоречие - будет наложено ограничение, которому аргумент уже не может удовлетворить (из-за другого ограничения, которое было наложено раньше, например сперва сказали, что должна быть строка, а потом - что число, при этом неизвестно где именно ошибка - там где фиксирована строка, или там где фиксировано число, и в зависимости от хода реализации алгоритма он выведет ошибку или в том месте или в другом)
и ты бай дезигн не можешь указать, в какой точке графа ошибка - в какой-то
в любой
ты можешь только сказать, что "вот в этом месте мой вывод обломался", при чем для одного и того же кода то место, в котором он обломается, зависит от деталей реализации алгоритма, и при малейших вариациях кода - оно может прыгать через десятки файлов, сквозь тыщи строк кода
хачкелисты решают эту проблему например так, что считают отсутствие типов у топлевел ф-й кодесмеллом - если типы конкретные для ф-и указаны, то граф фиксируется на границе ф-и и значит ошибка точно внутри, алгоритм гарантированно обломается при пересечении границы ф-и (если ошибка в ней)
при это офк твоя ошибка может быть где-то в середине ф-и, а проблему тебе покажет в том, что возвращаемое значение не соответствует (например)
но это все же не выходит уже за пределы юзабельности
кроме того:
1. писать все без деклараций тебе таки никто не мешает
2. полиморфные типы, особенно когда полиморфные аргументы сложные, когда их много, когда они везде (код ведь максимально абстрактный пишется), когда они хайкаенд и т.д. - если ты указал полиморфный тип для ф-и, то полиморфный тип зафиксирован, а вот сам аргумент типа будет так же уплывать и давать ошибку хер знает где
в итоге:
1. фуллинференс надо к херам ограничивать во избежание, если ты видишь в языке фуллинференс без ограничений, в том числе для топ-левел деклараций - авторы поехавшие пидарасы-теоретики, гноби их, унижай, пробивай с вертухи в солнышко
2. язык должен стимулировать на использование более конкретных типов, фиксации конкретных (и с точки зрения языка - семантчиески простых) интерфейсов и т.д.
анальная акробатика на типах должна быть СЛОЖНОЙ И НЕУДОБНОЙ в реализации, для девелопера, но ПРОСТОЙ И УДОБНОЙ для пользователя
----------
надо вообще понимать, что хм - это чисто теоретическая штука
типа для SystemF фуллинференс разрешим, ну и хм - просто конструктивное доказательство этого математического факта
никому не надо и незачем применять это дело в практических реализациях (но можно офк использовать идеи как базу для своих велосипедов, тем более что в любом случае ты даже в продакш-реди SystemF языке не сможешь использовать _чистый_ хм)
𝙽𝚒𝚌𝚔
как бы под кат убрать :-P
Αλεχ
так норм
𝙽𝚒𝚌𝚔
> 2. язык должен стимулировать на использование более конкретных типов, фиксации конкретных (и с точки зрения языка - семантчиески простых) интерфейсов и т.д.
вот вообще категорически не согласен. Если есть возможность бесплатно или почти бесплатно обобщить, то нужно это делать. Если у тебя есть функция, работающая на Vec и не использующая что это именно вектор (непрерывный кусок памяти порезанный на равные кусочки), стоит обобщить хотя бы до слайса. Или итератора.
Чем больше завязок на конкретные типы данных, тем труднее реюзать код.
Leonid 🦇
Код надо писать так чтобы его можно выкинуть и любая обезьяна могла переписать
Leonid 🦇
Leonid 🦇
Вот почему обезьяны с го получают больше чем даже явисты
𝙽𝚒𝚌𝚔
Маjко
Вопрос разряда "для этого должен быть крейт"
Есть пачка тестов, инпут и аутпут объявлен в Json файлах, под каждую категорию тестов по файлу, внутри пачка тестов.
Хочется чтобы cargo test отдельные тесты показывал как отдельные тесты
Чем можно в рантайме пускать тесты чтобы cargo test их видел как отдельные (в альтернативу директиве #[test])
Berkus
макрос? пожрать файл в компайл-тайме и сгенерировать кучу #[test] методов