Здравствуйте, VladD2, Вы писали:
VD>Мне эта идея не нравится. И так рук не хватает. А тут уже разделом имущества попахиваем .
Зачем делить имущество? Если появятся несовместимые диалекты Немерля то это его доканает.
Давайте просто напишем свой лексер. With hookers! And blackjack!. Положим его рядом со старым. Добавим ключ компиляции, указывающий, какой лексер используется.
Здравствуйте, Блудов Павел, Вы писали:
БП>Давайте просто напишем свой лексер. With hookers! And blackjack!. Положим его рядом со старым. Добавим ключ компиляции, указывающий, какой лексер используется.
И как люди потом будут разбираться в коде написанном казалось бы на одном языке, но реально на разных? И так хватает, что старый код может не компилироваться новыми компиляторами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
//макрос: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 ;
}
VD>Это, как говорится, и ежу понятно. Вопрос только в том, что синтаксис: VD>
VD>linq <# ... #>
VD>
VD>не нравится IT.
Так это не только IT не нравится -- имхо такие конструкции для частей языка которые призваны заменить львиную долю foreach -- косяк примерно такой-же как и реализация linq например на С-шных #define-ах.
Здравствуйте, hi_octane, Вы писали:
_>Так это не только IT не нравится -- имхо такие конструкции для частей языка которые призваны заменить львиную долю foreach -- косяк примерно такой-же как и реализация linq например на С-шных #define-ах.
Вот! Сразу видно умного человека!
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, 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 их нет, ни в возможных будущих нововведениях в с# не появится.
A>macro LinqQuery2(body)
A>syntax("(from",body,")")
A> { LinqQuery(body) }
A>
A>
Так нельзя, так как лексер разделит "(" и "from" на два токена.
A>А если серьезно, с чем связано такое ограничение? Syntax задает паттерн, почему ищется только по первому параметру (ключевому слову)?
С тем, что с макросом должно быть связано ключевое слово по которому распознается его вхождение. Заглядывание вперед может не производится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.