Content deleted Content added
→band: new section Tags: Reverted Mobile edit Mobile web edit |
m irrelevant to topic. Undid revision 1306363655 by 2409:40E7:65:A69B:8000:0:0:0 (talk) |
||
(95 intermediate revisions by 42 users not shown) | |||
Line 1:
{{Skip to talk}}
{{Talk header}}
{{ArticleHistory
|action1=FAC
Line 28 ⟶ 27:
|currentstatus=DGA
}}
{{WikiProject banner shell|class=C|vital=yes|1=
{{WikiProject Computing |importance=High}}
{{WikiProject
}}
{{summary in|Language}}
{{merged-from|Dialect (computing)|7 February 2018}}
Line 72 ⟶ 71:
there are also too many competing ideas, such as the definition of a programming language that just confuse things. My view is that Wikipedia should focus on commonly accepted facts and theories rather than pet issues insered by Academics to try and give exposure to very minority theories. it is a to help understanding, not a weapon in obscure Academic debates and personal obsessions. [[Special:Contributions/60.241.211.27|60.241.211.27]] ([[User talk:60.241.211.27|talk]]) 12:07, 28 July 2021 (UTC)
:What a pedantic message. [[User:Kwikygoat|Kwiky]] ([[User talk:Kwikygoat|talk]]) 19:04, 19 September 2023 (UTC)
:I suspect we disagree on the answer, but I do agree that the definition of programming language seems to be totally relative throughout the entire article. [[User:Theaceofthespade|Theaceofthespade]] ([[User talk:Theaceofthespade|talk]]) 23:28, 28 February 2025 (UTC)
== Defining the term "programming language" properly ==
Line 99 ⟶ 101:
It would be helpful if there were a small set of "standard" tasks and all pages on programming languages showed how to do them all (e.g., compute prime numbers, compute the squares of the numbers 1 to 10, print "Hello, world!"). Where should I suggest this? [[User:LachlanA|LachlanA]] ([[User talk:LachlanA|talk]]) 01:00, 21 January 2023 (UTC)
== Proprietary section needs better citations ==
Oracle asserting something shouldn't be taken a evidence, needs better sources. [[User:FallingPineapple|FallingPineapple]] ([[User talk:FallingPineapple|talk]]) 02:05, 7 June 2023 (UTC)
== Needs article-wide cleanup? ==
I think this article needs a thorough cleanup.
* The entire article is needlessly verbose.
* A lot of the content is irrelevant or covered in other articles.
* Lots of the information is unsourced and could be original research.
I feel like the article as a whole fails to provide accurate and useful information about programming languages.
I tried to improve the introduction but I'm sure my improvements still have issues...
Could a cleanup tag/tags be added? I'm not an experienced Wikipedian so I'm not sure what needs to be done. [[User:Squoop|Squoop]] ([[User talk:Squoop|talk]]) 01:19, 28 October 2023 (UTC)
:Your concerns are valid ... but not actionable. Need more detail on what you think is needlessly verbose, irrelevant and unsourced. [[User:Stevebroshar|Stevebroshar]] ([[User talk:Stevebroshar|talk]]) 12:54, 10 May 2024 (UTC)
== Source code example's usage of method ==
The source code example https://en.wikipedia.org/wiki/Programming_language#/media/File:C_Hello_World_Program.png mentions that ''sayHello'' is a function and in between brackets 'method'. This is not a method, a method is associated with an object/class, C has no classes. [[Special:Contributions/2A02:8389:2200:9F90:B5B9:15B4:D8AA:5901|2A02:8389:2200:9F90:B5B9:15B4:D8AA:5901]] ([[User talk:2A02:8389:2200:9F90:B5B9:15B4:D8AA:5901|talk]]) 09:54, 5 December 2023 (UTC)
==Edit request==
{{Edit COI|answered=yes}}
*Change the "Taxonomies" section title to "Classification"
*Replace the contents of the "Classification" section, after the further reading link, with:
{{collapse top}}
Programming languages are often placed into four main categories: [[Imperative programming|imperative]], [[functional programming|functional]], [[logic programming|logic]], and [[object oriented]].{{sfn|Sebesta|2012|p=21}}
*Imperative languages are designed to implement an algorithm in a specified order; they include [[visual programming languages]] such as [[.NET]] for generating [[graphical user interface]]s. [[Scripting languages]], which are partly or fully [[Interpreter (computing)|interpreted]] rather than [[compiler|compiled]], are sometimes considered a separate category but meet the definition of imperative languages.{{sfn|Sebesta|2012|pp=21–22}}
*Functional programming languages work by successively applying functions to the given parameters. Although appreciated by many researchers for their simplicity and elegance, problems with efficiency have prevented them from being widely adopted.{{sfn|Sebesta|2012|p=12}}
*Logic languages are designed so that the software, rather than the programmer, decides what order in which the instructions are executed.{{sfn|Sebesta|2012|p=22}}
*Object-oriented programming—whose characteristic features are [[data abstraction]], [[Inheritance (object-oriented programming)|inheritance]], and [[dynamic dispatch]]—is supported by most popular imperative languages and some functional languages.{{sfn|Sebesta|2012|pp=21–22}}
Although [[markup languages]] are not programming languages, some have extensions that support limited programming. Additionally, there are special-purpose languages that are not easily compared to other programming languages.{{sfn|Sebesta|2012|pp=22–23}}
{{talk ref}}
{{collapse bottom}}
*Add to further reading the following source:
{{cite book |last1=Sebesta |first1=Robert W. |title=Concepts of Programming Languages |date=2012 |publisher=Addison-Wesley |isbn=978-0-13-139531-2 |edition=10 |language=en}}
*Reason: a lot of the current text of that section is unsourced, original research, or fails verification. [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 15:17, 13 January 2024 (UTC)
:@[[User:Buidhe paid|Buidhe paid]] @[[User:Buidhe|Buidhe]] I'm personally fine with the changes above, I think going ahead and making these changes are fine, however, I'd like you to comply with [[WP:PAID|PAID]] and disclose your employer/client/affiliationn on your user page for future reference :) [[User:Sohom Datta|Sohom]] ([[User talk:Sohom Datta|talk]]) 16:18, 13 January 2024 (UTC)
::{{u|Sohom}} Thanks, now done. [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 02:29, 14 January 2024 (UTC)
:{{Respond|yellowclock|Already done}} <!-- Template:ECOI --> [[User:Shadow311|Shadow311]] ([[User talk:Shadow311|talk]]) 16:03, 18 January 2024 (UTC)
Please add the following text at the end of the "elements" section:
{{collapse top}}
===Concurrency===
{{see also|Concurrent computing}}
In computing, multiple instructions can be executed simultaneously. Many programming languages support instruction-level and subprogram-level concurrency.{{sfn|Sebesta|2012|p=576}} By the twenty-first century, additional processing power on computers was increasingly coming from the use of additional processors, which requires programmers to design software that makes use of multiple processors simultaneously to achieve improved performance.{{sfn|Sebesta|2012|p=579}} [[Interpreted language]]s such as [[Python (programming language)|Python]] and [[Ruby (programming language)|Ruby]] do not support the concurrent use of multiple processors.{{sfn|Sebesta|2012|p=585}} Other programming languages do support managing data shared between different threads by controlling the order of execution of key instructions via the use of [[Semaphore (programming)|semaphore]]s, controlling access to shared data via [[monitor (synchronization)|monitor]], or enabling [[message passing]] between threads.{{sfn|Sebesta|2012|pp=585–586}}
{{talk ref}}
{{collapse bottom}}
[[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 17:48, 23 January 2024 (UTC)
:{{Done}} Both. [[User:Sohom Datta|Sohom]] ([[User talk:Sohom Datta|talk]]) 18:06, 23 January 2024 (UTC)
{{edit COI|answered=yes}}
Please add the following text just before the "Concurrency" section:
{{collapse top}}
===Exception handling===
{{main|Exception handling}}
Many programming languages include exception handlers, a section of code triggered by [[runtime error]]s that can deal with them in two main ways:{{sfn|Sebesta|2012|pp=630, 634}}
*Termination: shutting down and handing over control to the [[operating system]]. This option is considered the simplest.
*Resumption: resuming the program near where the exception occurred. This can trigger a repeat of the exception, unless the exception handler is able to modify values to prevent the exception from reoccurring.
Some programming languages support dedicating a block of code to run regardless of whether an exception occurs before the code is reached; this is called finalization.{{sfn|Sebesta|2012|p=635}}
There is a tradeoff between increased ability to handle exceptions and reduced performance.{{sfn|Sebesta|2012|p=631}} For example, even though array index errors are common{{sfn|Sebesta|2012|p=261}} C does not check them for performance reasons.{{sfn|Sebesta|2012|p=631}} Although programmers can write code to catch user-defined exceptions, this can clutter a program. Standard libraries in some languages, such as C, use their return values to indicate an exception.{{sfn|Sebesta|2012|p=632}} Some languages and their compilers have the option of turning on and off error handling capability, either temporarily or permanently.{{sfn|Sebesta|2012|pp=631, 635–636}}
{{talk ref}}
{{collapse bottom}}
Thanks [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 19:27, 23 January 2024 (UTC)
:{{Done}}, [[User:Sohom Datta|Sohom]] ([[User talk:Sohom Datta|talk]]) 08:40, 24 January 2024 (UTC)
==Edit request 2==
{{edit COI|answered=yes}}
Please change the content of the "Type system" section, after the hatnote, to:
{{collapse top}}
A [[data type]] is a set of allowable values and operations that can be performed on these values.{{sfn|Sebesta|2012|p=244}} Each programming language's [[type system]] defines which data types exist, the type of an [[Expression (mathematics)|expression]], and how [[type equivalence]] and [[type compatibility]] function in the language.{{sfn|Sebesta|2012|p=245}}
According to [[type theory]], a language is fully typed if the specification of every operation defines types of data to which the operation is applicable.<ref name="typing">{{cite web|url=http://www.acooke.org/comp-lang.html|author=Andrew Cooke|title=Introduction To Computer Languages|access-date=13 July 2012|url-status=live|archive-url=https://web.archive.org/web/20120815140215/http://www.acooke.org/comp-lang.html|archive-date=15 August 2012}}</ref> In contrast, an untyped language, such as most [[assembly language]]s, allows any operation to be performed on any data, generally sequences of bits of various lengths.<ref name="typing"/> In practice, while few languages are fully typed, most offer a degree of typing.<ref name="typing"/>
Because different types (such as [[integer]]s and [[floating point|floats]]) represent values differently, unexpected results will occur if one type is used when another is expected. [[Type checking]] will flag this error, usually at [[compile time]] (runtime type checking is more costly).{{sfn|Sebesta|2012|pp=15, 408–409}} With [[Strongly-typed programming language|strong typing]], [[type error]]s can always be detected unless variables are explicitly [[type casting|cast]] to a different type. [[Weak typing]] occurs when languages allow implicit casting—for example, to enable operations between variables of different types without the programmer making an explicit type conversion. The more cases in which this [[type coercion]] is allowed, the fewer type errors can be detected.{{sfn|Sebesta|2012|pp=303–304}}
====Commonly supported types====
{{See also|Primitive data type}}
Early programming languages often supported only built-in, numeric types such as the [[integer]] (signed and unsigned) and [[floating point]] (to support operations on [[real number]]s that are not integers). Most programming languages support multiple sizes of floats (often called [[Single-precision floating-point format|float]] and [[Double-precision floating-point format|double]]) and integers depending on the size and precision required by the programmer. Storing an integer in a type that is too small to represent it leads to [[integer overflow]]. The most common way of representing negative numbers with signed types is [[twos complement]], although [[ones complement]] is also used. {{sfn|Sebesta|2012|pp=246–247}} Other common types include [[Boolean data type|boolean]]—which is either true or false—and [[Character (computing) |character]]—traditionally one [[byte]], sufficient to represent all [[ASCII]] characters.{{sfn|Sebesta|2012|p=249}}
[[array (data type)|Arrays]] are a data type whose elements, in many languages, must consist of a single type of fixed length. Other languages define arrays as references to data stored elsewhere and support elements of varying types.{{sfn|Sebesta|2012|p=260}} Depending on the programming language, sequences of multiple characters, called [[string (computing)|strings]], may be supported as arrays of characters or their own [[primitive type]].{{sfn|Sebesta|2012|p=250}} Strings may be of fixed or variable length, which enables greater flexibility at the cost of increased storage space and more complexity.{{sfn|Sebesta|2012|p=254}} Other data types that may be supported include [[list (computing)|lists]],{{sfn|Sebesta|2012|pp=281–282}} [[associative arrays|associative (unordered) arrays]] accessed via keys,{{sfn|Sebesta|2012|pp=272–273}} [[record (computer science)|record]]s in which data is mapped to names in an ordered structure,{{sfn|Sebesta|2012|pp=276–277}} and [[tuple]]s—similar to records but without names for data fields.{{sfn|Sebesta|2012|p=280}} [[Pointer (computer programming)|Pointer]]s store memory addresses, typically referencing locations on the [[Heap (programming)|heap]] where other data is stored.{{sfn|Sebesta|2012|pp=289–290}}
The simplest [[user-defined type]] is an [[Ordinal data type|ordinal type]] whose values can be mapped onto the set of positive integers.{{sfn|Sebesta|2012|p=255}} Since the mid-1980s, most programming languages also support [[abstract data types]], in which the representation of the data and operations are [[information hiding|hidden from the user]], who can only access an [[Interface (computing)|interface]].{{sfn|Sebesta|2012|pp=244–245}} The benefits of [[data abstraction]] can include increased reliability, reduced complexity, less potential for [[name collision]], and allowing the underlying [[data structure]] to be changed without the client needing to alter its code.{{sfn|Sebesta|2012|p=477}}
====Static and dynamic typing====
In [[static typing]], all expressions have their types determined before a program executes, typically at compile-time.<ref name="typing"/> Most widely used, statically typed programming languages require the types of variables to be specified explicitly. In some languages, types are implicit; one form of this is when the compiler can [[type inference|infer]] types based on context. The downside of [[implicit typing]] is the potential for errors to go undetected.{{sfn|Sebesta|2012|p=211}} Complete type inference has traditionally been associated with functional languages such as [[Haskell]] and [[ML (programming language)|ML]].<ref>{{Cite conference |last=Leivant |first=Daniel |date=1983 |title=Polymorphic type inference |conference=ACM SIGACT-SIGPLAN symposium on Principles of programming languages |language=en |___location=Austin, Texas |publisher=ACM Press |pages=88–98 |doi=10.1145/567067.567077 |isbn=978-0-89791-090-3|doi-access=free }}</ref>
With dynamic typing, the type is not attached to the variable but only the value encoded in it. A single variable can be reused for a value of a different type. Although this provides more flexibility to the programmer, it is at the cost of lower reliability and less ability for the programming language to check for errors.{{sfn|Sebesta|2012|pp=212–213}} Some languages allow variables of a [[union type]] to which any type of value can be assigned, in an exception to their usual static typing rules.{{sfn|Sebesta|2012|pp=284–285}}
{{talk ref}}
{{collapse bottom}}
:I'm a bit worried about the whole article becoming a summarization of this book. This is a really good starting point, but I think we should try to work in other material. [[User:Snowmanonahoe|Snowmanonahoe]] ([[User talk:Snowmanonahoe|talk]] '''·''' [[Special:Contributions/Snowmanonahoe|contribs]] '''·''' [[User:Snowmanonahoe/Typos|typos]]) 13:20, 18 April 2024 (UTC)
==Edit request 3==
{{Edit COI|answered=yes}}
Also, please add the following sentence to the end of the "proprietary languages" section: "Open source programming languages are particularly helpful for [[open science]] applications, enhancing the capacity for [[Replication crisis|replication]] and code sharing."<ref>{{cite journal |last1=Abdelaziz |first1=Abdullah I. |last2=Hanson |first2=Kent A. |last3=Gaber |first3=Charles E. |last4=Lee |first4=Todd A. |title=Optimizing large real‐world data analysis with parquet files in R: A step‐by‐step tutorial |journal=Pharmacoepidemiology and Drug Safety |date=2023 |doi=10.1002/pds.5728}}</ref>
{{talk ref}}
Thanks [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 02:23, 25 January 2024 (UTC)
:{{Respond|greencheck2|Done}} <!-- Template:ECOI --> <span style="background-color:#00BFFF; padding:2px; color:white;">[[User:Encoded|Encoded]]</span> <span style="background-color:#FFD700; padding:2px;">[[User talk:Encoded|Talk to me!]]</span> 13:31, 9 February 2024 (UTC)
==Edit request 4==
{{edit COI|p|answered=yes}}
Please:
*Remove the unsourced section titled "Standard library and run-time system". I checked several textbooks on PL, including Sebesta 2012, ''[https://link-springer-com.wikipedialibrary.idm.oclc.org/chapter/10.1007/978-3-031-34144-1_13 Programming Languages: Principles and Paradigms]'', and ''[https://www-cambridge-org.wikipedialibrary.idm.oclc.org/core/books/practical-foundations-for-programming-languages/3D852B5A14F48F85C60B95A0BBCAB7D9/listing?q=standard+library&fts=yes&searchWithinIds=3D852B5A14F48F85C60B95A0BBCAB7D9&aggs%5BproductTypes%5D%5Bfilters%5D=BOOK_PART Practical Foundations for Programming Languages]''. They either don't mention standard libraries at all or barely mention them, without enough content to source a stand-alone section. Instead, I mention standard libraries in the new version of the "Design and implementation" section.
*Replace the current content of the "Design and implementation" section, after the hatnote, with the following ("specification" subsection is unchanged):
{{collapse top}}
One of the most important influences on programming language design has been [[computer architecture]]. [[Imperative languages]], the most commonly used type, were designed to perform well on [[von Neumann architecture]], the most common computer architecture.{{sfn|Sebesta|2012|p=18}} In von Neumann architecture, the [[Computer memory|memory]] stores both data and instructions, while the [[CPU]] that performs instructions on data is separate, and data must be piped back and forth to the CPU. The central elements in these languages are variables, [[Assignment (computer science)|assignment]], and [[iteration]], which is more efficient than [[Recursion (computer science)|recursion]] on these machines.{{sfn|Sebesta|2012|p=19}}
Many programming languages have been designed from scratch, altered to meet new needs, and combined with other languages. Many have eventually fallen into disuse.{{cn}} The birth of programming languages in the 1950s was stimulated by the desire to make a universal programming language suitable for all machines and uses, avoiding the need to write code for different computers.{{sfn|Nofre|Priestley|Alberts|2014|p=55}} By the early 1960s, the idea of a universal language was rejected due to the differing requirements of the variety of purposes for which code was written.{{sfn|Nofre|Priestley|Alberts|2014|p=60}}
===Tradeoffs===
Desirable qualities of programming languages include readability, writability, and reliability.{{sfn|Sebesta|2012|p=8}} These features can reduce the cost of training programmers in a language, the amount of time needed to write and maintain programs in the language, the cost of compiling the code, and increase runtime performance.{{sfn|Sebesta|2012|pp=16–17}}
*Although early programming languages often prioritized efficiency over readability, the latter has grown in importance since the 1970s. Having multiple operations to achieve the same result can be detrimental to readability, as is [[operator overload|overloading operators]], so that the same operator can have multiple meanings.{{sfn|Sebesta|2012|pp=8–9}} Another feature important to readability is [[orthogonality]], limiting the number of constructs that a programmer has to learn.{{sfn|Sebesta|2012|pp=9–10}} A syntax structure that is easily understood and [[reserved word|special word]]s that are immediately obvious also supports readability.{{sfn|Sebesta|2012|pp=12–13}}
*Writability is the ease of use for writing code to solve the desired problem. Along with the same features essential for readability,{{sfn|Sebesta|2012|p=13}} [[abstraction (computer science)|abstraction]]—interfaces that enable hiding details from the client—and [[Expressive power (computer science)|expressivity]]—enabling more concise programs—additionally help the programmer write code.{{sfn|Sebesta|2012|pp=14–15}} The earliest programming languages were tied very closely to the underlying hardware of the computer, but over time support for abstraction has increased, allowing programmers express ideas that are more remote from simple translation into underlying hardware instructions. Because programmers are less tied to the complexity of the computer, their programs can do more computing with less effort from the programmer.<ref>Frederick P. Brooks, Jr.: ''The Mythical Man-Month'', Addison-Wesley, 1982, pp. 93–94</ref> Most programming languages come with a [[standard library]] of commonly used functions.<ref>{{cite web |last1=Busbee |first1=Kenneth Leroy |last2=Braunschweig |first2=Dave |title=Standard Libraries |url=https://press.rebus.community/programmingfundamentals/chapter/standard-libraries/ |website=Programming Fundamentals – A Modular Structured Approach |access-date=27 January 2024 |language=en |date=15 December 2018}}</ref>
*Reliability means that a program performs as specified in a wide range of circumstances.{{sfn|Sebesta|2012|p=15}} [[Type checking]], [[exception handling]], and restricted [[aliasing (computing)|aliasing]] (multiple variable names accessing the same region of memory) all can improve a program's reliability.{{sfn|Sebesta|2012|pp=8, 16}}
Programming language design often involves tradeoffs.{{sfn|Sebesta|2012|pp=18, 23}} For example, features to improve reliability typically come at the cost of performance.{{sfn|Sebesta|2012|p=23}} Increased expressivity due to a large number of operators makes writing code easier but comes at the cost of readability.{{sfn|Sebesta|2012|p=23}}
{{anchor|English-like programming languages}}
[[Natural-language programming]] has been proposed as a way to eliminate the need for a specialized language for programming. However, this goal remains distant and its benefits are open to debate. [[Edsger W. Dijkstra]] took the position that the use of a formal language is essential to prevent the introduction of meaningless constructs.<ref>Dijkstra, Edsger W. [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html On the foolishness of "natural language programming."] {{webarchive|url=https://web.archive.org/web/20080120201526/http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html |date=20 January 2008 }} EWD667.</ref> [[Alan Perlis]] was similarly dismissive of the idea.<ref>{{cite web|last=Perlis|first=Alan|url=http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|title=Epigrams on Programming|work=SIGPLAN Notices Vol. 17, No. 9|date=September 1982|pages=7–13|url-status=live|archive-url=https://web.archive.org/web/19990117034445/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|archive-date=17 January 1999}}</ref>
===Specification===
{{Main|Programming language specification}}
The specification of a programming language is an artifact that the language [[programmer|users]] and the [[programming language implementation|implementors]] can use to agree upon whether a piece of [[source code]] is a valid [[computer program|program]] in that language, and if so what its behavior shall be.
A programming language specification can take several forms, including the following:
* An explicit definition of the syntax, static semantics, and execution semantics of the language. While syntax is commonly specified using a formal grammar, semantic definitions may be written in [[natural language]] (e.g., as in the [[C (programming language)|C language]]), or a [[formal semantics of programming languages|formal semantics]] (e.g., as in [[Standard ML]]<ref>{{cite book|last=Milner|first=R.|author-link=Robin Milner |author2=[[Mads Tofte|M. Tofte]] |author3=[[Robert Harper (computer scientist)|R. Harper]] |author4=D. MacQueen |title=The Definition of Standard ML (Revised)|publisher=MIT Press|year=1997|isbn=978-0-262-63181-5}}</ref> and [[Scheme (programming language)|Scheme]]<ref>{{cite web|first=Richard|last=Kelsey|author2=William Clinger|author3=Jonathan Rees|title=Section 7.2 Formal semantics|work=Revised<sup>5</sup> Report on the Algorithmic Language Scheme|url=http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|date=February 1998|url-status=live|archive-url=https://web.archive.org/web/20060706081110/http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.2|archive-date=6 July 2006}}</ref> specifications).
* A description of the behavior of a [[compiler|translator]] for the language (e.g., the [[C++]] and [[Fortran]] specifications). The syntax and semantics of the language have to be inferred from this description, which may be written in natural or formal language.
* A [[reference implementation|''reference'' or ''model'' implementation]], sometimes [[Meta-circular evaluator|written in the language being specified]] (e.g., [[Prolog]] or [[REXX|ANSI REXX]]<ref>[[American National Standards Institute|ANSI]] – Programming Language Rexx, X3-274.1996</ref>). The syntax and semantics of the language are explicit in the behavior of the reference implementation.
===Implementation===
{{Main|Programming language implementation}}
An implementation of a programming language is the conversion of a program into [[machine code]] that can be executed by the hardware. The machine code then can be executed with the help of the [[operating system]].{{sfn|Sebesta|2012|pp=23–24}} The most common form of interpretation in [[Software release life cycle|production code]] is by a [[compiler]], which translates the source code via an intermediate-level language into machine code, known as an [[executable]]. Once the program is compiled, it will run more quickly than with other implementation methods.{{sfn|Sebesta|2012|pp=25–27}} Some compilers are able to provide further [[optimization]] to reduce memory or computation usage when the executable runs, but increasing compilation time.{{sfn|Sebesta|2012|p=27}}
Another implementation method is to run the program with an [[interpreter]], which translates each line of software into machine code just before it executes. Although it can make debugging easier, the downside of interpretation is that it runs 10 to 100 times slower than a compiled executable.{{sfn|Sebesta|2012|p=28}} Hybrid interpretation methods provide some of the benefits of compilation and some of the benefits of interpretation via partial compilation. One form this takes is [[just-in-time compilation]], in which the software is compiled ahead of time into an intermediate language, and then into machine code immediately before execution.{{sfn|Sebesta|2012|pp=29–30}}
{{talk ref}}
{{collapse bottom}}
Please add the following source to the "further reading" section:
*{{cite journal |last1=Nofre |first1=David |last2=Priestley |first2=Mark |last3=Alberts |first3=Gerard |title=When Technology Became Language: The Origins of the Linguistic Conception of Computer Programming, 1950–1960 |journal=Technology and Culture |date=2014 |volume=55 |issue=1 |pages=40–75 |url=https://www.jstor.org/stable/24468397 |issn=0040-165X}}
Thank you [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 04:37, 27 January 2024 (UTC)
:{{Respond|question|Question:}} <!-- Template:ECOI -->This is a big lift. Can you show the before and after text, or explain why the changes are being made? [[User:STEMinfo|<span style="color: red;">STEM</span><span style="color: green;">info</span>]] ([[User talk:STEMinfo|talk]]) 05:12, 5 April 2024 (UTC)
::{{u|STEMinfo}} the sections this edit is replacing are currently in the article. They have been completely rewritten in my version with very little of the original text/sourcing remaining.
::#You can see that the "Standard library" is currently unsourced. As I explain above I was able to confirm that a section on this topic was UNDUE.
::#The current "design and implementation" section is partly cited but many of the sources are not ideal—such as lecture notes, which may not be considered RS, and a book from 1982, which is certainly outdated. Large parts are entirely unsourced
::#My version of the draft removes content that is poorly or not sourced and replaces it with a new version that is supported by reliable sources and does a better job balancing the coverage of different topics in overviews of the subject.
::Does this answer your question? [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 06:53, 5 April 2024 (UTC)
:::Thanks for the info. I'll have to take a closer look. [[User:STEMinfo|<span style="color: red;">STEM</span><span style="color: green;">info</span>]] ([[User talk:STEMinfo|talk]]) 17:44, 5 April 2024 (UTC)
::::{{ping|Buidhe paid}} I replaced the Implementation section, and as you pointed out, the Specifications section is unchanged. I've read up about the standard library, and I'm not seeing how it helps readers to remove the section. It's clearly an element of every programming language, which you can tell just by doing a simple phrase search with quotes for "standard library". I'm reluctant to remove it. Feel free to discuss further. I'm still reviewing your opening text and the tradeoffs section. [[User:STEMinfo|<span style="color: red;">STEM</span><span style="color: green;">info</span>]] ([[User talk:STEMinfo|talk]]) 20:49, 12 April 2024 (UTC)
:::::{{ping|Buidhe paid}} I'm not convinced that your version is enough of an improvement to remove the information about natural languages and the reasons for having diverse programming languages, unsourced or not. You also removed the segue to the specification and implementation sections, and accidentally introduced a typo that changes the meaning.
{{Textdiff|[[Edsger W. Dijkstra]] took the position that the use of a formal language is essential to prevent the introduction of meaningless constructs, and dismissed [[natural-language programming]] as "foolish".<ref>Dijkstra, Edsger W. [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html On the foolishness of "natural language programming."] {{webarchive|url=https://web.archive.org/web/20080120201526/http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html |date=20 January 2008 }} EWD667.</ref> [[Alan Perlis]] was similarly dismissive of the idea.<ref>{{cite web|last=Perlis|first=Alan|url=http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|title=Epigrams on Programming|work=SIGPLAN Notices Vol. 17, No. 9|date=September 1982|pages=7–13|url-status=live|archive-url=https://web.archive.org/web/19990117034445/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|archive-date=17 January 1999}}</ref>|[[Edsger W. Dijkstra]] took the position that the use of a formal language is essential to prevent the introduction of meaningless constructs.<ref>Dijkstra, Edsger W. [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html On the foolishness of "natural language programming."] {{webarchive|url=https://web.archive.org/web/20080120201526/http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD667.html |date=20 January 2008 }} EWD667.</ref> [[Alan Perlis]] was similarly dismissive of the idea.<ref>{{cite web|last=Perlis|first=Alan|url=http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|title=Epigrams on Programming|work=SIGPLAN Notices Vol. 17, No. 9|date=September 1982|pages=7–13|url-status=live|archive-url=https://web.archive.org/web/19990117034445/http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html|archive-date=17 January 1999}}</ref> }}
:::::I'm going to leave this open but I think you can propose changes while also preserving more of the existing content. [[Special:Contributions/68.5.3.227|68.5.3.227]] ([[User talk:68.5.3.227|talk]]) 22:02, 12 April 2024 (UTC)
:::::Agreed. Marked partially answered. [[User:STEMinfo|<span style="color: red;">STEM</span><span style="color: green;">info</span>]] ([[User talk:STEMinfo|talk]]) 22:20, 12 April 2024 (UTC)
The issue with UNDUE hasn't been resolved, because due weight is based on coverage in reliable sources about "programming languages" in general. Many languages do have a standard library, but that fact by itself doesn't mean that it's DUE to cover them extensively in this high-level overview. "Natural language programming" never took off the ground, and the content about it is also UNDUE. ([[Wikipedia_talk:Featured_article_candidates#How_to_assess_comprehensiveness_of_wide-scope_articles|relevant discussion]]) [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 02:20, 13 April 2024 (UTC)
:If every programming language has a standard library, why is it bad to have a standard library section? [[User:STEMinfo|<span style="color: red;">STEM</span><span style="color: green;">info</span>]] ([[User talk:STEMinfo|talk]]) 01:22, 14 April 2024 (UTC)
{{reflist-talk}}
==Edit request 5==
{{edit COI|answered=y}}
Please change the content of the article lead (beginning below "use dmy dates" template) to:
{{collapse top}}
[[File:C Hello World Program.png|thumb|right|upright=1.3|The [[source code]] for a computer program in [[C (programming language)|C]]. The gray lines are [[comment (computer programming)|comments]] that explain the program to humans. When [[compiled]] and [[Execution (computing)|run]], it will give the output "[["Hello, World!" program|Hello, world!]]".]]
A '''programming language''' is a system of notation for writing [[computer program]]s.<ref name="Aaby 2004">{{cite book |last=Aaby |first=Anthony |url=http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |title=Introduction to Programming Languages |year=2004 |access-date=29 September 2012 |archive-url=https://web.archive.org/web/20121108043216/http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm |archive-date=8 November 2012 |url-status=dead}}</ref>
Programming languages are described in terms of their [[Syntax (programming languages)|syntax]] (form) and [[semantics (computer science)|semantics]] (meaning), usually defined by a [[formal language]]. Most languages have a [[type system]] consisting of different [[data types]] (such as [[integers]] and [[string (computing)|strings]]) and catch [[type error]]s where one type is given where another is expected. Many support [[user-defined type]]s including [[abstract data types]], often used for [[object-oriented programming]]. [[Programming language implementation|Implementation]] in the form of a [[compiler]] or [[Interpreter (computing)|interpreter]] allows programs to be translated into [[machine code]] and [[Execution (computing)|executed]].
[[Computer architecture]] has strongly influenced the design of programming languages, with the most common type ([[imperative languages]]—which implement operations in a specified order) developed to perform well on the popular [[von Neumann architecture]]. While early programming languages were closely tied to the [[Computer hardware|hardware]], over time, they have developed more [[abstraction (computer science)|abstraction]] to hide implementation details for greater simplicity.
Thousands of programming languages—often classified as imperative, [[functional programming|functional]], [[logic programming|logic]], or [[object-oriented programming|object-oriented]]—have been developed for a wide variety of uses. Many aspects of programming language design involve tradeoffs—for example, [[exception handling]] reduces errors at a performance cost—such that efforts to develop a universal programming language have failed. [[Programming language theory]] is the subfield of [[computer science]] that studies the design, implementation, analysis, characterization, and classification of programming languages.
{{talk ref}}
{{collapse bottom}}
Thanks [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 08:57, 27 January 2024 (UTC)
:{{Done}}. Thanks for improving the lead. ― <kbd style="font-size:85%">[[User:Mir Novov|<b style="color:#270;rotate:-2deg;display:inline-block">novov</b>]] [[User talk:Mir Novov|<span style="color:#790">(t</span>]] [[Special:Contributions/Mir Novov|<span style="color:#790">c)</span>]]</kbd> 05:01, 5 March 2024 (UTC)
==Edit request 6==
{{Edit COI|answered=yes}}
Please replace the content of the "History" section, after the hatnote, with:
{{collapse top}}
===Early developments===
The first programmable computers were invented at the end of the 1940s, and with them, the first programming languages.{{sfn|Gabbrielli|Martini|2023|p=519}} The earliest computers were programmed in [[first-generation programming language]]s (1GLs), [[machine language]] (simple instructions that could be directly executed by the processor). This code was very difficult to debug and was not [[portability (computing)|portable]] between different computer systems.{{sfn|Gabbrielli|Martini|2023|pp=520–521}} In order to improve the ease of programming, [[assembly languages]] (or [[second-generation programming language]]s—2GLs) were invented, diverging from the machine language to make programs easier to understand for humans, although they did not increase portability.{{sfn|Gabbrielli|Martini|2023|p=521}}
Initially, hardware resources were scare and expensive, while [[human resources]] were cheaper. Therefore, cumbersome languages that were time-consuming to use, but were closer to the hardware for higher efficiency were favored.{{sfn|Gabbrielli|Martini|2023|p=522}} The introduction of [[high-level programming language]]s ([[third-generation programming language]]s—3GLs)—revolutionized programming. These languages [[abstraction (computing)|abstracted]] away the details of the hardware, instead being designed to express algorithms that could be understood more easily by humans. For example, arithmetic expressions could now be written in symbolic notation and later translated into machine code that the hardware could execute.{{sfn|Gabbrielli|Martini|2023|p=521}} In 1957, [[Fortran]] (FORmula TRANslation) was invented. Often considered the first [[compiler|compiled]] high-level programming language,{{sfn|Gabbrielli|Martini|2023|p=521}}{{sfn|Sebesta|2012|p=42}} Fortran has remained in use into the twenty-first century.{{sfn|Gabbrielli|Martini|2023|p=524}}
===1960s and 1970s===
[[File:IBM Electronic Data Processing Machine - GPN-2000-001881.jpg|thumb|Two people using an [[IBM 704]] [[mainframe]]—the first hardware to support [[floating-point arithmetic]]—in 1957. [[Fortran]] was designed for this machine.{{sfn|Sebesta|2012|pp=42–44}}{{sfn|Gabbrielli|Martini|2023|p=524}}]]
Around 1960, the first [[mainframes]]—general purpose computers—were developed, although they could only be operated by professionals and the cost was extreme. The data and instructions were input by [[punch cards]], meaning that no input could be added while the program was running. The languages developed at this time therefore are designed for minimal interaction.{{sfn|Gabbrielli|Martini|2023|pp=523–524}} After the invention of the [[microprocessor]], computers in the 1970s became dramatically cheaper.{{sfn|Gabbrielli|Martini|2023|p=527}} New computers also allowed more user interaction, which was supported by newer programming languages.{{sfn|Gabbrielli|Martini|2023|p=528}}
[[Lisp (programming language)|Lisp]], implemented in 1958, was the first [[functional programming]] language. Unlike Fortran, it supports [[recursion]] and [[conditional expression]]s,{{sfn|Sebesta|2012|pp=47–48}} and it also introduced [[dynamic memory management]] on a [[heap (computer science)|heap]] and automatic [[Garbage collection (computer science)|garbage collection]].{{sfn|Gabbrielli|Martini|2023|p=526}} For the next decades, Lisp dominated [[artificial intelligence]] applications.{{sfn|Sebesta|2012|p=50}} In 1978, another functional language, [[ML (programming language)|ML]], introduced [[type inference|inferred types]] and polymorphic [[Parameter (computer programming)|parameter]]s.{{sfn|Gabbrielli|Martini|2023|p=528}}{{sfn|Sebesta|2012|pp=701–703}}
After [[ALGOL]] (ALGOrithmic Language) was released in 1958 and 1960,{{sfn|Gabbrielli|Martini|2023|pp=524–525}} it became the standard in computing literature for describing [[algorithm]]s. Although its commercial success was limited, most popular imperative languages—including [[C (programming language)|C]], [[Pascal (programming language)|Pascal]], [[Ada (programming language)|Ada]], [[C++]], [[Java (programming language)|Java]], and [[C Sharp (programming language)|C#]]—are directly or indirectly descended from ALGOL 60.{{sfn|Sebesta|2012|pp=56–57}}{{sfn|Gabbrielli|Martini|2023|p=524}} Among its innovations adopted by later programming languages included greater portability and the first use of [[context-free grammar|context-free]], [[Backus–Naur form|BNF]] grammar.{{sfn|Gabbrielli|Martini|2023|p=525}} [[Simula]], the first language to support [[object-oriented programming]] (including [[subtypes]], [[dynamic dispatch]], and [[inheritance (computer science)|inheritance]]), also descends from ALGOL and achieved commercial success.{{sfn|Gabbrielli|Martini|2023|pp=526–527}} C, another ALGOL descendant, has sustained popularity into the twenty-first century. C allows access to lower-level machine operations more than other contemporary languages. Its power and efficiency, generated in part with flexible [[Pointer (computer programming)|pointer]] operations, comes at the cost of making it more difficult to write correct code.{{sfn|Gabbrielli|Martini|2023|p=528}}
[[Prolog]], designed in 1972, was the first [[logic programming]] language, communicating with a computer using formal logic notation.{{sfn|Gabbrielli|Martini|2023|p=531}}{{sfn|Sebesta|2012|p=79}} With logic programming, the programmer specifies a desired result and allows the [[interpreter (computer science)|interpreter]] to decide how to achieve it.{{sfn|Gabbrielli|Martini|2023|p=530}}{{sfn|Sebesta|2012|p=79}}
===1980s to present===
[[File:Bangalore India Tech books for sale IMG 5261.jpg|thumb|right|A small selection of programming language textbooks]]
During the 1980s, the invention of the [[personal computer]] transformed the roles for which programming languages were used.{{sfn|Gabbrielli|Martini|2023|pp=532–533}} New languages introduced in the 1980s included C++, a [[superset]] of C that can compile C programs but also supports [[Class (computer programming)|classes]] and [[Inheritance (object-oriented programming)|inheritance]].{{sfn|Gabbrielli|Martini|2023|p=534}} [[Ada (programming language)|Ada]] and other new languages introduced support for [[Concurrency (computer science)|concurrency]].{{sfn|Gabbrielli|Martini|2023|pp=534–535}} The Japanese government invested heavily into the so-called [[Fifth-generation programming language|fifth-generation languages]] that added support for concurrency to logic programming constructs, but these languages were outperformed by other concurrency-supporting languages.{{sfn|Gabbrielli|Martini|2023|p=535}}{{sfn|Sebesta|2012|p=736}}
Due to the rapid growth of the [[Internet]] and the [[World Wide Web]] in the 1990s, new programming languages were introduced to support [[Web pages]] and [[Computer network |networking]].{{sfn|Gabbrielli|Martini|2023|p=536}} [[Java (programming language)|Java]], based on C++ and designed for increased portability across systems and security, enjoyed large-scale success because these features are essential for many Internet applications.{{sfn|Gabbrielli|Martini|2023|pp=536–537}}{{sfn|Sebesta|2012|pp=91–92}} Another development was that of [[type system|dynamically typed]] [[scripting languages]]—[[Python (programming language)|Python]], [[JavaScript]], [[PHP]], and [[Ruby (programming language)|Ruby]]—designed to quickly produce small programs that coordinate existing [[Application software|application]]s. Due to their integration with [[HTML]], they have also been used for building web pages hosted on [[Server (computing)|server]]s.{{sfn|Gabbrielli|Martini|2023|pp=538–539}}{{sfn|Sebesta|2012|pp=97–99}}
During the 2000s, there was a slowdown in the development of new programming languages that achieved widespread popularity.{{sfn|Gabbrielli|Martini|2023|p=542}} One innovation was [[service-oriented programming]], designed to exploit [[distributed systems]] whose components are connected by a network. Services are similar to objects in object-oriented programming, but run on a separate process.{{sfn|Gabbrielli|Martini|2023|pp=474–475, 477, 542}} [[C Sharp (programming language)|C#]] and [[F Sharp (programming language)|F#]] cross-pollinated ideas between imperative and functional programming.{{sfn|Gabbrielli|Martini|2023|pp=542–543}} After 2010, several new languages—[[Rust (programming language)|Rust]], [[Go (programming language)|Go]], and [[Swift (programming language)|Swift]]—competed for the performance-critical software for which C had historically been used.{{sfn|Gabbrielli|Martini|2023|p=544}}
{{talk ref}}
{{collapse bottom}}
Also, add the following source to the "further reading" section:
*{{cite book |last1=Gabbrielli |first1=Maurizio |last2=Martini |first2=Simone |title=Programming Languages: Principles and Paradigms |date=2023 |publisher=Springer |isbn=978-3-031-34144-1 |language=en|edition=2nd}}
Reasons: add references, improve summary style, remove unsourced text, fix some MOS:CURRENT issues [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 20:08, 28 January 2024 (UTC)
*{{done}}, thank you Cinematic Poetry [[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 15:06, 6 February 2024 (UTC)
==Wiki Education assignment: IFS213-Hacking and Open Source Culture==
{{dashboard.wikiedu.org assignment | course = Wikipedia:Wiki_Ed/Mesa_Community_College/IFS213-Hacking_and_Open_Source_Culture_(Spring) | assignments = [[User:SirRiles|SirRiles]] | reviewers = [[User:ApolloMartin|ApolloMartin]] | start_date = 2024-01-30 | end_date = 2024-05-10 }}
<span class="wikied-assignment" style="font-size:85%;">— Assignment last updated by [[User:KAN2035117|KAN2035117]] ([[User talk:KAN2035117|talk]]) 22:51, 3 April 2024 (UTC)</span>
== Wiki99 summary ==
Summary of changes as a result of the Wiki99 project ([https://en.wikipedia.org/w/index.php?title=Programming_language&oldid=1196138139 before], [https://en.wikipedia.org/w/index.php?title=Programming_language&oldid=1238699127 after], [https://en.wikipedia.org/w/index.php?title=Programming_language&diff=1238699127&oldid=1196138139 diff]):
*Rewrite much of the article from reliable sources, fixing some of the unsourced content issues
*Condense history section per [[WP:SUMMARYSTYLE]], as the details are already covered in another article
*Add information about some programming language issues, such as tradeoffs between different desirable qualities that are mutually exclusive
Further possibilities for improvement:
*Rewrite the parts of the article that I did not get to, such as the semantics and syntax sections, according to coverage in reliable sources
*Get the article to good article status
[[User:Buidhe paid|Buidhe paid]] ([[User talk:Buidhe paid|talk]]) 07:13, 5 August 2024 (UTC)
==Wiki Education assignment: IFS213-Hacking and Open Source Culture, Fall 2024==
{{dashboard.wikiedu.org assignment | course = Wikipedia:Wiki_Ed/Mesa_Community_College/IFS213-Hacking_and_Open_Source_Culture,_Fall_2024_(Fall) | assignments = [[User:Pbblombo1!|Pbblombo1!]] | reviewers = [[User:Sagethehero|Sagethehero]] | start_date = 2024-09-03 | end_date = 2024-12-13 }}
<span class="wikied-assignment" style="font-size:85%;">— Assignment last updated by [[User:KAN2035117|KAN2035117]] ([[User talk:KAN2035117|talk]]) 02:34, 30 October 2024 (UTC)</span>
== Definitions Section ==
The "definitions" section isn't really... a definitions section at this point. I suggest this current section should be separated out into two sections: "Formal definitions" and "informal definitions." I'm happy to take it on, but it seemed like a big change so I figured I'd put it here for discussion for input before presuming to rewrite a bunch. I know this is long - but that's so that this could serve as a sort of rough rough draft for feedback in regard to how I think the section should be restructured if the objections aren't too strong - just trying to lay it all out.
'''I suggest this for a few reasons '''(also note that I am not working hard to hide any "bias" here, but would endeavor to steelman any viewpoints I wrote about in the actual article):
'''1) Formal Definitions are important but obscure/nuanced''' The more stringent, formal definitions are, frankly, not super useful outside of theoretical conversations (and I say this as someone who does in fact use those definitions). In computer science, the emphasis of a "programming language" was actually on the fact that it resembled *written language* (vs punch cards). For a long time the goal (and arguably marketing) was around developing programming language technology to the point that it would essentially reach natural speech.
This distinction about input style is still extremely important, especially for contemporary discussions about LLM's, for example. But now that programming languages are abundant and common, most people do not find themselves making this distinction, leading to a sort of "drift" in the meaning of the term as its original meaning becomes *colloquially* irrelevant.
'''2) Trying to cite/support this section is a nightmare right now''' There are many informal definitions scattered throughout this and other sections, but they are not explicitly labeled, nor their merits discussed. Aside from there surely being some high quality definitions out there to cite, this has lead, in my opinion, to citations that attempt to prove the *validity* of a definition rather than cite its usage or source. For example, one citation simply stated "x language is not a programming language" as a way to show that some authors use the term "computer languages for things that aren't considered programming languages" (or specifically give an example of a term it might be used for) - and while this does demonstrate that there are "languages that some authors don't consider programming languages," the author was not asserting that it was a "computer language" or referencing the term (at least not that I could find). To demonstrate why this makes no sense, I could just as easily cite that as evidence that people use the term L33TCOD3 to describe things that aren't considered programming languages. And that's not to say the validity of the definitions shouldn't be discussed - merely that it should be done so explicitly.
'''3) Informal definitions fall into tidy but distinct categories''' There are several "batches" of informal definitions, each with their own utility/limitations, and these are worth discussing in contrast to more formal/historical definitions. These are the groups as I see them, and some of the utility they lack vs the more formal definitions - I believe people tend to informally mix/match these (and obviously in a full writeup I would cite sources):
'''Programming Languages Are Compiled'''- many people will use compilation as a standard for whether or not something is a "real" programming language, usually arguing that an interpreter makes it a "scripting" language. This definition does not to do a good job describing virtual-machine based language implementations
'''Programming Languages Must be Turing Complete''' - the reason people think this is obvious, but an important misconception is that this test is meant more generally for instruction/mathematical operation sets and is just able to be applied to programming languages as a result. Like much of Turing's work, it was just so solid that we can continue to use it for things he never even got to see, and programming languages inherently overlap with instructional sets by design - but at the end of the day Turing Completeness just means being able to accomplish the same things as a certain class of machine he made up (not to diminish the concept, it's a really important machine that does a lot).
'''Programming Languages must be imperative/have logic/control structures''' - this perception often arises due to the popularity and power of imperative programming languages - however as the name suggests (and this article even mentions several times), that's formally a *subset* of programming languages. Declarative programming often "feels" less like programming because it is not as concerned with how the task is going to be accomplished, but the original distinction of instructing a machine with language was not concerned with that sort of distinction.
I'm open to any feedback/discussion on this - I'm relatively new to editing here, but this is my field and I am happy to elaborate on or support anything that seems subjective/biased (or just own if its a bias ). I really think this would both represent these viewpoints more clearly, and contextualize why people might have differing ones "in the wild" [[User:Theaceofthespade|Theaceofthespade]] ([[User talk:Theaceofthespade|talk]]) 18:28, 2 March 2025 (UTC)
== A programming language is for writing programs ==
WRT "A programming language is a system of notation for writing computer programs."
Natural language is writing books. ...And a whole lot of other stuff.
Also, it's not just about writing. I could ''generate'' and that's not what I'd call writing. So, maybe 'authoring' is better word.
Thing is, it's not wrong but it's not accurate and it's grandiose. I can use a programming language to write a fragment or code that's never compiled into a program or compiled into a library. A language defines the rules for writing source code. Maybe less sexy, but that's all it is. If you love the 'notation' word, then: a programming language is notational system for encoding the control of a computer. [[User:Stevebroshar|Stevebroshar]] ([[User talk:Stevebroshar|talk]]) 02:12, 9 July 2025 (UTC)
== An implementation of a programming language ==
WRT "An implementation of a programming language is required in order to execute programs"
A compiler/interpreter is not an 'implementation' of a language. A compiler/interpreter understands and conforms to a language. [[User:Stevebroshar|Stevebroshar]] ([[User talk:Stevebroshar|talk]]) 02:18, 9 July 2025 (UTC)
|