]> git.llucax.com Git - z.facultad/75.00/presentacion.git/blob - presentacion.rst
3e396031f877d9310038fb392b334e5db529dd98
[z.facultad/75.00/presentacion.git] / presentacion.rst
1
2 ==========================
3 Recolección de Basura en D
4 ==========================
5
6 :Autor: Leandro Lucarella
7 :Fecha: Diciembre 2010
8 :Organización: FIUBA
9
10
11 Introducción
12 ==============================================================================
13
14 Presentación
15 --------------------------------------------------
16
17 Motivación
18 ~~~~~~~~~~
19 * Recolección de basura
20 * Lenguaje de programación **D**
21 * Utilidad → Software Libre → Contribución
22
23
24 Recolección de Basura
25 --------------------------------------------------
26
27 Introducción
28 ~~~~~~~~~~~~
29 ¿Qué?
30
31 * Administración automática de memoria
32
33 ¿Para qué?
34
35 * Simplificar interfaces
36 * Mejorar eficiencia (**!**)
37 * Evitar errores de memoria
38
39   * *Dangling pointers*
40   * *Memory leaks*
41   * *Double free*
42
43 ¿Cómo?
44
45 Algoritmos clásicos
46 ~~~~~~~~~~~~~~~~~~~
47 * Conteo de referencias
48 * **Marcado y barrido**
49 * Copia de semi-espacio
50
51 .. raw:: latex
52
53     \multiinclude[format=pdf,graphics={height=4.5cm}]{img/mark-sweep}
54
55 .. dummy: para que ande bien el raw de arriba
56
57 Estado del arte
58 ~~~~~~~~~~~~~~~
59 * Medio siglo de investigación y desarrollo (3000+ publicaciones)
60 * Objetivo
61
62   * ↓ Tiempo total de ejecución
63   * ↓ Cantidad de recolecciones
64   * ↓ Tiempo de recolección
65   * ↓ **Tiempo (máximo) de pausa**
66
67 * Técnicas
68
69   * Particiones
70   * **Concurrencia**
71   * Organización de memoria
72   * **Precisión**
73   * Análisis estático
74
75
76 El lenguaje de programación D
77 --------------------------------------------------
78
79 Características generales
80 ~~~~~~~~~~~~~~~~~~~~~~~~~
81 * Sintaxis tipo C/C++
82 * Compilado
83 * Sistema de tipos estático
84 * Multi-paradigma
85
86 Paradigmas
87 ~~~~~~~~~~
88 * Programación de bajo nivel (*system-programming*) ← C/C++
89
90   * ``asm``
91   * ``union``
92   * ``extern (C)``
93   * ``malloc()``
94
95   → Conservativo + Manipulación de *root set*
96
97 * Programación de alto nivel ← Python/Ruby/Perl
98
99   * *GC*
100   * ``T[]``, ``T[K]``
101
102   → Punteros interiores
103
104 * Orientación a objetos ← Java
105
106   * ``~this()``
107
108   → Finalización
109
110
111
112
113
114
115
116
117
118
119
120
121 Recolección de Basura en D
122 ==============================================================================
123
124 Requerimientos
125 --------------------------------------------------
126
127 Según paradigma
128 ~~~~~~~~~~~~~~~
129 * Programación de bajo nivel
130
131   * ``asm``
132   * ``union``
133   * ``extern (C)``
134   * ``malloc()``
135
136   → Conservativo + Manipulación de *root set*
137
138 * Programación de alto nivel ← Python/Ruby/Perl
139
140   * ``T[]``, ``T[K]``
141
142   → Punteros interiores
143
144 * Orientación a objetos ← Java
145
146   * ``~this()``
147
148   → Finalización
149
150
151 Implementación Actual
152 --------------------------------------------------
153
154 Organización del heap
155 ~~~~~~~~~~~~~~~~~~~~~
156 .. image:: img/heap.pdf
157     :height: 7cm
158
159 Diapositiva 2
160 ~~~~~~~~~~~~~
161 Diapositiva 2
162
163
164 Lo Bueno, lo Malo y lo Feo
165 --------------------------------------------------
166
167 Diapositiva 1
168 ~~~~~~~~~~~~~
169 Diapositiva 1
170
171 Diapositiva 2
172 ~~~~~~~~~~~~~
173 Diapositiva 2
174
175
176
177 Modificaciones Propuestas
178 ==============================================================================
179
180 Precisión
181 --------------------------------------------------
182
183 Diapositiva 1
184 ~~~~~~~~~~~~~
185 Diapositiva 1
186
187 Diapositiva 2
188 ~~~~~~~~~~~~~
189 Diapositiva 2
190
191
192 Concurrencia
193 --------------------------------------------------
194
195 Diapositiva 1
196 ~~~~~~~~~~~~~
197 Diapositiva 1
198
199 Diapositiva 2
200 ~~~~~~~~~~~~~
201 Diapositiva 2
202
203
204 Optimizaciones
205 --------------------------------------------------
206
207 Diapositiva 1
208 ~~~~~~~~~~~~~
209 Diapositiva 1
210
211 Diapositiva 2
212 ~~~~~~~~~~~~~
213 Diapositiva 2
214
215
216
217 Resultados
218 ==============================================================================
219
220 Banco de Pruebas
221 --------------------------------------------------
222
223 Diapositiva 1
224 ~~~~~~~~~~~~~
225 Diapositiva 1
226
227 Diapositiva 2
228 ~~~~~~~~~~~~~
229 Diapositiva 2
230
231
232 Tiempo de Stop-The-World
233 --------------------------------------------------
234
235 Diapositiva 1
236 ~~~~~~~~~~~~~
237 Diapositiva 1
238
239 Diapositiva 2
240 ~~~~~~~~~~~~~
241 Diapositiva 2
242
243
244 Tiempo de Pausa Real
245 --------------------------------------------------
246
247 Diapositiva 1
248 ~~~~~~~~~~~~~
249 Diapositiva 1
250
251 Diapositiva 2
252 ~~~~~~~~~~~~~
253 Diapositiva 2
254
255
256 Tiempo de Ejecución
257 --------------------------------------------------
258
259 Diapositiva 1
260 ~~~~~~~~~~~~~
261 Diapositiva 1
262
263 Diapositiva 2
264 ~~~~~~~~~~~~~
265 Diapositiva 2
266
267
268 Conclusión
269 ==============================================================================
270
271 Conclusión
272 --------------------------------------------------
273
274 Resumen
275 ~~~~~~~
276 * Recolección de basura → Inagotable
277 * D → Multi-paradigma → Desafío
278 * Recolección de basura en D → Fértil
279 * Mejoras propuestas → Efectivas
280 * Resultados → Positivos: Esperados + Inesperados
281
282 Problemas, limitaciones y Puntos Pendientes
283 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
284 * Predicción de *early collection*
285 * Explosión de uso de memoria con *eager allocation*
286 * Experimentar con ``clone(2)``
287 * Eficiencia de marcado
288
289 Trabajos Relacionados
290 ~~~~~~~~~~~~~~~~~~~~~
291 * *Memory Management in the D Programming Language*
292
293   Vladimir Panteleev. Proyecto de licenciatura, Universitatea Tehnică
294   a Moldovei, 2009.
295
296 * *Integrate Precise Heap Scanning Into the GC*
297
298   David Simcha (GC + diseño) y Vincent Lang (compilador). No formal, *bug
299   report*, 2009-2010.
300
301 Trabajos Futuros
302 ~~~~~~~~~~~~~~~~
303 * Organización de memoria
304 * Barrido
305 * Precisión
306 * Concurrencia → *Lock* **global**
307 * Movimiento
308
309 Preguntas
310 ~~~~~~~~~
311 ¿?
312
313 Fin
314 ~~~
315 ¡Gracias!
316
317 .. vim: set et sw=4 sts=4 spell spelllang=es :