Update
This commit is contained in:
parent
46a27e1930
commit
783a41a7cf
18 changed files with 2157 additions and 2060 deletions
|
@ -70,13 +70,11 @@ Besides the standard library there will also exist many third party [libraries](
|
|||
|
||||
## History
|
||||
|
||||
Programmability of the earliest computers was very limited, they were machines with hard-wired functionality and reprogramming them meant physically altering the circuitry -- even much later many of the simpler "computers", such as hand held electronic games, weren't running on any programmable [CPU](cpu.md) or chips of similar nature, but were rather a hand-designed electronic circuit "programmed" by the engineer who manually placed all the resistors and capacitors. However, theoretically, the idea of a programming language had been around for a long time -- in 18th century Basile Bouchon created a system for "programming" looms with what were essentially punch cards, in 19th century [Charles Babbage](babbage.md) designed mechanical computers that in principle very closely resembled today's computers and in the first half of the 20th century the universal [Turing machine](turing_machine.md) provided a theoretical framework for a fully programmable [digital](digital.md) computer even before there were any "real" computers to speak of. It was more of a question of technological [progress](progress.md) to make this a reality.
|
||||
|
||||
Along with cheaper and more abundant [transistors](transistor.md) finally came computers programmable with what we might call a "language" -- the first ones were programmed directly in [machine code](machine_code.md), there weren't even any assemblers and assembly languages around, programming involved tasks such as searching for opcodes in computer manuals, hand-encoding data and getting it all onto punch cards -- in better cases it was possible to use some primitive interface such as a "front panel" to program the computer. These kinds of machine languages that were used back then are now called **first generation languages**.
|
||||
Programmability of the earliest computers was very limited, they were machines with hard-wired functionality and reprogramming them meant physically altering the circuitry or even gears they were made of -- even much later many of the simpler "computers", such as hand held electronic games, weren't running on any programmable [CPU](cpu.md) or chips of similar nature, but were rather a hand-designed electronic circuit "programmed" by the engineer who manually placed all the resistors and capacitors. However, theoretically, the idea of a programming language had been around for a long time -- in 18th century Basile Bouchon created a system for "programming" looms with what were essentially punch cards and in the first half of the 20th century the universal [Turing machine](turing_machine.md) provided a theoretical framework for a fully programmable [digital](digital.md) computer that interpreted a kind of language stored on its memory tape, even before there were any "real" computers to speak of. A big step forward came in 1945 with [John Vom Neumann's](von_neumann.md) description of what's now called the *Von Neumann architecture*, a computer architecture model that relied on relatively simple hardware (the [CPU](cpu.md)) interpreting program stored as numeric instructions in the computer memory (so called *stored program*). One of the first such computers was [EDSAC](edsac.md), made in 1949. This [paradigm](paradigm.md) showed to be crucial for allowing quick and easy modification of programs and thus for more [progress](progress.md) in computing -- this shifted focus from designing individual computers to creating effective, generally usable instructions sets and machine code. Together with more and more abundant [transistors](transistor.md) finally came computers programmable with what we might call a "language" -- the first ones were programmed directly in [machine code](machine_code.md) (the numeric instructions), there weren't even any assemblers and assembly languages around, programming involved tasks such as searching for opcodes in computer manuals, hand-encoding data and getting it all onto punch cards -- in better cases it was possible to use some primitive interface such as a "front panel" to program the computer. These kinds of machine languages that were used back then are now called **first generation languages**.
|
||||
|
||||
The **first higher level programming language** was probably Plankalkul made by Konrad Zuse some time shortly after 1942, though it didn't run on any computer, it was only in stage of specification -- implementation of it would only be made much later, in 1975. It was quite advanced -- it had [functions](function.md), arrays, exceptions and some advanced data structures, though it for example didn't support [recursive](recursion.md) calls. It was important as it planted the seed of an idea of an abstract, higher level, machine independent language.
|
||||
|
||||
The **first [assembly](assembly.md) language** was created by Maurice Wilkes and his team for the [EDSAC](edsac.md) computer released in 1949. It used single letters for instructions. Assembly languages are called **second generation languages**, they further facilitate programming, though still at very low level. These were things we now take for granted: programmers for example became able to type programs as text (instead of numbers), instructions we given human friendlier names and assemblers automated some simple but tedious tasks, but it still remained rather time consuming to write in assembly and programs were still machine specific, non-portable.
|
||||
The **first [assembly](assembly.md) language** was created by Maurice Wilkes and his team for the mentioned [EDSAC](edsac.md) computer released in 1949. It used single letters for instructions. Assembly languages are called **second generation languages**, they further facilitate programming, though still at very low level. These were things we now take for granted: programmers for example became able to type programs as text (instead of numbers), instructions we given human friendlier names and assemblers automated some simple but tedious tasks, but it still remained rather time consuming to write in assembly and programs were still machine specific, non-portable.
|
||||
|
||||
Only the **third generation languages** made the step of adding significant [abstraction](abstraction.md) to achieve a level of comfortable development and portability -- programmers would be able to e.g. write algebraic expressions that would be automatically translated to specific instructions by the language compiler; it would be enough to write the program once and then automatically compile it for different CPUs, without the need to rewrite it. **[Fortran](fortran.md)** is considered to be first such language, made in 1957 by [IBM](ibm.md). Fortran would develop and change throughout the years, it was standardized and added more "features", it became quite popular and is still used even nowadays, it is known for being very fast. In 1958 John McCarthy started to develop **[Lisp](lisp.md)**, a highly elegant, high level language that would spawn many derivatives and remains very popular even nowadays.
|
||||
|
||||
|
@ -119,6 +117,7 @@ Here is a table of notable programming languages in chronological order (keep in
|
|||
| [Fortran](fortran.md) | **kind of** | 1957 | 1.95 (G)| 7.15 (G) | | | 300, proprietary (ISO) | similar to Pascal, compiled, fast, was used by scientists a lot |
|
||||
| [Lisp](lisp.md)(s) | **yes** | 1958 | 3.29 (G)| 18 (G) | 100 (judg. by jmc lisp) | 35 | 40 (r3rs) | elegant, KISS, functional, many variants (Common Lisp, Scheme, ...) |
|
||||
| [Basic](basic.md) | kind of? | 1964 | | | | | | mean both for beginners and professionals, probably efficient |
|
||||
| [Cobol](cobol.md) | prolly not much | 1959 | | | | | | some kind of weird "business oriented" language, looks like shit |
|
||||
| [Forth](forth.md) | **YES** | 1970 | | | 100 (judg. by milliforth)| 77 | 200 (ANS Forth) | [stack](stack.md)-based, elegant, very KISS, interpreted and compiled |
|
||||
| [Pascal](pascal.md) | **kind of** | 1970 | 5.26 (G)| 2.11 (G) | | 59 | 80, proprietary (ISO) | like "educational C", compiled, not so bad actually |
|
||||
| **[C](c.md)** | **kind of** | 1972 | 1.0 | 1.0 | 10K? (judg. by chibicc) | 49 | 160, proprietary (ISO) | compiled, fastest, efficient, established, suckless, low-level, #1 lang.|
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue