Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.09.09 17:18
Оценка: 35 (6) -1
Собственно в развитии вот этого обсуждения
Автор: VladD2
Дата: 30.07.09
я таки взялся за написание развернутого введения в Nemerle.
Вот что из этого вышло (первая часть):
http://www.rsdn.ru/article/Nemerle/TheNemerleLanguage.xml
Автор(ы): Владислав Юрьевич Чистяков
Дата: 24.09.2009
Эта статья открывает цикл статей, посвященных обучению языку программирования Nemerle. Имеющиеся статьи об этом языке предполагают, что программист хорошо знаком с Microsoft .NET Framework и языком программирования C#. Данный же цикл статей, напротив, рассчитан на людей, не знакомых ни с тем, ни с другим, и может быть даже применен для изучения программирования как такового. Новичкам в программировании может потребоваться помощь людей, уже знающих программирование.


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

Небольшое пояснение. Я принципиально старался построить изложение так чтобы не разжевывать тонкие моменты и не вдаваться в подробности, а сосредоточиться на том, чтобы как можно скорее позволить человеку писать пусть и простые но полезные программы. По этому просьба не высказать претензии к поверхности изложения. Это концептуальное решение, а не просчет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Статья "Введение в Nemerle" - по критикуйте
От: WolfHound  
Дата: 24.09.09 20:03
Оценка: 42 (1)
Здравствуйте, VladD2, Вы писали:

Кстати, в чем я искренне убежден, так это в том, что хороший программист должен знать не менее 3 языков программирования. Так что если перед вами стоит выбор, какой язык изучать, то изучите любой, а потом изучите еще парочку . Причем желательно, чтобы языки максимально отличались друг от друга. Я бы посоветовал познакомиться со следующими языками: Nemerle, Haskell, C++, Prolog, Erlang и Ruby. После этого все остальные языки покажутся вам диалектами оных.

Как минимум refal(весь язык это одно сплошное сравнение с образцом), forth(форте на программист старый он), agda2(зависимые типы) и scheme(continuation) не покажутся.
А я еще про совсем экзотику вспоминать не начал.

9. Nemerle полностью совместим с C# и VB на уровне библиотек. Все компоненты и библиотеки, доступные в .Net, можно использовать из Nemerle. Более того, любую библиотеку Nemerle можно использовать из C# или VB без переделок и каких-то мучений, как это часто бывает с языками, адаптируемыми к платформе, а не разрабатываемыми для нее.

Выделенное не правда.
Если в публичном контракте торчат типы данных специфичные для немерле то в C# будет то еще мучение.
А макры в C# вообще ни каким боком не пролезут.

8. Наличие интеллектуальной IDE (модуля расширения для Microsoft Visual Studio). Поддержка IDE позволяет резко упростить процесс написания и чтения (понимания) кода.

14. Для Nemerle имеется поддержка Microsoft Visual Studio (интегрированной среды разработки), которая очень сильно облегчает использование языка, что особенно актуально для новичков.

Что-то тут лишнее.

Чтобы можно было использовать одинаковые имена и при этом не происходило путаницы, были придуманы пространства имен и модули (точнее типы, но об этом позже).

Функции могут объявляться только в типах (таких, как модуль) и внутри других функций.

Кто на ком стоял?
Еслиб я не знал о чем разговор то

1 < 2 => true1 < 1 => false2 < 1 => false

пробелов не хватает.
А еще лучше засунуть эти выражения в разные столбцы таблицы.

Причем в метаинформации программы данное имя будет храниться так, как будто у него нет префикса «@».

Нужно пояснить что такое метаинформация.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.09.09 20:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>

WH>Кстати, в чем я искренне убежден, так это в том, что хороший программист должен знать не менее 3 языков программирования. Так что если перед вами стоит выбор, какой язык изучать, то изучите любой, а потом изучите еще парочку . Причем желательно, чтобы языки максимально отличались друг от друга. Я бы посоветовал познакомиться со следующими языками: Nemerle, Haskell, C++, Prolog, Erlang и Ruby. После этого все остальные языки покажутся вам диалектами оных.

WH>Как минимум refal(весь язык это одно сплошное сравнение с образцом), forth(форте на программист старый он), agda2(зависимые типы) и scheme(continuation) не покажутся.
WH>А я еще про совсем экзотику вспоминать не начал.

На мой взгляд все перечисленное экзотика. К тому же концепции перечисленные тобой как раз намного проще освоить, если предварительно изучить Немерле. А так многие языки имеют уникальные концепции. Тот же хаскель имеет классы типов. Эрланг процессы. Ну, и т.п. Важно что люди не будут учить их скопом. Им достаточно будет понять именно отдельные (весьма не сложные по отдельности) концепции.
В прочем, утверждение можно смягчить заменив "все" на большую часть.

WH>

WH>9. Nemerle полностью совместим с C# и VB на уровне библиотек. Все компоненты и библиотеки, доступные в .Net, можно использовать из Nemerle. Более того, любую библиотеку Nemerle можно использовать из C# или VB без переделок и каких-то мучений, как это часто бывает с языками, адаптируемыми к платформе, а не разрабатываемыми для нее.

WH>Выделенное не правда.
WH>Если в публичном контракте торчат типы данных специфичные для немерле то в C# будет то еще мучение.
WH>А макры в C# вообще ни каким боком не пролезут.

Согласен. Надо переформулировать иначе. Что-то типа "Весьма не сложно создавать библиотеки которые будут выглядить как родные в языках ...".

WH>

WH>8. Наличие интеллектуальной IDE (модуля расширения для Microsoft Visual Studio). Поддержка IDE позволяет резко упростить процесс написания и чтения (понимания) кода.

WH>14. Для Nemerle имеется поддержка Microsoft Visual Studio (интегрированной среды разработки), которая очень сильно облегчает использование языка, что особенно актуально для новичков.

WH>Что-то тут лишнее.

+1 Сам заметил, но было уже поздно.

WH>

WH>Чтобы можно было использовать одинаковые имена и при этом не происходило путаницы, были придуманы пространства имен и модули (точнее типы, но об этом позже).

WH>Функции могут объявляться только в типах (таких, как модуль) и внутри других функций.

WH>Кто на ком стоял?
WH>Еслиб я не знал о чем разговор то

А вот тут я не понял, что ты не понял. Как еще это можно объяснить? Да еще и людям не имевшим к этому никакого отношения...

WH>

WH>1 < 2 => true1 < 1 => false2 < 1 => false

WH>пробелов не хватает.
WH>А еще лучше засунуть эти выражения в разные столбцы таблицы.

Уже так и сделал. Просто пока новую версию не залили. Это проблемы нашего обработчика статей. Он попросту убивает концы строк.

WH>

WH>Причем в метаинформации программы данное имя будет храниться так, как будто у него нет префикса «@».

WH>Нужно пояснить что такое метаинформация.

ОК. Сделаем ссылку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Статья "Введение в Nemerle" - по критикуйте
От: Рысцов Денис  
Дата: 24.09.09 20:17
Оценка: 1 (1)
Мне понравилось, но есть одно замечание в статье ни разу не упоминается ООП, хотя есть даже примеры макросов, локальных функций и pattern matching'а. У человека, который впервые читает про язык может сложиться впечатление, что Nemerle функциональный язык с поддержкой макросов — другой про сравнению с C# и Java, как, например, F#. И поэтому у него может возникнуть вопрос, зачем ему отвлекаться на язык, который не будет иметь ничего общего с тем, с чем ему придется иметь дело на работе. Я бы, наверное, подправил 16 причин, написав, что Nemerle такой же язык как C# и Java, в том смысле, что он так же поддерживает ООП, как и они.
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.09.09 20:27
Оценка:
Здравствуйте, Рысцов Денис, Вы писали:

РД>Мне понравилось, но есть одно замечание в статье ни разу не упоминается ООП, хотя есть даже примеры макросов, локальных функций и pattern matching'а.


Это не совсем так. В самом начале сказано:

Язык Nemerle задумывался как язык программирования высокого уровня, поддерживающий объектно-ориентированное программирование, функциональное программирование и метапрограммирование.


В прочем, согласен, что пропустить не сложно.

РД> У человека, который впервые читает про язык может сложиться впечатление, что Nemerle функциональный язык с поддержкой макросов — другой про сравнению с C# и Java, как, например, F#.


Дык в F# с ООП тоже все в порядке .
А с впечатлением не ясно, что делаеть. Давать ООП на начальной стадии обучения, на мой взгляд, неправильно.
Да и говорить об ООП можно только тем кто уже понимает это.
Возможно нужно сделать врезку или еще как-то успокоить тех кто знает об ООП и может посчитать, что язык его поросту не содержит.
Тут как раз мне требуется "помощь зала".

РД> И поэтому у него может возникнуть вопрос, зачем ему отвлекаться на язык, который не будет иметь ничего общего с тем, с чем ему придется иметь дело на работе. Я бы, наверное, подправил 16 причин, написав, что Nemerle такой же язык как C# и Java, в том смысле, что он так же поддерживает ООП, как и они.


Это можно. Но в самом начале ведь и так сказано:

Прародителями языка являются C#, ML и LISP. Пожалуй, Nemerle ближе всего к C#. Хорошо знакомый с C# программист может, прочитав пару вводных статей и потратив два-три дня на эксперименты, начать писать код на Nemerle.

Тут конечно про ООП ни слова, но как раз про похожесть на C# сказано почти то что ты предлагаешь.
Ладно, подумаем, что можно добавить про ООП в "16 причин".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Статья "Введение в Nemerle" - по критикуйте
От: Pavel Dvorkin Россия  
Дата: 25.09.09 02:42
Оценка:
Здравствуйте, VladD2, Вы писали:

Дочитал более чем до середины (увы, ухожу на лекцию) и так и не понял одно

def fahrenheitToCelsius(fahrenheit)
{
5.0 / 9 * (fahrenheit — 32)
}

Далее идет предупреждение, которое объясняет, куда девался return. Это все хорошо, но что будет если внутри этой fahrenheitToCelsius будет 2 или более выражения ? Или так вообще нельзя ? ИМХО об этом следовало бы написать тут же. Вот это меня не устраивает

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


Дойдем-то дойдем, а пока что я не понимаю
With best regards
Pavel Dvorkin
Re: Статья "Введение в Nemerle" - по критикуйте
От: Кэр  
Дата: 25.09.09 21:47
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


Если мы говорим о простоте. И об уровне "для начинающих", то вот этот макрос:

ьacro @&& (e1, e2) 
{
  <[ 
    match ($e1)
    {
      | true  => $e2
      | false => false
    }
  ]>
}

особенно в сочетании вот с этими декларациями:
[assembly: OperatorAttribute("Nemerle.Core", "*",  false, 260, 261)]
[assembly: OperatorAttribute("Nemerle.Core", "/",  false, 260, 261)]
[assembly: OperatorAttribute("Nemerle.Core", "+",  false, 240, 241)]
[assembly: OperatorAttribute("Nemerle.Core", "-",  false, 240, 241)]
[assembly: OperatorAttribute("Nemerle.Core", "<",  false, 210, 211)]
[assembly: OperatorAttribute("Nemerle.Core", ">",  false, 210, 211)]
[assembly: OperatorAttribute("Nemerle.Core", "<=", false, 210, 211)]
[assembly: OperatorAttribute("Nemerle.Core", ">=", false, 210, 211)]
[assembly: OperatorAttribute("Nemerle.Core", "==", false, 165, 166)]
[assembly: OperatorAttribute("Nemerle.Core", "!=", false, 165, 166)]
[assembly: OperatorAttribute("Nemerle.Core", "&&", false, 160, 161)]
[assembly: OperatorAttribute("Nemerle.Core", "||", false, 150, 151)]


То это писец. Начинающим программистам нужно объяснять, что такое логическое И/ИЛИ и рассказывать про правила работы с ними (как их упростить, как построить отрицание и пр). А не объяснять, как вводить в язык эту конструкцию и хардкодить волшебными константами приоритеты.

P.S. Эта иллюстрация очень живой пример, почему я с опаской смотрю на подобные живые языки. В F# вон уже есть примеры, когда вместо того, чтобы объявить метод с нормальным именем — вводят оператор if', который по сути вызывает тот же пользовательский метод, но совершенно не читается в коде. И мне не хочется читать код, который написан на аналоге Perl 0.9 pre-alpha version. И я буду возражать против введения подобных фишек в моем проекте. Не каждый Андерс Хайлсберг, не каждый способен создавать внятный синтаксис. Как только в Немерле появится ЗАЩИТА от использования макросов (понятия не имею как она выглядит — но она должна работать также как и типобезопасность — не давать новичкам отстрелить себе ноги автоматически) — то я первым буду махать флагом, что Немерле может быть стандартом разработки. Ну может быть не сразу флагом начну махать, если сравнивать баг-фикс форс C# и Nemerle — то я лучше подожду, пока макросы в C# 5.0 появятся.
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 07:03
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


PD>Дочитал более чем до середины (увы, ухожу на лекцию) и так и не понял одно


PD>def fahrenheitToCelsius(fahrenheit)

PD>{
PD> 5.0 / 9 * (fahrenheit — 32)
PD>}

PD>Далее идет предупреждение, которое объясняет, куда девался return. Это все хорошо, но что будет если внутри этой fahrenheitToCelsius будет 2 или более выражения ? Или так вообще нельзя ? ИМХО об этом следовало бы написать тут же. Вот это меня не устраивает


Мне кажется, что ты не дочитал всего один раздел до того места где есть ответ на этот вопрос.
В примере с "циклом" как раз неявно демонстрируется как сделать функцию содержащую несколько вычислений.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 07:03
Оценка: :)
Здравствуйте, Кэр, Вы писали:

Кэр>Если мы говорим о простоте. И об уровне "для начинающих", то вот этот макрос:


Кэр>
Кэр>ьacro @&& (e1, e2) 
Кэр>{
Кэр>  <[ 
Кэр>    match ($e1)
Кэр>    {
Кэр>      | true  => $e2
Кэр>      | false => false
Кэр>    }
Кэр>  ]>
Кэр>}

Кэр>

Кэр>особенно в сочетании вот с этими декларациями:...

На счет "в сочетании вот с этими декларациями" я согласен. Но что сложного в макросе?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Статья "Введение в Nemerle" - по критикуйте
От: 0K Ниоткуда  
Дата: 26.09.09 08:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Небольшое пояснение. Я принципиально старался построить изложение так чтобы не разжевывать тонкие моменты и не вдаваться в подробности, а сосредоточиться на том, чтобы как можно скорее позволить человеку писать пусть и простые но полезные программы. По этому просьба не высказать претензии к поверхности изложения. Это концептуальное решение, а не просчет.


Вы даете вводную информацию для тех, кто уже захотел изучать Nemerle. А как быть тем, кто вообще не знает что это такое?

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


Ого! А где доказательство? Чем он лучше C#? Только макросами? Из статьи я ничего этого не узнал Еще были какие-то конструкции (кроме макросов), в которые даже не стал вникать, т.к. полезность их не очевидна.
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 13:20
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Вы даете вводную информацию для тех, кто уже захотел изучать Nemerle. А как быть тем, кто вообще не знает что это такое?


Мне казалось, что вводная информация как раз не требует знаний о том, что такое немреле.

ОК. Что же по твоему нужно было бы давать во вводной информации?
Ну, или другими словами, в чем ошибка?

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


0K>Ого! А где доказательство? Чем он лучше C#? Только макросами? Из статьи я ничего этого не узнал Еще были какие-то конструкции (кроме макросов), в которые даже не стал вникать, т.к. полезность их не очевидна.


В общих словах это сказано и не однократно. Доказательство же можно получить только изучив оба языка и поработав на них какое-то время. Так что новичкам придется поверить на слово или спросить у кого-то другого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: BulatZiganshin  
Дата: 26.09.09 14:25
Оценка: +3
Здравствуйте, VladD2, Вы писали:

на мой взгляд — абсолютно мимо

1. 16 или сколько у тебя там аргументо ЗА — это очень неубедительно выглядит, как психолог говорю. оставь 3. я бы написал о полноценном ФП расширении C#, включая полный вывод типов и макросах, позволяющих переделать синтаксис языка по своему желанию и избавиться от любого boilerplate кода. но я немерле не знаю, так что это так навскидку

2. такое впечатление что ты замахнулся на полноценный учебник по языку аналогичный кернигану. оно реально? я бы посоветовал сделать учебник для знающих C#, и делать в нём ставку на то что можно сделать проще. использовать ФП стиль, ввод типов и т.д. скажем

def faren(x) {x*11}

write(x, faren(x))

и сравните это с объёмом кода на C#. затем — мы же показываем преимущества немерле, а не мучения с ним — реализовать цикл с использованием аналога map. на хаскеле это было бы так — for [1..20] (print.faren). ну и далее примеры, на которых видно что немерле лучше c#

3. насчёт макросов я бы посоветовал привести примеры полезных макросов, а не описывать их реализацию — это достаточно полезный материал, а сначала надо людей заинтересовать в ценности этой фичи


