Re[29]: За что я не люблю С++
От: dr.Chaos Россия Украшения HandMade
Дата: 28.05.09 11:44
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ленивая загрузка пусть убъет себя болезненно, а вот насчет построения запросов с проверкой типов в компайл тайме я бы посмотрел. Всегда полезно расширить кругозор.

S>Предположим у нас есть классические таблички из а-ля Нортвинд: Employee(ID, FirstName, LastName, ManagerId FK Employee.ID), Order(EmployeeID FK Employee.ID, Amount, Date).
S>Хотим посмотреть, у кого подчинённые наторговали больше продаж в январе. Аналог вот такого запроса на SQL:
S>
S>select m.FirstName, m.LastName, sum(o.Amount) as TotalAmount 
S> from Employee m 
S> inner join Employee e on m.id = e.ManagerID
S> inner join Order o on o.EmployeeId = e.ID
S> where Order.Date between '20080101' and '20080131'
S>

S>Как будет выглядеть на этой гипотетической системе?

Не-не-не Девид Блейн . Тут понимаешь какая штука, у нас построитель этих запросов довольно примитивный, джоины он не поддерживает, собственно это нам и не особо надо, пока. А вот проверки соответсвия передаваемого значения довольно просто сделать, например так:

template<class T>
SimpleCondition Equal( Parameter<T> , T );


Для джоинов можно было б, например, так:

template <class X, class Y>
JoinCondition Join(Parameter<X> , Parameter<Y>)
{
   static_assert(is_types_compatible<X,Y>);
}


Ну и соответствующие специализации этого шаблона нагенерить.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[28]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 11:45
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Зависит от того, когда ты это пытался сделать. Если во времена MSVC6 (как раз, когда я этим занимался), то это в самом деле почти невозможно. Если не так давно, то посмотри, например, в boost::lambda — вот тебе пример того, как на C++ синтезируется совсем другой язык.
Ну а конкретнее — позволяет мне этот другой язык получать Expression Trees, которые строго контролируются в компайл тайме, а исследуются в рантайме?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 11:45
Оценка:
Здравствуйте, criosray, Вы писали:
C>Не суть важно конечно, но забыли group by.
Да, конечно. Конечно важно.

select m.FirstName, m.LastName, to.TotalAmount
  from Employee m 
  inner join 
  (
    select e.ManagerId, sum(o.Amount) as TotalAmount
    from Employee e inner join Orders o on o.EmployeeId = e.ID
    where o.Date between '20080101' and '20080131'
    group by e.ManagerId
  ) to on m.id = to.ManagerID
 order by TotalAmount desc
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 11:45
Оценка: +1 :)
Здравствуйте, _d_m_, Вы писали:

___>Ты как страус зарыл голову с песок.


Ну и что! Тут есть люди, зарывшие далеко не одну голову в песок.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[28]: За что я не люблю С++
От: criosray  
Дата: 28.05.09 11:51
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>То есть от заданного мной наводящего вопроса ты ушёл?

C>>Ну сходите к забору, или в вики и почитайте зачем, например, генерируются прокси-классы.

ГВ>Спасибо, я знаю, зачем генериуются прокси-классы. Проблема в том, что прокси не являются "абсолютно новыми" во всех отношениях. Система, образно выражаясь, "знает", куда их нужно помещать, что с ними делать и т.п. Но я так понял, что ты вёл речь о совершенно новых и неизвестных программе классах. Вот мне и интересно стало — как же система будет использовать эти самые новые и неизвестные классы?


Про совершенно неизвестные это Вы сами придумали. Достаточно, чтоб класс реализовал заранее известный контракт, ака интерфейс.

Я не зря упоминал WCF, но Вы проигнорировали.

Что до конкретных практических задач — тут совсем недавно обсуждали одну. Будьте внимательнее.
Re[31]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 11:56
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Знаешь, первый раз слышу, чтобы "Objects as associative arrays" переводилось "объект есть суть ассоциативный массив". Это ты сильно задвинул.

