编程语言演变历史回目录
伴随着50年计算机编程语言的发展,目前已经有超过
编程语言的历史回目录
在过去的几十年间,大量的程序设计语言被发明、被取代、被修改或组合在一起。尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的。之所以有那么多种不同的编程语言存在的原因是,编写程序的初衷其实也各不相同;新手与老手之间技术的差距非常大,而有许多语言并对新手来说太难学;还有,不同程序之间的运行成本(runtime cost)各不相同。
有许多用于特殊用途的语言,只在特殊情况下使用。例如,PHP专门用来显示网页;Perl更适合文本处理;C语言被广泛用于操作系统和编译器的开发(所谓的系统编程)。
程序设计语言使得计算机程序不再过度地倚赖某种特定的机器或环境。这是因为程序设计语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。最早出现的编程语言之一FORTRAN的一个主要目标,就是实现平台独立。
虽然大多数的语言可以既被编译(compiled)又被解译(interpreted),但大多数只在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于BCPL,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二进制码,虽然在很多时候,中间过渡的代码往往是解译,而不是编译的。
如果所使用的翻译的机制是将所要翻译的程序代码作为一个整体翻译,并之后运行内部格式,那么这个翻译过程就被成为编译。因此,一个编译器是一个将人可阅读的程序文本(叫做源代码)作为输入的数据,然后输出可执行文件(object code)。所输出的可执行文件可以是机器语言,由计算机的中央处理器直接运行,或者是某种模拟器的二进制代码。
如果程序代码是在运行时才即时翻译,那么这种翻译机制就被称作解译。经解译的程序运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。参见解译语言。
特点
每一种程序设计语言可以被看作是一套包含语法、词汇和含义的正式规范。
这些规范通常包括:
数据和数据结构
指令及流程控制
引用机制和重用
设计哲学
大多数被广泛使用或经久不衰的语言,拥有负责标准化的组织,经常会晤来创造及发布该语言的正式定义,并讨论扩展或贯彻现有的定义。
数据和数据结构
现代计算机内部的数据都只以二元方式储存,即开-关模式(on-off)。现实世界中代表信息的各种数据,例如名字、银行账号、度量以及同样低端的二元数据,都经由程序设计语言整理,成为高端的概念。
一个程序中专门处理数据的那个系统被称为程序语言的型态系统(type system);对型态系统的研究和设计被称为型态理论(type theory)。语言可以被分为静态型态系统(statically typed systems),例如C++和Java,和动态型态系统(dynamically typed systems),例如Lisp,JavaScript,Tcl和Prolog。前者可被进一步分为包含宣告型态(manifest type)的语言,即每一个变量和函数的型态都清楚地宣告,或type-inferred语言(例如MUMPS,ML)。
大多数语言还能够在内置的型态基础上组合出复杂的数据结构型态(使用数组,列表,堆栈,文件等等)。面向对象语言(Object Oriented Language,又译作物件导向语言)允许程序员定义新的数据型态,即“对象”或“物件”(objects),以及运行于该对象的函数(functions)和方法(methods)。
除了何时以及如何确定表达式和型态的联系,另外一个重要的问题就是语言到底定义了哪些型态,以及允许哪些型态作为表达式的值。诸如C编程语言之类的低端语言允许程序命名内存位置、内存区域以及编译时的常量;ANSI C甚至允许表达式返回结构值(struct values)。功能性的语言一般允许变量直接使用运行时计算出的值,而不是指出该值可能储存的内存地址。
指令及流程控制
一旦数据被确定,机器必须被告知如何对这些数据进行处理。较简单的指令可以使用关键字或定义好的语法结构来完成。不同的语言利用序列系统来取得或组合这些语句。除此之外,一个语言中的其他指令也可以用来控制处理的过程(例如分支、循环等)。
引用机制和重用
引用的中心思想是必须有一种间接设计储存空间的方法。最常见的方法是通过命名变量。根据不同的语言,进一步的引用可以包括指向其他储存空间的指针。还有一种类似的方法就是命名一组指令。大多数程序设计语言使用宏调用、过程调用或函数调用。使用这些代替的名字能让程序更灵活,并更具重用性。
程序设计语言的历史
二十世纪四十年代当计算机刚刚问世的时候,程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语言来解决问题的人是德国工程师楚泽(Konrad Zuse)。
几十年后,计算机的价格大幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间来得宝贵。
于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也得益于可以重用的程序代码库。
常见的程序设计语言
APL、A+和J
ASP
Ada
汇编语言
AWK
Basic、Fortran
Brainfuck
C、C++
C#
Clipper
COBOL
dBase
PASCAL、Delphi
Forth
FoxPro
F#
IDL
Java
JavaScript
J#
LISP
LOGO
Modula
Perl
PHP
PL/1
Prolog
Python
Ruby
Scheme
Smalltalk
SQL
Tcl/Tk
UML
Visual Basic
Visual FoxPro
Timeline of programming languages回目录
Predecessor(s) Year Name Chief developer, Company
Pre 1950
* ~1837 Analytical Engine order code Charles Babbage and Ada Lovelace
* 1943-5 Plankalkül (concept) Konrad Zuse
* 1943-6 ENIAC coding system John von Neumann, John Mauchly, J. Presper Eckert, Herman Goldstine after Alan Turing
ENIAC coding system 1946 ENIAC Short Code Richard Clippinger, John von Neumann after Alan Turing
ENIAC coding system 1946 Von Neumann and Goldstine graphing system (Notation) John von Neumann and Herman Goldstine
ENIAC coding system 1947 ARC Assembly Kathleen Booth
Analytical Engine order code 1948 CPC Coding scheme Howard H. Aiken
ENIAC coding system 1948 Curry notation system Haskell Curry
ENIAC Short Code 1949 Brief Code John Mauchly and William F. Schmitt
ENIAC Short Code 1949 C-10 Betty Holberton
CPC Coding scheme 1949 Seeber coding scheme (concept) Robert Seeber
1950s
Brief Code 1950 Short Code William F Schmidt, A.B. Tonik, J.R. Logan
ARC 1950 Birkbeck Assembler Kathleen Booth
Plankalkül 1951 Superplan Heinz Rutishauser
* 1951 ALGAE Edward A Voorhees and Karl Balke
Short Code 1951 Intermediate Programming Language Arthur Burks
EDSAC 1951 Regional Assembly Language Maurice Wilkes
Aiken CPC system 1951 Boehm unnamed coding system Corrado Böhm
Plankalkül 1951 Klammerausdrücke Konrad Zuse
Short Code 1951 OMNIBAC Symbolic Assembler Charles Katz
* 1951 Stanislaus (Notation) Fritz Bauer
EDSAC 1951 Whirlwind assembler Charles Adams and Jack Gilmore at MIT Project Whirlwind
EDSAC 1951 Rochester assembler Nat Rochester
* 1951 Sort Merge Generator Betty Holberton
C-10 and Short Code 1952 A-0 Grace Hopper
Aiken CPC 1952 Autocode Alick Glennie after Alan Turing
SORT/MERGE 1952 Editing Generator Milly Koss
* 1952 COMPOOL RAND/SDC
* 1953 Speedcoding John W. Backus
* 1953 READ/PRINT Don Harroff, James Fishman, George Ryckman
* 1954 Laning and Zierler system Laning, Zierler, Adams at MIT Project Whirlwind
Glennie Autocode 1954 Mark I Autocode Tony Brooker
Speedcoding 1954-1955 FORTRAN "0" (concept) Team led by John W. Backus at IBM
A-0 1954 ARITH-MATIC Team led by Grace Hopper at UNIVAC
A-0 1954 MATH-MATIC Team led by Charles Katz
* 1954 MATRIX MATH H G Kahrimanian
* 1954 IPL I (concept) Allen Newell, Cliff Shaw, Herbert Simon
A-0 1955 FLOW-MATIC Team led by Grace Hopper at UNIVAC
1955 BACAIC M. Grems and R. Porter
FORTRAN, A-2 1955 PACT I SHARE
Boehm 1955-6 Sequentielle Formelübersetzung Fritz Bauer and Karl Samelson
Laning and Zerler 1955-6 IT Team led by Alan Perlis
1955 PRINT IBM
IPL I 1958 IPL II (implementation) Allen Newell, Cliff Shaw, Herbert Simon
IPL 1956-1958 LISP (concept) John McCarthy
FLOW-MATIC 1957 COMTRAN Bob Bemer
FORTRAN 0 1957 FORTRAN "I" (implementation) John W. Backus at IBM
MATH-MATIC 1957-1958 UNICODE Remington Rand UNIVAC
* 1957 COMIT (concept)
FORTRAN I 1958 FORTRAN II Team led by John W. Backus at IBM
FORTRAN, IT and Sequentielle Formelübersetzung 1958 ALGOL 58 (IAL) ACM/GAMM
IPL II 1958 IPL V Allen Newell, Cliff Shaw, Herbert Simon
* 1959 FACT Fletcher R. Jones, Roy Nutt, Robert L. Patrick
FLOW-MATIC, COMTRAN, FACT 1959 COBOL (concept) The CODASYL Committee
ALGOL 58 1959 JOVIAL Jules Schwartz at SDC
IPL 1959 LISP (implementation) John McCarthy
1959 TRAC (concept) Mooers
1960s
ALGOL 58 1960 ALGOL 60
FLOW-MATIC, COMTRAN 1960 COBOL 61 (implementation) The CODASYL Committee
* 1961 COMIT (implementation)
FORTRAN II 1962 FORTRAN IV
* 1962 APL (concept) Iverson
ALGOL 58 1962 MAD Arden, et al.
ALGOL 60 1962 SIMULA (concept)
FORTRAN II, COMIT 1962 SNOBOL Griswold, et al.
ALGOL 60 1963 CPL Barron, Strachey, et al.
SNOBOL 1963 SNOBOL3 Griswold, et al.
ALGOL 60 1963 ALGOL 68 (concept) van Wijngaarden, et al.
ALGOL 58 1963 JOSS I Cliff Shaw, RAND
MIDAS 1964 MIMIC H. E. Petersen, et al.
CPL, LISP 1964 COWSEL Burstall, Popplestone
ALGOL 60, COBOL, FORTRAN 1964 PL/I (concept) IBM
FORTRAN II, JOSS 1964 BASIC Kemeny and Kurtz
FARGO 1964 IBM RPG IBM
1964 Mark-IV Informatics
1964 TRAC (implementation) Mooers
1964? IITRAN
JOSS 1965 TELCOMP BBN
JOSS I 1966 JOSS II Chuck Baker, RAND
ALGOL 60 1966 ALGOL W Niklaus Wirth, C. A. R. Hoare
FORTRAN IV 1966 FORTRAN 66
LISP 1966 ISWIM (Concept) Landin
ALGOL 60 1966 CORAL66
CPL 1967 BCPL Richards
FORTRAN, TELCOMP 1967 MUMPS Massachusetts General Hospital
* 1967 APL (implementation) Iverson
ALGOL 60 1967 SIMULA 67 (implementation) Dahl, Myhrhaug, Nygaard at Norsk Regnesentral
Lisp 1967 InterLisp D.G. Bobrow and D.L. Murphy
SNOBOL3 1967 SNOBOL4 Griswold, et al.
PL/I 1967 XPL W. M. Mckeeman, et al. at University of California Santa Cruz, California
J. J. Horning, et al. at Stanford University
ALGOL 60 1968 ALGOL 68 (UNESCO/IFIP standard) A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck and Cornelis H. A. Koster, et al.
COWSEL 1968 POP-1 Burstall, Popplestone
DIBOL 1968 DIBOL-8 DEC
1968 FORTH (concept) Moore
LISP 1968 LOGO Papert
CRT RPS 1968 MAPPER Unisys
* 1968 REFAL (implementation) Valentin Turchin
ALGOL 60, COBOL, FORTRAN 1969 PL/I (implementation) IBM
BCPL 1969 B Ken Thompson, with contributions from Dennis Ritchie
1969 PPL Thomas A. Standish at Harvard University
1969 SETL Jack Schwartz at Courant Institute of Mathematical Sciences
1969 TUTOR University of Illinois at Urbana-Champaign
1970s
1970? FORTH (implementation) Moore
POP-1 1970 POP-2
ALGOL 60, ALGOL W 1970 Pascal Wirth, Jensen
Pascal, XPL 1971 Sue Holt et al. at University of Toronto
SIMULA 67 1972 Smalltalk Xerox PARC
PL/I, ALGOL, XPL 1972 PL/M Kildall at Digital Research
B, BCPL, ALGOL 68 1972 C Dennis Ritchie
* 1972 INTERCAL Don Woods and James M. Lyon
2-level W-Grammar 1972 Prolog Colmerauer
Pascal, BASIC 1973 COMAL Christensen, Løfstedt
1973 ML Robin Milner
Pascal, Sue 1973 LIS Ichbiah et al. at CII Honeywell Bull
BASIC 1974 GRASS DeFanti
Business BASIC 1974 BASIC FOUR MAI BASIC Four Inc.
SETL 1975 ABC Leo Geurts and Lambert Meertens
LISP 1975 Scheme Sussman, Steele
BASIC 1975 Altair BASIC Gates, Allen
ALGOL 68, BLISS, ECL, HAL 1975 CS-4 Brosgol at Intermetrics
Pascal 1975 Modula Wirth
Smalltalk-72 1976 Smalltalk-76 Xerox PARC
Speakeasy-2 1976 Speakeasy-3 Stanley Cohen [disambiguation needed],Stephen Pieper at Argonne National Laboratory
C, FORTRAN 1976 Ratfor Kernighan
APL, PPL, Scheme 1976 S John Chambers at Bell Labs
* 1977 FP John Backus
* 1977 Bourne Shell (sh) Bourne
Fortran 1977 IDL David Stern of Research Systems Inc
MUMPS 1977 Standard MUMPS
SNOBOL 1977 Icon (concept) Griswold
ALGOL 68, LIS 1977 Green Ichbiah et al. at CII Honeywell Bull for US Dept of Defense
ALGOL 68, CS-4 1977 Red Brosgol et al. at Intermetrics for US Dept of Defense
ALGOL 68, 1977 Blue Goodenough et al. at SofTech for US Dept of Defense
ALGOL 68, 1977 Yellow Spitzen et al. at SRI International for US Dept of Defense
* 1978? MATLAB Moler at the University of New Mexico
Algol60 1978? SMALL Brownlee at the University of Auckland
Ingres 1978 SQL aka structured query language IBM
* 1978 VisiCalc Bricklin, Frankston marketed by VisiCorp
Modula 1979 Modula-2 Wirth
PL/I, BASIC, EXEC 2 1979 REXX Cowlishaw
C, SNOBOL 1979 AWK Aho, Weinberger, Kernighan
SNOBOL 1979 Icon (implementation) Griswold
* 1979 Vulcan dBase-II Ratliff
1980s
C, SIMULA 67 1980 C with classes Stroustrup
BASIC, Compiler Systems, Digital Research 1980-1981 CBASIC Gordon Eubanks
Speakeasy-3 1982? Speakeasy-IV Stanley Cohen [disambiguation needed], et al. at Speakeasy Computing Corporation
Smalltalk, C 1982 Objective-C Brad Cox
IBM BASICA 1983 GW-BASIC Microsoft
Green 1983 Ada CII Honeywell Bull
C with Classes 1983 C++ Stroustrup
BASIC 1983 True BASIC Kemeny, Kurtz at Dartmouth College
COBOL 1983? ABAP SAP AG
sh 1984? Korn Shell (ksh) David Korn
Forth, Lisp 1984 RPL Hewlett-Packard
ML 1984 Standard ML
dBase 1984 CLIPPER Nantucket
LISP 1984 Common Lisp Guy L. Steele, Jr. and many others
1984 Redcode Alexander Dewdney and D.G. Jones
Pascal 1985 Object Pascal Apple Computer
dBase 1985 PARADOX Borland
InterPress 1985 PostScript Warnock
BASIC 1985 QuickBASIC Microsoft
BASIC 1986 GFA BASIC Frank Ostrowski
1986 Miranda David Turner at University of Kent
1986 LabVIEW National Instruments
SIMULA 67 1986 Eiffel Meyer
1986 Informix-4GL Informix
C 1986 PROMAL
INFORM 1986 CorVision Cortex
Smalltalk 1987 Self (concept) Sun Microsystems Inc.
* 1987 HyperTalk Apple
C 1987 Magic Magic Software Enterprises
C, sed, awk, sh 1987 Perl Wall
Modula-2 1987 Oberon Wirth
Prolog 1987 Erlang Joe Armstrong and others in Ericsson
* 1987 Mathematica Wolfram Research
BASIC/Z 1987 Turbo Basic Robert 'Bob' Zale
MATLAB 1988 Octave
Awk, Lisp 1988 Tcl Ousterhout
BASIC 1988 STOS BASIC François Lionet and Constantin Sotiropoulos
REXX 1988 Object REXX Simon C. Nash
Ada 1988 SPARK Bernard A. Carré
APL 1988 A+ Arthur Whitney
Turbo Pascal, Object Pascal 1989 Turbo Pascal OOP Hejlsberg at Borland
Modula-2 1989 Modula-3 Cardeli, et al. DEC and Olivetti
Turbo Basic 1989 PowerBASIC Robert 'Bob' Zale
1990s
STOS BASIC 1990 AMOS BASIC François Lionet and Constantin Sotiropoulos
Oberon 1990 Object Oberon H Mössenböck, J Templ, R Griesemer
APL, FP 1990 J Iverson, R. Hui at Iverson Software
Miranda 1990 Haskell
Common Lisp, Scheme 1990 EuLisp
Object Oberon 1991 Oberon-2 Hanspeter Mössenböck, Wirth
ABC, ALGOL 68[1], Icon, Modula-3 1991 Python Van Rossum
Prolog 1991 Oz Gert Smolka and his students
1991 Q Albert Gräf
QuickBASIC 1991 Visual Basic Alan Cooper, sold to Microsoft
Turbo Pascal OOP 1992 Borland Pascal
Common Lisp, Scheme 1992 Dylan many people at Apple Computer
ksh 1993? Z Shell (zsh)
Smalltalk 1993? Self (implementation) Sun Microsystems Inc.
* 1993 Brainfuck Urban Müller
Forth 1993 FALSE Wouter van Oortmerssen
* 1993 WinDev PC Soft
HyperTalk 1993 Revolution Transcript
HyperTalk 1993 AppleScript Apple
APL, Lisp 1993 K Arthur Whitney
Smalltalk, Perl 1993 Ruby Yukihiro Matsumoto
Lua 1993 Lua Roberto Ierusalimschy et al. at Tecgraf, PUC-Rio
C 1993 ZPL Chamberlain et al. at University of Washington
Self, Dylan 1993 NewtonScript Walter Smith
Common Lisp 1994 ANSI Common Lisp
Perl 1994 PHP Rasmus Lerdorf
LPC, C, μLPC 1994 Pike Fredrik Hübinette et al. at Linköping University
Forth 1994 ANS Forth Elizabeth Rather, et al.
Borland Pascal 1995 Borland Delphi Anders Hejlsberg at Borland
1995 ColdFusion (CFML) Allaire
C, SIMULA67 OR C++, Smalltalk, Ada 83, Objective-C 1995 Java James Gosling at Sun Microsystems
Self, Java 1995 LiveScript Brendan Eich at Netscape
Lisp, C++, Tcl/Tk, TeX, HTML 1996 Curl David Kranz, Steve Ward, Chris Terman at MIT
LiveScript 1996 JavaScript Brendan Eich at Netscape
APL, Perl 1996 Perl Data Language (PDL) Karl Glazebrook, Jarle Brinchmann, Tuomas Lukka, and Christian Soeller
S 1996 R Robert Gentleman and Ross Ihaka
REXX 1996 NetRexx Cowlishaw
1996 Lasso Blue World Communication
Oberon-2 1997 Component Pascal Oberon microsystems, Inc
Joule, Original-E 1997 E Mark S. Miller
Scheme 1997 Pico Free University of Brussels
Smalltalk-80, Self 1997 Squeak Smalltalk Alan Kay, et al. at Apple Computer
JavaScript 1997 ECMAScript ECMA TC39-TG1
Smalltalk, APL, Objective-C 1997 F-Script Philippe Mougin
Common Lisp 1997 ISLISP ISO Standard ISLISP
Java, Scheme, Tcl 1997 Tea Jorge Nunes
Self, Forth, Lisp, Logo 1997 REBOL Carl Sassenrath, Rebol Technologies
C++, Standard C 1998 Standard C++ ANSI/ISO Standard C++
Erlang 1998 Open Source Erlang Ericsson
AWK, Perl, Unix shell 1998 Pikt Robert Osterlund (then at University of Chicago)
JAVA, SQL 1998 DASL (BOS) Bob Goldberg and Ludovic Champenois at Sun Microsystems
Web 2.0 IDE & ALM 1999 WebDev PC Soft
DSSSL 1999 XSLT (+ XPath) W3C, James Clark
Game Maker 1999 Game Maker Language (GML) Mark Overmars
JAVA, HTML 1999 DASL (AUS) Bob Goldberg, Bruce Daniels, Peter Yared, Yury Kamen, and Syed Ali at Sun Microsystems
2000s
Java 2000 Join Java G Stewart von Itzstein
FP, Forth 2000 Joy von Thun
C, C++, C#, Java 2000 D Walter Bright at Digital Mars
Ada, C++, Lisp 2000 XL Christophe de Dinechin
Magic 2000 eDeveloper Magic Software Enterprises
C, C++, Java, Delphi 2000 C# Anders Hejlsberg at Microsoft(ECMA [disambiguation needed])
C, C++, Java, PHP, Python, Ruby, Scheme 2000 Ferite Chris Ross
Java 2001 AspectJ Xerox PARC
Visual Basic 2001 Visual Basic .NET Microsoft
Self, NewtonScript 2002 Io Steve Dekorte
C#, ML, MetaHaskell 2003 Nemerle University of Wrocław
Joy, Forth, Lisp 2003 Factor Slava Pestov
Smalltalk, Java, Haskell, Standard ML, OCaml 2003 Scala Martin Odersky
Lua 2003 Squirrel Alberto Demichelis
BASIC 2004 FreeBASIC Andre Victor
Mobile Development 2004 WinDev Mobile PC Soft
* 2004 Subtext Jonathan Edwards
Python, C# 2004 Boo Rodrigo B. de Oliveira
Object Pascal, C# 2004 Oxygene (formerly Chrome) RemObjects Software
Java 2004 Groovy James Strachan
BASIC 2004 ThinBasic Eros Olmi thinBasic community
* 2005 Corn
Objective Caml, C#, Haskell 2005 F# Don Syme at Microsoft Research
ARC Assembler 2005 Rage Assembler Wim Boot at Micronix Softworks
* 2005 Seed7 Thomas Mertes
Haskell 2006 Links Philip Wadler, University of Edinburgh
* 2006 Kite Mooneer Salem
C#, ksh, Perl, CL, DCL, SQL 2006 Windows PowerShell Microsoft
C#, Scala, Ruby, Erlang 2007 Fan Brian Frank, Andy Frank
APEX 2007 APEX Salesforce.com
C# 2007 Vala GNOME
Lisp, ML, Haskell, Erlang 2007 Clojure Rich Hickey
* 2007 LOLCODE Adam Lindsay
Oberon 2007 Oberon-07 Wirth [1]
* 2008 RapidRage Wim Boot at Micronix Softworks
eDeveloper 2008 uniPaaS Magic Software Enterprises
Haskell 2008 Disciple Ben Lippmeier Disciple Wiki
C, R 2008 PCASTL Philippe Choquette
* 2008 Seccia Sylvain Seccia
Standard ML, SML/NJ 2009 Mythryl Cynbe ru Taren
MSIL, C#, VB.NET 2009 dylan.NET Dylan Borg
参考文献回目录
http://www.javaeye.com/news/288
http://en.wikipedia.org/wiki/Timeline_of_programming_languages
http://en.wikipedia.org/wiki/Timeline_of_programming_languages