Какие есть подходы к организации модулей?

Рейтинг: 11Ответов: 1Опубликовано: 23.03.2011

Мне интересно узнать какие есть подходы к организации модулей для программ. Интересуют вообще способы разбиения программ на части и связывание этих частей.

Если отошлёте к какому-нибудь эзотерическому языку, в котором используется оригинальный подход -- буду только рад.

Перечислю что уже мне известно, дабы не утруждать отвечающих:

  • Прямое включения в глобальное пространство имён. Когда все символы (имена функций классов) включаются как есть, что сильно замусоривает пространство имён. Языки: C, C++ (правда namespaces частично спасают), PHP, Ruby (Modules тоже спасают), Scheme

  • Импорт как модуля, возможность явно указать имя для включенного модуля (что-то вроде alias) и обращаться к символам по этому имени. Глобальное пространство имён не замусоривается. Языки: Java, Python, Haskell, D

Кроме того в некоторых языках можно указывать имя подключаемого модуля в рантайме, в других нет.

Собственно вопрос: есть ли какие-либо языки или подходы которые не попадают ни в одну из описанных выше категорий? Есть ли языки где даже эти подходы реализованы нестандартно?

Ответы

▲ 2

Языки: C, C++ (правда namespaces частично спасают),

Более занятно другое: в C/C++ пространство доступных идентификаторов ограничивается исходным файлом, в котором имя определено. Соответственно, чтобы иметь возможность подцепить функцию, переменную из другого файла приходится выкручиваться с помощью h-ников. Это для этапа компиляции. А вот на линковке можно получить ошибку о дублирующихся идентификаторах. Итого, что имеем для C:

  1. чтобы подцепить идентификатор из другого модуля - требуется явное определение в файле, где он используется.
  2. чтобы идентификатор был доступен СТРОГО из одного модуля без возможности использования в других - есть ключевое слово static. В противном случае, как писал выше - ошибка линкера.