Minoru 29.07.2012 11:39 micropost

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

Читаю про structural и nominal typing, возникла пара вопросов:
  • в примерах структурной типизации[1] мы определяем функцию, которой от параметра нужен лишь метод set_x. Это разве не duck typing получается?
  • правильно ли я понимаю, что nominal typing — это просто алиасы для типов (newtype в Haskell или typedef в C)?

  1. https://en.wikipedia.org/wiki/Structural...

1. jtootf 29.07.2012 11:42 galois

если у тебя один метод и огрничение на него же, то разницы не будет. если их больше, то duck typing может часть проигнорировать, structural typing — нет

2. komar 29.07.2012 11:51 komar

test

3. komarkomar /2 29.07.2012 11:53 komar

1 — структурная типизация в реальных применениях и называется duck typing. То есть, это оно и есть, почти по определению. Но есть ещё нюансы (в том числе, упомянутые @jtootf).
2 — nominal typing — это не просто алиасы! Это типизация, запрещающая использовать имя типа t1 там, где нужен тип T2, и наоборот, при условии, что имя типа t1 привязано к типу T2. Про newtype не знаю, но сишный typedef не даёт nominal typing, это просто алиас типа.
Олсо, ты пидор. Поэтому ответ @gds’а до тебя не дошел и пришлось отправлять через меня.

4. Minorujtootf /1 29.07.2012 11:58 antaeus

Я тебя не совсем понял. «Часть проигнорировать» — это забить на отсутствующие методы и упасть в рантайме?

5. jtootfMinoru /4 29.07.2012 12:00 galois

зачем упасть? если в функции нужен объект point, у которого мы используем только метод get_x, то метода get_y у него может и не быть. в случае структурной типизации мы оттайпчекаем только объект, удовлетворяющий полной структурной спецификации на объект point, т.е. любой объект, имеющий оба метода

6. Minorujtootf /5 29.07.2012 12:07 antaeus

Если функции нужен объект point — это уже не структурная типизация, т.к. мы начинаем различать объекты по именам, а не по структуре. Функция set_to_10 содержит в типе только упоминание о get_x — Википедия ошибается, называя это структурной типизацией?

7. jtootfMinoru /6 29.07.2012 12:12 galois

буквоедство — это принципиальная позиция? замени "объект point" на "объект, удовлетворяющий структурно классу point"

8. Minorukomar /3 29.07.2012 12:14 antaeus

Пока писал комментарий-ответ с вопросами, перечитал десяток раз вот это:
> Nominal typing means that two variables are type-compatible if and only if their declarations name the same type. For example, in C, two struct types with different names are never considered compatible, even if they have identical field declarations.
Теперь я всё понимаю. Ещё раз спасибо!

9. Minorujtootf /7 29.07.2012 12:15 antaeus

Нет, я просто от тебя ожидаю только строгих, безукоризненно точных формулировок. Извини.
И всё-таки, что с примером в Википедии?

10. Minorujtootf /7 29.07.2012 15:03 antaeus

Как же я не люблю, когда собеседник просто бросает разговор…

11. 4daMinoru /10 29.07.2012 17:56

напиши jtootfу в приватик, делов-то.

12. Minoru4da /11 29.07.2012 17:58 antaeus

Полагаю, если он не отвечает сюда, то у него есть на то причины — например, мои вопросы вызывают facepalm и желание убить человеков (хотя бы некоторых, конкретных). Навязываться я не собираюсь, это однозначно.

13. jtootfMinoru /10 29.07.2012 21:39 galois

оный собеседник обязан всё воскресенье просидеть у интернетов? что касается вопроса, то мне кажется, что пример с set_to_10 не удовлетворяет приведённому определению (зато удовлетворяет определению duck typing'а). то, что other methods are irrelevant не согласуется с for each feature within the second element's type

14. Minorujtootf /13 30.07.2012 07:30 antaeus

Отнюдь. Но у меня такое впечатление, что ты не впервые попросту бросаешь разговор, так до конца ничего и не объяснив.
За ответ — спасибо.

15. jtootfMinoru /14 30.07.2012 08:07 galois

с чужими впечатлениями я, увы, ничего поделать не могу

Do you really want to delete ?