General-purpose programming language

Last updated

In computer software, a general-purpose programming language (GPL) is a programming language for building software in a wide variety of application domains. Conversely, a domain-specific programming language (DSL) is used within a specific area. For example, Python is a GPL, while SQL is a DSL for querying relational databases.

Contents

History

Early programming languages were designed for scientific computing (numerical calculations) or commercial data processing, as was computer hardware. Scientific languages such as Fortran and Algol supported floating-point calculations and multidimensional arrays, while business languages such as COBOL supported fixed-field file formats and data records. Much less widely used were specialized languages such as IPL-V and LISP for symbolic list processing; COMIT for string manipulation; APT for numerically controlled machines. Systems programming requiring pointer manipulation was typically done in assembly language, though JOVIAL was used for some military applications. [1]

IBM's System/360, announced in 1964, was designed as a unified hardware architecture supporting both scientific and commercial applications, and IBM developed PL/I for it as a single, general-purpose language that supported scientific, commercial, and systems programming. Indeed, a subset of PL/I was used as the standard systems programming language for the Multics operating system.

Since PL/I, the distinction between scientific and commercial programming languages has diminished, with most languages supporting the basic features required by both, and much of the special file format handling delegated to specialized database management systems.

Many specialized languages were also developed starting in the 1960s: GPSS and Simula for discrete event simulation; MAD, BASIC, Logo, and Pascal for teaching programming; C for systems programming; JOSS and APL\360 for interactive programming. [1]

GPL vs. DSL

The distinction between general-purpose programming languages and domain-specific programming languages is not always clear. [2] A programming language may be created for a specific task, but used beyond that original domain and thus be considered a general purpose programming language.  For example, COBOL, Fortran, and Lisp were created as DSLs (for business processing, numeric computation, and symbolic processing), but became GPL's over time.[ dubious ] Inversely, a language may be designed for general use but only applied in a specific area in practice. [3] A programming language that is well suited for a problem, whether it be general-purpose language or DSL, should minimize the level of detail required while still being expressive enough in the problem domain. [4] As the name suggests, general-purpose language is "general" in that it cannot provide support for domain-specific notation while DSLs can be designed in diverse problem domains to handle this problem. [4] General-purpose languages are preferred to DSLs when an application domain is not well understood enough to warrant its own language. In this case, a general-purpose language with an appropriate library of data types and functions for the domain may be used instead. [5] While DSLs are usually smaller than GPL in that they offer a smaller range of notations of abstractions, some DSLs actually contain an entire GPL as a sublanguage. In these instances, the DSLs are able to offer domain-specific expressive power along with the expressive power of GPL. [6]

General Purpose programming languages are all Turing complete, meaning that they can theoretically solve any computational problem. Domain-specific languages are often similarly Turing complete but are not exclusively so.

Advantages and disadvantages

General-purpose programming languages are more commonly used by programmers. According to a study, C, Python, and Java were the most commonly used programming languages in 2021. [7]  One argument in favor of using general-purpose programming languages over domain-specific languages is that more people will be familiar with these languages, overcoming the need to learn a new language.

Additionally, for many tasks (e.g., statistical analysis, machine learning, etc.) there are libraries that are extensively tested and optimized. Theoretically, the presence of these libraries should bridge the gap between general-purpose and domain-specific languages. [4]

