74,173 research outputs found

    Abstractions in Logic Programs

    Get PDF
    Most logic programming languages have the first-order, classical theory of Horn clauses as their logical foundation. Purely proof-theoretical considerations show that Horn clauses are not rich enough to naturally provide the abstraction mechanisms that are common in most modern, general purpose programming languages. For example, Horn clauses do not incorporate the important software abstraction mechanisms of modules, data type abstractions, and higher-order programming. As a result of this lack, implementers of logic programming languages based on Horn clauses generally add several nonlogical primitives on top of Horn clauses to provide these missing abstraction mechanisms. Although the missing features are often captured in this fashion, formal semantics of the resulting languages are often lacking or are very complex. Another approach to providing these missing features is to enrich the underlying logical foundation of logic programming. This latter approach to providing logic programs with these missing abstraction mechanisms is taken in this paper. The enrichments we will consider have simple and direct operational and proof theoretical semantics

    Algorithmic Abstraction Via Polymorphism In Object-oriented Programming Languages

    Get PDF
    The abstraction gap between algorithms and functions (procedures) causes numerous duplicate efforts in implementing the same algorithms as well as apparent under-use of many efficient algorithms. A solution to this problem is to realize algorithmic abstraction at the programming language level in addition to data abstraction. For this purpose, a programming language needs to have (1) an adequate type hierarchy for defining the domains of algorithms and (2) proper constructs for writing the sequences of steps of algorithms that are polymorphic to all types of objects in an algorithm domain.;Many object-oriented programming languages use a two-level hierarchy of entities (objects and classes) to support data abstraction. This hierarchy is only adequate to support two forms of polymorphism: universal-bounded polymorphism and inclusion-bounded polymorphism. Neither of them is proper for algorithmic abstraction.;The main aim of this thesis is to develop an adequate type structure and proper forms of polymorphism for algorithmic abstraction in object-oriented programming languages. We define a four-level hierarchy of entities: objects, classes, types, and kinds. Objects and classes have ordinary meanings; a type is a set of classes that have exactly the same external behaviour; and a kind is a set of types that share common properties. Based on the type hierarchy, we establish various forms of polymorphism which allow us to write polymorphic functions at different abstraction levels. We show that kinds are at the proper abstraction level for defining the domains of algorithms, and that kind-bounded polymorphic functions are algorithms which we propose to be supported at the programming language level.;Another goal of this thesis is to develop an object-oriented algebraic theory for the semantics of the four-level type hierarchy. In our approach, a kind corresponds to a structured signature which can have other signatures as its sorts. Thus, any algebra of a structured signature is a structured algebra which can have other algebras as its domains. We show that a structured algebra fits naturally into the structure of a class

    Classical Concepts in Quantum Programming

    Get PDF
    The rapid progress of computer technology has been accompanied by a corresponding evolution of software development, from hardwired components and binary machine code to high level programming languages, which allowed to master the increasing hardware complexity and fully exploit its potential. This paper investigates, how classical concepts like hardware abstraction, hierarchical programs, data types, memory management, flow of control and structured programming can be used in quantum computing. The experimental language QCL will be introduced as an example, how elements like irreversible functions, local variables and conditional branching, which have no direct quantum counterparts, can be implemented, and how non-classical features like the reversibility of unitary transformation or the non-observability of quantum states can be accounted for within the framework of a procedural programming language.Comment: 11 pages, 4 figures, software available from http://tph.tuwien.ac.at/~oemer/qcl.html, submitted for QS2002 proceeding

    TrueGrid: Code the table, tabulate the data

    Get PDF
    Spreadsheet systems are live programming environments. Both the data and the code are right in front you, and if you edit either of them, the effects are immediately visible. Unfortunately, spreadsheets lack mechanisms for abstraction, such as classes, function definitions etc. Programming languages excel at abstraction, but most mainstream languages or integrated development environments (IDEs) do not support the interactive, live feedback loop of spreadsheets. As a result, exploring and testing of code is cumbersome and indirect. In this paper we propose a method to bring both worlds closer together, by juxtaposing ordinary code and spreadsheet-like grids in the IDE, called TrueGrid. Using TrueGrid spreadsheet cells can be programmed with a fully featured programming language. Spreadsheet users then may enjoy benefits of source code, including added abstractions, syntax highlighting, version control, etc. On the other hand, programmers may leverage the grid for interactive exploring and testing of code. We illustrate these benefits using a prototype implementation of True- Grid that runs in the browser and uses Javascript as a programming language

    Relational Parametricity for Computational Effects

    Get PDF
    According to Strachey, a polymorphic program is parametric if it applies a uniform algorithm independently of the type instantiations at which it is applied. The notion of relational parametricity, introduced by Reynolds, is one possible mathematical formulation of this idea. Relational parametricity provides a powerful tool for establishing data abstraction properties, proving equivalences of datatypes, and establishing equalities of programs. Such properties have been well studied in a pure functional setting. Many programs, however, exhibit computational effects, and are not accounted for by the standard theory of relational parametricity. In this paper, we develop a foundational framework for extending the notion of relational parametricity to programming languages with effects.Comment: 31 pages, appears in Logical Methods in Computer Scienc

    A library for developing real-time and embedded applications in C

    Get PDF
    Next generation applications will demand more cost-effective programming abstractions to reduce increasing maintenance and development costs. In this context, the article explores the integration of an efficient programming language and high-level real-time programming abstractions. The resulting abstraction is called Embedded Cyber Physical C (ECP-C) and it is useful for designing real-time applications directly on C. The abstraction has its roots on the real-time Java: one of the most modern programming languages, which benefited from mature programming patterns previously developed for other languages. It also targets embedded processors running on limited hardware. ECP-C takes the programming abstractions described in real-time Java and reflects them into a C application system, providing extensions for multi-threading, resource sharing, memory management, external event, signaling, and memory access. It also reports on the performance results obtained in a set of infrastructures used to check ECP-C, providing clues on the overhead introduced by these mechanisms on limited infrastructures. (C) 2015 Elsevier B.V. All rights reserved.This work has been partially funded by Distributed Java Infrastructure for Real-Time Big-Data (CAS14/00118) and by eMadrid: Investigación y Desarrollo de tecnologías educativas en la Comunidad de Madrid (S2013/ICE-2715). This research was supported by the national project REM4VSS (TIN-2011-28339) and by European Union’s 7th Framework Programme Under Grant Agreement FP7-IC6-318763

    The role of concurrency in an evolutionary view of programming abstractions

    Full text link
    In this paper we examine how concurrency has been embodied in mainstream programming languages. In particular, we rely on the evolutionary talking borrowed from biology to discuss major historical landmarks and crucial concepts that shaped the development of programming languages. We examine the general development process, occasionally deepening into some language, trying to uncover evolutionary lineages related to specific programming traits. We mainly focus on concurrency, discussing the different abstraction levels involved in present-day concurrent programming and emphasizing the fact that they correspond to different levels of explanation. We then comment on the role of theoretical research on the quest for suitable programming abstractions, recalling the importance of changing the working framework and the way of looking every so often. This paper is not meant to be a survey of modern mainstream programming languages: it would be very incomplete in that sense. It aims instead at pointing out a number of remarks and connect them under an evolutionary perspective, in order to grasp a unifying, but not simplistic, view of the programming languages development process
    • …
    corecore