Re[8]: Что меня не устраивает в МП в Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.08 20:50
Оценка:
Здравствуйте, IT, Вы писали:

I>>Да, представляешь, берем на работу студентов 3-4го курса. Наиболее перспективные кандидаты. Был случай, когда ст. 2го курса работал.


IT>Т.е. кандидаты наиболее перспективные, но учиться уже не хотят? Как-то это не стыкуется.


Другие хотят учиться еще меньше.

I>>В каком городе ты работаешь ?


IT>В НуЁрке.


Ну дык о том и речь. В НьюЙорк не попадает 99% тех, с кем приходится сталкиваться в рядовых конторках.

Такое на собеседованиях бывает, что не передать словами. А между тем кого то надо выбрать.

I>>Ага, у вас все кандидаты наук, в какую область ни ткни, хучь медицина, хучь сопромат, так ?


IT>Кандидатов в нашей команде нет. Нет такой необходимости.


Про то и речь. Или не надо, или можно взять готового специалиста. От него будет требование только минимально быть в курсе дел.

Например, так можно подключить математиков, физиков, специалистов по сопромату.

Раньше нужно было сидеть и ждать, когда же мега-специалист напишет задачку на своём фортране или непойми чем и городить огород вокруг этого. Сейчас это не нужно.


IT>Попробуйте у себя создать такую атмосферу, чтобы если даже ваши студенты шли пить пиво, то обсуждали между собой только новые технологии. И процесс обучения так пойдёт, что его трудно будет остановить. Они ещё тебя будут учить


Раньше так примерно и было. На таких проектах, как у нас, это сделать очень сложно, разработка идет на трёх континентах.
Re[14]: Что меня не устраивает в МП в Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.08 20:58
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

KV>>>"Настоящих буйных мало, вот и нету вожаков" (с) В других, более старых языках — их уже вполне достаточно


I>>Почему ты так решил ? Знаю людей, которые уже лет двадцать на Си пишут, а до указателей на функцию им как до небес.


СТ>Гм. Они хелло ворлды пишут? Или лабораторки студентам?


Они пишут всякое, вплоть до заказов из оборонки. Просто госпредприятия. Там работает в несколько раз больше программистов, чем на всех коммерческих конторах вместе взятых.

Хорошо разбираются только отдельные люди, остальные пользуют указатели как им показали.

Указатель на функцию можно и не спрашивать, проверял раньше вот так

void **pUnk = NULL;

pIface->QueryInterface(всякая всячина, pUnk);


Это код который вполне может написать такой специалист.

Вот когда ты в новостях читаешь или смотришь про неудачные запуски Булавы, это оно и есть.
Re[7]: Что меня не устраивает в МП в Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.08 21:03
Оценка: -1
Здравствуйте, alvas, Вы писали:

A>>>Nemerle создает стандартные .Net сборки. Так что достаточно посадить одного инструментальщика.


I>>Я это всё понимаю, теоретически тип-топ.


A>А практически?


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

В итоге получается так — тот, кто имеет базу на низкоуровневых языках-инструментах, например WINAPI или COM, никогда не поймет того, кто пишет на высокоуровневом инструменте без этой базы.

И даже без этого всегда начинаются проблемы с набором людей.

и если на проекте взять и внедрить МП Немерле, то специалистов брать будет просто неоткуда, а если и найдутся, то еще n-месяцев готовить.
Re[10]: Что меня не устраивает в МП в Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.12.08 21:26
Оценка: 2 (1) +2
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>А то, что если понимания не возникнет, то и потребности в макросах на все случаи жизни у него не будет, и будет он писать в C#-like стиле, постепенно вникая в технологию, необходимость и целесообразность применения МП. И учитывая


Разумеется, представь, в C# они тоже так вникают, если человек не освоил интерфейсы, индексеры и итераторы, то странно ждать от него вникания хотя бы в МП не говоря про Немерле.

KV>

KV>По этой причине людям стараются дать технологии, которые не отнимают времени на освоение.


KV>я в упор не понимаю, почему это преподносится как аргумент против МП в Nemerle, когда он явно является аргументом "за"


Это ты решил, что Немерле не отнимает времени на освоение.

Нигде не заметил каких то соображений на счет простоты МП и Немерле.

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

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

