Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales

Autores
Pimás, Javier Esteban
Año de publicación
2024
Idioma
español castellano
Tipo de recurso
tesis doctoral
Estado
versión publicada
Colaborador/a o director/a de tesis
Garbervetsky, Diego David
Descripción
Los lenguajes orientados a objetos suelen utilizar máquinas virtuales (VM) que proporcionan mecanismos como la compilación just-in-time ( JIT) y la recolección de basura (GC). Los componentes que brindan estos mecanismos de VM suelen implementarse en una capa separada, aislando así la aplicación. Si bien este enfoque aporta los beneficios de ingeniería de software de una clara separación y desacoplamiento, introduce barreras tanto para entender el comportamiento de la VM como pa- ra evolucionar su implementación, ya que debilita las conexiones causales entre las aplicaciones y la VM. Por ejemplo, la recolección de basura y el compilador JIT suelen quedar fijos en el momento de construcción de la VM, limitando la adaptación arbitraria en tiempo de ejecución. Además, debido a esta separación, la implementación de la VM no suele poder inspeccionarse y depurarse de la misma manera que el código de aplicación, estableciendo una distinción entre el código de aplicación fácil de trabajar y el código de VM difícil de trabajar. Estas características representan una barrera que dificulta que lxs desarrolladores de aplicaciones comprendan el motor sobre el cual se ejecuta su propio código, y fomenta una brecha de conocimiento que les impide cambiar la VM. Proponemos bibliotecas de entornos de ejecución metacirculares vivos o LMRs (por Live Metacircular Runtimes) para superar este problema. Las LMRs son motores de ejecución de lenguajes que integran perfectamente la VM en la aplicación en entornos de programación vivos. A diferencia de los enfoques metacirculares clásicos, proponemos eliminar por completo la separación entre aplicación y VM. Al aplicar sistemáticamente el diseño orientado a objetos a los componentes de VM, podemos construir motores de ejecución vivos lo suficientemente pequeños y flexibles, donde lxs ingenierxs de VM pueden beneficiarse de herramientas de programación vivas con feedback loops cortos, y lxs desarrolladores de aplicaciones con menos experiencia en VM pueden beneficiarse de las conexiones causales más fuertes entre sus programas y la implementación de la VM. Para evaluar nuestra propuesta, implementamos Bee/LMR, una VM viva para un entorno derivado de Smalltalk en 22,057 líneas de código. Analizamos casos de estudio sobre la optimización del recolector de basura, evitando recompilaciones por parte del compilador JIT y agregando soporte para optimizar el código con instrucciones vectoriales para mostrar los compromisos de extender la programa- ción exploratoria al desarrollo de VMs en el contexto de una aplicación industrial utilizada en producción. Basándonos en los casos de estudio, ilustramos cómo nuestro enfoque facilita el trabajo diario de desarrollo de un pequeño equipo de programadores de aplicaciones. Nuestro enfoque permite a lxs desarrolladores de VM acceder a herramientas de programación vivas, tradicionalmente reservadas para desarrolladores de aplicaciones, mientras que lxs desarrolladores de aplicaciones pueden interactuar con la VM y modificarla utilizando las herramientas de alto nivel que utilizan a diario. Tanto lxs desarrolladores de aplicaciones como lxs de VM pueden inspeccionar, depurar, comprender y modificar sin problemas las diferentes partes de la VM con feedback loops más cortos y herramientas de mayor nivel de abstracción.
Object-oriented languages often use virtual machines (VMs) that provide mechanisms such as just-in-time ( JIT) compilation and garbage collec- tion (GC). These VM components are typically implemented in a separate layer, isolating them from the application. While this approach brings the software en- gineering benefits of clear separation and decoupling, it introduces barriers for both understanding VM behavior and evolving the VM implementation because it weakens the causal connections between applications and VM. For example, the GC and JIT compiler are typically fixed at VM build time, limiting arbitrary adaptation at run time. Furthermore, because of this separation, the implemen- tation of the VM cannot typically be inspected and debugged in the same way as application code, enshrining a distinction in easy-to-work-with application and hard-to-work-with VM code. These characteristics pose a barrier for application developers to understand the engine on top of which their own code runs, and fosters a knowledge gap that prevents application developers to change the VM. We propose Live Metacircular Runtimes (LMRs) to overcome this problem. LMRs are language runtime systems that seamlessly integrate the VM into the application in live programming environments. Unlike classic metacircular ap- proaches, we propose to completely remove the separation between application and VM. By systematically applying object-oriented design to VM components, we can build live runtime systems that are small and flexible enough, where VM engineers can benefit of live programming features such as short feedback loops, and application developers with fewer VM expertise can benefit of the stronger causal connections between their programs and the VM implementation. To evaluate our proposal, we implemented Bee/LMR, a live VM for a Smalltalk- derivative environment in 22,057 lines of code. We analyze case studies on tuning the garbage collector, avoiding recompilations by the just-in-time compiler, and adding support to optimize code with vector instructions to demonstrate the trade- offs of extending exploratory programming to VM development in the context of an industrial application used in production. Based on the case studies, we illustrate how our approach facilitates the daily development work of a small team of application developers. Our approach enables VM developers to gain access to live programming tools traditionally reserved for application developers, while application developers can interact with the VM and modify it using the high-level tools they use every day. Both application and VM developers can seamlessly inspect, debug, understand, and modify the different parts of the VM with shorter feedback loops and higher-level tools.
Fil: Pimás, Javier Esteban. Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales; Argentina.
Materia
MAQUINAS VIRTUALES
COMPILADORES
RECOLECCION DE BASURA
META-PROGRAMACION
PROGRAMACION EN VIVO
PROGRAMACION ORIENTADA A OBJETOS
VIRTUAL MACHINES
COMPILERS
GARBAGE COLLECTION
METAPROGRAMMING
LIVE PROGRAMMING
OBJECT-ORIENTED PROGRAMMING
Nivel de accesibilidad
acceso abierto
Condiciones de uso
https://creativecommons.org/licenses/by-nc-sa/2.5/ar
Repositorio
Biblioteca Digital (UBA-FCEN)
Institución
Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturales
OAI Identificador
tesis:tesis_n7627_Pimas

