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

S>>Предложением выше ты сказал что полиморфизмы в действительности не различаются, а в этом они у тебя снова разные.


DG>утверждение, что свет одновременно и волна, и частица тебя, наверное, вообще должно на стуле переворачивать...

Так это двойственная природа света вдохновляет тебя городить фигню на форуме и не отвечать за нее?
Re[17]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 13:35
Оценка:
DG>>кроме знания теории необходимо ее еще уметь применять к практике.
S>как ты?

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

меня лишь расстраивает, что ряд сложных вещей (в частности, двойственность, неопределенность и т.д., топологию еще может быть) ты не знаешь, и не делаешь попыток понять что это такое, и зачем это надо.
Re[18]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.02.12 13:48
Оценка:
Здравствуйте, DarkGray, Вы писали:


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

S>>как ты?

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

DG>из-за того, что теории генеренные: с одной стороны — они лучше описывают конкретную задачу, с другой стороны — по понятиям и терминам они периодически не совпадают с классикой.
Я так и предполагал. Спасибо за откровенность.

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

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

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

То, что мы обсуждаем не имеет никакой двойственности и неопределенности. Что бы в этом убедиться, достаточно заглянуть в википедию, и увидеть, например, что полиморфизм это фича ЯП а не исполнителя. Декларативность — это подход, а не свойство инструкций исполнителя. И т.п. Какая тут двойственность, неопределенность и может быть топология?
Re[31]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 14:09
Оценка:
DG>>утверждение, что свет одновременно и волна, и частица тебя, наверное, вообще должно на стуле переворачивать...
S>Так это двойственная природа света вдохновляет тебя городить фигню на форуме и не отвечать за нее?

вот смотри:
возьмем составное отношение F G, которое связывает два множества S и T.
дальше возьмем изоморфизм M над отношением F G, который переводит отношение F G в F1 G1(и обратно), при этом F1 G1 описывает такое же отношение S в T, как и исходное F G.

У отношения G при переходе к G1 часть свойств остается, а часть пропадает.
и соответственно, утверждается, что те свойства G, которые остаются при преобразовании являются существенными, а которые пропадают — не существенные, потому что с помощью изоморфизма M от них всегда можно избавиться.

например, в задачах связанных с реальностью такие свойства чисел, как делимость, "круглость" и т.д. часто не существенны, потому что такие задачи представимы как совокупность двух отношений: измерение(оцифровка) и задача-над-числами, при этом при измерении: точка отсчета, система счисления, единица измерения выбирается произвольно, и есть способ перейти от одного способа измерения к другому.

тоже самое и с кодом:
возьмем программу F которая переводит вход S в выход T.
и возьмем изоморфизм M, которые переводит программу F в программу F1 (и обратно), при этом F1 также преобразует S в T, как и исходный F.

часть свойств при переходе из F в F1 останется, часть пропадет.
те которые пропадают — они не существенные.
соответственно, я утверждаю, что деление полиморфизма на parametric, subtype и ad-hoc не существенно, потому что есть изоморфизмы, которые переводят одно в другое.

зы
на практике интересует изоморфизмы, которые не просто переводят S -> F -> T в аналогичный S -> F1 -> T, но и которые не ухудшают серьезно вычислительную сложность F1
Re[19]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 14:16
Оценка:
соответственно, двойственность наличия свойства K (с одной стороны — оно есть, а с другой стороны — его нет) означает, что есть изоморфизм M, который преобразует код F со свойством K в код F1 без свойства K (и обратно)
Re[20]: Что такое полиморфизм?
От: FR  
Дата: 10.02.12 14:31
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>рассказать как вот это можно отранслировать в c#?


Все-таки язык в котором реально существует аналог твоего "compile-if", а именно D с его static if
очень существенно от C# отличается в нем доступны такие возможности метапрограммирования,
которые в C# даже внешними препроцессорами тяжело достижимы и соответственно практические
приемы программирования на этих языках будут сильно отличатся.
Re[21]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 14:46
Оценка:
FR>Все-таки язык в котором реально существует аналог твоего "compile-if", а именно D с его static if
FR>очень существенно от C# отличается в нем доступны такие возможности метапрограммирования,
FR>которые в C# даже внешними препроцессорами тяжело достижимы и соответственно практические
FR>приемы программирования на этих языках будут сильно отличатся.

это потому что C# не полный в этом плане:
в нем нет возможности из параметрического полиморфизма вызвать ad-hoc полиморфизм.
также нет возможности задать параметры через "или".

в частности, на C# нельзя описать следующую конструкцию:
T Sum<T>(this IEnumerable<T> items) where T:int/double/string/decimal и т.д.
{
  var res = Empty(T);
  foreach (var item in items)
  {
    res = res + item;
  }
  return res;
}
Re[21]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 14:59
Оценка:
FR>Все-таки язык в котором реально существует аналог твоего "compile-if"

кстати, я как раз утверждал обратное: что все эти деления на parametric, ad-hoc, subtype не существенны, если в языке есть возможность записать в произвольном месте произвольное условие над типами уровня компиляции.
Re[22]: Что такое полиморфизм?
От: FR  
Дата: 10.02.12 15:51
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>кстати, я как раз утверждал обратное: что все эти деления на parametric, ad-hoc, subtype не существенны, если в языке есть возможность записать в произвольном месте произвольное условие над типами уровня компиляции.


D и есть такой язык.
Но я согласен с твоими оппонентами тебя заносит куда-то не туда.
Re[20]: Что такое полиморфизм?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 10.02.12 16:34
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

DG>возьмем, твое же определение и препроцессор языка C++, и некий код C1

DG>код C1 после обработки препроцессором превращается в код C2.
DG>и код C1, и код C2 — являются кодом на языке C++.
DG>из твоего же определения, выходит, что и C1 исходный код, и C2 — это тоже исходный код. ...

Да, с твоей цепочкой рассуждений я вполне согласен, только она ничего не меняет. Да, один и тот же логически код порой можно записать на одном языке по-разному, но на фичи системы типов это не влияет. Если какая-то фича в ней есть, то даже если можно то же самое выразить без нее, она все равно есть. Можно в C# раскрыть foraech и yield, но от этого язык их не потеряет, определение-то его не изменится. Если где-то можно один вид полиморфизма выразить через другой, первый вид не исчезнет.

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

DM>>Язык, данный нам спецификацией.

DG>это тоже теория, а на практике не бывает, чтобы, например, int или float сильно отличались от int и float-а процессора, если нас, конечно, интересует практика (и в частности, вычислительная эффективность)


Нет, в вопросах теории ЯП нас интересует теория.

DG>и кстати ATS должен быть дать понимание, что часть типов это чисто фишка компилятора, а часть переходит и в runtime.

DG>соответственно, каждый реальный язык имеет, как минимум, два набора типов: уровня компиляции и уровня runtime-а.

Не стоит из отдельных примеров практики делать общие правила теории. Вот в Руби и Питоне где "набор типов уровня runtime"? Реальные языки.
Re[20]: Что такое полиморфизм?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 10.02.12 16:36
Оценка:
Здравствуйте, DarkGray, Вы писали:

DM>>Если язык этого куска текста нигде не описан, то это не исходный код, это просто набор букв.


DG>корректнее это утверждение формулируется как:

DG>язык является языком — если есть алгоритм исполнения или/и алгоритм трансляции в более простой набор примитивов.

Хочешь сказать, что для абсолютно любого языка всегда есть "более простой набор примитивов"? Это как минимум не доказано, не очевидно и контринтуитивно.

DG>рассказать как вот это можно отранслировать в c#?


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

DG>это потому что C# не полный в этом плане:

DG> в нем нет возможности из параметрического полиморфизма вызвать ad-hoc полиморфизм.

static void Write(int i) { Console.WriteLine("integer"); }
static void Write(object v) { Console.WriteLine("object"); }

static void WriteT<T>(T value) { Write((dynamic)value); }

static void Main()
{
    WriteT(0);   // integer
    WriteT("0"); // object
}


DG> также нет возможности задать параметры через "или".

А где есть?

DG>в частности, на C# нельзя описать следующую конструкцию:

DG>
DG>T Sum<T>(this IEnumerable<T> items) where T:int/double/string/decimal и т.д.
DG>

Можно использовать subtype полиморфизм и передавать явно сумматор. Можно прийти к решению как с Comparer<T>.Default (Summator<T>.Default.Sum(a, b), где сумматоры для интересующих типов хардкодятся руками).
Решения есть, согласен что не слишком элегантные. Но ничего принципиально неразрешимого ты не назвал.
Re[32]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.02.12 17:12
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>утверждение, что свет одновременно и волна, и частица тебя, наверное, вообще должно на стуле переворачивать...

S>>Так это двойственная природа света вдохновляет тебя городить фигню на форуме и не отвечать за нее?

DG>вот смотри:

DG>возьмем составное отношение F G, которое связывает два множества S и T.
Давай разбираться. Под составным отношением ты подразумеваешь композицию отношений?
Если да, то не очень понятно. Допустим, FoG (o= композиция) определено на SxT (x — декартово произведение). Непонятно, где определены F и G, что их композиция стала определена на SxT.

DG>дальше возьмем изоморфизм M над отношением F G, который переводит отношение F G в F1 G1(и обратно), при этом F1 G1 описывает такое же отношение S в T, как и исходное F G.

не очень понимаю, о чем речь. Изоморфизм над отношением? Что есть объекты, что есть стрелки?

DG>У отношения G при переходе к G1 часть свойств остается, а часть пропадает.

О каких свойствах речь?
DG>и соответственно, утверждается, что те свойства G, которые остаются при преобразовании являются существенными, а которые пропадают — не существенные, потому что с помощью изоморфизма M от них всегда можно избавиться.
Изоморфизм сохраняет структуру, если что.