Т.е. единства внутри сообщества Немерле просто не будет, будет внутривидовая борьба.

Что то похожее есть в Перле, идеология Перла поощряет волюнтаризм, и тоже самое с Немерле.

Например, на Перле есть вагоны тех, кто любят пользовать всякие неявные феньки.

Другие стараются пользовать наоборот, явные конструкции.

В итоге сообщество состоит минима из двух видов перлистов.

Выливается это в невозможность должным образом сопровождать перловые проекты.

В Немерле это будет в гораздо большем масштабе.

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

С Немерле этой гарантии нет — сначала, прежде чем прочесть, надо выучить те макросы, которые нагородит конкретное сообщество.
Re[15]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 01.01.09 13:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Нет в природе никаких концепций Шарпа. В начале МС тянул принципы из Явы, потом что-то сами придумали получилось то что мы имеем.

VD> "$" к Перлу тоже отношение не имеет. Скажем в том же MSBuild он во всю используется.

В основе C# 2.0 лежала единая концепция. Была ли эта концепция новой или у кого-то тянутой в данном контексте не суть важно. Судя по приводимым примерам в основе Nemerle единой концепции нет, есть смесь разнородных фич взятых из разных концепций.
Re[16]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 01.01.09 13:35
Оценка:
Здравствуйте, VladD2, Вы писали:

U>>Новые способы решения задач, несколько более оптимальные, но имеющие какие-то недостатки и/или неспособные полностью вытеснить старые способы решения тех же задач должны добавляться в мэйнстримовский язык с большой осторожностью. К сожалению похоже даже разработчики шарпа перестали это понимать.


VD>Разрабочики Шарпа как раз делают полезное дело. Жаль, только, что они не продумывают свои действия с нуля, а идут итеративным путем.


Например, во втором шарпе ввели анонимные делегаты, позволившие декларировать метод внутри функции, а не только на уровне класса. При этом способ записи анонимных делегатов не стал чем-то принципиально новым:

delegate(Point p)
{
  return p.X;
}


Принципиально эквивалентно:

int GetX(Point p)
{
  return p.X;
}


В третьем шарпе добавили лямбы, которые никаких новых возможностей не дали.

p=>p.X


по своим возможностям полностью эквивалентно:

delegate(Point p) {  return p.X; }


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

class Helper
{
  public int GetX(Point p) { return p.X; }
}


а не:

class Helper
{
  public GetX(Point p)=>p.X;
}


Т.е. C# 2.0 был прорывом с массой новых возможностей (дженерики, анонимные делегаты, yield), но с минимальным количеством новых конструкций в языке, т.е. возможности языка резко расширились, а сложность языка почти не увеличилась. C# 3.5 же новых возможностей практически не дал (кроме Extension), зато добавил значительное количество новых конструкций в язык ради экономии на спичках (чуть более лаконичной, но менее интуитивно понятной записи), т.е. возможности языка остались практически прежними, а сложность языка существенно возросла.
Re[10]: Что меня не устраивает в МП в Nemerle
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.01.09 14:01
Оценка:
Здравствуйте, IT, Вы писали:

IT>Бывает, бывает. Есть генерилки, которые вообще не заточены на автоматическую генерацию вроде Custom Tools. С ними нужно повозиться, указать все необходимые параметры и потом раз и сгенерировать.


А еще есть решарпер.
... << RSDN@Home 1.2.0 alpha 4 rev. 1132 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[7]: Что меня не устраивает в МП в Nemerle
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.01.09 14:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не надо называть тех кто выбрал Немерле фанатами. На фоне приверженцев остальных языков Немерлисты выглядят просто ангелами.


Равнятся надо не по другим фанатам, а по тем, кто вообще не является фанатом никакого языка.
... << RSDN@Home 1.2.0 alpha 4 rev. 1132 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[17]: Что меня не устраивает в МП в Nemerle
От: IT Россия linq2db.com
Дата: 01.01.09 19:57
Оценка:
Здравствуйте, Undying, Вы писали:

U>Т.е. C# 2.0 был прорывом с массой новых возможностей (дженерики, анонимные делегаты, yield), но с минимальным количеством новых конструкций в языке, т.е. возможности языка резко расширились, а сложность языка почти не увеличилась.


При этом из-за громоздких конструкций полезность этих фич была близкой к нулевой.

