Processing data at different rates is generally a hard problem in reactive programming. Buffering problems, lags, and concurrency issues often occur. Many of these problems are clock errors, where data at different ra...
详细信息
ISBN:
(纸本)9781450358354
Processing data at different rates is generally a hard problem in reactive programming. Buffering problems, lags, and concurrency issues often occur. Many of these problems are clock errors, where data at different rates is combined incorrectly. Techniques to avoid clock errors, such as type-level clocks and deterministic scheduling, exist in the field of synchronous programming, but are not implemented in general-purpose languages like Haskell. Rhine is a clock-safe library for synchronous and asynchronous functional Reactive programming (FRP). It separates the aspects of clocking, scheduling and resampling from each other, and ensures clock-safety at the type level. Concurrent communication is encapsulated safely. Diverse reactive subsystems can be combined in a coherent, declarative data-flow framework, while correct interoperability of data at different rates is guaranteed by type-level clocks. this provides a general-purpose framework that simplifies multi-rate FRP systems and can be used for game development, media applications, GUIs and embedded systems, through a flexible API with many reusable components.
Social studies educators often use stories to convey historical changes over time. Data visualizations are powerful tools that can help illustrate and investigate these stories and the questions surrounding them. the ...
详细信息
ISBN:
(纸本)9781450361859
Social studies educators often use stories to convey historical changes over time. Data visualizations are powerful tools that can help illustrate and investigate these stories and the questions surrounding them. the ability to analyze, interpret, evaluate, and use data and data visualizations - known as data literacy - has become an increasingly important component of K-12 social studies education in recent years. In an effort to improve data literacy, teachers see a role for computer science in social studies education. In Spring 2019, we conducted a pilot participatory design session with 18 social studies pre-service educators with little to no programming experience. this was a unique session where we asked pre-service teachers taking a course on data literacy to inform the design of programming languages, specifically for social studies education. We structured our session as participatory design [1], a novel method in computing education research, where teachers evaluated two programming experiences and then told us what they would like in future programming languages and experiences. the Minimal Manual [2] was used as a guide in the design of the programming activity sheets. Survey results showed teachers initially did not believe programming would be useful, but afterwards their opinions changed and they even showed eagerness to learn and do more withprogramming for their purposes. the characteristics that the teachers most valued were features of the programming environment, rather than the language syntax or semantics. For their students, they preferred a programming language that would be useful in other classes as well as in social studies. We are currently using conjecture maps [3] to process and analyze the data from our participatory design session. Conjecture maps are meant to specify theoretically salient features in the learning environment design by mapping out how they are predicted to work to produce desired outcomes. It has enabled us to see
programming heavily relies on entering text using traditional QWERTY keyboards, which poses challenges for people with limited upper-body movement. Developing tools using a publicly available speech recognition API co...
详细信息
ISBN:
(纸本)9781450356510
programming heavily relies on entering text using traditional QWERTY keyboards, which poses challenges for people with limited upper-body movement. Developing tools using a publicly available speech recognition API could provide a basis for keyboard free programming. In this paper, we describe our efforts in design, development, and evaluation of a voice-based IDE to support people with limited dexterity. We report on a formative Wizard of Oz (WOz) based design process to gain an understanding of how people would use and what they expect from a speech-based programming environment. Informed by the findings from the WOz, we developed VocalIDE, a prototype speech-based IDE with features such as Context Color Editing that facilitates vocal programming. Finally, we evaluate the utility of VocalIDE with 8 participants who have upper limb motor impairments. the study showed that VocalIDE significantly improves the participants' ability to make navigational edits and select text while programming.
Pattern matching is a pervasive and useful feature in functionalprogramming. there have been many attempts to bring similar notions to Object-Oriented programming (OOP) in the past. However, a key challenge in OOP is...
详细信息
ISBN:
(纸本)9781450360456
Pattern matching is a pervasive and useful feature in functionalprogramming. there have been many attempts to bring similar notions to Object-Oriented programming (OOP) in the past. However, a key challenge in OOP is how pattern matching can coexist withthe open nature of OOP data structures, while at the same time guaranteeing other desirable properties for pattern matching. this paper discusses several desirable properties for pattern matching in an OOP context and shows how existing approaches are lacking some of these properties. We argue that the traditional semantics of pattern matching, which is based on the order of patterns and adopted by many approaches, is in conflict withthe openness of data structures. therefore we suggest that a more restricted, top-level pattern matching model, where the order of patterns is irrelevant, is worthwhile considering in an OOP context. To compensate for the absence of ordered patterns we propose a complementary mechanism for case analysis with defaults, which can be used when nested and/or multiple case analysis is needed. To illustrate our points we develop CASTOR: a meta-programming library in Scala that adopts both ideas. CASTOR generates code that uses type-safe extensible visitors, and largely removes boilerplate code typically associated with visitors. We illustrate the applicability of our approach with a case study modularizing the interpreters in the famous book "Types and programming Languages".
the proceedings contain 7 papers. the topics discussed include: iDeA: an immersive debugger for actors;understanding formal specifications through good examples;modeling distributed erlang within a single node;automat...
ISBN:
(纸本)9781450358248
the proceedings contain 7 papers. the topics discussed include: iDeA: an immersive debugger for actors;understanding formal specifications through good examples;modeling distributed erlang within a single node;automatic detection of core erlang message passing errors;typing the wild in erlang;modeling erlang processes as petri nets;and towards secure erlang systems.
the POSIX shell language defies conventional wisdom of compiler construction on several levels: the shell language was not designed for static parsing, but with an intertwining of syntactic analysis and execution by e...
详细信息
ISBN:
(纸本)9781450360296
the POSIX shell language defies conventional wisdom of compiler construction on several levels: the shell language was not designed for static parsing, but with an intertwining of syntactic analysis and execution by expansion in mind. Token recognition cannot be specified by regular expressions, lexical analysis depends on the parsing context and the evaluation context, and the shell grammar given in the specification is ambiguous. Besides, the unorthodox design choices of the shell language fit badly in the usual specification languages used to describe other programming languages. this makes the standard usage of LEX and YACC as a pipeline inadequate for the implementation of a parser for POSIX shell. the existing implementations of shell parsers are complex and use low-level character-level parsing code which is difficult to relate to the POSIX specification. We find it hard to trust such parsers, especially when using them for writing automatic verification tools for shell scripts. this paper offers an overview of the technical difficulties related to the syntactic analysis of the POSIX shell language. It also describes how we have resolved these difficulties using advanced parsing techniques (namely speculative parsing, parser state introspection, context-dependent lexical analysis and longest-prefix parsing) while keeping the implementation at a sufficiently high level of abstraction so that experts can check that the POSIX standard is respected. the resulting tool, called MORBIG, is an open-source static parser for a well-defined and realistic subset of the POSIX shell language.
An important consequence of only having value types in an aliasing-free programming language is the significant reduction in annotation burden to verify programs using semi-automatic proof systems. However, values in ...
详细信息
ISBN:
(纸本)9783030349684;9783030349677
An important consequence of only having value types in an aliasing-free programming language is the significant reduction in annotation burden to verify programs using semi-automatic proof systems. However, values in such language are often copied implicitly which is detrimental to the execution speed and memory usage of practical systems. Moreover, embedded systems programmers need fine-grained control over the circumstances at which data is copied to be able to predict memory use and execution times. this paper introduces a new approach to using uniqueness types to enable building efficient and verifiable embedded systems using an aliasing-free programming language. the idea is to use uniqueness types for enforcing at-most-once consumption of unique values. the proposed model of uniqueness of values enables compiler optimizations such as elimination of physical copies and in-place mutation. In addition, the proposed approach provides a lightweight notation for the programmer to control copying behavior. We have implemented our method in Sim, a new language for the development of safety-critical software. Our validation cases suggest that our aliasing-free language allows one to verify the functional correctness of realistic embedded programs with only a small annotation overhead while keeping the run-time performance of the program up to par with hand-optimized code.
the proceedings contain 9 papers. the topics discussed include: a domain-specific language for microservices;parser combinators for context-free path querying;garnishing parsec with parsley;path dependent types with p...
ISBN:
(纸本)9781450358361
the proceedings contain 9 papers. the topics discussed include: a domain-specific language for microservices;parser combinators for context-free path querying;garnishing parsec with parsley;path dependent types with path-equality;kDOT: scaling DOT with mutation and constructors;truly abstract interfaces for algebraic data types: the extractor typing problem;interflow: interprocedural flow-sensitive type inference and method duplication;and extending scala with records: design, implementation, and evaluation.
Researchers have observed programmers to allocate considerable amount of effort in program comprehension. But, how does program comprehension effort relate withprogramming activities? We answer this question by condu...
详细信息
ISBN:
(纸本)9781450357166
Researchers have observed programmers to allocate considerable amount of effort in program comprehension. But, how does program comprehension effort relate withprogramming activities? We answer this question by conducting an empirical study using the MSR 2018 Mining Challenge Dataset. We quantify programmers' comprehension effort, and investigate the relationship between program comprehension effort and four programming activities: navigating, editing, building projects, and debugging. We observe when programmers are involved in high comprehension effort they navigate and make edits at a significantly slower rate. However, we do not observe any significant differences in programmers' build and debugging behavior, when programmers are involved in high comprehension effort. Our findings suggest that the relationship between program comprehension effort and programming activities is nuanced, as not all programming activities associate with program comprehension effort.
Modern compilers provide code optimizations before and during run-time, thus moving required domain knowledge about the compilation process away from the developer and speeding up resulting software. these optimizatio...
详细信息
暂无评论