• Refine Query
  • Source
  • Publication year
  • to
  • Language
  • 60
  • 9
  • 5
  • 5
  • 3
  • 1
  • 1
  • 1
  • 1
  • 1
  • Tagged with
  • 125
  • 125
  • 67
  • 50
  • 44
  • 27
  • 16
  • 13
  • 13
  • 12
  • 12
  • 12
  • 10
  • 10
  • 10
  • About
  • The Global ETD Search service is a free service for researchers to find electronic theses and dissertations. This service is provided by the Networked Digital Library of Theses and Dissertations.
    Our metadata is collected from universities around the world. If you manage a university/consortium/country archive and want to be added, details can be found on the NDLTD website.
91

Design Decisions for Indie Development of Educational Video Games : A Case Study / Designbeslut för indieutveckling av pedagogiska datorspel : En fallstudie

Kuoppa, Andreas January 2019 (has links)
Educational video games – especially for the PC market – do not seem to perform as well commercially as games from other genres. We argue that there is room for independent – ’indie’ – developers to break into the marketplace, by identifying certain niches and innovating on the genre. This would generate commercial value for such actors and knowledge value for the players. Design decisions of high importance made during development of an educational video game demo at the small Swedish company Toleap Consulting AB were analysed in the pursuit of contributing to effective indie development of such games. Three main problems that arose during development were identified, and three design decisions where implemented to combat these respective problems; (1) Interpreted educational game pattern utilising XML, (2) Function-based game views and (3) Community created assets, open source, and no costly dependencies. In our case, the formulated design decisions effectively solved our problems, and we argue that they generalise. If a developer creating a similar game (educational video game) in a similar situation (independent development with limited resources) encounters one or more of these problems, the suggested design decisions may help the developer solve the problems, in turn making more educational video games available on the market, generating the aforementioned commercial and knowledge values.
92

Abstract interpretation of domain-specific embedded languages

Backhouse, Kevin Stuart January 2002 (has links)
A domain-specific embedded language (DSEL) is a domain-specific programming language with no concrete syntax of its own. Defined as a set of combinators encapsulated in a module, it borrows the syntax and tools (such as type-checkers and compilers) of its host language; hence it is economical to design, introduce, and maintain. Unfortunately, this economy is counterbalanced by a lack of room for growth. DSELs cannot match sophisticated domain-specific languages that offer tools for domainspecific error-checking and optimisation. These tools are usually based on syntactic analyses, so they do not work on DSELs. Abstract interpretation is a technique ideally suited to the analysis of DSELs, due to its semantic, rather than syntactic, approach. It is based upon the observation that analysing a program is equivalent to evaluating it over an abstract semantic domain. The mathematical properties of the abstract domain are such that evaluation reduces to solving a mutually recursive set of equations. This dissertation shows how abstract interpretation can be applied to a DSEL by replacing it with an abstract implementation of the same interface; evaluating a program with the abstract implementation yields an analysis result, rather than an executable. The abstract interpretation of DSELs provides a foundation upon which to build sophisticated error-checking and optimisation tools. This is illustrated with three examples: an alphabet analyser for CSP, an ambiguity test for parser combinators, and a definedness test for attribute grammars. Of these, the ambiguity test for parser combinators is probably the most important example, due to the prominence of parser combinators and their rather conspicuous lack of support for the well-known LL(k) test. In this dissertation, DSELs and their signatures are encoded using the polymorphic lambda calculus. This allows the correctness of the abstract interpretation of DSELs to be proved using the parametricity theorem: safety is derived for free from the polymorphic type of a program. Crucially, parametricity also solves a problem commonly encountered by other analysis methods: it ensures the correctness of the approach in the presence of higher-order functions.
93

Compiling a synchronous programming language into field programmable gate arrays /

Shen, Ying, January 1999 (has links)
Thesis (M.Eng.)--Memorial University of Newfoundland, 1999. / Bibliography: leaves 100-102.
94

Rewriting Concurrent Haskell programs to STM

Silva Neto, Francisco Miranda Soares da 27 February 2014 (has links)
Submitted by Luiz Felipe Barbosa (luiz.fbabreu2@ufpe.br) on 2015-03-09T13:43:25Z No. of bitstreams: 2 license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5) DISSERTAÇÃO Francisco Miranda Soares da Silva Neto.pdf: 1968720 bytes, checksum: 60383d7751d95b545cae9a16a83f611c (MD5) / Made available in DSpace on 2015-03-09T13:43:26Z (GMT). No. of bitstreams: 2 license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5) DISSERTAÇÃO Francisco Miranda Soares da Silva Neto.pdf: 1968720 bytes, checksum: 60383d7751d95b545cae9a16a83f611c (MD5) Previous issue date: 2014-02-27 / In recent years, the diminishing rate with which we can increase the amount of transistors in a processor core has slowed down the increase of computers’ power. Moore’s Law appears to be drawing to an end. With it, the assumption that software written today will be more efficiently executed in the future simply due to processors’ evolution is being challenged. On the other hand, parallel applications can still be made more efficient by distributing work among different processors to be executed at the same time, thus reducing overall execution time. To enable parallelization, we must have multiple processor cores. This has led to the popularization of multicore architectures. However, writing parallel applications is not trivial. A program must be either written from the start to be executed in parallel, or later adapted for parallel execution. The programmer has the error-prone task of parallelizing the application through use of concurrency and parallelism constructs. Locking, the most common concurrency option, presents risks for inexperienced programmers, such as the famous Deadlock and Livelock problems. As we move from single core architectures to multicore, our programming languages need to make it easier for the programmers to use concurrency. Many researchers have pointed at Software Transactional Memory (STM) as an answer to that issue, as it is a lock-free, abstract way to guarantee isolated access to shared resources. But adapting for STM a program that uses lock is not simple. Besides being an error-prone task, technical details of the language might require special attention to preserve the program’s behavior. In this dissertation, we propose a set of program transformations for concurrency constructs in Haskell, a purely functional programming language. They may be used to refactor a program’s existing locks into transactional constructs from Haskell’s STM implementation. This allows a programmer to gain the benefits of working on STM even for programs which were already developed using locks. Each transformation is accompanied by execution examples and a discussion on its ability to preserve program behavior. We also present a supporting study, in which a controlled experiment was used to evaluate the benefits of locks or STM for the development of Haskell programs. Although subjects’ opinions tended to favor lock-based concurrency, those which used STM overall committed significantly fewer mistakes and required on average 12% less time to finish their assignments. / Recentemente, a queda na taxa de crescimento da quantidade de transístores integráveis em processadores tem desacelerado o crescimento de poder computacional. A lei de Moore parece aproximar-se de seu fim. Com isso, é desafiada a premissa de que software escrito hoje terá melhor desempenho no futuro simplesmente devido à evolução dos processadores. Ainda assim, aplicações paralelas ainda podem se tornar mais eficientes ao se distribuir trabalho entre diferentes processadores para execução simultânea. Para permitir a paralelização, são necessários múltiplos núcleos de processamento, o que tem levado à popularização de arquiteturas multinúcleo. Entretanto, a escrita de aplicações paralelas não é trivial. Deve-se escrever um programa para execução paralela desde sua concepção, ou adaptá-lo posteriormente para execução paralela. O programador tem a difícil tarefa de paralelização da aplicação através do uso de construções de concorrência e paralelismo. Travas, a mais comum opção para concorrência, apresentam riscos para programadores inexperientes, tais quais os famosos problemas de Deadlock e Livelock. Ao adaptarem-se de arquiteturas de um único núcleo para as de multinúcleo, as linguagens de programação precisam facilitar o uso de concorrência para os programadores. Muitos pesquisadores têm indicado Memória Transacional em Software (STM, do inglês Software Transactional Memory) como a resposta para esse problema, por ser uma forma abstrata e não bloqueante para garantia de acesso isolado a recursos compartilhados. Mas adaptar para STM programas que usam travas não é simples. Além de ser uma atividade propensa a erros, detalhes técnicos da linguagem podem requerer cuidados para se preservar o comportamento do programa. Nesta dissertação, é proposto um conjunto de transformações de programas para construções de concorrência em Haskell, uma linguagem de programação puramente funcional. Elas podem ser usadas para refatorar travas de um programa para uso de construções transacionais da implementação de STM em Haskell. Isso permite ao programador aproveitar os benefícios do trabalho com STM mesmo para programas já desenvolvidos com uso de travas. Cada transformação é acompanhada de exemplos de execução e uma discussão sobre sua capacidade de preservar o comportamento do programa. Também é apresentado um estudo de apoio, no qual um experimento controlado foi usado para avaliar os benefícios do uso de travas ou STM no desenvolvimento de programas em Haskell. Apesar das opiniões dos participantes terem favorecido o uso de travas, aqueles que usaram STM cometeram em geral menos erros e em média precisaram de 12% a menos de tempo para terminar suas tarefas.
95

