Здравствуйте, DarkGray, Вы писали:
DG>А чем плох большой размер obj-ей? Они же все равно пользователю не отдаются. DG>Единственная проблема в том, что надо как-то стандартизовать, менять и т.д. формат информации в obj-е, но тут мог помочь xml.
Эээ. Как раз обектники при этом идут лесом. Это уде будет длл-ка. Ну, нечто вроде дотнетной сборки. И клиенту их как раз придется отдавать.
Другое дело, что хранить их можно намного компактнее чем сегодняшние объектники. Дотнет как раз это и делает.
А вот хмл тут будет плохим выбором. Слишком много его будет. Решение МС в дотнете красивее. Они создали некую реляционную модель. Набор таблиц призванных хранить метаданные. Причем этот набор еще к моту же и сжимет эти метаданные. Самая большая сборка в дотнете имеет размер около 3-х мег. А средляя несколько клиобайт.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, DarkGray, Вы писали:
DG>В продолжение, к предыдущему письму. DG>И на данный момент, конечно, единица трансляции в один cpp-файл, конечно, очень маловато будет.Особенно учитывая, что обычно один класс — один cpp.
Короче, дотнет рулит! Сборки и никаких гвоздей.
Ну, а размеры объектников — это кривая реализация. Тот же дотнет к такому не приводит.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, desperado_gmbh, Вы писали:
_>>>У нас на 20-меговый .exe (configuration=debug) 370 мегов .obj. Даже 512 мегов маловато — линкуется несколько минут. Инкрементальный линк на 100-меговом .pdb уже не работает — линкер вываливается с ошибкой. Шестая студия, кстати, не могла делать инкрементальный линк уже с 64-меговым .pdb. DG>>Это связанно с тем, что каждый отдельный obj хранит всю информацию, которая встречалась в данном cpp-ишнике и всех H-ников, которые в него include-ились, что сейчас как раз приводит к раздуванию obj-ей.
_>Я просто неправильно тебя понял. Я полностью с тобой согласен — система раздельной компиляции через obj напрочь устарела, и скомпилированные модули с метаданными рядом с кодом, впервые увиденные мной в турбопаскале, увеличивают скорость компиляции на порядки.
Причем тут правильно было замечено. Объектники слишком малы. Нужно вводить сборки. Ну, а это и есть шаг к компонентизации языка.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ай-яй-яй Определи-ка мне термин "уродство", не сочти за труд. А то не дискуссия, а базарная склока получится. Да, и ещё обоснуй употребление предиката "все". А то у меня появляются основания обвинить тебя в неправомерном обобщении.
Переведу его на русский.
Все реализации сериализации без наличии информации о типах (а это больше чем ртти) приводят к тому или иному объему ручного кодирования для даждого сериализуемого класса.
Ты знаком с тем как сериализация делается в дотнете? Там это ровно одна строчка кода. Причем от самого класса практически ничего не требуется. Нужно всего лишь пометить класс отрибутм говорящим что класс сериализуемый. Уравлять тем, что не нужно сериализовать или нужно сериализовать особым образом так же можно атрибутами.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
AVK>>>>Куча ненужного кода, необходимость явно описывать и регистрировать сериализуемые классы. ГВ>>>Так бы сразу и сказал. Только объясни, плиз, что это за "ненужный" код? AVK>>Описание и регистрация учавствующих классов, а зачастую еще и ручная реализация сериализации для каждого типа.
ГВ>Упс? А почему этот код — ненужный?
Потому-что задача сериализации — это задача решаемая декларативным путем. Достаточно сказать, что все члены класса нужно сериализовать и пометить те что не нужно. Остальное можно сделать автоматом. Но для этого нужно иметь в рантайме информацию о типах.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, desperado_gmbh, Вы писали:
_>Если ошибочный дизайн приводит к более простому и ясному коду, чем правильный, то пора пересмотреть методы оценки дизайна.
Да. Это нужно в рамочку и на стену. Хорошо скзал!
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Так... значит, когда ты создаёшь курсор, ты не знаешь, для какого типа данных он создаётся? Т.е., если исходно у тебя что-то вроде:
Представь, что не весь код может быть доступен во время компиляции. И изходи из этого.
Ну, а примеры удоства динамического определения и работы с типами можно поглядеть в том же Хоуме. Не сурер опытный программист за неделю написал полностью универсальный механизм подключения шорткатов. Писать плагины тоже очень неудобно без полноценной поддержки информации о типах в рантайме. Да и просто не выходно храть весь код в одном модуле. Те же контролы позволяют использовать чужой код и резко укорить компиляцию.
Интересно ты работал с дотнетом, явой или COM+-ом? Судя по твоим словам нет. Попробуй. Ну, ради разнообразия. Думаю после того как ты втянешся тебя уже не придется убеждать в том, что использование метаданных не является ошибкой дизайна.
Лучший пример тут дотнет. В нем даже придумали специальное расширение метаданныж — атрибуты. Представсь себе помещаешь ты метод атрибутом:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>К типам данных источника, надеюсь? Если так, то тривиально. Выбором нужного агрегата из набора имеющихся и привязкой его к позиции колонки. switch/case остаётся только в самом начале этой цепочки — при анализе SQL-типа. Хотя можно обойтись и без него — std::map<sql-type, editor*>, например. И в чём проблема?
Проблема (у тебя ) в том, что мой грид будет доступен в дизайнере и я настрою колонки за несколько секунд, а ты будешь длбить код как пака крло. Только и всего. Ну, и еще проблема в том, что тебе потребуется контрол с исходными кодами. А я могу взять готовый из очень большого списка. Ну и главная проблема в том, что твой подход потребует от пользователя твоего грида (тоже программиста) на порядок больших знаний чем у меня. Но ведь задача то решается одна и та же. Стало быть ты вибираешь не верный метод решения задачи.
PS
Глупо спорить, что если задача легко решается без напряга без ртти и т.п., то и не следует его использовать. Вот только это не всегда так.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Здравствуйте, alexkro, Вы писали:
PE>>> Новичку в нем тяжело. A>>Как и везде.
PE>Нет. Не везде. На шарп я перепрыгнул езо всяких книг, мануалов и тд. Просто нача писать. Потом были курсы, которые я проспал. В жаве тож самое. Парень ушел от нас и пересел без проблем на жаву. В вот на С++ так не перепрыгнешь.
Это потому, что ты уже знал язык, который обладает большими возможностями. А человек, который программировал на языке с возможностями, перекрывающими C++, перепрыгнет на него с такой же легкостью.
Значит ли это, что C++ сложнее изучать? Не факт. Просто изучать нужно правильно.
PE>>>Нынче хороший С++ программист сродни хорошему шахматисту — и тех и других мало. Разница лишь в том, что программисты на С++ зарабатывают деньги этим самым С++, а шахматисты зарабатывают чаще всего не шахматами. PE>>>С одной стороны это хорошо — мощь потрясающая. С другой — изучать этот язык надо долго. PE>>>Новичку нельзя доверить суппорт проекта на С++ — дохлый номер.
A>>Чистая дискриминация. Ты подразумеваешь, что остальные C++ не поймут? PE>Это не дискриминация. Больше всего рядовых игроков, рядовых программистов.
Я же вижу, ты себя считаешь выдающимся программистом, а остальных — рядовыми, которые C++ не поймут. Вот и дискриминация.
PE>Даеко не всякий сможет подойти к помосту и выжать 300 кг. Хотя теоретически это по плечу каждому. PE>С шахматами и С++ тоже самое.
PE>>>Такие чудеса, что демонстрирует Александреску, нельзя, к сожалению, внедрять повсюду.
A>>Это не чудеса, а просто новая парадигма дизайна и программирования. Можно ее принять и использовать, а можно программировать как раньше. C++ все поддерживает, недаром его называют multi-paradigm. PE>В дизайне я не увидел ничего нового. Все это было, только реализовывалось более громоздко, но более наглядно. PE>Я называю подход Александреску — концентрированный С++
Эта книга из тех, что за один раз не берутся. Там — новые идеи по дизайну, однозначно. Как все новое, они сначала отторгаются, так как тебе кажется, что это либо коряво, либо не нужно. Но потихоньку понимание приходит.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Где гарантия наличия реализации Save (или адекватности его генерации) для всех членов A.Properties? Или скажем так, чем гарантируется, что при введении 501-го типа Property система не начнёт слетать в одном случае из сотни?
Гарантия в коде универсального сериализатора. Код сериализации автоматически сериализует состояние объектов на основании информации о них.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Я не писал о гарантии правильной реализации. Какой там! Я имел ввиду просто наличие самой по себе реализации. О ней в данном случае можно попросту случайно забыть.
Это работает твое мировозрение. Ты привык что код сериализации должен быть захардкоден. А с использованием информации о типах сериализация делается автоматом.
WH>>Например в моей текущей практике почти половина ошибок на совести компилятора.(BCB6) ГВ>Ну... плохой компилятор, что тут можно сказать.
А у меня в основном на моей совести.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
О том и нечь что нет! Ни в коем случе не устривает. Это мазохизм.
Да и этот код использует ртти (как я понимаю).
Вот такой стиль намного лучше:
[Serialize]
class TestA
{
public TestA(CWnd wnd) {}
public string m_Server;
public string m_ProcessName;
};
[Serialize]
class TestC : TestA
{
public TestC(CWnd wnd) : bsae(wnd)
};
...
TestC с = new TestC(xxx);
... // Что-то тварим с объектом...
// Это весь код необходимый для сериализации!
MemoryStream ms = new MemoryStream(1024);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, ds);
Собственно главное код сериализации который в самом конце. Вот это красиво. К сожелению не так быстро как хотелось бы, но красиво.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ээээ... согласен, да. Сигнатуры — одно из возможных, но не лучшее решение, поскольку в данном случае просто подменяют rtti.
Гы. А дотнете нет ртти. Там это называется рефлекшеном. И это именно он и был.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Если такие же, как в .Net, то да. Но они не всегда такие и нужны. А реализовать сопоставление метаинформации экземпляру можно и без rtti.
Ага. Вот только прочитать в рантайме турдно. А иногда хотелось бы. Что плохой дизайн?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
VD>>Я тебя не удевлю если скажу, что все это можно сделать и на Шарпе (т.е. без шаблонов)? Причем решения будут даже более красивыми.
ГВ>Затыкание дырок C#? Забавно.
Демагогия вместо аргументов? Забавно... А если серьезно, то на Шарпе для большинства задач просто не нужно затыкать дыры. Есть красивые шаттные решения не приводящие к трехэтажным наворотам.
VD>>Так что твои примеры скорее являются доказательством высказанной мною мысли, о том что 90% использования шаблонов в С++ является затыканием дырок языка. И вызваны прощетами в языке.
ГВ>Эдак любую библиотеку можно назвать затыканием дырок языка, на котором она написана.
Я про всю библиотеку в общем то и не говорю. Но вот сигналы бесспорно являются затыканием дыр. И TypeList-ы тоже.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>ЗЫ. Между прочим, поняв это в своё время, я провёл несколько бессонных ночей, нервно покуривая на кухне, запивая горе самогонкой и поминутно утирая скупую слезу сиплюсплюсника. Вот так вот
Я плякаль... узнавая себя... и мысленно заменяя С++ на COM.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, IT, Вы писали:
IT>>ЗЫ. Между прочим, поняв это в своё время, я провёл несколько бессонных ночей, нервно покуривая на кухне, запивая горе самогонкой и поминутно утирая скупую слезу сиплюсплюсника. Вот так вот WH>Вот оветь на такой вопрос? Если С++ почти мертв как ты утверждаешь то почему МС вкладывает в развитие С++ компилятора кучу денег? Я не могу оценить изменения фреймворка но могу оценить изменения в С++ компиляторе и у меня такой чувство что вложения в него измеряются мегабаксами как минимум. Мало того что он понимает все что мне приходит в голову, компилирует boost лучше всех даже comeau сделал так он еще и не глючит.
Мой тебе совет. Сходи на ixnt. Найди там форум по программированию. Сделай в нем поиск на фамилию "Рыбинкин" и почитай...
Он изучал С (без плюсов). Во времена когда С был в фаворе. Он стал в нем докой... И до сих пор говори о нем те же слова, что ты о С++.
Что же касается МС. То они если ты заметил прикрутили к МС++ все свои последние навороты от дотнета. И в таком виде С++ еще долго будет жалеть всех живых.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.