File:Algol&Fortran Family By Skippppp.svg
From WikiMD's medical encyclopedia
Size of this PNG preview of this SVG file: 421 × 599 pixels. Other resolutions: 169 × 240 pixels | 337 × 480 pixels | 422 × 600 pixels | 540 × 768 pixels | 719 × 1,024 pixels | 1,439 × 2,048 pixels | 688 × 979 pixels.
Original file (SVG file, nominally 688 × 979 pixels, file size: 92 KB)
This file is from Wikimedia Commons and may be used by other projects. The description on its file description page there is shown below.
Summary
| DescriptionAlgol&Fortran Family By Skippppp.svg |
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, User:MáneyMánadóttir |
| Other versions | https://commons.wikimedia.org/w/index.php?title=File:Algol%26Fortran_family-by-Borkowski.svg |
TikZ source code
% https://commons.wikimedia.org/wiki/File:Algol%26Fortran_Family_By_Skippppp.svg
% Compile using
% latex <filename>
% dvisvgm --no-fonts <filename>.dvi <filename>.svg
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{xcolor}
\colorlet{bg1}{blue!10}
\begin{document}
\begin{tikzpicture}[scale=0.35, thick]
% Can be used to rescale the later decades if desired.
\ExplSyntaxOn
\long\def\y#1#2{
\str_case_e:nnF {#1#2} {
{00} {100}
{01} {101}
{02} {102}
{03} {103}
{07} {107}
{08} {108}
{10} {110}
{11} {111}
{12} {112}
{14} {114}
{17} {117}
{18} {118}
{20} {120}
{23} {123}
{25} {125}
}{#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, \y20);
\fill[white] (-27, \y20) rectangle (25, \y25);
% 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};
\node[anchor=south west, opacity=0.5] at (-27, \y20) {\large 2020'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 2p) at (-10, \y84) {Modula-2+\\(1984)};
%\node (oberon) at (-12, \y87) {Oberon\\(1987)}; % Influenced by Modula-2, influences Modula-3
\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 (vbdotnet) at (-20, \y01) {VB.NET\\(2001)};
\node (fortran 95) at (-15, \y95) {Fortran 95};
\node (ada 95) at ( 00, \y95) {Ada 95};
\node (ada 2005) at ( 00, \y07) {Ada 2005}; % published in 2007 but called 2005
\node (ada 2012) at ( 00, \y12) {Ada 2012};
\node (ada 2022) at ( 00, \y23) {Ada 2022}; % published in 2023 but called 2022
\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 (cobol 14) at ( 20, \y14) {\textsc{cobol} 2014};
\node (cobol 23) at ( 20, \y23) {\textsc{cobol} 2023};
\node (fortran 03) at (-15, \y03) {Fortran 2003};
\node (fortran 08) at (-15, \y08) {Fortran 2008};
\node (fortran 18) at (-15, \y18) {Fortran 2018};
\node (fortran 23) at (-15, \y23) {Fortran 2023};
\node (c11) at ( 05, \y11) {C 11};
\node (c17) at ( 05, \y17) {C 17};
\node (c23) at ( 05, \y23) {C 23};
\node (cpp11) at ( 10, \y11) {C++11};
\node (cpp14) at ( 10, \y14) {C++14};
\node (cpp17) at ( 10, \y17) {C++17};
\node (cpp20) at ( 10, \y20) {C++20};
\node (cpp23) at ( 10, \y23) {C++23};
% 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)
-- (fortran 18)
-- (fortran 23);
\draw (fortran 1)
-| (algol 58)
-- (algol 60)
-| (cpl)
-- (bcpl)
-- (c72)
-- (c89)
-- (c99)
-- (c11)
-- (c17)
-- (c23);
\draw (algol 60)
-| (simula 62)
-- (simula 67)
-- (cpp83)
-- (cpp98)
-- (cpp11)
-- (cpp14)
-- (cpp17)
-- (cpp20)
-- (cpp23);
\draw (fortran 2)
-| (basic)
-- (vba)
-- (vbdotnet);
\draw (algol 60)
-| (pascal)
-| (modula 2)
-- (modula 2p)
-- (modula 3);
\draw (algol 60)
-| (algol 68)
-- (ada 83)
-- (ada 95)
-- (ada 2005)
-- (ada 2012)
-- (ada 2022);
\draw (flowmatic)
-- (cobol 60)
-- (cobol 85)
-- (cobol 02)
-- (cobol 14)
-- (cobol 23);
\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
I, the copyright holder of this work, hereby publish it under the following license:
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.
Captions
Genealogy tree of programming languages - Algol & Fortran family
6 March 2024
image/svg+xml
741 pixel
688 pixel
94,195 byte
37dfd7c15d5e6d546d1b449a1536431b760de852
File history
Click on a date/time to view the file as it appeared at that time.
| Date/Time | Thumbnail | Dimensions | User | Comment | |
|---|---|---|---|---|---|
| current | 07:10, 27 April 2025 | 688 × 979 (92 KB) | MáneyMánadóttir | Add VB.NET and Modula-2+; update FORTRAN, Ada, C, C++ and COBOL families with newer versions of the respective standards. More cross connections could be added. |
File usage
The following page uses this file:
Metadata
This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
If the file has been modified from its original state, some details may not fully reflect the modified file.
| Width | 515.922pt |
|---|---|
| Height | 734.2pt |
Retrieved from "https://wikimd.org/wiki/File:Algol%26Fortran_Family_By_Skippppp.svg"