C>Я ничего не переводил. Вам по теме сказать больше нечего? Что такое словарная структура данных теперь знаете? Вот и отличненько.

Исходно ты употребил словосочетание "Структура словарного типа". Разницу понимаешь?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: За что я не люблю С++
От: criosray  
Дата: 28.05.09 11:59
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Знаешь, первый раз слышу, чтобы "Objects as associative arrays" переводилось "объект есть суть ассоциативный массив". Это ты сильно задвинул.

C>>Я ничего не переводил. Вам по теме сказать больше нечего? Что такое словарная структура данных теперь знаете? Вот и отличненько.

ГВ>Исходно ты употребил словосочетание "Структура словарного типа". Разницу понимаешь?


Нет, не понимаю. У Вас проблемы с русским языком?

Понятия:

структура словарного типа
словарная структура данных
структура данных "словарь"

абсолютно идентичны.

Вам было банально нечего ответить по теме, вот Вы и решили потроллить... Но к несчастью для Вас факир оказался пьян...
Re[30]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 12:02
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>Не-не-не Девид Блейн .

А то.
DC>Тут понимаешь какая штука, у нас построитель этих запросов довольно примитивный, джоины он не поддерживает, собственно это нам и не особо надо, пока.
Ок. Ну ладно, джойнов, допустим, нет.
А что есть? Оператор проекции, к примеру, как поддерживается?

DC>А вот проверки соответсвия передаваемого значения довольно просто сделать, например так:


DC>
DC>template<class T>
DC>SimpleCondition Equal( Parameter<T> , T );
DC>

И? Пример использования можно?
Давайте получим хотя бы
select * from Orders where Date between '20080101' and '20080131'


Если выйдет — напишите мне
select EmployeeID from Orders where Date between '20080101' and '20080131'
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 12:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>Зависит от того, когда ты это пытался сделать. Если во времена MSVC6 (как раз, когда я этим занимался), то это в самом деле почти невозможно. Если не так давно, то посмотри, например, в boost::lambda — вот тебе пример того, как на C++ синтезируется совсем другой язык.
S>Ну а конкретнее — позволяет мне этот другой язык получать Expression Trees, которые строго контролируются в компайл тайме, а исследуются в рантайме?

Естественно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: За что я не люблю С++
От: Eugeny__ Украина  
Дата: 28.05.09 12:10
Оценка:
Здравствуйте, doarn, Вы писали:


D>>>Да это я по поводу "рантайм-метаинформация спасет мир" позлобствовал )

C>>А при чем тут рантайм метаинформация?
D>При том что с подходом "а вот теперь мы скормим наше абстрактное нечто хитрому механизму сериализации и будет счастьЕ" (а именно такой вывод я извлек из обсуждаемой статьи) не всегда тру.


Я могу назвать реальный пример, когда универсальный сериалайзер жизненно необходим.
Сервер веб-приложений. В нем крутятся N веб-приложений, структура и данные которых серверу неизвестны. Приложения хранят некоторые данные в сессиях. Веб-серверу по независящим от него причинам нужно рестартануться. У нас 2 варианта:
1. Сохранить данные сессий универсальным сериализатором на диск, чтобы после рестарта поднять их и продолжить работу.
2. Послать пользователай на###, и просто рестартануться, забив на данные.

Других решений я не вижу.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[33]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 12:24
Оценка: +1
Здравствуйте, criosray, Вы писали:

ГВ>>Исходно ты употребил словосочетание "Структура словарного типа". Разницу понимаешь?

C>Нет, не понимаю. У Вас проблемы с русским языком?
C>Понятия:
C>структура словарного типа

Это структура типа "словарь" или некая структура, упомянутая в каком-то словаре? Кто на ком стоял?

C>словарная структура данных


Тот же вопрос. И между прочим, наиболее естественным выглядит ответ, что это некая структура данных, упомянутая в каком-то словаре.

C>структура данных "словарь"


Ну вот если бы так и было сказано...

C>абсолютно идентичны.


