Привет всем! Подумываю о переходе на Nemerle c другого не менее экзотического языка Boo.
Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).
Знаю о планах Nemerle2 — видел, но это светлое будущее, а сейчас как?
например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
для меня это отнюдь не праздный вопрос
еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,
второй на mutable? или как такое сделать?
Здравствуйте, _Claus_, Вы писали:
_C_>Знаю о планах Nemerle2 — видел, но это светлое будущее, а сейчас как?
А сейчас фиксятся баги и допиливается до приличного состояния ИДЕ.
_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
Что это?
Зачем оно тебе надо?
_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
Молчаливое объявление переменных это большой баг в дизайне языка.
Не нужно это делать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, _Claus_, Вы писали:
_C_>Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).
Новые фичи, в основном, добавляются в виде новых макросов, мелких удобств и поддержки новых платформ. В целом, язык стабилен.
_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
А это что такое? Если вы о возможности использовать макросы в макросах, то это и сейчас можно.
_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
Ну, не var, а def, но это удобно От очепяток защищает.
_C_>мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление, _C_>второй на mutable? или как такое сделать?
Да вроде могли бы. Правда тут уже надо изучать API компилятора (для того чтобы проверять, создать ли новую переменную, или использовать старую), который сейчас не очень хорошо документирован.
Судя по всему, первый макрос, который новички в Nemerle хотят написать,— всегда новый способ декларации/присвоения переменных. Надо бы туториал написать
_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
лично моему дзенскому глазу второе приятней.
C>Судя по всему, первый макрос, который новички в Nemerle хотят написать,— всегда новый способ декларации/присвоения переменных. Надо бы туториал написать
Поможите, будьте любезны, очень надо. без него портировать — сутками mutablы писать — не хватит сил.
Здравствуйте, _Claus_, Вы писали:
_C_>Привет всем! Подумываю о переходе на Nemerle c другого не менее экзотического языка Boo. _C_>Почти все нравится — хочется знать, добавляются ли новые фичи (изучал два года назад и сейчас — ничего не заметил).
Каких-то радикальных изменений в языке уже давно нет. Ломающих изменений мы вообще стараемся не делать. Так что изменения обычно связаны с багами или неудобствами.
Основные изменения идут в макро-библиотеках. Но их тоже не так уж много, так как язык стабилизировался.
Сейчас основная задача правка багов и выпуск релиза 1.1 и интеграции для VS2010+.
_C_>например вложенные и связанные макросы отложены до Nemerle2 или какая-то работа ведется для Nemerle1?
О вложенных макросах я первый раз слышу. Это вообще что-то непонятное.
Подозреваю, что под связанными имеется в виду механизм позволяющий задать последовательность выполнения макросов работающих на одной фазе. Тут никаких подвижек нет. Эта проблема отложена до Н2. Но для практического использования это не является помехой. Есть масса обходных путей. При грамотном проектировании и разбиении на фазы можно всегда добиться нужного результата.
_C_>для меня это отнюдь не праздный вопрос
Озвучивай проблему, будем обсуждать.
_C_>еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
Это просто привычка. Ее придется преодолеть. При смене языка, первое время, всегда что-то раздражает. Тут нужно немножко потерпеть. Зато потом будет обратный эффект. Будешь говорить себе "и как я раньше мог пользоваться ХХХ?".
Начнем с того, что var в Nemerle нет. Вместо него есть def. Он объявляет неизменяемое значение (или ссылку). Обычно используется именно он. А mutable позволяет выделить изменяемые переменные и поля, и акцентировать на них внимание.
Само же явное объявление переменных — это очень большой плюс. Это уберегает от случайных ошибок. Компилятор понимает что происходит и позволяет не сделать ошибку.
_C_>мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,
В принципе, можешь. Только это будет бесполезной тратой времени и грубой ошибкой. Это плохая возможность языка (Питона). Нужно просто немного себя перебороть.
_C_>второй на mutable? или как такое сделать?
А ты физически не сможешь сделать неизменяемое значение без декларации. Ну, разве что завести для этого отдельный оператор. Но чем это будет отличаться от ключевого слова?
В общем, я бы посоветовал просто потерпеть с месяцок. Обещаю, что через месяц ты сам не захочешь вводить подобные макросы.
ЗЫ
Встречный вопрос. Что подвигло в переходу? С Бу что-то не так?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _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_>лично моему дзенскому глазу второе приятней.
Ну если тебе так хочется то добавь себе вот такой макрос:
Здравствуйте, _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_>лично моему дзенскому глазу второе приятней.
Тут вопрос в том, что означает :=. Если это только инициализация переменной, то это просто другой синтаксис для одного и того же. Если же := можно использовать и для изменения значений существующих переменных, то это уже баг в дизайне и от такого решения будут только проблемы.
С синтаксическими предпочтениями все равно ничего не поделать. Ты вбираешь другой язык и в нем другой синтаксис. Это всего лишь одно из мест. Все равно ты не сможешь полностью эмулировать Бу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Источники из которых можно черпать информацию о нововведениях: VD>closed issues VD>commits
не очень кошерно черпать оттуда о нововведениях.
было бы здорово иметь фич-лист с перечнем {возможность : имя макроса}
VD>Озвучивай проблему, будем обсуждать.
В Boo вложенный макрос видит своего содержателя через переменную с его именем, и соответственно может там менять дописывать все что вздумается.
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 ничего не надо. с функциональщиной напряг большой, приходится многое делать через непривычные отверстия.
То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная, какого она типа, сгенерить ошибку, если да
и предупреждение, если она не используется дальше по коду. вероятно, доки такой я не найду, но указать в каком месте искать это в исходниках,
и как вообще доступится к потрохам компилятора — это надеюсь подскажете.
Здравствуйте, _Claus_, Вы писали:
_C_>То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная,
А какая тебе разница? "def" в Н всегда заводит новую переменную. Если в этой же области видимости была другая неизменяемая переменная, то она скрывается. Если была видна изменяемая переменная, то будет ворнинг. Так что ничего делать не надо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
впрочем, для макроса присваивания mutablе-у должно хватить только — есть такое имя в контексте или нет.
если кто знает, как это спросить в макросе, поделитесь
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _Claus_, Вы писали:
_C_>>То что код должен быть похожий, я знал, вопросы же меня волновали : есть ли уже такая переменная,
VD>А какая тебе разница? "def" в Н всегда заводит новую переменную. Если в этой же области видимости была другая неизменяемая переменная, то она скрывается. Если была видна изменяемая переменная, то будет ворнинг. Так что ничего делать не надо.
Абсолютно согласен. но в голове у меня эти вопросы сцеплены , поэтому я вот думая о mutable спросил
т. е. повторюсь, как из макроса спросить, используется имя или нет? надеюсь условный возврат макрокода в Nemerle есть.
Здравствуйте, _Claus_, Вы писали:
VD>>Источники из которых можно черпать информацию о нововведениях: VD>>closed issues VD>>commits _C_>не очень кошерно черпать оттуда о нововведениях.
По первой ссылке слева есть список лэйблов. Выделяешь нужные и получаешь фильтр.
Например, выбираешь Feature и получаешь список новых фич.
_C_>было бы здорово иметь фич-лист с перечнем {возможность : имя макроса}
В макросах особо изменений нет. Есть новые библиотеки вроде Nemerle.Statechart
, но они идут отдельной библиотекой.
Основные макросы из стандратной библиотеки описаны здесь.
VD>>Озвучивай проблему, будем обсуждать. _C_>В Boo вложенный макрос видит своего содержателя через переменную с его именем, и соответственно может там менять дописывать все что вздумается.
В немерле просто не понадобится вложенный макрос.
Тут другие принципы. Обычно в Н для таких случае создают макро-атрибут который вешают на сборку или тип и он распознает нужный синтаксис и формирует нужный код.
_C_>Грубая ошибка может быть только тогда, когда у меня набросаны разные переменные с одним именем в пределах одной функции. _C_>Если мы согласимся, что эта практика — плохо, и каждая переменная должна иметь уникальное имя в пределах функции, то тогда это благо. -20-30% кода и оперативки мозга.
А зачем соглашаться с неверными утверждениями? Неизменяемые перменные не приводят к проблемам при переопределении.
Короче, я бы посоветовал просто по программировать на исходном немерле. А потом бы уже взглянул на свои вопросы с высоты нового опыта. По верь, ты не первый кто переходит на Н с Питона. И не первый кто хочет видеть синтаксическое решение из привычного языка. Но никто в итоге так и не стал городить огород.
_C_>мне хочется получить язык, который хочу. может потом откачусь. но я надеюсь, что эту фичу в Nemerle можно сделать, возможность должна быть.
Это не правильный подход. Но раз нравится — дерзай. По крайней мере немного освоишь макросы .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _Claus_, Вы писали:
_C_>Абсолютно согласен. но в голове у меня эти вопросы сцеплены , поэтому я вот думая о mutable спросил _C_>т. е. повторюсь, как из макроса спросить, используется имя или нет? надеюсь условный возврат макрокода в Nemerle есть.
Это сделать значительно сложнее. Ситуация усложняется еще и тем, что есть еще и поля.
Если хочется убрать ключевое слово, то просто заведи еще один оператор для инициализации mutable-переменных. Например ":=:". Ну, а отслеживание сделает сам компилятор. Ты ведь, с его точки зрения, все равно введешь новую переменную.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _Claus_, Вы писали:
_C_>впрочем, для макроса присваивания mutablе-у должно хватить только — есть такое имя в контексте или нет. _C_>если кто знает, как это спросить в макросе, поделитесь
Даже этого не надо. Если заведешь две mutablе-переменных, компилятор на это укажет ворнингом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _Claus_, Вы писали:
_C_>спасибо, осталось еще чуть — чуть (mutable) и я ваш (немерловкий).
Точно также. Только закорючку другую придумай.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн