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[12]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 20:46
Оценка: :)
H>Нафига это может потребоваться?
чтобы не писать mutable-ы и def-ы перед переменными.
что это может вычислить компилятор.
я прикинул, мне, если портировать свой проект надо дописать
где-то 17 000 мутаблодефов (50к строк). чесслово — есть дела поважнее.
Re[13]: Развитие Nemerle
От: hardcase Пират http://nemerle.org
Дата: 08.11.11 20:46
Оценка: +1
Здравствуйте, _Claus_, Вы писали:

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


_C_>Да мне тока убедиться, что можно, а дальше все потру. как?


Для начала нужно описать, какие задачи у тебя не получилось решить используя Boo, и конечно показать как ты их решал. Разговоры о количестве ангелов на конце иглы способе объявления переменной — пустая трата места на диске.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 20:59
Оценка: +1
H>Для начала нужно описать, какие задачи у тебя не получилось решить используя Boo, и конечно показать как ты их решал. Разговоры о количестве ангелов на конце иглы способе объявления переменной — пустая трата места на диске.

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

H>Разговоры о количестве ангелов на конце иглы способе объявления переменной — пустая трата места на диске.

не вполне. вот возьмем CoffeeScript — чудный язык, и книжки по нему, и в фаворе у многих, а среды нет.
а сделай возможным его компиляцию на Nemerle (как c#), и все будут рады, и захотят узнать, а там и углубить..

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

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

еще меня после Boo несколько напрягают слова mutable и var перед каждым объявлением.
мог бы я лихо написать макросы для операторов := и = чтобы первый указывал на var объявление,
второй на mutable? или как такое сделать?
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) А. Эйнштейн
Re[8]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 18:25
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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

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

VD>Даже этого не надо. Если заведешь две mutablе-переменных, компилятор на это укажет ворнингом.

не согласен. если неизвестна — впереди mutable, известно — оставить как есть.
Re[9]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 18:29
Оценка:
Здравствуйте, _Claus_, Вы писали:

VD>>Даже этого не надо. Если заведешь две mutablе-переменных, компилятор на это укажет ворнингом.

_C_>не согласен. если неизвестна — впереди mutable, известно — оставить как есть.

Ничего не понял.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 18:45
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Даже этого не надо. Если заведешь две mutablе-переменных, компилятор на это укажет ворнингом.

_C_>>не согласен. если неизвестна — впереди mutable, известно — оставить как есть.

VD>Ничего не понял.

Сори. когда компилятор натыкается на присваивание, то ассоциированный макрос должен проверить,
известно ли это имя. если известно, выражение присваивания без изменений, если нет — вставить
впереди mutable (т. е. объявить).
Re[4]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 19:01
Оценка:
VD>Это не правильный подход. Но раз нравится — дерзай. По крайней мере немного освоишь макросы .
Этот подход имеет право на жизнь, используется во множестве языков, а потому, если Nemerle претендует на звание суперкомпилятора
должен поддерживаться как опция или в виде макроса на ура.

Мне не нравится писать лишние слова и захламлять код.
Я вообще за то, что было одно присваивание, и компилятор определял бы его как def, если я ему ничего не присваиваю в дальнейшем,
и var-mutable, если дальше присваиваю. И если дальше могут быть проблемы с параллельностью, то компилятор должен указать это,
еще лучше сам разрулить генерацией доп. кода .. Но для начала меня бы устроила и более явная логика.
Re[11]: Развитие Nemerle
От: hardcase Пират http://nemerle.org
Дата: 08.11.11 20:06
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Сори. когда компилятор натыкается на присваивание, то ассоциированный макрос должен проверить,

_C_>известно ли это имя. если известно, выражение присваивания без изменений, если нет — вставить
_C_>впереди mutable (т. е. объявить).

Нафига это может потребоваться?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Развитие Nemerle
От: hardcase Пират http://nemerle.org
Дата: 08.11.11 20:08
Оценка:
Здравствуйте, _Claus_, Вы писали:

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

_C_>и var-mutable, если дальше присваиваю.

С таким успехом можно вообще все переменные объявлять mutable и не изобретать ерунды.


_C_>И если дальше могут быть проблемы с параллельностью, то компилятор должен указать это,


Отсюда подробнее. Что за параллельность?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 20:19
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Сори. когда компилятор натыкается на присваивание, то ассоциированный макрос должен проверить,

_C_>известно ли это имя. если известно, выражение присваивания без изменений, если нет — вставить
_C_>впереди mutable (т. е. объявить).

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