Understanding the energy Behavior of concurrent haskell programs

LIMA, Luís Gabriel Nunes Ferreira 22 August 2016 (has links)
Orientador também citado por: CASTOR FILHO, Fernando / Submitted by Rafael Santana (rafael.silvasantana@ufpe.br) on 2017-05-04T19:07:33Z No. of bitstreams: 2 license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5) dissertacao-final.pdf: 950190 bytes, checksum: 71ffd939c48d9c920666a09a05dc0c53 (MD5) / Made available in DSpace on 2017-05-04T19:07:33Z (GMT). No. of bitstreams: 2 license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5) dissertacao-final.pdf: 950190 bytes, checksum: 71ffd939c48d9c920666a09a05dc0c53 (MD5) Previous issue date: 2016-09-06 / Energy-efficiency has concerned hardware and low-level software designers for years. However, the rapid proliferation of battery-powered mobile devices combined with the growing worldwide movement towards sustainability have caused developers and researchers to study the energy impact of application software in execution. Recent work has studied the effect that factors such as code obfuscation, object-oriented refactorings, and data types have on energy efficiency. In this work, we attempt to shed light on the energy behavior of concurrent programs written in a purely functional language, Haskell. We conducted an empirical study to assess the performance and energy behavior of three different thread management approaches and three primitives for concurrency control using nine different benchmarks with an experimental space exploration of more than 400 configurations. In this study, we found out that small changes can make a big difference in terms of energy consumption. For instance, in one of our benchmarks, under a specific configuration, choosing one concurrency control primitive (MVar) over another (TMVar) can yield 60% energy savings. Also, the relationship between energy consumption and performance is not always clear. We found scenarios where the configuration with the best performance also exhibited the worst energy consumption. To support developers in better understanding this complex relationship, we have extended two existing performance analysis tools also to collect and present data about energy consumption. In addition, based on the results of our empirical study, we provide a list of guidelines for developers with good practices for writing energy-efficient code in this environment. / Há anos eficiência energética é uma preocupação para designers de hardware e software baixonível. Entretanto, a rápida proliferação de dispositivos móveis alimentados por bateria combinado com o crescente movimento global em busca de sustentabilidade tem motivado desenvolvedores e pesquisadores a estudar o impacto energético de softwares de aplicação em execução. Trabalhos recentes tem estudado o efeito que fatores como obsfucação de código, refatorações em linguagem orientadas à objetos e tipos de dados tem em eficiência energética. Este trabalho tenta lançar luz sobre o comportamento energético de programas concorrentes escritos em uma linguagem puramente funcional, Haskell. Nós conduzimos um estudo empírico para avaliar o desempenho e o comportamento energético de três diferentes abordagens para gerenciamento de threads e três primitivas para controle de concorrência usando nove diferentes benchmarks com um espaço de exploração experimental de mais de 400 configurações. Neste estudo, descobrimos que pequenas mudanças podem fazer uma grande diferença em termos de consumo de energia. Por exemplo, em um dos benchmarks, sob uma configuração específica, escolher uma primitiva de controle de concorrência (MVar) ao invés de outra (TMVar) pode acarretar em uma economia de 60% em consumo de energia. Percebemos também que nem sempre a relação entre consumo de energia e desempenho é clara. Em alguns cenários analisados, a configuração com melhor desempenho também apresentou o pior consumo de energia. Para ajudar desenvolvedores a entender melhor essa complexa relação, nós estendemos duas ferramentas de análise de desempenho existentes para coletar e apresentar dados sobre consumo de energia. Adicionalmente, baseado nos resultados do nosso estudo empírico, listamos um conjunto de recomendações para desenvolvedores com boas práticas de como escrever código energeticamente eficiente nesse ambiente.
96

Measuring Functional Purity In C# : Developing and implementing a technique for measuring functional purity in C#

Melker, Österberg January 2021 (has links)
Functional purity is a fundamental part of the functional programming paradigm. A function is functionally pure if it is side-effect free and deterministic. Pure functions provide many benefits compared to impure ones, including guaranteed thread-safety as well as easier testing, debugging and maintenance. But how can functional purity be measured? This thesis develops a method for statically measuring the level of functional purity in any given C# program. It also investigates problems with determining purity in object-oriented languages, with a focus on C#. Moreover, a prototype of the method is implemented in order to evaluate the method using a benchmark consisting of 11 open source repositories that use C#'s [Pure] attribute. The [Pure] attribute can be placed in front of a method declaration to indicate that it is side-effect free. Due to a number of limitations to the implementation as well as to [Pure]'s definition of functional purity, which excludes determinism, the results of the evaluation appear relatively poor. After normalizing the implementation's classification distribution for each repository, its classification of pure functions has a precision of 65% and recall 17%, and its classification of impure functions has 54% precision and 69% recall. Nevertheless, the prototype still shows the potential of the full analysis method. A complete implementation of the analysis method could potentially yield a fully working system for measuring any C# program's level of functional purity.
97

