首页 > 最新文献

Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation最新文献

英文 中文
Polymorphic type inference for machine code 机器代码的多态类型推断
M. Noonan, Alexey Loginov, D. Cok
For many compiled languages, source-level types are erased very early in the compilation process. As a result, further compiler passes may convert type-safe source into type-unsafe machine code. Type-unsafe idioms in the original source and type-unsafe optimizations mean that type information in a stripped binary is essentially nonexistent. The problem of recovering high-level types by performing type inference over stripped machine code is called type reconstruction, and offers a useful capability in support of reverse engineering and decompilation. In this paper, we motivate and develop a novel type system and algorithm for machine-code type inference. The features of this type system were developed by surveying a wide collection of common source- and machine-code idioms, building a catalog of challenging cases for type reconstruction. We found that these idioms place a sophisticated set of requirements on the type system, inducing features such as recursively-constrained polymorphic types. Many of the features we identify are often seen only in expressive and powerful type systems used by high-level functional languages. Using these type-system features as a guideline, we have developed Retypd: a novel static type-inference algorithm for machine code that supports recursive types, polymorphism, and subtyping. Retypd yields more accurate inferred types than existing algorithms, while also enabling new capabilities such as reconstruction of pointer const annotations with 98% recall. Retypd can operate on weaker program representations than the current state of the art, removing the need for high-quality points-to information that may be impractical to compute.
对于许多编译语言,源级类型在编译过程的早期就被删除了。因此,进一步的编译器传递可能会将类型安全的源代码转换为类型不安全的机器码。原始源代码中的类型不安全习惯用法和类型不安全优化意味着在剥离的二进制文件中基本上不存在类型信息。通过对剥离的机器码执行类型推断来恢复高级类型的问题称为类型重构,它为支持逆向工程和反编译提供了有用的功能。在本文中,我们激发并开发了一种新的机器代码类型推断系统和算法。该类型系统的特性是通过调查广泛的通用源代码和机器码习惯用法的集合来开发的,为类型重构构建了一个具有挑战性的案例目录。我们发现,这些习惯用法对类型系统提出了一组复杂的要求,产生了递归约束多态类型等特性。我们确定的许多特性通常只出现在高级函数式语言使用的表达性强的类型系统中。以这些类型系统特性为指导,我们开发了Retypd:一种新的用于机器码的静态类型推断算法,它支持递归类型、多态性和子类型。Retypd产生比现有算法更准确的推断类型,同时还支持新功能,例如以98%的召回率重建指针const注释。Retypd可以在比当前技术状态更弱的程序表示上操作,从而消除了对可能无法计算的高质量指向信息的需求。
{"title":"Polymorphic type inference for machine code","authors":"M. Noonan, Alexey Loginov, D. Cok","doi":"10.1145/2908080.2908119","DOIUrl":"https://doi.org/10.1145/2908080.2908119","url":null,"abstract":"For many compiled languages, source-level types are erased very early in the compilation process. As a result, further compiler passes may convert type-safe source into type-unsafe machine code. Type-unsafe idioms in the original source and type-unsafe optimizations mean that type information in a stripped binary is essentially nonexistent. The problem of recovering high-level types by performing type inference over stripped machine code is called type reconstruction, and offers a useful capability in support of reverse engineering and decompilation. In this paper, we motivate and develop a novel type system and algorithm for machine-code type inference. The features of this type system were developed by surveying a wide collection of common source- and machine-code idioms, building a catalog of challenging cases for type reconstruction. We found that these idioms place a sophisticated set of requirements on the type system, inducing features such as recursively-constrained polymorphic types. Many of the features we identify are often seen only in expressive and powerful type systems used by high-level functional languages. Using these type-system features as a guideline, we have developed Retypd: a novel static type-inference algorithm for machine code that supports recursive types, polymorphism, and subtyping. Retypd yields more accurate inferred types than existing algorithms, while also enabling new capabilities such as reconstruction of pointer const annotations with 98% recall. Retypd can operate on weaker program representations than the current state of the art, removing the need for high-quality points-to information that may be impractical to compute.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"39 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-03-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121266363","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 29
Occurrence typing modulo theories 发生类型模理论
A. Kent, D. Kempe, Sam Tobin-Hochstadt
We present a new type system combining occurrence typing---a technique previously used to type check programs in dynamically-typed languages such as Racket, Clojure, and JavaScript---with dependent refinement types. We demonstrate that the addition of refinement types allows the integration of arbitrary solver-backed reasoning about logical propositions from external theories. By building on occurrence typing, we can add our enriched type system as a natural extension of Typed Racket, reusing its core while increasing its expressiveness. The result is a well-tested type system with a conservative, decidable core in which types may depend on a small but extensible set of program terms. In addition to describing our design, we present the following: a formal model and proof of correctness; a strategy for integrating new theories, with specific examples including linear arithmetic and bitvectors; and an evaluation in the context of the full Typed Racket implementation. Specifically, we take safe vector operations as a case study, examining all vector accesses in a 56,000 line corpus of Typed Racket programs. Our system is able to prove that 50% of these are safe with no new annotations, and with a few annotations and modifications we capture more than 70%.
我们提出了一个新的类型系统,它将发生类型(一种以前用于动态类型语言(如Racket、Clojure和JavaScript)中的类型检查程序的技术)与依赖的细化类型结合在一起。我们证明了细化类型的添加允许对来自外部理论的逻辑命题的任意求解器支持推理的集成。通过建立在事件类型的基础上,我们可以添加丰富的类型系统,作为Typed Racket的自然扩展,重用其核心,同时增加其表达性。结果是一个经过良好测试的类型系统,具有保守的、可确定的核心,其中类型可能依赖于一组小但可扩展的程序术语。除了描述我们的设计之外,我们还提出了以下内容:正式模型和正确性证明;一种整合新理论的策略,具体的例子包括线性算法和位向量;以及在完整的Typed Racket实现上下文中的求值。具体来说,我们将安全向量操作作为案例研究,检查56,000行类型化球拍程序语料库中的所有向量访问。我们的系统能够证明,在没有新注释的情况下,其中50%是安全的,并且通过一些注释和修改,我们捕获了超过70%的注释。
{"title":"Occurrence typing modulo theories","authors":"A. Kent, D. Kempe, Sam Tobin-Hochstadt","doi":"10.1145/2980983.2908091","DOIUrl":"https://doi.org/10.1145/2980983.2908091","url":null,"abstract":"We present a new type system combining occurrence typing---a technique previously used to type check programs in dynamically-typed languages such as Racket, Clojure, and JavaScript---with dependent refinement types. We demonstrate that the addition of refinement types allows the integration of arbitrary solver-backed reasoning about logical propositions from external theories. By building on occurrence typing, we can add our enriched type system as a natural extension of Typed Racket, reusing its core while increasing its expressiveness. The result is a well-tested type system with a conservative, decidable core in which types may depend on a small but extensible set of program terms. In addition to describing our design, we present the following: a formal model and proof of correctness; a strategy for integrating new theories, with specific examples including linear arithmetic and bitvectors; and an evaluation in the context of the full Typed Racket implementation. Specifically, we take safe vector operations as a case study, examining all vector accesses in a 56,000 line corpus of Typed Racket programs. Our system is able to prove that 50% of these are safe with no new annotations, and with a few annotations and modifications we capture more than 70%.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"23 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-11-22","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117030130","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 23
Program synthesis from polymorphic refinement types 从多态细化类型合成程序
N. Polikarpova, Armando Solar-Lezama
We present a method for synthesizing recursive functions that provably satisfy a given specification in the form of a polymorphic refinement type. We observe that such specifications are particularly suitable for program synthesis for two reasons. First, they offer a unique combination of expressive power and decidability, which enables automatic verification—and hence synthesis—of nontrivial programs. Second, a type-based specification for a program can often be effectively decomposed into independent specifications for its components, causing the synthesizer to consider fewer component combinations and leading to a combinatorial reduction in the size of the search space. At the core of our synthesis procedure is a newalgorithm for refinement type checking, which supports specification decomposition. We have evaluated our prototype implementation on a large set of synthesis problems and found that it exceeds the state of the art in terms of both scalability and usability. The tool was able to synthesize more complex programs than those reported in prior work (several sorting algorithms and operations on balanced search trees), as well as most of the benchmarks tackled by existing synthesizers, often starting from a more concise and intuitive user input.
我们提出了一种以多态细化类型的形式合成可证明满足给定规范的递归函数的方法。我们观察到,由于两个原因,这种规范特别适合于程序合成。首先,它们提供了表达能力和可判定性的独特组合,从而支持对重要程序的自动验证,并因此进行综合。其次,程序的基于类型的规范通常可以有效地分解为其组件的独立规范,从而使合成器考虑更少的组件组合,并导致搜索空间大小的组合减小。我们的合成过程的核心是一个用于细化类型检查的新算法,它支持规范分解。我们在大量的综合问题上评估了我们的原型实现,发现它在可伸缩性和可用性方面都超过了目前的水平。该工具能够合成比以前的工作报告(几种排序算法和平衡搜索树的操作)更复杂的程序,以及现有合成器处理的大多数基准,通常从更简洁和直观的用户输入开始。
{"title":"Program synthesis from polymorphic refinement types","authors":"N. Polikarpova, Armando Solar-Lezama","doi":"10.1145/2908080.2908093","DOIUrl":"https://doi.org/10.1145/2908080.2908093","url":null,"abstract":"We present a method for synthesizing recursive functions that provably satisfy a given specification in the form of a polymorphic refinement type. We observe that such specifications are particularly suitable for program synthesis for two reasons. First, they offer a unique combination of expressive power and decidability, which enables automatic verification—and hence synthesis—of nontrivial programs. Second, a type-based specification for a program can often be effectively decomposed into independent specifications for its components, causing the synthesizer to consider fewer component combinations and leading to a combinatorial reduction in the size of the search space. At the core of our synthesis procedure is a newalgorithm for refinement type checking, which supports specification decomposition. We have evaluated our prototype implementation on a large set of synthesis problems and found that it exceeds the state of the art in terms of both scalability and usability. The tool was able to synthesize more complex programs than those reported in prior work (several sorting algorithms and operations on balanced search trees), as well as most of the benchmarks tackled by existing synthesizers, often starting from a more concise and intuitive user input.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"59 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-10-28","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128459747","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 224
Rehearsal: a configuration verification tool for puppet 预演:puppet配置验证工具
Rian Shambaugh, Aaron Weiss, Arjun Guha
Large-scale data centers and cloud computing have turned system configuration into a challenging problem. Several widely-publicized outages have been blamed not on software bugs, but on configuration bugs. To cope, thousands of organizations use system configuration languages to manage their computing infrastructure. Of these, Puppet is the most widely used with thousands of paying customers and many more open-source users. The heart of Puppet is a domain-specific language that describes the state of a system. Puppet already performs some basic static checks, but they only prevent a narrow range of errors. Furthermore, testing is ineffective because many errors are only triggered under specific machine states that are difficult to predict and reproduce. With several examples, we show that a key problem with Puppet is that configurations can be non-deterministic. This paper presents Rehearsal, a verification tool for Puppet configurations. Rehearsal implements a sound, complete, and scalable determinacy analysis for Puppet. To develop it, we (1) present a formal semantics for Puppet, (2) use several analyses to shrink our models to a tractable size, and (3) frame determinism-checking as decidable formulas for an SMT solver. Rehearsal then leverages the determinacy analysis to check other important properties, such as idempotency. Finally, we apply Rehearsal to several real-world Puppet configurations.
大规模数据中心和云计算使系统配置成为一个具有挑战性的问题。几次被广泛报道的中断并没有归咎于软件错误,而是归咎于配置错误。为了解决这个问题,成千上万的组织使用系统配置语言来管理他们的计算基础设施。其中,Puppet是使用最广泛的,有成千上万的付费客户和更多的开源用户。Puppet的核心是一种特定于领域的语言,用于描述系统的状态。Puppet已经执行了一些基本的静态检查,但它们只能防止很小范围的错误。此外,测试是无效的,因为许多错误仅在难以预测和重现的特定机器状态下触发。通过几个例子,我们展示了Puppet的一个关键问题是配置可能是不确定的。本文介绍了一个用于Puppet配置的验证工具——Rehearsal。Rehearsal为Puppet实现了一个健全的、完整的、可扩展的确定性分析。为了开发它,我们(1)为Puppet提供了一个形式化的语义,(2)使用几个分析将我们的模型缩小到一个可处理的大小,(3)将框架确定性检查作为SMT求解器的可确定公式。然后,排演利用确定性分析来检查其他重要的属性,比如幂等性。最后,我们将排练应用于几个真实世界的Puppet配置。
{"title":"Rehearsal: a configuration verification tool for puppet","authors":"Rian Shambaugh, Aaron Weiss, Arjun Guha","doi":"10.1145/2908080.2908083","DOIUrl":"https://doi.org/10.1145/2908080.2908083","url":null,"abstract":"Large-scale data centers and cloud computing have turned system configuration into a challenging problem. Several widely-publicized outages have been blamed not on software bugs, but on configuration bugs. To cope, thousands of organizations use system configuration languages to manage their computing infrastructure. Of these, Puppet is the most widely used with thousands of paying customers and many more open-source users. The heart of Puppet is a domain-specific language that describes the state of a system. Puppet already performs some basic static checks, but they only prevent a narrow range of errors. Furthermore, testing is ineffective because many errors are only triggered under specific machine states that are difficult to predict and reproduce. With several examples, we show that a key problem with Puppet is that configurations can be non-deterministic. This paper presents Rehearsal, a verification tool for Puppet configurations. Rehearsal implements a sound, complete, and scalable determinacy analysis for Puppet. To develop it, we (1) present a formal semantics for Puppet, (2) use several analyses to shrink our models to a tractable size, and (3) frame determinism-checking as decidable formulas for an SMT solver. Rehearsal then leverages the determinacy analysis to check other important properties, such as idempotency. Finally, we apply Rehearsal to several real-world Puppet configurations.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"55 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-09-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128062314","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 61
Event-driven network programming 事件驱动网络编程
Jedidiah McClurg, Hossein Hojjat, Nate Foster, Pavol Cerný
Software-defined networking (SDN) programs must simultaneously describe static forwarding behavior and dynamic updates in response to events. Event-driven updates are critical to get right, but difficult to implement correctly due to the high degree of concurrency in networks. Existing SDN platforms offer weak guarantees that can break application invariants, leading to problems such as dropped packets, degraded performance, security violations, etc. This paper introduces EVENT-DRIVEN CONSISTENT UPDATES that are guaranteed to preserve well-defined behaviors when transitioning between configurations in response to events. We propose NETWORK EVENT STRUCTURES (NESs) to model constraints on updates, such as which events can be enabled simultaneously and causal dependencies between events. We define an extension of the NetKAT language with mutable state, give semantics to stateful programs using NESs, and discuss provably-correct strategies for implementing NESs in SDNs. Finally, we evaluate our approach empirically, demonstrating that it gives well-defined consistency guarantees while avoiding expensive synchronization and packet buffering.
软件定义网络(SDN)程序必须同时描述静态转发行为和响应事件的动态更新。事件驱动的更新对于正确实现至关重要,但由于网络中的高度并发性,很难正确实现。现有的SDN平台提供的弱保证可能会破坏应用程序的不变性,从而导致诸如丢包、性能下降、违反安全等问题。本文介绍了事件驱动的一致性更新,它保证在响应事件的配置之间转换时保留定义良好的行为。我们提出网络事件结构(NETWORK EVENT STRUCTURES, NESs)来对更新的约束进行建模,例如哪些事件可以同时启用以及事件之间的因果关系。我们定义了具有可变状态的NetKAT语言的扩展,为使用NESs的有状态程序提供语义,并讨论了在sdn中实现NESs的可证明正确的策略。最后,我们根据经验评估了我们的方法,证明它提供了良好定义的一致性保证,同时避免了昂贵的同步和数据包缓冲。
{"title":"Event-driven network programming","authors":"Jedidiah McClurg, Hossein Hojjat, Nate Foster, Pavol Cerný","doi":"10.1145/2908080.2908097","DOIUrl":"https://doi.org/10.1145/2908080.2908097","url":null,"abstract":"Software-defined networking (SDN) programs must simultaneously describe static forwarding behavior and dynamic updates in response to events. Event-driven updates are critical to get right, but difficult to implement correctly due to the high degree of concurrency in networks. Existing SDN platforms offer weak guarantees that can break application invariants, leading to problems such as dropped packets, degraded performance, security violations, etc. This paper introduces EVENT-DRIVEN CONSISTENT UPDATES that are guaranteed to preserve well-defined behaviors when transitioning between configurations in response to events. We propose NETWORK EVENT STRUCTURES (NESs) to model constraints on updates, such as which events can be enabled simultaneously and causal dependencies between events. We define an extension of the NetKAT language with mutable state, give semantics to stateful programs using NESs, and discuss provably-correct strategies for implementing NESs in SDNs. Finally, we evaluate our approach empirically, demonstrating that it gives well-defined consistency guarantees while avoiding expensive synchronization and packet buffering.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"35 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-07-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124031273","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 44
Precise, dynamic information flow for database-backed applications 为数据库支持的应用程序提供精确、动态的信息流
Jean Yang, Travis Hance, Thomas H. Austin, Armando Solar-Lezama, C. Flanagan, Stephen Chong
We present an approach for dynamic information flow control across the application and database. Our approach reduces the amount of policy code required, yields formal guarantees across the application and database, works with existing relational database implementations, and scales for realistic applications. In this paper, we present a programming model that factors out information flow policies from application code and database queries, a dynamic semantics for the underlying $^JDB$ core language, and proofs of termination-insensitive non-interference and policy compliance for the semantics. We implement these ideas in Jacqueline, a Python web framework, and demonstrate feasibility through three application case studies: a course manager, a health record system, and a conference management system used to run an academic workshop. We show that in comparison to traditional applications with hand-coded policy checks, Jacqueline applications have 1) a smaller trusted computing base, 2) fewer lines of policy code, and 2) reasonable, often negligible, additional overheads.
我们提出了一种跨应用程序和数据库的动态信息流控制方法。我们的方法减少了所需的策略代码的数量,在应用程序和数据库之间产生正式的保证,与现有的关系数据库实现一起工作,并适用于实际的应用程序。在本文中,我们提出了一个从应用程序代码和数据库查询中提取信息流策略的编程模型,底层$^JDB$核心语言的动态语义,以及语义的终止不敏感的不干扰和策略遵从性的证明。我们在Python web框架Jacqueline中实现这些想法,并通过三个应用程序案例研究演示可行性:课程管理器、健康记录系统和用于运行学术研讨会的会议管理系统。我们展示了与手工编码策略检查的传统应用程序相比,Jacqueline应用程序具有1)更小的可信计算基础,2)更少的策略代码行,以及2)合理的(通常可以忽略不计的)额外开销。
{"title":"Precise, dynamic information flow for database-backed applications","authors":"Jean Yang, Travis Hance, Thomas H. Austin, Armando Solar-Lezama, C. Flanagan, Stephen Chong","doi":"10.1145/2908080.2908098","DOIUrl":"https://doi.org/10.1145/2908080.2908098","url":null,"abstract":"We present an approach for dynamic information flow control across the application and database. Our approach reduces the amount of policy code required, yields formal guarantees across the application and database, works with existing relational database implementations, and scales for realistic applications. In this paper, we present a programming model that factors out information flow policies from application code and database queries, a dynamic semantics for the underlying $^JDB$ core language, and proofs of termination-insensitive non-interference and policy compliance for the semantics. We implement these ideas in Jacqueline, a Python web framework, and demonstrate feasibility through three application case studies: a course manager, a health record system, and a conference management system used to run an academic workshop. We show that in comparison to traditional applications with hand-coded policy checks, Jacqueline applications have 1) a smaller trusted computing base, 2) fewer lines of policy code, and 2) reasonable, often negligible, additional overheads.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"35 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-07-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124134506","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 66
Programmatic and direct manipulation, together at last 编程和直接操作,最终结合在一起
Ravi Chugh, Brian Hempel, Mitchell Spradlin, Jacob Albers
Direct manipulation interfaces and programmatic systems have distinct and complementary strengths. The former provide intuitive, immediate visual feedback and enable rapid prototyping, whereas the latter enable complex, reusable abstractions. Unfortunately, existing systems typically force users into just one of these two interaction modes. We present a system called Sketch-n-Sketch that integrates programmatic and direct manipulation for the particular domain of Scalable Vector Graphics (SVG). In Sketch-n-Sketch, the user writes a program to generate an output SVG canvas. Then the user may directly manipulate the canvas while the system immediately infers a program update in order to match the changes to the output, a workflow we call live synchronization. To achieve this, we propose (i) a technique called trace-based program synthesis that takes program execution history into account in order to constrain the search space and (ii) heuristics for dealing with ambiguities. Based on our experience with examples spanning 2,000 lines of code and from the results of a preliminary user study, we believe that Sketch-n-Sketch provides a novel workflow that can augment traditional programming systems. Our approach may serve as the basis for live synchronization in other application domains, as well as a starting point for yet more ambitious ways of combining programmatic and direct manipulation.
直接操作接口和编程系统具有不同的互补优势。前者提供直观、即时的视觉反馈并支持快速原型,而后者支持复杂、可重用的抽象。不幸的是,现有的系统通常只迫使用户进入这两种交互模式中的一种。我们提出了一个称为Sketch-n-Sketch的系统,它集成了可缩放矢量图形(SVG)特定领域的编程和直接操作。在Sketch-n-Sketch中,用户编写一个程序来生成输出SVG画布。然后,用户可以直接操作画布,同时系统立即推断出程序更新,以便将更改与输出相匹配,我们称之为实时同步的工作流。为了实现这一点,我们提出了(i)一种称为基于跟踪的程序合成的技术,该技术考虑了程序执行历史,以约束搜索空间;(ii)用于处理歧义的启发式方法。根据我们对跨越2000行代码的示例的经验和初步用户研究的结果,我们相信Sketch-n-Sketch提供了一种新的工作流程,可以增强传统的编程系统。我们的方法可以作为其他应用程序域中实时同步的基础,以及结合编程和直接操作的更有抱负的方法的起点。
{"title":"Programmatic and direct manipulation, together at last","authors":"Ravi Chugh, Brian Hempel, Mitchell Spradlin, Jacob Albers","doi":"10.1145/2908080.2908103","DOIUrl":"https://doi.org/10.1145/2908080.2908103","url":null,"abstract":"Direct manipulation interfaces and programmatic systems have distinct and complementary strengths. The former provide intuitive, immediate visual feedback and enable rapid prototyping, whereas the latter enable complex, reusable abstractions. Unfortunately, existing systems typically force users into just one of these two interaction modes. We present a system called Sketch-n-Sketch that integrates programmatic and direct manipulation for the particular domain of Scalable Vector Graphics (SVG). In Sketch-n-Sketch, the user writes a program to generate an output SVG canvas. Then the user may directly manipulate the canvas while the system immediately infers a program update in order to match the changes to the output, a workflow we call live synchronization. To achieve this, we propose (i) a technique called trace-based program synthesis that takes program execution history into account in order to constrain the search space and (ii) heuristics for dealing with ambiguities. Based on our experience with examples spanning 2,000 lines of code and from the results of a preliminary user study, we believe that Sketch-n-Sketch provides a novel workflow that can augment traditional programming systems. Our approach may serve as the basis for live synchronization in other application domains, as well as a starting point for yet more ambitious ways of combining programmatic and direct manipulation.","PeriodicalId":178839,"journal":{"name":"Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation","volume":"150 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-07-10","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132547538","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 69
期刊
Proceedings of the 37th ACM SIGPLAN Conference on Programming Language Design and Implementation
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1