Если mutable сильно мозолит глаза, введи отдельный оператор для инициализации переменной и используй "=" для изменения значения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 20:38
Оценка:
H>Отсюда подробнее. Что за параллельность?
разделяемые состояния, многопоточность
Re[5]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 20:39
Оценка:
Здравствуйте, _Claus_, Вы писали:


VD>>Это не правильный подход. Но раз нравится — дерзай. По крайней мере немного освоишь макросы .

_C_>Этот подход имеет право на жизнь, используется во множестве языков, а потому, если Nemerle претендует на звание суперкомпилятора должен поддерживаться как опция или в виде макроса на ура.

Позанудствую. Термин суперкомпилятор означает совсем другое.

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

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

Тут до тебя был товарищ который с C# пришел. Он читал, что нельзя жить без объявления переменных с использованием var. Если мы будем включать в язык все подобные решения, то язык превратится в кашу.

_C_>Мне не нравится писать лишние слова и захламлять код.


Тогда ты просто тратишь время зря. Это все равно что экономить на спичках сжигая газ.
Есть куда более радикальные средства писать меньше кода. Изучи паттерн-матчинг и другие продвинутые фичи языка. Сделай макросы которые позволят тебе описать свои задачи декларативно. Это действительно сократит объем лишнего кода.

А пока что ты демонстрируешь, что твои привычки сильнее тебя. Отбрось их и сосредоточься на изучении языка. Иначе ты так и будешь пытаться сделать из Немерле Бу, а реально крутых возможностей так и не освоишь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 20:40
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_C_>>Сори. когда компилятор натыкается на присваивание, то ассоциированный макрос должен проверить,

_C_>>известно ли это имя. если известно, выражение присваивания без изменений, если нет — вставить
_C_>>впереди mutable (т. е. объявить).

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


Да мне тока убедиться, что можно, а дальше все потру. как?
Re[6]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 21:10
Оценка:
VD>Тут до тебя был товарищ который с C# пришел. Он читал, что нельзя жить без объявления переменных с использованием var. Если мы будем включать в язык все подобные решения, то язык превратится в кашу.

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

_C_>>Мне не нравится писать лишние слова и захламлять код.


VD>Тогда ты просто тратишь время зря. Это все равно что экономить на спичках сжигая газ.

VD>Есть куда более радикальные средства писать меньше кода. Изучи паттерн-матчинг и другие продвинутые фичи языка. Сделай макросы которые позволят тебе описать свои задачи декларативно. Это действительно сократит объем лишнего кода.

буду конечно учить.

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


Собственно уместно повторить слова из соседней ветки http://www.rsdn.ru/forum/nemerle/4488957.1.aspx
Автор: _Claus_
Дата: 09.11.11
Re[7]: Развитие Nemerle
От: catbert  
Дата: 08.11.11 21:21
Оценка:
Здравствуйте, _Claus_, Вы писали:

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

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

Сначала нужно получить объект typer:
    def typer = Nemerle.Macros.ImplicitCTX();


Из него можно узнать про все задекларированные локальные переменные:
    def locals = typer.LocalContext.GetLocals();


Ну, или как-то так.
Re[13]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 22:15
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Да мне тока убедиться, что можно, а дальше все потру. как?


Это будет не так просто. Нужно получить ссылку на тайпер и через него искать объявленные в текущем контексте переменные.
Набросал макрос реализующий общую идею:
using Nemerle;
using Nemerle.Collections;
using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;
using Nemerle.Compiler.Typedtree;
using Nemerle.Text;
using Nemerle.Utility;

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

[assembly: Nemerle.Internal.OperatorAttribute ("PythonLike", ":=", false, 141, 140)]

namespace PythonLike
{
  macro @:=(expr1 : PExpr, expr2 : PExpr)
  {
    PythonAssignImpl.DoTransform(Macros.ImplicitCTX(), expr1, expr2)
  }
  
  module PythonAssignImpl
  {
    public DoTransform(typer : Typer, expr1 : PExpr, expr2 : PExpr) : PExpr
    {
      match (expr1)
      {
        | <[ $(n : name) ]> => 
          // Пытаемся найти поля в текущем объекте с именем n.
          def members = typer.CurrentTypeBuilder.LookupMember(n.Id, false);
          
          // пытаемся найти локальную переменную с именем n
          match (typer.LocalContext.FindLocal(n))
          {
            | Some(var) when var.IsMutable => <[ $expr1 = $expr2 ]> 
            | Some(var)                    => 
              // Здесь можно было бы объявлять новую неизменяемую переменную, но это вообще пипец какие грабли! 
              Message.Error(expr1.Location, $"In this context already defined immutable variable '$n'.");
              Message.Hint(var.Location, "Previous declaration.");
              <[ () ]>
            
            | None when members.IsEmpty    => <[ mutable $expr1 = $expr2 ]>
            | None                         => <[ $expr1 = $expr2 ]>
          }
        
        | _ => Message.FatalError(expr1.Location, "Expected simple name.");
      }
    }
  }
}