Да не идентичны они, в том-то и дело. Что интересно, в дальнейшем из контекста последовало, что лучше всего было бы сказать "ассоциативный массив", или "хэш-таблица", или вообще "мап" (транлитерация английского map — карта). Все бы тебя прекрасно поняли.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 12:30
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Спасибо, я знаю, зачем генериуются прокси-классы. Проблема в том, что прокси не являются "абсолютно новыми" во всех отношениях. Система, образно выражаясь, "знает", куда их нужно помещать, что с ними делать и т.п. Но я так понял, что ты вёл речь о совершенно новых и неизвестных программе классах. Вот мне и интересно стало — как же система будет использовать эти самые новые и неизвестные классы?


C>Про совершенно неизвестные это Вы сами придумали. Достаточно, чтоб класс реализовал заранее известный контракт, ака интерфейс.


Ну поделитесь с нами грешными примером кода, где программа на С++ на лету во время исполнения генерирует полностью новый класс с методами и полями по переданной ей из текстового файла спецификации.


Где здесь про контракт? Ты говоришь про спецификацию, переданную из текстового файла. Никаких дополнительных оговорок нет, значит, спецификация может быть, скажем так, практически любой, то есть специфицировать любой класс, в принципе допустимый данным языком программирования. Интерфейс это, прокси, мок, ещё какая вода на киселе — то нам не ведомо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[24]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 12:36
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ответь мне на один наводящий вопрос: а что дальше делать с этой сгенерированной и полностью новой структурой?
Ну хорошо. Пусть это будет не совсем новая структура.
Пусть это будет, скажем, наследник некоего известного интерфейса. Впрочем, нет — этого нам недостаточно. Потребуется еще какая-то функция со стандартной сигнатурой.
Скажем,
IStandardObject factory()

Насколько практично порождать новый код такого рода на С++? К примеру, если у меня есть регулярное выражение — сколько вызовов Match() на нескомпилированном выражении скомпенсируют стоимость компиляции выражения? Тысяча? Миллион?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: Подсчёт ссылок
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.05.09 12:36
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Ты таки настаиваешь на том, что подсчёт ссылок — техника исключительно приплюснутых?

Он намекает на то, что в плюсах можно перегрузить конструктор копирования и оператор присваивания, а в дотнете нельзя. Поэтому соглашение об инкременте указателя придется выполнять самостоятельно. Это, конечно, не совсем то, чего хочется. Но лучше бы посмотреть на сценарии реального использования.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: Подсчёт ссылок
От: COFF  
Дата: 28.05.09 13:00
Оценка: -1
Здравствуйте, Qbit86, Вы писали:

Q>Ага, поставь ещё больше этих забавных жОлтеньких смайликов. А то сразу и не понятно, насколько ловко ты всех уел своим «картина начинает проясняться (жОлтенький смайлик)». Впредь я не буду тратить времени на подобные дешёвые заманухи.


Нет, просто у меня была некая картина мира, которая была, что уж тут скрывать, поколеблена уверенными заявлениями от здешних евангелистов C#. И якобы все проблемы решены, и последняя версия фреймворка летает. А кто это понять не способен, тот ламер. Я пристально за управляемыми языками не слежу, был период, когда интересовался, нашел несколько возможных проблем и отошел от этого дела до лучших времен. Сейчас, было такое впечатление, лучшие времена настали. Но, поставил приложение которое тут порекомендовали — тормозит как и прежде, даже память утекает, все проблемы как были, так и остались. В общем, прояснилось, что это не я ламер, а что сторонники управляемых языков часто не понимают проблем, которые такой подход вызывает. Может быть, конечно, эти проблемы и преувеличены, но для меня существенны. В общем, подождем лучших времен, а там опять посмотрим.
Спасибо, кстати, Синклеру — он не стал скрывать проблемы, а честно написал, что они таки есть, в то время как остальные писали, что это баг и такого быть в принципе не может. В общем, я для себя выводы сделал, всем спасибо