A framework for creating observable web services

Zaccheus, Stan-Erik January 2015 (has links)
In the intelligence community, intelligence is defined as the right information to the right party at the right time. This definition also applies to business intelligence used by government and financial institutions, patient information used by healthcare providers and meteorological and geological reports provided by research institutions and environmental agencies. Modern software development has to tackle the problems associated with building large and complex distributed systems that have to deliver business value in a reliable and timely fashion; even the best prediction has no value if it is delivered after the fact. It is imperative that the producers in a larger system are responsible for publishing their output to minimize the lead-time for consumers. Using regular web services, the consumer can only check for new data by polling the producer. In a system with many consumers, resources are wasted handling these status requests. Instead of the client interacting with service provider, the client should be reacting to it. The reactive programming model supports building systems with these properties. On the .NET platform, the Reactive Extensions library provides functionality for creating reactive applications by composing functions that operate on asynchronous event streams. The library provides powerful tools for building reactive programs, unfortunately it does not contain an abstraction for inter-process event streams that is needed for building distributed reactive systems. This thesis presents the design and implementation of a framework for creating and using observable web services as a means to bridge the inter-process gap that exist when building a system using Reactive Extensions. The solution is based on a conceptual modeled created by extending the web service architecture. The solution is implemented as a framework made up by two parts; a service component used for creating observable web services and client component that connects to an observable web service and generates code used for subscribing to events exposed by that service. The client subscription functionality integrates with Reactive Extensions, making it possible to build reactive and distributed systems. Integration tests are used to verify that the implementation fulfils the requirements specified for the conceptual model. / I underrättelsevärlden definieras en underrättelse som väsentlig information förmedlad till rätt instans vid rätt tidpunkt. Samma definition gäller för omvärldsanalys som används av regeringar och finansinstitut, patientinformation som används av vårdaktörer och metrologiska och geologiska rapporter som tillhandahålls av forskningsinstitut och miljöorganisationer. Modern mjukvaruutveckling måste lösa problem associerade med att bygga stora, komplexa och distribuerade system som på ett tillförlitligt sätt ska leverera företagsnytta i rätt tid; även den bästa förutsägelsen är utan värde om den levereras för sent. Det är absolut nödvändigt producenter i ett större system ansvarar för att publicera sitt data så att konsumenter kan agera med så lite ledtid som möjligt. Vid användande av vanliga webtjänster måste klienten aktivt fråga om ny data finns tillgänglig. I ett system med många användare slösas resurser på att hantera statusefterfrågningar. Istället för att klienten interagerar interaktivt med tjänsten, borde den istället reagera reaktivt. Med den reaktiva programmeringsmodellen stöds systemkonstruktion med dessa egenskaper. På .NET-plattformen tillhandahåller kodbiblioteket Reactive Extensions funktionalitet för att skapa reaktiva applikationer genom skapandet av funktioner som arbetar med asynkrona händelseströmmar. Biblioteket tillhandahåller kraftfulla verktyg för utformningen av reaktiva program, dock innehåller den inte en abstraktion för arbete med händelseströmmar som rör sig mellan olika processer, en nödvändighet för skapandet av distribuerade reaktiva system. Denna uppsats presenterar den bakomliggande designen och implementationen av ett ramverk för skapandet och användandet av observerbara webtjänster vars syfte är att brygga händelseströmmar mellan olika processer. Lösningen är baserad på en konceptuell modell som bygger på arkitekturen för webbtjänster. Den är implementerad som ett ramverk som består av två delar; en tjänstekomponent som används för att skapa observerbara webbtjänster och klientkomponent som ansluter till en observerbar webbtjänst och genererar kod som används för att prenumerera på händelser som exponeras av denna tjänst. Prenumerationsfunktionaliteten är skapad för att fungera med Reactive Extensions och gör det möjligt att bygga reaktiva och distribuerade system. Integrationstest används för att kontrollera att ramverket uppfyller de krav som anges för den konceptuella modellen.
98

