Форум
Философия программирования
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Sinclair, Вы писали: S>Здравствуйте, vdimas, Вы писали: V>>Ну, во-первых запрос мне кажется некорректным, т.к. не выведет менеджеров, у которых не было продаж вообще. S>Это зависит от формулировки задачи. Предположим, что он корректен. V>>Во-вторых, есть минимум 2 популярных библиотечных подхода: V>>1. это непосредственная реализация некоей функциональности (например, это иерархия объектов и весь функционал контролов WPF). V>>2. "движок" поверх этой функциональности, который на входе берет некое декларативное описание и по нему комбинирует имеющийся фнкционал (это интерпретаторы XAML форм, стилей, шаблонов отображения, шаблонов данных и т.д.) V>>Прикладной вызов либы как-то так: V>>[ccode] V>>struct OrderTotal { ManagerID managerId; double amount; } V>>auto annual = select(from(orders), between(cdate("20100101", &Order::orderDate, cdate("20101231"))) V>>auto byManager = group(annualOrders, groupBy(&Order::managerId)); V>>auto orderTotals = transform(byManager, transformWrap<OrderTotal>((_1.managerId=_2.first, _1.amount=sum(_2.second, &Order::amount)) )); V>>[/ccode] V>>Дальше лень расписывать, пока было расписано подвыражение: V>>select ManagerID, sum(Orders.Amount) from Orders where Orders.OrderDate between '20100101' and '20101231' group by ManagerID; S>Отлично. Пока что SQL рвёт библиотеку 1 к 3м по компактности и читаемости. S>И это у вас ещё нет никаких попыток разрешить переписывания и оптимизации запроса внутри библиотеки - ваши предикаты это всего лишь функторы, а не Expression Trees. V>>Можно спросить, что ты хотел узнать? S>Да я-то ничего нового не узнал. Я хотел вам показать разницу между DSL и библиотекой, нарисованной на GPPL. Надеюсь, показал. V>>На Клиппере пожестче было в свое время - никто не жаловался. И рвали по быстродействию любые базы, бо скомпилированный код многократно быстрее интерпретируемого работает. S>:))) S>Вообще-то на клиппере как раз было помягче, т.к. всё таки это DSL, специально заточенный на обработку данных - пусть и чрезмерно императивный. V>>>>Если же ты о перезаписи операций и прочей оптимизации - то это совсем отдельные операции, которые тоже, впрочем, достаточно формализованы. S>>>Хотелось бы, чтобы перезапись операций и прочая оптимизация были не хуже, чем в SQL. V>>Это нужен подход №2, когда выражение дается в виде декларации и доступно затем для аналитических вычислений. Тогда точно так же как показано выше в синтаксисе, но пусть select, from, transform и т.д. являюся не вызовами на обработку коллекций, а конструкторами узлов графа операций (аналог AST). Добавится лишь еще одна команда, нечто типа: V>>[ccode] V>>auto resultingCollection = execute(result); V>>[/ccode] S>Что-то меня гложут тяжкие сомнения про то, что это так легко сделать, как вы пишете. Скажем, Версанту потребовалось всё-таки приделать свой парсер C++, чтобы обойти ограничения языка. Для AST недостаточно скормить в between указатель на член класса - надо каким-то образом дать возможность среде определить, что это за член класса такой, и поднять всю нужную метадату.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …