LINUX.ORG.RU

Совместить утиную типизацию с динамическими типами

 ,


2

3

Вынашиваю идеи для своего великого езыка, который может и никогда не родится, однако, мечтать иногда не вредно:)

Вот такая мысль. у нас есть утиная типизация, но она пользуется обычно в такой вот форме fu(someType), а не в такой вот someType.fu. То есть, если фанкол, утиная типизация, а если, посылка сообщения — обычно ошибка — объект не отвечает на сообщение, или что-то в этом роде, как вариант — форвардинг.

В JS, например, мы можем вызвать someObject.someMethod.call(anotherObject), это вполне работает.

Это наводит на такую мысль. А зачем вообще привязывать методы к типам/классам/объектам?

Первое — это полиморфизм, тут все ясно.

Если это отбросить, то что еще?

На первый взгляд, это чтобы обнаруживать ошибки как можно быстрей. Но мы все равно, в данном случае их ловим не в компилтайме. Тогда нет ничего страшного, если ошибка всплывет позже.

Второе соображние — производительность. Когда методы привязаны к объектам, лукапы короче.

Однако же, нет ничего такого, что является принципиальным препятствием сделать так, что объект будет обрабатывать сообщение «утиным» образом, даже в том случае, когда оно заранее не определено как его метод/свойство.

Я сейчас думаю, конечно ни о том, чтобы вообще убрать типизацию, привязки, etc. Просто размышляю, что это надо как то включить в язык как элемент семантики, думаю, как совместить это органично.

Тут возникает другой вопрос. А почему бы просто не использовать для этого обычные вызова функций. Ответ — синтаксис, прежде всего. Чтобы избежать скобочных вложенностей, они ведь а)отвратительны б)очень плохо подходят для выражения посылки сообщений.



Последнее исправление: somequest (всего исправлений: 4)
Ответ на: комментарий от lovesan

Не уверен, что это то, что мне нужно, в данном случае. В мультиметодах поведение объектов все равно предопределяется, там для каждого случая необходимо свое определение, это, тащемта, просто сахар для ветвлений, я же хочу сделать, чтобы поведение могло быть реализовано даже в том случае, если оно заранее не предопределено.

somequest
() автор топика
Ответ на: комментарий от somequest

У тебя есть наследование объектов и виртуальные мультиметоды. Ты делаешь один метод для своего базового класса вроде Object, это обобщённый метод, потом при необходимости специализируешь.

function (this: Object).myMethod() {
}
function (this: Concrete).myMethod() {
}
Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

Да, я че то затупил. Все, что определено в корневом объекте, и так будет работать как я хотел. Просто не нужно использовать глобальный объект:)

somequest
() автор топика

Прочитал по диагонали, похоже на мультиметоды или протоколы в clojure.

S-Mage ★★
()
Ответ на: комментарий от Debasher

Подключивший к ним царёк с ведром какашек.

anonymous
()
Ответ на: комментарий от Debasher

Че-то анонiмус расслабился, никак не может получить бан на очередной акк.

anonymous
()

Успокойся. Динамически типизированные языки всё равно подыхают. Новых (успешных) уже не будет; наоборот, в старые пытаются всеми возможными способами добавить статическую типизацию — TypeScript там, или Typed Scheme...

Miguel ★★★★★
()
Ответ на: комментарий от EXL

да и в рубях я слышал хотят
а уж сколько для жс подобных решений

но анонiмус естественно скажет что это всё из-за быдлакодеров которые не умеют в Ъ

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Что интересно, 1С как была, так и остается динамической, а объемы кода по моим афаик-оценкам там пишутся немалые (если не в сравнении с другими языками, то хотя бы в абсолютном выражении). По-моему, если кто-то взял жс или руби для сложной архитектуры и при этом не позаботился с умом разделить ее на конструктивные блоки, в пределах которых динамика рулит, то это его личные быдло-архитекто-проблемы и/или неверный выбор языка. Но никак не повод запиливать туда типизацию.

arturpub ★★
()
Ответ на: комментарий от Miguel

Еще бы, я бы тоже выбрал 40 часов в неделю на типчики надрачивать, а не код писать

buddhist ★★★★★
()

Увозите!

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.