Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 15:46
Оценка:
Привет всем! Подумываю о переходе на Nemerle c другого не менее экзотического языка Boo.
Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).
Знаю о планах Nemerle2 — видел, но это светлое будущее, а сейчас как?

например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
для меня это отнюдь не праздный вопрос

еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,
второй на mutable? или как такое сделать?
Re: Развитие Nemerle
От: WolfHound  
Дата: 08.11.11 15:58
Оценка: +2
Здравствуйте, _Claus_, Вы писали:

_C_>Знаю о планах Nemerle2 — видел, но это светлое будущее, а сейчас как?

А сейчас фиксятся баги и допиливается до приличного состояния ИДЕ.

_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?

Что это?
Зачем оно тебе надо?

_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.

Молчаливое объявление переменных это большой баг в дизайне языка.
Не нужно это делать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Развитие Nemerle
От: catbert  
Дата: 08.11.11 16:05
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).


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

_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?


А это что такое? Если вы о возможности использовать макросы в макросах, то это и сейчас можно.

_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.


Ну, не var, а def, но это удобно От очепяток защищает.

_C_>мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,

_C_>второй на mutable? или как такое сделать?

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

Судя по всему, первый макрос, который новички в Nemerle хотят написать,— всегда новый способ декларации/присвоения переменных. Надо бы туториал написать
Re[2]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 16:14
Оценка:
_C_>>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
WH>Что это?
WH>Зачем оно тебе надо?
вот такое описание
Persist xobj:

VAR data as int

REF str as string

генерит код для субд, и VAR должен иметь доступ к контекстному макрокоду Persist.

_C_>>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.

WH>Молчаливое объявление переменных это большой баг в дизайне языка.
WH>Не нужно это делать.

для mutable еще можно поспорить, но для def это никак не молчаливое, просто короткое.
def z = 5
z := 5
лично моему дзенскому глазу второе приятней.
Re[2]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 16:19
Оценка:
C>Судя по всему, первый макрос, который новички в Nemerle хотят написать,— всегда новый способ декларации/присвоения переменных. Надо бы туториал написать
Поможите, будьте любезны, очень надо. без него портировать — сутками mutablы писать — не хватит сил.
Re: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 16:37
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Привет всем! Подумываю о переходе на Nemerle c другого не менее экзотического языка Boo.

_C_>Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).

