2 ==========================
3 Recolección de Basura en D
4 ==========================
6 :Autor: Leandro Lucarella
12 ==============================================================================
15 --------------------------------------------------
19 * Recolección de basura
20 * Lenguaje de programación **D**
21 * Utilidad → Software Libre → Contribución
25 --------------------------------------------------
31 * Administración automática de memoria
35 * Simplificar interfaces
36 * Mejorar eficiencia (**!**)
37 * Evitar errores de memoria
47 * Conteo de referencias
48 * **Marcado y barrido**
49 * Copia de semi-espacio
53 \multiinclude[format=pdf,graphics={height=4.5cm}]{img/mark-sweep}
55 .. dummy: para que ande bien el raw de arriba
59 * Medio siglo de investigación y desarrollo (3000+ publicaciones)
62 * ↓ Tiempo total de ejecución
63 * ↓ Cantidad de recolecciones
64 * ↓ Tiempo de recolección
65 * ↓ **Tiempo (máximo) de pausa**
71 * Organización de memoria
76 El lenguaje de programación D
77 --------------------------------------------------
79 Características generales
80 ~~~~~~~~~~~~~~~~~~~~~~~~~
83 * Sistema de tipos estático
88 * Programación de bajo nivel (*system-programming*) ← C/C++
95 * Programación de alto nivel ← Python/Ruby/Perl
100 * Orientación a objetos ← Java
104 * Programación genérica y meta-programación ← C++
105 * Programación por contratos ← Eiffel
109 * Programación de bajo nivel (*system-programming*) ← C/C++
111 * **asm**, ``goto``, **align**, ``struct``, **union**, **link-compitble con C**,
114 * Programación de alto nivel ← Python/Ruby/Perl
116 * **GC**, module/import, ``delegate``, ``lazy``, *strings*, **arreglos dinámicos
117 y asociativos**, ddoc, inferencia de tipos (ltd), ``foreach``
119 * Orientación a objetos ← Java
121 * Más Java que C++: semántica de referencia, métodos siempre virtuales, herencia
122 simple + interfaces, clases anidadas, **destructores**... + Properties
124 * Programación genérica y meta-programación ← C++
126 * ``static if``, ``typeof``, (*variadic*) ``tamplate``, *CTFE*, (*string*)
127 ``mixin``\ s, expresiones ``is``
129 * Programación por contratos ← Eiffel
131 * Excepciones, ``assert``, pre/post condiciones, ``invariant``, ``unittest``,
132 ``scope``, inicialización garantizada, *RAII*, ``synchronized``
136 Recolección de Basura en D
137 ==============================================================================
140 --------------------------------------------------
144 * Programación de bajo nivel
151 → Conservativo + Manipulación de *root set*
153 * Programación de alto nivel ← Python/Ruby/Perl
157 → Punteros interiores
159 * Orientación a objetos ← Java
166 Implementación Actual
167 --------------------------------------------------
169 Organización del heap
170 ~~~~~~~~~~~~~~~~~~~~~
171 .. image:: img/heap.pdf
179 Lo Bueno, lo Malo y lo Feo
180 --------------------------------------------------
192 Modificaciones Propuestas
193 ==============================================================================
196 --------------------------------------------------
208 --------------------------------------------------
220 --------------------------------------------------
233 ==============================================================================
236 --------------------------------------------------
247 Tiempo de Stop-The-World
248 --------------------------------------------------
260 --------------------------------------------------
272 --------------------------------------------------
284 ==============================================================================
287 --------------------------------------------------
291 * Recolección de basura → Inagotable
292 * D → Multi-paradigma → Desafío
293 * Recolección de basura en D → Fértil
294 * Mejoras propuestas → Acierto
295 * Resultados → Esperados + Inesperados
297 Problemas, limitaciones y Puntos Pendientes
298 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
299 * Predicción de *early collection*
300 * Explosión de uso de memoria con *eager allocation*
301 * Experimentar con ``clone(2)``
302 * Eficiencia de marcado
304 Trabajos Relacionados
305 ~~~~~~~~~~~~~~~~~~~~~
306 * *Memory Management in the D Programming Language*
308 Vladimir Panteleev. Proyecto de licenciatura, Universitatea Tehnică
311 * *Integrate Precise Heap Scanning Into the GC*
313 David Simcha (GC + diseño) + Vincent Lang (compilador). No formal, *bug
318 * Organización de memoria
321 * Concurrencia → *Lock* **global**
332 .. vim: set et sw=4 sts=4 spell spelllang=es :