Есть время жизни 'a оно задано для ссылок, присланных в метод. У метода есть возвращаемое значение с тем же временем жизни. Все норм, ссылки на входе живут дольше метода и отдаются на выход. Если же создать в методе значение и вернуть ссылку на него (а там время жизни 'a у возвращаемого значения, которое из ссылок на входе) то компилер не допрет, что не надо сносить ссылку в конце работы метода, а снести ее когда 'a отживет, и выдаст компилер ошибку. Кажется компилер мог бы быть и поумнее.
@mudasobwa наоборот, он это запрещает, а я бы хотел отстрелить себе ноги самостоятельно :)
@mudasobwa я ведь в сигнатуре метода явно определяю время жизни, и для случая переданных снаружи ссылок возвращаемое значение может жить сколько они живут, а для случая созданного внутри значения ссылка это же внешнее время жить не может. Хотя с чего вдруг инструмент управления есть, а второй случай запрещен.
@mudasobwa хочу жрать память!
@3draven то есть, если я внутри метода зачитал файлик размером в гиг, то этот гиг должен жить вечно (пока имя файла, переданное в метод, не отомрет)?
Интересный способ добиться OOM в последовательном коде, я думал, го придумали, чтобы суметь сделать это в параллельном коде, но так даже лучше.
Передача ссылок в методы — одна из причин, почему на расте ничего сложного толком не написать.