Вот его использование:
using System.Console;
using PythonLike;

module Program
{
  //mutable x : int = 1;
  
  Main() : void
  {
    //def x = 1;
    x := 23;
    WriteLine(x);
    x := 42;
    WriteLine(x);
    _ = ReadLine();
  }
}

Выводит:
23
42

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

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

В питоне (и Бу) просо нет понятия неизменяемой переменной. Потому и проблемы этой нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 22:20
Оценка:
Здравствуйте, _Claus_, Вы писали:

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


Мы и не пинаем. Но несогласие свое мы выразить то можем? Вот мы и выражаем .

Мы сказали, что не согласны с тобой, и что по нашему мнению, ты занялся не тем. Но, конечно же, только тебе решать что и как делать. Подсказывать как делать мы не отказываемся. В конце концов, чем в более извращенном виде можно будет использовать немерл, тем он будет стабильнее .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 22:23
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Сори. когда компилятор натыкается на присваивание, то ассоциированный макрос должен проверить,

_C_>известно ли это имя. если известно, выражение присваивания без изменений, если нет — вставить
_C_>впереди mutable (т. е. объявить).

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

Скажем, я вообще не представляю как быть с локальными неизменяемыми переменными.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 22:32
Оценка:
VD>Мы сказали, что не согласны с тобой, и что по нашему мнению, ты занялся не тем. Но, конечно же, только тебе решать что и как делать. Подсказывать как делать мы не отказываемся. В конце концов, чем в более извращенном виде можно будет использовать немерл, тем он будет стабильнее .
аллах акбар!
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 22:35
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>В питоне (и Бу) просо нет понятия неизменяемой переменной. Потому и проблемы этой нет.
Спасибо, буду курить..
Re[8]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 22:37
Оценка:
C>Ну, или как-то так.
Спасибо!
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 08.11.11 22:42
Оценка:
VD>В питоне (и Бу) просо нет понятия неизменяемой переменной. Потому и проблемы этой нет.
да есть в Boo — const называется.
Re[15]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 22:57
Оценка:
Здравствуйте, _Claus_, Вы писали:

VD>>В питоне (и Бу) просо нет понятия неизменяемой переменной. Потому и проблемы этой нет.

_C_>да есть в Boo — const называется.

Если я правильно понимаю, это совсем не то. В const скорее всего нельзя помещать ссылку на объект. Только на предопределенные типы вроде целых или строк (как в C#).

Ну, и как сам понимаешь идея объявлять что-то без декларации стразу идет лесом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.11.11 23:06
Оценка:
Здравствуйте, _Claus_, Вы писали:


H>>Нафига это может потребоваться?

_C_>чтобы не писать mutable-ы и def-ы перед переменными.

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

_C_>что это может вычислить компилятор.

_C_>я прикинул, мне, если портировать свой проект надо дописать
_C_>где-то 17 000 мутаблодефов (50к строк). чесслово — есть дела поважнее.

Дык, что толку то того, что переменные у тебя проскочат без изменения? Все равно весь остальной синтаксис другой. Уж лучше скомпилить имеющуюся версию на Бу с добавленным атрибутом InternalsVisibleToAttribute, что даст возможность развивать продукт на немерле не переписывая все. Или с помощью декомпилятора перевести код в C# или Nemerle, а дальше доработать напильником.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 09.11.11 00:59
Оценка:
VD>Дык, что толку то того, что переменные у тебя проскочат без изменения? Все равно весь остальной синтаксис другой. Уж лучше скомпилить имеющуюся версию на Бу с добавленным атрибутом InternalsVisibleToAttribute, что даст возможность развивать продукт на немерле не переписывая все. Или с помощью декомпилятора перевести код в C# или Nemerle, а дальше доработать напильником.

Языки похожи. если вы не дропнули вложенность отступами, то исходник Boo, не считая {}-замыканий и макросов, приводится к nemerle 1) удалением двоеточий; 2) заменой 'as' на двоеточие +
макрос for без скобок "for i in set_x" + те макросы в компилятор, о которых мы говорим.
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 09.11.11 01:06
Оценка:
>> Или с помощью декомпилятора перевести код в C# или Nemerle, а дальше доработать напильником.
а есть декомпилятор сразу в Nemerle?!
Re[15]: Развитие Nemerle
От: para  
Дата: 09.11.11 05:45
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Языки похожи. если вы не дропнули вложенность отступами, то исходник Boo, не считая {}-замыканий и макросов, приводится к nemerle 1) удалением двоеточий; 2) заменой 'as' на двоеточие +

