Здравствуйте, DarkGray, Вы писали:
S>>Меня интересует, как именно ты применил теорию категорий, что конкретно из нее. Я просто подозреваю что ты применил не теорию категорий, а умное сочетание слов.
DG>есть множество типов они связаны стрелкой is.
Что то мне подсказывает, что is не годится в качестве стрелки.
Здравствуйте, DarkGray, Вы писали:
S>>Сходи так же по ссылке на generic programming, увидишь там List<T>.
DG>кроме знания теории необходимо ее еще уметь применять к практике.
как ты?
DG>в теории List<T> и std::vector<T> может быть и имеют один код, но в жестокой практике: List<T> в .net-е генерит разный код, а уж std::vector в C++ тем более.
уже ответил.
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> на язык и систему типов это не влияет.
на какой язык? уровня компиляции? байт кода? маш кода? процессора?
опять же не влияет на систему типов уровня компиляции, виртуальной машины, процессора?
Здравствуйте, m e, Вы писали:
S>>Один код. Как и для std::vector, который тоже является образцом параметрического полиморфизма.
ME>немного не так
ME>на плюсах вообще нет чистого параметрического полиморфизма, а есть его эмуляция различной степени качественности
ME>gaperton когда писал свой знаменитый пост http://rsdn.ru/forum/philosophy/2853873.1.aspx
немного упростил ситуацию
ME>в частности, вектор из битов немного вываливается из стройной картины параметрического полиморфизма
да, согласен. Но мог бы и не вываливаться. Если std::vector<bool> вываливается через специализацию, то List<T> не вываливается совсем.
S>Но контейнер написан без учета специальных знаний о типах.
такое деление можно ввести. оно мало применимо на практике, но поиграться с ним можно.
тогда всякий полиморфизм можно разбить на две составляющие: parametric и ad-hoc.
функцию Concat можно представить как:
Здравствуйте, DarkGray, Вы писали:
S>>Но контейнер написан без учета специальных знаний о типах.
DG>такое деление можно ввести. оно мало применимо на практике, но поиграться с ним можно.
Ну-ну, 55 лет его очень мало применяли. Чаще наверное применяли твое деление Дашь ссылку на пример применения?
DG>тогда всякий полиморфизм можно разбить на две составляющие: parametric и ad-hoc.
Что значит всякий?
DG>функцию Concat можно представить как: DG>
DG>>>есть множество типов они связаны стрелкой is.
S>>Что то мне подсказывает, что is не годится в качестве стрелки.
DG>в честь чего это?
В честь определения категории
DG>>в честь чего это? S>В честь определения категории
вот и расскажи, почему множество типов не является малой категорией, а is не является стрелкой, хотя обоим аксиомам: ассоциативности и тождественности она удовлетворяет.
Здравствуйте, 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).
S>Вообще-то я с теорией категорий не знаком. Но при поверхностном ознакомлении с базовыми концепциями вижу противоречие в выступлении is в качестве стрелки с unique-Type аксиомой, которая гласит
так очевидно, что в качестве конкретной стрелки из A в B берется не общий is, а каждый конкретный вариант A is B
S>>Вообще-то я с теорией категорий не знаком. Но при поверхностном ознакомлении с базовыми концепциями вижу противоречие в выступлении is в качестве стрелки с unique-Type аксиомой, которая гласит
DG>так очевидно, что в качестве конкретной стрелки из A в B берется не общий is, а каждый конкретный вариант A is B
Это не то что неочевидно, так еще я не понимаю, что это такое, конкретный вариант A is B.
Может ты о конкретно subtyping-е, так is это совершенно другое. К чему было is поминать?
S>Ad-hoc полиморфизм и subtype-полиморфизм являются частным случаем Parametric полиморфизма.
если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет.
вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.
Здравствуйте, 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 это бинарное отношение.
S>>Ad-hoc полиморфизм и subtype-полиморфизм являются частным случаем Parametric полиморфизма.
DG>если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет. DG>вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.
Причем тут вычисления уровня компиляции? Код ведь может и интерпретироваться в общем случае.
Речь идет о том, является ли твой код type-specific, или нет. Твой является, т.к. специальные типы обрабатывает специальным образом. Иными словами — ad-hoc.
DG>>если запретить внутри parametric-полиморфизма делать вычисления уровня компиляции, то конечно не будет. DG>>вот только такие запреты нужны только теоретикам, а на практике это нафиг не надо.
S>Причем тут вычисления уровня компиляции? Код ведь может и интерпретироваться в общем случае.
значит сначала будет интерпретироваться код над типами, а потом код над данными. в чем проблема?
S>Речь идет о том, является ли твой код type-specific, или нет.
необходимо обосновать уместность такого деления. а иначе это тоже самое, что целые числа поделить на числа меньше 3 и равных или больше 3, или там кратным 7 или не кратным, и т.д. это всё, конечно, верно и интересно, но практической ценности не представляет.
или другими словами: необходимо показать, что эти два класса обладают разными свойствами, и это можно использовать при решении тех или иных задач.
Здравствуйте, DarkGray, Вы писали:
S>>Речь идет о том, является ли твой код type-specific, или нет.
DG>необходимо обосновать уместность такого деления. а иначе это тоже самое, что целые числа поделить на числа меньше 3 и равных или больше 3, или там кратным 7 или не кратным, и т.д. это всё, конечно, верно и интересно, но практической ценности не представляет. DG>или другими словами: необходимо показать, что эти два класса обладают разными свойствами, и это можно использовать при решении тех или иных задач.
Твое деление отличается от общепринятого, ты и доказывай его полезность. А я тебе растолковываю то что написано в википедии.