Content deleted Content added
Guy Harris (talk | contribs) →History: Use {{cite conference}} for a conference paper. |
Guy Harris (talk | contribs) →History: Add a link for a pap |
||
Line 10:
Modular programming, in the form of subsystems (particularly for I/O) and software libraries, dates to early software systems, where it was used for [[code reuse]]. Modular programming per se, with a goal of modularity, developed in the late 1960s and 1970s, as a larger-scale analog of the concept of [[structured programming]] (1960s). The term "modular programming" dates at least to the National Symposium on Modular Programming, organized at the Information and Systems Institute in July 1968 by [[Larry Constantine]]; other key concepts were [[information hiding]] (1972) and [[separation of concerns]] (SoC, 1974).
Modules were not included in the original specification for [[ALGOL 68]] (1968), but were included as extensions in early implementations, [[ALGOL 68-R]] (1970) and [[ALGOL 68C]] (1970), and later formalized.<ref>{{cite journal |last=Lindsey |first=Charles H. |author-link=Charles H. Lindsey |date=Feb 1976 |title=Proposal for a Modules Facility in ALGOL 68 |url=http://archive.computerhistory.org/resources/text/algol/ACM_Algol_bulletin/1061719/p19-lindsey.pdf |url-status=dead |journal=ALGOL Bulletin |issue=39 |pages=20–29 |archive-url=https://web.archive.org/web/20160303230037/http://archive.computerhistory.org/resources/text/algol/ACM_Algol_bulletin/1061719/p19-lindsey.pdf |archive-date=2016-03-03 |access-date=2014-12-01}}</ref> One of the first languages designed from the start for modular programming was the short-lived [[Modula]] (1975), by [[Niklaus Wirth]]. Another early modular language was [[Mesa (programming language)|Mesa]] (1970s), by [[Xerox PARC]], and Wirth drew on Mesa as well as the original Modula in its successor, [[Modula-2]] (1978), which influenced later languages, particularly through its successor, [[Modula-3]] (1980s). Modula's use of dot-[[qualified name]]s, like <code>M.a</code> to refer to object <code>a</code> from module <code>M</code>, coincides with notation to access a field of a record (and similarly for attributes or methods of objects), and is now widespread, seen in [[C++]], [[C Sharp (programming language)|C#]], [[Dart (programming language)|Dart]], [[Go (programming language)|Go]], [[Java (programming language)|Java]], [[OCaml]], and [[Python (programming language)|Python]], among others. Modular programming became widespread from the 1980s: the original [[Pascal (programming language)|Pascal]] language (1970) did not include modules, but later versions, notably [[UCSD Pascal]] (1978) and [[Turbo Pascal]] (1983) included them in the form of "units", as did the Pascal-influenced [[Ada (programming language)|Ada]] (1980). The Extended Pascal ISO 10206:1990 standard kept closer to Modula2 in its modular support. [[Standard ML]] (1984)<ref>{{cite conference |author=David MacQueen |date=August 1984 |title=Modules for Standard ML |url=https://dl.acm.org/doi/pdf/10.1145/800055.802036 |book-title=LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming |pages=198–207}}</ref> has one of the most complete module systems, including [[Standard ML#Module system|functors]] (parameterized modules) to map between modules.
In the 1980s and 1990s, modular programming was overshadowed by and often conflated with [[object-oriented programming]], particularly due to the popularity of C++ and Java. For example, the C family of languages had support for objects and classes in C++ (originally [[C with Classes]], 1980) and Objective-C (1983), only supporting modules 30 years or more later. Java (1995) supports modules in the form of packages, though the primary unit of code organization is a class. However, Python (1991) prominently used both modules and objects from the start, using modules as the primary unit of code organization and "packages" as a larger-scale unit; and [[Perl 5]] (1994) includes support for both modules and objects, with a vast array of modules being available from [[CPAN]] (1993). [[OCaml]] (1996) followed ML by supporting modules and functors.
|