Rust编程语言的自动内存管理是否需要回收碎片内存?如果是这样,它是如何做到的?
我的理解是,它的类型系统(所有制类型,借款Rc,Arc)允许其确定性在编译时知道什么时候分配的内存块可以被释放.
但是,内存块是否可能在一个订单中分配,并以不同的顺序释放,从而导致碎片?如果这被阻止了,怎么样?如果确实发生了这种情况,那么如何有效地管理内存片段?如果他们进行碎片整理,那么使用的方法是什么?
如何从暂停功能启动协程并使其使用当前的示波器?(这样,直到启动的协程也结束,作用域才结束)
我想写类似下面的内容–
import kotlinx.coroutines.*
fun main() = runBlocking { // this: CoroutineScope
go()
}
suspend fun go() {
launch {
println("go!")
}
}
Run Code Online (Sandbox Code Playgroud)
但这有一个语法错误:“未解决的参考:启动”。似乎launch必须以下列方式之一运行-
GlobalScope.launch {
println("Go!")
}
Run Code Online (Sandbox Code Playgroud)
要么
runBlocking {
launch {
println("Go!")
}
}
Run Code Online (Sandbox Code Playgroud)
要么
withContext(Dispatchers.Default) {
launch {
println("Go!")
}
}
Run Code Online (Sandbox Code Playgroud)
要么
coroutineScope {
launch {
println("Go!")
}
}
Run Code Online (Sandbox Code Playgroud)
这些替代方法都不能满足我的需求。代码要么“阻塞”而不是“产生”,要么产生,但是父作用域在父作用域本身结束之前不会等待其完成。
我需要它在当前的父协程作用域中“生成”(启动),并且该父作用域应等待所生成的协程完成,然后结束自身。
我希望a launch内的简单内容suspend fun有效并使用其父范围。
我正在使用Kotlin 1.3和cotlinx-coroutines-core:1.0.1。
我已经读过Haskell实际上可以有运行时错误,尽管是静态类型和功能.但是,没有人说什么那些可能是运行时错误.谁知道?