Size: a a a

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

2020 September 18

D

Denis in Rust — русскоговорящее сообществo
оно, правда, может и заинлайниться
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Denis
а как MIR-интерпретатор это поймёт?
Он просто не позволит случиться ужасам
источник

D

Denis in Rust — русскоговорящее сообществo
Mikail Bagishov
Он просто не позволит случиться ужасам
каким?
источник

D

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

V

V---V in Rust — русскоговорящее сообществo
Гайс, Result все функции возвращают?
источник

D

Denis in Rust — русскоговорящее сообществo
V---V
Гайс, Result все функции возвращают?
нет, только те, которые возвращают Result
источник

V

V---V in Rust — русскоговорящее сообществo
Denis
нет, только те, которые возвращают Result
Логично
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Denis
каким?
Если мы вызвали функцию, которая ожидает два аргумента, с одним, то она прочтет мусор и может натворить бед, в лучшем случае словит SIGSEGV
источник

D

Denis in Rust — русскоговорящее сообществo
Mikail Bagishov
Если мы вызвали функцию, которая ожидает два аргумента, с одним, то она прочтет мусор и может натворить бед, в лучшем случае словит SIGSEGV
эм, но мы так не будем делать, а скомпилированный код этого и так не делает гарантировано ...
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Denis
эм, но мы так не будем делать, а скомпилированный код этого и так не делает гарантировано ...
Ну допустим мы ошиблись с эвристиками, или новая версия компилятора по-другому манглит имена, или в новой версии раста добавился новый аргумент.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну вообще, когда мы занимаемся подобными хаками, многие вещи могут пойти не так.
источник

D

Denis in Rust — русскоговорящее сообществo
чё-т я подумал, что-хорошему надо просто кордамп делать и пусть дальше уже юзер в гдб что хочет изучает )
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Проблема в том, что gdb не умеет в Debug::fmt, нет?
источник

V

Vladimir in Rust — русскоговорящее сообществo
Denis
чё-т я подумал, что-хорошему надо просто кордамп делать и пусть дальше уже юзер в гдб что хочет изучает )
+
источник

IG

Igor Gulamov in Rust — русскоговорящее сообществo
Есть тип T<I:Inner> и его имплементации`T<I1>, T<I2>`

Есть f1<I1>(T<I1>) -> T<I1> и f1<I2>(T<I2>) -> T<I2>`, реализованные полностью по разному, используя внутренние особенности I1 и I2.

Есть f2<I:Inner>(T<I>)->T<I>, не зависит явно от внутренних особенностей I1 и I2.

Как можно f1 вызвать внутри f2?
источник

IG

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

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Никак, при такой постановке задачи, если внутренние особенности не выражаются трейтом Inner
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Разве что через Box<dyn Any>
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Вместо разных реализаций f1 и f2 лучше завести метод в трейте, который будет по разному реализован для разных типов, и в общем коде дергать его
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Igor Gulamov
Есть тип T<I:Inner> и его имплементации`T<I1>, T<I2>`

Есть f1<I1>(T<I1>) -> T<I1> и f1<I2>(T<I2>) -> T<I2>`, реализованные полностью по разному, используя внутренние особенности I1 и I2.

Есть f2<I:Inner>(T<I>)->T<I>, не зависит явно от внутренних особенностей I1 и I2.

Как можно f1 вызвать внутри f2?
#![feature(specialization)]

Добро пожаловать
источник