Вынашиваю идеи для своего великого езыка, который может и никогда не родится, однако, мечтать иногда не вредно:)
Вот такая мысль. у нас есть утиная типизация, но она пользуется обычно в такой вот форме fu(someType)
, а не в такой вот someType.fu
. То есть, если фанкол, утиная типизация, а если, посылка сообщения — обычно ошибка — объект не отвечает на сообщение, или что-то в этом роде, как вариант — форвардинг.
В JS, например, мы можем вызвать someObject.someMethod.call(anotherObject)
, это вполне работает.
Это наводит на такую мысль. А зачем вообще привязывать методы к типам/классам/объектам?
Первое — это полиморфизм, тут все ясно.
Если это отбросить, то что еще?
На первый взгляд, это чтобы обнаруживать ошибки как можно быстрей. Но мы все равно, в данном случае их ловим не в компилтайме. Тогда нет ничего страшного, если ошибка всплывет позже.
Второе соображние — производительность. Когда методы привязаны к объектам, лукапы короче.
Однако же, нет ничего такого, что является принципиальным препятствием сделать так, что объект будет обрабатывать сообщение «утиным» образом, даже в том случае, когда оно заранее не определено как его метод/свойство.
Я сейчас думаю, конечно ни о том, чтобы вообще убрать типизацию, привязки, etc. Просто размышляю, что это надо как то включить в язык как элемент семантики, думаю, как совместить это органично.
Тут возникает другой вопрос. А почему бы просто не использовать для этого обычные вызова функций. Ответ — синтаксис, прежде всего. Чтобы избежать скобочных вложенностей, они ведь а)отвратительны б)очень плохо подходят для выражения посылки сообщений.