U>C# 3.5 же новых возможностей практически не дал (кроме Extension), зато добавил значительное количество новых конструкций в язык ради экономии на спичках (чуть более лаконичной, но менее интуитивно понятной записи), т.е. возможности языка остались практически прежними, а сложность языка существенно возросла.


При этом новые конструкции позволили в полном объёме задействовать старые фичи и сделать их наконец-то востребованными.
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: Что меня не устраивает в МП в Nemerle
От: IT Россия linq2db.com
Дата: 01.01.09 20:34
Оценка:
Здравствуйте, Ikemefula, Вы писали:

IT>>Т.е. кандидаты наиболее перспективные, но учиться уже не хотят? Как-то это не стыкуется.

I>Другие хотят учиться еще меньше.

Что-то мне в это слабо верится. Мне пришлось поработать на многих проектах во многих конторах, но такой массы тупых кодеров в 90%, о которой ты говоришь, я не видел нигде и никогда. Тупых хватает, но это никогда не было 90%. Даже половины никогда не было. Видимо вы сами умудрились создать такие условия, при которых к вам идут только тупые. Плюс, в дальнейшем, чтобы удерживать такой уровень, нужно эту тупизну культивировать, что, судя по твоему твёрдому убеждению, что так всегда и везде, вашей конторе удаётся.

В общем, проблему тебе надо искать не во вселенской тупизне кодеров, а в твоей собственной конторе.

I>>>В каком городе ты работаешь ?

IT>>В НуЁрке.
I>Ну дык о том и речь. В НьюЙорк не попадает 99% тех, с кем приходится сталкиваться в рядовых конторках.

НуЁрк ничем не отличается от других мест. Определённое количество тупых индусов ходит по кругу от одной конторы к другой и ищет работу, создавая тем самым иллюзию перенасыщенности рынка. А нормальные девелоперы, коих большинство, сидят по своим конторам и работают свою работу. Если такой специалист появляется на рынке, то улетает он за неделю. А чаще всего такие ребята проходят мимо рынка, через знакомых или прикормленных рекрутеров.

I>Такое на собеседованиях бывает, что не передать словами. А между тем кого то надо выбрать.


Вот! Выделенное и есть ваша ошибка. Нельзя брать кого-то. Нужно брать специалиста, которые будет выполнять свои функции, а не заполнять клеточку в штатном расписании.

IT>>Попробуйте у себя создать такую атмосферу, чтобы если даже ваши студенты шли пить пиво, то обсуждали между собой только новые технологии. И процесс обучения так пойдёт, что его трудно будет остановить. Они ещё тебя будут учить


I>Раньше так примерно и было. На таких проектах, как у нас, это сделать очень сложно, разработка идет на трёх континентах.


Перенесите всю разработку на один, в чём проблема?
Если нам не помогут, то мы тоже никого не пощадим.
Re[17]: Что меня не устраивает в МП в Nemerle
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.01.09 22:37
Оценка:
Здравствуйте, Undying, Вы писали:

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


U>>>Новые способы решения задач, несколько более оптимальные, но имеющие какие-то недостатки и/или неспособные полностью вытеснить старые способы решения тех же задач должны добавляться в мэйнстримовский язык с большой осторожностью. К сожалению похоже даже разработчики шарпа перестали это понимать.


VD>>Разрабочики Шарпа как раз делают полезное дело. Жаль, только, что они не продумывают свои действия с нуля, а идут итеративным путем.


U>Например, во втором шарпе ввели анонимные делегаты, позволившие декларировать метод внутри функции, а не только на уровне класса. При этом способ записи анонимных делегатов не стал чем-то принципиально новым:


U>
U>delegate(Point p)
U>{
U>  return p.X;
U>}
U>


U>Принципиально эквивалентно:


U>
U>int GetX(Point p)
U>{
U>  return p.X;
U>}
U>


Не эквивалентно. Первый вариант допускает замакания.

U>В третьем шарпе добавили лямбы, которые никаких новых возможностей не дали.


U>
U>p=>p.X
U>


U>по своим возможностям полностью эквивалентно:


U>
U>delegate(Point p) {  return p.X; }
U>


Совсем неверно. Лямбда может быть как делегатом, так и Expression Tree. Причем вторая возможность оказалась гораздо более востребованной.