HOLCF '11: A Definitional Domain Theory for Verifying Functional Programs

Huffman, Brian Charles 01 January 2011 (has links)
HOLCF is an interactive theorem proving system that uses the mathematics of domain theory to reason about programs written in functional programming languages. This thesis introduces HOLCF '11, a thoroughly revised and extended version of HOLCF that advances the state of the art in program verification: HOLCF '11 can reason about many program definitions that are beyond the scope of other formal proof tools, while providing a high degree of proof automation. The soundness of the system is ensured by adhering to a definitional approach: New constants and types are defined in terms of previous concepts, without introducing new axioms. Major features of HOLCF '11 include two high-level definition packages: the Fixrec package for defining recursive functions, and the Domain package for defining recursive datatypes. Each of these uses the domain-theoretic concept of least fixed points to translate user-supplied recursive specifications into safe low-level definitions. Together, these tools make it easy for users to translate a wide variety of functional programs into the formalism of HOLCF. Theorems generated by the tools also make it easy for users to reason about their programs, with a very high level of confidence in the soundness of the results. As a case study, we present a fully mechanized verification of a model of concurrency based on powerdomains. The formalization depends on many features unique to HOLCF '11, and is the first verification of such a model in a formal proof tool.
99

Functional and Imperative Object-Oriented Programming in Theory and Practice : A Study of Online Discussions in the Programming Community

Jernlund, Per, Stenberg, Martin January 2019 (has links)
Functional programming (FP) has progressively become more prevalent and techniques from the FP paradigm has been implemented in many different Imperative object-oriented programming (OOP) languages. However, there is no indication that OOP is going out of style. Nevertheless the increased popularity in FP has sparked new discussions across the Internet between the FP and OOP communities regarding a multitude of related aspects. These discussions could provide insights into the questions and challenges faced by programmers today. This thesis investigates these online discussions in a small and contemporary scale in order to identify the most discussed aspect of FP and OOP. Once identified the statements and claims made by various discussion participants were selected and compared to literature relating to the aspects and the theory behind the paradigms in order to determine whether there was any discrepancies between practitioners and theory. It was done in order to investigate whether the practitioners had different ideas in the form of best practices that could influence theories. The most discussed aspect within FP and OOP was ​immutability and state​ relating primarily to the aspects of ​concurrency ​ and ​performance​ . This thesis presents a selection of representative quotes that illustrate the different points of view held by groups in the community and then addresses those claims by investigating what is said in literature. It was shown that there were no direct discrepancies between the practitioners and the theory.
100

Uma implementação paralela do AIRS em Scala / A parallel implementation of AIRS in Scala

Salgado, Filipe Ferraz 15 September 2010 (has links)
Com o avanço tecnológico dos últimos anos passou a ser normal vermos microprocessadores com múltiplos núcleos (cores). A expectativa é de que o crescimento da quantidade de núcleos passe a ser maior do que o crescimento da velocidade desses núcleos. Assim, além de se preocuparem em otimizar algoritmos sequenciais, os programadores começaram a dar mais atenção às possibilidades de aproveitamento de toda a capacidade oferecida pelos diversos cores. Existem alguns modelos de programação que permitem uma abordagem concorrente. O modelo de programação concorrente mais adotado atualmente é o baseado em threads, que utiliza memória compartilhada e é adotado em Java. Um outro modelo é o baseado em troca de mensagens, no qual as entidades computacionais ativas são denominadas atores. Nesse trabalho, estudamos a linguagem Scala e seu modelo de atores. Além disso, implementamos em Scala uma versão paralela de um algoritmo de classicação que simula o sistema imunológico dos animais, o AIRS paralelo, e comparamos seu desempenho com a versão em Java. / With the technological advance of the last years it has been normal to see microprocessors with multiple cores. The expectation is that the growth of number of cores becomes greater than the growth of the speed of these cores. This way, besides worrying about optimizing sequential algorithms, developers started to give more attention to the possibilities of proting from all capacity offered by the cores. There exists a few programming models that allow a concurrent approach. In these days, the most adopted concurrent programming model is the one based on threads, which uses shared memory and is adopted in Java. Other model is based on message passing, on which the active computational entities are called actors. In this project, we studied Scala language and its model based on actors. Besides that, we implemented in Scala a parallel version of a classification algorithm that simules the immune system of the animals, parallel AIRS, and compared its performance with the Java version.

Page generated in 0.2268 seconds