сейчас получается, что статья после невнятной мотивационной части начинает описывать язык в непонятном порядке. похоже, ты просто на скорую руку сначала вводишь минимум механизмов, которые тебе позволят перейти к написанию макросов? при этом содержательная часть статьи совершенно не мотивирует, в ней ничего сногсшибательного в сранвеии с с# нет. выходит, что она будет полезна только тем, кто уже твёрджо решил изучить немерле, но при этом отрезан от всех интернета и вынужден ждать пока ты все 40 статей этого цикла закончишь писать?
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: BulatZiganshin  
Дата: 26.09.09 14:26
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


0K>>Ого! А где доказательство? Чем он лучше C#? Только макросами? Из статьи я ничего этого не узнал Еще были какие-то конструкции (кроме макросов), в которые даже не стал вникать, т.к. полезность их не очевидна.


VD>В общих словах это сказано и не однократно. Доказательство же можно получить только изучив оба языка и поработав на них какое-то время. Так что новичкам придется поверить на слово или спросить у кого-то другого.


может, у тебя просто нет педагогического таланта?
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 15:24
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>на мой взгляд — абсолютно мимо


BZ>1. 16 или сколько у тебя там аргументо ЗА — это очень неубедительно выглядит, как психолог говорю. оставь 3. я бы написал о полноценном ФП расширении C#, включая полный вывод типов и макросах, позволяющих переделать синтаксис языка по своему желанию и избавиться от любого boilerplate кода. но я немерле не знаю, так что это так навскидку


Дык. Ты бы прочел и вопрос бы отпал. Там так и есть. 16 — это врезка, для тех кому не хватает трех "за".

BZ>2. такое впечатление что ты замахнулся на полноценный учебник по языку аналогичный кернигану. оно реально?


Что-то вроде. Но не сразу, а со временем.

BZ>я бы посоветовал сделать учебник для знающих C#, и делать в нём ставку на то что можно сделать проще. использовать ФП стиль, ввод типов и т.д. скажем


Для знающих C# достаточно прочесть те статьи которые есть на сайте.

BZ>3. насчёт макросов я бы посоветовал привести примеры полезных макросов, а не описывать их реализацию — это достаточно полезный материал, а сначала надо людей заинтересовать в ценности этой фичи


Дык что может быть полезнее чем скажем оператор логического "и"?

Собственно идея описывать что-то из стандартной библиотеки взятка как раз у Кернигана. Они с Ричи в частности описывают стандартную библиотеку C. Мне в свое время это очень понравилось. Как бы изучаешь язык и библиотеку одновременно. За одно заглядываешь "под капот".

BZ>сейчас получается, что статья после невнятной мотивационной части начинает описывать язык в непонятном порядке.


Ну, на счет невнятности давай по конкретнее. А то я склонен отнести это суждение на твою предвзятость.

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


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

BZ>при этом содержательная часть статьи совершенно не мотивирует, в ней ничего сногсшибательного в сранвеии с с# нет.


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

BZ>выходит, что она будет полезна только тем, кто уже твёрджо решил изучить немерле, но при этом отрезан от всех интернета и вынужден ждать пока ты все 40 статей этого цикла закончишь писать?


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

В общем, в цели этой работы не входила агитация за советскую власть. В прочем, если качество этой агитации можно поднять, то я с удовольствием поработают над этим разделом. Но агитация должна быть направлена не на тех кто уже знаком с Шапром, так как эта статья точно не для них. А на тех кто или вообще не умеет программировать, или программировал до этого, скажем на Питоне.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 15:31
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

VD>>В общих словах это сказано и не однократно. Доказательство же можно получить только изучив оба языка и поработав на них какое-то время. Так что новичкам придется поверить на слово или спросить у кого-то другого.


BZ>может, у тебя просто нет педагогического таланта?


Может. Только это вряд ли отностися к наличию доказательств которых просто не может быть, так как читатель просто не имеет достаточных знаний, чтобы сделать выбор.

Скажем почему я в свое время начал учить С, а не Паскаль или Бэйсик. Паскль просто не входил в круг интересов тех с кем я тогда общался. А выбор между бэйсиком и С был сделан на чем угодно, но только не на сравнении языков. Выбор был сделан исходя из того, что в свое время мой отец сказал, что С очень перспективный язык (ему тоже это кто-то скзал), и потому, что мои первые эксперементы с Бэйсиком не дали нужных результатов. Мне был нужен быстрый вывод на экран, а Бэйсик без приседаний выводил информацию только в графическом режиме, что было медленно на ХТ-ишках. Сегодня я понимаю, что проблемы с выводом на экран были от недостатка информации, а не от того, что были какие-то фатальные недостатки в бэйсике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: Кэр  
Дата: 26.09.09 16:34
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>На счет "в сочетании вот с этими декларациями" я согласен. Но что сложного в макросе?


Сложного ничего. Просто для новичков конструкция if ( a && b ) и дальнейшее использование намного понятнее этюда, как сделать оператор логического "и" через паттерн матчинг. Для новичков надо сказать, что есть такой оператор, среди базовых макросов и ехать дальше. Новички не должны создавать очевидную базу языка. Это не в их компетенции. Это не то, что им доверят делать на боевых проектах.
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 16:43
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Сложного ничего. Просто для новичков конструкция if ( a && b ) и дальнейшее использование намного понятнее этюда, как сделать оператор логического "и" через паттерн матчинг. Для новичков надо сказать, что есть такой оператор, среди базовых макросов и ехать дальше. Новички не должны создавать очевидную базу языка. Это не в их компетенции. Это не то, что им доверят делать на боевых проектах.


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

Возможно я и перемудрил в данном случае. Тут нужно на "кошках" экспериментировать, т.е. смотреть на реакцию тех кто действительно не знаком с программированием. Уверен, что те кто знали хотя бы какой-нибудь язык до чтения этого дела и так разобрались.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Статья "Введение в Nemerle" - по критикуйте
От: BulatZiganshin  
Дата: 26.09.09 16:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В общем, в цели этой работы не входила агитация за советскую власть. В прочем, если качество этой агитации можно поднять, то я с удовольствием поработают над этим разделом. Но агитация должна быть направлена не на тех кто уже знаком с Шапром, так как эта статья точно не для них. А на тех кто или вообще не умеет программировать, или программировал до этого, скажем на Питоне.


я не верю в то что такая аудитория заинтересуется немерле. попробуй найти хоть одного такого человека
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.09 16:49
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


Я видел таких людей в живую. Кроме того в обсуждении
Автор: VladD2
Дата: 30.07.09
проскакивали такие голоса. В прочем, убеждать не буду. Не веришь, ну и ладно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Статья "Введение в Nemerle" - по критикуйте
От: Mamut Швеция http://dmitriid.com
Дата: 28.09.09 14:41
Оценка: 3 (2) +1
VD> Большая просьба высказывать отклики и пожелания. При этом прошу быть конструктивными и не устраивать очередной холивар.

ИМХО, Немерле мешает то, что на нем killer-проекта. Чтобы можно было сказать, что, мол, например, на N было реализовано то-то и то-то, что нигде мире просто нет, и сделано это было всего 5-ю строками кода.

После этого можно хоть всю статью посвятить только написанию hellow-world'а, и все равно языком заинтересуются

А тут — не цепляет что-то. Да, язык класный. Да, прекрасно сочетает, казалось бы, несочетаемое... Но вот неинтересно его изучать

Это все ИМХО, естественно
avalon 1.0rc2 rev 295, zlib 1.2.3 (01.08.2009 02:47:12 EEST :z)(Qt 4.5.1)


dmitriid.comGitHubLinkedIn
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.09 17:26
Оценка:
Здравствуйте, Mamut, Вы писали:

M>ИМХО, Немерле мешает то, что на нем killer-проекта.


Ну, создай его. Лично мне это не интересно. Мне вообще не нужны киллеры чтобы что-то понять и оценить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.09.09 19:36
Оценка:
Здравствуйте, VladD2, Вы писали:

M>>ИМХО, Немерле мешает то, что на нем killer-проекта.


VD>Ну, создай его. Лично мне это не интересно.


Однако. Ну, по крайней мере честно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.09 20:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Ну, создай его. Лично мне это не интересно.


AVK>Однако. Ну, по крайней мере честно.


Что честно? То что я не хочу создавать киллеров? Дык это не моя идея.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.09.09 20:24
Оценка: +5
Здравствуйте, VladD2, Вы писали:

VD>Что честно? То что я не хочу создавать киллеров? Дык это не моя идея.


Ну, понимаешь — kiler app практически единственный шанс Немерле стать хоть сколько нибудь популярным. Так что твои слова фактически равносильны признанию, что сложившийся статус кво тебя устраивает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 30.09.09 07:34
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, понимаешь — kiler app практически единственный шанс Немерле стать хоть сколько нибудь популярным. Так что твои слова фактически равносильны признанию, что сложившийся статус кво тебя устраивает.


А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?
хотя с другой стороны вот для (OCa)ML есть MLDonkey — типа killer app... и что?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 07:47
Оценка: +3
Здравствуйте, Denom, Вы писали:

D>А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?


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

D>хотя с другой стороны вот для (OCa)ML есть MLDonkey — типа killer app... и что?


У них тоже компиляторы в основном на самих себе и написаны, плюс немало компиляторов других языков.
ML не очень-то и нужен killer app они и так широко применяются в университетах и вообще академической среде, у немерле этого нет, поэтому именно killer app мог бы сильно поднять популярность.
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.09.09 09:53
Оценка: +1
Здравствуйте, Denom, Вы писали:

D>А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?


Тем, что он никому особо не нужен.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 12:54
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, понимаешь — kiler app практически единственный шанс Немерле стать хоть сколько нибудь популярным. Так что твои слова фактически равносильны признанию, что сложившийся статус кво тебя устраивает.


Фигня все это. Где скажем, эти клиллеры у шарпа, питона, PHP в конце концов?
Вот чего точно не бывает, так это чтобы язык с историей в 2-3 года вдруг стал супер-популярным и при этом в его раскрутку не было вложено кучи мегабаксов.
Даже Шарп раскручивался многие годы. И это при том, что он был компией явы, и в его раскрутку вкладывались сумашедшие деньги.

Думаю, что реально людей больше смущает отсутствие гарантированного будущего, качественной реализации IDE и различных дизайнеров. Будь все это, многие отбросили бы свои предрассудки.

На все на это нужно время. Без бабла времени нужно больше. Например, Руби, для которого можно сказать, что есть киллер-апп (Рельсы) начал появился где-то в начале 90-ых прошлого века, а стал популярным только в начале этого века, то есть через 10 лет. Питон появился в 80-ые и тоже стал известен только в конце 90-ых.

Так что я смотрю на проблему под совершенно другим углом. Мне нравится этот язык больше чем другие. Причем не потому, что это идеальный язык, а потому-что он лучше для меня (на данном этапе) по совокупности причин. Посему я буду стараться способствовать его развитию и распространению. Но я не могу сделать все. Я могу сделать то что могу. И я делаю это. Я развиваю IDE и пишу статьи об языке. Ну, а киллеры пускай делает кто-то другой.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 14:48
Оценка: 3 (1)
Здравствуйте, Denom, Вы писали:

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


AVK>>Ну, понимаешь — kiler app практически единственный шанс Немерле стать хоть сколько нибудь популярным. Так что твои слова фактически равносильны признанию, что сложившийся статус кво тебя устраивает.


D>А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?

D>хотя с другой стороны вот для (OCa)ML есть MLDonkey — типа killer app... и что?

А в том-то и дело, что людям нужна какой-то примитивщина которую они могут осознать.
Помнишь сценку из "Место встречи изменить нельзя" где Шарапов на просьбу "с бацать что-нибудь" сыграл Шубрета? На это ему сказали, что — "так любой дурак может, а ты нам Мурку сыграй". Вот тут та же фигня.

Так что наличие таких предположений как компилятор современного языка или система автоматической проверки доказательств теорем (написанная на Немерле одним из авторов языка) никого не интересует. Более того каждому хочется что-то своем. Кому-то аналог Рельс. Кому-то еще что-то. Так что когда появится некий киллер-апп, то кто-то обязательно скажет — "да это все фигня...".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 14:49
Оценка:
Здравствуйте, FR, Вы писали:

FR>ML не очень-то и нужен killer app они и так широко применяются в университетах и вообще академической среде, у немерле этого нет, поэтому именно killer app мог бы сильно поднять популярность.


Ага. Оберны и Лиспы тоже в универах распространены. Толку только от этого нет никакого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 14:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

D>>А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?


AVK>Тем, что он никому особо не нужен.


Дык основной части людей вообще ничего не нужно. Им нужна машинка по печати денег, или просто мешок денег.
Ну, и что с того?

Какие киллеры есть у шарпа?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: kkolyan33  
Дата: 30.09.09 15:17
Оценка:
Здравствуйте, VladD2, Вы писали:

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


D>>>А чем компилятор написанный сам на себе (+ все макросы типа aop, concurrency) не killer app?


AVK>>Тем, что он никому особо не нужен.


VD>Дык основной части людей вообще ничего не нужно. Им нужна машинка по печати денег, или просто мешок денег.

VD>Ну, и что с того?

VD>Какие киллеры есть у шарпа?


Мокрософт
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 15:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Фигня все это. Где скажем, эти клиллеры у шарпа, питона, PHP в конце концов?


У питона было http://lwn.net/2001/features/oreilly2001/GuidoJimInterview.php3
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: SmbdRsdn23  
Дата: 30.09.09 15:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Какие киллеры есть у шарпа?

.NET Framework.
Судя по предоставленным Microsoft исходникам огромная его часть написана на C#.
И кто скажет, что .NET Framework это не киллерапп?
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 15:47
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Фигня все это. Где скажем, эти клиллеры у шарпа, питона, PHP в конце концов?


FR>У питона было http://lwn.net/2001/features/oreilly2001/GuidoJimInterview.php3


Что было то? Интервью с автором, что ли?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 16:02
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Что было то? Интервью с автором, что ли?


Угу в котором Zope подается как killer app
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 16:14
Оценка: +1 :)
Здравствуйте, SmbdRsdn23, Вы писали:

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


VD>>Какие киллеры есть у шарпа?

SR>.NET Framework.

Ну, ты конечно молодец. Но этот "киллер" во-первых на половину (а может и больше) написан на С++ (весь рантайм, часть библиотек и компиляторы), а во-вторых он есть и у Nemerle (а так же у всех остальных языков).

SR>Судя по предоставленным Microsoft исходникам огромная его часть написана на C#.

SR>И кто скажет, что .NET Framework это не киллерапп?

Да кто угодно. Думаю долго ждать не придется. Ау... Народ... ;)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 16:16
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Что было то? Интервью с автором, что ли?


FR>Угу в котором Zope подается как killer app


В моих представлениях клилер-апп — это что-то крутое чего нет у других и о чем слышал каждый младенец. Вот скажем Рельсы подходят к этому определению. А что такое Zope? Я и не слышал о нем ничего. :xz:
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 16:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В моих представлениях клилер-апп — это что-то крутое чего нет у других и о чем слышал каждый младенец. Вот скажем Рельсы подходят к этому определению. А что такое Zope? Я и не слышал о нем ничего.


Я тогда был очень далек и от питона и от веба, и все равно слышал.
Думаю если учесть размер тогдашнего веба и сегодняшнего было вполне близко к рельсам.
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 17:23
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я тогда был очень далек и от питона и от веба, и все равно слышал.


Знаешь как отличить очень известных людей, от обычных?
Если о ком-то знаешь ты и твой друг, а я не знаю, то это обычный человек. А вот, если о ком-то знаем мы все, то это действительно известный человек.

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


Не соглашусь. Скажем у Скалы есть Лифт. Он наверно лучше рельсов. И что с того? А ровным счетом ничего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.09.09 17:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Какие киллеры есть у шарпа?


Шарпу не нужны киллеры, у него есть МС.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.09.09 17:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Фигня все это. Где скажем, эти клиллеры у шарпа


Про шарп я уже писал

VD>, питона, PHP


Их до попы.

VD>Вот чего точно не бывает, так это чтобы язык с историей в 2-3 года вдруг стал супер-популярным и при этом в его раскрутку не было вложено кучи мегабаксов.


Кто вложил кучу мегабаксов в ПХП?

VD>Так что я смотрю на проблему под совершенно другим углом.


Ну так и я об этом. В твоем угле статус кво тебя устраивает. Ничего не имею против.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.09.09 17:30
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>В моих представлениях клилер-апп — это что-то крутое чего нет у других и о чем слышал каждый младенец.


Ну, это в твоем. А у остальных это такое приложение, которое своей популярностью демонстрирует технологическую состоятельность платформы.
http://en.wikipedia.org/wiki/Killer_application
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 17:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Знаешь как отличить очень известных людей, от обычных?