U>Т.е. C# 2.0 был прорывом с массой новых возможностей (дженерики, анонимные делегаты, yield), но с минимальным количеством новых конструкций в языке, т.е. возможности языка резко расширились, а сложность языка почти не увеличилась. C# 3.5 же новых возможностей практически не дал (кроме Extension), зато добавил значительное количество новых конструкций в язык ради экономии на спичках (чуть более лаконичной, но менее интуитивно понятной записи), т.е. возможности языка остались практически прежними, а сложность языка существенно возросла.


Вы здесь путаете сами возможности и их полезность для программиста. yield появился в C# 2.0, но был практически невостребован, а с появлением Linq это стало чуть ли не главной фичей языка. Аналогично с анонимными делегатами. Лямбды в третьем шарпе добавили "человеческое лицо делегатам", а Linq сделал это востребованным.
Re[10]: Что меня не устраивает в МП в Nemerle
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.01.09 22:59
Оценка:
Здравствуйте, IT, Вы писали:

IT>Что-то мне в это слабо верится. Мне пришлось поработать на многих проектах во многих конторах, но такой массы тупых кодеров в 90%, о которой ты говоришь, я не видел нигде и никогда. Тупых хватает, но это никогда не было 90%.


Отбор идет примерно 1 из 10, вот это оно и есть. И то, многих приходится брать условно, интерес может взять и пропасть. Бывает и такое.

> Видимо вы сами умудрились создать такие условия, при которых к вам идут только тупые.


Мы не влияем на контингент на рынке труда к сожалению.

IT>В общем, проблему тебе надо искать не во вселенской тупизне кодеров, а в твоей собственной конторе.


Организуй фирму девелоперскую человек на 100 где нибудь в странах бывшего СССР, только не в Москве и не в Питере.

Я посмотрю на твой опыт.

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

Посему стоит брать не сильных людей, а тех, кто задержится подольше.

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

Тем не менее рынок труда нужно учитывать.

I>>>>В каком городе ты работаешь ?

IT>>>В НуЁрке.
I>>Ну дык о том и речь. В НьюЙорк не попадает 99% тех, с кем приходится сталкиваться в рядовых конторках.

IT>НуЁрк ничем не отличается от других мест.


Это только кажется. Вот ты часто видишь людей, которые на С++ длину строки определяют sizeof ?

Я таких в свое время видел вагоны. И такие люди работают, не у нас правда.

I>>Такое на собеседованиях бывает, что не передать словами. А между тем кого то надо выбрать.


IT>Вот! Выделенное и есть ваша ошибка. Нельзя брать кого-то. Нужно брать специалиста, которые будет выполнять свои функции, а не заполнять клеточку в штатном расписании.


Разумеется, берётся человек, который минимально может справляться. При этом его уровень отстаёт от желаемого заметно.

И такое не у одной нашей конторы. Это повсеместно.

I>>Раньше так примерно и было. На таких проектах, как у нас, это сделать очень сложно, разработка идет на трёх континентах.


IT>Перенесите всю разработку на один, в чём проблема?


Есть ряд неразрешаемых в разумный срок проблем, например со специалистами должного уровня и кастомерами.

Наши вузы таких просто не готовят. Но по любому, такие спецы обычно сидят в паре с кастомерами, а это опять такие другие континенты.
Re[11]: Что меня не устраивает в МП в Nemerle
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.01.09 08:42
Оценка: +2
Здравствуйте, Ikemefula, Вы писали:

I>Посему стоит брать не сильных людей, а тех, кто задержится подольше.

I>Разумеется, берётся человек, который минимально может справляться. При этом его уровень отстаёт от желаемого заметно.

Ну вот вы сами описали ваши проблемы. Получается не существует "вселенской тупизны кодеров", вы сами её локально у себя создаете.
Re[18]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 02.01.09 08:59
Оценка:
Здравствуйте, IT, Вы писали:

IT>При этом из-за громоздких конструкций полезность этих фич была близкой к нулевой.

IT>При этом новые конструкции позволили в полном объёме задействовать старые фичи и сделать их наконец-то востребованными.

