Shaman
Про разницу в передаче по ссылке и по значению даже C++ знает.
А зачем она нужна, эта передача по ссылке? Массив-то всё равно не будет передаваться целиком (копия не создаётся). Так что это просто лишняя хрень какая-то, которой в C++ дофига. Я вот в C++ вообще ею не пользуюсь, потому что она мне не нужна и ничего не даёт. Фактически там это указатель без звёздочки, но это только путаницу вносит. С указателями внутри функции понятно, что ты что-то меняешь, а со ссылками ты этого не можешь сказать - толи меняешь за пределами функции что-то, толи это локальные изменения. Да и указатель можно переставить: сначала на начало массива, потом на середину, а потом в конец, а потом вообще на другой массив. А ссылку ты создал и всё. Указатель я взял, поиграл с ним, переставил на другое место - и вот он уже обозначает что-то другое.
Shaman
void foo(uint D)(const ref int[D] arr) if (D > 5)
В Erlang'е есть гарды, но они там реально необходимы, потому что он рекурсивный (многое не проверишь на ходу, как в других языках). Может, пример здесь неудачный, но тут это можно одной функцией написать. А с другой стороны, если ты привыкнешь так писать, то как ты будешь писать всё то же самое, но на других языках, где этого нет?