Здравствуйте, EvilChild, Вы писали:
EC>Мне кажется, что проблема не в долгостроительстве, а в поддержке корпорацией-монстром.
Честно говоря, поддержка корпорацией-монстром может оказаться как благом так и злом.
EC>И я в упор не вижу какой может быть интерес например, у Microsoft, чтобы его двигать. EC>У них и так зоопарк языков под .NET неплохой.
Зоопарк неплохой, да вот только живых зверушек в нём не так много: C# и VB. C++/CLI похоже опять получился мёртворождённый. На J# вроде тоже никто не пишет. F# доказывает, что .NET как среда в принципе может использоваться для языков хороших и разных. IronPyton вряд ли пойдёт дальше, чем не очень удачный пример к VS SDK. Так что по настоящему нормальных экспонатов в этом зоопарке только два. OK, C++ и J# всё же могут использоваться для решения некоторых специфичных задач.
EC>Плюс Nemerle IMHO слишком навороченный для mainstream'а, а монстры ориентируются именно на него — живут за счёт эффекта масштаба.
Лично мне навороченность ничуть не мешает. Да и навороченностью это вряд ли можно назвать. Всё что есть в N давно известно и ожидаемо. Так или иначе все эти навороты будут постепенно перекочёвывать в мейнстрим. Хотя бы потому, что прогресс остановить нельзя, а путей его развития в IT всё меньше и меньше.
EC>Единственный вариант это небольшая компания, двигающая его, дающая платный саппорт.
Сапорт чего? Компилятора? Так вроде авторы справляются. Документация нужна, это да. Но первый, написавший нормальную книжку по N не только сорвёт куш, но и во многом закроет этот пробел. Основную библиотеку, которая .NET Framework, сапортит MS А это пожалуй гораздо больше по затратам, чем сам язык. Студию тоже пишет немало народу, человек 500. Вот прикрутим интеграцию и пусть дальше MS это дело сапортит.
EC>Типа как со SmallTalk'ом — есть несколько вендоров, сообщество разработчиков для которых это отличный инструмент,
Может что-то и появится.
EC>т.е. есть какие-то гарантии с позиции бизнеса в том, что продукт будет жить и в случае возникновения проблем есть к кому обратиться.
У бизнеса есть более серьёзные гарантии — открытость исходников и вменяемые авторы.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
IT>В языках с более лучшей поддержкой функционального стиля, чем в C#, довольно широко применяются локальные функции для инкапсуляции алгоритма внутри одного метода. Например, для обхода дерева в примере выше нам скорее всего понадобится дополнительная рекурсивная функция:
IT>
Не советую. На мой вкус, лучше реализовать ленивый обход дерева:
/// <summary>
/// Recursively iterates through the structure of homogenous elements, using the specified navigator.
/// Ideal for planarization of the tree-like structures
/// </summary>
/// <typeparam name="T">Node type</typeparam>
/// <param name="root">Structure root node</param>
/// <param name="navigator">Delegate that returns the collection of forward pointers from the specified node</param>
/// <returns>Enumerator that lazily iterates through the structure</returns>public static IEnumerable<T> IterateThrough<T>(T root, Converter<T, IEnumerable<T>> navigator)
{
yield return root;
foreach (T child in navigator(root))
foreach (T descendant in IterateThrough(child, navigator))
yield return descendant;
}
Немножко длинновато, но конкретно для данного случая у меня реализована перегрузка IterateThrough, которая принимает на вход IEnumerable<T> roots вместо одного root.
Для нее можно укоротить GetNodes до вот такого:
(Предполагается, что заранее реализован тривиальный метод IEnumerable<T> FindAll<T>(IEnumerable<T> source, Predicate<T> filter), который лениво фильтрует перечисление).
Стоит отметить, что здесь применяется поздняя фильтрация. Если имеется в виду, что предикат checkNode устроен так, что всегда вернет false для всех потомков любой ноды, для которой возвращает false, то можно немножко соптимизировать перебор дерева:
Здравствуйте, VladD2, Вы писали:
VD>Хочешь посмеяться? Тогда прочти то что я тебе написал. Прочти процетированное, а потом прочти то что написал ты.
Хочу. Но пока не могу понять над чем — серьёзно. Попробуй объяснить более доходчиво.
Здравствуйте, IT, Вы писали:
IT>Лично мне навороченность ничуть не мешает. Да и навороченностью это вряд ли можно назвать. Всё что есть в N давно известно и ожидаемо. Так или иначе все эти навороты будут постепенно перекочёвывать в мейнстрим. Хотя бы потому, что прогресс остановить нельзя, а путей его развития в IT всё меньше и меньше.
То, что тебе не мешает никак не свидетельствует, что это подходит для мэйнстрима — ты всё-таки не рядовой разработчик, который просто работает на работе.
IT>Сапорт чего? Компилятора? Так вроде авторы справляются. Документация нужна, это да. Но первый, написавший нормальную книжку по N не только сорвёт куш, но и во многом закроет этот пробел. Основную библиотеку, которая .NET Framework, сапортит MS А это пожалуй гораздо больше по затратам, чем сам язык. Студию тоже пишет немало народу, человек 500. Вот прикрутим интеграцию и пусть дальше MS это дело сапортит.
Так вроде авторы справляются это несерьёзно — представь себе среднюю контору, использующую C#. В ней не найдётся людей достаточно квалифицированных, чтобы исправить серёзную ошибку в компиляторе Nemerle. А ждать когда разработчики соизволять что-то зафиксить может быть непозволительным — например у тебя через неделю релиз и тут приходит злой ICE.
IT>У бизнеса есть более серьёзные гарантии — открытость исходников и вменяемые авторы.
Вменяемость авторов может закончиться в самый неподходящий момент, например они потеряют к проекту интерес как Влад к R#, а у тебя уже тонна кода наколбашена, вложены деньги в обучение людей, куча обязательств перед клиентами — я думаю, что суровые будни коммерческой разработки ты представляешь лучше меня, почему меня собственно и удивил твой интерес.
И ещё момент — а как быть с изменениями в компиляторе, ломающими обратную совместимость? Или будет обнаружен баг, для устранения которого её нужно будет сломать (так было с одной уязвимостью в винде — MS отказалась её фиксить в NT 4 по этой причине)?
Здравствуйте, EvilChild, Вы писали:
EC>То, что тебе не мешает никак не свидетельствует, что это подходит для мэйнстрима — ты всё-таки не рядовой разработчик, который просто работает на работе.
Я не разделяю мнения, что большинство разработчиков — это тупые, безмозглые твари, способные выполнять лишь monkey's job. Конечно же приходилось встречать и таких, но в моей практике их было подавляющее меньшинство. С другой стороны, я предпочитаю объективно оценивать свои собственные способности восприятия нового и расцениваю их как вполне адекватные, но далеко не выдающиеся. При этом на первоначальное ознакомление с N у меня ушло не более пары часов, потраченных на прочтение документации с сайта nemerle.org.
EC>Так вроде авторы справляются это несерьёзно — представь себе среднюю контору, использующую C#. В ней не найдётся людей достаточно квалифицированных, чтобы исправить серёзную ошибку в компиляторе Nemerle. А ждать когда разработчики соизволять что-то зафиксить может быть непозволительным — например у тебя через неделю релиз и тут приходит злой ICE.
Вообще-то я с успехом и с завидной периодичностью ловил в своё время ICE в TC++/BC++. И надо признать, шансов на исправление тех ошибок до выхода новой версии продукта у меня не было никаких. Переписывал код по другому и жил дальше. Даже в релизе C# 1.0 был ICE — здесь
. Ничего, год как-то прожили, релизили и никого не ждали. А вот в случае с N как раз есть все шансы, что такая фигня будет исправлена очень быстро.
IT>>У бизнеса есть более серьёзные гарантии — открытость исходников и вменяемые авторы. EC>Вменяемость авторов может закончиться в самый неподходящий момент, например они потеряют к проекту интерес как Влад к R#, а у тебя уже тонна кода наколбашена, вложены деньги в обучение людей, куча обязательств перед клиентами — я думаю, что суровые будни коммерческой разработки ты представляешь лучше меня, почему меня собственно и удивил твой интерес.
Вокруг N уже собирается определённое комьюнити не только сторонних созерцателей. Править баги в компиляторе и добавлять в него фичи могу даже я. Если ты очень захочешь, то и ты тоже. Глупости делать конечно никто ни тебе, ни мне не позволит, но вещи касающиеся поддержки компилятора запросто. Соответственно, если авторам это всё надоест, в чём я лично сомневаюсь, или у них банально не будет времени, то вполне могут найтись другие, кому судьба языка будет не безразлична.
EC>И ещё момент — а как быть с изменениями в компиляторе, ломающими обратную совместимость? Или будет обнаружен баг, для устранения которого её нужно будет сломать (так было с одной уязвимостью в винде — MS отказалась её фиксить в NT 4 по этой причине)?
Тем не менее я в своё время не смог перейти без проблем с VC++ 6 на VC++ 7 по причине несовместимости новой версии MFC. Тоже как-то выкручивался.
Да и все прекрасно понимают эти проблемы. Уже сейчас, хотя компилятор ещё в бете, никто не станет просто так делать ломающих изменений. Чтобы убедиться в этом достаточно почитать форум разработчиков.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Я не разделяю мнения, что большинство разработчиков — это тупые, безмозглые твари, способные выполнять лишь monkey's job.
Об этом речь и близко не идёт.
IT>Вокруг N уже собирается определённое комьюнити не только сторонних созерцателей. Править баги в компиляторе и добавлять в него фичи могу даже я. Если ты очень захочешь, то и ты тоже. Глупости делать конечно никто ни тебе, ни мне не позволит, но вещи касающиеся поддержки компилятора запросто. Соответственно, если авторам это всё надоест, в чём я лично сомневаюсь, или у них банально не будет времени, то вполне могут найтись другие, кому судьба языка будет не безразлична.
Ок. Когда ты будешь готов использовать Nemerle в коммерческой разработке? Т.е. чего сейчас не хватает? Что ещё необходимо доделать?
Здравствуйте, EvilChild, Вы писали:
EC>Ок. Когда ты будешь готов использовать Nemerle в коммерческой разработке? Т.е. чего сейчас не хватает? Что ещё необходимо доделать?
К сожалению/счастью, от меня это не зависит. Мой текущий клиент, контора из Fortune 50, имеет в штате специально обученных ребят, которые прежде чем дать добро сначала долго и внимательно изучают предмет. Процесс этот долгий и бюракратичный, и бету они точно завернут не задумываясь. Но как только выйдет релиз, я буду рекомендовать Nemerle к использованию.
Что касается других проектов, то если всё же дело дойдёт до переписывания RSDN и выбор средств разработки будет зависеть от меня, то сайт будет писаться с использованием Nemerle вне всякого сомнения.
Но всё же я должен заметить, что я не тот советчик, на которого нужно равняться, т.к. всё же в определённой степени я уже предвзят.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Но всё же я должен заметить, что я не тот советчик, на которого нужно равняться, т.к. всё же в определённой степени я уже предвзят.
А непредвзятые советчики вобще бывают?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, EvilChild, Вы писали:
EC>Хочу. Но пока не могу понять над чем — серьёзно. Попробуй объяснить более доходчиво.
Если ты этого не понимаешь, что объяснить что-то будет очень тяжело. Ты ведь отвечашь на на мое сообщение, а на какие-то свои мысли. Если просто прочесть твое письмо, то создается впечатление легкого бреда. Ты углядел какой-то ответ там где тебе предложили попробовать самому. И начал полемизировать с тем, что никто не говорил.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Если ты этого не понимаешь, что объяснить что-то будет очень тяжело. Ты ведь отвечашь на на мое сообщение, а на какие-то свои мысли. Если просто прочесть твое письмо, то создается впечатление легкого бреда. Ты углядел какой-то ответ там где тебе предложили попробовать самому. И начал полемизировать с тем, что никто не говорил.
Мне не хочется захламлять форум подобной ерундой — её и так слишком много, но тем не менее.
Я задал вполне конкретному человек вопрос и судя по тому, что он на именно него ответил я делаю вывод, что вопрос был понят как минимум им.
То, что ты его не понял это совершенно не страшно, т.к. вопрос задавался не тебе, но тем не менее ты ответил.
И ответил совершенно невпопад. Твоё желание продвигать Nemerle похвально, но именно эта попытка была неудачной.
И просьба: не отвечай на это сообщение — тема вроде исчерпана.
Здравствуйте, EvilChild, Вы писали:
EC>Так вроде авторы справляются это несерьёзно — представь себе среднюю контору, использующую C#. В ней не найдётся людей достаточно квалифицированных, чтобы исправить серёзную ошибку в компиляторе Nemerle. А ждать когда разработчики соизволять что-то зафиксить может быть непозволительным — например у тебя через неделю релиз и тут приходит злой ICE.
А ты сравни это с тем положением которое есть сейчас с тем же C# или VB.NET. Если ты находишь серьезную ошибку в компиляторе, то надеяться вообщ не на кого. Есть сто-процентная гарантия, что в ближайшие пол года ошибка исправлена не будет! И единственное что ты можешь сделать — это обойти ее самостоятельно.
Тут же ты все же можешь хотя бы попытаться исправить ошибку, да и наличие исходников копилятора позволяет хотя бы откомпилровать его в дебаг-режиме и понять суть происходящего. А это дает возможность проще и грамотнее обойти ошибку.
К тому же ваша контора всегда может заплатить денег тем кто может поправить ошибку. Думад найдутся те кто с удовольствием согласится подзаработать.
EC>Вменяемость авторов может закончиться в самый неподходящий момент, например они потеряют к проекту интерес как Влад к R#, а у тебя уже тонна кода наколбашена, вложены деньги в обучение людей, куча обязательств перед клиентами — я думаю, что суровые будни коммерческой разработки ты представляешь лучше меня, почему меня собственно и удивил твой интерес.
Есть исходники. Есть комьюнити. Это не мало. А интерес может потерять и МС. Вот к VB6 (а это можно считать отдельной технологией) МС интерес потеряло. Ну, и что? А ничего все как миленькие перешли на совсем непохожий VB.NET, а многие на C#.
EC>И ещё момент — а как быть с изменениями в компиляторе, ломающими обратную совместимость?
Таких практически не было за последнее время. Я припоминаю одно и то не очень страншое. Пара правок кода и все работает.
EC> Или будет обнаружен баг, для устранения которого её нужно будет сломать (так было с одной уязвимостью в винде — MS отказалась её фиксить в NT 4 по этой причине)?
Это скорее маркетинг.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Но всё же я должен заметить, что я не тот советчик, на которого нужно равняться, т.к. всё же в определённой степени я уже предвзят.
Покажите мне того счастливца который написал 10К кода на этом языке и не стал предвзятым после этого.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
А я как раз вот так делать не советовал бы. Это довольно накладный способ. От варианта с делегатом или темболее с функциональным типом он по возможностям не отличается, а по скорости и занятию памяти отличается в худшую сторону.
Лучшим решением тут вообще было бы использование класса дерева с встренным итератором реализованным на низком уровне (без yield).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, EvilChild, Вы писали:
EC>То, что ты его не понял
На каком основании ты сделал такой вывод? Вопрос я понял, но он действительно был направлен не ко мне. А главное, вопрос этот бесмысленный. Тут вообще бессмысленно спрашивать. Тут нужно попробовать и оценить самому. Вот IT это сделал.
EC> это совершенно не страшно, т.к. вопрос задавался не тебе, но тем не менее ты ответил.
Я на твой вопрос не отвечал. Именно это и забавно. Ты полимизировал со своими домыслами.
EC>И ответил совершенно невпопад. Твоё желание продвигать Nemerle похвально, но именно эта попытка была неудачной.
Это не я не в попад ответил. Это ты разговаривашь сам с собой и не слушаешь других.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали: IT>Согласен. Но вообще-то задача была продемонстрировать использование локальных функций
Рулят со страшной силой.
Вот в примере который я привел — если бы не было анонимных делегатов, то пришлось бы либо а) делать обход дерева только для IEnumerable<T> where T:IEnumerable<T>, либо б) для некоторого Node<T> или INode<T> , оборудованного IEnumerable<Node<T>> Nodes.
Причем в природе ни a) ни б) не встречаются — древовидно организованные коллекции реализуются достаточно разнообразно.
А так мы позволяем просто параметризовать метод делегатом T -> IEnumerable<T>.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Sinclair, Вы писали:
VD>А я как раз вот так делать не советовал бы. Это довольно накладный способ. От варианта с делегатом или темболее с функциональным типом он по возможностям не отличается, а по скорости и занятию памяти отличается в худшую сторону.
Не понял? IT предлагал сканировать дерево со складыванием в массив. Занятие памяти — O(N). При этом если это делается для поиска чего-то, что часто находится близко к вершине, то значительная часть сканирования будет просто выполнена впустую.
Я не мерил предлагаемый мной алгоритм, но интуитивно он должен кушать O(Log(N)) памяти. VD>Лучшим решением тут вообще было бы использование класса дерева с встренным итератором реализованным на низком уровне (без yield).
Тут я согласен, но нельзя же гарантировать наличие такого класса в общем случае?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, VladD2, Вы писали:
EC>> это совершенно не страшно, т.к. вопрос задавался не тебе, но тем не менее ты ответил.
VD>Я на твой вопрос не отвечал. Именно это и забавно. Ты полимизировал со своими домыслами.
Ты русских букв не понимаешь? Процитирую себя:
Коль уж ты его упомянул хочу спросить. У меня сложилось впечатление, что ты человек исключительно практичный:
не страдаешь излишним академизмом и не бросаешься на всё новое и блестящее. Тем не менее ты участвуешь в проекте
по интеграции Nemerle в студию и вообще интересуешься этим языком.
Это просто любопытство/куча свободного времени или ты действительно веришь что у него есть будущее?
Я не вижу здесь никакой полемики в упор и обращаюсь к IT с вопросом, а не к своим домыслам.
Если ты увидел там другое, то ты в серьёзной опасности
EC>>И ответил совершенно невпопад. Твоё желание продвигать Nemerle похвально, но именно эта попытка была неудачной.
VD>Это не я не в попад ответил. Это ты разговаривашь сам с собой и не слушаешь других.
Я там разговаривал с IT и у нас получился интересный и предметный разговор. Ты же не сказал по существу вообще ничего стоящего.
Видимо поэтому стал выискивать в сообщении то, чего там нет и приписывать мне какие-то домыслы (свои наверное).
Здравствуйте, EvilChild, Вы писали:
EC>Ты русских букв не понимаешь?
Не, я не понимаю исключительно людей не умеющих ясно выражать свои мысли.
EC> Процитирую себя: EC>
EC>Коль уж ты его упомянул хочу спросить. У меня сложилось впечатление, что ты человек исключительно практичный:
EC>не страдаешь излишним академизмом и не бросаешься на всё новое и блестящее. Тем не менее ты участвуешь в проекте
EC>по интеграции Nemerle в студию и вообще интересуешься этим языком.
EC>Это просто любопытство/куча свободного времени или ты действительно веришь что у него есть будущее?
EC>Я не вижу здесь никакой полемики в упор и обращаюсь к IT с вопросом, а не к своим домыслам. EC>Если ты увидел там другое, то ты в серьёзной опасности
А зачем ты цетируешь свой вопрос к IT? Ты процетируй тот поток сознания который ты излил на простое предложение попробовать самому.
VD>>Это не я не в попад ответил. Это ты разговаривашь сам с собой и не слушаешь других. EC>Я там разговаривал
Ах, извини. Я не понял, что на мое замечаение ты отвечал не мне, а IT. В следующий раз буду делать скидку на неординарность тсвоего интеллекта.
EC>Ты же не сказал по существу вообще ничего стоящего.
А с чем же ты тогда полемизировал? Вообще это уже похоже на разговоры с самим собой.
EC>Видимо поэтому стал выискивать в сообщении то, чего там нет и приписывать мне какие-то домыслы (свои наверное).
Случай клинический.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Sinclair, Вы писали:
S>Не понял? IT предлагал сканировать дерево со складыванием в массив. Занятие памяти — O(N).
Итератор это отдельный объект. В твоем случае он создается по два раза ка наждую ветку. Уж лучше массив. И дело тут не в О(х.з.ч.), а в количестве выделений памяти. Это относительно накладная операция. Хотя конечно во многих случаях на это можно забить.
S>Тут я согласен, но нельзя же гарантировать наличие такого класса в общем случае?
Нельзя. И тогда самым универсальным решением является сканирование с использвоанием функции. В общем, Map, Iter и Fold решают множество проблем, делают это очень универсально и довольно шустро.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.