Re[14]: Как подключить Linq к Nemerle?
От: Блудов Павел Россия  
Дата: 14.12.07 01:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Мне эта идея не нравится. И так рук не хватает. А тут уже разделом имущества попахиваем .

Зачем делить имущество? Если появятся несовместимые диалекты Немерля то это его доканает.
Давайте просто напишем свой лексер. With hookers! And blackjack!. Положим его рядом со старым. Добавим ключ компиляции, указывающий, какой лексер используется.
... << RSDN@Home 1.2.0 alpha rev. 785>>
Re[19]: Как подключить Linq к Nemerle?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.07 05:00
Оценка:
Здравствуйте, artelk, Вы писали:

A>а на этот случай:

A>
A>macro LinqQuery2(body) 
A>syntax("(","from",body,")") 
A>{ LinqQuery(body) }
A>

A>

А так вообще нельзя. Первым должно быть ключевое слово. Иначе распознаватель не сработает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Как подключить Linq к Nemerle?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.07 05:02
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Давайте просто напишем свой лексер. With hookers! And blackjack!. Положим его рядом со старым. Добавим ключ компиляции, указывающий, какой лексер используется.


И как люди потом будут разбираться в коде написанном казалось бы на одном языке, но реально на разных? И так хватает, что старый код может не компилироваться новыми компиляторами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Как подключить Linq к Nemerle?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.07 05:05
Оценка:
Здравствуйте, vdimas, Вы писали:

V>А нет возможности "навертеть" макрос один на другого, как-то так:

V>
V>def x = from(x in [1..100]) where(x%2!=0) select(x);
V>


Нет.

V>И там artelk предложил вполне элегантно:

V>
V>linq { писать здесь } 
V>


Это ничем не отличалось бы от <# писать здесь #>.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Как подключить Linq к Nemerle?
От: artelk  
Дата: 14.12.07 17:07
Оценка:
Здравствуйте, VladD2, Вы писали:

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


A>>а на этот случай:

A>>
A>>macro LinqQuery2(body) 
A>>syntax("(","from",body,")") 
A>>{ LinqQuery(body) }
A>>

A>>

VD>А так вообще нельзя. Первым должно быть ключевое слово. Иначе распознаватель не сработает.


macro LinqQuery2(body) 
syntax("(from",body,")") 
 { LinqQuery(body) }


А если серьезно, с чем связано такое ограничение? Syntax задает паттерн, почему ищется только по первому параметру (ключевому слову)?
Re[14]: Как подключить Linq к Nemerle?
От: artelk  
Дата: 14.12.07 18:39
Оценка:
Ничего не понимаю...
Протестировал вот это:

//макрос:
    public macro LinqQuery(group:Token)
    syntax("from",group)
    {
        def b = PExpr.Literal(Literal.String("from " + group.ToString()));
        <[ $b ]>
    }

//код:
  Main() : void
  {
    def z = from c in customers
        join o in orders on c.ID equals o.CustomerID
        select new { c.Name, c.Date };
    WriteLine(z);
  }


Все скомпилировалось, программа вывела:

from c in customers join o in orders on c . ID equals o . CustomerID select new {
c . Name , c . Date ;
}

Re[16]: Как подключить Linq к Nemerle?
От: hi_octane Беларусь  
Дата: 14.12.07 19:05
Оценка: +1
VD>Это, как говорится, и ежу понятно. Вопрос только в том, что синтаксис:
VD>
VD>linq <# ... #>
VD>

VD>не нравится IT.

Так это не только IT не нравится -- имхо такие конструкции для частей языка которые призваны заменить львиную долю foreach -- косяк примерно такой-же как и реализация linq например на С-шных #define-ах.
Re[17]: Как подключить Linq к Nemerle?
От: IT Россия linq2db.com
Дата: 14.12.07 19:25
Оценка: :)
Здравствуйте, hi_octane, Вы писали:

_>Так это не только IT не нравится -- имхо такие конструкции для частей языка которые призваны заменить львиную долю foreach -- косяк примерно такой-же как и реализация linq например на С-шных #define-ах.


Вот! Сразу видно умного человека!
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[15]: Как подключить Linq к Nemerle?
От: artelk  
Дата: 15.12.07 18:23
Оценка:
Здравствуйте, artelk, Вы писали:

A>Ничего не понимаю...


Ага, понял.
def a = (from b in c orderby d, e select new { f, g }).ToString();

Запятая это единственная проблема?
Может вместо нее использовать что-то другое?
Или может чуток видоизменить синтаксис, например:
def a = (from b in c orderby (d, e) select new { f; g }).ToString();
Re[16]: Как подключить Linq к Nemerle?
От: artelk  
Дата: 15.12.07 18:52
Оценка: 63 (2) +1
Здравствуйте, artelk, Вы писали:

A>Или может чуток видоизменить синтаксис, например:

A>def a = (from b in c orderby (d, e) select new { f; g }).ToString();


Запятую внутри {}, конечно, можно оставить как была:
def a = (from b in c orderby (d, e) select new { f, g }).ToString();


Кстати, ordeby (d,e) даже лучше по смыслу подходит, имхо.
ordeby d,e читается как: отсортировать по d, потом результат отсортировать по e.
Естественно, что результат сортировки по d пропадает...
ordeby (d,e) — отсортировать по паре (d,e), где d ~ "старший разряд", e ~ "младший", т.е. у d "приоритет" при сортировке.

И еще. Запятая всегда по смыслу — это перечисление чего-то. Заключение в скобки, думаю, никогда не ухудшит понимаемость..
По поводу лишних, непарных скобок — такого, думаю, не появится. Ни в linq их нет, ни в возможных будущих нововведениях в с# не появится.

PS имхо
Re[21]: Как подключить Linq к Nemerle?
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.12.07 21:06
Оценка:
Здравствуйте, artelk, Вы писали:

A>
A>macro LinqQuery2(body) 
A>syntax("(from",body,")") 
A> { LinqQuery(body) }
A>

A>

Так нельзя, так как лексер разделит "(" и "from" на два токена.

A>А если серьезно, с чем связано такое ограничение? Syntax задает паттерн, почему ищется только по первому параметру (ключевому слову)?


С тем, что с макросом должно быть связано ключевое слово по которому распознается его вхождение. Заглядывание вперед может не производится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Как подключить Linq к Nemerle?
От: vdimas Россия  
Дата: 17.12.07 13:44
Оценка: -1
Здравствуйте, VladD2, Вы писали:


V>>И там artelk предложил вполне элегантно:

V>>
V>>linq { писать здесь } 
V>>


VD>Это ничем не отличалось бы от <# писать здесь #>.


Ну да, как в С++ не отличается "[" от "(%", только зачем-то народ первый вариант использует

В общем, дело в привычности синтаксиса, не более, а по-сути — разумеется ничем.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.