Berkus
в частности если у тебя есть ссылка на анонимный тип
red75prime
А что тогда в ограничениях пишут? fn foo<T: 'a, 'a>(&'a T){}
Vladimir
red75prime запутывает. Нет такого понятия как "время жизни типа" же.
у типа могут быть лафтайм параметры, это не время жизни?
Vladimir
чет я окончательно перестал понимать
короче всё что без лайфтайма - статик
Vladimir
короче всё что без лайфтайма - статик
смирись, это доказано богами, до нас
Vladimir
конкретный инстанс будет иметь конкретный тип
Cuno
и?
В общем не важно. Формулировка "время жизни типа" не верна, это время жизни объекта этого типа.
red75prime
Дженерики инстанциируются
Cuno
а точнее его заимствований
Alexander
у типа могут быть лафтайм параметры, это не время жизни?
Время жизни любого типа - в compile time. Время жизни может быть только у значений некоторого типа и у ссылок на значения некоторых типов.
red75prime
Типы в расте они все в compile-time.
Vladimir
В общем не важно. Формулировка "время жизни типа" не верна, это время жизни объекта этого типа.
ну это философия какая-то. Время жизни типа - означает что все инстансы заданного типа будут иметь заданный лайфтайм, по аналогии с типами. Все инстансы заданного типа, будут иметь заданный тип. То что лайфтайм не существует за пределами компайлтайма поидее погоды не делает для семантики, и не сильно отличает его от части сигнатуры типа
Vladimir
Типы в расте они все в compile-time.
Это еще что значит, после компиляции у меня условный u32 при распечатке напишет хелоуворд?
red75prime
Это еще что значит, после компиляции у меня условный u32 при распечатке напишет хелоуворд?
Это значит, что будет произведён вызов функции по такому-то адресу.
Vladimir
значит что рефлексии нет и в маш коде типов нет
что такое типы? Не будет строгой типизации типизации, а сами типы остаются. Если u32 ведет себя как u32, то значит он u32?
Αλεχ
все что без лайтайма - скоуп
Αλεχ
создали переменную - время жизни 'a равное этому скоупу
red75prime
все что без лайтайма - скоуп
Переменная типа u32 может существовать в любом скопе. Переменная типа &'a u32 (для конкретного 'a) не может существовать за пределами 'a.
Vladimir
это бред
я те про типы, а не инстансы типов
red75prime
так что имеет смысл говорить и про время жизни типа
պլհկ
https://play.rust-lang.org/?gist=d24c84a4af640d620004add8b8927e70&version=stable&mode=debug&edition=2015
Vladimir
я те про типы, а не инстансы типов
Хотя ладно, на инстансы это тоже распространяется
Vladimir
создали переменную - время жизни 'a равное этому скоупу
лайфтайм появляется не в момент инстанса типа, а в момент его заимствования
Vladimir
let x = Bar(); // 'static let y = &x;// bind x to 'a, take reflet ref y = Bar();// bind Bar() to 'a, take ref
red75prime
{ // lifetime 'a let x = foo(); // x живёт в течение 'a { // lifetime 'b let y = &x; // y живёт в течение 'b и имеет тип &'a T } }
Cuno
Переменная типа u32 может существовать в любом скопе. Переменная типа &'a u32 (для конкретного 'a) не может существовать за пределами 'a.
В таком контексте тип == объект, потому что лишь у одного объекта этот конкретный лайфтайм 'a.
Vladimir
պլհկ
{ // lifetime 'a let x = foo(); // x живёт в течение 'a { // lifetime 'b let y = &x; // y живёт в течение 'b и имеет тип &'a T } }
{ // lifetime 'a let x = foo(); // x живёт в течение 'a { // lifetime 'b let y = &x; // y живёт в течение 'b и имеет тип &'a T } x }
պլհկ
какой лайфтайм?
red75prime
да не живет он в течении 'a так как может покинуть этот скоп спокойно
если x переместить из этого скопа, то это будет уже другая переменная (точнее другое место на стеке) с другим временем жизни
red75prime
Αλεχ
я те про типы, а не инстансы типов
у типов ваще не может бать лайтфаймов, если мы не про прототипное говно а-ля жс говорим
Αλεχ
<T: 'static> по-человечески это T : Owned?
Cuno
<T: 'static> по-человечески это T : Owned?
Да, это означает что в T либо нет заимствований либо они 'static
red75prime
Да, это означает что в T либо нет заимствований либо они 'static
И нет фантомных заимствований. PhantomData<&'a()>
պլհկ
И нет фантомных заимствований. PhantomData<&'a()>
https://play.rust-lang.org/?gist=a4204bf39f9c906a02f6dc281d4952d3&version=stable&mode=debug&edition=2015
պլհկ
да
red75prime
https://play.rust-lang.org/?gist=a4204bf39f9c906a02f6dc281d4952d3&version=stable&mode=debug&edition=2015
https://play.rust-lang.org/?gist=e25e82c2be10225cbdc2a16b8b6742ec&version=stable&mode=debug&edition=2015
Vladimir
И не факт что на стеке это будет другое место
red75prime
инстанс будет тотже, какая разница какая переменная?
let x = { let y = 12; y} x и y это один и тот-же инстанс?
Vladimir
Зависит от типа, в данном случае будет копирование, т.е инстанс другой
Vladimir
Если мувается, то тотже
red75prime
Если мувается, то тотже
Значит если инстанс определить таким образом, то ссылки берутся не на инстансы.
red75prime
Потому что после перемещения y, ссылка на эту переменную будет невалидной. хотя x - это тот же инстанс.
Vladimir
шах и мат
red75prime
А какой тогда смысл вводить понятие инстанса в этом понимании?
Vladimir
потому что инстанс как и тип остаются в рантайме
Vladimir
а переменные нет
Alexander
Странно. Я бы сказал, что в рантайме есть инстансы и переменные, а типов нет.
Vladimir
Странно. Я бы сказал, что в рантайме есть инстансы и переменные, а типов нет.
Инстансы в рантайме - физические (представление в памяти). Типы - семантические (инстанц ведет себя определенным образом, и содержит физические характеристики характерные данному типу) Но переменные там откуда? Есть регистры и память.
Alexander
Инстансы в рантайме - физические (представление в памяти). Типы - семантические (инстанц ведет себя определенным образом, и содержит физические характеристики характерные данному типу) Но переменные там откуда? Есть регистры и память.
А как Вы определяете переменную? Если как кусок памяти, с которым работает программа (пишет туда значения и читает обратно), то есть. Если по-другому - может и нет, но я лично смысла в этом не вижу.
Alexander
Как и говорить, что типы присутствуют в рантайме "семантически", поскольку физически никакого представления типа как сущности в рантайме нет.
Маjко
Define семантика
Alexander
Инстанс - конечная последовательность байтов, представляющая значение определённого типа. Переменная - то, где эта последовательность записана.
Berkus
кто там интересовался про раст в гейм-индустрии? https://twitter.com/AndreaPessino/status/1021532074153394176
Anonymous
кто там интересовался про раст в гейм-индустрии? https://twitter.com/AndreaPessino/status/1021532074153394176
кто там интересовался про раст в гей (да, я оригинален)-индустрии? https://twitter.com/AndreaPessino/status/1021532074153394176
𝙽𝚒𝚌𝚔
кто там интересовался про раст в гейм-индустрии? https://twitter.com/AndreaPessino/status/1021532074153394176
Оперативно ты однако... А про EA ничего не слышно, мож они тоже чего на русте мутят? ;-)
պլհկ
Ммм, вот это новость!
Dmitriy
EA в свое время родили хороший мускульный драйвер для эрланга
Kerrigan
там одни игры для портативных платформ
Kerrigan
не рискуют пока пускать на что-то серьезное
Stas
Box<Loot>
impl LootBox for Game
Marat
Вот если они заинтересуются, тогда да
𝙽𝚒𝚌𝚔
Box<Loot>
Cell<Splinter>