An empirical study in 2010 sought to measure problem-solving and productivity between GPLs and DSLs by giving users problems who were familiar with the GPL (C#) and unfamiliar with the DSL (XAML). Ultimately, users of this specific domain-specific language performed better by a factor of 15%, even though they were more familiar with GPL, warranting further research. [4]

Examples

C

The predecessor to C, B, was developed largely for a specific purpose: systems programming. [8] By contrast, C has found use in a variety of computational domains, such as operating systems, device drivers, application software, and embedded systems.

C is suitable for use in a variety of areas because of its generality. It provides economy of expression, flow control, data structures, and a rich set of operators, but does not constrain its users to use it in any one context. [9] As a result, though it was first used by its creators to rewrite the kernel of the Unix operating system, [10] it was easily adapted for use in application development, embedded systems (e.g., microprocessor programming), video games (e.g., Doom), and so on. Today, C remains one of the most popular and widely-used programming languages. [11]

C++

Conceived as an extension to C, C++ introduced object-oriented features, as well as other conveniences like references, operator overloading, and default arguments. Like C, C++'s generality allowed it to be used in a wide range of areas. While its C++'s core area of application is in systems programming (because of C++'s ability to grant access to low-level architecture), [12] it has been used extensively to build desktop applications, video games, databases, financial systems, and much more. [13] Major software and finance companies, such as Microsoft, Apple, Bloomberg, and Morgan Stanley, still widely use C++ in their internal and external applications. [13]

Python

Python was conceived as a language that emphasized code readability and extensibility. [14] [15] The former allowed non-software engineers to easily learn and write computer programs, while the latter allowed domain specialists to easily create libraries suited to their own use cases. For these reasons, Python has been used across a wide range of domains.

Below are some of the areas where Python is used: [16]

List

The following are some general-purpose programming languages:

Related Research Articles

A fourth-generation programming language (4GL) is a high-level computer programming language that belongs to a class of languages envisioned as an advancement upon third-generation programming languages (3GL). Each of the programming language generations aims to provide a higher level of abstraction of the internal computer hardware details, making the language more programmer-friendly, powerful, and versatile. While the definition of 4GL has changed over time, it can be typified by operating more with large collections of information at once rather than focusing on just bits and bytes. Languages claimed to be 4GL may include support for database management, report generation, mathematical optimization, GUI development, or web development. Some researchers state that 4GLs are a subset of domain-specific languages.

<span class="mw-page-title-main">Martin Fowler (software engineer)</span> American software developer, author and public speaker

Martin Fowler is a British software developer, author and international public speaker on software development, specialising in object-oriented analysis and design, UML, patterns, and agile software development methodologies, including extreme programming.

<span class="mw-page-title-main">Programming language</span> Language for communicating instructions to a machine

A programming language is a system of notation for writing computer programs.

<span class="mw-page-title-main">Python (programming language)</span> General-purpose programming language

Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation.

<span class="mw-page-title-main">C++</span> General-purpose programming language

C++ is a high-level, general-purpose programming language created by Danish computer scientist Bjarne Stroustrup. First released in 1985 as an extension of the C programming language, it has since expanded significantly over time; as of 1997, C++ has object-oriented, generic, and functional features, in addition to facilities for low-level memory manipulation for making things like microcomputers or to make operating systems like Linux or Windows. It is almost always implemented as a compiled language, and many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Embarcadero, Oracle, and IBM.

In computer science, a preprocessor is a program that processes its input data to produce output that is used as input in another program. The output is said to be a preprocessed form of the input data, which is often used by some subsequent programs like compilers. The amount and kind of processing done depends on the nature of the preprocessor; some preprocessors are only capable of performing relatively simple textual substitutions and macro expansions, while others have the power of full-fledged programming languages.

A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains. There are a wide variety of DSLs, ranging from widely used languages for common domains, such as HTML for web pages, down to languages used by only one or a few pieces of software, such as MUSH soft code. DSLs can be further subdivided by the kind of language, and include domain-specific markup languages, domain-specific modeling languages, and domain-specific programming languages. Special-purpose computer languages have always existed in the computer age, but the term "domain-specific language" has become more popular due to the rise of domain-specific modeling. Simpler DSLs, particularly ones used by a single application, are sometimes informally called mini-languages.

<span class="mw-page-title-main">Embedded software</span> Computer software written to control machines not typically thought of as computers

Embedded software is computer software, written to control machines or devices that are not typically thought of as computers, commonly known as embedded systems. It is typically specialized for the particular hardware that it runs on and has time and memory constraints. This term is sometimes used interchangeably with firmware.

<span class="mw-page-title-main">ROOT</span> Data analysis software

ROOT is an object-oriented computer program and library developed by CERN. It was originally designed for particle physics data analysis and contains several features specific to the field, but it is also used in other applications such as astronomy and data mining. The latest minor release is 6.28, as of 2023-02-03.

A model transformation language in systems and software engineering is a language intended specifically for model transformation.

JetBrains MPS is a language workbench developed by JetBrains. MPS is a tool to design domain-specific languages (DSL). It uses projectional editing which allows users to overcome the limits of language parsers, and build DSL editors, such as ones with tables and diagrams.
It implements language-oriented programming. MPS is an environment for language definition, a language workbench, and integrated development environment (IDE) for such languages.

Programming languages have been classified into several programming language generations. Historically, this classification was used to indicate increasing power of programming styles. Later writers have somewhat redefined the meanings as distinctions previously seen as important became less significant to current practice.

A general-purpose language is a computer language that is broadly applicable across application domains, and lacks specialized features for a particular domain. This is in contrast to a domain-specific language (DSL), which is specialized to a particular application domain. The line is not always sharp, as a language may have specialized features for a particular domain but be applicable more broadly, or conversely may in principle be capable of broad application but in practice used primarily for a specific domain.

<span class="mw-page-title-main">Ring (programming language)</span> Dynamically typed, general-purpose programming language

Ring is a dynamically typed, general-purpose programming language. It can be embedded in C/C++ projects, extended using C/C++ code and/or used as a standalone language. The supported programming paradigms are imperative, procedural, object-oriented, functional, meta, declarative using nested structures, and natural programming. The language is portable and can be used to create console, GUI, web, game and mobile applications.

References

  1. 1 2 Jean E. Sammet, "Programming Languages: History and Future", Communications of the ACM15:7:601-610 (July 1972) doi : 10.1145/361454.361485
  2. "Domain-Specific Languages: An Annotated Bibliography". CiteSeerX   10.1.1.33.8207 .{{cite journal}}: Cite journal requires |journal= (help)
  3. Berry, Gerard (May 2006). "Real time programming: special purpose or general purpose languages". HAL Open Science.
  4. 1 2 3 4 Kosar, Tomaz (May 2010). "Comparing General-Purpose and Domain-Specific Languages: An Empirical Study" (PDF). Computer Science and Information Systems. 7 (2): 247–264. doi:10.2298/CSIS1002247K.
  5. van Deursen, Arie (December 1998). "Little languages: little maintenance?". Journal of Software Maintenance: Research and Practice. 10 (2): 75–92. doi:10.1002/(SICI)1096-908X(199803/04)10:2<75::AID-SMR168>3.0.CO;2-5.
  6. van Deursen, Arie; Klint, Paul; Visser, Joost (June 2000). "Domain-specific languages: an annotated bibliography". ACM SIGPLAN Notices. 35 (6): 26–36. doi: 10.1145/352029.352035 . ISSN   0362-1340. S2CID   1049872.
  7. "The Most Popular Programming Languages - 1965/2021 - New Update - Statistics and Data". statisticsanddata.org. Retrieved 2022-06-03.
  8. Thompson, K. (1972-01-07). "Cover sheet for technical memorandum" (PDF). Bell Telephone Laboratories. Archived (PDF) from the original on 2015-06-11. Retrieved 2022-06-03.
  9. W., Kernighan, Brian (2016). The C programming language. Prentice Hall. ISBN   978-0-13-110370-2. OCLC   1004153413.{{cite book}}: CS1 maint: multiple names: authors list (link)
  10. Ritchie, Dennis (April 1993). "The development of the C language" (PDF). ACM SIGPLAN Notices. 28 (3): 201–208. doi:10.1145/155360.155580.
  11. "TIOBE Index". TIOBE. Retrieved 2022-06-03.
  12. Stroustrup, Bjarne (1995). The C++ Programming Language. Addison-Wesley.
  13. 1 2 "C++ Applications". www.stroustrup.com. Retrieved 2022-06-03.
  14. "artima - The Making of Python". www.artima.com. Retrieved 2022-06-03.
  15. "General Python FAQ — Python 3.10.4 documentation". docs.python.org. Retrieved 2022-06-03.
  16. "Applications for Python". Python.org. Retrieved 2022-06-03.
  17. "Programming Languages Popularity in 12,086 Research Papers – Quantifying Health" . Retrieved 2022-06-03.
  18. Pedregosa, Fabian (2011). "Scikit-learn: Machine learning in Python" (PDF). The Journal of Machine Learning Research. 12: 2825–2830. arXiv: 1201.0490 . Bibcode:2011JMLR...12.2825P.

See also