Re[15]: Что такое полиморфизм?
От: m e  
Дата: 09.02.12 17:14
Оценка:
S>Один код. Как и для std::vector, который тоже является образцом параметрического полиморфизма.

немного не так

на плюсах вообще нет чистого параметрического полиморфизма, а есть его эмуляция различной степени качественности

gaperton когда писал свой знаменитый пост http://rsdn.ru/forum/philosophy/2853873.1.aspx
Автор: Gaperton
Дата: 26.02.08
немного упростил ситуацию

в частности, вектор из битов немного вываливается из стройной картины параметрического полиморфизма
Re[16]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 17:18
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Меня интересует, как именно ты применил теорию категорий, что конкретно из нее. Я просто подозреваю что ты применил не теорию категорий, а умное сочетание слов.


DG>есть множество типов они связаны стрелкой is.


Что то мне подсказывает, что is не годится в качестве стрелки.
Re[16]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 17:19
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Сходи так же по ссылке на generic programming, увидишь там List<T>.


DG>кроме знания теории необходимо ее еще уметь применять к практике.

как ты?

DG>в теории List<T> и std::vector<T> может быть и имеют один код, но в жестокой практике: List<T> в .net-е генерит разный код, а уж std::vector в C++ тем более.

уже ответил.
Re[17]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 17:19
Оценка:
DM>Так речь же по идее должна идти об исходном коде, а не о том, что генерит компилятор. Он может хоть манную кашу генерить, на язык и систему типов это не влияет.

что такое исходный код? и чем он отличается от не исходного?

вот это исходный код? он один или его много?
//parametric polymorphism
TItem[] Concat<TCollection, T>(T[] items1, TCollection items2) where TCollection:IEnumerable<T>
{
  var result = new List<T>();
  compile-if (TCollection is ICollection<T>)
  {
     result.Capacity = items1.Length + items2.Count;
  }
  else
  {
    result.Capacity = items1.Length;
  }
  result.AddRange(items1);
  compile-if (TCollection is Array<T>)
  {
    result.AddRange(items2);
  }
  else
  {
    foreach (var item in items2)
      result.Add(item);
  }
  return result.ToArray();
}


DM> на язык и систему типов это не влияет.


на какой язык? уровня компиляции? байт кода? маш кода? процессора?
опять же не влияет на систему типов уровня компиляции, виртуальной машины, процессора?
Re[16]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 17:21
Оценка:
Здравствуйте, m e, Вы писали:

S>>Один код. Как и для std::vector, который тоже является образцом параметрического полиморфизма.


ME>немного не так


ME>на плюсах вообще нет чистого параметрического полиморфизма, а есть его эмуляция различной степени качественности


ME>gaperton когда писал свой знаменитый пост http://rsdn.ru/forum/philosophy/2853873.1.aspx
Автор: Gaperton
Дата: 26.02.08
немного упростил ситуацию


ME>в частности, вектор из битов немного вываливается из стройной картины параметрического полиморфизма

да, согласен. Но мог бы и не вываливаться. Если std::vector<bool> вываливается через специализацию, то List<T> не вываливается совсем.
Re[17]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 17:46
Оценка:
S>Но контейнер написан без учета специальных знаний о типах.

такое деление можно ввести. оно мало применимо на практике, но поиграться с ним можно.
тогда всякий полиморфизм можно разбить на две составляющие: parametric и ad-hoc.
функцию Concat можно представить как:
//parametric polymorphism
TItem[] Concat<TCollection, T>(T[] items1, TCollection items2) where TCollection:IEnumerable<T>
{
  var result = new List<T>();
  result.Capacity = items1.Length + Capacity(items2);
  result.AddRange(items1);
  AddRange(result, items2);
  return result.ToArray();
}
//ad-hoc polymorphism
int Capacity<T>(IEnumerable<T> items)
{
  return 0;
}
int Capacity(ICollection<T> items)
{
  return items.Count;
}
//ad-hoc polymorphism
void AddRange<T>(List<T> result, T[] items)
{
  result.AddRange(items);
}
void AddRange<T>(List<T> result, IEnumerable<T> items)
{
  foreach (var item in items)
    result.Add(item);
}
Re[17]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 17:50
Оценка:
DG>>есть множество типов они связаны стрелкой is.

S>Что то мне подсказывает, что is не годится в качестве стрелки.


в честь чего это?
Re[18]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 17:55
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Но контейнер написан без учета специальных знаний о типах.


DG>такое деление можно ввести. оно мало применимо на практике, но поиграться с ним можно.

Ну-ну, 55 лет его очень мало применяли. Чаще наверное применяли твое деление Дашь ссылку на пример применения?

DG>тогда всякий полиморфизм можно разбить на две составляющие: parametric и ad-hoc.

Что значит всякий?

DG>функцию Concat можно представить как:

DG>
DG>//parametric polymorphism
DG>TItem[] Concat<TCollection, T>(T[] items1, TCollection items2) where TCollection:IEnumerable<T>
DG>{
DG>  var result = new List<T>();
DG>  result.Capacity = items1.Length + Capacity(items2);
DG>  result.AddRange(items1);
DG>  AddRange(result, items2);
DG>  return result.ToArray();
DG>}
DG>//ad-hoc polymorphism
DG>int Capacity<T>(IEnumerable<T> items)
DG>int Capacity(ICollection<T> items)
DG>//ad-hoc polymorphism
DG>void AddRange<T>(List<T> result, T[] items)
DG>void AddRange<T>(List<T> result, IEnumerable<T> items)
DG>