Востребованность была низкой из-за того, что во втором фрамеворке не было стандартных библиотек, которые бы использовали эти фичи. Даже аналога System.Linq.Enumerable на статических функциях не было, нормально были поддержаны только Generic'и. При этом никто не мешал написать библиотеки заточенные под новые фичи самому, к примеру, Darkgray такие библиотеки 3-4 года назад написать не поленился, соответственно в его проектах и анонимные делегаты, и yield'ы все это время использовались очень активно, резко увеличивая скорость и качество разработки.
Re[18]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 02.01.09 08:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не эквивалентно. Первый вариант допускает замакания.


Без анонимных делегатов нельзя записать замыкание? А это что по-твоему?

class SomeClass
{
  public SomeClass(int x)
  {
    this.x = x;
  }
  readonly int x;
  public int Calc(int y)
  {
    return x + y;
  }
}

Func<int, int> func = new SomeClass(5).Calc;


Анонимный делегат это декларация метода на уровне функции, а не класса, ничем больше от обычных методов он не отличается, по этому очень прост в освоении.

G>Совсем неверно. Лямбда может быть как делегатом, так и Expression Tree. Причем вторая возможность оказалась гораздо более востребованной.


Да, лямбды усложнили язык больше, чем я думал, оказывается такие записи неэквивалентны:

p => p.X


p => { return p.X; }


Вообще плохо, что не удалось реализовать Expression без добавления в язык такого шаманства. Кстати, Expression вы у себя в проекте для решения каких задач используете?

G>Вы здесь путаете сами возможности и их полезность для программиста. yield появился в C# 2.0, но был практически невостребован, а с появлением Linq это стало чуть ли не главной фичей языка. Аналогично с анонимными делегатами. Лямбды в третьем шарпе добавили "человеческое лицо делегатам", а Linq сделал это востребованным.


Относительно малая востребованность объяснялась тем, что во втором фрамеворке практически не было стандартных библиотек использующих анонимные делегаты и yield'ы, поэтому порог освоения был достаточно высок. Но при этом никто не мешал написать эти библиотеки самому и использовать эти фичи очень активно, я, например, сейчас не представляю как можно обходиться во втором шарпе без анонимных делегатов и yield'ов, у меня процентов 90 кода на их использование завязано.
Re[19]: Что меня не устраивает в МП в Nemerle
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 02.01.09 19:52
Оценка:
Здравствуйте, Undying, Вы писали:

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


G>>Не эквивалентно. Первый вариант допускает замакания.


U>Без анонимных делегатов нельзя записать замыкание? А это что по-твоему?


U>
U>class SomeClass
U>{
U>  public SomeClass(int x)
U>  {
U>    this.x = x;
U>  }
U>  readonly int x;
U>  public int Calc(int y)
U>  {
U>    return x + y;
U>  }
U>}

U>Func<int, int> func = new SomeClass(5).Calc;
U>


Такой код запустите
Func<int, int> func1, func2;
int x = 1;

func1 = new SomeClass(x).Calc;
func2 = y => x + y;

x = 10;

Console.WriteLine(func1(1));
Console.WriteLine(func2(1));


U>Анонимный делегат это декларация метода на уровне функции, а не класса, ничем больше от обычных методов он не отличается, по этому очень прост в освоении.


G>>Совсем неверно. Лямбда может быть как делегатом, так и Expression Tree. Причем вторая возможность оказалась гораздо более востребованной.


U>Да, лямбды усложнили язык больше, чем я думал, оказывается такие записи неэквивалентны:


U>
U>p => p.X
U>


U>
U>p => { return p.X; }
U>

Может быть и эквивалентны, смотря в каком контексте используется.

U>Вообще плохо, что не удалось реализовать Expression без добавления в язык такого шаманства. Кстати, Expression вы у себя в проекте для решения каких задач используете?

Expression сами по себе ни для каких, но экспрешены используются в Linq2SQL/EF и ASP.NET MVC, поэтому приходится с ними сталкиваться.

G>>Вы здесь путаете сами возможности и их полезность для программиста. yield появился в C# 2.0, но был практически невостребован, а с появлением Linq это стало чуть ли не главной фичей языка. Аналогично с анонимными делегатами. Лямбды в третьем шарпе добавили "человеческое лицо делегатам", а Linq сделал это востребованным.