Q>Ты таки настаиваешь на том, что подсчёт ссылок — техника исключительно приплюснутых?


Автоматический подсчет ссылок — да
Re[28]: За что я не люблю С++
От: Константин Б. Россия  
Дата: 28.05.09 13:00
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Зависит от того, когда ты это пытался сделать. Если во времена MSVC6 (как раз, когда я этим занимался), то это в самом деле почти невозможно. Если не так давно, то посмотри, например, в boost::lambda — вот тебе пример того, как на C++ синтезируется совсем другой язык.


А вы все эти темплейтные навороты реально используете или так флейма ради упоминаете? Те кто использует обычно жалуются на неприлично долгую линковку. А иной раз приходится приседания делать чтобы компилятор не падал.
Re[30]: За что я не люблю С++
От: criosray  
Дата: 28.05.09 13:05
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Спасибо, я знаю, зачем генериуются прокси-классы. Проблема в том, что прокси не являются "абсолютно новыми" во всех отношениях. Система, образно выражаясь, "знает", куда их нужно помещать, что с ними делать и т.п. Но я так понял, что ты вёл речь о совершенно новых и неизвестных программе классах. Вот мне и интересно стало — как же система будет использовать эти самые новые и неизвестные классы?


C>>Про совершенно неизвестные это Вы сами придумали. Достаточно, чтоб класс реализовал заранее известный контракт, ака интерфейс.


ГВ>

Ну поделитесь с нами грешными примером кода, где программа на С++ на лету во время исполнения генерирует полностью новый класс с методами и полями по переданной ей из текстового файла спецификации.


ГВ>Где здесь про контракт? Ты говоришь про спецификацию, переданную из текстового файла. Никаких дополнительных оговорок нет, значит, спецификация может быть, скажем так, практически любой, то есть специфицировать любой класс, в принципе допустимый данным языком программирования. Интерфейс это, прокси, мок, ещё какая вода на киселе — то нам не ведомо.

Это Вы себе сами придумали. Что Вы от меня хотите услышать?
Re[29]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 14:03
Оценка:
Здравствуйте, Константин Б., Вы писали:

ГВ>>Зависит от того, когда ты это пытался сделать. Если во времена MSVC6 (как раз, когда я этим занимался), то это в самом деле почти невозможно. Если не так давно, то посмотри, например, в boost::lambda — вот тебе пример того, как на C++ синтезируется совсем другой язык.


КБ>А вы все эти темплейтные навороты реально используете или так флейма ради упоминаете?


Использую, конечно. И не только буст.

КБ>Те кто использует обычно жалуются на неприлично долгую линковку.


Я бы сказал так — линковка становится значительно более долгой, чем если бы мы отказались от шаблонов. Когда-то на десятки процентов, когда-то на порядок. Стоит ли на это как-то особенно жаловаться...

КБ>А иной раз приходится приседания делать чтобы компилятор не падал.


Падения компилятора были серьёзной проблемой в одиозном MSVC6. Начиная с 2K3 в этом отношении особых проблем нет. Бывают случаи, но достаточно редко, чтобы не обращать внимания.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: За что я не люблю С++
От: blackhearted Украина  
Дата: 28.05.09 14:05
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

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


___>>Ты как страус зарыл голову с песок.


S>Ну и что! Тут есть люди, зарывшие далеко не одну голову в песок.


Несогласных с мнением общественности убирают?
Re[25]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.05.09 14:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Насколько практично порождать новый код такого рода на С++? К примеру, если у меня есть регулярное выражение — сколько вызовов Match() на нескомпилированном выражении скомпенсируют стоимость компиляции выражения? Тысяча? Миллион?


Если говорить о полном цикле "генерация текста на C++ — компиляция — линковка — подгрузка", то я бы оценил примерно в сотни тысяч — единицы миллионов. То есть приблизительно секунды (цикл генерации) против микросекунд (выигрыш от скомпилированного выражения). Хотя сам понимаешь, зависит ещё и от структуры выражения.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.