Cuál es el concepto detrás de un CoroutineScope?

Después de leer la introducción y el javadoc de CoroutineScope Todavía estoy un poco confundido cuál es la idea detrás de unCoroutineScope es

La primera oración del documento "Define un alcance para nuevas corutinas". no me queda claro: ¿por qué mis corutinas necesitan un alcance?

Además, ¿por qué los constructores de corutina independientes están en desuso? ¿Por qué es mejor hacer esto?

fun CoroutineScope.produceSquares(): ReceiveChannel<Int> = produce {
    for (x in 1..5) send(x * x)
}

en lugar d

fun produceSquares(): ReceiveChannel<Int> = produce { //no longer an extension function
    for (x in 1..5) send(x * x)
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta