Optimizing sequences traversal and extensibility

Detalhes bibliográficos
Autor(a) principal: Poeira, Diogo Rafael Esteves
Data de Publicação: 2021
Tipo de documento: Dissertação
Idioma: eng
Título da fonte: Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
Texto Completo: http://hdl.handle.net/10400.21/16553
Resumo: Dissertação para obtenção do Grau de Mestre em Engenharia Informática e de Computadores
id RCAP_0f3c9a493953a9ee1cb195575caac30c
oai_identifier_str oai:repositorio.ipl.pt:10400.21/16553
network_acronym_str RCAP
network_name_str Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
repository_id_str 7160
spelling Optimizing sequences traversal and extensibilityFrameworkYieldGeradoresSequencias LazyIteradoresColecçõesExtensõesFrameworkYieldGeneratorsLazy sequencesIteratorsCollectionsExtensionsDissertação para obtenção do Grau de Mestre em Engenharia Informática e de ComputadoresGeradores yield são uma característica de programação bem conhecida, disponível na maioria dos ambientes de programação usados, como JavaScript, Python e muitos outros. Permitem uma extensibilidade fácil e compacta em operações de streams, como em iteradores ou tipos enumeráveis. Ainda assim, surgem duas questões sobre a sua utilização: 1) Os geradores são a melhor escolha para estender sequências com novas operações definidas pelo programador? 2) E se as linguagens de programação de desenvolvimento não fornecerem geradores yield, como em Java? O trabalho de pesquisa que descrevo nesta dissertação visa responder a essas duas questões. Para tal, analisei dois desenhos de tipo de sequência de linguagens de programação diferentes, nomeadamente, Java e Javascript. Além disso, estudei as alternativas mais utilizadas às sequências incluídas em cada linguagem, num conjunto de características, criando benchmarks para analisar o desempenho de cada uma em casos de utilização baseados no mundo real, disponíveis para cada programador poder usar quando quiser escolher um tipo de sequência de acordo com suas necessidades. Para além disto, proponho a minha própria solução para um tipo de sequência, baseado num desenho minimalista que permite não só a extensão concisa da sua API como o encadeamento fluente de operações definidas pelo utilizador. A minha proposta tem como objectivo ser quão simples e transparente quanto possível, para que qualquer programador consiga perceber claramente aquilo que está a usar.Por fim, respondo à questão "Quando se deve usar paralelismo?"com um conjunto de benchmarks que comparam o processamento sequencial das Streams do Java com o seu processamento paralelo.Yield generators are a well-known programming feature available in most used programming environments such as JavaScript, Python and many others. They allow easy and compact extensibility on streams operations such as on iterators or enumerable types. Yet, two questions arise about their use: 1) are generators the most efficient choice to extend sequences with new user-defined operations? 2) What if the development programming languages does not provide the yield feature, such as in Java? The research work that I describe in this dissertation aims to answer these two questions. To that end, I analyzed two different programming languages designs for a sequence type, Java and Javascript. Also, I studied the state-of-the-art alternatives to the out-of-the-box sequences included in each language, in a set of features, devising benchmarks to analyze their performance with real world usecases, available for developers to use when choosing a sequence type according to their needs. Not only that but, I also propose my own solution of a sequence type, based on a minimalist design that both allows for verboseless extension as well as fluent chaining of new operations. My proposal aims to be as simple and transparent as possible so the developer may clearly understand what he is using. Finally, I answer the question "When should you use parallelism?" with a set of benchmarks that compare Java Streams sequential processing with its parallel counterpart.Carvalho, Fernando Miguel Gamboa deRCIPLPoeira, Diogo Rafael Esteves2023-10-11T10:17:17Z20212021-01-01T00:00:00Zinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisapplication/pdfhttp://hdl.handle.net/10400.21/16553TID:203355350engPOEIRA, Diogo Rafael Esteves - Optimizing sequences traversal and extensibility. Lisboa: Instituto Superior de Engenharia de Lisboa, 2021. Dissertação de Mestrado.info:eu-repo/semantics/openAccessreponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãoinstacron:RCAAP2023-10-18T02:15:28Zoai:repositorio.ipl.pt:10400.21/16553Portal AgregadorONGhttps://www.rcaap.pt/oai/openaireopendoar:71602024-03-19T20:35:54.972944Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãofalse
dc.title.none.fl_str_mv Optimizing sequences traversal and extensibility
title Optimizing sequences traversal and extensibility
spellingShingle Optimizing sequences traversal and extensibility
Poeira, Diogo Rafael Esteves
Framework
Yield
Geradores
Sequencias Lazy
Iteradores
Colecções
Extensões
Framework
Yield
Generators
Lazy sequences
Iterators
Collections
Extensions
title_short Optimizing sequences traversal and extensibility
title_full Optimizing sequences traversal and extensibility
title_fullStr Optimizing sequences traversal and extensibility
title_full_unstemmed Optimizing sequences traversal and extensibility
title_sort Optimizing sequences traversal and extensibility
author Poeira, Diogo Rafael Esteves
author_facet Poeira, Diogo Rafael Esteves
author_role author
dc.contributor.none.fl_str_mv Carvalho, Fernando Miguel Gamboa de
RCIPL
dc.contributor.author.fl_str_mv Poeira, Diogo Rafael Esteves
dc.subject.por.fl_str_mv Framework
Yield
Geradores
Sequencias Lazy
Iteradores
Colecções
Extensões
Framework
Yield
Generators
Lazy sequences
Iterators
Collections
Extensions
topic Framework
Yield
Geradores
Sequencias Lazy
Iteradores
Colecções
Extensões
Framework
Yield
Generators
Lazy sequences
Iterators
Collections
Extensions
description Dissertação para obtenção do Grau de Mestre em Engenharia Informática e de Computadores
publishDate 2021
dc.date.none.fl_str_mv 2021
2021-01-01T00:00:00Z
2023-10-11T10:17:17Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv http://hdl.handle.net/10400.21/16553
TID:203355350
url http://hdl.handle.net/10400.21/16553
identifier_str_mv TID:203355350
dc.language.iso.fl_str_mv eng
language eng
dc.relation.none.fl_str_mv POEIRA, Diogo Rafael Esteves - Optimizing sequences traversal and extensibility. Lisboa: Instituto Superior de Engenharia de Lisboa, 2021. Dissertação de Mestrado.
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.source.none.fl_str_mv reponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
instacron:RCAAP
instname_str Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
instacron_str RCAAP
institution RCAAP
reponame_str Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
collection Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
repository.name.fl_str_mv Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
repository.mail.fl_str_mv
_version_ 1799133622556426240