]> git.llucax.com Git - z.facultad/75.00/presentacion.git/blob - presentacion.rst
Versión inicial de la presentación
[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 * Programación de alto nivel ← Python/Ruby/Perl
96
97   * *GC*
98   * ``T[]``, ``T[K]``
99
100 * Orientación a objetos ← Java
101
102   * ``~this()``
103
104 * Programación genérica y meta-programación ← C++
105 * Programación por contratos ← Eiffel
106
107 .. r2b-note::
108
109     * Programación de bajo nivel (*system-programming*) ← C/C++
110
111       * **asm**, ``goto``, **align**, ``struct``, **union**, **link-compitble con C**,
112         **malloc**
113
114     * Programación de alto nivel ← Python/Ruby/Perl
115
116       * **GC**, module/import, ``delegate``, ``lazy``, *strings*, **arreglos dinámicos
117         y asociativos**, ddoc, inferencia de tipos (ltd), ``foreach``
118
119     * Orientación a objetos ← Java
120
121       * Más Java que C++: semántica de referencia, métodos siempre virtuales, herencia
122         simple + interfaces, clases anidadas, **destructores**... + Properties
123
124     * Programación genérica y meta-programación ← C++
125
126       * ``static if``, ``typeof``, (*variadic*) ``tamplate``, *CTFE*, (*string*)
127         ``mixin``\ s, expresiones ``is``
128
129     * Programación por contratos ← Eiffel
130
131       * Excepciones, ``assert``, pre/post condiciones, ``invariant``, ``unittest``,
132         ``scope``, inicialización garantizada, *RAII*, ``synchronized``
133
134
135
136 Recolección de Basura en D
137 ==============================================================================
138
139 Requerimientos
140 --------------------------------------------------
141
142 Según paradigma
143 ~~~~~~~~~~~~~~~
144 * Programación de bajo nivel
145
146   * ``asm``
147   * ``union``
148   * ``extern (C)``
149   * ``malloc()``
150
151   → Conservativo + Manipulación de *root set*
152
153 * Programación de alto nivel ← Python/Ruby/Perl
154
155   * ``T[]``, ``T[K]``
156
157   → Punteros interiores
158
159 * Orientación a objetos ← Java
160
161   * ``~this()``
162
163   → Finalización
164
165
166 Implementación Actual
167 --------------------------------------------------
168
169 Organización del heap
170 ~~~~~~~~~~~~~~~~~~~~~
171 .. image:: img/heap.pdf
172     :height: 7cm
173
174 Diapositiva 2
175 ~~~~~~~~~~~~~
176 Diapositiva 2
177
178
179 Lo Bueno, lo Malo y lo Feo
180 --------------------------------------------------
181
182 Diapositiva 1
183 ~~~~~~~~~~~~~
184 Diapositiva 1
185
186 Diapositiva 2
187 ~~~~~~~~~~~~~
188 Diapositiva 2
189
190
191
192 Modificaciones Propuestas
193 ==============================================================================
194
195 Precisión
196 --------------------------------------------------
197
198 Diapositiva 1
199 ~~~~~~~~~~~~~
200 Diapositiva 1
201
202 Diapositiva 2
203 ~~~~~~~~~~~~~
204 Diapositiva 2
205
206
207 Concurrencia
208 --------------------------------------------------
209
210 Diapositiva 1
211 ~~~~~~~~~~~~~
212 Diapositiva 1
213
214 Diapositiva 2
215 ~~~~~~~~~~~~~
216 Diapositiva 2
217
218
219 Optimizaciones
220 --------------------------------------------------
221
222 Diapositiva 1
223 ~~~~~~~~~~~~~
224 Diapositiva 1
225
226 Diapositiva 2
227 ~~~~~~~~~~~~~
228 Diapositiva 2
229
230
231
232 Resultados
233 ==============================================================================
234
235 Banco de Pruebas
236 --------------------------------------------------
237
238 Diapositiva 1
239 ~~~~~~~~~~~~~
240 Diapositiva 1
241
242 Diapositiva 2
243 ~~~~~~~~~~~~~
244 Diapositiva 2
245
246
247 Tiempo de Stop-The-World
248 --------------------------------------------------
249
250 Diapositiva 1
251 ~~~~~~~~~~~~~
252 Diapositiva 1
253
254 Diapositiva 2
255 ~~~~~~~~~~~~~
256 Diapositiva 2
257
258
259 Tiempo de Pausa Real
260 --------------------------------------------------
261
262 Diapositiva 1
263 ~~~~~~~~~~~~~
264 Diapositiva 1
265
266 Diapositiva 2
267 ~~~~~~~~~~~~~
268 Diapositiva 2
269
270
271 Tiempo de Ejecución
272 --------------------------------------------------
273
274 Diapositiva 1
275 ~~~~~~~~~~~~~
276 Diapositiva 1
277
278 Diapositiva 2
279 ~~~~~~~~~~~~~
280 Diapositiva 2
281
282
283 Conclusión
284 ==============================================================================
285
286 Conclusión
287 --------------------------------------------------
288
289 Resumen
290 ~~~~~~~
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
296
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
303
304 Trabajos Relacionados
305 ~~~~~~~~~~~~~~~~~~~~~
306 * *Memory Management in the D Programming Language*
307
308   Vladimir Panteleev. Proyecto de licenciatura, Universitatea Tehnică
309   a Moldovei, 2009.
310
311 * *Integrate Precise Heap Scanning Into the GC*
312
313   David Simcha (GC + diseño) + Vincent Lang (compilador). No formal, *bug
314   report*, 2009-2010.
315
316 Trabajos Futuros
317 ~~~~~~~~~~~~~~~~
318 * Organización de memoria
319 * Barrido
320 * Precisión
321 * Concurrencia → *Lock* **global**
322 * Movimiento
323
324 Preguntas
325 ~~~~~~~~~
326 ¿?
327
328 Fin
329 ~~~
330 ¡Gracias!
331
332 .. vim: set et sw=4 sts=4 spell spelllang=es :