48 lines
1.7 KiB
Markdown
48 lines
1.7 KiB
Markdown
-- # The Meaning of Programs
|
|
|
|
-- What is computation? what a computer does.
|
|
|
|
-- computation environment:
|
|
-- * machine
|
|
-- * language
|
|
-- * program
|
|
--
|
|
-- Fundamentally, programming is about ideas: a program is a snapshot of
|
|
-- an idea, a codification of the mental structures of the programmer(s)
|
|
-- involved.
|
|
--
|
|
-- ## The Meaning of "Meaning"
|
|
--
|
|
-- /semantics/ is the connection between words and meanings: while "dog"
|
|
-- is an arrangment of shapes on a page, an actual dog is a very separate
|
|
-- things. Semantics relates concrete signifiers and abstract meanings,
|
|
-- and attempts to study the fundamental nature of the abstract meanings.
|
|
--
|
|
-- *Formal semantics* is the attempt at formalising the meanings of
|
|
-- programmings, and using this formalisation to reason about
|
|
-- languages. In order to specify a programming language, we need to
|
|
-- define both its *syntax* (the representation) and its *semantics* (the
|
|
-- meaning).
|
|
--
|
|
-- Most languages lack a formal specification and opt to use a canonical
|
|
-- reference implementation. An alternative is to write a prose
|
|
-- specification, which is the approach of C++. A third approach is to
|
|
-- mathematically specify the language such that automated mathematical
|
|
-- analysis can be done.
|
|
--
|
|
-- ### Syntax
|
|
--
|
|
-- The language's syntax is what differentiates valid examples of code like
|
|
|
|
y x = x + 1
|
|
|
|
-- from nonsense like `$%EHI`. In general, a parser reads a string
|
|
-- (like "y x = x + 1") and turns it into an /abstract syntax
|
|
-- tree/. Syntax is ultimately only concerned with the surface
|
|
-- appearance of the program
|
|
|
|
-- ### Operational Semantics
|
|
|
|
-- A practical means of thinking about the meaning of a program is
|
|
-- *what it does*.
|