¿Usaría el conteo de referencia para determinar las garantías de determinismo que no son posibles con un recolector de basura?
La palabra garantiza es fuerte.Estas son las garantías que puede proporcionar con el recuento de referencias:
Sobrecarga de tiempo constante en una asignación para ajustar recuentos de referencia.
Tiempo constante para liberar un objeto cuyo recuento de referencia va a cero. (La clave es que no se debe disminuir los niños de ese objeto de inmediato;. En cambio hay que hacerlo perezosamente cuando el objeto se utiliza para satisfacer una petición de asignación futura)
constante de tiempo para asignar un nuevo objeto cuando la lista libre relevante no está vacía. Esta garantía es condicional y no vale mucho.
Aquí hay algunas cosas que no se puede garantizar con el recuento de referencias:
constante de tiempo para asignar un nuevo objeto. (En el peor de los casos, el montón puede estar creciendo, y dependiendo del sistema, la demora para organizar la nueva memoria puede ser considerable. O peor, puede llenar el montón y no poder asignar.)
All inalcanzable los objetos se recuperan y reutilizan mientras se mantiene el tiempo constante para otras operaciones. (Un contador de referencia estándar no puede recoger la basura cíclico. Hay una variedad de soluciones ingeniosas, pero por lo general se invalida las garantías de tiempo constante para operaciones simples.)
ahora hay algunos recolectores de basura en tiempo real que proporcionan garantías bastante interesantes sobre los tiempos de pausa, y en los últimos 5 años ha habido desarrollos bastante interesantes tanto en el recuento de referencias como en la recolección de basura. Desde donde me siento como un extraño informado, no hay un ganador obvio.
Algunos de los mejores trabajos recientes sobre conteo de referencias son por David Bacon de IBM y por Erez Petrank de Technion. Si quiere saber qué puede hacer un sistema moderno y sofisticado de conteo de referencias, busque sus papeles. Entre otras cosas, están usando múltiples procesadores de maneras increíbles.
Para obtener información acerca de la administración de la memoria y las garantías en tiempo real en general, consulte International Symposium on Memory Management.
¿Habría una respuesta diferente a esta pregunta para los lenguajes funcionales frente a los imperativos?
Porque ha preguntado por garantías, no. Pero para el manejo de la memoria en general, las compensaciones de rendimiento son bastante diferentes para un lenguaje imperativo (muchas mutaciones pero bajas tasas de asignación), un lenguaje funcional impuro (casi ninguna mutación pero altas tasas de asignación) y un lenguaje funcional puro y perezoso (muchos de la mutación — todos aquellos que se actualizan — y altas tasas de asignación).
"Todos los objetos inalcanzables se recuperan y reutilizan mientras se mantiene el tiempo constante para otras operaciones". Dado que la pregunta es sobre la creación de un nuevo idioma, puede optar por aplicar un montón unidireccional (por ejemplo, Erlang y Mathematica) para garantizar que todos los objetos inalcanzables se recuperen y reutilicen mientras se mantiene el tiempo constante para otras operaciones. –
Es posible implementar el recuento de referencias en tiempo real (a un precio): consulte "Recuento de referencias para sistemas duros en tiempo real", por T Ritzau –