Здравствуйте, Gaperton, Вы писали: G>-spec get_point() -> { X::integer(), Y::integer() } G>get_point() -> ...
G>от
G>get_point() -> %% { X::integer(), Y::integer() } — да что угодно тут писать можно, можно сверху или снизу G>...
G>отличается мало. Данный пример завязан на синтаксис Эрланга, но это неважно.
Я имею в виду — отличаются в плане возможности автоподсказки, а не контроля типов. Пример на С-подобном псевдокоде, при "хорошем синтаксисе" выглядел бы как-то так:
( int X, int Y ) get_point() { ... }
Вместо
void get_point( int & o_X, int & o_Y ) { ... }
Лучше, не так ли? И не ломает традицию синтаксиса С — возвращаемый тупл должен по возможности выглядеть похоже на аргументы функции, чтобы быть естественным продолжением языка, а не выглядеть уродливо. Сохраняя традицию С, имена X и Y должны быть доступны внутри определения функции, что, кстати, было бы офигенно удобно. Я бы сделал как-то так, добавляя туплы в С-подобный язык. Ну, разрешил бы еще писать просто return в таких случаях, вероятно, а также return с явным туплом. Разумеется, тупл сделал бы l-value.