U>Относительно малая востребованность объяснялась тем, что во втором фрамеворке практически не было стандартных библиотек использующих анонимные делегаты и yield'ы, поэтому порог освоения был достаточно высок.

Даже если бы библиотеки были, то без наличия extension методов и анонимных объектов ими практически никто бы не стал пользоваться.

U>Но при этом никто не мешал написать эти библиотеки самому и использовать эти фичи очень активно, я, например, сейчас не представляю как можно обходиться во втором шарпе без анонимных делегатов и yield'ов, у меня процентов 90 кода на их использование завязано.

А пример кода с активным использованием yield'ов можно увидеть?
Re[19]: Что меня не устраивает в МП в Nemerle
От: IT Россия linq2db.com
Дата: 02.01.09 20:34
Оценка:
Здравствуйте, Undying, Вы писали:

U>Востребованность была низкой из-за того, что во втором фрамеворке не было стандартных библиотек, которые бы использовали эти фичи. Даже аналога System.Linq.Enumerable на статических функциях не было, нормально были поддержаны только Generic'и. При этом никто не мешал написать библиотеки заточенные под новые фичи самому, к примеру, Darkgray такие библиотеки 3-4 года назад написать не поленился, соответственно в его проектах и анонимные делегаты, и yield'ы все это время использовались очень активно, резко увеличивая скорость и качество разработки.


Востребованности не было из-за громоздкого синтаксиса. Библиотек, где это можно было использовать было полно. Посмотри тот же List<T>. Только пользоваться этим всем было невозможно. Это, кстати, хорошо говорит о важности выразительности инструментальных средств.
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 02.01.09 20:57
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Такой код запустите

G>
G>int x = 1;

G>func1 = new SomeClass(x).Calc;
G>func2 = y => x + y;

G>x = 10;
G>


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

U>>Анонимный делегат это декларация метода на уровне функции, а не класса, ничем больше от обычных методов он не отличается, по этому очень прост в освоении.


G>Expression сами по себе ни для каких, но экспрешены используются в Linq2SQL/EF и ASP.NET MVC, поэтому приходится с ними сталкиваться.


Т.е. Expression достаточно востребованы, потому что под них уже есть готовые библиотеки в фрамеворке, если бы эти библиотеки пришлось бы писать самим разработчикам востребованность была бы много ниже. С анонимными делегатами и yield'ами же получилось так, что в язык их включили, но готовых библиотек под них не было, поэтому и использовались они не так активно.

G>Даже если бы библиотеки были, то без наличия extension методов и анонимных объектов ими практически никто бы не стал пользоваться.


