Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FR, Вы писали:
FR>>Даже я могу кучу вещей придумать в которых полные по тьюрингу макросы мало чем помогут, например добавь подержку продолжений ( http://en.wikipedia.org/wiki/Continuation ), WH>
Угу тогда функторы аля STL это замыкания
Сходи все таки по ссылке, посмотри как в схеме сделано.
FR>>или мультиметов в стиле CLOS, WH>Мультиметоды зло ибо их семантика слишком размыта. WH>Слишком много если...
То есть все что не можем сделать на макросах зло, понятно.
FR>>или нормальную ленивость, WH>Что значит нормальную? WH>Эта нормальная или нет http://nemerle.org/Lazy_evaluation
Сравнивай с хаскелем или клейном.
FR>>думаю в этот список можно еще немало вещей добавить и со временем список будет только расти. WH>Попробуй.
А зачем, ты скажешь или не нужно или приведешь частично коряво сделаную реализацию и скажешь что этого достаточно. Это все равно что обчитавшемуся Александреску говорить что boost::lambda корявое убожество.
Здравствуйте, FR, Вы писали:
FR>Угу тогда функторы аля STL это замыкания FR>Сходи все таки по ссылке, посмотри как в схеме сделано.
И что я там должен увидить?
Запустить несколько раз можем? Можем.
Гденибудь сохранить и потом продолжить можем? Можем.
Что еще надо?
FR>То есть все что не можем сделать на макросах зло, понятно.
class A {}
class B : A {}
...
void fn(A, B)...
void fn(B, A)...
...
fn(new B(), new B());
Какую функцию вызывать будем?
Единственный нормальный способ множественной диспетчеризации это pattern matching по алгебраическим типам.
FR>Сравнивай с хаскелем или клейном.
И? Там нужно постоянно везде расставлять строгость иначе все тормозит и стек заканчивается...
Ленивость нужна там где она нужна и нигде более.
FR>А зачем, ты скажешь или не нужно или приведешь частично коряво сделаную реализацию и скажешь что этого достаточно. Это все равно что обчитавшемуся Александреску говорить что boost::lambda корявое убожество.
Слив засчитан.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>И что я там должен увидить?
Ты? Ничего.
WH>Запустить несколько раз можем? Можем. WH>Гденибудь сохранить и потом продолжить можем? Можем. WH>Что еще надо?
Ничего ни нужно. Бесполезно, просто нужно чтобы прошло какое-то время и новая игрушка тебе наскучила, тогда можно будет нормально разговаривать. Хотя желания общатся с тобой у меня с каждым разом становится намного меньше. Сейчас разговор точно не получится, пока.
Здравствуйте, FR, Вы писали:
FR>Ничего ни нужно. Бесполезно, просто нужно чтобы прошло какое-то время и новая игрушка тебе наскучила, тогда можно будет нормально разговаривать. Хотя желания общатся с тобой у меня с каждым разом становится намного меньше. Сейчас разговор точно не получится, пока.
Как всегда... одни эмоции и никаких аргументов.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
FR>>Ничего ни нужно. Бесполезно, просто нужно чтобы прошло какое-то время и новая игрушка тебе наскучила, тогда можно будет нормально разговаривать. Хотя желания общатся с тобой у меня с каждым разом становится намного меньше. Сейчас разговор точно не получится, пока. WH>Как всегда... одни эмоции и никаких аргументов.
У тебя конечно сообщения абсолютно лишены эмоций
Аргументы я тебе привел в виде трех примеров которые на макросах Немерли полноценно не реализуются, ты же мне в ответ приводишь пример в котором совершено не используются макросы и который показывает использование механизма который является частным очень ограниченым случаем того что я просил. На второй вопрос отвечаешь что это не нужно. На третий опять приводишь частный случай. Нормально.
Здравствуйте, FR, Вы писали:
FR>Аргументы я тебе привел в виде трех примеров которые на макросах Немерли полноценно не реализуются, ты же мне в ответ приводишь пример в котором совершено не используются макросы и который показывает использование механизма который является частным очень ограниченым случаем того что я просил.
А чего тебе не хватает?
Если ты знаешь для чего тебе нужны продолжения ты сможешь легко сказать что в них нехватает.
FR>На второй вопрос отвечаешь что это не нужно.
А я вобщето аргументировал... какой метод то вызывать?
Ась?
FR>На третий опять приводишь частный случай. Нормально.
Выполнение по требованию есть?
Меморизация есть?
А строгое ваполнение по умолчанию это даже хорошо.
Ибо хоскель из-за своей лени жуткий тормоз... и стек у него иногда заканчивается.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Я, конечно, могу ошибаться, но Ваши ответы очень смахивают на ответы:
1. Когда пытаешься рассказать Дельфистам, что такое шаблоны.
2. Когда пытаешься рассказать приверженцам C++/C#/Delphi/..., что такое функции как first class objects.
3. Многое другое
Некоторые заинтересуются и сами начнут узнавать, а что же, действительно, такого, а некоторые начинают вот такой вот "аргументированный" спор.
Здравствуйте, VoidEx, Вы писали:
VE>Я, конечно, могу ошибаться, но Ваши ответы очень смахивают на ответы:
Если уж проводить аналогии то все выглядит так:
1)Шаблоны это крууууутоооо!!!!
2)Чем круто? Да и вот тут проблемы вылезают.
3)Да ты ваще выще ничего не понимаешь!
4)Как всегда одни эмоции.
5)Да ты все игнорируешь!!!
6)Так ты покажи что тебе не нравится? Да и что с той проблемой то делать?
...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>А чего тебе не хватает? WH>Если ты знаешь для чего тебе нужны продолжения ты сможешь легко сказать что в них нехватает.
Продолжения я пока вкуриваю, но уже вижу что они гораздо мощнее чем yield. Пока я в них как и ты Блаб
FR>>На второй вопрос отвечаешь что это не нужно. WH>А я вобщето аргументировал... какой метод то вызывать? WH>Ась?
Ты перевел разговор с возможности их реализации на макросах на другую тему.
Там ничего нельзя вызвать, будет в зависимости от реализации или ошибка компиляции или исключение, или даже тихое ничегониделание, все точно также как в патерн матчинге если прилетело то что не обрабатывается.
FR>>На третий опять приводишь частный случай. Нормально. WH>Выполнение по требованию есть? WH>Меморизация есть?
Настоящей тотальной ленивости нет, этого как и продолжений макросами не сделать.
Здравствуйте, FR, Вы писали:
FR>Продолжения я пока вкуриваю, но уже вижу что они гораздо мощнее чем yield. Пока я в них как и ты Блаб
Да чем мощьнее то?
FR>Ты перевел разговор с возможности их реализации на макросах на другую тему. FR>Там ничего нельзя вызвать, будет в зависимости от реализации или ошибка компиляции или исключение, или даже тихое ничегониделание,
Все будет выглядеть както так
class Test
{
[MultyMethodHost]
public static MMethod([MultyMethodThis] a1 : A, [MultyMethodThis]a2 : A) : void;
}
class Test2
{
[MultyMethod]
public static MMethod([MultyMethodThis] a1 : B, [MultyMethodThis]a2 : A) : void
{
...
}
}
Макрос генерит код который в рантайме сканирует все загруженные сборки, подписывается на событие о загрузки сборки и соберает все реализации в кучу.
Вот только не понятно что с неоднозначностями делать?..
FR>все точно также как в патерн матчинге если прилетело то что не обрабатывается.
Не точно. Все паттерны заданны на этапе компиляции и определен их порядок.
Благодоря этому можно проверить что все паттрены доступны и покрываются все варианты входных значений.
FR>Настоящей тотальной ленивости нет,
Она там не тотальна... там можно указывать компилятору что вычисления нужно проводить строго.
Болие того этим не редко занимаются ибо иначе будут тормоза и вылеты.
Давай еще гарантированное отсутствие _|_ требовать... Правда в этом случае ты вобще ничего кроме простеньких примеров написать не сможешь...
FR>этого как и продолжений макросами не сделать.
Ты скажи чего тебе в yield не хватает.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FR, Вы писали:
FR>>Продолжения я пока вкуриваю, но уже вижу что они гораздо мощнее чем yield. Пока я в них как и ты Блаб WH>Да чем мощьнее то?
yield просто локальное сохранение узкого контекста выполнения, продолжения же глобальное сохранение состояния, то есть реален полный откат, так что мощнее и намного.
WH>Все будет выглядеть както так
Дежавю почти , помню на питоне тут подобное показывал, правда у тебя как всегда только наброски.
WH>
WH>class Test
WH>{
WH> [MultyMethodHost]
WH> public static MMethod([MultyMethodThis] a1 : A, [MultyMethodThis]a2 : A) : void;
WH>}
WH>class Test2
WH>{
WH> [MultyMethod]
WH> public static MMethod([MultyMethodThis] a1 : B, [MultyMethodThis]a2 : A) : void
WH> {
WH> ...
WH> }
WH>}
WH>
WH>Макрос генерит код который в рантайме сканирует все загруженные сборки, подписывается на событие о загрузки сборки и соберает все реализации в кучу. WH>Вот только не понятно что с неоднозначностями делать?..
Так я тебе уже писал.
FR>>все точно также как в патерн матчинге если прилетело то что не обрабатывается. WH>Не точно. Все паттерны заданны на этапе компиляции и определен их порядок.
Здесь также, порядок тоже можно сделать естественный по мере объвления.
WH>Благодоря этому можно проверить что все паттрены доступны и покрываются все варианты входных значений.
Ну бывают и полиморфные варианты и их паттерн матчинг, там точно такие же проблемы.
Кстати немерле подерживает полиморфные варианты? И если нет (или бы не подерживал) то можно их прикрутить макросами?
FR>>Настоящей тотальной ленивости нет, WH>Она там не тотальна... там можно указывать компилятору что вычисления нужно проводить строго.
Тотальна, поэтому чтобы убрать нужно явно указывать.
WH>Болие того этим не редко занимаются ибо иначе будут тормоза и вылеты. WH>Давай еще гарантированное отсутствие _|_ требовать... Правда в этом случае ты вобще ничего кроме простеньких примеров написать не сможешь...
FR>>этого как и продолжений макросами не сделать. WH>Ты скажи чего тебе в yield не хватает.
Здравствуйте, WolfHound, Вы писали:
FR>>Даже я могу кучу вещей придумать в которых полные по тьюрингу макросы мало чем помогут, например добавь подержку продолжений ( http://en.wikipedia.org/wiki/Continuation ), WH>
continuations — это call/cc. Нарисуй его, пожалуйста. Как решить частные случаи, которые решает call/cc, не особо интересно. Вопрос был о поддержке продолжений.
FR>>или мультиметов в стиле CLOS, WH>Мультиметоды зло ибо их семантика слишком размыта. WH>Слишком много если...
Мультиметоды — зло, хотя бы по той причине, что их нет в Немерле
FR>>или нормальную ленивость, WH>Что значит нормальную? WH>Эта нормальная или нет http://nemerle.org/Lazy_evaluation
Семантически — думаю да. Вроде delay/force там есть.
Остальное — детали реализации. Например, наверняка strictness-analysis нет, объекты всегда будут создаваться, даже если используются только их части (например, constructor specialisation нет) и т.д.
Поэтому практически насколько это нормальная ленивость — не знаю.
На самом деле тут о чём разговор? О том, что если макросы есть, то всё — можно уже не расширять язык или что?
Здравствуйте, lomeo, Вы писали:
L>continuations — это call/cc. Нарисуй его, пожалуйста. Как решить частные случаи, которые решает call/cc, не особо интересно. Вопрос был о поддержке продолжений.
Покажи случай который не делается через yield. Тебе это должно быть не трудно.
L>Мультиметоды — зло, хотя бы по той причине, что их нет в Немерле
Я уже сказал чем плохи мультиметоды.
Если ты скажешь как разрешить их противоречия я их без проблем сделаю.
L>На самом деле тут о чём разговор? О том, что если макросы есть, то всё — можно уже не расширять язык или что?
По большей части да. По крайней мере в той что любит крутиться Aлександреску.
Что касается всего остального то тут больше вопросов чем ответов.
Например ленивость по умолчанию мягко говоря сомнительна.
Хотя при жилании можно сделать и болие общую ленивость что уже сделана вопрос лишь в том, а оно надо?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, FR, Вы писали:
FR>yield просто локальное сохранение узкого контекста выполнения, продолжения же глобальное сохранение состояния, то есть реален полный откат, так что мощнее и намного.
А вот с этого места давай подробнее... ибо у нас есть изменяемые переменные... как ты их откатывать будешь?
А еще есть IO...
FR>Дежавю почти , помню на питоне тут подобное показывал, правда у тебя как всегда только наброски.
Ты в самом деле думаешь что я буду делать сомнительную хреновину с неясной семантикой?
FR>Здесь также, порядок тоже можно сделать естественный по мере объвления.
Те методы нужно объявить в одном классе? В рантайме нельзя подключать новые методы?
Так чем это отличается от того что уже есть?
Тем что это выглядит как разные функции не в счет.
FR>Ну бывают и полиморфные варианты и их паттерн матчинг, там точно такие же проблемы.
Так их нормальные люди не используют.
FR>Кстати немерле подерживает полиморфные варианты?
Да.
public class A {}
public class B : A {}
public static MMethod(_ : A, _ : A) : string
{
| (_a1 is B, _a2 is B) => "B, B"
| (_a1 is B, _a2 is A) => "B, A"
| (_a1 is A, _a2 is B) => "A, B"
| (_a1 is A, _a2 is A) => "A, A"
}
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FR, Вы писали:
FR>>yield просто локальное сохранение узкого контекста выполнения, продолжения же глобальное сохранение состояния, то есть реален полный откат, так что мощнее и намного. WH>А вот с этого места давай подробнее... ибо у нас есть изменяемые переменные... как ты их откатывать будешь?
Очень просто, я запомню полностью состояние программы в определенный момент времени и когда надо просто его верну, тут изменяемые переменные никак ни помеха.
WH>А еще есть IO...
С этим да могут быть фокусы.
FR>>Дежавю почти , помню на питоне тут подобное показывал, правда у тебя как всегда только наброски. WH>Ты в самом деле думаешь что я буду делать сомнительную хреновину с неясной семантикой?
Я еще ни разу в таких спорах от тебя никакого компилируемого кода не видел (кроме отсылки к примерам немерле)
FR>>Здесь также, порядок тоже можно сделать естественный по мере объвления. WH>Те методы нужно объявить в одном классе? В рантайме нельзя подключать новые методы?
Зачем, пусть в разных пусть будут свободные функции. Надеюсь в NET как и в питоне доступна информация об очередности их объвления, так что тут проблем не вижу.
WH>Так чем это отличается от того что уже есть? WH>Тем что это выглядит как разные функции не в счет.
FR>>Ну бывают и полиморфные варианты и их паттерн матчинг, там точно такие же проблемы. WH>Так их нормальные люди не используют.
Хорошо, значит расширяемость паттерн матчинга авторы предусмотрели, а если бы нет? Если бы его вообще не было в языке легко ли было бы реализовать на макросах?
Здравствуйте, FR, Вы писали:
FR>Очень просто, я запомню полностью состояние программы в определенный момент времени и когда надо просто его верну, тут изменяемые переменные никак ни помеха.
А памяти хватит? А ты уверен? А что делать с многопоточностью?
FR>Я еще ни разу в таких спорах от тебя никакого компилируемого кода не видел (кроме отсылки к примерам немерле)
Это просто не правда.
FR>Зачем, пусть в разных пусть будут свободные функции. Надеюсь в NET как и в питоне доступна информация об очередности их объвления, так что тут проблем не вижу.
1).NET не поддерживает свободные функции
2)Порядок парсинга различных файлов не определен.
FR>Опять то что я не использую не нужно?
А зачем? Это же по сути приведение базового класса к потомку.
Единственное место где оно нужно это IOC контейнер.
Все остальное жесточайшая кривь.
FR>Хорошо, значит расширяемость паттерн матчинга авторы предусмотрели, а если бы нет?
А ты знаешь как этот макрос работает?
Ведь нет.
Так вот там от match ничего не остается...
macro @regexp (mat)
syntax ("regexp", mat)
{
/// syntax is [regexp match { .. }], so [mat] must be [match]
match (mat) {
| <[ match ($val) { ..$cases } ]> => // Собственно на этом жизнь match'а и заканчивается...
...
| _ =>
Message.FatalError ("the `regexp' macro expects a match construct")
}
}
Так что и без него можно былобы все сделать.
FR>Если бы его вообще не было в языке легко ли было бы реализовать на макросах?
В немерле полные по Тьюрингу имеющие доступ ко всему API компилятора макросы.
Те при особом жилании на них можно сделать практически все. Единственное что необходимо соблюдать парность скобок.
Другое дело что на практике нужно лишь изредка догенерить некоторые методы по шаблону или что-то типа этого.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, FR, Вы писали:
FR>>Очень просто, я запомню полностью состояние программы в определенный момент времени и когда надо просто его верну, тут изменяемые переменные никак ни помеха. WH>А памяти хватит? А ты уверен? А что делать с многопоточностью?
Если нормально реализовать памяти хватит.
С многопоточностью не знаю, пока не дошел, надо спросить тех кто лучше разбирается.
FR>>Я еще ни разу в таких спорах от тебя никакого компилируемого кода не видел (кроме отсылки к примерам немерле) WH>Это просто не правда.
Может быть, у меня давний склероз
FR>>Зачем, пусть в разных пусть будут свободные функции. Надеюсь в NET как и в питоне доступна информация об очередности их объвления, так что тут проблем не вижу. WH>1).NET не поддерживает свободные функции WH>2)Порядок парсинга различных файлов не определен.
Значит для NET придется вводить параметр указывающий порядок, или всемогущие макросы как-то помогут?
FR>>Опять то что я не использую не нужно? WH>А зачем? Это же по сути приведение базового класса к потомку. WH>Единственное место где оно нужно это IOC контейнер. WH>Все остальное жесточайшая кривь.
То есть весь эрланг например "жесточайшая кривь" ?
WH>Так что и без него можно былобы все сделать.
Хорошо в этом случае Немерли на высоте.
FR>>Если бы его вообще не было в языке легко ли было бы реализовать на макросах? WH>В немерле полные по Тьюрингу имеющие доступ ко всему API компилятора макросы. WH>Те при особом жилании на них можно сделать практически все. Единственное что необходимо соблюдать парность скобок.
Ну при желании можно и на D с помощью текстовых миксинов реализовать все, вопрос в трудоемкости, и тут окажется что многие вещи реализовать на макросах не проще чем написать компилятор или интерпетатор.
WH>Другое дело что на практике нужно лишь изредка догенерить некоторые методы по шаблону или что-то типа этого.
Здравствуйте, FR, Вы писали:
FR>Если нормально реализовать памяти хватит.
Ну-ну. FR>С многопоточностью не знаю, пока не дошел, надо спросить тех кто лучше разбирается.
Там вобще все весело будет.
FR>Значит для NET придется вводить параметр указывающий порядок, или всемогущие макросы как-то помогут?
Тут ничто не поможет.
Если порядок парсинга файлов не определен то он неопределен и ничего ты тут не сделаешь.
Внутри одного файла порядок получить можно но толку то?
Да и зачем если:
1)Фича мягко говоря сомнительная
2)pattern matching это все умеет. Еще и предупреждения выдаст если один образец другой скрывает.
FR>То есть весь эрланг например "жесточайшая кривь" ?
Все языки с динамической типизацией жесточайшая кривь. Имею Мнение Хрен Оспоришь что приведение типа в рантайме допустимо лишь при получении сервиса из IOC контейнера (и то только по тому что я пока не придумал как выкрутиться в этом случае).
FR>Хорошо в этом случае Немерли на высоте.
Он на высоте в гораздо болие большом колличестве случаев чем ты думаешь.
FR>Ну при желании можно и на D с помощью текстовых миксинов реализовать все, вопрос в трудоемкости, и тут окажется что многие вещи реализовать на макросах не проще чем написать компилятор или интерпетатор.
В D тебе придется повторить компилятор D.
В немерле нет.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
FR>>yield просто локальное сохранение узкого контекста выполнения, продолжения же глобальное сохранение состояния, то есть реален полный откат, так что мощнее и намного. WH>А вот с этого места давай подробнее... ибо у нас есть изменяемые переменные... как ты их откатывать будешь? WH>А еще есть IO...
Здесь явно какая-то путаница — в схеме же есть продолжения, хотя она и близко не чистый язык.