id BDUBAFCEN_8b3ed49b1073f694e5f882824d5a004c
oai_identifier_str tesis:tesis_n7627_Pimas
network_acronym_str BDUBAFCEN
repository_id_str 1896
network_name_str Biblioteca Digital (UBA-FCEN)
spelling Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtualesLive objects all the way down : removing barriers between applications and virtual machinesPimás, Javier EstebanMAQUINAS VIRTUALESCOMPILADORESRECOLECCION DE BASURAMETA-PROGRAMACIONPROGRAMACION EN VIVOPROGRAMACION ORIENTADA A OBJETOSVIRTUAL MACHINESCOMPILERSGARBAGE COLLECTIONMETAPROGRAMMINGLIVE PROGRAMMINGOBJECT-ORIENTED PROGRAMMINGLos lenguajes orientados a objetos suelen utilizar máquinas virtuales (VM) que proporcionan mecanismos como la compilación just-in-time ( JIT) y la recolección de basura (GC). Los componentes que brindan estos mecanismos de VM suelen implementarse en una capa separada, aislando así la aplicación. Si bien este enfoque aporta los beneficios de ingeniería de software de una clara separación y desacoplamiento, introduce barreras tanto para entender el comportamiento de la VM como pa- ra evolucionar su implementación, ya que debilita las conexiones causales entre las aplicaciones y la VM. Por ejemplo, la recolección de basura y el compilador JIT suelen quedar fijos en el momento de construcción de la VM, limitando la adaptación arbitraria en tiempo de ejecución. Además, debido a esta separación, la implementación de la VM no suele poder inspeccionarse y depurarse de la misma manera que el código de aplicación, estableciendo una distinción entre el código de aplicación fácil de trabajar y el código de VM difícil de trabajar. Estas características representan una barrera que dificulta que lxs desarrolladores de aplicaciones comprendan el motor sobre el cual se ejecuta su propio código, y fomenta una brecha de conocimiento que les impide cambiar la VM. Proponemos bibliotecas de entornos de ejecución metacirculares vivos o LMRs (por Live Metacircular Runtimes) para superar este problema. Las LMRs son motores de ejecución de lenguajes que integran perfectamente la VM en la aplicación en entornos de programación vivos. A diferencia de los enfoques metacirculares clásicos, proponemos eliminar por completo la separación entre aplicación y VM. Al aplicar sistemáticamente el diseño orientado a objetos a los componentes de VM, podemos construir motores de ejecución vivos lo suficientemente pequeños y flexibles, donde lxs ingenierxs de VM pueden beneficiarse de herramientas de programación vivas con feedback loops cortos, y lxs desarrolladores de aplicaciones con menos experiencia en VM pueden beneficiarse de las conexiones causales más fuertes entre sus programas y la implementación de la VM. Para evaluar nuestra propuesta, implementamos Bee/LMR, una VM viva para un entorno derivado de Smalltalk en 22,057 líneas de código. Analizamos casos de estudio sobre la optimización del recolector de basura, evitando recompilaciones por parte del compilador JIT y agregando soporte para optimizar el código con instrucciones vectoriales para mostrar los compromisos de extender la programa- ción exploratoria al desarrollo de VMs en el contexto de una aplicación industrial utilizada en producción. Basándonos en los casos de estudio, ilustramos cómo nuestro enfoque facilita el trabajo diario de desarrollo de un pequeño equipo de programadores de aplicaciones. Nuestro enfoque permite a lxs desarrolladores de VM acceder a herramientas de programación vivas, tradicionalmente reservadas para desarrolladores de aplicaciones, mientras que lxs desarrolladores de aplicaciones pueden interactuar con la VM y modificarla utilizando las herramientas de alto nivel que utilizan a diario. Tanto lxs desarrolladores de aplicaciones como lxs de VM pueden inspeccionar, depurar, comprender y modificar sin problemas las diferentes partes de la VM con feedback loops más cortos y herramientas de mayor nivel de abstracción.Object-oriented languages often use virtual machines (VMs) that provide mechanisms such as just-in-time ( JIT) compilation and garbage collec- tion (GC). These VM components are typically implemented in a separate layer, isolating them from the application. While this approach brings the software en- gineering benefits of clear separation and decoupling, it introduces barriers for both understanding VM behavior and evolving the VM implementation because it weakens the causal connections between applications and VM. For example, the GC and JIT compiler are typically fixed at VM build time, limiting arbitrary adaptation at run time. Furthermore, because of this separation, the implemen- tation of the VM cannot typically be inspected and debugged in the same way as application code, enshrining a distinction in easy-to-work-with application and hard-to-work-with VM code. These characteristics pose a barrier for application developers to understand the engine on top of which their own code runs, and fosters a knowledge gap that prevents application developers to change the VM. We propose Live Metacircular Runtimes (LMRs) to overcome this problem. LMRs are language runtime systems that seamlessly integrate the VM into the application in live programming environments. Unlike classic metacircular ap- proaches, we propose to completely remove the separation between application and VM. By systematically applying object-oriented design to VM components, we can build live runtime systems that are small and flexible enough, where VM engineers can benefit of live programming features such as short feedback loops, and application developers with fewer VM expertise can benefit of the stronger causal connections between their programs and the VM implementation. To evaluate our proposal, we implemented Bee/LMR, a live VM for a Smalltalk- derivative environment in 22,057 lines of code. We analyze case studies on tuning the garbage collector, avoiding recompilations by the just-in-time compiler, and adding support to optimize code with vector instructions to demonstrate the trade- offs of extending exploratory programming to VM development in the context of an industrial application used in production. Based on the case studies, we illustrate how our approach facilitates the daily development work of a small team of application developers. Our approach enables VM developers to gain access to live programming tools traditionally reserved for application developers, while application developers can interact with the VM and modify it using the high-level tools they use every day. Both application and VM developers can seamlessly inspect, debug, understand, and modify the different parts of the VM with shorter feedback loops and higher-level tools.Fil: Pimás, Javier Esteban. Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales; Argentina.Universidad de Buenos Aires. Facultad de Ciencias Exactas y NaturalesGarbervetsky, Diego David2024-09-11info:eu-repo/semantics/doctoralThesisinfo:eu-repo/semantics/publishedVersionhttp://purl.org/coar/resource_type/c_db06info:ar-repo/semantics/tesisDoctoralapplication/pdfhttps://hdl.handle.net/20.500.12110/tesis_n7627_Pimasspainfo:eu-repo/semantics/openAccesshttps://creativecommons.org/licenses/by-nc-sa/2.5/arreponame:Biblioteca Digital (UBA-FCEN)instname:Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturalesinstacron:UBA-FCEN2025-09-29T13:41:57Ztesis:tesis_n7627_PimasInstitucionalhttps://digital.bl.fcen.uba.ar/Universidad públicaNo correspondehttps://digital.bl.fcen.uba.ar/cgi-bin/oaiserver.cgiana@bl.fcen.uba.arArgentinaNo correspondeNo correspondeNo correspondeopendoar:18962025-09-29 13:41:58.334Biblioteca Digital (UBA-FCEN) - Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturalesfalse
dc.title.none.fl_str_mv Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
Live objects all the way down : removing barriers between applications and virtual machines
title Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
spellingShingle Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
Pimás, Javier Esteban
MAQUINAS VIRTUALES
COMPILADORES
RECOLECCION DE BASURA
META-PROGRAMACION
PROGRAMACION EN VIVO
PROGRAMACION ORIENTADA A OBJETOS
VIRTUAL MACHINES
COMPILERS
GARBAGE COLLECTION
METAPROGRAMMING
LIVE PROGRAMMING
OBJECT-ORIENTED PROGRAMMING
title_short Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
title_full Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
title_fullStr Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
title_full_unstemmed Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
title_sort Objetos vivos a fondo : removiendo las barreras entre aplicaciones y máquinas virtuales
dc.creator.none.fl_str_mv Pimás, Javier Esteban
author Pimás, Javier Esteban
author_facet Pimás, Javier Esteban
author_role author
dc.contributor.none.fl_str_mv Garbervetsky, Diego David
dc.subject.none.fl_str_mv MAQUINAS VIRTUALES
COMPILADORES
RECOLECCION DE BASURA
META-PROGRAMACION
PROGRAMACION EN VIVO
PROGRAMACION ORIENTADA A OBJETOS
VIRTUAL MACHINES
COMPILERS
GARBAGE COLLECTION
METAPROGRAMMING
LIVE PROGRAMMING
OBJECT-ORIENTED PROGRAMMING
topic MAQUINAS VIRTUALES
COMPILADORES
RECOLECCION DE BASURA
META-PROGRAMACION
PROGRAMACION EN VIVO
PROGRAMACION ORIENTADA A OBJETOS
VIRTUAL MACHINES
COMPILERS
GARBAGE COLLECTION
METAPROGRAMMING
LIVE PROGRAMMING
OBJECT-ORIENTED PROGRAMMING
dc.description.none.fl_txt_mv Los lenguajes orientados a objetos suelen utilizar máquinas virtuales (VM) que proporcionan mecanismos como la compilación just-in-time ( JIT) y la recolección de basura (GC). Los componentes que brindan estos mecanismos de VM suelen implementarse en una capa separada, aislando así la aplicación. Si bien este enfoque aporta los beneficios de ingeniería de software de una clara separación y desacoplamiento, introduce barreras tanto para entender el comportamiento de la VM como pa- ra evolucionar su implementación, ya que debilita las conexiones causales entre las aplicaciones y la VM. Por ejemplo, la recolección de basura y el compilador JIT suelen quedar fijos en el momento de construcción de la VM, limitando la adaptación arbitraria en tiempo de ejecución. Además, debido a esta separación, la implementación de la VM no suele poder inspeccionarse y depurarse de la misma manera que el código de aplicación, estableciendo una distinción entre el código de aplicación fácil de trabajar y el código de VM difícil de trabajar. Estas características representan una barrera que dificulta que lxs desarrolladores de aplicaciones comprendan el motor sobre el cual se ejecuta su propio código, y fomenta una brecha de conocimiento que les impide cambiar la VM. Proponemos bibliotecas de entornos de ejecución metacirculares vivos o LMRs (por Live Metacircular Runtimes) para superar este problema. Las LMRs son motores de ejecución de lenguajes que integran perfectamente la VM en la aplicación en entornos de programación vivos. A diferencia de los enfoques metacirculares clásicos, proponemos eliminar por completo la separación entre aplicación y VM. Al aplicar sistemáticamente el diseño orientado a objetos a los componentes de VM, podemos construir motores de ejecución vivos lo suficientemente pequeños y flexibles, donde lxs ingenierxs de VM pueden beneficiarse de herramientas de programación vivas con feedback loops cortos, y lxs desarrolladores de aplicaciones con menos experiencia en VM pueden beneficiarse de las conexiones causales más fuertes entre sus programas y la implementación de la VM. Para evaluar nuestra propuesta, implementamos Bee/LMR, una VM viva para un entorno derivado de Smalltalk en 22,057 líneas de código. Analizamos casos de estudio sobre la optimización del recolector de basura, evitando recompilaciones por parte del compilador JIT y agregando soporte para optimizar el código con instrucciones vectoriales para mostrar los compromisos de extender la programa- ción exploratoria al desarrollo de VMs en el contexto de una aplicación industrial utilizada en producción. Basándonos en los casos de estudio, ilustramos cómo nuestro enfoque facilita el trabajo diario de desarrollo de un pequeño equipo de programadores de aplicaciones. Nuestro enfoque permite a lxs desarrolladores de VM acceder a herramientas de programación vivas, tradicionalmente reservadas para desarrolladores de aplicaciones, mientras que lxs desarrolladores de aplicaciones pueden interactuar con la VM y modificarla utilizando las herramientas de alto nivel que utilizan a diario. Tanto lxs desarrolladores de aplicaciones como lxs de VM pueden inspeccionar, depurar, comprender y modificar sin problemas las diferentes partes de la VM con feedback loops más cortos y herramientas de mayor nivel de abstracción.
Object-oriented languages often use virtual machines (VMs) that provide mechanisms such as just-in-time ( JIT) compilation and garbage collec- tion (GC). These VM components are typically implemented in a separate layer, isolating them from the application. While this approach brings the software en- gineering benefits of clear separation and decoupling, it introduces barriers for both understanding VM behavior and evolving the VM implementation because it weakens the causal connections between applications and VM. For example, the GC and JIT compiler are typically fixed at VM build time, limiting arbitrary adaptation at run time. Furthermore, because of this separation, the implemen- tation of the VM cannot typically be inspected and debugged in the same way as application code, enshrining a distinction in easy-to-work-with application and hard-to-work-with VM code. These characteristics pose a barrier for application developers to understand the engine on top of which their own code runs, and fosters a knowledge gap that prevents application developers to change the VM. We propose Live Metacircular Runtimes (LMRs) to overcome this problem. LMRs are language runtime systems that seamlessly integrate the VM into the application in live programming environments. Unlike classic metacircular ap- proaches, we propose to completely remove the separation between application and VM. By systematically applying object-oriented design to VM components, we can build live runtime systems that are small and flexible enough, where VM engineers can benefit of live programming features such as short feedback loops, and application developers with fewer VM expertise can benefit of the stronger causal connections between their programs and the VM implementation. To evaluate our proposal, we implemented Bee/LMR, a live VM for a Smalltalk- derivative environment in 22,057 lines of code. We analyze case studies on tuning the garbage collector, avoiding recompilations by the just-in-time compiler, and adding support to optimize code with vector instructions to demonstrate the trade- offs of extending exploratory programming to VM development in the context of an industrial application used in production. Based on the case studies, we illustrate how our approach facilitates the daily development work of a small team of application developers. Our approach enables VM developers to gain access to live programming tools traditionally reserved for application developers, while application developers can interact with the VM and modify it using the high-level tools they use every day. Both application and VM developers can seamlessly inspect, debug, understand, and modify the different parts of the VM with shorter feedback loops and higher-level tools.
Fil: Pimás, Javier Esteban. Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales; Argentina.
description Los lenguajes orientados a objetos suelen utilizar máquinas virtuales (VM) que proporcionan mecanismos como la compilación just-in-time ( JIT) y la recolección de basura (GC). Los componentes que brindan estos mecanismos de VM suelen implementarse en una capa separada, aislando así la aplicación. Si bien este enfoque aporta los beneficios de ingeniería de software de una clara separación y desacoplamiento, introduce barreras tanto para entender el comportamiento de la VM como pa- ra evolucionar su implementación, ya que debilita las conexiones causales entre las aplicaciones y la VM. Por ejemplo, la recolección de basura y el compilador JIT suelen quedar fijos en el momento de construcción de la VM, limitando la adaptación arbitraria en tiempo de ejecución. Además, debido a esta separación, la implementación de la VM no suele poder inspeccionarse y depurarse de la misma manera que el código de aplicación, estableciendo una distinción entre el código de aplicación fácil de trabajar y el código de VM difícil de trabajar. Estas características representan una barrera que dificulta que lxs desarrolladores de aplicaciones comprendan el motor sobre el cual se ejecuta su propio código, y fomenta una brecha de conocimiento que les impide cambiar la VM. Proponemos bibliotecas de entornos de ejecución metacirculares vivos o LMRs (por Live Metacircular Runtimes) para superar este problema. Las LMRs son motores de ejecución de lenguajes que integran perfectamente la VM en la aplicación en entornos de programación vivos. A diferencia de los enfoques metacirculares clásicos, proponemos eliminar por completo la separación entre aplicación y VM. Al aplicar sistemáticamente el diseño orientado a objetos a los componentes de VM, podemos construir motores de ejecución vivos lo suficientemente pequeños y flexibles, donde lxs ingenierxs de VM pueden beneficiarse de herramientas de programación vivas con feedback loops cortos, y lxs desarrolladores de aplicaciones con menos experiencia en VM pueden beneficiarse de las conexiones causales más fuertes entre sus programas y la implementación de la VM. Para evaluar nuestra propuesta, implementamos Bee/LMR, una VM viva para un entorno derivado de Smalltalk en 22,057 líneas de código. Analizamos casos de estudio sobre la optimización del recolector de basura, evitando recompilaciones por parte del compilador JIT y agregando soporte para optimizar el código con instrucciones vectoriales para mostrar los compromisos de extender la programa- ción exploratoria al desarrollo de VMs en el contexto de una aplicación industrial utilizada en producción. Basándonos en los casos de estudio, ilustramos cómo nuestro enfoque facilita el trabajo diario de desarrollo de un pequeño equipo de programadores de aplicaciones. Nuestro enfoque permite a lxs desarrolladores de VM acceder a herramientas de programación vivas, tradicionalmente reservadas para desarrolladores de aplicaciones, mientras que lxs desarrolladores de aplicaciones pueden interactuar con la VM y modificarla utilizando las herramientas de alto nivel que utilizan a diario. Tanto lxs desarrolladores de aplicaciones como lxs de VM pueden inspeccionar, depurar, comprender y modificar sin problemas las diferentes partes de la VM con feedback loops más cortos y herramientas de mayor nivel de abstracción.
publishDate 2024
dc.date.none.fl_str_mv 2024-09-11
dc.type.none.fl_str_mv info:eu-repo/semantics/doctoralThesis
info:eu-repo/semantics/publishedVersion
http://purl.org/coar/resource_type/c_db06
info:ar-repo/semantics/tesisDoctoral
format doctoralThesis
status_str publishedVersion
dc.identifier.none.fl_str_mv https://hdl.handle.net/20.500.12110/tesis_n7627_Pimas
url https://hdl.handle.net/20.500.12110/tesis_n7627_Pimas
dc.language.none.fl_str_mv spa
language spa
dc.rights.none.fl_str_mv info:eu-repo/semantics/openAccess
https://creativecommons.org/licenses/by-nc-sa/2.5/ar
eu_rights_str_mv openAccess
rights_invalid_str_mv https://creativecommons.org/licenses/by-nc-sa/2.5/ar
dc.format.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales
publisher.none.fl_str_mv Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales
dc.source.none.fl_str_mv reponame:Biblioteca Digital (UBA-FCEN)
instname:Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturales
instacron:UBA-FCEN
reponame_str Biblioteca Digital (UBA-FCEN)
collection Biblioteca Digital (UBA-FCEN)
instname_str Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturales
instacron_str UBA-FCEN
institution UBA-FCEN
repository.name.fl_str_mv Biblioteca Digital (UBA-FCEN) - Universidad Nacional de Buenos Aires. Facultad de Ciencias Exactas y Naturales
repository.mail.fl_str_mv ana@bl.fcen.uba.ar
_version_ 1844618715850604544
score 13.070432