Slide 1

Slide 1 text

Scala: Context & Observability

Slide 2

Slide 2 text

Context propagation explicit parameter implicit parameter

Slide 3

Slide 3 text

Thread-safe state on JVM AtomicRef ThreadLocal Every thread has its own local copy of the state which is not visible to the others Shared state safely updated by many threads using optimistic concurrency (CAS)

Slide 4

Slide 4 text

Context propagation on JVM ThreadLocal InheritableThreadLocal DynamicVariable

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Scope Lexical Dynamic Depends on location in source code Depends on method call graph

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Functional context propagation ReaderT / Kleisli (cats) IOLocal (cats-effect) Context functions (scala 3)

Slide 15

Slide 15 text

Context propagation with cats-mtl Ask Local Stateful read-only environment effect dynamic scope effect shared mutable state effect

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Local + log4cats demo

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

Local + log4cats + IOLocal demo

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Scala 3 Context Functions

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

linktr.ee/mbednarz