Content deleted Content added
→Key aspects: Removed what seems to be opinion (use of modules refutes the rule of thumb described in The Mythical Man Month) Tags: Mobile edit Mobile app edit Android app edit |
→Language support: link to Modula and Oberon in second paragraph |
||
Line 17:
Languages that formally support the module concept include [[Ada (programming language)|Ada]], [[ALGOL|Algol]], [[BlitzMax]], [[C++]], [[C Sharp (programming language)|C#]], [[Clojure]], [[COBOL]], [[Common_Lisp]], [[D (programming language)|D]], [[Dart (programming language)|Dart]], [[eC (programming language)|eC]], [[Erlang (programming language)|Erlang]], [[Elixir (programming language)|Elixir]], [[Elm (programming language)|Elm]], [[F (programming language)|F]], [[F Sharp (programming language)|F#]], [[Fortran]], [[Go (programming language)|Go]], [[Haskell (programming language)|Haskell]], [[IBM/360]] [[Assembler for an assembly language|Assembler]], [[Control Language]] (CL), [[IBM RPG]], [[Java (programming language)|Java]],{{efn|The term "package" is used for the analog of modules in the JLS;<ref>James Gosling, Bill Joy, Guy Steele, Gilad Bracha, ''The Java Language Specification, Third Edition'', {{ISBN|0-321-24678-0}}, 2005. In the Introduction, it is stated "Chapter 7 describes the structure of a program, which is organized into packages similar to the modules of Modula." The word "module" has no special meaning in Java.</ref> — see [[Java package]]. "[[Java Module System|Modules]]", a kind of collection of packages, are planned for [[Java 9]] as part of [http://openjdk.java.net/projects/jigsaw/ Project Jigsaw]; these were earlier called "superpackages" and planned for Java 7.}} [[MATLAB]], [[ML (programming language)|ML]], [[Modula]], [[Modula-2]], [[Modula-3]], Morpho, [[NEWP]], [[Oberon (programming language)|Oberon]], [[Oberon-2 (programming language)|Oberon-2]], [[Objective-C]], [[OCaml]], several derivatives of [[Pascal (programming language)|Pascal]] ([[Component Pascal]], [[Object Pascal]], [[Turbo Pascal]], [[UCSD Pascal]]), [[Perl]], [[PL/I]], [[PureBasic]], [[Python (programming language)|Python]], [[R (programming language)|R]], [[Ruby (programming language)|Ruby]],<ref>{{Cite web|url=http://ruby-doc.org/core-2.0/Module.html|title=Class: Module (Ruby 2.0.0)}}</ref> [[Rust (programming language)|Rust]], [[JavaScript]],<ref>[http://www.ecma-international.org/ecma-262/6.0/#sec-modules ECMAScript® 2015 Language Specification, 15.2 Modules]</ref> [[Visual Basic .NET]] and [[WebDNA]].
Conspicuous examples of languages that lack support for modules are [[C (programming language)|C]] and have been [[C++]] and Pascal in their original form, [[C (programming language)|C]] and [[C++]] do, however, allow separate compilation and declarative interfaces to be specified using [[header file]]s. Modules were added to Objective-C in [[iOS 7]] (2013); to C++ with [[C++20]],<ref>{{cite web|url=https://isocpp.org/files/papers/n4720.pdf|title=N4720: Working Draft, Extensions to C++ for Modules}}</ref> and Pascal was superseded by [[Modula]] and [[Oberon (programming language)|Oberon]], which included modules from the start, and various derivatives that included modules. [[JavaScript]] has had native modules since [[ECMAScript]] 2015.
Modular programming can be performed even where the programming language lacks explicit syntactic features to support named modules, like, for example, in C. This is done by using existing language features, together with, for example, [[coding conventions]], [[programming idioms]] and the physical code structure. [[IBM i]] also uses modules when programming in the [[Integrated Language Environment]] (ILE).
|