tag:blogger.com,1999:blog-9184507877749766768.post3811457447812198668..comments2022-01-05T11:51:30.220+03:00Comments on Есть табак, да нечем нюхать: Dynamic linking considered harmful?Dmitryhttp://www.blogger.com/profile/09876968556571551632noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-9184507877749766768.post-72448625483776840872013-01-30T15:36:58.758+04:002013-01-30T15:36:58.758+04:00другой пример того, как эта же задача может быть р...другой пример того, как эта же задача может быть решена проще:<br /><br />объектная модель SOM в OS/2. минусы её в том, что это реализация тяжеловесной CORBA, а значит, маршаллинг и какая-то внутренняя жизнь при создании объектов, например работа с метаклассами.<br /><br />плюсы же в том, что решается проблема с бинарной совместимостью "малой кровью": для того, чтобы сделать SOM объект с каким-то классом, достаточно экспортировать в DLL <b>всего три функции</b> (сравните это с тем, что порождает типичная библиотека на С++).<br /><br />бинарная совместимость решается правильным проектированием структур, реализующих объекты: ClassDataObject, который содержит ссылку на метакласс и указатели на методы. заполняется в конструкторе класса, то есть, экспортировать все методы в библиотеку не нужно. <br /><br />ещё в releaseorder поле в IDL указывается "раскладка" объекта в том виде, который не ломает бинарную совместимость.<br /><br />да, и как в Blackbox Component Pascal здесь тоже методы привязаны к классам не так топорно, как в С++.<br /><br />в итоге, имеем 2 системы, где динамические библиотеки реализованы правильно: SOM и Oberon-2, Blackbox Component Pascal.<br /><br />или, "компонентное программирование" Клеменса Шиперски.<br /><br />но они широко практически не известны и мало используются.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-9184507877749766768.post-3768389227566728512013-01-30T15:25:40.518+04:002013-01-30T15:25:40.518+04:00а вообще вот что нужно, так это динамическая загру...а вообще вот что нужно, так это динамическая загрузка модулей, как в Blackbox Component Pascal.<br /><br />вот это пример того, как динамические библиотеки могут быть реализованы правильно.Anonymousnoreply@blogger.com