A HISTORY OF F#
FROM EUCLID TO TYPE PROVIDERS
Rachel Reese
@rachelreese
rachelree.se
Gul A. Agha.
Actors, a model of concurrent computation in distributed systems.
Ph.D. dissertation. March 1985.
By and large, the goal of introducing new programming
languages has been to make it simpler to express more
complex behavior.
History of F#, and the ML family of languages.
PREHISTORY
EUCLID, ~300 BC
GOTTFRIED LEIBNIZ, 1646-1716
CHARLES BABBAGE (1791-1871) &
ADA LOVELACE (1815-1852)
GOTTLOB FREGE (1848-1925) &
GIUSEPPE PEANO (1858-1932)
DAVID HILBERT, 1862-1943
MOSES SCHÖNFINKEL, 1889-1942
HILBERT’S 23 QUESTIONS, 1900
1900: Hilbert poses his "23 questions" (now known as Hilbert's
problems) at the Second International Congress of
Mathematicians in Paris in 1900.
The second is simply, “Prove that the axioms of mathematics are
consistent.”
PRINCIPIA MATHEMATICA, 1910
HILBERT’S SECOND PROBLEM,
REDUX. 1928.
Recasts his second problem into three questions:
1) Is mathematics complete?
2) Is mathematics consistent?
3) Is mathematics decidable?
1930S
GÖDEL’S INCOMPLETENESS
THEOREMS, 1931
GÖDEL STARTED A FAD
Gödel
Tarski
ChurchTuring
UNDEFINABILITY THEOREM, 1936
Arithmetical truth cannot be defined in arithmetic.
GÖDEL STARTED A FAD
Gödel
Tarski
ChurchTuring
ALAN TURING & HALTING
PROBLEM, 1936
Can you determine, from a description of
an arbitrary computer program and an
input, whether the program will finish
running or continue to run forever?
GÖDEL STARTED A FAD
Gödel
Tarski
ChurchTuring
ENTSCHEIDUNGSPROBLEM, 1936
Can an algorithm be derived that takes a statement of first-order
logic, and determines whether that statement is valid in every
structure satisfying the axioms?
-- or --
Can a given statement be proven from the axioms, using the rules of
logic?
ALONZO CHURCH
1940S & 1950S
EARLY COMPUTERS
Z1, Z2, Z3: Z1 proposed 1935, Z3 delivered 1941
ENIAC: 1943 (proposed) 1946 (delivered)
EDVAC: 1944 (proposed) 1949 (delivered)
Manchester Baby: 1946 (proposed) 1948 (delivered)
EDSAC: 1946 (proposed) 1949 (delivered)
Pilot ACE: 1950 (delivered)
JOHN VON NEUMANN, 1903-1957
FORTRAN, 1954
FLOW-MATIC, 1955 &
COBOL, 1959
ALGOL, 1958
LISP, 1958
“Lisp is the medium of choice for people who enjoy free style
and flexibility.”
- Gerald Jay Sussman (introduction to [Friedman, 1987], p. ix)
Lisp first had: tree data structures, automatic storage
management, dynamic typing, conditionals, higher-order
functions, recursion, and the self-hosting compiler. (First? REPL)
MERVYN PRAGNELL’S LOGIC STUDY
GROUP, LATE 1950S
The sessions were held illicitly after-hours at Birkbeck College
(University of London), without the knowledge or permission of the
college authorities. Pragnell knew a lab tech with a key that would let
them in.
Members included: Christopher Strachey, Peter Landin, Rod Burstall,
Dana Scott, Robin Milner (and more)...
History of F#, and the ML family of languages.
1960S
CHRISTOPHER STRACHEY, 1916-
1975
PETER LANDIN, 1930 - 2009
PETER LANDIN’S PAPERS
Mechanical evolution of expressions (1964).
A correspondence between ALGOL-60 and Church's lambda-
notation (1965).
The next 700 programming languages (1966).
Programs and their proofs: an algebraic approach (1968). With
Rod Burstall.
ISWIM, 1966
“If you See What I Mean”
ISWIM is an imperative language with a functional core, consisting of
a syntactic sugaring of lambda calculus, plus mutable variables and
assignment and a powerful control mechanism—the J operator.
Because it is based on the lambda calculus, ISWIM has higher order
functions and lexically scoped variables.
PETER LANDIN’S CONTRIBUTIONS
Term “syntactic sugar”
Functional programming languages
Domain-specific languages
Graph reduction
Sharing
Strictness analysis
Where expressions
Disentangling nested applications
into flat where expressions
Closures
First-class continuations
Algebraic data types
Streams
Connection between streams and
coroutines
SECD machine
Significant whitespace (the off-side
rule)
Delayed evaluation
Partial evaluation
Circularity to implement recursion
J Operator
HASKELL CURRY, 1900-1982
CURRY-HOWARD ISOMORPHISM
1970S
THEOREM PROVERS (TO TODAY)
LCF
HOL series (HOL88, HOL90, HOL98, HOL4, HOL Light, ProofPower,
HOL Zero)
F*
Coq
Isabelle
Agda
LCF, 1972
ROBIN MILNER, 1934-2010
“The idea of a machine proving theorems in
logic, and the idea of using logic to
understand what a machine was doing... This
double relationship began to inspire me
because it was clearly not very simple.“
NPL, 1977
HOPE, 1977
HINDLEY-MILNER TYPE INFERENCE,
1978
EDINBURGH LCF, 1979
ML, 1979
1980S
LUCA CARDELLI & VAX ML, 1981
New features:
- New labelled record and
union types
- The ref type for mutable
values
- Declaration combinators for
building compound
declarations
- Modules
- Stream I/O w/ bi-directional
streams.
Importance:
Demonstrates viability of ML as
a general language with an
efficient implementation.
Creates incentive to control
proliferation of dialects
An immediate precursor of
Standard ML
A testbed for early experiments
with Standard ML design
STANDARD ML DESIGN STARTS
1983.
First participants:
Rod Burstall, Luca Cardelli, Guy Cousineau ,Mike Gordon, David
MacQueen, Robin Milner, Kevin Mitchell, Alan Mycroft, Larry Paulson,
David Rydeheard, Don Sannella, John Scott, Brian Monahan, Stefan
Sokolowski, Gerard Huet, Peter Mosses, David Schmidt
1990S
STANDARD ML, 1990
OBJECT-ORIENTED PROGRAMMING
GOES VIRAL
C++, 1983. C++ 2.0 1989.
New features in 2.0 included multiple inheritance, abstract classes,
static member functions, const member functions, and protected
members.
Java, initiated 1991. First version, 1995.
C# & .NET, first initiated, 1999. First released: 2002.
ML-2000 TALKS START, 1993
Should we add OO capabilities?
OTHER WILD MLS APPEAR
Standard ML of NJ
=> MLj
=> SML.NET
CAML, 1985
=> Caml Light, 1991
=> Caml Special Light, 1995
=> OCaml, 1996
=> F#, 2005
ANU ML, late 80s
Harlequin ML, 1996
Moscow ML, 1994
PolyML
MLKit
Mlton
MLWorks
SML ’97
QML
2000S
DON SYME
History of F#, and the ML family of languages.
Don Syme
F# History, Today, Tomorrow talk
SPLASH 2010
So much of what I loved about programming, was just
missing from the experience of programming in Java. And
that, in a sense, was a big driving motivation. And as C#
1.0 occurred, I was faced with a desperate situation: that I
might actually have to do all my programming in either
Java or C# 1.0. And I actually had to do personally do
something about this at Microsoft, either by improving C#
to the point that it was what I wanted to use, or by working
on a new language.
PUSH FOR .NET GENERICS MAKE IT
IN TO C# 2.0, 1999-2004
BUG FIXES FOR GENERICS, 2002-
2004
IN WHICH WE FINALLY MEET THE
HERO OF OUR STORY: F#
A FEW PAPERS RELATED TO F#
Tomas Petricek and Don Syme, The F# Computation Expression Zoo, in Proceedings of Practical Aspects of Declarative
Languages, ACM, 2014.
Don Syme, Kenji Takeda, Keith Battocchi, Donna Malayeri, and Tomas Petricek, Themes in Information-Rich Functional
Programming for Internet-Scale Data Sources, ACM, 24 January 2013.
Don Syme, Keith Battocchi, and Gordon Hodgenson, Creating a Type Provider (F#), Microsoft, 12 January 2013.
Don Syme, Adam Granicz, and Antonio Cisternino, Expert F# 3.0, Apress, 7 November 2012.
Don Syme, Keith Battocchi, Kenji Takeda, Donna Malayeri, Jomo Fisher, Jack Hu, Tao Liu, Brian McNamara, Daniel Quirk, Matteo
Taveggia, Wonseok Chae, Uladzimir Matsveyeu, and Tomas Petricek, F#3.0 - Strongly-Typed Language Support for Internet-
Scale Information Sources, no. MSR-TR-2012-101, 21 September 2012.
Tomas Petricek, Don Syme, and Alan Mycroft, Extending Monads with Pattern Matching, inProceedings of Haskell Symposium,
ACM, 2011.
Tomas Petricek and Don Syme, Joinads: a retargetable control-flow construct for reactive, parallel and concurrent programming,
in Proceedings of Practical Aspects of Declarative Languages, ACM, 2011.
Donald Syme, Tomas Petricek, and Dmitry Lomov, The F# Asynchronous Programming Model, inIn Proceedings of Principles and
Applications of Declarative Languages, 2011, ACM SIGPLAN, 2011.
Tomas Petricek and Donald Syme, Collecting hollywood's garbage: avoiding space-leaks in composite events, in ISMM '10
Proceedings of the 2010 international symposium on Memory management , ACM SIGPLAN, 2010.
Don Syme, The F# Draft Language Specification, Microsoft, 1 February 2009.
F# 1.0, 2005
UNITS OF MEASURE, 2008
TYPE PROVIDERS, 2009
”Let’s #r a database!”
2010: Jomo Fisher prototypes the Excel and Freebase
type providers
2011: Decided to make it a feature of F# 3.0. Was
called “awesome typing.”
2010S
F# 2.0 INCLUDED IN VISUAL STUDIO
2010!
+
F# IS OPEN SOURCED! 2010
Uses the Apache
license
F# 2.0, 2010
FSHARP.ORG, 2012
Created by Phil Trelford, Tomas Petricek,
Don Syme
2012: Early talks were fueled by much tea
and cake. Domain purchased, and folks
joined by emailing.
2014: Formally organized.
2015: Board elections held; 501c(3)
Charitable organization.
2016: Nearly 1000 members, training
programs, working groups (join!).
F# 3.0, 2012
F# MOVED TO GITHUB, 2015
F# 3.1, 2015
F# 4.0, 2016
History of F#, and the ML family of languages.
TODAY: TYPE PROVIDERS ARE
BLOSSOMING
+ many more!
AND BY TYPE PROVIDERS, I MEAN
THE COMMUNITY.
http://fsharp.org, FSSF Slack
F# Weekly
http://fsharpforfunandprofit.com
F# Conf videos
c4fsharp.net
fssnip.net
#fsharp on twitter
GitHub.com/fsprojects
Google groups
A HISTORY OF F#
FROM EUCLID TO TYPE PROVIDERS
Rachel Reese
@rachelreese
rachelree.se

More Related Content

PPTX
F# and functional programming
PPTX
Introduction to F#
PPTX
Introduction to F#
PPT
F# Eye for the C# Guy
PPTX
Introduction to F# 3.0
PPTX
C vs c++
PPTX
F# Tutorial @ QCon
PPT
Introduction to C Programming - I
F# and functional programming
Introduction to F#
Introduction to F#
F# Eye for the C# Guy
Introduction to F# 3.0
C vs c++
F# Tutorial @ QCon
Introduction to C Programming - I

What's hot (20)

PPTX
C programming interview questions
PPTX
Introduction to c programming language
PPSX
C programming basics
PPT
Tokens_C
PDF
Data analysis with R and Julia
PPT
Introduction to C Programming
PPT
Basics1
PPTX
introduction to c programming language
PPTX
Introduction to C Programming
PPTX
Python Introduction
PPTX
A brief introduction to C Language
PPT
F# Intro for Scala Developers
PPTX
Introduction to C programming
PPTX
PPT
Introduction to programming with c,
PPTX
Creating Domain Specific Languages in F#
PPT
introduction to C programming (C)
PPT
Introduction to c programming
DOCX
Features of c language 1
ODP
Ppt of c++ vs c#
C programming interview questions
Introduction to c programming language
C programming basics
Tokens_C
Data analysis with R and Julia
Introduction to C Programming
Basics1
introduction to c programming language
Introduction to C Programming
Python Introduction
A brief introduction to C Language
F# Intro for Scala Developers
Introduction to C programming
Introduction to programming with c,
Creating Domain Specific Languages in F#
introduction to C programming (C)
Introduction to c programming
Features of c language 1
Ppt of c++ vs c#
Ad

Similar to History of F#, and the ML family of languages. (20)

PPTX
A brief history of functional programming (edited)
PPT
01 intro
PDF
Haskell Tour (Part 1)
PPT
Chapter1
PDF
A History of Computer Programming Languages.pdf
PPTX
Can programming be liberated from the von neumann style?
PPT
Life & Work of Robin Milner | Turing100@Persistent
PDF
Programming Languages: some news for the last N years
PDF
Four Languages From Forty Years Ago (NewCrafts 2019)
PDF
2. Evolution of the Major Programming Languages.pdf
PDF
Can programming be liberated from the von neumman style
PPTX
Paradigms
PDF
A history of (Nordic) compilers and autocodes
PPTX
Turing Goes to Church
PPTX
Modelling and Programming: Isn’t it all the same?
PDF
Geek Night 16.0 - Evolution of Programming Languages
PDF
GeekNight: Evolution of Programming Languages
PDF
Functional Programming #FTW
PPT
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
A brief history of functional programming (edited)
01 intro
Haskell Tour (Part 1)
Chapter1
A History of Computer Programming Languages.pdf
Can programming be liberated from the von neumann style?
Life & Work of Robin Milner | Turing100@Persistent
Programming Languages: some news for the last N years
Four Languages From Forty Years Ago (NewCrafts 2019)
2. Evolution of the Major Programming Languages.pdf
Can programming be liberated from the von neumman style
Paradigms
A history of (Nordic) compilers and autocodes
Turing Goes to Church
Modelling and Programming: Isn’t it all the same?
Geek Night 16.0 - Evolution of Programming Languages
GeekNight: Evolution of Programming Languages
Functional Programming #FTW
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
Ad

Recently uploaded (20)

PDF
PDF-XChange Editor Plus 10.7.0.398.0 Crack Free Download Latest 2025
PPTX
Cybersecurity: Protecting the Digital World
PPTX
Python is a high-level, interpreted programming language
PPTX
Trending Python Topics for Data Visualization in 2025
PDF
MCP Security Tutorial - Beginner to Advanced
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PDF
Visual explanation of Dijkstra's Algorithm using Python
PPTX
Tech Workshop Escape Room Tech Workshop
PDF
Guide to Food Delivery App Development.pdf
PDF
Workplace Software and Skills - OpenStax
PDF
DNT Brochure 2025 – ISV Solutions @ D365
PPTX
Cybersecurity-and-Fraud-Protecting-Your-Digital-Life.pptx
PDF
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
PDF
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
PDF
Multiverse AI Review 2025: Access All TOP AI Model-Versions!
PPTX
Full-Stack Developer Courses That Actually Land You Jobs
PPTX
CNN LeNet5 Architecture: Neural Networks
PPTX
Airline CRS | Airline CRS Systems | CRS System
PPTX
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
PDF
Practical Indispensable Project Management Tips for Delivering Successful Exp...
PDF-XChange Editor Plus 10.7.0.398.0 Crack Free Download Latest 2025
Cybersecurity: Protecting the Digital World
Python is a high-level, interpreted programming language
Trending Python Topics for Data Visualization in 2025
MCP Security Tutorial - Beginner to Advanced
How Tridens DevSecOps Ensures Compliance, Security, and Agility
Visual explanation of Dijkstra's Algorithm using Python
Tech Workshop Escape Room Tech Workshop
Guide to Food Delivery App Development.pdf
Workplace Software and Skills - OpenStax
DNT Brochure 2025 – ISV Solutions @ D365
Cybersecurity-and-Fraud-Protecting-Your-Digital-Life.pptx
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
Multiverse AI Review 2025: Access All TOP AI Model-Versions!
Full-Stack Developer Courses That Actually Land You Jobs
CNN LeNet5 Architecture: Neural Networks
Airline CRS | Airline CRS Systems | CRS System
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
Practical Indispensable Project Management Tips for Delivering Successful Exp...

History of F#, and the ML family of languages.

  • 1. A HISTORY OF F# FROM EUCLID TO TYPE PROVIDERS Rachel Reese @rachelreese rachelree.se
  • 2. Gul A. Agha. Actors, a model of concurrent computation in distributed systems. Ph.D. dissertation. March 1985. By and large, the goal of introducing new programming languages has been to make it simpler to express more complex behavior.
  • 7. CHARLES BABBAGE (1791-1871) & ADA LOVELACE (1815-1852)
  • 8. GOTTLOB FREGE (1848-1925) & GIUSEPPE PEANO (1858-1932)
  • 11. HILBERT’S 23 QUESTIONS, 1900 1900: Hilbert poses his "23 questions" (now known as Hilbert's problems) at the Second International Congress of Mathematicians in Paris in 1900. The second is simply, “Prove that the axioms of mathematics are consistent.”
  • 13. HILBERT’S SECOND PROBLEM, REDUX. 1928. Recasts his second problem into three questions: 1) Is mathematics complete? 2) Is mathematics consistent? 3) Is mathematics decidable?
  • 14. 1930S
  • 16. GÖDEL STARTED A FAD Gödel Tarski ChurchTuring
  • 17. UNDEFINABILITY THEOREM, 1936 Arithmetical truth cannot be defined in arithmetic.
  • 18. GÖDEL STARTED A FAD Gödel Tarski ChurchTuring
  • 19. ALAN TURING & HALTING PROBLEM, 1936 Can you determine, from a description of an arbitrary computer program and an input, whether the program will finish running or continue to run forever?
  • 20. GÖDEL STARTED A FAD Gödel Tarski ChurchTuring
  • 21. ENTSCHEIDUNGSPROBLEM, 1936 Can an algorithm be derived that takes a statement of first-order logic, and determines whether that statement is valid in every structure satisfying the axioms? -- or -- Can a given statement be proven from the axioms, using the rules of logic?
  • 24. EARLY COMPUTERS Z1, Z2, Z3: Z1 proposed 1935, Z3 delivered 1941 ENIAC: 1943 (proposed) 1946 (delivered) EDVAC: 1944 (proposed) 1949 (delivered) Manchester Baby: 1946 (proposed) 1948 (delivered) EDSAC: 1946 (proposed) 1949 (delivered) Pilot ACE: 1950 (delivered)
  • 25. JOHN VON NEUMANN, 1903-1957
  • 29. LISP, 1958 “Lisp is the medium of choice for people who enjoy free style and flexibility.” - Gerald Jay Sussman (introduction to [Friedman, 1987], p. ix) Lisp first had: tree data structures, automatic storage management, dynamic typing, conditionals, higher-order functions, recursion, and the self-hosting compiler. (First? REPL)
  • 30. MERVYN PRAGNELL’S LOGIC STUDY GROUP, LATE 1950S The sessions were held illicitly after-hours at Birkbeck College (University of London), without the knowledge or permission of the college authorities. Pragnell knew a lab tech with a key that would let them in. Members included: Christopher Strachey, Peter Landin, Rod Burstall, Dana Scott, Robin Milner (and more)...
  • 32. 1960S
  • 35. PETER LANDIN’S PAPERS Mechanical evolution of expressions (1964). A correspondence between ALGOL-60 and Church's lambda- notation (1965). The next 700 programming languages (1966). Programs and their proofs: an algebraic approach (1968). With Rod Burstall.
  • 36. ISWIM, 1966 “If you See What I Mean” ISWIM is an imperative language with a functional core, consisting of a syntactic sugaring of lambda calculus, plus mutable variables and assignment and a powerful control mechanism—the J operator. Because it is based on the lambda calculus, ISWIM has higher order functions and lexically scoped variables.
  • 37. PETER LANDIN’S CONTRIBUTIONS Term “syntactic sugar” Functional programming languages Domain-specific languages Graph reduction Sharing Strictness analysis Where expressions Disentangling nested applications into flat where expressions Closures First-class continuations Algebraic data types Streams Connection between streams and coroutines SECD machine Significant whitespace (the off-side rule) Delayed evaluation Partial evaluation Circularity to implement recursion J Operator
  • 40. 1970S
  • 41. THEOREM PROVERS (TO TODAY) LCF HOL series (HOL88, HOL90, HOL98, HOL4, HOL Light, ProofPower, HOL Zero) F* Coq Isabelle Agda
  • 43. ROBIN MILNER, 1934-2010 “The idea of a machine proving theorems in logic, and the idea of using logic to understand what a machine was doing... This double relationship began to inspire me because it was clearly not very simple.“
  • 49. 1980S
  • 50. LUCA CARDELLI & VAX ML, 1981 New features: - New labelled record and union types - The ref type for mutable values - Declaration combinators for building compound declarations - Modules - Stream I/O w/ bi-directional streams. Importance: Demonstrates viability of ML as a general language with an efficient implementation. Creates incentive to control proliferation of dialects An immediate precursor of Standard ML A testbed for early experiments with Standard ML design
  • 51. STANDARD ML DESIGN STARTS 1983. First participants: Rod Burstall, Luca Cardelli, Guy Cousineau ,Mike Gordon, David MacQueen, Robin Milner, Kevin Mitchell, Alan Mycroft, Larry Paulson, David Rydeheard, Don Sannella, John Scott, Brian Monahan, Stefan Sokolowski, Gerard Huet, Peter Mosses, David Schmidt
  • 52. 1990S
  • 54. OBJECT-ORIENTED PROGRAMMING GOES VIRAL C++, 1983. C++ 2.0 1989. New features in 2.0 included multiple inheritance, abstract classes, static member functions, const member functions, and protected members. Java, initiated 1991. First version, 1995. C# & .NET, first initiated, 1999. First released: 2002.
  • 55. ML-2000 TALKS START, 1993 Should we add OO capabilities?
  • 56. OTHER WILD MLS APPEAR Standard ML of NJ => MLj => SML.NET CAML, 1985 => Caml Light, 1991 => Caml Special Light, 1995 => OCaml, 1996 => F#, 2005 ANU ML, late 80s Harlequin ML, 1996 Moscow ML, 1994 PolyML MLKit Mlton MLWorks SML ’97 QML
  • 57. 2000S
  • 60. Don Syme F# History, Today, Tomorrow talk SPLASH 2010 So much of what I loved about programming, was just missing from the experience of programming in Java. And that, in a sense, was a big driving motivation. And as C# 1.0 occurred, I was faced with a desperate situation: that I might actually have to do all my programming in either Java or C# 1.0. And I actually had to do personally do something about this at Microsoft, either by improving C# to the point that it was what I wanted to use, or by working on a new language.
  • 61. PUSH FOR .NET GENERICS MAKE IT IN TO C# 2.0, 1999-2004
  • 62. BUG FIXES FOR GENERICS, 2002- 2004
  • 63. IN WHICH WE FINALLY MEET THE HERO OF OUR STORY: F#
  • 64. A FEW PAPERS RELATED TO F# Tomas Petricek and Don Syme, The F# Computation Expression Zoo, in Proceedings of Practical Aspects of Declarative Languages, ACM, 2014. Don Syme, Kenji Takeda, Keith Battocchi, Donna Malayeri, and Tomas Petricek, Themes in Information-Rich Functional Programming for Internet-Scale Data Sources, ACM, 24 January 2013. Don Syme, Keith Battocchi, and Gordon Hodgenson, Creating a Type Provider (F#), Microsoft, 12 January 2013. Don Syme, Adam Granicz, and Antonio Cisternino, Expert F# 3.0, Apress, 7 November 2012. Don Syme, Keith Battocchi, Kenji Takeda, Donna Malayeri, Jomo Fisher, Jack Hu, Tao Liu, Brian McNamara, Daniel Quirk, Matteo Taveggia, Wonseok Chae, Uladzimir Matsveyeu, and Tomas Petricek, F#3.0 - Strongly-Typed Language Support for Internet- Scale Information Sources, no. MSR-TR-2012-101, 21 September 2012. Tomas Petricek, Don Syme, and Alan Mycroft, Extending Monads with Pattern Matching, inProceedings of Haskell Symposium, ACM, 2011. Tomas Petricek and Don Syme, Joinads: a retargetable control-flow construct for reactive, parallel and concurrent programming, in Proceedings of Practical Aspects of Declarative Languages, ACM, 2011. Donald Syme, Tomas Petricek, and Dmitry Lomov, The F# Asynchronous Programming Model, inIn Proceedings of Principles and Applications of Declarative Languages, 2011, ACM SIGPLAN, 2011. Tomas Petricek and Donald Syme, Collecting hollywood's garbage: avoiding space-leaks in composite events, in ISMM '10 Proceedings of the 2010 international symposium on Memory management , ACM SIGPLAN, 2010. Don Syme, The F# Draft Language Specification, Microsoft, 1 February 2009.
  • 67. TYPE PROVIDERS, 2009 ”Let’s #r a database!” 2010: Jomo Fisher prototypes the Excel and Freebase type providers 2011: Decided to make it a feature of F# 3.0. Was called “awesome typing.”
  • 68. 2010S
  • 69. F# 2.0 INCLUDED IN VISUAL STUDIO 2010! +
  • 70. F# IS OPEN SOURCED! 2010 Uses the Apache license
  • 72. FSHARP.ORG, 2012 Created by Phil Trelford, Tomas Petricek, Don Syme 2012: Early talks were fueled by much tea and cake. Domain purchased, and folks joined by emailing. 2014: Formally organized. 2015: Board elections held; 501c(3) Charitable organization. 2016: Nearly 1000 members, training programs, working groups (join!).
  • 74. F# MOVED TO GITHUB, 2015
  • 78. TODAY: TYPE PROVIDERS ARE BLOSSOMING + many more!
  • 79. AND BY TYPE PROVIDERS, I MEAN THE COMMUNITY. http://fsharp.org, FSSF Slack F# Weekly http://fsharpforfunandprofit.com F# Conf videos c4fsharp.net fssnip.net #fsharp on twitter GitHub.com/fsprojects Google groups
  • 80. A HISTORY OF F# FROM EUCLID TO TYPE PROVIDERS Rachel Reese @rachelreese rachelree.se

Editor's Notes

  • #2: This is more a general history of computing, with F# as an end goal.
  • #4: Apparently ML came out of nowehere.
  • #6: Euclid's Elements introduced axiomatic method. Euclid arranged them into a single, coherent logical framework that we still use today: definition, axiom, theorem, and proof.
  • #7: He built a mechanical calculating machine, wanted to build one that could manipulate symbols to prove theorems. First step is a clean formal language.. Spends much of his life on that. (also discovers calculus, or Newton does)
  • #8: Charles developed a “difference engine”, then an “analytical engine” to make calculations. Analytical engine was designed to use punch cards. Ada wrote a program to calculate Bernoulli numbers First computer program! There’s also a steampunk graphic novel based on them…
  • #9: Lots of formalization and notation happening now. Frege invented axiomatic predicate logic, also introduced the concept of currying. ---- 1889: Peano presents his axioms around the natural numbers. 1891: He started the Formulario Project: an "Encyclopedia of Mathematics", with all known formulae & theorems. New notation invented by Peano. Peano also became frustrated with publishing delays (he demanded that formulae be printed on one line) that he buys a printing press.
  • #10: Students: Hermann Weyl, Emanuel Lasker, Ernst Zermelo, Carl Gustav Hempel, Haskell Curry. John von Neumann was his assistant. Social circle included Emmy Noether, Alonzo Church, Moses Schönfinkel.
  • #11: Hung out with Hilbert 1914 to 1924. Invented Combinatory logic, including further developing Frege’s concept of what we now call currying. This was his first paper. Went mad, spent time in a sanitorium in Moscow.. After he was released, he ended up dying in poverty His neighbors burned all his papers for heat.
  • #12: This is generally reckoned the most successful and deeply considered compilation of open problems ever to be produced by an individual mathematician.
  • #13: Bertrand Russell and Alfred Whitehead make an attempt to describe the foundations of math from first principles.
  • #17: It proved definitively that Principia Mathematica could never achieve its goal: for any set of axioms and rules, either the system is inconsistent, or there are some truths that cannot be deduced from them. This answers part 1 and 2 of Hilbert's 2nd problem. 1930: Announces result at Second Conference on Epistemology of the Exact Sciences (September 5-7). 1931: publishes Uber formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme.
  • #18: Alfred Tarski's presents his undefinability theorem on the formal undefinability of truth. Proved 1936.
  • #19: More generally: Tarski says truth in the standard model of a system cannot be defined within the system. Gödel is wicked smart: He also discovered the undefinability theorem in 1930 (obv. before 1936), in the middle of proving his incompleteness theorems, but never bothered to publish. Wrote about it in a 1931 letter to John von Neumann.
  • #20: Turing shows that there is no algorithm to solve the halting problem.
  • #21: First he has to define a computer and program (a Turing Machine!) Then shows => halting problem is undecidable over Turing machines. Alan Turing, "On computable numbers, with an application to the Entscheidungsproblem", Proceedings of the London Mathematical Society, Series 2, 42 (1936-7), pp 230–265.
  • #22: Church's proof that Hilbert's Entscheidungsproblem is unsolvable
  • #23: (this is also part 3 of Hilbert’s second problem.) Schönfinkel attempted to advance the answer in his second paper. Before the question could be answered, the notion of "algorithm" had to be formally defined.
  • #24: Alonzo Church, "An unsolvable problem of elementary number theory" 1936  introduced the lambda calculus. Alonzo Church, "A note on the Entscheidungsproblem" Alan Turing, "On computable numbers, with an application to the Entscheidungsproblem" 1936  Introduced Turing machines. Same paper! 1936, both showed that general solution to it was impossible. Max Newman (prof at Cambridge) got Turing interested in the Entscheidungsproblem when he gave a lecture on the incompleteness theorem. Intro'd Turing and Church (Turing became Church’s grad student) Newman hired Turing much later when he was head of computing machinery lab at Manchester.
  • #26: Z1 mechanical, only worked for a few minutes at most. German. Konrad Zuse developed. Manchester baby came out of Newman hiring Turing. First Draft of a Report on the EDVAC, von Neumann. 1945. ==> puts all ENIAC and such inventions in the public domain. ==> Meant nothing could be patented. Also, some concepts in report pre-dated von Neumann’s joining the team, but only his name on the report, so he got full credit. These did NOT go over well. First commercial application of computer: payroll for a bakery in UK.
  • #27: Worked with Hilbert studying math after his thesis. Same grade school as Edward Teller, Paul Erdős in Hungary + more. Rode down the Grand Canyon on a mule in a 3-piece pinstripe suit. At Princeton, played loud music on gramophone. Would distract neighboring offices, including Albert Einstein, from their work. Pic is him with Oppenheimer, in front of EDVAC or maybe MANIAC (1954)
  • #28: John Backus developed it. First widely-used programming language. Most recent release, Fortran 2008. First compiler for it: 1957. It had the first optimized compiler.. Folks didn’t want to use something that was slower than hand coding.
  • #29: Flow-matic, Grace Hopper. It heavily influenced COBOL. May, 1959: Jean Sammet and Grace Hopper and about 40 others attend a meeting at the pentagon to discuss creating a common programming language for businesses. Many committees later, COBOL is born. Sammet worked for Sperry Rand, which is where she started to learn to program.
  • #30: Backus, Alan Perlis. 8 total folks meet to define ALGOL. 1958. “algorithmic language”. Almost IAL (International Algebraic language) but Alan Perlis says “unspeakable” and “pompous acronym”. Created for Z22 (1955), 7th version of Z1 line in Germany. Not 22nd. Z1-Z5, then Z11, then Z22. (22 used vacuum tubes, major upgrade.) ALGOL 60, Tony Hoare remarked: "Here is a language so far ahead of its time that it was not only an improvement on its predecessors but also on nearly all its successors." (Tony Hoare created NULL, 1965 because of ALGOL W. Also quicksort.) Edsger W. Dijkstra wrote a compiler for it, separately. Peter Landin, John McCarthy assist with defining algol-60. Scheme (a Lisp) uses the block structure and lexical scope of ALGOL, also titles their documents: "Revised Report on the Algorithmic Language Scheme" because <3 ALGOL.x
  • #31: Lisp was created as a practical mathematical notation for computer programs, influenced by lambda calc (but with variable assignment.) Easy to use, learn: it has an interactive implementation. McCarthy specified 1958, published 1960: "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I" ("Part II" never published). Jean Sammet: “LISP is unusual, in the sense that it clearly deviates from every other type of programming language that has ever been developed.. The theoretical concepts and implications of LISP far transcend its practical usage.” (great back-handed compliment.)
  • #32: Not much is actually known about Mervyn Pragnell.. Peter Landin, after a mediocre finish at university didn’t have a plan for a job. Spent his time reading at a local reference library. Was having coffee one afternoon at local café, and a voice boomed out, “I say, didn't I see you reading Principia Mathematica in the reference library this morning?” It was Mervyn, recruiting him to join. Rod Burstall was looking for a logic text in a London bookshop. Asked the wrong person, who responded, “I’m not a shop assistant,” and walked away in a huff. Later returned and invited him to join.
  • #33: So this is the state of computing at the end of the 1950s. (well early 70s, but nothing else here is relevant to us.. :p) Programming Languages, History and Future, Jean Sammet.
  • #35: 1951: Wrote a checkers program for PilotACE. 1951: Made Manchester Mark 1 play Baa Baa Black Sheep. 1952: developed a love-letter generator on Manchester Mark 1 (successor to Manchester Baby) using a random number generating algorithm. All signed M.U.C. (Manchester U Computer) Worked on time-sharing (w/ Roger Penrose), continuations, and denotational semantics. Friends with Alan Turing at University. 1963 developed CPL (“Cambridge or Combined programming language” or “Christopher’s programming language”) Has functions as first-class citizens! CPL -> BCPL (basic CPL) -> B -> C.. Coined the term “Currying” 1967 lecture notes: introduced terms:  "R-value" and "L-value", "ad hoc polymorphism", "parametric polymorphism", and "referential transparency".
  • #36: 1960-1964, worked for Christopher Strachey as his only employee while CS was consulting. Worked for Univac (Sperry-Rand) in 1965, but ultimately returned to England. He was very influenced by LISP. He taught Tony Hoare ALGOL-60.  First to realize that lambda calc could be used to model a programming language! He left computer science mid-1970s because it was getting “too theoretical”.
  • #37: Each one of these could be a whole talk.
  • #38: Described 1966 (in the next 700 languages).. never implemented. PAL (Pedagogic Algorithmic Language) at MIT has many of the concepts. Created by Landin and James H. Morris, Jr. This was used in BCPL as an intermediate code interpreter.
  • #39: When g1 is called and completes, control returns to the point in M where g1 was called, so that evaluation continues in M. With g2, however, it doesn’t return to where it was called, but instead to where f was called. ==> using J gives a quick exit after g2. Similar to “return”.
  • #40: Much of this is from the Olivier Danvy talk: ICFP 2009. Peter Landin Memorial. Peter Landin is one of the founding fathers of everything <lambda> in computer science.
  • #41: 1924 discovered Principia Mathematica, led him to study combinatory logic under Hilbert, developed the concepts that Schönfinkel invented. He devoted his whole career to it, and became known for it. He worked on ENIAC. 1933, learned of the Kleene-Rosser Paradox (that lambda calc and combinatory logic are inconsistent) but didn’t give up even then saying that he did not want to "run away from paradoxes."
  • #42: Linguistics text using Schönfinkelization.
  • #43: Basically all this logic that we’ve been working on and formalizing means that we can use programs for proving theorems! omg. Howard is a mathematician (a proof theorist) (b. 1926), who studied for his Ph.D. under Saunders Mac Lane (who founded Category Theory).
  • #45: Purpose of proof assistants? (automating mathematics, assisting mathematicians, for proofs of correctness of software. When you want to have confidence in what you've written.
  • #46: Logic for Computable Functions: description of a machine implementation. Stanford University Stanford, CA, USA ©1972  Published 1972, but Dana Scott proposed in 1969. Robin Milner’s paper was basically a “user manual”. This version, from Stanford basically just describes the interactive theorem prover they’ve created.
  • #47: Arthur John Robin Gorell Milner Won a scholarship to Eton for math. Scholars who specialized in maths were expected to get 100% on the weekly problems. He passed the exam to enroll in King’s College, Cambridge, but first went into the military for two years. Upon return, he needed to re-learn a bunch of maths. 1956, took a class on the EDSAC. 1957, graduated Cambridge. 1958, Taught maths at a grammar school. 1960, took a programming job at Ferranti. 1963, started lecturing at City University, London. Met the Study Group folks. 1971, joined Dana Scott’s group (Stanford) and started working on the LCF system.
  • #48: Created by Rod Burstall & John Darlington, 1977. Contained set comprehensions (as shown.)
  • #49: NPL grew into Hope. Has algebraic data types & pattern matching. Hope loses NPL’s cool “set comprehensions”, but later functional languages pick the idea up as “list comprehensions”.
  • #50: Hindley’s 1969 paper, Milner’s 1978 paper. POPL ‘82 algorithm W announced. HM's notable properties: completeness the ability to assign the most general type without any type annotations or other hints supplied by the programmer. 
  • #51: 1973, Milner is appointed to a lectureship at Edinburgh, then a Personal Chair 1984. (With no Ph.D.! But 20+ doctoral students over his life.. ) and starts working on a new version on LCF. He hires Malcolm Newey (and others) as research assistants to work on it. Stanford LCF had two problems: -- limited memory means the proofs had to be small, and -- there was a fixed set of proof commands that wasn’t easily extendable. He solved 2) by introducing a meta-language, ML!! Milner wanted the theorem proving system. ML an afterthought. Reason -> meta-meta language.
  • #52: ML ==> based very much on ISWIM Implemented in Stanford Lisp. So ML translated to Lisp, then that was interpreted. It was Sllllooooow. Around this time, the main players are in place for the Laboratory for Foundations of Computer Science -- Robin Milner, Rod Burstall, Gordon Plotkin, Matthew Hennessy 1987, Officially founded.
  • #54: Luca created a compiler to be used on the Edinburgh Dept. of CS VAX machine. So he called it VAX ML. It's a lot faster (pascal to VAX machine code). Plus it has garbage collection! Started distribution 1981. ==> other MLs starting to appear makes Milner nervous. What he wanted was to work on a theorem prover, he needs the language it uses to be very stable.
  • #55: Starts holding meetings to standardize ML. 83, 84, 85. Standardization happens 86-89. SML ‘90. Combines ideas in VAX ML, LCF ML, Edinburgh ML, & HOPE. * Edinburgh ML was a project to rewrite VAX ML compiler using ML. This takes so long because no email! This is mostly done with actual paper correspondence.
  • #58: The name "C sharp" was inspired by musical notation where a sharp indicates that the written note should be made a semitone higher in pitch. Like C++ is "better".
  • #59: Meetings 93-00 about next gen ML. Included topics like "do we add OO?” No consensus!
  • #60: “A wild ML appears. You used standardization. It was not effective.” Gerard Huet led the Formel project which developed CAML. ”Formal" in French. Also, "for ML" “Categorical Abstract Machine Language”  Xavier Leroy smokes Camels. :D MLj is on JVM  internal development at Persimmon IT until 1999, until the company folded. Many in the MLj team moved to Microsoft Research. (Including Andrew Kennedy) So they started building SML.NET. No OO there. SML ‘97 was next version of SML. Milner didn’t get his fixed standard.
  • #61: The turn of the millenium.
  • #62: Don’s history: Malcom Newey was Don’s advisor for his honor’s project at ANU. Malcolm who helped Milner build Edinburgh LCF. He used ANU ML. Then came to Cambridge for a Ph.D. on theorem proving. Syme, D.: Reasoning with the formal definition of Standard ML in HOL. In Proc. Higher Order Logic Theorem Proving and its Applications, LNCS 780. (1993) Syme, Donald. Declarative Theorem Proving for Operating Semantics. Ph.D. thesis, University of Cambridge, 1998.
  • #63: After his thesis, Don starts working at MSR. So he has a heavy background in theorem proving, MLs, and now works for MSR. Pizza, GJ  both Java with Generics. Pizza is functional. MLj <- ML on JVM. Heavily on Don’s mind when he joined MSR in 1998.
  • #64: Not that Java or C# are bad, just bad for Don. :)
  • #65: Had to do a full prototype of both .NET and C# generics to even get it on the priorities list. Running CLR code in the database were given higher priority. So much pushback from product teams. => “Surely we don't ever need more than 5 generic types. Can't we just hard wire -- into the virtual machine or something -- List<T> and a couple of others.” => “Surely we never need generic methods. Can't we just do generic classes?” “But in the end we did a very architecturally complete implementation of generics for the common intermediary language, and for C#, addressing all sorts of issues, like debugging and profiling, and the interaction with remoting, application domain, software isolated processes in .NET, very major architecture interactions that had to be dealt with. And pre-compilation as well.” (Has everyone seen the comparisons with “well, actually” and “can’t you just”?)
  • #66: Not winning = No generics in C# 2.0? No LINQ in C# 3.0? No TPL in C# 4.0? No Async in C# 5.0? No F#? Ultimately, an erasure model of generics would have been adopted, as for Java, since the CLR team would never have pursued a in-the-VM generics design without external help. Due to Don and Andrew Kennedy. But fixing C# in the end wasn’t enough.
  • #67: First lines of code in 2002. (these are not those. ) F# is a complete re-implementation of a Caml-like language. Many talks with Caml team, especially Xavier Leroy. Xavier and others also suggested we experiment with language design instead of just implementing OCaml, which ultimately led to many good things.
  • #69: The zip here that you can download actually includes all the source code. But not OS, cause not taking contributions.
  • #70: Entirely due to Andrew Kennedy. His 1997 paper showed it could be done with examples in SML. Relational Parametricity and Units of Measure
  • #71: People ask, "What are you working on?" Don: “Everything! Bringing everything into the programming language!” Was awesome enough that Microsoft invested in TPs, even in the middle of the big Windows 8 push.
  • #73: Microsoft turned F# 1.0 into Visual F# 2.0 as part of investing in more advanced computing (driven by requests from major finance industry customers but also more widely). Other successful technologies in that space include the .NET Task Parallel Library, it’s C++ equivalent, the .NET parallel collections. Craig Mundie (CTO of MSR) and S. Somasegar (DevDiv) were key decision makers Legitimized the language. So it’s like OCaml but with better tooling and better maintained learning resources. :p
  • #74: This pic is Don actually hitting enter to push code live. First MS language to be open-sourced! Code hosted on CodePlex...
  • #75: This is where I joined. ;-) 2011, Progressive F# Tutorials starts in London. 2012 they come to NYC. Jet.com's CTO also attended and made the choice to use F# then.
  • #77: Around 2012 the solution was to “set F# free as a language, and keep investing in the Visual F# Tools for enterprise use”.  This involves splitting “F#” (language) and “Visual F# Tools”  (packaging and tools) much more carefully and investing in making F# properly open source and cross-platform. Initially Don expected only a handful of people would use F# cross-platform and contribute to it.  It’s now rapidly becoming the normal way to use it – a really incredible success story that’s caught us by surprise   The Visual F# IDE Tool, .NET itself and C# have all followed suit to be open source and cross-platform.
  • #78: Lincoln Atkinson, was part of F# team at Microsoft.
  • #80: Community-driven!
  • #82: Tomas, Gustavo, & Evelina Fsharp.Data stuffs. Howard, R; Isaac, the Azure ones; Ross, ridiculousness; Dmitry's is distinctive for its use of T-SQL (rather than LInQ or simple ADO.NET) Tomas really showed people how to auth TPs Keith did a bunch of work with Don on the "provides types" set of classes that for sort of a TP dev SDK
  • #83: Resources.