VD>Если о ком-то знаешь ты и твой друг, а я не знаю, то это обычный человек. А вот, если о ком-то знаем мы все, то это действительно известный человек.

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

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


VD>Не соглашусь. Скажем у Скалы есть Лифт. Он наверно лучше рельсов. И что с того? А ровным счетом ничего.


Угу а в Киеве дядька.
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 18:17
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Какие киллеры есть у шарпа?


AVK>Шарпу не нужны киллеры, у него есть МС.


Дык лет 5 назад было не мало людей спрашивавших "а что на этом вашем C# написано", так что это только тебе не нужны.

Ну, а у Nemerle есть RSDN. Не MS конечно, но и не ноль все же :) :shuffle:.

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

Само компиляторостроение оказалось весьма интересным занятием, так что для своей души я, скорее всего, займусь созданием более совершенной — второй — версии Немерле (или просто N2).

Думаю, что рано или поздно IT (или мы вместе с ним) перепишет свой BL-Toolkit-LINQ-провайдер на Nemerle. Он уже не раз жаловался, на то что C# не хватает мощности для этой задачи и что Nemerle (с его сопоставлением с образцом и макросами) тут был бы просто идеален. Это может наглядно продемонстрировать на сколько можно сократить объем исходников и повысить уровень кода. Может это кто-то и сочтет ниллерапэпой.

Возможно когда-то руки дойдут и до сайта. Фрэймворк который будет разработан для этого на базе все того же BL-Toolkit тоже можно (наверно) будет назвать киллерапэпой. Но создание киллеров точно не будет самоцелью. Просто на Nemerle такие задачи решаются лучше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 18:21
Оценка: :))
Здравствуйте, AndrewVK, Вы писали:

AVK>Про шарп я уже писал


Ага. Что такового нет.

VD>>, питона, PHP


AVK>Их до попы.


Да ну? Их ровно столько же как и для шарпа — 0.

VD>>Вот чего точно не бывает, так это чтобы язык с историей в 2-3 года вдруг стал супер-популярным и при этом в его раскрутку не было вложено кучи мегабаксов.


AVK>Кто вложил кучу мегабаксов в ПХП?


Ему уже много лет. В нем заинтересованы все никс-провацдеры. Он нашел свою нишу.
Киллеров у него нет. Пишутся на нем, большей частью, двухстраничные сайты с гостевухами и форумами BB-чтотам.

VD>>Так что я смотрю на проблему под совершенно другим углом.


AVK>Ну так и я об этом. В твоем угле статус кво тебя устраивает. Ничего не имею против.


Ну, тогда погоди лет пять. Придет и популярность.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 18:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, это в твоем. А у остальных это такое приложение, которое своей популярностью демонстрирует технологическую состоятельность платформы.

AVK>http://en.wikipedia.org/wiki/Killer_application

У тебя очень своеобразный перевод. Попробуй ка еще раз, но более дословно:

A killer application (commonly shortened to killer app), in the jargon of computer programmers and video gamers, has been used to refer to any computer program that is so necessary or desirable that it proves the core value of some larger technology, such as computer hardware like a gaming console, operating system or other software. A killer app can substantially increase sales of the platform on which it runs.


Кстати, в этом смысле компилятор действительно прекрасно подходит. Он демонстрирует, что сложный софт можно писать значительно проще.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 18:30
Оценка:
Здравствуйте, FR, Вы писали:

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

FR>Тогда Zope вполне был событием.

А в этом году? А я не слышал про Zope до твоего сообщения. И чесно говоря даже не интересно узнавать, что это такое.
Ссылки же на рельсы есть в половине статей посвященных разработке для веба.

VD>>Не соглашусь. Скажем у Скалы есть Лифт. Он наверно лучше рельсов. И что с того? А ровным счетом ничего.

FR>Угу а в Киеве дядька.

Как тебе угодно. Я это к тому говорил, что повторить успех нельзя. Успех бывает только там где что-то было сделано впервые. Посему даже более совершенный Лифт ни фига не дает с точки зрения продвижения языка. А вот то, что Ява совсем отстала от жизни и то, что на Яве почти нет конкуренции — дает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 30.09.09 18:53
Оценка:
Здравствуйте, VladD2, Вы писали:

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

FR>>Тогда Zope вполне был событием.

VD>А в этом году? А я не слышал про Zope до твоего сообщения. И чесно говоря даже не интересно узнавать, что это такое.

VD>Ссылки же на рельсы есть в половине статей посвященных разработке для веба.

Почитай статьи про web за 2000 — 2001 год, когда Zope выстрелил.

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


Ну Zope и был наверно самым первым из этого класса приложений. И успех у него был и давно прошел.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 30.09.09 19:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>система автоматической проверки доказательств теорем (написанная на Немерле одним из авторов языка)

система дежит на nemerle.org?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 30.09.09 19:49
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>. Пишутся на нем, большей частью, двухстраничные сайты с гостевухами и форумами BB-чтотам.


не факт. у нас на нем пишут корпоративное по, впрчем как и на delphi
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: SmbdRsdn23  
Дата: 30.09.09 20:06
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Но этот "киллер" во-первых на половину (а может и больше) написан на С++ (весь рантайм, часть библиотек и компиляторы),

Судя по предоставляемым Microsoft исходникам львиная доля (даже процентов 90) на C#.
А ту часть, что на C++ они скрывают. Наверно, правильно.
Но даже половина .NET Framework это очень много.
К тому же для библиотек доля C# в разработке еще больше.

А киллерство состоит в том числе и в том, что самую большую библиотеку бесплатно предоставляет именно .NET Framework.
Больше чем библиотеки у Java, Ruby, Php и даже C++.

VD>а во-вторых он есть и у Nemerle (а так же у всех остальных языков).

Если так рассуждать, то и Rails есть не только у Руби, а и у PHP, допустим.
Не удивлюсь, если и из C# его тоже можно использовать.

А вот существенной доли исходников .NET Framework на языке Nemerle нет.
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 20:23
Оценка:
Здравствуйте, SmbdRsdn23, Вы писали:

SR>Судя по предоставляемым Microsoft исходникам львиная доля (даже процентов 90) на C#.


Ты плохо смотрел.

SR>А ту часть, что на C++ они скрывают. Наверно, правильно.


Я так понимаю мы говорим о CLI.
Они скрывают некоторые части вроде GC и кодогенератора. Но оные части имеют замену, которая представлена в исходниках на С++. Смотри внимательнее.

SR>Но даже половина .NET Framework это очень много.

SR>К тому же для библиотек доля C# в разработке еще больше.

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

Собственно если уж на то пошло, то компилятор C# написан на С++, а компилятор Nemerle целиком и полностью на Nemerle. Я не помню сколько занимает код компилятора шарпа, но явно намноно больше чем тоже самое для Nemerle. Так что же компилятор не рассматривается как это самое киллер-апп?
Самое смешное, что написать компилятор немерле на C# намного сложнее. Такое под силу только большой оплачиваемой команде. А вот обратное делается элементарно.

SR>А киллерство состоит в том числе и в том, что самую большую библиотеку бесплатно предоставляет именно .NET Framework.


У Явы она больше. :xz:
Казалось бы .NET Framework. никто не должен использовать, если исходить из этих соображений.

SR>Больше чем библиотеки у Java, Ruby, Php и даже C++.


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

В общем, твоя теория не состоятельна.

SR>А вот существенной доли исходников .NET Framework на языке Nemerle нет.


Ну, их еще и на ВБ и С++ нет. И что? Шарп был языком базовым для платформы просто потому, что дотнет — это клон Явы. В первой версии фрэймворка даже многие классы назывались так же как в яве (ArrayList, например). Так что можно смело скзать, что библиотека первого фрэймворка написана на Яве. Значит ли это что Шарп никуда не гден?
Ах Шарп — это почти та же Ява? Ну, да. Так и Немерле является супертипом Шарпа. Все что можно на шарпе (за иключением ансэфа) можно и на Немерле. Причем на Немерле можно писать практически как на C# 3.0.

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

Так что же вообще доказывает наличие исходников? Да ничего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 20:26
Оценка:
Здравствуйте, Denom, Вы писали:

VD>>. Пишутся на нем, большей частью, двухстраничные сайты с гостевухами и форумами BB-чтотам.


D>не факт. у нас на нем пишут корпоративное по, впрчем как и на delphi


Что не нем пишут то?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 20:29
Оценка:
Здравствуйте, Denom, Вы писали:

VD>>система автоматической проверки доказательств теорем (написанная на Немерле одним из авторов языка)

D>система дежит на nemerle.org?

http://nemerle.org/svn.fx7/trunk/
http://nemerle.org/~malekith/smt/en.html
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: kkolyan33  
Дата: 30.09.09 22:08
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Ты плохо смотрел.


SR>>А ту часть, что на C++ они скрывают. Наверно, правильно.



VD>Собственно если уж на то пошло, то компилятор C# написан на С++, а компилятор Nemerle целиком и полностью на Nemerle. Я не помню сколько занимает код компилятора шарпа, но явно намноно больше чем тоже самое для Nemerle. Так что же компилятор не рассматривается как это самое киллер-апп?

VD>Самое смешное, что написать компилятор немерле на C# намного сложнее. Такое под силу только большой оплачиваемой команде. А вот обратное делается элементарно.


VD>Ну, их еще и на ВБ и С++ нет. И что? Шарп был языком базовым для платформы просто потому, что дотнет — это клон Явы. В первой версии фрэймворка даже многие классы назывались так же как в яве (ArrayList, например). Так что можно смело скзать, что библиотека первого фрэймворка написана на Яве. Значит ли это что Шарп никуда не гден?

VD>Ах Шарп — это почти та же Ява? Ну, да. Так и Немерле является супертипом Шарпа. Все что можно на шарпе (за иключением ансэфа) можно и на Немерле. Причем на Немерле можно писать практически как на C# 3.0.

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


VD>Так что же вообще доказывает наличие исходников? Да ничего.


какие толстые розовые очки
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.09 22:36
Оценка:
Здравствуйте, kkolyan33, Вы писали:

K>какие толстые розовые очки :wow:


Уважаемый, реально нужно было так оверквотить?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: SmbdRsdn23  
Дата: 30.09.09 23:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты плохо смотрел.

Возможно, но прежде всего я имею ввиду библиотеки, а не рантайм и компилятор.
Как бы то ни было объем кода на C# в .NET Framework огромен.

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

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

VD>Так что же компилятор не рассматривается как это самое киллер-апп?

Так компиляторы пишут очень давно и их очень много.
И компилятор Nemerle для большинства это yet another compiler не более.
К тому же есть средства автоматизации создания компиляторов.
Соответственно, без погружения в язык невозможно сказать, что это нечто выдающееся.

VD>У Явы она больше.

Она больше у сообщества, несомненно. В том числе из-за более раннего старта Явы и по некоторым другим минорным причинам.
А в поставке рантайма, .NET Framework превосходит JDK. И с каждой новой версией это преимущество значительнее.

VD>Казалось бы .NET Framework. никто не должен использовать, если исходить из этих соображений.

Из каких? Объем? Так споры по сравнению объема дистрибутива .NET и Java давно отгремели.
Когда-то это имел смысл, сейчас уже нет.

VD>Только что это доказывает? Приверженцев Руби конечно меньше, но не настолько же на сколько рубийная библиотека меньше фрэмворка.

Это доказывает наличие киллераппа прямо со старта платформы.
И, кстати, появление библиотеки достаточно часто становилась мотором и для языка.

VD>В общем, твоя теория не состоятельна.

Просто я не привел еще все доводы.
А сразу их и не привести, дискуссии необходимо развитие.
Иначе будет комбинаторный взрыв.

VD>Ну, их еще и на ВБ и С++ нет. И что?

Так C++ и не надо, у него уже были свои киллераппы задолго до.
VB.NET тоже не надо, так как он явно рассматривался как следущая версия VB, у которого уже был свой киллерап в виде офиса с VBA и COM.

VD>Так что можно смело скзать, что библиотека первого фрэймворка написана на Яве.

Сказать можно, и посмеяться на сказанное тоже можно.

VD>Ах Шарп — это почти та же Ява? Ну, да. Так и Немерле является супертипом Шарпа. Все что можно на шарпе (за иключением ансэфа) можно и на Немерле. Причем на Немерле можно писать практически как на C# 3.0.

А это-то здесь к чему? Кажется обсуждается вопрос наличия киллерапп, а не сравнения языков.
А то что Rails можно написать на Nemerle не означает, что Rails это киллерапп для Nemerle.

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

Не забываем про полноту по Тьюрингу, .NET Framework можно было написать на любом языке программирования, но написан он в той или иной степени был на C#.

VD>Так что же вообще доказывает наличие исходников? Да ничего.

Оно доказывает, что некое приложение было написано на некоем языке в большей или меньшей степени.
А как иначе определить, что киллерапп это киллерапп именно для этого языка программирования?
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.09 00:06
Оценка:
Здравствуйте, SmbdRsdn23, Вы писали:

VD>>Ты плохо смотрел.

SR>Возможно, но прежде всего я имею ввиду библиотеки, а не рантайм и компилятор.
SR>Как бы то ни было объем кода на C# в .NET Framework огромен.
SR>...
SR>Так компиляторы пишут очень давно и их очень много.

Так и библиотеки пишут очень давно и их очень много.

SR>И компилятор Nemerle для большинства это yet another compiler не более.


И библиотеки для всех это yet another librarry.

Давай все же определимся, или мы говорим о некотором объеме нетривиального кода, тогда компилятор подходит отлично. Или мы говорим о чем-то чудесном, что сразу бросается в глаза (вроде Рельсов), но тогда и код библиотеки не канает.

SR>К тому же есть средства автоматизации создания компиляторов.


Серьезно? Ну, тогда тебе не составит труда с их помощью создать компилятор аналогичны немерловому. :)
Если серьезно, то ты насмешил до глубины души. "средства автоматизации создания компиляторов" позволяют автоматизировать создание парсера. Но:
1. Парсер для языка вроде немерле — это 1/100 всей работы.
2. Создание статического парсера для немерле невозможно в принципе, так как это расширяемый язык!

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


Именно! И вообще, без погружения в технологию про нее мало что можно сказать. Это и есть эффект Блаба.

VD>>У Явы она больше. :xz:

SR>Она больше у сообщества, несомненно. В том числе из-за более раннего старта Явы и по некоторым другим минорным причинам.

И это тоже.

SR>А в поставке рантайма, .NET Framework превосходит JDK. И с каждой новой версией это преимущество значительнее.


Скачай себе последний JDK и подивись на то сколько там библиотечного кода.

VD>>Казалось бы .NET Framework. никто не должен использовать, если исходить из этих соображений.

SR>Из каких? Объем? Так споры по сравнению объема дистрибутива .NET и Java давно отгремели.

Это ты сравни. Я то прекрасно понимаю о чем идет речь.
Ява тупо старше на много лет и за это время кода наколбасили очень много.
В общем, это просто смешно обсуждать преимущество в объеме кода. Так что я для себя эту тему закрыл.

VD>>Только что это доказывает? Приверженцев Руби конечно меньше, но не настолько же на сколько рубийная библиотека меньше фрэмворка.

SR>Это доказывает наличие киллераппа прямо со старта платформы.

Это чушь. Просто Х мегабайт кода не является ничем кроме Х мегабайт кода! Уж точно это не является ни киллер, ни даже апп (т.е. приложением).

SR>И, кстати, появление библиотеки достаточно часто становилась мотором и для языка.


Любая библиотека дотнета пригодна для использования из немерла. Какие моторы? Ты можешь брать и использовать немерел совместима с НГибернэйт или чем угодно другим. Все что Съест Шарп, съест и Немерле. Немерле надкласс шарпа. :xz:

VD>>В общем, твоя теория не состоятельна.

SR>Просто я не привел еще все доводы.

Не. Пожалуй хватит. Откровенно говоря я вообще не знаю зачем я ввезался в этот бессмысленный спор. Просто меня сильно задели такие "аргументы". В общем, я завязал с этим спором.

SR>VB.NET тоже не надо, так как он явно рассматривался как следущая версия VB, у которого уже был свой киллерап в виде офиса с VBA и COM.


Классная следующая версия не совместимая с предыдущей :)).
Короче ты сам себя уже уговаривать.

Правда в том, что под C# и VB лежит многомегабаксовй маркетинг МС. И никакие киллераппы им действительно не нужны.

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

SR>Не забываем про полноту по Тьюрингу,

Ешкин кот! Да причем тут полнота по Тюрингу? Шарп преобразуетя в Немерле путем выкидывания лишних конструкций и перемещения описателей типа в другие места. Имели:
static class Program
{
  static void Main()
  {
    var x = Dictionary<strint, int>();
    x.Add("a", 1);    
  }
}

получаем:
module Program
{
  Main() : void
  {
    def x = Dictionary();
    x.Add("a", 1);    
  }
}


SR>.NET Framework можно было написать на любом языке программирования, но написан он в той или иной степени был на C#.


