Похоже, что в большинстве основных языков программирования возврат нескольких значений из функции является крайне неудобным.
Типичные решения заключаются в том, чтобы сделать либо struct, либо простой старый класс, и вернуть это, или передать хотя бы некоторые из параметров по ссылке или указателю их возвращения.
Использование ссылок/указателей довольно неудобно, потому что оно зависит от побочных эффектов и означает, что у вас есть еще один параметр для передачи.
Решение class/struct также является IMHO довольно неудобным, потому что в итоге вы получаете миллион маленьких классов/структур, которые используются только для возврата значений из функций, создания ненужного беспорядка и многословия.
Кроме того, много раз есть одно возвращаемое значение, которое всегда необходимо, а остальные используются только вызывающим в определенных обстоятельствах. Ни одно из этих решений не позволяет вызывающему пользователю игнорировать ненужные типы возврата.
Один язык, о котором я знаю, это элегантное управление множеством возвращаемых значений - это Python. Для тех из вас, кто не знаком, он использует распаковку:
a, b = foo(c) # a and b are regular variables.
myTuple = foo(c) # myTuple is a tuple of (a, b)
Есть ли у кого-нибудь другие хорошие решения этой проблемы? Приветствуются обе идиомы, которые работают на существующих основных языках, помимо Python и решений на уровне языка, которые вы видели на не-основных языках.