47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
 | |
| 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/.
 |