Sean Parent
VIDEO
Let’s rotate (cppcon six years ago); meme?
– Goal: No contradictions
A novice sees only the chessman; an amateur sees the board; a master sees the game
Entity notation
Witnessed Relationships: a relationship represented by an object
copyable and equality comparable
When an object is copied or moved any witnessed relationship is either maintained, severed, or invalidated
When an object is destructed any witnessed relationship is either severed, or invalidated
Safety
std::move()
is an unsafe operation
C++20
One new feature: concepts (joke about contracts)
Hoare Logic (paper from 1969, C.A.R Hoare)
Equality
Applying “Design by Contract”
Contracts
Preconditions (require)
Postconditions
Invariants
Concepts
A compile time constraint to select an appropriate operation
Contracts assert at runtime if an an operations
A runtime constraint to select an appropriate operation is know a pattern matching
No Raw Loops
The Game
Architecture is the art and practice of designing and constructing structures
Timer example
Registry
Container support these:
Add an object and obtain receipt
Use receipt to retrieve the object
iterate
Russian Coat Check Algorithm
Receipts are ordered
Coats always appended with stub
Binary search to retrieve coat
when more than half the slot are empty; compact the coats
Coats are always ordered receipt stubs
Coats ordered by insertion
Double entry bookkeeping
Every transaction twice
5 standard accounts: Asses, Capital, Liabilities, Revenues, and Expenses
This ensure the mechanical process of entering a transaction is done in two ways
Contradictions
unit tests expose contradictions
No Raw Synchronization Primitives
Use strong preconditions to move the issue to the caller
Setting a property
Code is redundant
– Different aspects of the same code
value is a*b when a changes
other_value is a*b when b changes
asking for troubles
Different, mutually exclusive relationships with non-local control
Implied last in wins relationship
An incidental algorithm; property convert to the correct value
property is not a simple property but a stream, trigger, or latch
or it’s just wrong
No Raw Pointers
https://sean-parent.stlab.cc for talks