Не — это клиника. :xz:
Сколько можно повторять одну и ту же ерунду?
БОльшая часть фрэймворка написана на С++! Даже компиляторы!
На шарпе написана основная часть библиотек (но не все!) только потому, что это тот просто клон Явы с которой дрался весь первый фрэймворк. Был шарп, на нем и написали. Был бы Блаб, писали бы на нем.

VD>>Так что же вообще доказывает наличие исходников? Да ничего.

SR>Оно доказывает, что некое приложение было написано на некоем языке в большей или меньшей степени.
SR>А как иначе определить, что киллерапп это киллерапп именно для этого языка программирования?

Да элементарно. Это приложение которое заинтересовал люде настолько что они предпочли писать на этом языке. С Рельсами все очевидно. Они предложили очень простой в использовании и поддержке фрэймворк для построения простеньких сайтов. Описал сущности в виде плоского класса и получи БД. Описал еще пару классов и получи веб-страницы.
Все это можно и на Немерле (в отличии от Шарпа). Но блин, киллераппой — это не стаент потому, что перым был Руби на Рельсах.

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

Другие ждут когда придет богатый дядя и возьмет проект под свое крыло.

В общем, все что-то ждут. При этом они сидят по колено в грязи и ждут чуда.

Очень хочется спросить — а головы и руки у вас есть?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 01.10.09 03:45
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Самое смешное, что написать компилятор немерле на C# намного сложнее. Такое под силу только большой оплачиваемой команде. А вот обратное делается элементарно.


Думаю написать компилятор C# на F# тоже гораздо проще чем на C#, но даже этого не делается.
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 01.10.09 04:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что не нем пишут то?


Армы всякие, системы документо-оборота.

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

Собственно то,что существуют такие фирмы как devrace и devexpress — показывает что дельфи таки используется.
Хотя язык и отстал, но догоняет вроде.

А насчет nemerle — лично мне он понравился сразу, интуитивно, без всякого въезжания, после прочтения одной из первых статей (в которой шел обзор возможностей). До этого сморел Boo — он такого впечатления не произвёл.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 01.10.09 04:33
Оценка:
Здравствуйте, VladD2, Вы писали:

Кстати мне вот вспомнилось:
людям был реально нужен расширенный с# для вычислений в кластерах.
Что-то типа comega но с возможностью пометки метода для исполнения на другом компе — так они свой компилятор делали,
сначала — транслятор на яве в исходники на обычном C#, а потом и нормальный компилятор сделали.
Мне кажется что в данном случае nemerle сократил бы работу в разы, т.к. не пришлось бы писать компилятор.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.10.09 06:09
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>У тебя очень своеобразный перевод. Попробуй ка еще раз, но более дословно:

VD>

VD>A killer application (commonly shortened to killer app), in the jargon of computer programmers and video gamers, has been used to refer to any computer program that is so necessary or desirable that it proves the core value of some larger technology, such as computer hardware like a gaming console, operating system or other software. A killer app can substantially increase sales of the platform on which it runs.

Ок, даже после перевода:

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

Определение выделено. То, что выделил ты — это следствие, а не определение. Очевидно, что разворачивать утверждение в другую сторону бессмысленно: "всё, что увеличивает продажи платформы, является киллер аппом" — неверно.
А следствие это — то самое, о котором тебе и говорят: что стимулом для "продажи" или "распространения" платформы может стать убойное приложение. Которое само по себе будет настолько привлекательным, что оправдает переход. Нет, ну если у тебя есть другие стимулы, действующие на пользователей — то пожалуйста, можно не заморачиваться с киллер аппами. А в отстутствие миллиардов на рекламу или договорённостей с производителями флагманского софта о включении тебя в поставку чего-то популярного (типа вижуал студии), киллер апп может очень сильно помочь.

