tag:blogger.com,1999:blog-3208941668630248550.post1398911715941241100..comments2024-03-13T10:43:06.615+02:00Comments on 18-ть лет с Delphi: Абстрактные контейнерыAlex W. Lulinhttp://www.blogger.com/profile/08400475846894229767noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-3208941668630248550.post-50053840225167668752013-08-12T10:45:48.333+03:002013-08-12T10:45:48.333+03:00NameRec: Разумеется, моё упоминание итераторов Tur...NameRec: Разумеется, моё упоминание итераторов Turbo Vision было неслучайным ;-)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-79410843444352730152013-08-12T09:06:56.016+03:002013-08-12T09:06:56.016+03:00""Шаблонные решения" привязаны к ко...""Шаблонные решения" привязаны к конкретной диаграмме или, возможно, к семейству диаграмм?"<br /><br />Шаблонные решения привязываются к стереотипу.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-29380619645915075342013-08-12T09:05:45.037+03:002013-08-12T09:05:45.037+03:00"примеру такого "шаманства" я отнош..."примеру такого "шаманства" я отношу реализацию итераторов в Turbo Vision"<br /><br />http://18delphi.blogspot.ru/2013/03/blog-post_5929.html<br /><br />;-)Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-70177208151880962542013-08-12T02:32:57.819+03:002013-08-12T02:32:57.819+03:00NameRec:
«"...Надеюсь, Вы найдёте время раск...NameRec:<br /><br />«"...Надеюсь, Вы найдёте время раскрыть эту тему." <br />Именно так. Надеюсь - найду.»<br />-- Было бы очень интересно.<br />Хотелось бы также услышать от Вас причины, приведшие к необходимости разработки собственного DSL для кодогенерации. Этот DSL показался мне излишне криптованым, понятно, что XML"многословен", но IMHO он и знаком большему количеству людей (что снижает "порог входа") и, на мой взгляд, несколько более структурирован.<br />Кроме того, в случае, можно было бы попробовать некий "симбиоз" XML-описания с LUA/Python императивом.<br />Возможно, это всё выглядело бы не столь кратко, но возможно, чуть более понятно.<br />Хотя, говорить это меня подталкивает, скорее, личный опыт, нежели точное осознание задач, решаемых кодогенерацией.<br />На эту тему хотелось бы получить Ваши комментарии.<br /><br />«"Да, такое решение относительно часто встречается. Другое дело, я никогда не находил в нём особенной пользы, поскольку работать оно начинает на большом количестве данных, т.е. в случаях, когда уже уместно применить простую СУБД (например, SQLite)." <br />У меня была реальная необходимость.»<br />-- Если не секрет, поделитесь хотя бы типажом задачи.<br />Интересно уловить ситуации, когда потребуются, скажем, массивы (или списки) долиной порядка 100 000 элементов.<br /><br />«Другое дело, что у меня СОБСТВЕННАЯ инфраструктура (контейнеров в частности) - посему не факт, что удастся быстро и безболезненно "скрестить ежа с ужом".»<br />-- Это-то как раз, понятно :-)<br /><br />«"собственный DSL" <br />Пока одно могу сказать, что его можно править в процессе редактирования самой прикладной модели. Через UML.»<br />-- Вы говорите о шаблонах, которые используются для кодогенерации и обеспечивают раскрытие специфики конкретной диаграммы? Иля я Вас неправильно понял?<br /><br />«Заводить новые стереотипы и отношения между ними. Видоизменять шаблоны генерации.»<br />-- Тема стереотипов и их отображения в код, IMHO самая существенная часть Вашей методологии. Было бы очень интересно, если бы Вы осветили эту тему.<br /><br />«Т.е. DSL - "растёт" вместе с прикладными проектами.»<br />-- Вероятно, под DSL Вы понимаете сейчас чуть ли не саму совокупность UML-диаграм, описывающих конкретный проект. Иля я понял Вас неверно?<br /><br />«Т.е. "по ходу пьесы" - можно выделять "шаблонные решения". Что я активно и делаю.»<br />-- Не ошибусь ли я, если предположу, что:<br />1. "Шаблонные решения" привязаны к конкретной диаграмме или, возможно, к семейству диаграмм?<br />2. Необходимость в выделении "шаблонных решений" вызывается потребностью конкретизировать отношения между элементами диаграмм? Если так, то какие отношения Вы находите необходимым специализировать шаблонами?<br /><br />«"Это не какой-нибудь code injection" <br />Вы про "вызов локальных функций"? :-)»<br />-- Нет :-)<br />Про code injection я упомянул как о некоей разновидности "шаманства", грозящей сложностями с адаптацией при смене версии Delphi или, уж тем более, разрядности платформы.<br />К распространённому (в своё время) примеру такого "шаманства" я отношу реализацию итераторов в Turbo Vision, от которой нам проще было отказаться, чем адаптировать её для 32-разрядного Delphi.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-14930861856195496242013-08-12T00:41:17.693+03:002013-08-12T00:41:17.693+03:00"Это не какой-нибудь code injection"
Вы..."Это не какой-нибудь code injection"<br /><br />Вы про "вызов локальных функций"? :-)Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-845219590482496892013-08-12T00:30:47.243+03:002013-08-12T00:30:47.243+03:00"собственный DSL"
Пока одно могу сказат..."собственный DSL"<br /><br />Пока одно могу сказать, что его можно править в процессе редактирования самой прикладной модели. Через UML.<br /><br />Заводить новые стереотипы и отношения между ними. Видоизменять шаблоны генерации.<br /><br />Т.е. DSL - "растёт" вместе с прикладными проектами.<br /><br />Т.е. "по ходу пьесы" - можно выделять "шаблонные решения". Что я активно и делаю.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-70256356517823405622013-08-12T00:22:16.352+03:002013-08-12T00:22:16.352+03:00"Как я понимаю, это ваш (Вашей организации) с..."Как я понимаю, это ваш (Вашей организации) собственный DSL.<br />Пока могу только догадываться, в каких случаях требуются шаблоны и чем мотивировано их появление. Вероятно, это вызвано желанием определить специальные способы трансляции отношений (зависимость, агрегирование) для разных UML-диаграм. Надеюсь, Вы найдёте время раскрыть эту тему."<br /><br />Именно так. Надеюсь - найду.<br /><br />"Да, такое решение относительно часто встречается. Другое дело, я никогда не находил в нём особенной пользы, поскольку работать оно начинает на большом количестве данных, т.е. в случаях, когда уже уместно применить простую СУБД (например, SQLite)."<br /><br />У меня была реальная необходимость.<br /><br />"Он кстати, доступен со времён Delphi 7, если не ошибаюсь..."<br /><br />Тогда я его к сожалению не использовал "промышленно".<br /><br />"Здесь - не уверен. Хотя модуль небольшой, "хоккея" там практически нет :-) Это не какой-нибудь code injection :-)<br />Я не думаю, что XE-реализацию будет сложно портировать на 64-разряда, хотя и утверждать не возьмусь, поскольку соответствующего опыта не имею..."<br /><br />Я вот как раз и надеюсь на "отсутствие хоккея" и что всё будет хорошо. Другое дело, что у меня СОБСТВЕННАЯ инфраструктура (контейнеров в частности) - посему не факт, что удастся быстро и безболезненно "скрестить ежа с ужом".Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-58583793009871157742013-08-12T00:17:21.688+03:002013-08-12T00:17:21.688+03:00NameRec:
«Одна ремарка. Бывает (если это описано в...NameRec:<br />«Одна ремарка. Бывает (если это описано в шаблоне генерации), что код - тоже "сам" генерируется. Тогда как раз он тегами - не окружается.»<br />-- На шаблоны я обратил внимание.<br />Как я понимаю, это ваш (Вашей организации) собственный DSL.<br />Пока могу только догадываться, в каких случаях требуются шаблоны и чем мотивировано их появление. Вероятно, это вызвано желанием определить специальные способы трансляции отношений (зависимость, агрегирование) для разных UML-диаграм. Надеюсь, Вы найдёте время раскрыть эту тему.<br /><br />«"Да, там есть условно-поключаемая реализация хранения служебных структур в своём собственном пуле RAM" <br />Знакомо :-)»<br />-- Да, такое решение относительно часто встречается. Другое дело, я никогда не находил в нём особенной пользы, поскольку работать оно начинает на большом количестве данных, т.е. в случаях, когда уже уместно применить простую СУБД (например, SQLite).<br /><br />«"Мы отключаем - FastMM работает достаточно эффективно..." <br />Я знаю :-) FastMM - хорош.»<br />-- Он кстати, доступен со времён Delphi 7, если не ошибаюсь...<br /><br />«"Кстати, есть порт DeCAL к XE-версиям Delphi." <br />Спасибо. Обязательно посмотрю. А что там с 64-битами? Не знаете случайно?»<br />-- Здесь - не уверен. Хотя модуль небольшой, "хоккея" там практически нет :-) Это не какой-нибудь code injection :-)<br />Я не думаю, что XE-реализацию будет сложно портировать на 64-разряда, хотя и утверждать не возьмусь, поскольку соответствующего опыта не имею...Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-38591487220545680232013-08-11T23:36:44.746+03:002013-08-11T23:36:44.746+03:00"как я понимаю, идентификатор метода в UML-ре..."как я понимаю, идентификатор метода в UML-редакторе? Вероятно, назначается автоматически..."<br /><br />Именно. Автоматически.<br /><br />"Тэги #UC START# - #UC END# используются при генерации кода из UML-модели при её (модели) изменении для того, чтобы не потерять существующую реализацию. Я правильно понимаю?"<br /><br />Всё правильно.<br /><br />Одна ремарка. Бывает (если это описано в шаблоне генерации), что код - тоже "сам" генерируется. Тогда как раз он тегами - не окружается.<br /><br />"Да, там есть условно-поключаемая реализация хранения служебных структур в своём собственном пуле RAM"<br /><br />Знакомо :-)<br /><br />"Мы отключаем - FastMM работает достаточно эффективно..."<br />Я знаю :-) FastMM - хорош.<br /><br />"Кстати, есть порт DeCAL к XE-версиям Delphi."<br />Спасибо. Обязательно посмотрю. А что там с 64-битами? Не знаете случайно?Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-51864577012098985522013-08-11T23:32:08.305+03:002013-08-11T23:32:08.305+03:00«В данном случае "пары #UC START# - #UC END#&...«В данном случае "пары #UC START# - #UC END#" - это как раз "маркеры" - "вот сюда впишите код".»<br />-- Таким образом, из UML генерируется структура класса, GUID в #UC START# *...*, как я понимаю, идентификатор метода в UML-редакторе? Вероятно, назначается автоматически...<br />Тэги #UC START# - #UC END# используются при генерации кода из UML-модели при её (модели) изменении для того, чтобы не потерять существующую реализацию. Я правильно понимаю?<br /><br />«TTUSEPOOL !!!!! <br />-- я САМ такое тоже придумал :-)»<br />-- Да, там есть условно-поключаемая реализация хранения служебных структур в своём собственном пуле RAM. Мы отключаем - FastMM работает достаточно эффективно...<br />Кстати, есть порт DeCAL к XE-версиям Delphi.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-90379246149463942642013-08-11T21:52:49.788+03:002013-08-11T21:52:49.788+03:00"Относительно реализации контейнеров. Вы не с..."Относительно реализации контейнеров. Вы не смотрели SDL/DeCAL"<br /><br />Стыдно признаться. Но. Я о ней - не знал.<br /><br />Посмотрю внимательно.<br /><br />Но вот это мне знакомо:<br /><br />TObject0 = class<br />public<br /> I: Integer;<br /> constructor Create(aI: Integer);<br /> {$IFDEF TTUSEPOOL}<br /> class function NewInstance : TObject; override;<br /> procedure FreeInstance; override;<br /> {$ENDIF}<br />end;<br /><br />TTUSEPOOL !!!!!<br />-- я САМ такое тоже придумал :-)Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-29376053082850743082013-08-11T21:51:12.622+03:002013-08-11T21:51:12.622+03:00"Вызывает уважение."
Спасибо :-)
"..."Вызывает уважение."<br /><br />Спасибо :-)<br /><br />"Или, реализация методов лежит отдельно от UML-диаграммы?"<br /><br />И да и нет :-) В данном случае "пары #UC START# - #UC END#" - это как раз "маркеры" - "вот сюда впишите код".Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-80029678942183159432013-08-11T21:42:10.323+03:002013-08-11T21:42:10.323+03:00NameRec:
Вызывает уважение.
Особенно, если учесть,...NameRec:<br />Вызывает уважение.<br />Особенно, если учесть, что код сгенерирован из UML-диаграммы.<br />1. Правильно ли я понимаю, что ваш (Вашей организации) инструмент UML-моделирования поддерживает возможность при определении методов в классе на UML-модели сразу же указывать код реализации?<br />На эту мысль наводят пары #UC START# - #UC END#, ну и группировка локальных процедур в #UC START# *..._var* - #UC END# *..._var*.<br />Или, реализация методов лежит отдельно от UML-диаграммы?<br />2. Относительно реализации контейнеров. Вы не смотрели SDL/DeCAL - библиотеке, о которой рассказывал (http://gurin.tomsknet.ru/delphidecal.html) Уважаемый мною Сергей Гурин?Anonymousnoreply@blogger.com