Detalhes bibliográficos
Título da fonte: Repositório Institucional da UFMG
id UFMG_4539c3fc1db09ed6beda32351bfd11c7
oai_identifier_str oai:repositorio.ufmg.br:1843/30386
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
reponame_str Repositório Institucional da UFMG
instacron_str UFMG
institution Universidade Federal de Minas Gerais (UFMG)
instname_str Universidade Federal de Minas Gerais (UFMG)
spelling Fernando Magno Quintão Pereirahttp://lattes.cnpq.br/4608001746330875Rodrigo Geraldo RibeiroFábio MascarenhasFernando José Castor de Lima FilhoRenato Antônio Celso FerreiraRodolfo Sérgio Ferreira de Resendehttp://lattes.cnpq.br/7679788114818348Leandro Terra Cunha Melo2019-10-15T16:03:14Z2019-10-15T16:03:14Z2019-05-24http://hdl.handle.net/1843/30386A inferência de tipos é uma funcionalidade comum a diversas linguagens de programação. Enquantoque,nopassado,elaerapredominanteemlinguagensfuncionais(e.g., ML e Haskell), hoje em dia muitas linguagens orientadas a objeto ou multi-paradigmas tais como C# e C++ oferecem tal recurso. Ainda assim, a inferência de tipos para programas inteiros, não restrita apenas a expressões isoladas, continua sendo um problema em aberto no âmbito de C. A primeira dificuldade a ser driblada ao abordar esse problema é o fato da análise sintática dessa linguagem requerer, também, informações semânticas sobre programa. Além disso, inúmeros desafios complexos emergem ao longo do processo devido ao intricado sistema de tipos de C. Neste trabalho, apresentamos uma solução para este problema: uma abordagem baseada no algoritmo de unificação que nos permite inferir a estrutura de tipos da linguagem C. Como principal aplicação de nossa técnica, investigamos a reconstrução de programas parciais. Código-fonte incompleto aparece naturalmente durante o desenvolvimento de software: nas etapas de projeto, evolução, testes, manutenção e, inclusive, visando a análise de programas. Portanto, a capacidade de entender fragmentos de código-fonte é um ativo valioso. Haja vista a variedade de tarefas nas quais tal conhecimento pode ser utilizado: para (i) habilitar ferramentas de análise estática em cenários onde componentes de software estejam inacessíveis; (ii) melhorar a precisão de ferramentas de análise estática que não exigem configurações extras/especiais; (iii) permitir que ferramentas para geração de testes e stubs possam ser aplicadas sem a necessidade de compilar todo um projeto; e (iv) auxiliar programadores na extração de estruturas de dados a partir de algoritmos. Nossa técnica foi avaliada em várias bibliotecas C, tais como o GNU Coreutils, a GNULib, o GLib do GNOME e a GDSL; em implementações disponíveis em um livro texto; e em trechos de código retirados de projetos como CPython, FreeBSD e Git.Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional languages (e.g., ML andHaskell),today,manyobject-oriented/multi-paradigmlanguageslikeC#andC++ offer, to a certain extent, such a feature. Nevertheless, whole-program type inference is still an unsolved problem in C. The first difficulty encountered when tackling this problem is the fact that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a solution to this problem: a unification-based approach that lets us infer types that are not declared. As a primary application of our technique, we investigate the reconstruction of partial C programs. Incomplete source code naturally appears in software development: during design, and while evolving, testing and analyzing programs. Therefore, the ability to understand it is a valuable asset. Reconstructing a partial program into a complete well typed one can: (i) enable static analysis tools in scenarios where components may be absent; (ii) improve precision of static analysis tools that require no build-specifications; (iii) allow stub-generation and testing tools to work on code snippets; and (iv) assist programmers on the extraction of data-structures from algorithms. We evaluate our technique on code from a variety of C libraries such as GNU’s Coreutils, GNULib, GNOME’s GLib, and GDSL; from implementations of a book; and on snippets from popular projects like CPython, FreeBSD, and Git.porUniversidade Federal de Minas GeraisPrograma de Pós-Graduação em Ciência da ComputaçãoUFMGBrasilICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOComputaçãoAnálise estáticaInferência de tiposLinguagens de programaçãoType inference for C: applications to the analysis of incomplete programsinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/doctoralThesisinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMGORIGINALLeandroTerraCunhaMelo.pdfLeandroTerraCunhaMelo.pdfAbertoapplication/pdf2851746https://repositorio.ufmg.br/bitstream/1843/30386/1/LeandroTerraCunhaMelo.pdfffbb77a550ec0b2b4bc52a774e93994aMD51LICENSElicense.txtlicense.txttext/plain; charset=utf-82119https://repositorio.ufmg.br/bitstream/1843/30386/2/license.txt34badce4be7e31e3adb4575ae96af679MD52TEXTLeandroTerraCunhaMelo.pdf.txtLeandroTerraCunhaMelo.pdf.txtExtracted texttext/plain317822https://repositorio.ufmg.br/bitstream/1843/30386/3/LeandroTerraCunhaMelo.pdf.txtd0e83e7f6a0e54464a3a2650a9e0db3fMD531843/303862019-11-14 12:41:14.881oai:repositorio.ufmg.br:1843/30386TElDRU7Dh0EgREUgRElTVFJJQlVJw4fDg08gTsODTy1FWENMVVNJVkEgRE8gUkVQT1NJVMOTUklPIElOU1RJVFVDSU9OQUwgREEgVUZNRwoKQ29tIGEgYXByZXNlbnRhw6fDo28gZGVzdGEgbGljZW7Dp2EsIHZvY8OqIChvIGF1dG9yIChlcykgb3UgbyB0aXR1bGFyIGRvcyBkaXJlaXRvcyBkZSBhdXRvcikgY29uY2VkZSBhbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIChSSS1VRk1HKSBvIGRpcmVpdG8gbsOjbyBleGNsdXNpdm8gZSBpcnJldm9nw6F2ZWwgZGUgcmVwcm9kdXppciBlL291IGRpc3RyaWJ1aXIgYSBzdWEgcHVibGljYcOnw6NvIChpbmNsdWluZG8gbyByZXN1bW8pIHBvciB0b2RvIG8gbXVuZG8gbm8gZm9ybWF0byBpbXByZXNzbyBlIGVsZXRyw7RuaWNvIGUgZW0gcXVhbHF1ZXIgbWVpbywgaW5jbHVpbmRvIG9zIGZvcm1hdG9zIMOhdWRpbyBvdSB2w61kZW8uCgpWb2PDqiBkZWNsYXJhIHF1ZSBjb25oZWNlIGEgcG9sw610aWNhIGRlIGNvcHlyaWdodCBkYSBlZGl0b3JhIGRvIHNldSBkb2N1bWVudG8gZSBxdWUgY29uaGVjZSBlIGFjZWl0YSBhcyBEaXJldHJpemVzIGRvIFJJLVVGTUcuCgpWb2PDqiBjb25jb3JkYSBxdWUgbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIHBvZGUsIHNlbSBhbHRlcmFyIG8gY29udGXDumRvLCB0cmFuc3BvciBhIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBxdWFscXVlciBtZWlvIG91IGZvcm1hdG8gcGFyYSBmaW5zIGRlIHByZXNlcnZhw6fDo28uCgpWb2PDqiB0YW1iw6ltIGNvbmNvcmRhIHF1ZSBvIFJlcG9zaXTDs3JpbyBJbnN0aXR1Y2lvbmFsIGRhIFVGTUcgcG9kZSBtYW50ZXIgbWFpcyBkZSB1bWEgY8OzcGlhIGRlIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBmaW5zIGRlIHNlZ3VyYW7Dp2EsIGJhY2stdXAgZSBwcmVzZXJ2YcOnw6NvLgoKVm9jw6ogZGVjbGFyYSBxdWUgYSBzdWEgcHVibGljYcOnw6NvIMOpIG9yaWdpbmFsIGUgcXVlIHZvY8OqIHRlbSBvIHBvZGVyIGRlIGNvbmNlZGVyIG9zIGRpcmVpdG9zIGNvbnRpZG9zIG5lc3RhIGxpY2Vuw6dhLiBWb2PDqiB0YW1iw6ltIGRlY2xhcmEgcXVlIG8gZGVww7NzaXRvIGRlIHN1YSBwdWJsaWNhw6fDo28gbsOjbywgcXVlIHNlamEgZGUgc2V1IGNvbmhlY2ltZW50bywgaW5mcmluZ2UgZGlyZWl0b3MgYXV0b3JhaXMgZGUgbmluZ3XDqW0uCgpDYXNvIGEgc3VhIHB1YmxpY2HDp8OjbyBjb250ZW5oYSBtYXRlcmlhbCBxdWUgdm9jw6ogbsOjbyBwb3NzdWkgYSB0aXR1bGFyaWRhZGUgZG9zIGRpcmVpdG9zIGF1dG9yYWlzLCB2b2PDqiBkZWNsYXJhIHF1ZSBvYnRldmUgYSBwZXJtaXNzw6NvIGlycmVzdHJpdGEgZG8gZGV0ZW50b3IgZG9zIGRpcmVpdG9zIGF1dG9yYWlzIHBhcmEgY29uY2VkZXIgYW8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBvcyBkaXJlaXRvcyBhcHJlc2VudGFkb3MgbmVzdGEgbGljZW7Dp2EsIGUgcXVlIGVzc2UgbWF0ZXJpYWwgZGUgcHJvcHJpZWRhZGUgZGUgdGVyY2Vpcm9zIGVzdMOhIGNsYXJhbWVudGUgaWRlbnRpZmljYWRvIGUgcmVjb25oZWNpZG8gbm8gdGV4dG8gb3Ugbm8gY29udGXDumRvIGRhIHB1YmxpY2HDp8OjbyBvcmEgZGVwb3NpdGFkYS4KCkNBU08gQSBQVUJMSUNBw4fDg08gT1JBIERFUE9TSVRBREEgVEVOSEEgU0lETyBSRVNVTFRBRE8gREUgVU0gUEFUUk9Dw41OSU8gT1UgQVBPSU8gREUgVU1BIEFHw4pOQ0lBIERFIEZPTUVOVE8gT1UgT1VUUk8gT1JHQU5JU01PLCBWT0PDiiBERUNMQVJBIFFVRSBSRVNQRUlUT1UgVE9ET1MgRSBRVUFJU1FVRVIgRElSRUlUT1MgREUgUkVWSVPDg08gQ09NTyBUQU1Cw4lNIEFTIERFTUFJUyBPQlJJR0HDh8OVRVMgRVhJR0lEQVMgUE9SIENPTlRSQVRPIE9VIEFDT1JETy4KCk8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBzZSBjb21wcm9tZXRlIGEgaWRlbnRpZmljYXIgY2xhcmFtZW50ZSBvIHNldSBub21lKHMpIG91IG8ocykgbm9tZXMocykgZG8ocykgZGV0ZW50b3IoZXMpIGRvcyBkaXJlaXRvcyBhdXRvcmFpcyBkYSBwdWJsaWNhw6fDo28sIGUgbsOjbyBmYXLDoSBxdWFscXVlciBhbHRlcmHDp8OjbywgYWzDqW0gZGFxdWVsYXMgY29uY2VkaWRhcyBwb3IgZXN0YSBsaWNlbsOnYS4KCg==Repositório InstitucionalPUBhttps://repositorio.ufmg.br/oaiopendoar:2019-11-14T15:41:14Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false
_version_ 1813547752722792448