Далее, как я уже говорил, для языка программирования киллер аппом должен быть некий фреймворк на нём. Потому, что пользователям конечного софта на язык программирования плевать — по слухам, Скайп написан на дельфи, а стоящая щас у меня программа конверсии форматов электрических книжек на питоне. Ну и что?
Вот если бы, к примеру, речь шла о комьюнити-платформе RSDN, плагины к которой нативно бы писались на N (и были бы очевидно компактнее и выразительнее плагинов на C#), тогда бы у желающих сделать что-то полезное был бы стимул. (Пример плохой и надуманный).

Лично я пока себе с трудом представляю, в какой области можно было бы прорваться так, чтобы убедительно стрельнуть.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Статья "Введение в Nemerle" - по критикуйте
От: SmbdRsdn23  
Дата: 01.10.09 15:45
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Так и библиотеки пишут очень давно и их очень много.

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

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

Компилятор не проходит как раз по объему — слишком мало.
Даже если сам компилятор весьма нетривиален.

VD>Или мы говорим о чем-то чудесном, что сразу бросается в глаза (вроде Рельсов), но тогда и код библиотеки не канает.

Библиотека классов .NET Framework сразу бросается в глаза.

VD>Серьезно? Ну, тогда тебе не составит труда с их помощью создать компилятор аналогичны немерловому.

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

VD>Если серьезно, то ты насмешил до глубины души. "средства автоматизации создания компиляторов" позволяют автоматизировать создание парсера.

Создание парсеров уже неплохо. К тому же имеются всевозможные готовые back-end'ы или там промежуточные языки.
VD>1. Парсер для языка вроде немерле — это 1/100 всей работы.
Собственно тот факт, что Nemerle компилирует в IL, а не в родной код процессора тоже 1/100 работы от компилятора который собирает в native.

VD>Скачай себе последний JDK и подивись на то сколько там библиотечного кода.

Вроде JDK 1.6 ~ 70 Mb, а .NET Framework 3.5 ~ 220Mb.

VD>В общем, это просто смешно обсуждать преимущество в объеме кода. Так что я для себя эту тему закрыл.

Странно, неужели не хотелось бы чтобы кода на Nemerle было больше чем есть сейчас?

VD>Это чушь. Просто Х мегабайт кода не является ничем кроме Х мегабайт кода! Уж точно это не является ни киллер, ни даже апп (т.е. приложением).


SR>>И, кстати, появление библиотеки достаточно часто становилась мотором и для языка.


VD>Любая библиотека дотнета пригодна для использования из немерла. Какие моторы? Ты можешь брать и использовать немерел совместима с НГибернэйт или чем угодно другим. Все что Съест Шарп, съест и Немерле. Немерле надкласс шарпа.

Да, также как и Nemerle может использовать Rails или какие-ниубдь специфические библиотеки Ruby.
Но известности именно Nemerle это не добавляет. Наоборот, приверженцы Руби могут приводить в пример использование своих библиотек на других языках.

VD>Просто меня сильно задели такие "аргументы".

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

VD>Классная следующая версия не совместимая с предыдущей .

Вообще-то VB6 и VBA неплохо переделывается на VB.NET методом copy-paste.
Да и конверторы соответствующие есть и вроде входили даже в Visual Studio.

VD>Ешкин кот! Да причем тут полнота по Тюрингу?

При том, что не является аргументом, что написанное на C# можно было написать на Nemerle.
Благодаря полноте по Тьюрингу точно также это написанное на C# можно было написать на Ruby или Python и vice versa.
Соответственно, например Rails не является убойным приложением для C#, хотя его тоже можно было написать на C#.
Но написаны рельсы были изначально именно на Ruby.

VD>Сколько можно повторять одну и ту же ерунду?

Для меня Framework это прежде всего библиотека классов, а не csc.exe и не runtime.

VD>БОльшая часть фрэймворка написана на С++! Даже компиляторы!

Большая часть библиотеки классов .NET Framework написана на C#, а в Mono процент C# еще выше.

VD>Но блин, киллераппой — это не стаент потому, что перым был Руби на Рельсах.

Вот именно, я про это и толкую.

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

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

VD>Другие ждут когда придет богатый дядя и возьмет проект под свое крыло.

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

VD>Очень хочется спросить — а головы и руки у вас есть?

Очень хочется спросить, а почему нельзя просто сказать, что нет пока убойного приложения у Nemerle, в отличие от C#, у которого есть?
Как известно молодость, это недостаток, который быстро проходит, касается и языков программирования.
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.09 19:39
Оценка:
Здравствуйте, Denom, Вы писали:

VD>>Что не нем пишут то?


D>Армы всякие, системы документо-оборота.


На ПХП?

D>Собственно то,что существуют такие фирмы как devrace и devexpress — показывает что дельфи таки используется.


Да, я не про дельфи. Я про ПХП спрашивал. С дельфи все ясно.

D>Хотя язык и отстал, но догоняет вроде.


Он не так чтобы отстал. Как не странно когда Борланд выделил Дельфи в отдельную контору, Дельфи на удивление начала развиваться. Сейчас она остает от Шарпа не очеть сильно. Просто Дельфи из лидеров превратилась в догоняющего. На мой взгляд — это плохо. Но для работы может и ничего.

D>А насчет nemerle — лично мне он понравился сразу, интуитивно, без всякого въезжания, после прочтения одной из первых статей (в которой шел обзор возможностей). До этого сморел Boo — он такого впечатления не произвёл.


Бу, кстати тоже подтянулся. Его разработчик немного по плевался на макры, но в итоге просто тупо их повторил. Ну, почти...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.09 19:42
Оценка:
Здравствуйте, FR, Вы писали:


FR>Думаю написать компилятор C# на F# тоже гораздо проще чем на C#, но даже этого не делается.


На самом деле C# теперь будут (с огромной вероятностью) писать на C#. И это, в купе с соседством F#-а, должно (на мой взгляд) подтолкнуть шарп к развитию в правильном направлении. Сначала паттерн-матчино (или его аналог), а там и до макросов рукой подать. Просто мозг автора должен созреть для подобных перемен. Сейчас они кажутся ему радикальными, но...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.10.09 20:04
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Я не думаю что мозг Липперта менее зрел в этом плане, нежели твой.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[16]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.09 21:56
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


AVK>Я не думаю что мозг Липперта менее зрел в этом плане, нежели твой.


А он не автор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.10.09 22:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А он не автор.


Он пишет компилятор и он в немалой степени автор нововведений в сам шарп.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 01.10.09 23:48
Оценка: 4 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>Небольшое пояснение. Я принципиально старался построить изложение так чтобы не разжевывать тонкие моменты и не вдаваться в подробности, а сосредоточиться на том, чтобы как можно скорее позволить человеку писать пусть и простые но полезные программы. По этому просьба не высказать претензии к поверхности изложения. Это концептуальное решение, а не просчет.


В общем эта светлая идея себя несколько не оправдала. Для того, чтобы мне начать программирование на незнакомом мне языке, мне надо в первую очередь знать аналоги известных мне конструкций по другим языкам программирования. Скажем, такой план: Hello word!, потом как скомпилить, потом описание переменных, вывод типов if, then, else, циклы (плюс пример использования), которая печатает простые числа. Потом функции, классы. На этой базе уже можно рассматривать специфицеские особенности.

В моем случае возникла такая проблема: я знаю, какой необходимо написать код на C#/Delphi/C++, но не знаю, как это все выразить средствами NEmerle. А вопросы простые: как описать структуру/класс, объявить переменную (различие между def и mutable), объявить массив, работа со списками и Dictionary, как сделать цикл от большего к мньшему и т. п.

С этой точки быстрого введения несколько неоправданно включение макросов, потому как я не вижу большой необходимости разбираться в тонкостях их работы на предварительном этапе. Например, мне не важно, что for и if это макросы, мне важнее, как это использовать. Описание новых операторов также не та часть языка, в которой возникает острая необходимость на начальном этапе. А пример с переводом градусов вызывает в некотором род тоску: вместо простого цикла ты встречаешь рекурсию и наворот конструкций вроде вложенного match, в котором надо основательно разбираться...

Если брать по частям:

Первый пример – «Hello, World!»
Ну очень расжевано, такое впечатление, что Nemerle для читателя первый язык программирования. В целом иослику понятно, что три оператора WriteLine выведут три строки.

Пространства имен и типы
В целом тоже раздел интуитивно понятен

Арифметика
Тут тоже все ок

Локальные функции
Пропущен раздел "операторы". Понятно, что большинство из них реализуется макросами. Но ведь и WriteLine тоже библиотечная функция. Вот из, кстати, очень не хватает, потому как еслиначинать работу с Nemerle, то без них не обойтись. Ну и сами локальные функции содержат сравнительно извращенные на мой вкус примеры. Кроме того, внутри функции описывается оператор match, которому место в разделе перед этим. Ну и всякие return и т. п. Без них в общем случае непонятно, что считается возвращаемым результатом у функции. Последний оператор? Сам раздел это рассмотрение частных случаев, а хочется общая картина + аналоги.

Встроенные типы данных
Как-то не в том месте... Надо в арифметику бы... имхо

Вывод типов и их явное описание
Хочется об этом услышать пораньше и разбавить описание таких тривиальных разделов, как арифметика и операторы...

Макросы
Имхо, не вовремя. Читатель еще не знает, как создать объект класса Dictinary<int, MyStruct>, работать со списками и т. п. Это более важно при работе с новым языком программирования. Какой толк, что я могу написать макрос, но не могу удалить объект из списка? Еще раз, чтобы начать программирование, мне надо уметь для программы на C# нваять ее аналог на Nemerle. Когда я буду делать это достаточно уверенно, я буду смотреть в сторону макросов.
Re[18]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 06:40
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Он пишет компилятор и он в немалой степени автор нововведений в сам шарп.


Та еще человек 10 компилятор пишут. К авторству это не имеет никакого отношения.
Автор этот тот кто решает добавлять фичу или нет.

Так вот за все решения отвечает именно автор. И то что в языке чего-то нет или что-то не так отвечает именно автор.
Потому я и говорю, что автор должен созреть.

Процесс уже идет. Вопрос сколько времени он займет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 07:19
Оценка: +1
Здравствуйте, Mystic, Вы писали:

M>В общем эта светлая идея себя несколько не оправдала. Для того, чтобы мне начать программирование на незнакомом мне языке, мне надо в первую очередь знать аналоги известных мне конструкций по другим языкам программирования.


И как таким подходом освоить что-то новое? Таким подходом можно освоить только то, что и так уже знаешь. А для этого изучаемые языки должны быть близнецами-братьями. С немерел это не так.

M>Скажем, такой план: Hello word!, потом как скомпилить, потом описание переменных, вывод типов if, then, else, циклы (плюс пример использования), которая печатает простые числа. Потом функции, классы. На этой базе уже можно рассматривать специфицеские особенности.


Все это убдет, но не в той последовательности и совсем не так как ты себе это представляешь. Одна из целей работы донести до программиста понимание того, что все эти "if, then, else, циклы" в языке не сущуствуют, а являются макросами. Так что в следующих частях мы (вместе с читателями) напишем код этих операторов самостоятельно.

M>В моем случае возникла такая проблема: я знаю, какой необходимо написать код на C#/Delphi/C++, но не знаю, как это все выразить средствами NEmerle. А вопросы простые: как описать структуру/класс, объявить переменную (различие между def и mutable), объявить массив, работа со списками и Dictionary, как сделать цикл от большего к мньшему и т. п.


Если ты уже знаком с C# и ты хочешь изучить только синаксис и его отличия от шарпа, то тебе просто нужно начать читать с другие статьи. Например — эту
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
.

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


Я тут не согласен. Макры — это база языка. Все if/else, while и даже большая часть операторов — это макры.
На самом деле данная статья это не только введение, но и рассказ о идеологии (сути) языка. По крайней мере она так задумывалась.

M>Например, мне не важно, что for и if это макросы, мне важнее, как это использовать.


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

M>Описание новых операторов также не та часть языка, в которой возникает острая необходимость на начальном этапе. А пример с переводом градусов вызывает в некотором род тоску: вместо простого цикла ты встречаешь рекурсию и наворот конструкций вроде вложенного match, в котором надо основательно разбираться...


Ну, я уже все сказал по этому поводу. Читайте другие статьи. У этой другие цели. Она не рассчитана на тех кто знает родственные языки вроде C# или Явы.

M>Если брать по частям:


M>Первый пример – «Hello, World!»

M> Ну очень расжевано, такое впечатление, что Nemerle для читателя первый язык программирования. В целом иослику понятно, что три оператора WriteLine выведут три строки.

Во введении собственно прямым текстом написано, что материал в том числе рассчитан и на новичков. Те кому идеомы понятны и так могут просто пропустить раздел или прочитать его по диагонали.
На всех не угодишь. Но надо рассчитывать на то, что люди знакомые с другими языками или не знакомые с ними вовсе могут не понимать концепций изложенных в этом разделе. Тогда дальнейшее изложение для них будет как в тумане.
Именно из этого я и исходил когда разжевывал материал. К тому же разжеванным он кажется только на первый взгляд. На само деле он ОЧЕНЬ поверхностный. Море деталей за скобками. И это не случайно.

M>Пространства имен и типы

M> В целом тоже раздел интуитивно понятен

Тебе, так как он мало отличается от того что ты видел в C#.
Кстати, хочется задать вопрос. Ты заметил отличия (в сравнении с C#) в использовании using?

M>Локальные функции

M> Пропущен раздел "операторы". Понятно, что большинство из них реализуется макросами. Но ведь и WriteLine тоже библиотечная функция.

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

M> Вот из, кстати, очень не хватает, потому как еслиначинать работу с Nemerle, то без них не обойтись.


Ну, я уже говорил, что тебе просто нужна другая статья.

M>Ну и сами локальные функции содержат сравнительно извращенные на мой вкус примеры.


Что понимается под словом "извращенный".
Пример, кстати, Кернигановский. На нем 3 поколения программистов успешно учились программировать. Я в том числе.

M>Кроме того, внутри функции описывается оператор match, которому место в разделе перед этим. Ну и всякие return и т. п. Без них в общем случае непонятно, что считается возвращаемым результатом у функции. Последний оператор? Сам раздел это рассмотрение частных случаев, а хочется общая картина + аналоги.


У меня стойкое ощущение, что ты хочешь увидеть здесь C# или что-то на него похожее. Меж тем Nemerle всего лишь способен мимикрировать под шарпа (и с успехом это делает). Но его суть другая. Как раз наличие тех самых локальных функций и ОТСУТСТВИЕ всяких return делает этот язык очень выразительным. Так что просто надо понять, что твои представления о программировании не единственно правильные. Есть и другие.

M>Встроенные типы данных

M> Как-то не в том месте... Надо в арифметику бы... имхо

Ты ищешь спецификацию. А это учебник по программированию на языке. Его цель помочь начать программировать на языке, причем в стиле этого языка, а не в стиле C#++. Так что это не спецификация!

M>Вывод типов и их явное описание

M> Хочется об этом услышать пораньше и разбавить описание таких тривиальных разделов, как арифметика и операторы...

А зачем? Многие кто будет читать эту работу просто не знают, что такое типы. Я наоборот скрепя зубами включил этот раздел. Ведь, на данной стадии, для программирования типа не важны. Они, как ты вырзился, интуитивно понятны.

M>Макросы

M> Имхо, не вовремя. Читатель еще не знает, как создать объект класса Dictinary<int, MyStruct>, работать со списками и т. п. Это более важно при работе с новым языком программирования. Какой толк, что я могу написать макрос, но не могу удалить объект из списка? Еще раз, чтобы начать программирование, мне надо уметь для программы на C# нваять ее аналог на Nemerle. Когда я буду делать это достаточно уверенно, я буду смотреть в сторону макросов.

Как раз все эти Dictinary — это мешура которая совершенно не нужна человеку знакомящемуся с НОВЫМ для него языком. Никто не думает, что прочтя эту часть человек сможет написать Win Word или компилятор. Пока что его задачи просто освоиться с языком. А макры — это как раз важная часть языка. Для меня важно даже не научить человека писать макры раньше чем "ходить", мне важно чтобы человек с ранних шагов осознал, что большая часть языка строится на макрах. Так же важно, чтобы макры стали для него чем-то обыйденым и простым.

Ну, и пожалуй основным стилом к раннему введению макросов было, то как я хочу строить изложение. А я хочу строить его на принципах повышения выразительности. Для этого нужна проблема — плохая выразительность, и ее решение — введение мароса, и его использование. Все if/else-ы, while-ы и т.п. будут вводиться именно так. И это очень важно, так как это продемонстрирует то как можно жить БЕЗ всех этих while-ов, for-ов и т.е. И то что все они не самоцель (НЕ ОПЕРАТОРЫ), а синтаксические сокращения уместные там где они ПОВЫШАЮТ выразительность, и не уместные в других местах.

В общем, если тебе нужен референс-мануал, то это не он. Возьми его на сайте. "Быстрое введение" (Quick guide) — самое то. Если тебе нужно сравнение с C# и отличительные особенности чтобы начать быстро писать на C#++, то это тоже не то. Возьми статью по ссылке выше. А если ты хочешь понять философию языка. Или если ты ранее знал только очень сильно отличающеся языки, то это как раз то что нужно. Все это конечно мое ИМХО. Возможно я и ошибаюсь. Но пока что мне кажется, что ты просто не верно воспринял материал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.09 07:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Та еще человек 10 компилятор пишут.


Насколько я знаю — нет.

VD>Автор этот тот кто решает добавлять фичу или нет.


Сома — автор?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[20]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 07:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Автор этот тот кто решает добавлять фичу или нет.


AVK>Сома — автор?


Косить по дурочка не стоит. Кто автор тут и так все знают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.09 08:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Косить по дурочка не стоит. Кто автор тут и так все знают.


Но именно Сома принимает окончательное решение по фичам языка.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 02.10.09 08:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На ПХП?


А, не... на пхп веб версия Enterpice Facility Management Software
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[22]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 08:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Но именно Сома принимает окончательное решение по фичам языка.


ОК. Обясню тебе банальные вещи.
1. Он менеджер и принимает решения о том какие работы и когда будут сделаны. Ему говорят есть фича А и Б, а он решает что сделать первым. К дизайну языка это отношения не имеет.
2. Ты все это прекрасно знаешь и умышленно разводишь софистику. А мне жалко время.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 08:46
Оценка:
Здравствуйте, Denom, Вы писали:

D>А, не... на пхп веб версия Enterpice Facility Management Software


Т.е. видимо веб-морда к чему-то написанному на дельфи?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 02.10.09 09:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Т.е. видимо веб-морда к чему-то написанному на дельфи?


оракловская база общая и с ней можно работать через веб приложение (на пхп)
и через win32 приложение, написанное на дельфи. и таких приложений штук 18. веб морд пока поменьше...
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 02.10.09 15:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>И как таким подходом освоить что-то новое? Таким подходом можно освоить только то, что и так уже знаешь. А для этого изучаемые языки должны быть близнецами-братьями. С немерел это не так.


Новое осваивается на базе старого. И для меня лучший способ освоения нового это решение практических задач. Так вот в случае с Nemerle эти статьи мне никак не помогают в решении этих задач. Точнее даже, задача не решается вообще.

VD>Все это убдет, но не в той последовательности и совсем не так как ты себе это представляешь. Одна из целей работы донести до программиста понимание того, что все эти "if, then, else, циклы" в языке не сущуствуют, а являются макросами. Так что в следующих частях мы (вместе с читателями) напишем код этих операторов самостоятельно.


Лучше читателям объяснить, зачем вообще эти макросы нужны. Ну вот, я прочитал, знаю чтоони есть. Но вряд ли буду писать свои, потому как я просто не вижу, как их можно использовать. if/then/else уже написаны, больше мне не надо

VD>Если ты уже знаком с C# и ты хочешь изучить только синаксис и его отличия от шарпа, то тебе просто нужно начать читать с другие статьи. Например — эту
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
.


C C# знаком поверхностно, если честно. Эту статью я смотрел, но тоже не очень помогла.

VD>Я тут не согласен. Макры — это база языка. Все if/else, while и даже большая часть операторов — это макры.

VD>На самом деле данная статья это не только введение, но и рассказ о идеологии (сути) языка. По крайней мере она так задумывалась.

Вот хочется раскрыть суть этой идеологии. if/else, while и даже большая часть операторов уже написана, вряд-ли мне придется их писать самому, только использовать. Для чего макросы нужны кроме того, чтобы реализовать основные конструкции других языков?

M>>Например, мне не важно, что for и if это макросы, мне важнее, как это использовать.


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


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

VD>Тебе, так как он мало отличается от того что ты видел в C#.

VD>Кстати, хочется задать вопрос. Ты заметил отличия (в сравнении с C#) в использовании using?

Мой опыт в C# не настолько велик, но все-таки отметил.

M>>Ну и сами локальные функции содержат сравнительно извращенные на мой вкус примеры.


VD>Что понимается под словом "извращенный".


Извращенный в том смысле, что надо раскручивать работу двух вложенных друг в друга match + рекрсивный, хотя задача этого не требует.

VD>У меня стойкое ощущение, что ты хочешь увидеть здесь C# или что-то на него похожее. Меж тем Nemerle всего лишь способен мимикрировать под шарпа (и с успехом это делает). Но его суть другая. Как раз наличие тех самых локальных функций и ОТСУТСТВИЕ всяких return делает этот язык очень выразительным. Так что просто надо понять, что твои представления о программировании не единственно правильные. Есть и другие.


Собственно говоря, я хотел на Nemerle решить одну прикладную задачу. И почти обломался. Соответственно мне интересно увидеть, как при помощи (точнее без помощи всяких return и т. п.) можно решить более-менее практическую задачу. Ибо идеология это хорошо, в общих чертах мне понятно. Но на практике как только берется конкретная задача я наступаю на грабли.

VD>В общем, если тебе нужен референс-мануал, то это не он. Возьми его на сайте. "Быстрое введение" (Quick guide) — самое то.


Я его уже нашел, как раз с его помощью немного "полегчало".
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.09 16:51
Оценка:
Здравствуйте, Mystic, Вы писали:

VD>>И как таким подходом освоить что-то новое? Таким подходом можно освоить только то, что и так уже знаешь. А для этого изучаемые языки должны быть близнецами-братьями. С немерел это не так.


M>Новое осваивается на базе старого.


Ага. У кого-то старое — это курс математики средней школы. У кого-то — это знание С (без плюсов), Питона или Эрланга.

M>И для меня лучший способ освоения нового это решение практических задач. Так вот в случае с Nemerle эти статьи мне никак не помогают в решении этих задач. Точнее даже, задача не решается вообще.


Нельзя начинать решать сразу сложные задачи. Вывод таблицы перевода — это тоже практическая задача, но простая.
А что для тебя я уже сказал.

M>Лучше читателям объяснить, зачем вообще эти макросы нужны.


Объяснять — это не наш метод. Наш метод показывать.

M>Ну вот, я прочитал, знаю чтоони есть. Но вряд ли буду писать свои, потому как я просто не вижу, как их можно использовать. if/then/else уже написаны, больше мне не надо :)


Керниган и Ричи использовали в качестве примеров библиотечные функции. Мне это очень нравилось. Ты не только изучаешь язык (то как на нем что-то написать), но и за одно изучаешь стандартную библиотеку. Выгод масса. Человек знает стандартную библиотеку, он знает как она написана и как написать похожий код.

VD>>Если ты уже знаком с C# и ты хочешь изучить только синаксис и его отличия от шарпа, то тебе просто нужно начать читать с другие статьи. Например — эту
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
.


M>C C# знаком поверхностно, если честно. Эту статью я смотрел, но тоже не очень помогла.


Ну, тогда на тебя не угодишь.

То что предлагаешь ты мне совсем не нравится.

M>Вот хочется раскрыть суть этой идеологии. if/else, while и даже большая часть операторов уже написана, вряд-ли мне придется их писать самому, только использовать. Для чего макросы нужны кроме того, чтобы реализовать основные конструкции других языков?


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

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


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

VD>>Тебе, так как он мало отличается от того что ты видел в C#.

VD>>Кстати, хочется задать вопрос. Ты заметил отличия (в сравнении с C#) в использовании using?

M>Мой опыт в C# не настолько велик, но все-таки отметил.


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

Лучше ответь на один вопрос. Осталось ли что-то непонятное после прочтения данной стать?

M>Извращенный в том смысле, что надо раскручивать работу двух вложенных друг в друга match + рекрсивный, хотя задача этого не требует.


Куда раскручивать?
Я правильно понял, что извращением ты называешь использование рекурсии?

M>Собственно говоря, я хотел на Nemerle решить одну прикладную задачу. И почти обломался.


Чтобы решать прикладную задачу нужно прочитать не только первый раздел, но и (хотя бы) два следующих. А пока — это только введение.

Кстати, что значит "почти"?

M>Соответственно мне интересно увидеть, как при помощи (точнее без помощи всяких return и т. п.) можно решить более-менее практическую задачу. Ибо идеология это хорошо, в общих чертах мне понятно. Но на практике как только берется конкретная задача я наступаю на грабли.


Очень интересно было бы послушать и про грабли, и про конкретную задачу.

M>Я его уже нашел, как раз с его помощью немного "полегчало".


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

В прочем, было бы ОЧЕНЬ интересно узнать в чем были проблемы, как ты их решил и саму задачу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 03.10.09 15:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, так он создан для быстрого нахождения фичь. Ты же взял совсем другой материал.

VD>В прочем, было бы ОЧЕНЬ интересно узнать в чем были проблемы, как ты их решил и саму задачу.

Задача примерно такая: генерация таблиц для того, чтобы выполнять оценивание руки из пяти карт в покере. Схема примерно такая: у карты есть номинал (тез, шестерка) и масть. Каждому номиналу карты сопоставляется простое число. Таким образом зная произведение этих простых числе в карточной комбинации, а также флеш это или нет, мы можем однозначно определить силу руки. Естественно, что вначале нам надо силу всех этих рук посчитать. В общем стоит задача построения примерно такого


  class Info
  {
    public int Product;
    public int FlushRank;
    public int NormalRank;
  }

  static public Dictionary<int, Info> Data;


объекта, который пригодится для построения талицы. Ключ это произведение простых чисел, соответствующих номиналу карт. Flush это сила комбинации при условии, что все карты одной масти. Normal это сила комбинации при условии, что не все карты одной масти.

Также я решил карту представлять списками, хоть это не совсем удобно в C#, но хотелось поучиться. Ну и в общем за несколько часов наступания на грабли родилось нечто такое, что считает только StraightFlush. После чего я устал и сделал большой перерыв.

using System.Console;
using System.Collections.Generic;

class Info
{
  public mutable Product: int;
  public mutable FlushValue: int;
  public mutable NormalValue: int;
}

def GlobalTable = Dictionary();

def Primary = array[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41];

mutable rank = 1;

def AddFlushHand(hand)
{
  mutable Product = 1;
  foreach(card in hand)
    Product *= Primary[card];

  mutable info = Info();
  info.Product = Product;
  info.FlushValue = rank;
  info.NormalValue = -1;

  WriteLine(hand);
  WriteLine(info.Product);
  WriteLine();
  GlobalTable.Add(Product, info);
  rank = rank + 1;
}

mutable StraightFlush = [8, 9, 10, 11, 12];

AddFlushHand(StraightFlush);

foreach(card in [7, 6, 5, 4, 3, 2, 1, 0])
{
  StraightFlush = StraightFlush.Remove(card + 5);
  StraightFlush = StraightFlush + [card];
  AddFlushHand(StraightFlush);
}

AddFlushHand([3, 2, 1, 0, 12]);


WriteLine("Hello, World: " + GlobalTable.Count.ToString());


Для сравнения исходник на C#, который пишется без особого напряга за половину часа с отладкой:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PokerTable
{
  class Info
  {
    public int Product;
    public int FlushRank;
    public int NormalRank;
  }

  class Program
  {
    static readonly int[] Primary = new int[] { 41, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41 };

    static public int rank = 1;
    static public Dictionary<int, Info> Data = new Dictionary<int, Info>();
    
    static public void AddFlush(int Product)
    {
      Info info = new Info();
      info.Product = Product;
      info.FlushRank = rank;
      info.NormalRank = -1;
      Data.Add(Product, info);
      rank = rank + 1;
    }

    static public void AddNormal(int Product)
    {
      Info info;
      if (!Data.TryGetValue(Product, out info))
      {
        info = new Info();
        info.Product = Product;
        info.FlushRank = -1;
      }
      info.NormalRank = rank;
      rank = rank + 1;
    }

    static public void Straight(bool isFlush)
    {
      int Product = Primary[13] * Primary[12] * Primary[11] * Primary[10] * Primary[9];
      if (isFlush) AddFlush(Product); else AddNormal(Product);
      for (int i = 8; i >= 0; --i)
      {
        Product /= Primary[i + 5];
        Product *= Primary[i];
        if (isFlush) AddFlush(Product); else AddNormal(Product);
      }
    }

    static public void Quads()
    {
      for (int Base = 13; Base >= 1; --Base)
      for (int Kicker = 13; Kicker >= 1; --Kicker)
      {
        if (Base == Kicker) continue;
        int BasePrimary = Primary[Base];
        int KickerPrimary = Primary[Kicker];
        AddNormal(BasePrimary * BasePrimary * BasePrimary * BasePrimary * KickerPrimary);
      }
    }

    static public void FullHouse()
    {
      for (int Base = 13; Base >= 1; --Base)
      for (int Pair = 13; Pair >= 1; --Pair)
      {
        if (Base == Pair) continue;
        int BasePrimary = Primary[Base];
        int PairPrimary = Primary[Pair];
        AddNormal(BasePrimary * BasePrimary * BasePrimary * BasePrimary * PairPrimary);
      }
    }

    static public void Chanse(bool isFlush)
    {
      for (int card1 = 13; card1 >= 1; --card1)
      for (int card2 = card1 - 1; card2 >= 1; --card2)
      for (int card3 = card2 - 1; card3 >= 1; --card3)
      for (int card4 = card3 - 1; card4 >= 1; --card4)
      for (int card5 = card4 - 1; card5 >= 1; --card5)
      {
        if (card1 == 13 && card2 == 4) continue;

        bool isStraight = true  
          && card1 == card2 + 1 
          && card2 == card3 + 1 
          && card3 == card4 + 1 
          && card4 == card5 + 1
        ;
        
        if (!isStraight)
        {
          int Product = Primary[card1] * Primary[card2] * Primary[card3] * Primary[card4] * Primary[card5];
          if (isFlush) AddFlush(Product); else AddNormal(Product);
        }  
          
      }
    }
    
    static public void ThreeCards()
    {
      for (int Base=13; Base >= 1; --Base)
      for (int Kicker1 = 13; Kicker1 >= 1; --Kicker1)
      for (int Kicker2 = Kicker1 - 1; Kicker2 >= 1; --Kicker2)
      {
        if (Base == Kicker1) continue;
        if (Base == Kicker2) continue;
        AddNormal(Primary[Base] * Primary[Base] * Primary[Base] * Primary[Kicker1] * Primary[Kicker2]);
      }
    }

    static public void TwoPair()
    {
      for (int Base1 = 13; Base1 >= 1; --Base1)
      for (int Base2 = Base1 - 1; Base2 >= 1; --Base2)
      for (int Kicker = 13; Kicker >= 1; --Kicker)
      {
        if (Base1 == Kicker) continue;
        if (Base2 == Kicker) continue;
        AddNormal(Primary[Base1] * Primary[Base1] * Primary[Base2] * Primary[Base2] * Primary[Kicker]);
      }
    }

    static public void Pair()
    {
      for (int Base = 13; Base >= 1; --Base)
      for (int Kicker1 = 13; Kicker1 >= 1; --Kicker1)
      for (int Kicker2 = Kicker1 - 1; Kicker2 >= 1; --Kicker2)
      for (int Kicker3 = Kicker2 - 1; Kicker3 >= 1; --Kicker3)
      {
        if (Base == Kicker1) continue;
        if (Base == Kicker2) continue;
        if (Base == Kicker3) continue;
        AddNormal(Primary[Base] * Primary[Base] * Primary[Kicker1] * Primary[Kicker2] * Primary[Kicker3]);
      }
    }
  
    static void Main(string[] args)
    {
      Straight(true);
      Quads();
      FullHouse();
      Chanse(true);
      Straight(false);
      ThreeCards();
      TwoPair();
      Pair();
      Chanse(false);
      System.Console.WriteLine(rank);
    }
  }
}
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.10.09 03:45
Оценка: +1
Здравствуйте, Mystic, Вы писали:

M>объекта, который пригодится для построения талицы. Ключ это произведение простых чисел, соответствующих номиналу карт. Flush это сила комбинации при условии, что все карты одной масти. Normal это сила комбинации при условии, что не все карты одной масти.


M>Также я решил карту представлять списками, хоть это не совсем удобно в C#, но хотелось поучиться. Ну и в общем за несколько часов наступания на грабли родилось нечто такое, что считает только StraightFlush. После чего я устал и сделал большой перерыв.



M>Для сравнения исходник на C#, который пишется без особого напряга за половину часа с отладкой:

Ты меня, конечно, извини, но исходник — просто ужасен. Даже если не говорить про стиль оформления (вроде использования паскаль-кейзинга для локальных переменных), сам подход, на мой взгляд, в чистом виде инструкция "как не надо программировать ни на каком языке программирования".
Ну, вот например: ты начал с того, что выбрал представление для хранения руки. На-хре-на? Представление — дело десятое. Тебя интересует алгебра.
Поэтому программист на шарпе первым делом введёт некий абстрактный тип, описывающий набор карт, для которого определит необходимые операции.
При смене представления поменяется только реализация алгебраических операций. А у тебя по всему коду размазаны волшебные умножения и деления.
Далее, даже если использовать Тьюринговское представление твоих наборов (что, очевидно, крайне неэкономно по сравнению с bitstring), то все вот эти Primary[13] и так далее в нормальных программах запрещены — магические константы нужно заменить на именованные значения.

В-третьих, ты вместо задачи "оценить руку из пяти карт" решаешь какую-то постороннюю задачу "построить словарь". Она тебе зачем? Что этот словарь должен делать? Если расчёт оценки — дорогая штука, то имеет смысл что-то кэшировать. Программист на функциональном языке решает задачу "построить словарь" в последнюю очередь.
Сначала нужно сделать постановку задачи. То есть, к примеру, определиться с функциями.

Для покера нам достаточно функции Compare, которая отображает два hand на (-1, 0, 1). Вот задачу её построения и надо решать. Ок, пусть в процессе решения вывелось соображение о получении функции оценки: Compare = (Hand h1, Hand h2) => Compare(Rank(h1), Rank(h2)).
Введение какого-либо "словаря" внутрь функции Rank(Hand) — исключительно вопрос оптимизации. Сначала нужно получить алгоритмически корректное решение. Ты его получил? В твоём коде я этого не вижу. И только после того, как неэффективное решение будет получено, можно попробовать что-то улучшить. Например, включить кэширование. И вот тут уже будет ясно, к чему именно нужно применять кэширование — то ли ко всему результату, то ли к промежуточным расчётам.

В-четвёртых, из кода очевидно плохое знание стандартной библиотеки. У тебя в словаре дублируется значение ключа и одного из свойств значения. Вот это вот "Data.Add(Product, info)", где info.Product = Product — тавтология. Для таких случаев используют класс KeyedCollection.

В общем, в результате своего подхода получил программу, которую вообще невозможно понять и тем более отладить.
Из этого, в общем-то, понятно, что дальнейший перевод её на произвольный другой язык программирования — нетривиальная задача. Всё оттого, что детали реализации заслоняют смысл программы.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 07:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Возможно я и перемудрил в данном случае. Тут нужно на "кошках" экспериментировать, т.е. смотреть на реакцию тех кто действительно не знаком с программированием. Уверен, что те кто знали хотя бы какой-нибудь язык до чтения этого дела и так разобрались.


Ничего не перемудрил!
Если бы ты писал учебник программирования, то да, это бы только запутывало. Но ты же пишешь учебник языка для тех, кто в целом программировать умеет? Тогда и хорошо очень, что тривиальную и всем понятную задачу ты решаешь при помощи средств языка.

При этом никто не мешает тут же взять и попробовать определить какой-нибудь свой оператор

Кстати, кучу деклараций можно вынести в какую-то хитрую врезку "как оно устроено на самом деле". А в основном тексте сказать, что типа есть возможность задать приоритеты, и в стандартной библиотеке приоритеты такие-то. Но, как по мне, не так уж это и сложно прочитать эту декларацию. Только немного не понятно что такое "приоритет справа" и "приоритет слева". Это ассоциативностью управляет, насколько я понял?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.10.09 09:30
Оценка:
Здравствуйте, Erop, Вы писали:

E> Только немного не понятно что такое "приоритет справа" и "приоритет слева". Это ассоциативностью управляет, насколько я понял?


Да. Но боюсь, что слова про ассоциативность еще больше запутают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 06.10.09 11:32
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Введение какого-либо "словаря" внутрь функции Rank(Hand) — исключительно вопрос оптимизации. Сначала нужно получить алгоритмически корректное решение. Ты его получил? В твоём коде я этого не вижу. И только после того, как неэффективное решение будет получено, можно попробовать что-то улучшить. Например, включить кэширование. И вот тут уже будет ясно, к чему именно нужно применять кэширование — то ли ко всему результату, то ли к промежуточным расчётам.


Я объяснял, что этот код решает только вспомогательную задачу. Общий код вычисление силы руки примерно такой

inline int only_one_bit_set(int mask)
{
  return mask & (mask - 1);
}

inline int is_flush(const card_t* cards)
{
  int mask = 0
    | get_suit(cards[0])
    | get_suit(cards[1])
    | get_suit(cards[2])
    | get_suit(cards[3])
    | get_suit(cards[4])
  ;

  return only_one_bit_set(mask);
}

inline int evaluate_5(const card_t* cards)
{
  int product = 1
    * primary[get_nominal(cards[0])]
    * primary[get_nominal(cards[1])]
    * primary[get_nominal(cards[2])]
    * primary[get_nominal(cards[3])]
    * primary[get_nominal(cards[4])]
  ;

  int index = is_flush(cards) : magic_flush[product % MAGIC_SIZE] ? magic_normal[product % MAGIC_SIZE];
  int delta = product % hand_ranks[index] + 1;
  return hand_ranks[index+delta];
}


Для корректной работы этого кода мне нужны массивы magic_flush, magic_normal и hand_ranks, которые и должен создать скрипт на C#/Nemerle. Собственно говоря, для построения этого скрипта и надо (1) построить тот словарь (2) обработать его.

S>В общем, в результате своего подхода получил программу, которую вообще невозможно понять и тем более отладить.

S>Из этого, в общем-то, понятно, что дальнейший перевод её на произвольный другой язык программирования — нетривиальная задача. Всё оттого, что детали реализации заслоняют смысл программы.

Ок, как бы ты предложить более просто сформировать массивы magic_flush, magic_normal и ranks?
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 06.10.09 12:25
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, вот например: ты начал с того, что выбрал представление для хранения руки. На-хре-на? Представление — дело десятое. Тебя интересует алгебра.


Зависит от задачи. Если код на 60% зависит от представления, то выбор представления очень важен. Есть и второй ньюанс: с этим представлением может быть связано очень много самых разных функций, то код получается неструктурированным. Ну например, в шахматах у нас есть класс "позиция", в нем тысяча методов, а все остальное всего ничего.

S>Для покера нам достаточно функции Compare, которая отображает два hand на (-1, 0, 1).


А достаточно ли? Самый простой пример вывести название комбинации, перейти в переборе рук к следующей. Не говоря уже о подсчете аутов и всяких других символических рассуждениях. Ты какую задачу решаешь, что так просто утверждаешь "достаточно"?

S>Введение какого-либо "словаря" внутрь функции Rank(Hand) — исключительно вопрос оптимизации.


Собственно задача и состоит в написании оптимальной версии. Проще говоря, я пишу библиотеку, где код должен работать оптимально. Где будет использована библиотека? Например, в покерном движке. Или в калькуляторе.

S>В-четвёртых, из кода очевидно плохое знание стандартной библиотеки. У тебя в словаре дублируется значение ключа и одного из свойств значения. Вот это вот "Data.Add(Product, info)", где info.Product = Product — тавтология. Для таких случаев используют класс KeyedCollection.


Я не знаток C#, тут согласен на все 100%
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 14:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да. Но боюсь, что слова про ассоциативность еще больше запутают.


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

Если кратко, то мне кажется, что надо сделать несколько модификаций.

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

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

3) IMHO, не надо по тексту апеллировать к K&R. Те, кто ценят эту книгу, всё равно узнают, а тем, кто не в курсе, не интересно. Можно отсылки к K&R вынести в эпиграфы какие-нибудь, во введение и т. д...
Лучше высказать вначале какие-то принципы, ну типа того, что ты хочешь рассказать о том, как работает язык, на примере его собственной стандартной библиотеки и нескольких относительно простых задач. Так что те, кто умеют программировать на чём-то другом, должны воспринимать этот цикл, как обзор того, что надо забыть, а что надо пересмотреть из знания, например, PASCAL, чтобы проникнуться N.

Я как доберусь так, чтобы с транслятором посидеть, отпишусь ещё.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 15:06
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>может, у тебя просто нет педагогического таланта?

Дык, это, если у тебя есть, то попробуй что-то предложить КОНСТРУКТИВНОЕ...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 15:09
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну, понимаешь — kiler app практически единственный шанс Немерле стать хоть сколько нибудь популярным. Так что твои слова фактически равносильны признанию, что сложившийся статус кво тебя устраивает.


Почему это практически единственный шанс? Почему, например, хороший учебник хуже?

Да и потом, ерунда это всё. Никаких kiler app не существует, на самом деле. Всё можно реализовать на всём...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 06.10.09 15:33
Оценка:
Здравствуйте, Erop, Вы писали:


E>Почему это практически единственный шанс? Почему, например, хороший учебник хуже?


Хороший учебник массово читаемый в вузах конечно не хуже, только это по моему сложнее чем убойное приложение.

E>Да и потом, ерунда это всё. Никаких kiler app не существует, на самом деле. Всё можно реализовать на всём...


Ты их не видишь, но они есть
Re[7]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.10.09 15:37
Оценка:
Здравствуйте, Erop, Вы писали:

E>Почему это практически единственный шанс?


Лично я других не вижу пока.

E> Почему, например, хороший учебник хуже?


Потому что, чтобы начать читать учебник, нужен хороший стимул.

E>Да и потом, ерунда это всё. Никаких kiler app не существует, на самом деле. Всё можно реализовать на всём...


Существуют, и еще как.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237 on Windows 7 6.1.7100.0>>
AVK Blog
Re[8]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 15:49
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Существуют, и еще как.


Назови их, пожалуйста, для С++ и FORTRAN, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 15:54
Оценка:
Здравствуйте, FR, Вы писали:

E>>Почему это практически единственный шанс? Почему, например, хороший учебник хуже?

FR>Хороший учебник массово читаемый в вузах конечно не хуже, только это по моему сложнее чем убойное приложение.
Ну я вот, например, C изучал потому, что у K&R учебник классный...

IMHO, для того, чтобы язык освоило много программистов, надо чтобы его было или нужно или несложно осваивать. Можно влиять на разные множители вообще-то.

IMHO, опять же, продвижение и учебник -- это разные вещи...
Но хороший учебник поощряет продвижение, однако.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 06.10.09 16:10
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>Ну я вот, например, C изучал потому, что у K&R учебник классный...


Но распространился он из-за убойного UNIX.

E>IMHO, для того, чтобы язык освоило много программистов, надо чтобы его было или нужно или несложно осваивать. Можно влиять на разные множители вообще-то.


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

E>IMHO, опять же, продвижение и учебник -- это разные вещи...

E>Но хороший учебник поощряет продвижение, однако.

Конечно, но без убойного приложения или богатого толкача даже с хорошим учебником есть риск занесения в "академические" языки. Такое произошло например с SML.
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 16:19
Оценка:
Здравствуйте, FR, Вы писали:

FR>С Немерле и не нужно, то есть нет больших спонсоров которые его везде проталкивают, и сложно, так как типичному программисту нужно усваивать целых два (функциональщина и метапрограммирование) пласта чуждой информации. Конечно как плюс присутствует возможность достаточно пологой кривой обучения.


Ну так возможность легко въехать в два новых пласта могут быть как недостатком, так и достоинством

FR>Конечно, но без убойного приложения или богатого толкача даже с хорошим учебником есть риск занесения в "академические" языки. Такое произошло например с SML.


Ну есть намного более реальные риски. Например, он может надоесть Владу так же, как он надоел создателям...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Просто ради ерундиции интересно узнать...
От: FR  
Дата: 06.10.09 16:24
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>Назови их, пожалуйста, для С++ и FORTRAN, например...


Ну у C++ был очень крупный толкач, даже одно его использование одной из крупнейших компаний в отрасли было очень весомым фактором.
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 06.10.09 16:26
Оценка: +1 :)
Здравствуйте, Erop, Вы писали:

E>Ну так возможность легко въехать в два новых пласта могут быть как недостатком, так и достоинством


Возможности легко въехать нет, есть возможность легко начать изучать

FR>>Конечно, но без убойного приложения или богатого толкача даже с хорошим учебником есть риск занесения в "академические" языки. Такое произошло например с SML.


E>Ну есть намного более реальные риски. Например, он может надоесть Владу так же, как он надоел создателям...


Это да, но я верю в Влада
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: Erop Россия  
Дата: 06.10.09 16:41
Оценка:
Здравствуйте, FR, Вы писали:

FR>Возможности легко въехать нет, есть возможность легко начать изучать

Ну это примерно одно и то же
В любом случае это может быть достоинством...

E>>Ну есть намного более реальные риски. Например, он может надоесть Владу так же, как он надоел создателям...

FR>Это да, но я верю в Влада

Ну я ещё и в язык верю, но это не исчерпывающий список.
Я к тому, что волков бояться -- в лес не ходить...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[10]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 16:43
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну у C++ был очень крупный толкач, даже одно его использование одной из крупнейших компаний в отрасли было очень весомым фактором.


Ну, то есть, обошлось без "киллераппа"?
Понятно, что у всего, что стало популярным был какой-то путь к популярности. Но механически его воспроизводить таки глупо. Хороший язык постепенно приглянется кому-то настолько, что на нём появятся хорошие программы...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Просто ради ерундиции интересно узнать...
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.10.09 16:48
Оценка: +1 :)
Здравствуйте, Erop, Вы писали:

