Re[27]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 06:17
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>А в плюсах не так, что ли?


А при чем здесь плюсы? В плюсах вообще нет возможностей, предоставляемых Nemerle.

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

+1

Так же к этому предложению я бы добавил прекратить выискивать в данном обсуждении противников Nemerle.

Д>Другой вариант — это разграничивать область действия макросов в явном виде, когда это необходимо.


Эти области могут сильно пересекаться и твое решение не будет работать. Так, я пытался приводить пример описания класса агента:
agent_class LoadBalancer
  message MsgAddNode
    { /* Здесь должно быть описание класса MsgAddNode. */
      // Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
      autosubscribe NodeListMonitor;
      ...
    }
  event EvtAddNode( m : MsgAddNode )
    {
      // В реализации метода так же могут потребоваться другие макропакеты.
    } autosubscribe MsgAddNode priority 0;


Д>Есть еще идеи?


1. Позволять использовать квалифицированное имя для расширений синтаксиса в случае конфликтов:
agent_class LoadBalancer
  message MsgAddNode
    { /* Здесь должно быть описание класса MsgAddNode. */
      // Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
      alien.autosubscribe NodeListMonitor;
      ...
    }
  event EvtAddNode( m : MsgAddNode )
    {
      // В реализации метода так же могут потребоваться другие макропакеты.
    } sobjectizer.autosubscribe MsgAddNode priority 0;

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

В качестве альтернативного синтаксиса для указания квалифицированного имени
autosubscribe#sobjectizer MsgAddNode ...;


2. Позволить ввести псевдонимы для ключевых слов.
alias autosubscribe from Macro.Library.Alien to msg_subscribe;
alias autosubscribe from SObjectizer.Macro.Library to event_subscribe;
agent_class LoadBalancer
  message MsgAddNode
    { /* Здесь должно быть описание класса MsgAddNode. */
      // Для описания какой-то части потребовалось воспользоваться средствами другого макропакета.
      msg_subscribe NodeListMonitor;
      ...
    }
  event EvtAddNode( m : MsgAddNode )
    {
      // В реализации метода так же могут потребоваться другие макропакеты.
    } event_subscribe MsgAddNode priority 0;


И ограничить область действия alias-ов.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[27]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 06:20
Оценка: -1
Здравствуйте, IT, Вы писали:

IT>Это уже откровенные придирки.


Это не придирки. Это способ показать, что мне не навится предложенное решение.
Хотя бы потому, что сначала могла быть куплена либа A и с ней не было проблем. Затем была куплена либо B, с которой так же не было проблем, пока кому-то не пришлось в одном месте объединить использование A и B. Когда здесь враперы делать? Сам же писал недавно про историю, когда в условиях цейтнота на косяки в конфигурации наткнулись. Хотел бы лично ты в таких условиях враперы для каких-то либ писать?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[28]: Снова о Nemerle или профанация не пройдет :)
От: Дарней Россия  
Дата: 21.02.06 07:15
Оценка:
Здравствуйте, eao197, Вы писали:

E>А при чем здесь плюсы? В плюсах вообще нет возможностей, предоставляемых Nemerle.


но проблемы с библиотеками там в точности такие, как ты описал.


E>1. Позволять использовать квалифицированное имя для расширений синтаксиса в случае конфликтов:


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

E>2. Позволить ввести псевдонимы для ключевых слов.


алиасы — да, тоже неплохой вариант.
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re: Снова о Nemerle или профанация не пройдет :)
От: VladGalkin Украина  
Дата: 21.02.06 09:27
Оценка: 1 (1)
Здравствуйте, IT, Вы писали:

IT>3. MS купит команду Nemerle и конкуренция будут происходить в самой MS.

Собственно, в доке "Meta-programming in Nemerle", нашел следующую сноску:

The Nemerle project is supported by Microsoft Research ROTOR2 grant.

Так что конкуренция и происходит среди разработчиков, спонсируемых MS.
... << RSDN@Home 1.1.4 stable rev. 510>>
ДЭ!
Re[15]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 09:50
Оценка: 34 (2) +1 -2
Здравствуйте, Vermicious Knid, Вы писали:

VK>Пример я сначала написал на Nemerle, а затем перевел на C#. При этом функциональность не идентична. Так JunkFood в Nemerle сделан вариантом, а не перечислением. Использование перечисления сделало бы код даже более кратким, но менее расширяемым(к варианту достаточно легко можно добавить различные свойства и методы). Еще в C# версии вместо списков массивы, но заменить списки массивами в Nemerle очень легко(размер програмы увеличится незначительно, просто со списками чуть-чуть красивее). А так програмы выдают в консоль один и тот же текст. По идее по коду должно быть достаточно легко понятно, что он делает. Но если что непонятно — спрашивайте.


VK>Сначала код на C#(133 строки, 3181 символ):

/.../
VK>Теперь Nemerle(93 строки, 2220 символов, ~ в 1.4 раза меньше по обоим параметрам):
/.../

Ключевое слово — выделено. Даже в С#, как и в других (квази)-ООЯ, можно воспользоваться встроенными механизмами для сокращения всех этих switch. Например (это скорее непроверенный псевдо-код, к модификаторам доступа и типам попрошу не придираться):
class Currency {
    static public Currency UAH = new Currency("UAH", 1.0);
    static public Currency USD = new Currency("USD", 5.05);
    static public Currency EUR = new Currency("EUR", 6.06);

    Decimal rate;
    String isoName;

    public Currency(String isoName, Decimal rate) {
        this.isoName = isoName;
        this.rate = rate;
    }
    
    public ToString() {
        return isoName + "/" + rate;
    }
}

class JankFood {
    String name;
    public JankFood(String name) {
        this.name = name;
    }
    
    public ToString() {
        return name;
    }
}


class Price {
    JunkFood food;
    Currency currency;
    Decimal amount;

    public Price(JunkFood food, Currency currency, Decimal amount) {
        this.food = food;
        this.currency = currency;
        this.amount = amount;
    }
    
    public Price ToCurrency(Currency newCurrency) {
        return new Price(food, newCurrency, amount*currency.rate/newCurrency.rate);
    }
    
    public String ToString() {
        return food.name + ": " + amount + " " + currency.isoName;
    }
}


Тут я схалявил — просто отдельный класс для Price и для JunkFoodPrice мне писать лень. Идея понятна и без этого. Кстати, курсы не забиты гвоздями-сотками в код, но при желании можно сделать и это .
Я не знаю как ты считал строчки кода, но в любом случае, это лучше чем тот кусок спагетти, что привёл ты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[16]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 09:59
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Я не знаю как ты считал строчки кода, но в любом случае, это лучше чем тот кусок спагетти, что привёл ты.


+1

Андрей, а ты мог бы этот же пример на Smalltalk написать? Хоть это и оффтопик в данной ветке, но лично мне очень интересно чистое ОО решение увидеть.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Снова о Nemerle или профанация не пройдет :)
От: little_alex  
Дата: 21.02.06 10:13
Оценка: +1 :)
Здравствуйте, yrashk, Вы писали:


Y>Чем Вам A не параметр? Мне передан параметр A, я потребовал, чтобы он был INTEGER. Хотите узнавать а не требовать? TYPE-OF/CLASS-OF к Вашим услугам. Ы?


Нужно:
(mymacro 10) =>; ok
(mymacro (+ 1 2)) =>; ok
(mymacro "bla-bal") =>; error (причем во время распахивания макроса)
(mymacro (substr "bla-bla" :start 0 :end 2)) =>; error (причем во время распахивания макроса)
(mymacro (cosh (+ 1 2 3 (* 10 20))) =>; ok
(let ((x 10))
  (declare (type number x))
    (mymacro x))) =>; ok

(let ((x "bla-bla"))
  (declare (type string x))
    (mymacro x))) =>; error

Напишешь такое ?
Re[17]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 10:16
Оценка: 13 (1)
Здравствуйте, eao197, Вы писали:

