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