E>Назови их, пожалуйста, для С++ и


Windows подойдет?

E>FORTRAN, например...


Библиотеки BLAS, LAPACK, SPARSKIT.
К ним до сих пор делают байндинги из современных языков.
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 06.10.09 16:48
Оценка:
Здравствуйте, Erop, Вы писали:

FR>>Возможности легко въехать нет, есть возможность легко начать изучать

E>Ну это примерно одно и то же

Ну далеко нет

E>В любом случае это может быть достоинством...


Это да.
Re[11]: Просто ради ерундиции интересно узнать...
От: FR  
Дата: 06.10.09 16:50
Оценка: +1
Здравствуйте, Erop, Вы писали:


E>Ну, то есть, обошлось без "киллераппа"?


Так вроде сразу говорили или богатый спонсор или киллер.

E>Понятно, что у всего, что стало популярным был какой-то путь к популярности. Но механически его воспроизводить таки глупо. Хороший язык постепенно приглянется кому-то настолько, что на нём появятся хорошие программы...


Угу, например с питоном и руби так и было. Но это долгая история, лет 10 — 15.
Re[10]: Просто ради ерундиции интересно узнать...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.10.09 17:16
Оценка:
Здравствуйте, nikov, Вы писали:

N>Библиотеки BLAS, LAPACK, SPARSKIT.

