Опять про ЯП и секции исполняемых модулей
13.09.2012
|
Философ |
Во многих современных ОС, например в Windows, существует замечательная фича в виде секций с их атрибутами доступа. Однако её использование затруднено тем, что ЯП эту фичу не поддерживают.
Например, далеко не так просто расшарить одну переменную между несколькими процессами.
Более того, современные языки до сих пор игнорируют существование самих модулей.
Пример, как бы это могло быть использовано:
{
Module module = Module.Load (userString);
((MyModule)module).ProcessData(data); //Ясен пень, что о содержимом модуля мы должны знать во время компиляции
Module.Unload(module); //вот так, потому что внутри модуля ReferenceCounter
}
Если добавить возможность экспорта классов, то это бы значительно упростило жизнь разработчикам приложений поддерживающих плагины. Вместе с приложением можно было бы публиковать заголовочный файл для модуля, а разработчику плагина достаточно было бы реализовать то, что он декларирует.
Например, далеко не так просто расшарить одну переменную между несколькими процессами.
Более того, современные языки до сих пор игнорируют существование самих модулей.
Пример, как бы это могло быть использовано:
{
Module module = Module.Load (userString);
((MyModule)module).ProcessData(data); //Ясен пень, что о содержимом модуля мы должны знать во время компиляции
Module.Unload(module); //вот так, потому что внутри модуля ReferenceCounter
}
Если добавить возможность экспорта классов, то это бы значительно упростило жизнь разработчикам приложений поддерживающих плагины. Вместе с приложением можно было бы публиковать заголовочный файл для модуля, а разработчику плагина достаточно было бы реализовать то, что он декларирует.
13.09.2012 10 комментариев |
При неумелом — глобальные переменные на уровне операционной системы и "кошмар зависимостей", он же DLL Hell.
O>При умелом использовании — да, удобно...
Любой инструмент можно использовать неумело.
O>При неумелом — глобальные переменные на уровне операционной системы
именно это (в частности) я и хочу упростить
O>и "кошмар зависимостей", он же DLL Hell.
каким образом?
Новый Тетрис потребовал обновить MP3-библиотеку, из-за чего развалился Нортонкоммандер, при его переустановке обновилась библиотека Unzip32.dll, из-за чего перестала работать ZipFS, при её переустановке был обновлён драйвер ACPI.sys, не было гвоздя — подкова пропала, не было подковы — лошадь захромала и т.п.
Причём здесь секции и глобальные переменные?
Секции и сейчас очень активно используются, но в большинстве случаев неявно.
Кто виноват в том, что новая версия библиотеки "свалила" весь софт, который её использует, для меня очевидно.
Сейчас такое тоже бывает.
Ф>Более того, современные языки до сих пор игнорируют существование самих модулей.
Это вся сишная ветка игнорирует. А в паскалевской Вирт еще в Модуле сделал модули. И теперь они есть там и в Обероне, и в Компонентном паскале.
И, кстати, в БлэкБоксе модули подгружаются динамически. Тем самым и два вида (exe и dll) исполняемых файлов не нужны — есть только один: модули.
Ф>>Более того, современные языки до сих пор игнорируют существование самих модулей.
LVV>Это вся сишная ветка игнорирует.
А чем дотнетная сборка или JVMный класс не тянут на гордое звание модуля?
AVK>Здравствуйте, LaptevVV, Вы писали:
Ф>>>Более того, современные языки до сих пор игнорируют существование самих модулей.
LVV>>Это вся сишная ветка игнорирует.
AVK>А чем дотнетная сборка или JVMный класс не тянут на гордое звание модуля?
Класс вообще не может быть модулем. Ибо в одном модуле может быть несколько классов.
Пакет или сборка — это понятие более крупное, чем модуль.
Наличие ЯВНОЙ конструкции модуля побуждает (замечено неоднократно в процессе обучения) студента мыслить о декомпозиции более конкретно.
Ни классы, ни сборки не побуждают к декомпозиции. Да, можно постоянно твердить об этом, но реально студни начинают думать только при наличии ЯВНОЙ конструкции в языке.
AVK>>А чем дотнетная сборка или JVMный класс не тянут на гордое звание модуля?
LVV>Класс вообще не может быть модулем.
Почему?
LVV> Ибо в одном модуле может быть несколько классов.
Кто сказал?
LVV>Пакет или сборка — это понятие более крупное, чем модуль.
Почему?
LVV>Наличие ЯВНОЙ конструкции модуля побуждает (замечено неоднократно в процессе обучения) студента мыслить о декомпозиции более конкретно.
Что такое "явная конструкция модуля"? Ключевое слово module/unit?
LVV>Ни классы, ни сборки не побуждают к декомпозиции.
Модули тоже не побуждают.
LVV>Это вся сишная ветка игнорирует. А в паскалевской Вирт еще в Модуле сделал модули. И теперь они есть там и в Обероне, и в Компонентном паскале.
В .NET есть понятие модуля, но я не могу себе представить ситуации, когда эта функциональность потребовалась бы прикладному программисту.
H>В .NET есть понятие модуля
Аналог паскалевского модуля это сборка, а не нетовский модуль.