Например, вот код синхронизации данных с DataGrid'ом:

      DataGridViewSynchronizer linkedElementsGridSynch = new DataGridViewSynchronizer(this.linkedParamGridView);
      linkedElementsGridSynch.DataLink = delegate { return lightLinkedElementsCache.Result; };
      linkedElementsGridSynch.Browser = new SimpleBrowser(
        new SimpleColumn<Guid>("Параметр", delegate(Guid id)
          {
            KeyValuePair<int, int?> aspidId = linkedElements.Result.AspidId[id];
            return DictionaryHlp.GetValueOrDefault(aspidElements.Result.Memo, aspidId, null);
          },
          GridExt.CellBackColor(delegate(object row)
          {
            Guid id = (Guid)row;
            if (!aspidElements.Result.Memo.ContainsKey(id))
              return Color.MistyRose;
            return null;
          }).WithCharWidth(8),
        new SimpleColumn<Guid>("Единица измерения", delegate(Guid id)
        {
          return DictionaryHlp.GetValueOrDefault(linkedElements.Result.AspidMeasureUnit, id);
        },
        delegate(Guid id, object value)
        {
          linkedElements.Result.AspidMeasureUnit[id] = (string)value;
        }).WithCharWidth(10),
      );


Вот код синхронизации двух коллекций:

      List<DataRow> rows = _.From<DataRow>(table.Rows);
      int isFindedItemsCount = 0;
      int isRemoveItemsCount = 0;
      List<string> newItems = new List<string>();

      CollectionSynchronizer.Synchronize<string, DataRow, string>(
        itemNames, delegate(string name) { return name; },
        rows, delegate(DataRow row) { return (string)row[itemNameColumn]; },
        delegate(string newName)
        {
          newItems.Add(newName);
        },
        delegate(DataRow oldRow)
        {
          int browseFound = Convert.ToInt32(oldRow[browseFoundColumn]);
          if (browseFound != 0)
          {
            //pair.Right[browseFoundColumn] = 0;
            isRemoveItemsCount++;
          }
        },
        delegate(string itemName, DataRow row)
        {
          int browseFound = Convert.ToInt32(row[browseFoundColumn]);
          if (browseFound != 1)
          {
            row[browseFoundColumn] = 1;
            isFindedItemsCount++;
          }
        });


Зачем здесь Extensions? А вот без анонимных делегатов такие решения просто невозможны.

G>А пример кода с активным использованием yield'ов можно увидеть?


http://www.rsdn.ru/forum/message/3037674.1.aspx
Автор: Undying
Дата: 27.07.08
Re[20]: Что меня не устраивает в МП в Nemerle
От: Undying Россия  
Дата: 03.01.09 07:30
Оценка:
Здравствуйте, IT, Вы писали:

IT>Востребованности не было из-за громоздкого синтаксиса. Библиотек, где это можно было использовать было полно. Посмотри тот же List<T>. Только пользоваться этим всем было невозможно. Это, кстати, хорошо говорит о важности выразительности инструментальных средств.


И что там в List<T> было? В нем даже нормальной сортировки вроде: Sort<TKey>(Func<TItem, TKey> keyGetter, Func<TKey, TKey, int> keyComparer) не было. Был лишь Sort(Comparison<T> comparison), но понятно, что передавать компарер в виде анонимного делегата дураков нет. В том же string.Join вообще не было перегрузки принимающей анонимный делегат (правда ее и в 3.5 нет).

Собственно о какой поддержке анонимных делегатов во втором фрамеворке может идти речь, если там даже Func не было, его аналог надо было писать самим.
Re[21]: Что меня не устраивает в МП в Nemerle
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 03.01.09 17:26
Оценка:
Здравствуйте, Undying, Вы писали:

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


G>>Такой код запустите

G>>
G>>int x = 1;

G>>func1 = new SomeClass(x).Calc;
G>>func2 = y => x + y;

G>>x = 10;
G>>


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

В первой строчке будет выведено 2, во второй 11. Повторите такое поведение без замыканий.

U>>>Анонимный делегат это декларация метода на уровне функции, а не класса, ничем больше от обычных методов он не отличается, по этому очень прост в освоении.


G>>Expression сами по себе ни для каких, но экспрешены используются в Linq2SQL/EF и ASP.NET MVC, поэтому приходится с ними сталкиваться.


U>Т.е. Expression достаточно востребованы, потому что под них уже есть готовые библиотеки в фрамеворке, если бы эти библиотеки пришлось бы писать самим разработчикам востребованность была бы много ниже.

Это лишь означает что все задачи, для которых мне понадобятся экспрешены уже решены в существующих библиотеках.
Кстати в первых превью ASP.NET MVC сне приходилось немало ковыряться с экспрешенами, ибо существующий код не делал то что надо было.


U>С анонимными делегатами и yield'ами же получилось так, что в язык их включили, но готовых библиотек под них не было, поэтому и использовались они не так активно.

yield без extension-методов мало дает преимуществ при разработке, ибо код с кучами вложенных вызово читается ужасно.

G>>Даже если бы библиотеки были, то без наличия extension методов и анонимных объектов ими практически никто бы не стал пользоваться.


U>Например, вот код синхронизации данных с DataGrid'ом:


U>
U>//код поскипан
U>


U>Вот код синхронизации двух коллекций:


U>
U>//код поскипан
U>


U>Зачем здесь Extensions? А вот без анонимных делегатов такие решения просто невозможны.

Как раз без анонимных делегатов здесь можно обойтись. У вас передается множество согласованных между собой делегатов, что семантически эквивалентно передаче ссылки на интерфейс.
А эекстеншены в таком коде не нужны.

G>>А пример кода с активным использованием yield'ов можно увидеть?

U>http://www.rsdn.ru/forum/message/3037674.1.aspx
Автор: Undying
Дата: 27.07.08

yield используется только для сокращения записи енумератора. Да и не очень активно оно используется.
Мне гораздо больше понравилось как асинхронные задачи реализованы в F#
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.