论文标题

Maniposynth:双峰有形功能编程

Maniposynth: Bimodal Tangible Functional Programming

论文作者

Hempel, Brian, Chugh, Ravi

论文摘要

传统上,编写代码是一个非图形,抽象和线性过程。并非每个人始终对这种思维方式感到满意。编程可以转换为图形,具体的非线性活动吗?虽然基于节点和基于块的编程环境确实利用了图形直接操纵,但用户在抽象的语法树元素上执行操纵,这些元素仍然是抽象的。是否有可能变得更具体 - 用户可以直接操纵实时程序值来创建其程序吗? 我们提出了一个系统,即Maniposynth,该系统将功能编程重新构想为非线性工作流程,其中程序表达式在2D画布上传播。这些表达式的实时结果是连续显示的,可用于直接操纵。非线性帆布将用户解放到秩序外,并且可以通过拖放值与实时值进行交互。不完整的程序是通过孔表达式优雅地处理的,这使Maniposynth可以提供程序合成。在整个工作流程中,该程序都是有效的OCAML代码,用户可以随时在其首选的文本编辑器中检查和编辑。 借助Maniposynth的直接操纵功能,我们创建了从功能数据结构课程中绘制的38个程序。我们还雇用了两名专业OCAML开发人员来实施这些程序的子集。我们报告这些经验,并讨论Maniposynth在多大程度上符合其提供非线性,具体,图形编程工作流程的目标。

Traditionally, writing code is a non-graphical, abstract, and linear process. Not everyone is comfortable with this way of thinking at all times. Can programming be transformed into a graphical, concrete, non-linear activity? While nodes-and-wires and blocks-based programming environments do leverage graphical direct manipulation, users perform their manipulations on abstract syntax tree elements, which are still abstract. Is it possible to be more concrete - could users instead directly manipulate live program values to create their program? We present a system, Maniposynth, that reimagines functional programming as a non-linear workflow where program expressions are spread on a 2D canvas. The live results of those expressions are continuously displayed and available for direct manipulation. The non-linear canvas liberates users to work out-of-order, and the live values can be interacted with via drag-and-drop. Incomplete programs are gracefully handled via hole expressions, which allow Maniposynth to offer program synthesis. Throughout the workflow, the program is valid OCaml code which the user may inspect and edit in their preferred text editor at any time. With Maniposynth's direct manipulation features, we created 38 programs drawn from a functional data structures course. We additionally hired two professional OCaml developers to implement a subset of these programs. We report on these experiences and discuss to what degree Maniposynth meets its goals of providing a non-linear, concrete, graphical programming workflow.

扫码加入交流群

加入微信交流群

微信交流群二维码

扫码加入学术交流群,获取更多资源