Optimizing sequences traversal and extensibility
Autor(a) principal: | |
---|---|
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 |