N>К ним до сих пор делают байндинги из современных языков.

У фортрана еще и автор соответствующий, конторка под названием IBM.
... << RSDN@Home 1.2.0 alpha 4 rev. 1245 on Windows 7 6.1.7100.0>>
AVK Blog
Re[10]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 18:30
Оценка:
Здравствуйте, nikov, Вы писали:

N>Windows подойдет?

Они вроде как на С...

E>>FORTRAN, например...

N>Библиотеки BLAS, LAPACK, SPARSKIT.
N>К ним до сих пор делают байндинги из современных языков.

Только вот библиотеки эти появились ПОСЛЕ того, как FORTRAN стал популярен...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 18:34
Оценка:
Здравствуйте, FR, Вы писали:

FR>Угу, например с питоном и руби так и было. Но это долгая история, лет 10 — 15.


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

Только я больше верю в такой сценарий, как у UNIX -- найдётся задача, для которой язык подходит, на ней язык допилят, а там, глядишь, и другим подойдёт...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 18:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>У фортрана еще и автор соответствующий, конторка под названием IBM.


Эта конторка родила кучу мёртворождённого ПО. От языка управления заданиями из OS 360 и до гнутой полуоси
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[12]: Просто ради ерундиции интересно узнать...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.10.09 19:02
Оценка:
Здравствуйте, Erop, Вы писали:

E>Эта конторка родила кучу мёртворождённого ПО. От языка управления заданиями из OS 360 и до гнутой полуоси


Это никак не отменяет того факта, что за фортраном стояло серьезное бабло.
... << RSDN@Home 1.2.0 alpha 4 rev. 1245 on Windows 7 6.1.7100.0>>
AVK Blog
Re[13]: Просто ради ерундиции интересно узнать...
От: Erop Россия  
Дата: 06.10.09 21:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Это никак не отменяет того факта, что за фортраном стояло серьезное бабло.

Но и не доказывает его необходимости...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: Просто ради ерундиции интересно узнать...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.10.09 21:28
Оценка: :)
Здравствуйте, Erop, Вы писали:

AVK>>Это никак не отменяет того факта, что за фортраном стояло серьезное бабло.

E>Но и не доказывает его необходимости...

Кому как.
... << RSDN@Home 1.2.0 alpha 4 rev. 1245 on Windows 7 6.1.7100.0>>
AVK Blog
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.09 03:04
Оценка: +1
Здравствуйте, Mystic, Вы писали:
M>Зависит от задачи. Если код на 60% зависит от представления, то выбор представления очень важен.
Если код на 60% зависит от представления, то это очень плохой код. У тебя — именно такой. Современные компиляторы очень хорошо устраняют абстракции, поэтому оптимизация — не оправдание.
M>Есть и второй ньюанс: с этим представлением может быть связано очень много самых разных функций, то код получается неструктурированным. Ну например, в шахматах у нас есть класс "позиция", в нем тысяча методов, а все остальное всего ничего.
Про шахматы ничего не знаю. Про структурирование кода — вот у тебя получился совершенно неструктурированный код. Непонятно что, непонятно где.

S>>Для покера нам достаточно функции Compare, которая отображает два hand на (-1, 0, 1).


M>А достаточно ли? Самый простой пример вывести название комбинации, перейти в переборе рук к следующей. Не говоря уже о подсчете аутов и всяких других символических рассуждениях. Ты какую задачу решаешь, что так просто утверждаешь "достаточно"?

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

M>Собственно задача и состоит в написании оптимальной версии. Проще говоря, я пишу библиотеку, где код должен работать оптимально. Где будет использована библиотека? Например, в покерном движке. Или в калькуляторе.

Сначала нужно написать работающую, понятную версию. А уже потом, после профилирования, её оптимизировать. Ты начинаешь с непонятной версии; причём код у тебя устроен максимально неудачно — если профилирование покажет необходимость изменить представление, тебе придётся вручную переписать 80%. При нормальной реализации ты бы изменил 5% кода.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.10.09 03:45
Оценка:
Здравствуйте, Erop, Вы писали:

E>Статья супер, но я никак не доберусь до свободного времени, чтобы почитать с компьютером, а не просто с книжки.


Спасибо. :shuffle: А тот некоторые уже заклевать успели :).

E>Если кратко, то мне кажется, что надо сделать несколько модификаций.


E>1) сделать какие-то отступления для тех, кто хочет подробностей. Что-то типа сносок. Чтобы те, кому понятнее с ассоциативностями или там с оператором хитрым каким, посмотрели и обрадовались. Чем хорошо показывать потроха, так тем, что сразу можно экспериментировать ;)


Я и так старался делать сноски. Про ассоциативность надо конечно добавить. Про остальное... Тут нужны конкретные места. А то мой глаз замылен.

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

E>2) Мне кажется, что надо как-то собрать в кучку рекламу языка, и отделить её от собственно изложения. Можно по ходу дела писать ссылки назад. Типа "это одна из тех особенностей, которые обеспечивают ту мощность языка, о которой мы говорили выше"... Мне кажется, что люди, которым нужно узнать и люди, которым нужно захотеть узнать -- это разные люди. И первым надо дать возможность перейти сразу к делу, а вторых надо "обрабатывать" не переходя к "лишним" подробностям в самом начале. Может стоит привести пару примеров какого-нибудь крайне удачного кода, привести для сравнения код на шарпе, и пообещать, что к концу цикла читатель сможет переписать одно в другое сам. Или ещё какой рекламный трюк придумать (если реклама языка вообще входит в цели цикла)


Вся рекламщина в этой статье вынесена во врезку ("16 причин...", ну, по крайней мере мне так кажется). Примеры есть в других статьях. Самый очевидный, наверно, это пример замены ОО-подхода основанного на паттерне проектирования Посетитель на сопоставление с образцом. Его можно найти здесь
Автор(ы): Чистяков Влад (VladD2)
Дата: 03.03.2007
Язык программирования Nemerle заинтересовал многих в первую очередь своей мощнейшей подсистемой мак-росов. Однако и без них Nemerle предоставляет ряд су-щественных улучшений по сравнению с традиционными, императивными языками программирования (такими как Java, C# и C++).
Nemerle, кроме традиционного императивного програм-мирования, поддерживает функциональное программи-рование. Это выражается в наличии конструкций, упро-щающих манипуляцию функциями, построение и анализ сложных структур данных и т.п.
К сожалению, если вы не использовали возможности, присущие функциональным языкам ранее, то вам будет трудно оценить, насколько Nemerle может оказаться вам полезным в реальной повседневной работе. Данная статья призвана в неформальной форме продемонс-трировать это.
. Возможно имеет смысл дать ссылку на эту и другие статьи и явно описать, что "если вы знакомы с C# или ООП, то возможно для принятия решения об изучении этого языка вам стоит прочесть эти статьи". Я уже слышу не первую подобную просьбу, но тащить такие объемы из других статей как-то не хочется.

E>3) IMHO, не надо по тексту апеллировать к K&R. Те, кто ценят эту книгу, всё равно узнают, а тем, кто не в курсе, не интересно. Можно отсылки к K&R вынести в эпиграфы какие-нибудь, во введение и т. д...


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

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


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

E>Так что те, кто умеют программировать на чём-то другом, должны воспринимать этот цикл, как обзор того, что надо забыть, а что надо пересмотреть из знания, например, PASCAL, чтобы проникнуться N.


Разве людей можно заставить что-то забыть? :)
Иногда и следовало бы, но ведь знания становятся второй натурой человека. :(

E>Я как доберусь так, чтобы с транслятором посидеть, отпишусь ещё.


Вот это было бы очень полезно! Язык без практики не освоить. Особенно интересно задачки. Насколько их легко решить? Насколько они ясны? Насколько они наталкивают на исследование тех или иных вопросов? Не создают ли они тупиковых ситиуаций?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.09 05:20
Оценка:
Здравствуйте, Mystic, Вы писали:
M>Я объяснял, что этот код решает только вспомогательную задачу. Общий код вычисление силы руки примерно такой

M>
M>inline int only_one_bit_set(int mask)
M>{
M>  return mask & (mask - 1);
M>}

M>inline int is_flush(const card_t* cards)
M>{
M>  int mask = 0
M>    | get_suit(cards[0])
M>    | get_suit(cards[1])
M>    | get_suit(cards[2])
M>    | get_suit(cards[3])
M>    | get_suit(cards[4])
M>  ;

M>  return only_one_bit_set(mask);
M>}

M>inline int evaluate_5(const card_t* cards)
M>{
M>  int product = 1
M>    * primary[get_nominal(cards[0])]
M>    * primary[get_nominal(cards[1])]
M>    * primary[get_nominal(cards[2])]
M>    * primary[get_nominal(cards[3])]
M>    * primary[get_nominal(cards[4])]
M>  ;

M>  int index = is_flush(cards) : magic_flush[product % MAGIC_SIZE] ? magic_normal[product % MAGIC_SIZE];
M>  int delta = product % hand_ranks[index] + 1;
M>  return hand_ranks[index+delta];
M>}
M>

Отлично. Еще один фрагмент кода, где детали выпячены вперёд, а смысл спрятан как можно глубже.


M>Для корректной работы этого кода мне нужны массивы magic_flush, magic_normal и hand_ranks, которые и должен создать скрипт на C#/Nemerle. Собственно говоря, для построения этого скрипта и надо (1) построить тот словарь (2) обработать его.

А зачем здесь вообще массивы? Я в принципе не понимаю, что должен делать этот код.

M>Ок, как бы ты предложить более просто сформировать массивы magic_flush, magic_normal и ranks?

Я бы предложил для начала вообще обойтись без массивов. Для начала нужно понять, что за задача решается. Вот у тебя есть функция evaluate_5. Что она возвращает? Почему у неё UB для случая, если переданы не 5 карт?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.10.09 08:03
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Отлично. Еще один фрагмент кода, где детали выпячены вперёд, а смысл спрятан как можно глубже.


Это и есть детали реализации. Причем эти детали надо реализовать максимально производительно. Весь высокий уровень расположен выше.

M>>Для корректной работы этого кода мне нужны массивы magic_flush, magic_normal и hand_ranks, которые и должен создать скрипт на C#/Nemerle. Собственно говоря, для построения этого скрипта и надо (1) построить тот словарь (2) обработать его.

S>А зачем здесь вообще массивы? Я в принципе не понимаю, что должен делать этот код.

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

S>Я бы предложил для начала вообще обойтись без массивов. Для начала нужно понять, что за задача решается. Вот у тебя есть функция evaluate_5. Что она возвращает? Почему у неё UB для случая, если переданы не 5 карт?


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

На счет UB это отдельный холивар. Куча C-шных библиотек имеют UB в случае неверных параметров, но больших палок в колеса это не ставит.
Re[10]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.09 08:45
Оценка:
Здравствуйте, Mystic, Вы писали:
M>Это и есть детали реализации. Причем эти детали надо реализовать максимально производительно. Весь высокий уровень расположен выше.
Эти детали — не нужны.

M>Код оценивает пятикарточную руку в покере. Массивы нужны для производительности.

Это неочевидно. Я имею в виду — производительность.
M>Основной смысл в том, что если каждому номиналу карты сопоставить простое число, то их произведение не зависит от порядка карт и однозначно определяет комбинацию в руке без учета мастей.
Это понятно. Непонятно, почему было выбрано именно произведение чисел, и зачем было затачивать весь код именно на него?
Вот простой пример: можно всю руку всунуть в 32 бита, назначив битовые поля номиналам и мастям. При этом можно нормализовывать их так, чтобы устранять зависимость от порядка.
Все нужные тебе операции — в том числе проверка на флеш — делаются примитивными битовыми маскированиями.
Это может оказаться быстрее, чем умножения и деления. Если бы твой код был написан нормально, в соответствии со здравым смыслом и архитектурой, то при смене представления руки не пришлось бы переписывать всё.
M>Знание этого произведения, а также того факта, в руке флеш или нет, позволяет нам моментально по таблицам получить силу руки.
Ну, в принципе, это более-менее нормальный подход. С современными объемами памяти можно просто тупо построить массив всех возможных комбинаций.

M>Хорошо, одно из возможных применений покер-калькулятор. Ты задаешь спектр своих рук, спектр рук оппонента, стол.

Плохо. Задачи описывать ты по-прежнему не умеешь.
M>Задача состоит в том, чтобы перебрать все варианты и выдать процент на победу каждого игрока.
Варианты чего нужно перебирать?
M>На счет UB это отдельный холивар. Куча C-шных библиотек имеют UB в случае неверных параметров, но больших палок в колеса это не ставит.
А, ну-ну.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.10.09 09:48
Оценка:
Здравствуйте, Sinclair, Вы писали:

M>>Это и есть детали реализации. Причем эти детали надо реализовать максимально производительно. Весь высокий уровень расположен выше.

S>Эти детали — не нужны.

На самом деле я могу выступать как сторонний разработчик. Т. е. сама задача для меня состоит в построении производительной реализации функции оценки руки. Для чего она нужна заказчику секрет.

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

S>Это понятно. Непонятно, почему было выбрано именно произведение чисел, и зачем было затачивать весь код именно на него?
S>Вот простой пример: можно всю руку всунуть в 32 бита, назначив битовые поля номиналам и мастям. При этом можно нормализовывать их так, чтобы устранять зависимость от порядка.

Кроме пятикарточного покера есть еще другие варианты, такие как техас, омаха, 7-карточный стад. Так что кроме функции evaluate_5 могут быть еще функции evaluate_7, evaluate_omaxa и т. п. Во-вторых, тут играет свою роль также то, как этот код будет использоваться. Например, самая топорная реализация evaluate_7 это перебор 21-го варианта.

S>Все нужные тебе операции — в том числе проверка на флеш — делаются примитивными битовыми маскированиями.


Проверка на флеш у меня и сейчас битовые операции: четыре OR-а, пять AND-ов, декремент и никаких условий.

S>Это может оказаться быстрее, чем умножения и деления. Если бы твой код был написан нормально, в соответствии со здравым смыслом и архитектурой, то при смене представления руки не пришлось бы переписывать всё.


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

M>>Хорошо, одно из возможных применений покер-калькулятор. Ты задаешь спектр своих рук, спектр рук оппонента, стол.

S>Плохо. Задачи описывать ты по-прежнему не умеешь.

Мне кажется, что слова "покер-калькулятор" говорят сами за себя. Проще говоря необходимо вычислить таблицу шансов (odds). Например, игра в Texas Hold'em, префлоп. У игрока #1 AKs, у игрока #2 QQ. Задача в том, чтобы перебрать все варианты из пяти закрытых карт и определить шансы каждого игрока на победу. Другими словами это те проценты, что высвечиваются в телетрансляции. Пример такого калькулятора тут. Вот как это выглядит:
Re[12]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.10.09 10:50
Оценка:
Здравствуйте, Mystic, Вы писали:

M>На самом деле я могу выступать как сторонний разработчик. Т. е. сама задача для меня состоит в построении производительной реализации функции оценки руки. Для чего она нужна заказчику секрет.

Тем не менее, детали всё равно не нужны.

M>Кроме пятикарточного покера есть еще другие варианты, такие как техас, омаха, 7-карточный стад. Так что кроме функции evaluate_5 могут быть еще функции evaluate_7, evaluate_omaxa и т. п. Во-вторых, тут играет свою роль также то, как этот код будет использоваться. Например, самая топорная реализация evaluate_7 это перебор 21-го варианта.

И? Это что, как-то оправдывает грязь в коде? Использование должно быть как-то отделено от реализации.

S>>Все нужные тебе операции — в том числе проверка на флеш — делаются примитивными битовыми маскированиями.

M>Проверка на флеш у меня и сейчас битовые операции: четыре OR-а, пять AND-ов, декремент и никаких условий.
Зато определение категории делается умножениями и делениями. Кстати, в том варианте, который пришёл бы в голову мне, проверка на флеш делалась бы одним AND и одним сравнением.

M>Ну считай это лабораторными работами, research. Я пробую разные варианты представления руки и смотрю на получаемую производительность. Моя задача выбрать наилучший вариант.

Гм. Тем более у тебя представление руки должно быть отделено от всего остального. Не нужно пропихивать его во все места в явном виде. Табличный подход, вообще говоря, ортогонален способу хранения самой руки. Тут весь выбор — между тем, какую долю информации о руке можно выкинуть, и всё еще быть способным оценить её силу. В классическом покере настолько мало комбинаций, что можно тупо все их поместить в таблицу — этот подход будет хорошо работать для серверов с большой нагрузкой. Благодаря тому, что памяти у них достаточно, и она строго иммутабельна. Если узкое место — это память, то можно провести формальный разбор для категоризации — сгруппировать карты по номиналу и отсортировать группы по размеру. Получится всего пять вариантов паттернов:
41 — Quads
32 — Full House
311 — Trips
221 — Two Pair
2111 — Pair
11111 — Garbage либо Straight


M>Мне кажется, что слова "покер-калькулятор" говорят сами за себя.

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

M>Проще говоря необходимо вычислить таблицу шансов (odds). Например, игра в Texas Hold'em, префлоп. У игрока #1 AKs, у игрока #2 QQ. Задача в том, чтобы перебрать все варианты из пяти закрытых карт и определить шансы каждого игрока на победу. Другими словами это те проценты, что высвечиваются в телетрансляции. Пример такого калькулятора тут. Вот как это выглядит:

M>
Ну и как будет устроен код?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.10.09 12:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Зато определение категории делается умножениями и делениями. Кстати, в том варианте, который пришёл бы в голову мне, проверка на флеш делалась бы одним AND и одним сравнением.


Неправда, четырьмя AND-ами и четырьмя сравнениями. Ибо в колоде четыре масти.

M>>Ну считай это лабораторными работами, research. Я пробую разные варианты представления руки и смотрю на получаемую производительность. Моя задача выбрать наилучший вариант.

S>Гм. Тем более у тебя представление руки должно быть отделено от всего остального. Не нужно пропихивать его во все места в явном виде. Табличный подход, вообще говоря, ортогонален способу хранения самой руки. Тут весь выбор — между тем, какую долю информации о руке можно выкинуть, и всё еще быть способным оценить её силу. В классическом покере настолько мало комбинаций, что можно тупо все их поместить в таблицу — этот подход будет хорошо работать для серверов с большой нагрузкой. Благодаря тому, что памяти у них достаточно, и она строго иммутабельна. Если узкое место — это память, то можно провести формальный разбор для категоризации — сгруппировать карты по номиналу и отсортировать группы по размеру. Получится всего пять вариантов паттернов:
S>41 — Quads
S>32 — Full House
S>311 — Trips
S>221 — Two Pair
S>2111 — Pair
S>11111 — Garbage либо Straight

Не совсем так. Вообще в покере чуть больше чем 7000 различных вариантов рук. Точное число выводит мой C#-повский исходник. Но вообще, существует C(52,5) вариантов руки из пяти карт (это 2.6M). Если же порядок следования карт существенен, то 310M. Вообще, карты попадают нам в функцию в неотсортированном порядке, на нормализацию закладываться нехорошо. Делать ее на лету? По сути трюк с простыми числами и есть такой вариант нормализации.

Например, вероятности считаются по методу монте-карло примерно так:

  player1.Hand.Clear();
  player1.Hand.Add(CARD_Ac); // Трефовый туз
  player1.Hand.Add(CARD_Kd); // Бубновый король
  player2.Hand.Add(CARD_Qd); // Бубновая дама
  player2.Hand.Add(CARD_Qs); // Пиковая дама

  int total = 0;

  for(;;)
  {
    if (UserTerminate()) break;

    Player1.Hand.Truncate(2); //Оставить только первые две карты
    Player2.Hand.Truncate(2);

    CardSet avail = CardSet.AllCards - Player1.Hand - Player2.Hand;

    Card c1 = avail.ExtractRandomCard();
    Card c2 = avail.ExtractRandomCard();
    Card c3 = avail.ExtractRandomCard();

    player1.Hand.Add(new Cards[] {c1, c2, c3});
    player2.Hand.Add(new Cards[] {c1, c2, c3});

    int firstHandRank = player1.Hand.Estimate(); // Внутри вызов estimate_5 или другого estimate_XXX в зависимости от вида игры
    int secondHandRank = player2.Hand.Estimate(); 

    if (firstHandRank > secondHandRank) player1.IncVictoryCount();
    if (firstHandRank < secondHandRank) player2.IncVictoryCount();
    ++total;
  }

  Console.WriteLine("Player 1: {0:f}", 100.0 * player1.VictoryCount / total);
  Console.WriteLine("Player 2: {0:f}", 100.0 * player2.VictoryCount / total);


Опять же это прикидка одного из вариантов использования.
Re[14]: Статья "Введение в Nemerle" - по критикуйте
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.10.09 03:44
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Неправда, четырьмя AND-ами и четырьмя сравнениями. Ибо в колоде четыре масти.

Да, немножко ошибся. Одним AND и четырьмя сравнениями. Это если не привлекать MMX.
Но это всё неважно. Важно то, что тебе нужна алгебра рук. Как эта алгебра будет устроена внутри — и есть предмет твоих экспериментов.
Но для начала нужно отделить потребителей алгебры от её реализации. У тебя проведена очень крупногранулярная граница. Нет отдельного метода, который отвечает за конверсию руки во внешнем представлении в её тег.


M>Не совсем так. Вообще в покере чуть больше чем 7000 различных вариантов рук.

Как-то мало.
M>Точное число выводит мой C#-повский исходник. Но вообще, существует C(52,5) вариантов руки из пяти карт (это 2.6M).
Вот именно. Всего 2.6м. Если присвоить каждому варианту 32хбитный "тег силы", то вся таблица займёт 10.4 Mb — семечки.
Сравнение рук будет делаться за два lookup. Понятно, что для семикартных вариантов это уже не пройдёт. Именно поэтому важно отделить алгоритмы от представления.

Вот твой "Rank" — он чему соответствует?

M>Опять же это прикидка одного из вариантов использования.

В этом варианте совершенно непонятно, где учитывается старшинство карт для случая двух full house, к примеру. Как-то он выглядит подозрительно.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Статья "Введение в Nemerle" - по критикуйте
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.10.09 10:53
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


S>Вот твой "Rank" — он чему соответствует?


Ты назвал его "тегом силы". Некоторое число, которое показывает силу руки. Две одинаковые по силе руки имеют одинаковый ранг. Если одна рука сильнее, то ее ранг соответственно больше.

S>Но это всё неважно. Важно то, что тебе нужна алгебра рук. Как эта алгебра будет устроена внутри — и есть предмет твоих экспериментов.

S>Но для начала нужно отделить потребителей алгебры от её реализации. У тебя проведена очень крупногранулярная граница. Нет отдельного метода, который отвечает за конверсию руки во внешнем представлении в её тег.

M>>Не совсем так. Вообще в покере чуть больше чем 7000 различных вариантов рук.

S>Как-то мало.

Скажем так, чуть более 7000 вариантов различной силы рук. Т. е. рука Ah Kh Qh Jh Th (флеш-рояль в червах) получает ранг 1, рука As Ks Qs Js Ts тоже получает ранг 1 (флеш-рояль в пике), а вот рука Kh Qh Jh Th 9h уже получит ранг 2 и т. п.

M>>Точное число выводит мой C#-повский исходник. Но вообще, существует C(52,5) вариантов руки из пяти карт (это 2.6M).

S>Вот именно. Всего 2.6м. Если присвоить каждому варианту 32хбитный "тег силы", то вся таблица займёт 10.4 Mb — семечки.
S>Сравнение рук будет делаться за два lookup. Понятно, что для семикартных вариантов это уже не пройдёт. Именно поэтому важно отделить алгоритмы от представления.

Да, 10.4 Mb (5.2 Mb) семечки. Но это размер таблицы для того случая, когда рука на входе уже нормализована. Вопрос еще в том, как руке на входе сопоставить число от 0 до 2.6M. Конечно, если я отсортирую руку и переведу ее из биномиальной системы счисления в обычную, то я получу искомый индекс. Но это так же требует операций и ветвления. А если же поступать совсем тупо, то 52 варианта это 6 бит, 5*6 = 30, 2^30 = 1 Gb элементов, если брать по два байта на каждый, получим 2Gb. Достаточно многовато для машины юзверя, например.

Итак, берем вариант сортировка + перевод из биноминальной системы счисления. С переводом из биноминальной системы проще: пять сложений + пять обращений к таблице. А вот сортировка это, имхо, несколько неудачно. Во-первых, это сравнения и перемещения. Во-вторых, она меняет порядок следования карт. Так что или дополнительное копирование, или неприятности для пользователя библиотеки (в моем примере, вызовы Truncate уже не пройдут, надо руку инициализировать заново).

И всему этому противостоит изначальный вариант. Который содержит 1 IF (ветвление), 6 AND, 4 OR, 1 DEC, 4 MUL, 1 DIV и пять обращений к таблице. Правда тот вариант, что я привел, использует сжатый формат таблицы, поэтому надо добавить еще 1 ADD, 1 INC, 1 DIV и еще одно обращение к таблице. К тому же передаваемая рука не меняется.

M>>Опять же это прикидка одного из вариантов использования.

S>В этом варианте совершенно непонятно, где учитывается старшинство карт для случая двух full house, к примеру. Как-то он выглядит подозрительно.

Все в таблице. Смотри, есть full house KKKTT и QQQJJ. K это 12, Q это 11, J это 10, T это 9. Primary[12] = 37, Primary[11] = 31, Primary[10] = 29, Primary[9] = 23. Получаем для руки KKKTT значение Product = 37*37*37*23*23 = 26795437 (при этом это значение не зависит от порядка карт). Для руки QQQJJ получаем Product = 31*31*31*29*29 = 25054231. Собственно говоря, эти числа (26795437 и 25054231) однозначно характеризуют силу руки. Нельзя придумать другую руку, которая бы дала означенное произведение в силу единства разложения на простые сомножители. Единственное исключение из этого правила это флеш, поэтому надо надо иметь две таблицы, одна для случая флеша, другая для случая остальных рук. Теперь осталось только по Dictionary, который строил мой самый первый пример на C# вытащить "тег силы", или в моих наименованиях hand rank.

Максимальное возможное значение произведения это AAAAK это 104553157 (104.5M). Умножаем на два, получаем 209M. Еще на два (флеш и не флеш) и уже 418M. Может для сервера это приемлемо, но для обычным пользователей это может быть многовато. Можно ли эту таблицу сжать? Да, можно. В нашем словаре точно не будет более чем 7300 различных произведений. Поэтому можно подобрать такое число, чтобы остаток от деления на это число для всех интересующих нас произведений был различный. Думаю, что это будет простое число из интервала до 10 000 — 50 000.

В моем исходнике я делал хэширование в два этапа при помощи двух таблиц. Вначале я делаю MOD с некоторым простым числом (MAGIC_SIZE, я выбирал это число в районе 2000-3000). Соответственно у меня получалось, что некоторые произведения имели одинаковые остатки. Вторым шагом я просто для каждого такого конфликта подбирал еще одно число, чтобы остатки от деления для всех конфликтных значений были различны. Таким образом, в моем исходнике таблицы magic_flush и magic_normal просто содержат индекс в таблице hand_ranks. Элемент hand_ranks[magic_index] содержит подобранное число, на которое надо поделить произведение. hand_ranks[magic_index+1], hand_ranks[magic_index+2], ..., hand_ranks[magic_index+hand_ranks[magic_index]] содержат ранги рук (теги силы). Отсюда и получаются дополнительные операции.



В целом я считаю, что этот метод вполне имеет себе право на жизнь (скромный размер таблиц, разумное число операций). По крайней мере с ним можно поэкспериментировать. А раз так, почему бы не реализовать его и не проверить в жизни? А для этого первым этапом и нужен тот Dictionary, который я строил. Ну и нужен вспомогательный исходник, который бы эти таблицы мне создал.
Re: Статья "Введение в Nemerle" - по критикуйте
От: C0s Россия  
Дата: 13.11.09 17:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В первую очередь интересует насколько получилось понятно, доступно и целостно.


мне, как человеку, знающему про C# с .net только то, что эта байда сильна похожа на java-технологии, но не более (хотя, пользуясь временем, про это тоже читаю параллельно), статья показалась достаточно понятной и интересной. интереснее, чем то, что когда-то мне попалось про scala.

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

из формальных вещей, не связанных непосредственно с особенностями погружения в язык, хотелось бы заметить, что надо поточнее дать понять, что стоит денег (visual studio), а что нет (sdk?). скажем мне ставить нелицензионный софт не годится, покупать для обучения — лениво. следовательно, требуется пара слов именно о том, какая <i>бесплатная</i> конфигурация на компе будет достаточной.
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: Aleх  
Дата: 13.11.09 22:30
Оценка:
Здравствуйте, C0s, Вы писали:

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


VD>>В первую очередь интересует насколько получилось понятно, доступно и целостно.


C0s>мне, как человеку, знающему про C# с .net только то, что эта байда сильна похожа на java-технологии, но не более (хотя, пользуясь временем, про это тоже читаю параллельно), статья показалась достаточно понятной и интересной. интереснее, чем то, что когда-то мне попалось про scala.


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


C0s>из формальных вещей, не связанных непосредственно с особенностями погружения в язык, хотелось бы заметить, что надо поточнее дать понять, что стоит денег (visual studio), а что нет (sdk?). скажем мне ставить нелицензионный софт не годится, покупать для обучения — лениво. следовательно, требуется пара слов именно о том, какая <i>бесплатная</i> конфигурация на компе будет достаточной.


В качестве некоторого самообмана могу посоветовать поставить виртуальную машину на неё Виндовс XP с пиратским софтом. Файл с виртуальной машиной и её жестким диском можно зашифровать. Таким образом можно запереться в комнате, закрыть шторы, и пока никто не видит, запускать виртуальную машину и изучать немерле. А в остальное время говорить окружающим и самого себя заставлять верить, что на компьютере нет пиратского софта. И типа совесть будет чиста
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: samius Япония http://sams-tricks.blogspot.com
Дата: 13.11.09 22:51
Оценка:
Здравствуйте, Aleх, Вы писали:

C0s>>из формальных вещей, не связанных непосредственно с особенностями погружения в язык, хотелось бы заметить, что надо поточнее дать понять, что стоит денег (visual studio), а что нет (sdk?). скажем мне ставить нелицензионный софт не годится, покупать для обучения — лениво. следовательно, требуется пара слов именно о том, какая <i>бесплатная</i> конфигурация на компе будет достаточной.


A>В качестве некоторого самообмана могу посоветовать поставить виртуальную машину на неё Виндовс XP с пиратским софтом.


Если кто не понял, то была критика статьи, а не крик о помощи.
На всякий случай, всю информацию о требованиях можно найти на офф сайте, ничего пиратского не требуется. При необходимости Visual Studio можно взять Express Edition (для некоммерческого использования). Но и она не требуется, это лишь один из пунктов, перечисленных здесь.
Re[3]: Статья "Введение в Nemerle" - по критикуйте
От: FR  
Дата: 15.11.09 06:18
Оценка: +1
Здравствуйте, Aleх, Вы писали:

A>В качестве некоторого самообмана могу посоветовать поставить виртуальную машину на неё Виндовс XP с пиратским софтом. Файл с виртуальной машиной и её жестким диском можно зашифровать. Таким образом можно запереться в комнате, закрыть шторы, и пока никто не видит, запускать виртуальную машину и изучать немерле. А в остальное время говорить окружающим и самого себя заставлять верить, что на компьютере нет пиратского софта. И типа совесть будет чиста


Зачем фигней заниматься при доступном 90 дневном триале?
Да и образы для виртуальной машины с предустановленной триальной VS тоже вроде раздаются.
Re[4]: Статья "Введение в Nemerle" - по критикуйте
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 15.11.09 20:12
Оценка:
Здравствуйте, samius, Вы писали:

S> При необходимости Visual Studio можно взять Express Edition (для некоммерческого использования).


1) VS Express можно использовать и для коммерческих целей.
2) Но интеграция на нее не поставится, нужна минимум Standard.
... << RSDN@Home 1.2.0 alpha 4 rev. 1284 on Windows 7 6.1.7600.0>>
AVK Blog
Re[2]: Статья "Введение в Nemerle" - по критикуйте
От: Denom Украина  
Дата: 16.11.09 11:42
Оценка: +1
Здравствуйте, C0s, Вы писали:

VS Integration ставится на Visual Studio Shell (кажись integrated mode)
Visual Studio Shell — бесплантая
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.