LINUX.ORG.RU

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

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

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

OK, пусть задан некий интерфейс IInterface. Нужен шаблон, по заголовку которого понятно, что он гарантированно компилируется для всего, что этот интерфейс реализует.

В чем бенефит? Поставлять скомпилированные темплейты? Или вопрос во времени компиляции?

И то, и другое, и компилировать разными компиляторами, и точно знать контекст, в котором раскрывается шаблон, и много чего ещё.

Сама идея GC в том, чтобы переложить заботу о времени жизни объекта на компьютер.

Так shared_ptr и перекладывает.

Ну так ты же заговорил о том, чтобы работать с ней вручную.

Во-первых, не устарел.


В смысле первые версии были созданны очень давно? Тогда это не аргумент. Или под устареванием подразумевается что-то иное?

Нет, блин, в смысле, что тебе тут же приведено, почему shared_ptr не годится.

медленно (освобождение верхушки разлапистого дерева приводит к рекурсивному освобождению всего вообще)

А GC волшебным образом сократит это время? Или просто начнет тормозить в недетерменированный момент времени?

Во-первых, может и сократить. Во-вторых, он не остановит выполнение в произвольный, непредсказуемый момент времени (как в случае с подсчётом ссылок), а будет работать параллельно с основным выполнением.

ненадёжно (получить случайно цикл — как два байта переслать

Циклические зависимости - это уже архитектурные проблемы. Причем очень и очень серьезные.

Это у вас в плюсах они «архитектурные». А в языках с GC — ничего особенного.

Полиморфная рекурсия — тоже не?

Вот про это действительно не слышал, с удовольствием ознакомлюсь. Ссылки на русско/англоязычные ресурсы подойдут.

Да чего там читать. Ну, представь себе какой-нибудь дженерик, вроде G<T>. И функция (тоже дженерик) f, которая, будучи вызвана с типом-аргументом T (то есть, как f<T>(...)) при определённых условиях (не всегда) рекурсивно дёргает себя же, но как f<G<T>>(...).

На шаблонах ты это фиг нарисуешь. Потому что они — макросистема над убогой системой типов C++.

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

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

OK, пусть задан некий интерфейс IInterface. Нужен шаблон, по заголовку которого понятно, что он гарантированно компилируется для всего, что этот интерфейс реализует.

В чем бенефит? Поставлять скомпилированные темплейты? Или вопрос во времени компиляции?

И то, и другое, и компилировать разными компиляторами, и точно знать контекст, в котором раскрывается шаблон, и много чего ещё.

Сама идея GC в том, чтобы переложить заботу о времени жизни объекта на компьютер.

Так shared_ptr и перекладывает.

Ну так ты же заговорил о том, чтобы работать с ней вручную.

Во-первых, не устарел.

В смысле первые версии были созданны очень давно? Тогда это не аргумент. Или под устареванием подразумевается что-то иное?

Нет, блин, в смысле, что тебе тут же приведено, почему shared_ptr не годится.

медленно (освобождение верхушки разлапистого дерева приводит к рекурсивному освобождению всего вообще)

А GC волшебным образом сократит это время? Или просто начнет тормозить в недетерменированный момент времени?

Во-первых, может и сократить. Во-вторых, он не остановит выполнение в произвольный, непредсказуемый момент времени (как в случае с подсчётом ссылок), а будет работать параллельно с основным выполнением.

ненадёжно (получить случайно цикл — как два байта переслать

Циклические зависимости - это уже архитектурные проблемы. Причем очень и очень серьезные.

Это у вас в плюсах они «архитектурные». А в языках с GC — ничего особенного.

Полиморфная рекурсия — тоже не?

Вот про это действительно не слышал, с удовольствием ознакомлюсь. Ссылки на русско/англоязычные ресурсы подойдут.

Да чего там читать. Ну, представь себе какой-нибудь дженерик, вроде G<T>. И функция (тоже дженерик) f, которая, будучи вызвана с типом-аргументом T (то есть, как f<T>(...)) при определённых условиях (не всегда) рекурсивно дёргает себя же, но как f<G<T>>(...).

На шаблонах ты это фиг нарисуешь. Потому что они — макросистема над убогой системой типов C++.