File:Algol&Fortran Family By Skippppp.svg

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file(SVG file, nominally 688 × 741 pixels, file size: 80 KB)

Captions

Captions

Genealogy tree of programming languages - Algol & Fortran family

Summary[edit]

Description
English: A timeline and family tree of the Algol, Fortran, and COBOL programming language families.
Date
Source Shazz, Borkowsk, User:Qwertyus
Author Skippppp,Shazz,Borkowsk, User:Qwertyus
Other versions https://commons.wikimedia.org/w/index.php?title=File:Algol%26Fortran_family-by-Borkowski.svg

Tikz source code[edit]

% Note: Run processed DVI file with dvisvgm and option --no-fonts, or short -n
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{xcolor}

\colorlet{bg1}{blue!10}

\begin{document}
\begin{tikzpicture}[scale=0.35, thick]

% Used to rescale the later decades.
\ExplSyntaxOn
\long\def\y#1#2{
	\str_case_e:nnF {#1#2} {
		{00} {100}
		{02} {101}
		{03} {101}
		{08} {104}
		{10} {105}
		{11} {106}
		{12} {107}
	}{#1#2}
}

% Fancy tikz to find the midpoint of 2 anchors.
\long\def\findmid#1#2#3{
	($(#2)!#1!(#3)$)
}
\ExplSyntaxOff

% Background colours 
\fill[bg1]   (-27, \y51) rectangle (25, \y60);
\fill[white] (-27, \y60) rectangle (25, \y70);
\fill[bg1]   (-27, \y70) rectangle (25, \y80);
\fill[white] (-27, \y80) rectangle (25, \y90);
\fill[bg1]   (-27, \y90) rectangle (25, \y00);
\fill[white] (-27, \y00) rectangle (25, \y10);
\fill[bg1]   (-27, \y10) rectangle (25, \y12);

% Dates
\node[anchor=south west, opacity=0.5] at (-27, \y51) {\large 1950's};
\foreach \date in {60, 70, ..., 90} {
	\node[anchor=south west, opacity=0.5] at (-27, \expandafter\y\date) {\large 19\date's};
}
\node[anchor=south west, opacity=0.5] at (-27, \y00) {\large 2000's};
\node[anchor=south west, opacity=0.5] at (-27, \y10) {\large 2010's};

% Nodes with linebreaks should have center alignment
\tikzset{every path/.append style={align=center}}

% All the nodes. 
% I have tried to make it somewhat organised, but it's still a mess.
\node (speedcoding) at (-10, \y53) {Speedcoding (1953)};
\node (fortran 1)   at (-10, \y55) {Fortran (1955)};
\node (flowmatic)   at ( 20, \y55) {\textsc{flow-matic}\\(1955)};
\node (algol 58)    at ( 00, \y58) {Algol (1958)};
\node (cobol 60)    at ( 20, \y60) {\textsc{cobol}\\(1960)};
\node (fortran 2)   at (-15, \y58) {Fortran II};
\node (algol 60)    at ( 00, \y60) {Algol 60};
\node (simula 62)   at ( 10, \y62) {Simula\\(1962)};
\node (cpl)         at ( 05, \y63) {\textsc{cpl}\\(1963)};
\node (basic)       at (-20, \y64) {\textsc{basic}\\(1964)};
\node (fortran 4)   at (-15, \y66) {Fortran IV\\(1966)};
\node (bcpl)        at ( 05, \y66) {\textsc{bcpl}\\(1966)};
\node (simula 67)   at ( 10, \y67) {Simula 67};
\node (algol 68)    at ( 00, \y68) {Algol 68};
\node (pascal)      at (-05, \y70) {Pascal\\(1970)};
\node (smalltalk)   at ( 15, \y72) {Smalltalk\\(1972)};
\node (c72)         at ( 05, \y72) {C\\(1972)};
\node (fortran 77)  at (-15, \y77) {Fortran 77};
\node (modula 2)    at (-10, \y78) {Modula-2\\(1978)};
\node (modula 3)    at (-10, \y88) {Modula-3\\(1988)};
\node (ada 83)      at ( 00, \y83) {Ada\\(1983)};
\node (cpp83)       at ( 10, \y83) {C++\\(1983)};
\node (cobol 85)    at ( 20, \y95) {\textsc{cobol} 85};
\node (c89)         at ( 05, \y89) {C 89};
\node (fortran 90)  at (-15, \y90) {Fortran 90};
\node (vba)         at (-20, \y91) {Visual Basic\\(1991)};
\node (fortran 95)  at (-15, \y95) {Fortran 95};
\node (ada 95)      at ( 00, \y95) {Ada 95};
\node (delphi)      at (-05, \y95) {Delphi\\(1995)};
\node (cpp98)       at ( 10, \y98) {C++98};
\node (c99)         at ( 05, \y99) {C 99};
\node (cobol 02)    at ( 20, \y02) {\textsc{cobol} 2002};
\node (fortran 03)  at (-15, \y03) {Fortran 03};
\node (fortran 08)  at (-15, \y08) {Fortran 08};
\node (c11)         at ( 05, \y11) {C 11};
\node (cpp11)       at ( 10, \y11) {C++ 11};

% Add 0.5 because there is no good way to route connections otherwise
\node (pl 1) at (-10, \y64+0.5) {\textsc{pl/i} (1964)};

% All the connections should have rounded corners.
\tikzset{every path/.append style={rounded corners}}

% The PL/I mess
\draw (fortran 2) -| \findmid{0.2}{pl 1.south}{pl 1.south west}; 
\draw (algol 58)  -| \findmid{0.2}{pl 1.south}{pl 1.south east};
\draw (cobol 60)       |- (10.4, \y64+0.5)
      ( 9.6, \y64+0.5) -- ( 5.4, \y64+0.5)
      ( 4.6, \y64+0.5) -- ( 0.4, \y64+0.5)
      (-0.4, \y64+0.5) -- (-4.6, \y64+0.5)
      (-5.4, \y64+0.5) -- (pl 1.east);

% The obvious tree branches
\draw (speedcoding)
   -- (fortran 1)
   -| (fortran 2)
   -- (fortran 4)
   -- (fortran 77)
   -- (fortran 90)
   -- (fortran 95)
   -- (fortran 03)
   -- (fortran 08);
       
\draw (fortran 1)
   -| (algol 58)
   -- (algol 60)
   -| (cpl)
   -- (bcpl)
   -- (c72)
   -- (c89)
   -- (c99)
   -- (c11);
       
\draw (algol 60)
   -| (simula 62)
   -- (simula 67)
   -- (cpp83)
   -- (cpp98)
   -- (cpp11);
       
\draw (fortran 2)
   -| (basic) 
   -- (vba);
     
\draw (algol 60)
   -| (pascal)
   -| (modula 2)
   -- (modula 3);
     
\draw (algol 60)
   -| (algol 68)
   -- (ada 83)
   -- (ada 95);
       
\draw (flowmatic)
   -- (cobol 60)
   -- (cobol 85)
   -- (cobol 02);
       
\draw (pascal)    -- (delphi);
\draw (simula 67) -| (smalltalk);

% Random cross-connections.
\draw (c72) -| \findmid{0.5}{c72}{cpp83} |- (cpp83);
\draw (c89) -| \findmid{0.5}{c89}{cpp98} |- (cpp98);
\draw (c99) -| \findmid{0.5}{c99}{cpp11} |- (cpp11);
\draw (algol 68) -| \findmid{0.5}{algol 68}{c72} |- (c72);
\draw (cpp98) |- (cobol 02);
\draw (smalltalk) |- (cobol 02);

\end{tikzpicture}
\end{document}

Licensing[edit]

I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current02:05, 10 May 2024Thumbnail for version as of 02:05, 10 May 2024688 × 741 (80 KB)Speravir (talk | contribs)update after typo fix by User:ReadOnlyAccount in edit 872821271]]
21:50, 6 March 2024Thumbnail for version as of 21:50, 6 March 2024645 × 695 (80 KB)Skippppp (talk | contribs)Uploaded own work with UploadWizard

There are no pages that use this file.

File usage on other wikis

The following other wikis use this file:

  • Usage on en.wikipedia.org

Metadata