ANS>>Я не знаю как ты считал строчки кода, но в любом случае, это лучше чем тот кусок спагетти, что привёл ты.


E>+1


E>Андрей, а ты мог бы этот же пример на Smalltalk написать? Хоть это и оффтопик в данной ветке, но лично мне очень интересно чистое ОО решение увидеть.


В конкретно данном случае, когда логики почти нет, а есть одни аксесоры, то код объектной модели такой же и будет Только без декларации типов, модификаторов и пр. (я там vitual забыл расставить). А разница могла бы быть в процессе разработки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[4]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 10:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Помогите вывести урода на чистую воду.


Рекомендую вспомнить про какую-то фичу, о которой забыл сразу, а потом сделать ряд "контрольных" "уточнений" к изначальному заданию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[16]: Снова о Nemerle или профанация не пройдет :)
От: Vermicious Knid  
Дата: 21.02.06 10:33
Оценка: +2
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Ключевое слово — выделено. Даже в С#, как и в других (квази)-ООЯ, можно воспользоваться встроенными механизмами для сокращения всех этих switch. Например (это скорее непроверенный псевдо-код, к модификаторам доступа и типам попрошу не придираться).


Ты в состоянии читать внимательно? Я просил не приводить советов по улучшению кода, мне это даром не нужно.

Это не пример ООП/ООД и рефакторинга, это пример и сравнение switch/case и match. У меня не было цели решить конкретную задачу(у меня и задачи то не было). У меня была цель продемонстрировать конкретный синтаксис. В данном случае синтаксис match. Поверь мне я в состоянии самостоятельно отрефакторить этот код не хуже чем ты. Но просто суть в том, что в этом коде неважно, что конкретно делается, важно какими средствами.
Re[18]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 10:42
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>А разница могла бы быть в процессе разработки.


Интересная ссылочка. Ее бы в тему Проектирование и рефакторинг
Автор: VladD2
Дата: 09.02.06
...


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 10:43
Оценка: -2
Здравствуйте, Vermicious Knid, Вы писали:

ANS>>Ключевое слово — выделено. Даже в С#, как и в других (квази)-ООЯ, можно воспользоваться встроенными механизмами для сокращения всех этих switch. Например (это скорее непроверенный псевдо-код, к модификаторам доступа и типам попрошу не придираться).


VK>Ты в состоянии читать внимательно? Я просил не приводить советов по улучшению кода, мне это даром не нужно.


VK>Это не пример ООП/ООД и рефакторинга, это пример и сравнение switch/case и match. У меня не было цели решить конкретную задачу(у меня и задачи то не было). У меня была цель продемонстрировать конкретный синтаксис. В данном случае синтаксис match. Поверь мне я в состоянии самостоятельно отрефакторить этот код не хуже чем ты. Но просто суть в том, что в этом коде неважно, что конкретно делается, важно какими средствами.


Сферический конь в вакууме? Ну-ну. Важно то, для чего какие средства есть.
Подсказка: паттерн-матчинг != switch/case. Соответсвенно, весь пример не репрезентативен. Что и было проиллюстрировано.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[18]: Снова о Nemerle или профанация не пройдет :)
От: Vermicious Knid  
Дата: 21.02.06 10:59
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Сферический конь в вакууме? Ну-ну. Важно то, для чего какие средства есть.


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

ANS>Подсказка: паттерн-матчинг != switch/case. Соответсвенно, весь пример не репрезентативен. Что и было проиллюстрировано.


Подсказка: В Nemerle паттерн-мэтчинг == switch/case. Пример демонстрирует то с каким успехом паттерн-мэтчинг в Nemerle заменяет и switch/case, и if/else(который в отличие от switch/case в языке все же есть), и некоторые другие конструкции.

Согласись, что то что на C# выглядит просто отвратительно(в каком-то смысле я намеренно писал плохой код) на Nemerle выглядит намного читабельнее. Опять таки легче провести рефакторинг Nemerle кода, просто потому, что смысл более понятен.
Re[19]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 11:06
Оценка: 1 (1) +1 :)))
Здравствуйте, eao197, Вы писали:

ANS>>А разница могла бы быть в процессе разработки.


E>Интересная ссылочка. Ее бы в тему Проектирование и рефакторинг
Автор: VladD2
Дата: 09.02.06
...


Всё равно прийдёт Влад и скажет, что в ST невозможно сделать intellisens, а значит там нет ничего достойного внимания.

Кстати, по теме
Автор: VladD2
Дата: 17.09.05
:

ANS> Проще новый язык разработать без старого багажа.

Не, ну, нужно все же более трезво смотреть на реальность. Что проще? Он уже есть!

ANS> Типа Z#, а C# объявить устаревшим Это как раз вписывается в популярную в нынешней индустрии схему "раз в пять-сем лет — новый язык".

Дык есть C# 1.х, есть C# 2.х, и будет C# 3.х. Это три разных языка имеющие обратную совместимость сверху вниз. При этом ты можешь писать на C# 1.х используя компилятор и среду от 3.х. Что еще нужно? Тебя же никто не заставляет использовать неудобные или непонятные по твоему мнению констркции?


И вот через полгода, мы узнаём, что C#3 устарел, смысла ждать C#4 нет и вообще. С буковкой я, конечно, ошибся, но использование "N" вместо "Z" вполне логично — остаётся еще куча буковок на развитие.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[19]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 11:19
Оценка: -1
Здравствуйте, Vermicious Knid, Вы писали:

VK>Приведи свой пример. Хотя бы на Smalltalk, я его чуть-чуть знаю и попытаюсь переписать на Nemerle и C#. И чем больше будет логики тем лучше, голого ООП не нужно. Правда наверное Smalltalk по краткости вполне может дать фору обоим, но все равно интересно будет сравнить.


Я же и привёл. Вот его и нужно сравнивать с Nemerle.

ANS>>Подсказка: паттерн-матчинг != switch/case. Соответсвенно, весь пример не репрезентативен. Что и было проиллюстрировано.


VK>Подсказка: В Nemerle паттерн-мэтчинг == switch/case.


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

Matching is a way of destructuring complex data structures


Доступ к составляющим сложного типа это никак не область применения switch. Для этой цели используются объекты+методы.

VK>Пример демонстрирует то с каким успехом паттерн-мэтчинг в Nemerle заменяет и switch/case, и if/else(который в отличие от switch/case в языке все же есть), и некоторые другие конструкции.


Я не спорю, что припомощи набора if & goto можно смоделировать вызов процедур, но это не значит, что вызов процедур == if.

VK>Согласись, что то что на C# выглядит просто отвратительно(в каком-то смысле я намеренно писал плохой код)


"На любом языке можно писать как на Фортране" (с).

VK> на Nemerle выглядит намного читабельнее. Опять таки легче провести рефакторинг Nemerle кода, просто потому, что смысл более понятен.


Твой пример нормальный. Только его нужно писать с помощью родных средств C#. Вот еще вариант — функциональщики обычно хвастаются с какой лёгкостью делаются деревья на pattern matching. Вот и нужно сделать дерево на простое объектах и на pattern-matching.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[20]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 11:24
Оценка: +2 -3 :))
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Всё равно прийдёт Влад и скажет, что в ST невозможно сделать intellisens, а значит там нет ничего достойного внимания.


Очень часто можно не обращать внимания на Влада и его высказывания (в данной теме полно примеров). Но в том обсуждении ведь не только Влад участвовал
Я например, уже в этой теме, когда говорил, что для языка IDE -- это всего лишь инструмент, всегда хотел сделать комментарий, что Smalltalk в этом плане является исключением.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 11:53
Оценка:
Здравствуйте, eao197, Вы писали:

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


