Content deleted Content added
m Reverted edits by 102.89.32.178 (talk) to last revision by Ctrlwiki: nonconstructive edits |
Stevebroshar (talk | contribs) →Execution modes: interpreters can be either hardware or software |
||
(92 intermediate revisions by 62 users not shown) | |||
Line 1:
{{Short description|Programming language
{{Use dmy dates|date=May 2023}}
{{Use American English|date=January 2019}}
In [[computer science]], a '''high-level programming language''' is a [[programming language]] with strong [[Abstraction (computer science)|abstraction]] from the details of the [[computer]]. In contrast to [[low-level programming language]]s, it may use [[natural language]] ''elements'', be easier to use, or may automate (or even hide entirely) significant areas of computing systems (e.g. [[memory management]]), making the process of developing a program simpler and more understandable than when using a lower-level language. The amount of abstraction provided defines how "high-level" a programming language is.<ref>[https://web.archive.org/web/20070826224349/http://www.ittc.ku.edu/hybridthreads/glossary/index.php HThreads - RD Glossary<!-- Bot generated title -->]</ref>▼
▲
==History==
In the 1960s, a high-level programming language using a [[compiler]] was commonly called an ''[[autocode]]''.<ref name=kleith>{{cite book|last=London|first=Keith|year=1968|title=Introduction to Computers|publisher=Faber and Faber Limited|___location=24 Russell Square London WC1|isbn=0571085938|page=184|chapter=4, Programming|quote=The 'high' level programming languages are often called autocodes and the processor program, a compiler.}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>
Examples of autocodes are [[COBOL]] and [[Fortran]].<ref name=kleith2>{{cite book|last=London|first=Keith|title=Introduction to Computers|year=1968|publisher=Faber and Faber Limited|___location=24 Russell Square London WC1|isbn=0571085938|page=186|chapter=4, Programming|quote=Two high level programming languages which can be used here as examples to illustrate the structure and purpose of autocodes are COBOL (Common Business Oriented Language) and FORTRAN (Formular Translation).}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>
Line 9 ⟶ 13:
The first high-level programming language designed for computers was [[Plankalkül]], created by [[Konrad Zuse]].<ref>{{ill|Wolfgang Giloi{{!}}Giloi, Wolfgang, K.|de|Wolfgang Giloi}} (1997). "Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language". IEEE Annals of the History of Computing, vol. 19, no. 2, pp. 17–24, April–June, 1997. [http://doi.ieeecomputersociety.org/10.1109/85.586068 (abstract)]</ref> However, it was not implemented in his time, and his original contributions were largely isolated from other developments due to [[World War II]], aside from the language's influence on the "Superplan" language by [[Heinz Rutishauser]] and also to some degree [[ALGOL]]. The first significantly widespread high-level language was [[Fortran]], a machine-independent development of IBM's earlier [[Autocode]] systems. The [[ALGOL]] family, with [[ALGOL 58]] defined in 1958 and [[ALGOL 60]] defined in 1960 by committees of European and American computer scientists, introduced [[recursion]] as well as [[nested functions]] under [[lexical scope]]. ALGOL 60 was also the first language with a clear distinction between [[call by value|value]] and [[call by name|name-parameter]]s and their corresponding [[Semantics (computer science)|semantics]].<ref>Although it lacked a notion of [[call by reference|reference-parameter]]s, which could be a problem in some situations. Several successors, including [[ALGOL W]], [[ALGOL 68]], [[Simula]], [[Pascal (programming language)|Pascal]], [[Modula]] and [[Ada (programming language)|Ada]] thus included reference-parameters (The related C-language family instead allowed addresses as <code>value</code>-parameters).</ref> ALGOL also introduced several [[structured programming]] concepts, such as the <code>while-do</code> and <code>if-then-else</code> constructs and its [[Syntax (programming languages)|syntax]] was the first to be described in formal notation – ''[[Backus–Naur form]]'' (BNF). During roughly the same period, [[COBOL]] introduced [[Record (computer science)|record]]s (also called structs) and [[Lisp (programming language)|Lisp]] introduced a fully general [[lambda abstraction]] in a programming language for the first time.
A high-level language provides features that standardize common tasks, permit rich debugging, and maintain architectural agnosticism. On the other hand, a low-level language requires the coder to work at a lower-level of abstraction which is generally more challenging, but does allow for [[program optimization |optimizations]] that are not possible with a high-level language. This ''abstraction penalty'' for using a high-level language instead of a low-level language is real, but in practice, low-level optimizations rarely improve performance at the [[user experience]] level.<ref>{{cite journal
▲"High-level language" refers to the higher level of abstraction from [[machine language]]. Rather than dealing with registers, memory addresses, and call stacks, high-level languages deal with variables, arrays, [[object (computer science)|object]]s, complex arithmetic or boolean expressions, subroutines and functions, loops, [[Thread (computer science)|thread]]s, locks, and other abstract computer science concepts, with a focus on [[usability]] over optimal program efficiency. Unlike low-level [[assembly language]]s, high-level languages have few, if any, language elements that translate directly into a machine's native [[opcode]]s. Other features, such as string handling routines, object-oriented language features, and file input/output, may also be present. One thing to note about high-level programming languages is that these languages allow the programmer to be detached and separated from the machine. That is, unlike low-level languages like assembly or machine language, high-level programming can amplify the programmer's instructions and trigger a lot of data movements in the background without their knowledge. The responsibility and power of executing instructions have been handed over to the machine from the programmer.
▲== Abstraction penalty ==
|author=Surana P
|title=Meta-Compilation of Language Abstractions.
Line 23 ⟶ 24:
|archive-date=2015-02-17
}}</ref><ref>{{cite web
| first = Argyn
| last = Kuketayev
| website = Application Development Trends
| title = The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java.
| url = http://www.adtmag.com/joop/article.aspx?id=4597
Line 40 ⟶ 43:
| pages = 367
| publisher = Springer
}}</ref>
{{Cite journal
|author1=Manuel Carro |author2=José F. Morales |author3=Henk L. Muller |author4=G. Puebla |author5=M. Hermenegildo | journal = Proceedings of the 2006 International Conference on Compilers, Architecture and Synthesis for Embedded Systems
Line 49 ⟶ 50:
| year = 2006
| publisher = ACM
}}</ref> Since a high-level language is designed independent of a specific computing [[Computer architecture |system architecture]], a program written in such a language can run on any computing context with a compatible compiler or interpreter.
== Relative meaning ==
{{
The terms ''high-level'' and ''low-level'' are inherently relative, and languages can be compared as higher or lower level to each other. Sometimes the [[C (programming language)|C language]] is considered as either high-level or low-level depending on one's perspective. Regardless, most agree that C is higher level than assembly and lower level than most other languages.
C supports constructs such as expression evaluation, [[parameter |parameterized]] and recursive functions, data types and structures which are generally not supported in assembly or directly by a processor but C does provide lower-level features such as auto-increment and pointer math. But C lacks many higher-level abstracts common in other languages such as [[garbage collection]] and a built-in string type. In the introduction of [[The C Programming Language]] (second edition) by [[Brian Kernighan]] and [[Dennis Ritchie]], C is described as "not a very high level" language.<ref>{{cite book|last1=Kernighan|first1=Brian W.|last2=Ritchie|first2=Dennis M.|date=1988|title=The C Programming Language: 2nd Edition|url=https://books.google.com/books?id=FGkPBQAAQBAJ|url-status=bot: unknown|publisher=Prentice Hall|isbn=9780131103627|archive-url=https://web.archive.org/web/20221025180501/https://books.google.com/books?id=FGkPBQAAQBAJ|archive-date=25 October 2022|access-date=25 October 2022}}</ref>
Assembly language is higher-level than machine code, but still highly tied to the processor hardware. But, assembly may provide some higher-level features such as [[Macro (computer science)|macro]]s, relatively limited expressions, constants, variables, procedures, and [[data structure]]s.
== Execution modes ==
{{
The source code of a high-level language may be processed in various ways, including
; Source-to-source translated or transcompiled: Code written in a language may be translated into terms of a lower-level language for which native code compilers are already common. [[JavaScript]] and the language [[C (programming language)|C]] are common targets for such translators. See [[CoffeeScript]], [[Chicken (Scheme implementation)|Chicken]] Scheme, and [[Eiffel (programming language)|Eiffel]] as examples. Specifically, the generated C and C++ code can be seen (as generated from the Eiffel language when using the [[EiffelStudio]] IDE) in the EIFGENs directory of any compiled Eiffel project. In Eiffel, the ''translated'' process is referred to as transcompiling or transcompiled, and the Eiffel compiler as a transcompiler or [[source-to-source compiler]].▼
; Compiled: A [[compiler]] transforms source code into other code. Sometimes, and traditionally, a compiler generates native machine code that is interpreted by the processor. But, today many execution models involve generating an [[intermediate representation]] (i.e. [[bytecode]]) that is later interpreted in software or converted to native code at runtime (via [[JIT compilation]]).
Note that languages are not strictly ''interpreted'' languages or ''compiled'' languages. Rather, implementations of language behavior use interpreting or compiling. For example, [[ALGOL 60]] and [[Fortran]] have both been interpreted (even though they were more typically compiled). Similarly, Java shows the difficulty of trying to apply these labels to languages, rather than to implementations; Java is compiled to bytecode which is then executed by either interpreting (in a [[Java virtual machine]] (JVM)) or compiling (typically with a just-in-time compiler such as [[HotSpot (virtual machine)|HotSpot]], again in a JVM). Moreover, compiling, transcompiling, and interpreting is not strictly limited to only a description of the compiler artifact (binary executable or IL assembly).▼
▲;
; Software interpreted: A [[interpreter (software)|software interpreter]] performs the actions encoded in source code without generating native machine code.
Alternatively, it is possible for a high-level language to be directly implemented by a computer – the computer directly executes the HLL code. This is known as a ''[[high-level language computer architecture]]'' – the [[computer architecture]] itself is designed to be targeted by a specific high-level language. The [[Burroughs large systems]] were target machines for [[ALGOL 60]], for example.<ref>{{Citation|last=Chu|first=Yaohan|chapter=Concepts of High-Level Language Computer Architecture|date=1975|pages=1–14|publisher=Elsevier|isbn=9780121741501|doi=10.1016/b978-0-12-174150-1.50007-0|title=High-Level Language Computer Architecture}}</ref>▼
▲
▲Note that
== See also ==
{{Portal|Computer programming}}
* [[Abstraction (computer science)]]▼
* [[Generational list of programming languages]]
* [[Categorical list of programming languages]]▼
* [[Very high-level programming language]]s▼
* [[Low-level programming language]]s
* [[High-level assembler]]
▲* [[Abstraction (computer science)]]
▲* [[Very high-level programming language]]s
▲* [[Categorical list of programming languages]]
{{Clear}}
== References ==
Line 94 ⟶ 95:
* http://c2.com/cgi/wiki?HighLevelLanguage - The [[WikiWikiWeb]]'s article on high-level programming languages
{{Types of programming languages}}
{{Authority control}}
|