Я использую Java, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Спасибо
Я использую Java, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Спасибо
Трудно сравнить семантику в пустоте. (Какие другие языки вы имели в виду?) "Модуль" может быть аналогичен Java-классу или пакету Java или чему-то еще полностью, в зависимости от этого другого языка. Обычно, поскольку "модули" имеют тенденцию быть от процедурных языков, я склоняюсь к высказыванию Java-класса, но я думаю, что линия очень нечеткая в этот момент, и вы можете довольно убедительно утверждать пакет.
экземпляр instanceofTom компилирует его - разные языки имеют разные определения пакета и модуля. Поэтому нет никакого языкового агностического ответа на этот вопрос.
Я постараюсь ответить на него с точки зрения некоторых языков, которые я знаю:
Java: он имеет концепцию package
s, которые в основном представляют собой механизм организации классов Java, интерфейсов и т.д. в пространствах имен. Они требуют иерархической структуры. package
не имеют статуса первого класса. Также стоит отметить, что superpackage
, предлагаемый для Java 7, также иногда называют module
s.
Modula: module
s, то же самое в концепции Java package
s. Не требуется иерархическая структура.
С#: namespaces
, то же самое в концепции Java package
s. Не требуется иерархическая структура.
С++: namespaces
. Как видно из названия, это просто пространства имен. Не требуется иерархическая структура.
Haskell: module
s, то же самое в концепции Java package
s.
Scala: package
в Scala такие же, как package
в Java, за исключением того, что они не требуют иерархических структур. Еще несколько ограничений, таких как одно-открытый класс для файла, также были смягчены. object
в Scala также называются модулями, и они также имеют статус первоклассного.
F #: namespaces
в F # такие же, как С# namespace
s. Помимо namespace
s, F # также имеет modules
, которые реализованы на уровне CLR как классы .NET со статическими методами. Они не являются первоклассными сущностями.
Похоже, что, как утверждают другие ответы, понятие модуля варьируется от одного языка к другому, некоторые даже не имеют его (но соответствующий аналог).
Однако, похоже, что в настоящее время модули являются скорее концепцией и ссылаются на набор файлов исходного кода, которые могут совместно использоваться независимо. Следуя этому определению, Java jar файлы не являются модулями, так как они содержат файлы, скомпилированные байт-кодом (файлы .class). Модульная система, соответствующая этому определению, должна быть введена в Java 9 (см. Эту статью) и присутствует на других языках, у которых есть модули или менеджеры пакетов, часто непосредственно называя пакеты модулей (Go lang/go tool, Python/pip, PHP/Composer...), где пакет обычно является упакованным модулем.
Пакет более похож на пространство имен С++, чем модуль. Модуль более похож на охватывающий класс, чем на пакет.