Здравствуйте, NikeByNike, Вы писали:
D>>>Сейчас — в 2009м — это уже чаще всего неправда, но далеко не всегда — и не потому что С++ такой хороший, а потому что универсальной замены как не было, так и нет — что вот лично для меня — печаль.
C>>Начнем с того, что С++ не является универсальным языком. На этом и закончим.
NBN>Универсальным не является, но является (со своей сопутствующей поддержкой) наиболее универсальным среди распространённых.
C>>Во-первых, не ясно при чем тут это. C>>Во-вторых, это вам требуется несколько часов (максимум день???) на то, что в дотнет делается за 5 минут? Да уж, нашли повод для гордости.
NBN>В реальной жизни примерно столько же, хотя конечно всёравно проще (про пятиминутные исправления обычно говорят люди с 1-2 годами опыта реальной работы и ещё не умеющие отвечать за базар). Главный тормоз в этом не само подключение, а формализация процесса.
Да уж, задача невиданной сложности. Несколько часов, а то и день, чтоб формализовать... Похоже, что и среди плюсистов есть индусокодеры... NBN>И я встрял исключительно чтобы показать тебе ещё один твой пробел в знаниях.
В итоге показали пробел в своих собственных знаниях. Так держать.
Здравствуйте, criosray, Вы писали:
C>В С++ не возможно генерировать и исполнять произвольный код в рантайм.
Это на каком заборе так написано? Или опять — в википедии?
C>В лучшем случае сможете распарсить в структуру словарного типа, но это решение для бедных и не является десериализацией.
"Структура словарного типа" — это что такое? Какова связь "исполнения произвольного кода" с "десериализацией"?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, criosray, Вы писали:
C>>>Начнем с того, что С++ не является универсальным языком. На этом и закончим.
NBN>>Универсальным не является, но является (со своей сопутствующей поддержкой) наиболее универсальным среди распространённых.
C>Поделитесь критериями универсальности?
Здравствуйте, COFF, Вы писали:
COF>Предположим, что у меня есть некий ресурс, пусть битмап, есть произвольное количество векторов std::vector< boost::shared_ptr<bitmap> > которые содержат пересекающиеся множества битмапов. Например, я делаю какие-то сложные вычисления над графическими примитивами. Теперь, мне нужно очистить один из векторов, я делаю v.clear(), при этом все битмапы, на которые нет ссылок в других векторах тут же должны быть тут же освобождены, так как битмапов много и я не могу их держать в памяти произвольное время.
C++ тут не при чём. Тут весь цимес в библиотечном классе shared_ptr.
COF>Как это сделать на C#?
Как сделать на C# что? Подсчёт ссылок а-ля shared_ptr? :) Он хрестоматийно реализуется в любом современном языке. В C# аналогом плюсового деструктора является метод Dispose() (а не финализатор, как думают некоторые), в нём надо декрементировать счётчик, а при его обнулении — освобождать неуправляемый ресурс. Если идиома RAII реализована последовательно, то 1) освобождение неуправляемых ресурсов будет строго детерменированным (а не по велению сборщика), 2) сборка самого экземпляра твоего ResourceWrapper'а будет дешёвой — просто освобождение памяти, в очерердь на финализацию он не попадёт (если логика по освобождению ресурса уже была выполнена, с последующим вызовом GC.SuppressFinalize()).
Здравствуйте, Геннадий Васильев, Вы писали:
C>>В С++ не возможно генерировать и исполнять произвольный код в рантайм.
ГВ>Это на каком заборе так написано? Или опять — в википедии?
Это на каком заборе написано что можно?
C>>В лучшем случае сможете распарсить в структуру словарного типа, но это решение для бедных и не является десериализацией.
ГВ>"Структура словарного типа" — это что такое?
Почитайте в википедии или на том заборе, где Вы вычитали, что в С++ есть возможность генерации машинного кода на лету.
Здравствуйте, NikeByNike, Вы писали:
C>>>>Начнем с того, что С++ не является универсальным языком. На этом и закончим.
NBN>>>Универсальным не является, но является (со своей сопутствующей поддержкой) наиболее универсальным среди распространённых.
C>>Поделитесь критериями универсальности?
NBN>А головкой подумать?
Если подумать головкой, то С++ по ряду критериев более далек от универсальности чем, например, Java.
Здравствуйте, dds777, Вы писали:
D>Здравствуйте, Sorantis, Вы писали:
S>>Сложилось ощущение, что автор долго искал баг, дооолго искал, но не нашел и свалил все на язык.
D>Вы это зря, автор довольно известный и уважаемый. Лично я думаю, что вся проблема в том, что он имеет удовольствие (впрочем как и я) писать под мак на Objective-C, поэтому когда в проекте встречаются эти два языка (такое частенько бывает), сложно себя удержать от ругани C++
А где тут видно что я посягаю на известность или респектабельность автора?
Видно что человек, извините, мудохался довольно долго, а потом не выдержал и написал эту статью.
И по своей(наверно) эмоциональности привел, скажем, не самые убедительные аргументы.
Я с Objective-C дело никогда не имел, а С++ ругал в случаях когда отлавливал баг. А потом ругал себя за свое ламерство.
Берясь за С++ не стоит ожидать сахара и шоколада.
Я на С++ фактически уже не пишу (недавно только пришлось разбирать один метод программирования используя С++сную библиотеку)
Пишу на Шарпах, Джаве, и прочих "не трушных" языках. И что-то не могу припомнить, что я ругал С++ за его недостатки кодя на управляемых языках.
Вот джаву ругал, да, было дело, долго ругал
Здравствуйте, criosray, Вы писали:
C>>>В С++ не возможно генерировать и исполнять произвольный код в рантайм. ГВ>>Это на каком заборе так написано? Или опять — в википедии? C>Это на каком заборе написано что можно?
Э-э-э... У тебя что-то не то с логикой. Я спрашивал — где написан тот запрет, о котором ты упомянул? Тут ведь вот какое свинство, C++ подразумевает возможность генерировать и исполнять машинный код в рантайме. Знаешь, это настолько общеизвестная возможность, что некоторые горячие головы C++ за это даже ругают. Да-да!
C>>>В лучшем случае сможете распарсить в структуру словарного типа, но это решение для бедных и не является десериализацией. ГВ>>"Структура словарного типа" — это что такое? C>Почитайте в википедии или на том заборе, где Вы вычитали, что в С++ есть возможность генерации машинного кода на лету.
Так что такое "структура словарного типа"? Ты можешь объяснить или нет?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Sinclair, Вы писали:
ГВ>>Не совсем тебя понял — ты имеешь в виду, что на плюсах непременно нужны change tracking, lazy loading и identity map, или что даже самый минимум без этих фич, на плюсах не сделаешь? S>Второе. Если в новом 0x не сделают expression trees, то всё это будет практически невозможно.
Мне доводилось плотно возиться с полновесным отображением, и все эти фичи вводились сразу — и отслеживание изменений, и ленивая подгрузка, и отображение ключей. Всё это на C++. Единственная характерная черта, в прочем, как это свойственно для C++, так это то, что классы, отображаемые на БД записываются примерно так (ща раскудахчутся, чую):
class Department;
class Personnel : public DBClass {
MYMACRO_KEY(int, m_Key)
MYMACRO(string, m_Name)
MYMACRO(string, m_Family)
MYMACRO_REFS(Department)
};
Деталей сейчас уже не помню, но идея, думаю, понятна.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Деталей сейчас уже не помню, но идея, думаю, понятна.
Конечно понятна. Непонятно, каким образом собираются работать простейшие запросы. Само отображение — это натурально прошлый век, конец девяностых.
Я в своё время пытался придумать такую штуку; в итоге кончилось ничем — на макросах такое не залудишь, потому что нужно два разных класса — один для данных, другой для метаданных. Ну, разве что компилять один хидер дважды с разными дефайнами, а это уже плохо дружит со всякими прекомпиляциями и всё такое. И всё равно не получается сделать полноценные запросы.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, criosray, Вы писали:
C>>>Тем более, что в автобилд встроен fxcop, энфорсящий вызов Dispose для объектов, реализующих IDisposable. A>>вот это всем костылям костыль. так с языком чуть ли не что угодно сделать можно, не только проперти в плюсах приделать
C>Какой еще костыль? Вы хоть поняли какую глупость сморозили?
костыль-костыль. как еще назвать дополнительное приложение, встроенное в билд-процесс и исправляющее [потенциальные] ошибки программиста? ведь в стандарте языка-то его нет
получается, что использование препроцессора в QT — это костыль и проблемы C++, а использование постпроцессора в C# — это так и надо?
C>Сходите чтоли почитайте.. http://msdn.microsoft.com/en-us/library/bb429476.aspx
ну, в отличии от некоторых почитателей отдельных ОС/браузеров тут, я таки сначала прочитал
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, criosray, Вы писали: C>>>>Тем более, что в автобилд встроен fxcop, энфорсящий вызов Dispose для объектов, реализующих IDisposable. A>>>вот это всем костылям костыль. так с языком чуть ли не что угодно сделать можно, не только проперти в плюсах приделать
C>>Какой еще костыль? Вы хоть поняли какую глупость сморозили? A>костыль-костыль. как еще назвать дополнительное приложение, встроенное в билд-процесс и исправляющее [потенциальные] ошибки программиста? ведь в стандарте языка-то его нет A>получается, что использование препроцессора в QT — это костыль и проблемы C++, а использование постпроцессора в C# — это так и надо?
Собстенно да, вот с этим я полностью согласен. С тем, что данная фича FxCop скорее зло, чем благо, и в пример ее лучше не приводить
Здравствуйте, Qbit86, Вы писали:
Q>Как сделать на C# что? Подсчёт ссылок а-ля shared_ptr? :) Он хрестоматийно реализуется в любом современном языке. В C# аналогом плюсового деструктора является метод Dispose() (а не финализатор, как думают некоторые), в нём надо декрементировать счётчик, а при его обнулении — освобождать неуправляемый ресурс.
ГВ> M>Угу. Вспоминатся Qt, где подобное реализовано для событий. Приходится препроцессор отдельный прогонять. А как только где-то что-то навернется, ни один дебаггер не спасет
ГВ> Угу, только в данном случае под PROPERTY скрывается тривиальное упрощение синтаксиса объявления инстанцированного шаблонного типа и соответствующей переменной-члена.
Если чо, до ошибки все равно не докопаться
ГВ> Никаких вывертов. Я сам противник того, чтобы прятать под макросами какую-нибудь суровую магию. Лучше уж лишние пять строк написать, если что.
Здравствуйте, Sinclair, Вы писали:
S>Я в своё время пытался придумать такую штуку; в итоге кончилось ничем — на макросах такое не залудишь, потому что нужно два разных класса — один для данных, другой для метаданных. Ну, разве что компилять один хидер дважды с разными дефайнами, а это уже плохо дружит со всякими прекомпиляциями и всё такое. И всё равно не получается сделать полноценные запросы.
Ну, зато нам не надо фреймворк за собой тащить :) Вообще, если серьезно, то я бы сделал что-то типа IDL, но для описания не интерфейсов, а метаданных, потом это дело компилится в C++ код, создаются базовые классы с данными, от которых нужно наследоваться, плюс классы с метаданными. С другой стороны, если такие штуки действительно нужны в программе на C++, то тут уже можно подумать о яве или .нет, правда не везде они есть или работают удовлетворительно.
Здравствуйте, Геннадий Васильев, Вы писали:
C>>>>В С++ не возможно генерировать и исполнять произвольный код в рантайм. ГВ>>>Это на каком заборе так написано? Или опять — в википедии? C>>Это на каком заборе написано что можно?
ГВ>Э-э-э... У тебя что-то не то с логикой. Я спрашивал — где написан тот запрет, о котором ты упомянул? Тут ведь вот какое свинство, C++ подразумевает возможность генерировать и исполнять машинный код в рантайме. Знаешь, это настолько общеизвестная возможность, что некоторые горячие головы C++ за это даже ругают. Да-да!
Ну поделитесь с нами грешными примером кода, где программа на С++ на лету во время исполнения генерирует полностью новый класс с методами и полями по переданной ей из текстового файла спецификации.
C>>>>В лучшем случае сможете распарсить в структуру словарного типа, но это решение для бедных и не является десериализацией. ГВ>>>"Структура словарного типа" — это что такое? C>>Почитайте в википедии или на том заборе, где Вы вычитали, что в С++ есть возможность генерации машинного кода на лету.
ГВ>Так что такое "структура словарного типа"? Ты можешь объяснить или нет?
Понятно. Дожились. Нынче программисты даже таких базовых вещей не знают. Тьфу.
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, criosray, Вы писали:
C>>>>Тем более, что в автобилд встроен fxcop, энфорсящий вызов Dispose для объектов, реализующих IDisposable. A>>>вот это всем костылям костыль. так с языком чуть ли не что угодно сделать можно, не только проперти в плюсах приделать
C>>Какой еще костыль? Вы хоть поняли какую глупость сморозили? A>костыль-костыль. как еще назвать дополнительное приложение, встроенное в билд-процесс и исправляющее [потенциальные] ошибки программиста?
fxcop к Вашему сведенью ничего не исправляет. fxcop проверяет сборку на соответствие определенному набору правил и выдает предупреждения в тех местах, где таковые были нарушены. Для С++ ничего и близко подобного нету.
A>ведь в стандарте языка-то его нет
Чего нет в стандарте языка?
A>получается, что использование препроцессора в QT — это костыль и проблемы C++, а использование постпроцессора в C# — это так и надо?
Понятно. Ссылку Вы так и не прочитали. fxcop не является постпроцессором. Садитесь два.
C>>Сходите чтоли почитайте.. http://msdn.microsoft.com/en-us/library/bb429476.aspx A>ну, в отличии от некоторых почитателей отдельных ОС/браузеров тут, я таки сначала прочитал
Заметно как Вы прочитали.