LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

Если не хочешь виртуализации то нельзя скрывать реализацию, и функции которые работают с трейтами. Это так что в Rust, что в С++.

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. Это девиртуализация невозможна без LTO.

Тебе надо поскорей принять идею что трейты = абстрактные классы, тогда станут понятны их свойства и ограничения.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

Если не хочешь виртуализации то нельзя скрывать реализацию, и функции которые работают с трейтами.

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. Это девиртуализация невозможна без LTO.

Тебе надо поскорей принять идею что трейты = абстрактные классы, тогда станут понятны их свойства и ограничения.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

Если не хочешь виртуализации то нельзя скрывать реализацию, и методы которые работают с трейтами.

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. Это девиртуализация невозможна без LTO.

Тебе надо поскорей принять идею что трейты = абстрактные классы, тогда станут понятны их свойства и ограничения.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. Это девиртуализация невозможна без LTO.

Тебе надо поскорей принять идею что трейты = абстрактные классы, тогда станут понятны их свойства и ограничения.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. Это девиртуализация невозможна без LTO.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой если что, там пишется вот так fn dynf(obj: &dyn Trait).

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. А девиртуализация невозможна без LTO.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print? Для динамики синтаксис другой.

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. А девиртуализация невозможна без LTO.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print?

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. А девиртуализация невозможна без LTO.

Исправление MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print?

сама концепция это не отрицает.

Абстрактные классы вполне отдельно можно реализовать. А девиртуализация невозможна.

Исходная версия MOPKOBKA, :

это честно по отношению к си++. или тебе придется писать header-only код и покрыть себя позором.

А как там хедеры в Rust поживают?

а в расте нельзя обьявить что реализуешь трейт, а саму реализацию спрятать?

С другой стороны надо заходить, вот есть у тебя функция fn f<T: Trait>(obj: T), как она будет использовать твой Trait? Откуда она знает что нужно вызвать int::print?