Model opening, using, and closing a resource with explicit state.

resource-cleanup Cleanup code should leave a resource in a known final state.

Resource Cleanup

chunk
ResourceCleanup.kt
Replay: real traced execution (multi-file project)
fun main() {
    val chunk = "data"
    var state = "open"
    val opened = state == "open"
    val readText = "read:$chunk"
    state = "closed"
    val ready = state == "closed"

    println("opened=$opened")
    println("read=$readText")
    println("state=$state")
    println("ready=$ready")
}
fun main() {
    val chunk = "line"
    var state = "open"
    val opened = state == "open"
    val readText = "read:$chunk"
    state = "closed"
    val ready = state == "closed"

    println("opened=$opened")
    println("read=$readText")
    println("state=$state")
    println("ready=$ready")
}
fun main() {
    val chunk = "text"
    var state = "open"
    val opened = state == "open"
    val readText = "read:$chunk"
    state = "closed"
    val ready = state == "closed"

    println("opened=$opened")
    println("read=$readText")
    println("state=$state")
    println("ready=$ready")
}
  1. chunk ← data, state ← open, opened ← true, readText ← read:data

    1fun main() {2    val chunk→ data = "data" //@chunk="line", "text"3    var state→ open = "open"4    val opened→ true = stateopen == "open"5    val readText→ read:data = "read:$chunkdata"6    state→ closed = "closed"7    val ready→ true = stateclosed == "closed"89    println("opened=$openedtrue")10    println("read=$readTextread:data")11    println("state=$stateclosed")12    println("ready=$readytrue")13}
    outputopened=true
    read=read:data
    state=closed
    ready=true
  1. chunk ← line, state ← open, opened ← true, readText ← read:line

    1fun main() {2    val chunk→ line = "line"3    var state→ open = "open"4    val opened→ true = stateopen == "open"5    val readText→ read:line = "read:$chunkline"6    state→ closed = "closed"7    val ready→ true = stateclosed == "closed"89    println("opened=$openedtrue")10    println("read=$readTextread:line")11    println("state=$stateclosed")12    println("ready=$readytrue")13}
    outputopened=true
    read=read:line
    state=closed
    ready=true
  1. chunk ← text, state ← open, opened ← true, readText ← read:text

    1fun main() {2    val chunk→ text = "text"3    var state→ open = "open"4    val opened→ true = stateopen == "open"5    val readText→ read:text = "read:$chunktext"6    state→ closed = "closed"7    val ready→ true = stateclosed == "closed"89    println("opened=$openedtrue")10    println("read=$readTextread:text")11    println("state=$stateclosed")12    println("ready=$readytrue")13}
    outputopened=true
    read=read:text
    state=closed
    ready=true