Источники из которых можно черпать информацию о нововведениях:
[url=https://github.com/rsdn/nemerle/commits/master]commits

_C_>Знаю о планах Nemerle2 — видел, но это светлое будущее, а сейчас как?


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

Основные изменения идут в макро-библиотеках. Но их тоже не так уж много, так как язык стабилизировался.
Сейчас основная задача правка багов и выпуск релиза 1.1 и интеграции для VS2010+.

_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?


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

_C_>для меня это отнюдь не праздный вопрос


Озвучивай проблему, будем обсуждать.

_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.


Это просто привычка. Ее придется преодолеть. При смене языка, первое время, всегда что-то раздражает. Тут нужно немножко потерпеть. Зато потом будет обратный эффект. Будешь говорить себе "и как я раньше мог пользоваться ХХХ?".

Начнем с того, что var в Nemerle нет. Вместо него есть def. Он объявляет неизменяемое значение (или ссылку). Обычно используется именно он. А mutable позволяет выделить изменяемые переменные и поля, и акцентировать на них внимание.

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

_C_>мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,


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

_C_>второй на mutable? или как такое сделать?


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

В общем, я бы посоветовал просто потерпеть с месяцок. Обещаю, что через месяц ты сам не захочешь вводить подобные макросы.

ЗЫ

Встречный вопрос. Что подвигло в переходу? С Бу что-то не так?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Развитие Nemerle
От: catbert  
Дата: 08.11.11 16:39
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Поможите, будьте любезны, очень надо. без него портировать — сутками mutablы писать — не хватит сил.


Дело рук самих утопающих, как говорят Я сейчас сильно помочь не могу. Но подскажу про def (с mutable-ом сложнее).

Во-первых, почитайте туториалы макросов немерле. Например, эту
Автор(ы): Чистяков Влад (VladD2)
Дата: 24.04.2007
Статься задумана как углубленное описание самой малоосвещенной части языка программирования Nemerle – его макросистемы. В первой части статьи будет описан процесс компиляции и освещены его особенности. Рассказано о том, что же такое макросы, каких типов они бывают, и как с ними бороться.
Во второй части будут даны примеры каждого из видов макросов и советы, где и как их применять.
и следующие части. Это для понимания: как написать макрос, как подключить, все такое.

Во-вторых, вам придется добавть новый оператор. Это делается в макросе, атрибутом уровня сборки. Посмотрите, как определяются все операторы Nemerle: https://github.com/rsdn/nemerle/blob/master/macros/core.n

В третьих, код макроса будет простой, что-то вроде
macro @:=(lhs, rhs)
{
    <[ def $lhs = $rhs ]>
}


Возможно, придется боротся с гигиеной макросов. Тогда надо еще будет почитать туториалы. Ну, и посмотреть код.
Re[3]: Развитие Nemerle
От: WolfHound  
Дата: 08.11.11 16:39
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>генерит код для субд, и VAR должен иметь доступ к контекстному макрокоду Persist.

Подобное и сейчас делается.
Вот например: https://github.com/rsdn/nemerle/blob/master/snippets/csharp-parser/CSharpParser/Parser.n

_C_>для mutable еще можно поспорить, но для def это никак не молчаливое, просто короткое.

_C_>def z = 5
_C_>z := 5
_C_>лично моему дзенскому глазу второе приятней.
Ну если тебе так хочется то добавь себе вот такой макрос:
namespace ShortDef
{
  [assembly: Nemerle.Internal.OperatorAttribute ("ShortDef", ":=",     false, 141, 140)]
  macro @:=(name, value)
  {
    <[ def $name = $value ]>
  }
}

С ним вот такой код компилируется. И даже интелисенс работает.
    qwerqwer := 123;
    WriteLine(qwerqwer);
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 16:53
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>вот такое описание

_C_>Persist xobj:
_C_> VAR data as int
_C_> REF str as string
_C_>генерит код для субд, и VAR должен иметь доступ к контекстному макрокоду Persist.

И зачем тут какие-то вложенности или связанности?

Погляди, например, как похожая вещь сделана в Nemerle on rails.

_C_>для mutable еще можно поспорить, но для def это никак не молчаливое, просто короткое.

_C_>def z = 5
_C_>z := 5
_C_>лично моему дзенскому глазу второе приятней.

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

С синтаксическими предпочтениями все равно ничего не поделать. Ты вбираешь другой язык и в нем другой синтаксис. Это всего лишь одно из мест. Все равно ты не сможешь полностью эмулировать Бу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 17:00
Оценка:
Здравствуйте, catbert, Вы писали:

C>В третьих, код макроса будет простой, что-то вроде

C>
C>macro @:=(lhs, rhs)
C>{
C>    <[ def $lhs = $rhs ]>
C>}
C>


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


Не придется. Вот приоритеты нужно задать (как у "=") — это да:
[assembly: Nemerle.Internal.OperatorAttribute ("пространство имен где объявлен макрос", ":=",     false, 141, 140)]

иначе где-нить могут вылезти проблемы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 17:07
Оценка:
VD>Источники из которых можно черпать информацию о нововведениях:
VD>closed issues
VD>commits
не очень кошерно черпать оттуда о нововведениях.
было бы здорово иметь фич-лист с перечнем {возможность : имя макроса}

VD>Озвучивай проблему, будем обсуждать.

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

вот пример из кода вложенного макроса:

block = Persist["data"] as StructDefinition

if block is null:

block = StructDefinition(Name:'exchange_struct')
Persist["data"] = block

block.Members.Add(Field(Name: $name, Type : SimpleTypeReference($type4fld), Modifiers :TypeMemberModifiers.Public))

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


>> Только это будет бесполезной тратой времени и грубой ошибкой. Это плохая возможность языка (Питона). Нужно просто немного себя перебороть.

Грубая ошибка может быть только тогда, когда у меня набросаны разные переменные с одним именем в пределах одной функции.
Если мы согласимся, что эта практика — плохо, и каждая переменная должна иметь уникальное имя в пределах функции, то тогда это благо. -20-30% кода и оперативки мозга.

_C_>>второй на mutable? или как такое сделать?


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


VD>В общем, я бы посоветовал просто потерпеть с месяцок. Обещаю, что через месяц ты сам не захочешь вводить подобные макросы.


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

VD>Встречный вопрос. Что подвигло в переходу? С Бу что-то не так?


развитие застопорилось. баги, критичные для меня, не фиксятся, а даже добавляются, чего-то с каждой версией отваливается. то ли я один пользуюсь net 4.0, генераторами, Winforms, то ли остальным дальше консольного hello world ничего не надо. с функциональщиной напряг большой, приходится многое делать через непривычные отверстия.
Re[5]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 17:14
Оценка:
Здравствуйте, VladD2, Вы писали:

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


C>>В третьих, код макроса будет простой, что-то вроде

C>>
C>>macro @:=(lhs, rhs)
C>>{
C>>    <[ def $lhs = $rhs ]>
C>>}
C>>


То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная, какого она типа, сгенерить ошибку, если да
и предупреждение, если она не используется дальше по коду. вероятно, доки такой я не найду, но указать в каком месте искать это в исходниках,
и как вообще доступится к потрохам компилятора — это надеюсь подскажете.
Re[6]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 17:29
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная,


А какая тебе разница? "def" в Н всегда заводит новую переменную. Если в этой же области видимости была другая неизменяемая переменная, то она скрывается. Если была видна изменяемая переменная, то будет ворнинг. Так что ничего делать не надо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 17:30
Оценка:
впрочем, для макроса присваивания mutablе-у должно хватить только — есть такое имя в контексте или нет.
если кто знает, как это спросить в макросе, поделитесь
Re[7]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 17:34
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_C_>>То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная,


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

Абсолютно согласен. но в голове у меня эти вопросы сцеплены , поэтому я вот думая о mutable спросил
т. е. повторюсь, как из макроса спросить, используется имя или нет? надеюсь условный возврат макрокода в Nemerle есть.
Re[4]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 17:36
Оценка:
спасибо, осталось еще чуть — чуть (mutable) и я ваш (немерловкий).
Re[3]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 17:52
Оценка:
Здравствуйте, _Claus_, Вы писали:

VD>>Источники из которых можно черпать информацию о нововведениях:

VD>>closed issues
VD>>commits
_C_>не очень кошерно черпать оттуда о нововведениях.

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

_C_>было бы здорово иметь фич-лист с перечнем {возможность : имя макроса}


В макросах особо изменений нет. Есть новые библиотеки вроде Nemerle.Statechart
Автор: CodingUnit
Дата: 20.07.11
, но они идут отдельной библиотекой.
Основные макросы из стандратной библиотеки описаны здесь.

VD>>Озвучивай проблему, будем обсуждать.

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

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

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

_C_>Если мы согласимся, что эта практика — плохо, и каждая переменная должна иметь уникальное имя в пределах функции, то тогда это благо. -20-30% кода и оперативки мозга.

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

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

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


Это не правильный подход. Но раз нравится — дерзай. По крайней мере немного освоишь макросы .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 17:57
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Абсолютно согласен. но в голове у меня эти вопросы сцеплены , поэтому я вот думая о mutable спросил

_C_>т. е. повторюсь, как из макроса спросить, используется имя или нет? надеюсь условный возврат макрокода в Nemerle есть.

Это сделать значительно сложнее. Ситуация усложняется еще и тем, что есть еще и поля.

Если хочется убрать ключевое слово, то просто заведи еще один оператор для инициализации mutable-переменных. Например ":=:". Ну, а отслеживание сделает сам компилятор. Ты ведь, с его точки зрения, все равно введешь новую переменную.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 17:58
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>впрочем, для макроса присваивания mutablе-у должно хватить только — есть такое имя в контексте или нет.

_C_>если кто знает, как это спросить в макросе, поделитесь

Даже этого не надо. Если заведешь две mutablе-переменных, компилятор на это укажет ворнингом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Развитие Nemerle
От: WolfHound  
Дата: 08.11.11 18:09
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>спасибо, осталось еще чуть — чуть (mutable) и я ваш (немерловкий).

Точно также. Только закорючку другую придумай.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.