Просто он изначально разрабатывался не как язык, не как библиотека, и не как ИДЕ, пусть и скриптуемая сама из себя, а как комплексная среда помогающая человеку. То есть вначале принципы, потом язык, стандартные библиотеки классов, оболочка. И всё это цельно увязано друг с другом. Можно писать и на ST без "живой" среды, например в emacs на Gnu ST. Но зачем?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[22]: Снова о Nemerle или профанация не пройдет :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.02.06 12:01
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Просто он изначально разрабатывался не как язык, не как библиотека, и не как ИДЕ, пусть и скриптуемая сама из себя, а как комплексная среда помогающая человеку. То есть вначале принципы, потом язык, стандартные библиотеки классов, оболочка. И всё это цельно увязано друг с другом. Можно писать и на ST без "живой" среды, например в emacs на Gnu ST. Но зачем?


Да, я в курсе, как раз недавно читал историю ST от Кея. Поэтому и не стал про ST ничего говорить, т.к. имхо, там все одно из другого выростало и не было бы ST без его среды и его среды без ST.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Снова о Nemerle или профанация не пройдет :)
От: Vermicious Knid  
Дата: 21.02.06 12:03
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Я же и привёл. Вот его и нужно сравнивать с Nemerle.


Нет, это не то. К тому же на Nemerle можно это переписать один-в-один. Будет просто чуть короче, но абсолютно не интересно.

VK>>Подсказка: В Nemerle паттерн-мэтчинг == switch/case.


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


На самом деле все гораздо банальнее. Сопоставление с образцом это именно сопоставления значения любого типа(не обязательно алгебраического или другой сложной структуры данных, можно и значения простых типов сопоставлять) с набором образцов. Образцы при этом вполне могут быть литералами. Сопоставление с образцом это в первую очередь абстракция, и в этом свете switch/case это не что иное как частный случай сопоставления с образцом. К тому же в Nemerle, да и в ряде других языков сопоставление с образцом как синтаксическая конструкция это нечто большее и распологает рядом дополнительных возможностей, например можно проверять предварительные условия(guards) или проверять типы(не деконструирую их).

ANS>Я не спорю, что припомощи набора if & goto можно смоделировать вызов процедур, но это не значит, что вызов процедур == if.


Нет, ты совершенно ничего не понял. В Nemerle вообще нет switch/case, равно как и if/else(который существует только в виде макроса). Все делается этим самым сопоставлением, при этом какой конкретно код сгенерируется зависит исключительно от случая и компилятора.

ANS>"На любом языке можно писать как на Фортране" (с).


Разница только в том, что на Nemerle можно писать в точности как на C#, но не наооборот.

ANS>Твой пример нормальный. Только его нужно писать с помощью родных средств C#. Вот еще вариант — функциональщики обычно хвастаются с какой лёгкостью делаются деревья на pattern matching. Вот и нужно сделать дерево на простое объектах и на pattern-matching.


Ну тогда это будет уже абсолютно несправедливо по отношению к C#. На этом примере он полностью сольет Nemerle, даже никакие ухищрения не помогут. Можно было бы простые лексер и парсер написать, но с ними та же история. Nemerle создавался как идеальный язык для написания компиляторов, вообще как язык на котором просто и легко будет написать компилятор самого Nemerle. Первый компилятор Nemerle, написанный на C#, если мне не изменяет память вообще не больше двух-трех месяцев прожил, они его еще до релиза первой публичной версии переписали(причем изначально в функциональном стиле с GADT, списками и прочей ерундой).
Re[21]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.02.06 12:32
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Нет, ты совершенно ничего не понял. В Nemerle вообще нет switch/case, равно как и if/else(который существует только в виде макроса). Все делается этим самым сопоставлением, при этом какой конкретно код сгенерируется зависит исключительно от случая и компилятора.


Мой point в том, что сравнивать switch с pettern matching это сверхупрощение.

ANS>>Твой пример нормальный. Только его нужно писать с помощью родных средств C#. Вот еще вариант — функциональщики обычно хвастаются с какой лёгкостью делаются деревья на pattern matching. Вот и нужно сделать дерево на простое объектах и на pattern-matching.


VK>Ну тогда это будет уже абсолютно несправедливо по отношению к C#. На этом примере он полностью сольет Nemerle, даже никакие ухищрения не помогут.


???. один класс с C#2 итератором полностью сольёт?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.