DG>например, в задачах связанных с реальностью такие свойства чисел, как делимость, "круглость" и т.д. часто не существенны, потому что такие задачи представимы как совокупность двух отношений: измерение(оцифровка) и задача-над-числами, при этом при измерении: точка отсчета, система счисления, единица измерения выбирается произвольно, и есть способ перейти от одного способа измерения к другому.

Я не понимаю, к чему ты клонишь.

DG>тоже самое и с кодом:

DG>возьмем программу F которая переводит вход S в выход T.
DG>и возьмем изоморфизм M, которые переводит программу F в программу F1 (и обратно), при этом F1 также преобразует S в T, как и исходный F.

DG>часть свойств при переходе из F в F1 останется, часть пропадет.

DG>те которые пропадают — они не существенные.
давай попроще, например к числам.
Да, можно множество целых положительных чисел отобразить в множество дробей вида 1/n и они перестанут быть целыми. Что из этого? Исходные целые положительные числа перестали быть целыми? Т.е. ты утверждаешь что "целость" числа это несущественное свойство, потому можно не обращать внимание, целое оно или нет?

DG>соответственно, я утверждаю, что деление полиморфизма на parametric, subtype и ad-hoc не существенно, потому что есть изоморфизмы, которые переводят одно в другое.

Вот тут нужен пример, который это подтвердит. Твой исходный не годится, его нельзя отнести к чисто параметрическому. Давай начнем с примера, который чистый ad-hoc (перегрузку функций) переведет в чисто параметрический, который будет соответствовать "written without mention of any specific type" согласно классификации 55-летней давности.

DG>зы

DG>на практике интересует изоморфизмы, которые не просто переводят S -> F -> T в аналогичный S -> F1 -> T, но и которые не ухудшают серьезно вычислительную сложность F1
да, еще есть изоморфизмы, которые разбавляют код Thread.Sleep-ами
Re[20]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.02.12 17:20
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>соответственно, двойственность наличия свойства K (с одной стороны — оно есть, а с другой стороны — его нет) означает, что есть изоморфизм M, который преобразует код F со свойством K в код F1 без свойства K (и обратно)

Я тут уже не очень понимаю, о чем ты пишешь. Судя по твоим открытиям, "целость" числа двойственна, "простота" тоже и недвойственные свойства надо еще поискать.

У меня такое ощущение, что ты о двойственности вспоминаешь когда всплывает несоотвествие определений придуманных тобой теорий с классическими.
Re[23]: Что такое полиморфизм?
От: FR  
Дата: 10.02.12 17:20
Оценка: 6 (1)
Здравствуйте, samius, Вы писали:

DG>> также нет возможности задать параметры через "или".

S>А где есть?

В D:

import std.stdio;

T Sum(T)(T items[]) if(is(T == int) || is(T == float))
{
return T.init;
}

void main()
{
static assert(__traits(compiles, Sum!int));
static assert(__traits(compiles, Sum!float));
    
static assert(!__traits(compiles, Sum!string));
}
Re[21]: Что такое полиморфизм?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.02.12 17:21
Оценка:
DM>Хочешь сказать, что для абсолютно любого языка всегда есть "более простой набор примитивов"? Это как минимум не доказано, не очевидно и контринтуитивно.

автомат обладает более простым набором примитивов, не говоря уже про МТ.
при этом из тьюринга следует, что любой язык можно преобразовать в автомат.
Re[22]: Что такое полиморфизм?
От: FR  
Дата: 10.02.12 17:28
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>автомат обладает более простым набором примитивов, не говоря уже про МТ.

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

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

FR>Здравствуйте, samius, Вы писали:


DG>>> также нет возможности задать параметры через "или".

S>>А где есть?

FR>В D:


FR>
FR>T Sum(T)(T items[]) if(is(T == int) || is(T == float))
FR>}
FR>

Интересно. Я правильно понимаю, что D как и C++ инстанциирует шаблоны во время компиляции? Т.е. фактически ничто кроме комитета не мешало бы сделать то же самое и в C++?
Re[23]: Что такое полиморфизм?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.02.12 17:32
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, DarkGray, Вы писали:


DG>>автомат обладает более простым набором примитивов, не говоря уже про МТ.

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

FR>Таким макаром мы придем к тому что все тьюринг полные языки ничем друг от друга не отличаются.

Да, мы уже это проходили в теме про иммутабельный объект. Оказалось что все языки императивны вплоть до подмножества запросов SQL и регекспов именно по причине возможности выполнения их на МТ
Re[25]: Что такое полиморфизм?
От: FR  
Дата: 10.02.12 17:36
Оценка:
FR>>
FR>>T Sum(T)(T items[]) if(is(T == int) || is(T == float))
FR>>}
FR>>

S>Интересно. Я правильно понимаю, что D как и C++ инстанциирует шаблоны во время компиляции? Т.е. фактически ничто кроме комитета не мешало бы сделать то же самое и в C++?

Угу даже больше, этот самый комитет и зарубил это предложение (Concepts) при принятии нового стандарта.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.