можно. Я даже припоминаю язык, где такое используется на регулярной основе (C++). Только из этого примера никак не следует что

Ad-hoc полиморфизм и subtype-полиморфизм являются частным случаем Parametric полиморфизма.

Re[18]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 17:55
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>есть множество типов они связаны стрелкой is.


S>>Что то мне подсказывает, что is не годится в качестве стрелки.


DG>в честь чего это?

В честь определения категории
Re[17]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 18:11
Оценка:
DM>Так речь же по идее должна идти об исходном коде, а не о том, что генерит компилятор.

если нас неинтересует генерация кода, то пропадает subtype-полиморфизм превращаясь в параметрический полиморфизм.

и запись
class B:A{..}

преобразует все функции вида:
.. F(A a, ...)
{
  ..
}

в
.. F<T>(T a, ..) where T: A or B
{
 ..
}
Re[19]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 18:18
Оценка:
DG>>в честь чего это?
S>В честь определения категории

вот и расскажи, почему множество типов не является малой категорией, а is не является стрелкой, хотя обоим аксиомам: ассоциативности и тождественности она удовлетворяет.
Re[20]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 18:53
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>вот и расскажи, почему множество типов не является малой категорией, а is не является стрелкой, хотя обоим аксиомам: ассоциативности и тождественности она удовлетворяет.


Вообще-то я с теорией категорий не знаком. Но при поверхностном ознакомлении с базовыми концепциями вижу противоречие в выступлении is в качестве стрелки с unique-Type аксиомой, которая гласит
f: A -> B and f: A' -> B' => A = A' and B = B' // A Gentle Introduction to Category Theory

или

Each morphism f has a unique source object a and target object b where a and b are in ob(C).

отсюда
Re[21]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 19:03
Оценка:
S>Вообще-то я с теорией категорий не знаком. Но при поверхностном ознакомлении с базовыми концепциями вижу противоречие в выступлении is в качестве стрелки с unique-Type аксиомой, которая гласит

так очевидно, что в качестве конкретной стрелки из A в B берется не общий is, а каждый конкретный вариант A is B
Re[22]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 19:17
Оценка:
Здравствуйте, DarkGray, Вы писали:


S>>Вообще-то я с теорией категорий не знаком. Но при поверхностном ознакомлении с базовыми концепциями вижу противоречие в выступлении is в качестве стрелки с unique-Type аксиомой, которая гласит


DG>так очевидно, что в качестве конкретной стрелки из A в B берется не общий is, а каждый конкретный вариант A is B

Это не то что неочевидно, так еще я не понимаю, что это такое, конкретный вариант A is B.

Может ты о конкретно subtyping-е, так is это совершенно другое. К чему было is поминать?
Re[23]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 19:47
Оценка:
S>Это не то что неочевидно, так еще я не понимаю, что это такое, конкретный вариант A is B.

A -> B есть A is B, или другими словами, из A в B есть стрелка, когда A is B == true
каждая такая стрелка (он же морфизм) имеет уникальные A и B.
Re[19]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 19:50
Оценка:
S>

S>Ad-hoc полиморфизм и subtype-полиморфизм являются частным случаем Parametric полиморфизма.


если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет.
вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.
Re[24]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 21:08
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Это не то что неочевидно, так еще я не понимаю, что это такое, конкретный вариант A is B.


DG>A -> B есть A is B, или другими словами, из A в B есть стрелка, когда A is B == true

DG>каждая такая стрелка (он же морфизм) имеет уникальные A и B.
У тебя другие слова обозначают совсем не то же самое, что A is B. Т.к. A is B это бинарное отношение.
Re[20]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 21:14
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>

S>>Ad-hoc полиморфизм и subtype-полиморфизм являются частным случаем Parametric полиморфизма.


DG>если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет.

DG>вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.

Причем тут вычисления уровня компиляции? Код ведь может и интерпретироваться в общем случае.
Речь идет о том, является ли твой код type-specific, или нет. Твой является, т.к. специальные типы обрабатывает специальным образом. Иными словами — ad-hoc.
Re[21]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 09.02.12 21:39
Оценка:
DG>>если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет.
DG>>вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.

S>Причем тут вычисления уровня компиляции? Код ведь может и интерпретироваться в общем случае.


значит сначала будет интерпретироваться код над типами, а потом код над данными. в чем проблема?

S>Речь идет о том, является ли твой код type-specific, или нет.


необходимо обосновать уместность такого деления. а иначе это тоже самое, что целые числа поделить на числа меньше 3 и равных или больше 3, или там кратным 7 или не кратным, и т.д. это всё, конечно, верно и интересно, но практической ценности не представляет.
или другими словами: необходимо показать, что эти два класса обладают разными свойствами, и это можно использовать при решении тех или иных задач.
Re[22]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 09.02.12 21:45
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Речь идет о том, является ли твой код type-specific, или нет.


DG>необходимо обосновать уместность такого деления. а иначе это тоже самое, что целые числа поделить на числа меньше 3 и равных или больше 3, или там кратным 7 или не кратным, и т.д. это всё, конечно, верно и интересно, но практической ценности не представляет.

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

Твое деление отличается от общепринятого, ты и доказывай его полезность. А я тебе растолковываю то что написано в википедии.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.