_C_>макрос for без скобок "for i in set_x" + те макросы в компилятор, о которых мы говорим.

тогда надо ударить артиллерией и написать грамматику для БУ (или хотя бы нужное вам подмножество)
Re[15]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.11.11 10:26
Оценка:
Здравствуйте, _Claus_, Вы писали:

>>> Или с помощью декомпилятора перевести код в C# или Nemerle, а дальше доработать напильником.

_C_>а есть декомпилятор сразу в Nemerle?!

Да, но надо собирать самостоятельно и вручную кидать в каталог рефлектора (он умудряется не прописывать путь к себе нигде). Исходники лежат по пути Nemerle\tools\reflector-addon. Не уверен, только что он даст компилируемый код. Скорее всего придется дорабатывать напильником.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Развитие Nemerle
От: _Claus_  
Дата: 09.11.11 10:53
Оценка:
Здравствуйте, para, Вы писали:

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


_C_>>Языки похожи. если вы не дропнули вложенность отступами, то исходник Boo, не считая {}-замыканий и макросов, приводится к nemerle 1) удалением двоеточий; 2) заменой 'as' на двоеточие +

_C_>>макрос for без скобок "for i in set_x" + те макросы в компилятор, о которых мы говорим.

P>тогда надо ударить артиллерией и написать грамматику для БУ (или хотя бы нужное вам подмножество)


НА Boo кроме меня и еще 3-х диверсантов никто серьезного не пишет. Время лучше потратить на что-то более полезное (CoffeeScript, Prolog, ..)
Re[14]: Развитие Nemerle
От: _Claus_  
Дата: 09.11.11 18:44
Оценка:
Не хочет компилится — показывает на эту строку и грит: type PExpr not supported for macro parameter

macro @:=(expr1 : PExpr, expr2 : PExpr)


Значит ли это, что компилятор надо тянуть из репозитория? у меня стоит майский 1.0 релиз..
или в чем другом?
Re[15]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.11.11 19:17
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Не хочет компилится — показывает на эту строку и грит: type PExpr not supported for macro parameter

_C_>macro @:=(expr1 : PExpr, expr2 : PExpr)
_C_>Значит ли это, что компилятор надо тянуть из репозитория? у меня стоит майский 1.0 релиз..
_C_>или в чем другом?

Не обязательно. Но взять последнюю бэту. В прочем, типы у параметров макросов можно просто стереть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Развитие Nemerle
От: _Claus_  
Дата: 10.11.11 03:40
Оценка:
VD>Не обязательно. Но взять последнюю бэту. В прочем, типы у параметров макросов можно просто стереть.
Все ок.

Не получается тем же способом переопределить обычный = , это возможно? компилятор вроде как макрос не видит, что с ним, что без него — ошибки одинаковые.
Re[17]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.11 10:57
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Не получается тем же способом переопределить обычный = , это возможно?


Краткий ответ — нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Развитие Nemerle
От: _Claus_  
Дата: 11.11.11 22:29
Оценка:
VD>Краткий ответ — нет.

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

вот такой код не хочет работать с макросом

class m
s := 0

//parse error near operator `:=': expecting `=', `;' or `{' in field / property declaration
но такой принимает

class m
mutable s = 0

т. е. развертка макроса в контексте класса недопустима или не всегда допустима? хм..
Re[19]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.11 23:25
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>Надеюсь это не идеологический запрет, а временная трудность, ибо в DSL-лях нужно бывает особое "равно"


В ДСЛ-ях можно интерпретировть АСТ совсем по другому. Но в рамках Немерле создать макрос "=" нельзя.

_C_>вот такой код не хочет работать с макросом

_C_>class m
_C_> s := 0

Естественно. Это тело класса тут ожидаются его члены.

_C_>т. е. развертка макроса в контексте класса недопустима или не всегда допустима? хм..


Макросы бывают разные. Макросы уровня выражения могут использоваться только там где ожидается выражение.
Прочти вот это
Автор(ы): Чистяков Владислав Юрьевич
Дата: 22.09.2011
Данная часть посвящена макросам Nemerle.
. Там рассказывается о типах макросов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Развитие Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.11 23:30
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>class m

_C_> s := 0

Еще раз повторюсь, что идея сэмулировать на немерле питон — это плохая идея. Как минимум макры Немерле 1.х не настолько гибки чтобы воспроизвести все нюансы синтаксиса питона. Лучше выбрать другой подход.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.