Estoy diseñando un lenguaje. Primero, quiero decidir qué código generar. El idioma tendrá cierres léxicos y una herencia basada en prototipos similar a javascript. Pero no soy fan de gc y trato de evitar tanto como sea posible. Entonces, la pregunta: ¿existe una manera elegante de implementar cierres sin recurrir a asignar el marco de pila en el montón y dejarlo como recolector de basura?¿Cómo implementar cierres sin gc?
Mis primeros pensamientos:
- Uso recuento de referencias y la basura recogen los ciclos (en realidad no me gusta este)
- pila Uso de espagueti (ve muy ineficiente) formando
- límite de los cierres de algunos contextos de tal manera que, me puedo salir con una pila de direcciones de devolución y una pila de locales.
No utilizaré un lenguaje de alto nivel ni seguiré ninguna convención de llamadas, por lo que puedo destrozar la pila todo lo que quiera.
(Edit: Yo sé recuento de referencias es una forma de recolección de basura pero estoy usando GC en su significado más común)
¿Qué significa ser "no un fanático de GC"? Tenga en cuenta que el conteo de referencias es una forma de recolección de basura. Además, ¿qué significa "cierres léxicos" en una situación en la que "no ... seguirás las convenciones de llamadas"? – Allen
convenciones de llamadas como stdcall, fastcall, cdecl, thiscall ... – artificialidiot
@Allen El recuento de referencias no es una recolección de basura. Es una forma de gestión automática. No todo tipo de gestión de memoria automática es recolección de basura. –