Здравствуйте, criosray, Вы писали:
C>>>Ликбез: C>>>Что до того зачем я "ввернул", как Вы соизволили выразиться, так вот за тем, что объект есть суть ассоциативный массив. В динамических языках типа джаваскрипта так вообще объекты есть ни что иное, как словари. Х>>ну вы так за все реализации жаваскрипта не говорите, в V8 например от етого отказались и поимели нехилый профит, за подробностями — в гугол. C>Это тут вообще при чем?
притом, что выделенная фраза не верна
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, Antikrot, Вы писали:
MK>>>>Так я не понял: он "энфорсит" или просто предупреждения выдает? C>>>Энфорсит, выдавая предупреждения. fxcop и stylecop — составная часть автоматического билда у нас. A>>так бы и написал сразу — "бьёт по рукам" C>А я так и написал. Кто Вам виноват, что Вы не знаете, что слово "энфорсить" означает "вынуждать", "обязывать", "заставлять".
и всё-таки мне решительно не понятно почему ето не "костыль".
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Eugeny__, Вы писали: E__>>Не слышал про такое, но если и было, то это просто баг реализации конкретного сборщика, а баги имеют тенденцию к исправлению в следующих версиях. S>Это не баг. Это суровая правда жизни. В некоторых случаях неверна даже она: к примеру, если реально кому-то надо захватить неуправляемый ресурс, а в пуле их больше нет (залочены управляемыми обертками), то он встанет на ожидании освобождения; рано или поздно все потоки встанут, и останется только GC+finalizer thread, который наконец разблокирует заблокированное. Но это — очень некоторые случаи. В более частых такая стратегия просто приведет к тому, что все начнут быстро-быстро получать ошибки обращения, а GC будет думать, что так и должно быть.
Ну, я не имел ввиду неуправляемые ресурсы. При работе с таквыми действительно нужно быть аккуратным, и явно освобождать, здесь вопросов нет. Пользуясь случаем, передаю привет Сану, который до сих пор не удосужился ввести конструкцию using в жабу, из-за чего получается либо многословный try-finally, либо нужно городить огороды с АОП.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
C>>>>Ликбез: C>>>>Что до того зачем я "ввернул", как Вы соизволили выразиться, так вот за тем, что объект есть суть ассоциативный массив. В динамических языках типа джаваскрипта так вообще объекты есть ни что иное, как словари. Х>>>ну вы так за все реализации жаваскрипта не говорите, в V8 например от етого отказались и поимели нехилый профит, за подробностями — в гугол. C>>Это тут вообще при чем? Х>притом, что выделенная фраза не верна
Здравствуйте, criosray, Вы писали:
ГВ>>Э-э-э... У тебя что-то не то с логикой. Я спрашивал — где написан тот запрет, о котором ты упомянул? Тут ведь вот какое свинство, C++ подразумевает возможность генерировать и исполнять машинный код в рантайме. Знаешь, это настолько общеизвестная возможность, что некоторые горячие головы C++ за это даже ругают. Да-да! C>Ну поделитесь с нами грешными примером кода, где программа на С++ на лету во время исполнения генерирует полностью новый класс с методами и полями по переданной ей из текстового файла спецификации.
Ответь мне на один наводящий вопрос: а что дальше делать с этой сгенерированной и полностью новой структурой?
Вот, приехало мне описание класса, например, такое:
Сгенерировал я программу на C++, натравил компилятор, получил загрузочный модуль, загрузил этот модуль. Где-то в недрах у меня сгенерировался класс NewClass, допустим, унаследованный от некоторого GeneratedClassBase. Сгенерировался и экземпляр этого класса. Что дальше должен со всем этим делать? Ни одна другая часть программы знать ничего не знает о том, что третьего дня в потрохах адресного пространства появился указатель 0x3F5849AC, указывающий не на что-нибудь, а на экземпляр типа NewClass (хотя про сам этот указатель все, кому надо знать, уже знают). Тем более об этом не догадывается, например, визуализатор — вот не знает он, что по смещению 0x30 от адреса 0x3F5849AC лежат четыре байта, представляющие собой NewClass::m_i.
Так что делать-то софтинке? Куда податься?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Qbit86, Вы писали:
COF>>Хм, а где его надо инкрементировать?
Q>В кторе и в методе типа Copy() или там ShareOwnership().
О, как! Когда я в соседней ветке написал, что придется после (ну или вместо — что смысла не меняет) присваивания звать подобный метод, то меня обвинили в ламерстве. Теперь оказывается, что таки да. Еще можно вспомнить ручной инлайнинг... В общем, картина начинает проясняться
Здравствуйте, criosray, Вы писали:
MK>>>>Так я не понял: он "энфорсит" или просто предупреждения выдает? C>>>Энфорсит, выдавая предупреждения. fxcop и stylecop — составная часть автоматического билда у нас.
A>>так бы и написал сразу — "бьёт по рукам"
C>А я так и написал. Кто Вам виноват, что Вы не знаете, что слово "энфорсить" означает "вынуждать", "обязывать", "заставлять".
Я еще с десяток переводов знаю.
Гугл вам поможет понять разницу между "error" и "warning". А вот понять разницу между "предупредить" и "заставить" вам помогут в старших классах.
Здравствуйте, Antikrot, Вы писали:
MK>>>>>Так я не понял: он "энфорсит" или просто предупреждения выдает? C>>>>Энфорсит, выдавая предупреждения. fxcop и stylecop — составная часть автоматического билда у нас.
A>>>так бы и написал сразу — "бьёт по рукам"
C>>А я так и написал. Кто Вам виноват, что Вы не знаете, что слово "энфорсить" означает "вынуждать", "обязывать", "заставлять".
A>Я еще с десяток переводов знаю.
Не заметно.
A>Гугл вам поможет понять разницу между "error" и "warning". А вот понять разницу между "предупредить" и "заставить" вам помогут в старших классах.
Здравствуйте, Sinclair, Вы писали:
ГВ>>Деталей сейчас уже не помню, но идея, думаю, понятна. S>Конечно понятна. Непонятно, каким образом собираются работать простейшие запросы. Само отображение — это натурально прошлый век, конец девяностых.
S>Я в своё время пытался придумать такую штуку; в итоге кончилось ничем — на макросах такое не залудишь, потому что нужно два разных класса — один для данных, другой для метаданных. Ну, разве что компилять один хидер дважды с разными дефайнами, а это уже плохо дружит со всякими прекомпиляциями и всё такое. И всё равно не получается сделать полноценные запросы.
Зависит от того, когда ты это пытался сделать. Если во времена MSVC6 (как раз, когда я этим занимался), то это в самом деле почти невозможно. Если не так давно, то посмотри, например, в boost::lambda — вот тебе пример того, как на C++ синтезируется совсем другой язык.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, dr.Chaos, Вы писали:
DC>У нас это решается внешним кодогенератором, который генерит перситы по объектной схеме и связывает их с метаинформацией, а метаинформация вычитывается из схемы данных.
Да-да, я так и думал, что дойдем до кодогенератора.
Собственно, оба ответа про DSL были очевидны, и по этой дороге я тоже ходил. DC> Отношения сделаны таким образом что с ними работаешь как со списком, есть ленивая загрузка, есть способ строить запросы с проверкой типов в рантайме, можно прикрутить и чтоб в компаил тайме работало, но когда делали это всё компилилось, в том числе, древним VS6.
Ленивая загрузка пусть убъет себя болезненно, а вот насчет построения запросов с проверкой типов в компайл тайме я бы посмотрел. Всегда полезно расширить кругозор.
Предположим у нас есть классические таблички из а-ля Нортвинд: Employee(ID, FirstName, LastName, ManagerId FK Employee.ID), Order(EmployeeID FK Employee.ID, Amount, Date).
Хотим посмотреть, у кого подчинённые наторговали больше продаж в январе. Аналог вот такого запроса на SQL:
select m.FirstName, m.LastName, sum(o.Amount) as TotalAmount
from Employee m
inner join Employee e on m.id = e.ManagerID
inner join Order o on o.EmployeeId = e.ID
where Order.Date between '20080101' and '20080131'
Как будет выглядеть на этой гипотетической системе?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Сгенерировал я программу на C++, натравил компилятор, получил загрузочный модуль, загрузил этот модуль.
ЧТД.
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>
Здравствуйте, criosray, Вы писали:
C>Ликбез: C>Что до того зачем я "ввернул", как Вы соизволили выразиться, так вот за тем, что объект есть суть ассоциативный массив. В динамических языках типа джаваскрипта так вообще объекты есть ни что иное, как словари.
C>http://www.quirksmode.org/js/associative.html
Хм. Да ты не только альтернативно по-русски изъясняешься, ты ещё и с альтернативного английского переводишь. Знаешь, первый раз слышу, чтобы "Objects as associative arrays" переводилось "объект есть суть ассоциативный массив". Это ты сильно задвинул.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Сгенерировал я программу на C++, натравил компилятор, получил загрузочный модуль, загрузил этот модуль. C>ЧТД.
То есть от заданного мной наводящего вопроса ты ушёл?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
C>>Ликбез: C>>Что до того зачем я "ввернул", как Вы соизволили выразиться, так вот за тем, что объект есть суть ассоциативный массив. В динамических языках типа джаваскрипта так вообще объекты есть ни что иное, как словари.
C>>http://www.quirksmode.org/js/associative.html
ГВ>Хм. Да ты не только альтернативно по-русски изъясняешься, ты ещё и с альтернативного английского переводишь.
Я ничего не перевожу. Если у Вас проблемы с пониманием и русского и английского, то это Ваши проблемы, а не мои.
ГВ>Знаешь, первый раз слышу, чтобы "Objects as associative arrays" переводилось "объект есть суть ассоциативный массив". Это ты сильно задвинул.
Я ничего не переводил. Вам по теме сказать больше нечего? Что такое словарная структура данных теперь знаете? Вот и отличненько.
Надеюсь, мне не придется в будущем объяснять Вам что такое "списочная структура данных", что такое "древовидная структура данных" и т.п.?
Здравствуйте, COFF, Вы писали:
COF>О, как! Когда я в соседней ветке написал, что придется после (ну или вместо — что смысла не меняет) присваивания звать подобный метод, то меня обвинили в ламерстве. Теперь оказывается, что таки да. Еще можно вспомнить ручной инлайнинг... В общем, картина начинает проясняться
И что же тебе прояснилось?
ГВ>>>Сгенерировал я программу на C++, натравил компилятор, получил загрузочный модуль, загрузил этот модуль. C>>ЧТД.
ГВ>То есть от заданного мной наводящего вопроса ты ушёл?
Ну сходите к забору, или в вики и почитайте зачем, например, генерируются прокси-классы.
Заниматься восполнением пробелов в Вашем образовании я не намерен.
Здравствуйте, COFF, Вы писали:
COF>О, как! Когда я в соседней ветке написал, что придется после (ну или вместо — что смысла не меняет) присваивания звать подобный метод, то меня обвинили в ламерстве. Теперь оказывается, что таки да. Еще можно вспомнить ручной инлайнинг...
Почти всегда ты захватываешь владение, получая ресурс или другой ResourceWrapper в аргументы конструктора. Эти два конструктора аналогичны конструкторам std::tr1::shared_ptr'а. В остальных случаях можешь вызывать «p.Assign(other)», что аналогично плюсовому «p.operator =(other)».
COF>В общем, картина начинает проясняться
Ага, поставь ещё больше этих забавных жОлтеньких смайликов. А то сразу и не понятно, насколько ловко ты всех уел своим «картина начинает проясняться (жОлтенький смайлик)». Впредь я не буду тратить времени на подобные дешёвые заманухи.
Ты таки настаиваешь на том, что подсчёт ссылок — техника исключительно приплюснутых?
тьфу на ВАс
A>>Гугл вам поможет понять разницу между "error" и "warning". А вот понять разницу между "предупредить" и "заставить" вам помогут в старших классах. C>Вам к сожалению не помогли.
ну у ВАс всё впереди. было бы неправильно, если бы молодые поколения не выучили что-нибудь сверх предыдущих
Здравствуйте, criosray, Вы писали:
ГВ>>То есть от заданного мной наводящего вопроса ты ушёл? C>Ну сходите к забору, или в вики и почитайте зачем, например, генерируются прокси-классы.
Спасибо, я знаю, зачем генериуются прокси-классы. Проблема в том, что прокси не являются "абсолютно новыми" во всех отношениях. Система, образно выражаясь, "знает", куда их нужно помещать, что с ними делать и т.п. Но я так понял, что ты вёл речь о совершенно новых и неизвестных программе классах. Вот мне и интересно стало — как же система будет использовать эти самые новые и неизвестные классы?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!