13 research outputs found

    The State of the Art of Automatic Programming

    Get PDF
    Automaatprogrammeerimine või koodi genereerimine on teatud tüüpi arvutiprogrammide loomisviis, kus kood genereeritakse mõne tööriista abil, mis võimaldab arendajatel koodi kirjutada kõrgemal abstraktsioonitasemel. Selliste programmide rakendamine tarkvaraarenduse protsessis on hea viis programmeerijate produktiivsuse tõstmiseks, võimaldades neil keskenduda pigem käesolevale ülesandele kui implementatsiooni detailidele. Senises teaduskirjanduses on vaadeldud konkreetseid lähenemisi või meetodeid eraldi. Väga vähesed uurimustööd vaatlevad aga kogu valdkonna viimast taset. Käesolevas töös käsitletakse automaatprogrammeerimist olemasoleva kirjanduse süstemaatilise kirjandusülevaate meetodi abil. Töö teeb ülevaate teemaga seonduvatest algoritmidest, probleemidest ning uurmisvaldkonna avatud uurimisküsimustest ning võrdleb valdkonna hetketaset praktika hetketasemega. Vaaldeldud 37 asjakohasest uuringust tegelesid 19 automaatprogrammeerimise üldise määratlemise ja alateemadega. Kolmkümmend uuringut pakkusid välja konkreetse algoritmi või lähenemisviisi. Esitatud tehnikatest rakendati 2 praktikas. Viimasel ajal on automaatprogrammerimise fookus nihkunud programmide sünteesilt induktiivsele programmeerimisele, mille on põhjustanud läbimurded tehisintellekti valdkonnas. Mõistete ja alateemade määratlus on teadlaste vahel ühtne. Õigete spetsifikatsioonide sõnastamine ja piisava teabe andmine automatiseerimiseks on endiselt lahtine uurimisküsimus.Automatic programming or code generation is a type of computer programming where the code is generated using some tools allowing developers to write code at the higher level of abstraction. Implementing these types of programs into the software development process is a good way to boost programmers’ performance by focusing on the task at hand rather than implementation details. Current literature on the subject reviews single approach or method. Very few of them are reviewing state of the art in general. This paper reviews the state of the art of automatic programming by overviewing the existing literature on the topic using systematic literature review method. The paper overviews approaches and algorithms of the topic, examines issues and open questions in the field and compares the state of the art to the state of the practice. Of 37 relevant studies, 19 addressed general definitions and subtopics of automatic programming. 30 presented specific algorithms or approaches. 2 of proposed techniques were implemented in practice. Currently, the focus of automatic programming shifted from program synthesis to inductive programming, caused by a breakthrough in artificial intelligence. Definition of the term and subtopics is consistent between scholars. However, formulating correct specification and providing sufficient information for automation is still an open research question

    Fluent APIs in Functional Languages (full version)

    Full text link
    Fluent API is an object-oriented pattern for smart and elegant embedded DSLs. As fluent API designs typically rely on function overloading, they are hard to realize in functional programming languages. We show how to write functional fluent APIs using parametric polymorphism and unification instead of overloading. Our designs support all regular and deterministic context-free DSLs and beyond

    EDSL en Haskell para la programaci ́on segura respecto a la propiedad Delimited Release

    Get PDF
    La confidencialidad de la información manipulada por sistemas informáticos ha tomado mayor importancia con el uso creciente de aplicaciones a través de internet. Los mecanismos de seguridad tradicionales como control de acceso o criptografía no proveen protección punta a punta de los datos: funcionan eficientemente en limitar su acceso, pero no pueden hacer nada para evitar su propagación. Para complementar estos mecanismos de seguridad, surgen las técnicas de control de flujo de información (IFC, Information-Flow Control), las cuales permiten establecer garantías sobre la confidencialidad e integridad de los datos. analizando cómo fluye la información dentro del programa. En este contexto surgen políticas de confidencialidad que garantizan que la información confidencial no puede ser inferida a partir de los datos públicos. No-interferencia es un ejemplo de una política de seguridad. Lo interesante de esta propiedad es que puede ser chequeada de manera estática mediante un sistema de tipos, por lo tanto, cuando un programa tipa en ese sistema de tipos, significa que satisface la propiedad de seguridad. Para que los lenguajes de seguridad tengan utilidad práctica necesitamos mecanismos de desclasificación, en los cuales el flujo de información sea controlado y al mismo tiempo se permita liberar información confidencial a canales públicos, pero solo de manera permitida y controlada, la cual la propiedad de no-interferencia resulta ser demasiado restrictiva. Delimited Release es una propiedad de seguridad que garantiza que la desclasificación no puede ser usada para filtrar información de manera no deseada. El objetivo de esta tesina es desarrollar un lenguaje de dominio específico embebido en Haskell para escribir programas seguros respecto a la propiedad Delimited Release

    Just In Time Assembly (JITA) - A Run Time Interpretation Approach for Achieving Productivity of Creating Custom Accelerators in FPGAs

    Get PDF
    The reconfigurable computing community has yet to be successful in allowing programmers to access FPGAs through traditional software development flows. Existing barriers that prevent programmers from using FPGAs include: 1) knowledge of hardware programming models, 2) the need to work within the vendor specific CAD tools and hardware synthesis. This thesis presents a series of published papers that explore different aspects of a new approach being developed to remove the barriers and enable programmers to compile accelerators on next generation reconfigurable manycore architectures. The approach is entitled Just In Time Assembly (JITA) of hardware accelerators. The approach has been defined to allow hardware accelerators to be built and run through software compilation and run time interpretation outside of CAD tools and without requiring each new accelerator to be synthesized. The approach advocates the use of libraries of pre-synthesized components that can be referenced through symbolic links in a similar fashion to dynamically linked software libraries. Synthesis still must occur but is moved out of the application programmers software flow and into the initial coding process that occurs when programming patterns that define a Domain Specific Language (DSL) are first coded. Programmers see no difference between creating software or hardware functionality when using the DSL. A new run time interpreter is introduced to assemble the individual pre-synthesized hardware accelerators that comprise the accelerator functionality within a configurable tile array of partially reconfigurable slots at run time. Quantitative results are presented that compares utilization, performance, and productivity of the approach to what would be achieved by full custom accelerators created through traditional CAD flows using hardware programming models and passing through synthesis

    Functional programming applied to electrical engineering

    Get PDF
    Many engineering projects rely on software to execute simulations and analysis of a wide variety of domains. Computer programs are great allies of the engineers when it comes to simulations, including the ones for electromagnetic transient analysis. However, a single programming paradigm (the imperative paradigm) seems to have dominated most of the commercial and academic applications. This work presents and implements an algorithm to analyse simple electromagnetic transient circuits adopting functional programming. The code uses the nodal analysis found on industry programs like the EMTP (Electromagnetic Transients Program). The results of adopting the Haskell language and functional programming are very favourable to the engineering community: programs with higher chances to have fewer bugs, with concise implementations and with more focus on the mathematical aspects of the algorithm

    Formally Verified Bundling and Appraisal of Evidence for Layered Attestations

    Get PDF
    Remote attestation is a technology for establishing trust in a remote computing system. Core to the integrity of the attestation mechanisms themselves are components that orchestrate, cryptographically bundle, and appraise measurements of the target system. Copland is a domain-specific language for specifying attestation protocols that operate in diverse, layered measurement topologies. In this work we formally define and verify the Copland Virtual Machine alongside a dual generalized appraisal procedure. Together these components provide a principled pipeline to execute and bundle arbitrary Copland-based attestations, then unbundle and evaluate the resulting evidence for measurement content and cryptographic integrity. All artifacts are implemented as monadic, functional programs in the Coq proof assistant and verified with respect to a Copland reference semantics that characterizes attestation-relevant event traces and cryptographic evidence structure. Appraisal soundness is positioned within a novel end-to-end workflow that leverages formal properties of the attestation components to discharge assumptions about honest Copland participants. These assumptions inform an existing model-finder tool that analyzes a Copland scenario in the context of an active adversary attempting to subvert attestation. An initial case study exercises this workflow through the iterative design and analysis of a Copland protocol and accompanying security architecture for an Unpiloted Air Vehicle demonstration platform. We conclude by instantiating a more diverse benchmark of attestation patterns called the "Flexible Mechanisms for Remote Attestation", leveraging Coq's built-in code synthesis to integrate the formal artifacts within an executable attestation environment

    The Remote Monad

    Get PDF
    Remote Procedure Calls are an integral part of the internet of things and cloud computing. However, remote procedures, by their very nature, have an expensive overhead cost of a network round trip. There have been many optimizations to amortize the network overhead cost, including asynchronous remote calls and batching requests together. In this dissertation, we present a principled way to batch procedure calls together, called the Remote Monad. The support for monadic structures in languages such as Haskell can be utilized to build a staging mechanism for chains of remote procedures. Our specific formulation of remote monads uses natural transformations to make modular and composable network stacks which can automatically bundle requests into packets by breaking up monadic actions into ideal packets. By observing the properties of these primitive operations, we can leverage a number of tactics to maximize the size of the packets. We have created a framework which has been successfully used to implement the industry standard JSON-RPC protocol, a graphical browser-based library, an efficient byte string implementation, a library to communicate with an Arduino board and database queries all of which have automatic bundling enabled. We demonstrate that the result of this investigation is that the cost of implementing bundling for remote monads can be amortized almost for free, when given a user-supplied packet transportation mechanism

    Programhelyesség- bizonyítás fordítási időben

    Get PDF
    A dolgozat első tézise egy formális programmodellt vezet be haladási és biztonsági kritériumok megfogalmazására alkalmas temporális logikai operátorokkal. A modell levezetési szabályai bizonyítással együtt kerülnek bemutatásra. A bizonyított tételeken alapszik az az algoritmus, amely képes ellenőrizni a modellben felírt levezetések helyességét. A formális modell használatát egy Haskellbe ágyazott nyelv teszi lehetővé. Ennek kapcsán a dolgozat elemzi a Haskellben lehetséges nyelvbeágyazási technikákat. A megalkotott nyelv használatát a C++ egyes utasításainak specifikációja és egyszerű C++ programok levezetése demonstrálja. A második tézis a funkcionális nyelvek mintaillesztésének egy hiányosságával foglalkozik. Részletesen elemezi a beágyazott programokra történő mintaillesztés lehetőségeit funkcionális nyelvekben, és megmutatja, hogy ezek egyike sem nyújt kielégítő megoldást. A megoldás első lépése a korlátozott függvényminták fogalmának kidolgozása, amely a Curry nyelvből ismert függvényminták megszorítása. A korlátozott függvényminták szemantikája és implementációja a funkcionális nyelvek klasszikus mintaillesztésére visszavezethető. A korlátozott függvényminták alkalmasak a listaprefix minták, az n+k minták és a polimorf számliterálokra történő mintaillesztés egységes, konzisztens megvalósítására. A dolgozat bizonyítja, hogy a korlátozott függvényminta tulajdonság nem eldönthető. Ezért a megoldás második eleme az ellenőrizhető függvényminták bevezetése. Ez a fogalom egy döntési eljáráson alapszik, amely a korlátozott függvényminták egy szigorú részhalmazát fogadja el, és garantáltan terminál. Az elfogadott részhalmazban valamennyi korábban felsorolt használati eset benne van, és a döntési eljárás fordítóprogramokba beépíthető. A nyelvi kiterjesztés használata fordítóprogramba épített támogatás nélkül is haszálható egy függvénykönyvtár segítségével. A harmadik tézis a korábban bevezetett technikákat a formális szoftverfejlesztés egyes nemtriviális problémáinak megoldására használja. A dolgozat megmutatja, hogy a bizonyítások előállítására használt metaprogramozás biztonságos és hatékony eszköz. Bizonyítássablonokat ad egyes klasszikus matematikai bizonyítási technikákhoz és programkonstrukciók levezetési szabályaihoz. A kidolgozott rendszerben lehetőség nyílik dinamikus memóriát és mutatókat használó programok levezetésére az elválasztó logika hatékony bizonyítási stílusát használva. Axiomatizálhatók továbbá a C++ Standard Template Library konténereinek és bejáróinak műveletei

    Towards Language-Oriented Modeling

    Get PDF
    In this habilitation à diriger des recherches (HDR), I review a decade of research work in the fields of Model-Driven Engineering (MDE) and Software Language Engineering (SLE). I propose contributions to support a language-oriented modeling, with the particular focus on enabling early validation & verification (V&V) of software-intensive systems. I first present foundational concepts and engineering facilities which help to capture the core domain knowledge into the various heterogeneous concerns of DSMLs (aka. metamodeling in the small), with a particular focus on executable DSMLs to automate the development of dynamic V&V tools. Then, I propose structural and behavioral DSML interfaces, and associated composition operators to reuse and integrate multiple DSMLs (aka. metamodeling in the large).In these research activities I explore various breakthroughs in terms of modularity and reusability of DSMLs. I also propose an original approach which bridges the gap between the concurrency theory and the algorithm theory, to integrate a formal concurrency model into the execution semantics of DSMLs. All the contributions have been implemented in software platforms — the language workbench Melange and the GEMOC studio – and experienced in real-world case studies to assess their validity. In this context, I also founded the GEMOC initiative, an attempt to federate the community on the grand challenge of the globalization of modeling languages
    corecore