avoid pain and suffering and fly around on a chocobo or something
0.0.0-pre-alpha-insanity-wolf
aka Demand-Driven Computation
Temporal determinism means that all actions within a system are explicitly associated with and performed within logical instants of time, providing consistent and predictable behavior of operations in relation to time.
- How many possible behaviors are indicated by the following five lines of code?
- How easy is it to think through the possibilities and their potential impact on an application at scale?
- How much time does it cost you to think through this?
console.log(Date.now())
console.log(Date.now())
console.log(new Date().toISOString())
console.log(Date.now())
console.log(new Date().toISOString())I humbly admit - I am not positive how many possibe behaviors are expressed by this code, and find it quite hard to consider and calculate. My best guess at a correct answer is "4 infinities". Here are some strategies of counting the possible behaviors. Take my work with a grain of salt!
- Do all the logged values refer to the same millisecond in time? There are 2 possibilities.
- Does each logged value refer to the same millisecond as the former? There are 16 possibilities.
- Is each logged value the same, successive (1ms apart) or any amount further apart? There are 243 possibilities.
- What is the distance between each logged value? There are 4 infinities of possibilities.
The same logic, expressed with semantics of temporal determinism results in a program with only one behavior: it will log 5 values, in two different formats, in the order they are composed, with each value referring to the same millisecond of time. Moreover, this can be performed with at most two-fifths the effort, because there is only need for the implementation to check the current millisecond of time once, and to format it to ISO string once.
// TODO: this can be nicer
;[
unix_timstamp_ms,
unix_timestamp_ms,
is8601_datetime,
unix_timestamp_ms,
is8601_datetime
]
.reduce(
(acc, x) => Event.chain (log) (Effect.tag (x) (acc)),
Effect.of(0)
)Action is an operation performed in an instant of time, that interacts with the real world.
Effect is an Action that impacts the real world, also known as a 'side effect'.
Sample is an Action that examines a property of the real world. A Sample does not impact the real world.
Occurrence is a pair of Instant and Value; a value at an instant in time.
Timeline is a sequence of Occurrence.
Event is a Timeline with a Dynamic, completed, that indicates the potential for future occurrences of the Event.
Dynamic is a Sample with an Event of its updates. In the instants of its updates, its value is updating, and is updated thereafter.
