Tackling the Awkward Squad for Reactive Programming: The Actor-Reactor Model
针对响应式编程在真实应用中难以处理长时间计算、副作用及命令式与响应式代码协调的问题,提出 Actor-Reactor 模型,通过严格分离与数据流组合,在 Stella 语言中实现验证。
2023-06-21 cs.PL
Smoothly Navigating between Functional Reactive Programming and Actors
我们正式定义了一个优雅的多范式统一的功能反应式编程,演员系统,面向对象编程。这就实现了一种直观的声明式编程,在保持安全性的同时获得了并发性的强大功能。我们使用对象和引用功能来突出和驯服命令式功能:引用功能跟踪别名和可变性,对象功能跟踪I/O。形式上,我们的类型系统限制了不纯代码的范围、影响和交互。- 作用域:输入为纯的表达式将表现出确定性。- 影响:避免了数据竞争和同步问题。参与者非确定性行为的唯一方法是根据消息传递顺序改变其状态。- 相互作用:信号提供了命令式代码和函数式代码之间的功能边界,防止不纯代码使函数假设无效。
2021-01-08 cs.PL
Juniper: A Functional Reactive Programming Language for the Arduino
本文介绍了Juniper的设计和实现:一种针对Arduino和相关微控制器系统的功能反应式程序设计语言(FRP)。Juniper提供了许多高级功能,包括参数多态函数、匿名函数、自动存储管理和不可变数据结构。还包括一个标准库,提供了许多有用的FRP信号处理功能。Juniper被翻译成标准C++,并使用现有的Arduino开发工具进行编译,使Juniper程序能够适应资源受限的设备,并实现与这些设备的现有C++库的无缝互操作性。
2019-11-29 cs.PL
Simply RaTT: A Fitch-style Modal Calculus for Reactive Programming without Space Leaks
函数式反应式编程(FRP)是一种使用信号和事件进行编程的范例,允许用户在高抽象级别上描述反应式程序。要做到这一点,FRP语言必须确保所有程序都是因果关系的,并且可以在不引入空间泄漏和时间泄漏的情况下实现。为此,某些FRP语言不提供对信号的直接存取,而只是提供对信号函数的存取。最近,模态类型已被建议作为一种替代方法,以确保在同步情况下的FRP语言的因果关系,直接存取的信号和事件的抽象。本文提出了一种新的反应式编程模式演算Simply RaTT。与以前的演算不同,Simply RaTT使用Fitch风格的方法来处理模态类型,这简化了类型系统,使程序更加简洁。呼应Krishnaswami以前的结果为不同的语言,我们设计了一个操作语义,安全地执行简单的RaTT程序没有空间泄漏。我们还确定了其他模态FRP语言中存在的时间泄漏的来源:延迟计算中不动点的展开。Simply RaTT型系统消除了这些时间泄漏。
2019-06-11 cs.PL
Functional Reactive Programming with Effects, A More Permissive Approach
本文提出一种扩展 WORMHOLES 的函数式响应式编程语言,将资源分为输入/输出资源与内部资源,放宽单次使用限制,并证明程序可翻译为等价的无效应 YAMPA 程序。
2025-03-08 cs.PL
Topology-Level Reactivity in Distributed Reactive Programs: Reactive Acquaintance Management using Flocks
响应式编程是一种流行的事件驱动应用程序编程范式,并且经常被提议作为编写分布式应用程序的范式。其中一种类型的应用程序是 *prosumer* 应用程序,它们是分布式应用程序,既产生又消费许多事件。我们分析了使用反应式程序设计语言或框架来实现产消者应用程序时出现的问题。我们发现,开放网络的假设,这意味着各种类型的产消者自发地加入和离开网络,可能会导致大量的代码复杂性或运行时效率低下。这些问题的基础在于熟人管理:在生产者加入和离开网络时发现他们的能力,并在整个反应式程序中正确地保持这种状态。大多数现有的反应式程序设计语言和框架对管理熟人的支持有限,导致代码意外复杂或计算效率低下。在本文中,我们提出了反应式程序的熟人管理。首先,我们设计了一个熟人发现机制来创建一个自动发现网络上的产消者的群体。群的一个重要方面是它们与反应式程序的集成,使得反应式程序可以正确有效地维护其状态。为此,我们设计了一个熟人维护机制:一种新型的函数式反应程序设计语言操作符,我们称之为“部署-*”。“deploy-*”操作符能够对所发现的产消者的随时间变化的集合做出正确和有效的反应。所提出的机制是在一个反应式程序设计语言称为斯特拉,它作为一个语言的车辆来展示我们的方法的想法。我们的熟人管理的结果在计算效率和惯用的反应代码的实现。我们通过基准测试定量评估我们的方法,这些基准测试表明我们的实现是有效的:每当发现一个新的产消…
2022-02-18 cs.PL
Reactive Graphs for Efficient Markov Chain Monte Carlo Inference in Probabilistic Programming Languages
KTH Royal Institute of Technology(瑞典皇家理工学院);Swedish Museum of Natural History(瑞典自然历史博物馆)
提出一种自动将概率程序转换为动态反应图的方法,显式表示数据依赖,使得MCMC提议仅重新计算依赖已重绘随机变量的部分,从而提升推断效率。
2026-06-29 cs.PL
Simple Modal Types for Functional Reactive Programming
IT University of Copenhagen(哥本哈根信息技术大学)
本文提出了一种简化模态类型系统的功能反应式编程语言,通过改进信号语义提升语言表达力和效率。
2026-08-05 cs.PL
Choreographies for Reactive Programming
模块化编程是软件开发的基石,因为它允许从简单组件的组装中构建复杂的系统,并支持可重用性和替代原则。在分布式环境中,组件组装由通信支持,通信通常需要遵循指定的交互协议。在本文中,我们提出了一种语言的分布式系统的模块化开发,组件的组装是由指定的通信协议的编排支持。我们的语言允许单独的组件行为,给出的反应数据端口,和编排,指定为第一类实体。这允许我们考虑组件和编排的可重用性和替换原则。我们展示了我们的模型如何可以被编译成一个更可操作的角度在一个可证明是正确的方式,我们提出了一个类型的纪律,解决通信安全和系统的进展,其中的替代性的概念自然出现。
2018-01-24 cs.PL
Reactive Programming without Functions
本文提出一种无函数、无提升的纯响应式编程语言,以 reactors 与 deployments 为核心并增量引入状态、动态依赖、递归和词法作用域,从而避免 EDSL 中宿主代码带来的发散与范式失配问题。
2024-03-04 cs.PL
Active Expressions: Basic Building Blocks for Reactive Programming
没有反应式编程的现代软件开发是难以想象的。响应式编程支持对用户输入、网络消息和其他事件做出响应的广泛的当代软件系统。虽然反应式编程是一个活跃的研究领域,但反应式概念的实现仍然具有挑战性。特别是,变化检测是实现反应式概念时的一个困难但不可避免的必要条件。通常,变更检测机制并不打算重用,而是与特定的变更解决机制紧密耦合。因此,开发人员经常不得不重新实现类似的抽象。仍然缺少用于变化检测的可重用原语。为了找到一个合适的原语,我们确定现有的反应概念的共性。我们发现了一类反应概念,基于状态的反应概念。所有基于状态的反应式概念都有一个共同的变化检测机制:它们检测表达式求值结果的变化。在此基础上,我们提出了一种可重用的原语活动表达式。通过抽象变化检测的繁琐实现细节,主动表达式可以简化反应式编程概念的实现。我们评估的设计活动表达式重新实现了一些现有的基于状态的反应式的概念,使用它们。由此产生的实现突出了活动表达式的表现力。当推理反应式编程概念时,活动表达式可以将基本部分与非基本部分分离。通过使用活动表达式作为变更检测的原语,反应式语言构造和运行时支持的开发人员现在可以专注于设计应用程序员应该如何对变更做出反应。最终,我们希望主动表达式能够鼓励人们尝试新的反应式编程概念,并由此产生更多的可供探索的概念。
2017-03-31 cs.PL cs.SE
Reactive Probabilistic Programming
同步建模是程序设计语言(如Lustre、Esterel或Scade)的核心,通常用于实现安全关键控制软件,例如,飞机的电传操纵和发动机控制。然而,到目前为止,这些语言对建模不确定性(软件环境或行为的概率方面)的现代支持有限,尽管建模不确定性是设计控制系统时的主要活动。在本文中,我们提出了第一个同步概率程序设计语言ProbZelus。ProbZelus保守地提供了编写控制软件的同步语言的设施,具有概率结构来建模不确定性并执行循环中的推理。我们提出的语言的设计和实现。我们提出了概率流函数的测度论语义和一个简单的类型纪律来分离确定性和概率表达式。我们展示了一个语义保持编译成一个一阶函数语言,适合于一个简单的演示推理算法的流模型。我们还重新设计了延迟采样推理算法,以提供高效的流式推理。结合对几个反应式应用程序的评估,我们的结果表明,ProbZelus可以设计反应式概率应用程序和高效的有界内存推理。
2020-04-09 cs.PL
Bidirectional Reactive Programming for Machine Learning
Inria(法国国家信息与自动化研究所);Google DeepMind(谷歌DeepMind)
本文提出一种支持向后递推的双向反应式编程构造,并证明其能自然表达反向传播、批归一化、双向RNN及强化学习等机器学习核心算法。
2023-11-28 cs.LG cs.PL
Tempo: Reconstructing Synchronous Reactive Programming with OCaml 5 Effects
Univ. Orléans, INSA Centre Val de Loire, LIFO UR 4022(奥尔良大学,中央卢瓦尔河谷国立应用科学学院,LIFO UR 4022)
研究能否在普通OCaml 5内重构同步响应式编程核心机制,提出基于代数效果和深度处理程序的Tempo库运行时,通过效果操作界定暂停点、处理程序具体化延续为任务,比较研究量化其开销并确定主导成本的运行时机制。
2026-07-28 cs.LO cs.PL
ROSY: An elegant language to teach the pure reactive nature of robot programming
Universidade do Minho(米尼奥大学);INESC TEC(葡萄牙系统与计算机工程研究所)
机器人技术非常有趣,长期以来一直被认为是教授编程的好方法,同时与数学、物理或电子等工程和科学的其他分支建立了鼓舞人心的联系。虽然机器人和编程之间的这种共生关系被认为是非常有益的,但教育方法往往觉得有必要隐藏机器人系统的潜在复杂性,但结果是无法将机器人编程的反应本质传递给未来的机器人专家和程序员。本文介绍了ROSY,一种通过机器人技术教授新手程序员的新语言。它的函数式风格既熟悉高中代数背景,又体现了机器人编程固有的反应性。在更高的抽象层次上工作也教导了将机器人软件分解为交互控制器集合的有价值的设计原则。尽管它很简单,但ROSY是完全有效的Haskell代码,与ROS生态系统兼容。我们通过演示如何轻松清晰地表达非平凡的应用程序,揭示其良好的功能编程基础,并开发支持Web的机器人编程环境,为我们的语言提供了令人信服的案例。
2019-11-08 cs.PL cs.RO
Diamonds are not forever: Liveness in reactive programming with guarded recursion
当设计函数式反应式编程(FRP)的语言时,主要的挑战是为用户提供一个简单、灵活的界面,以便在高抽象级别上编写程序,同时确保所有程序都可以用低级语言有效地实现。为了迎接这一挑战,一个新的家庭的模态FRP语言已被提出,在中野的守护不动点算子的变种用于编写递归程序,保证属性,如因果关系和生产力。作为一个明显的扩展,也有人建议使用线性时态逻辑(LTL)作为一种通过Curry-Howard同构进行反应式编程的语言,允许将终止,活性和公平性等属性编码在类型中。然而,这两个想法是相互冲突的,因为不动点算子将非终止性引入到应该提供终止保证的归纳类型中。在本文中,我们表明,关于模态时间步长运营商的LTL的一个子模态的一个用于保护递归(而不是等同于他们),可以得到一个模态类型系统能够表达活性性质,同时保留权力的保护不动点运营商。我们介绍的语言活泼的RaTT,一个模态FRP语言与守卫不动点运算符和一个“直到”类型的构造函数在LTL,并显示如何编程的事件和公平的流。使用一个步骤索引的Kripke逻辑关系,我们证明了活泼的RaTT的业务性质,包括生产力和因果关系,以及终止和活性预期的LTL类型的属性。最后,我们证明了Lively RaTT的类型系统保证了不存在隐式空间泄漏。
2020-08-20 cs.PL
Categorical Semantics for Functional Reactive Programming with Temporal Recursion and Corecursion
函数式反应式编程(FRP)使得以声明的方式表达计算的时间方面成为可能。最近,我们发展了两种类型的FRP范畴模型:抽象过程范畴(APC)和具体过程范畴(CPC)。此外,我们发现,APC泛化CPC。在本文中,我们扩展APC与额外的结构。这个结构对与时间相关的递归和共递归运算符进行建模。我们表明,由此产生的分类模型概括了那些CPC施加额外的约束时间尺度。这个限制归结为排除了$ω$ -超级任务,它与芝诺的阿基里斯和乌龟悖论密切相关。
2014-06-09 cs.LO cs.PL
Reactive Imperative Programming with Dataflow Constraints
数据流语言为动态应用程序中指定对象之间的约束提供了自然支持,其中程序需要有效地对环境的变化做出反应。研究人员长期以来一直在研究如何通过将它们嵌入到过程语言中来利用Challow-constraints。然而,以前的混合命令式/并行系统需要语法扩展或专门的数据类型库来将命令式程序绑定到并行求解器。在本文中,我们提出了一种新的方法,顺利地结合了这两种范式,而不会给程序员带来不必要的负担。在我们的框架中,程序员可以定义主机命令式语言的普通命令,这些命令强制执行存储在“反应式”内存位置中的对象之间的约束。反应对象可以是宿主语言中的任何合法类型,包括基本数据类型、指针、数组和结构。约束在每次输入内存位置改变时自动重新执行,让程序表现得像电子表格,其中某些变量的值取决于其他变量的值。通过改变宿主语言的基本操作的语义来读取和修改对象,从而透明地处理约束求解机制。我们提供了一个正式的语义和描述我们的技术到C/C++的一个具体实施例,展示了如何有效地实现它在传统的平台上使用现成的编译器。我们讨论了相关的应用反应的情况下,包括增量计算,观察者设计模式,和数据结构修复。我们的实现的性能相比,特设问题特定的变化传播算法和以语言为中心的方法,如自调整计算和主体/观察者通信机制,表明所提出的方法是有效的,在实践中。
2011-04-12 cs.PL
A Formal Model for Direct-style Asynchronous Observables
像F#、C#和最近的Scala这样的语言提供了“异步”编程模型,旨在通过避免基于回调的编程模型中固有的控制反转来使异步编程更容易。本文提出了一种新的方法来集成异步模型与可观察流的反应式扩展模型。响应式扩展在.NET平台上最为知名,其编程模型的广泛使用的实现也存在于Java、Ruby和其他语言中。本文贡献了一个形式化的统一的“反应异步”模型的背景下,基于对象的核心演算。我们的正式模型捕捉到的异步可观的协议使用堆演化属性的本质。我们证明了一个主题约简定理,该定理意味着约简保持堆的演化性质。因此,对于良好类型的程序,我们的演算确保协议的异步可观的。
2015-11-02 cs.PL
Interactive Music and Synchronous Reactive Programming
本文介绍了Skini,一种交互式结构音乐的编程方法和执行环境。有了这个系统,作曲家用HipHop.js同步反应语言编写他的乐谱。然后,他们被执行,或发挥,在现场音乐会,在与观众的互动。该系统旨在帮助作曲家在作品的决定性和与公众互动的非决定性之间找到一个很好的平衡。每一个Skini评分的执行都会产生不同但美学上一致的解释。这部作品在音乐领域提出了许多问题。如何将构图和互动结合起来?当听众影响下一场演奏时,如何控制音乐风格?与生成音乐有什么可能的联系?这些都是Skini系统的重要问题,但它们超出了本文的范围,本文只关注该系统的计算机科学方面。从这个角度来看,主要的问题是如何编程的分数和在哪种语言?通用语言是不合适的,因为它们的基本结构(即,变量、函数、循环等)与表达音乐和音乐约束所需的结构不匹配。我们发现,同步程序设计语言是一个更好的适合,因为它们依赖于时间结构,可以直接用于表示乐谱,因为他们的可塑性,使作曲家很容易实验与艺术的变化,他们的初始分数。本文主要研究分数规划。它揭示了一个作曲家应该遵循的过程,从他的第一个音乐直觉到音乐作品的产生。本文介绍了一些摘录的编程的古典音乐作品,它然后精确地涉及到一个实际的录音。电子音乐和爵士乐的例子也提出了,与音频工件,以证明系统的多功能性。最后,简要介绍了过去的现场音乐会作为一个证据的可行性系统。
2020-06-04 cs.PL
Density-Based Semantics for Reactive Probabilistic Programming
针对概率同步语言仅对已调度方程定义语义的局限,提出两种与调度无关的基于密度函数流的语义(共迭代与关系语义),并利用关系语义证明了状态空间模型优化推理所需程序变换的正确性。
2023-09-07 cs.PL
Consistent Distributed Reactive Programming with Retroactive Computation
本文提出一种混合反应式/回溯式与命令式计算的编程语言核心演算,支持分布式信号源及数据丢失恢复,并通过定理和微基准测试保证时间一致性,为物联网分析提供基础。
2025-02-27 cs.PL
From Events to Reactions: A Progress Report
Syndicate是一种新的协调、并发程序设计语言。它在线程的共享一切范式和参与者的无共享方法之间占据了一个新的点。辛迪加演员通过一个精心控制的数据库交换信息,分享共同的知识,该数据库清楚地界定了对话的范围。这种方法显然简化了并行活动的协调。然而,使用Syndicate编程的经验表明,需要提高语言抽象的水平。除了编写事件处理程序和直接管理事件订阅之外,该语言还必须支持响应式编程。本文介绍了面向事件的辛迪加编程,然后描述了一个初步的设计,以增强它与新的反应式编程结构。
2016-06-20 cs.PL
Harmonizing Signals and Events with a Lightweight Extension to Java
当前对与周围环境无缝连接的需求使软件更具反应性。例如,这种需求在由物联网组成的系统中是显而易见的。这样的系统包括响应于外部或内部事件而周期性地更新的一组反应值,以在这样的更新被传播到其他反应值的意义上形成反馈流。实现这种反应值的两种有效方法已经被提出:基于事件编程中的事件机制和函数反应编程中的信号。这两种方法现在在几种语言中混合使用,如Flaptrix和REScala,这使得这些语言在模块化反应式软件实现方面表现突出。例如,REScala提供了一个丰富的API,其中包含将事件转换为信号的函数,反之亦然。在本文中,我们探索另一种更简单的方法在反应式程序设计语言的设计空间:事件机制与信号相协调,从而简化编程接口,主要是基于信号。基于这种方法,我们实现了SignalJ,一个简单的扩展Java的事件和信号。我们值得注意的发现是(1)事件可以表示为信号的更新,(2)这样一个有效的信号可以使用注释来表示,而不是为信号引入类型和构造函数,以进一步简化语言。本文的另一个贡献是SignalJ的形式化模型。由于事件和信号的机制可能相互干扰,这种混合有时会导致令人惊讶的行为。例如,信号的功能行为受到事件的命令性特征的影响。因此,理解这种混合的形式模型实际上很重要。核心演算,Featherweight SignalJ(FSJ),开发作为Featherweight Java的扩展,并提供证明,以确保FSJ的…
2018-03-27 cs.PL
Synthesizing Functional Reactive Programs
函数式反应式编程(FRP)是一种简化反应式程序构造的范例。有许多库实现了FRP的具体化,使用了抽象,如Application,Monads和Arrows。然而,找到一个好的控制流,正确地管理状态并在正确的时间切换行为,仍然是开发人员面临的一个重大挑战。一个有吸引力的替代方案是指定行为而不是编程,最近开发的逻辑:时间流逻辑(TSL)使之成为可能。然而,它还没有被探索到目前为止,如何控制流模型(CFM),从TSL规范合成,可以变成可执行代码,是与FRP上的库兼容。我们弥合这一差距,表明CFMs确实是一个合适的形式主义变成应用,一元,箭头FRP。我们证明了我们的翻译在现实世界的厨房定时器应用程序,我们翻译到桌面应用程序使用箭头化FRP库Yampa,一个Web应用程序使用的一元三便士GUI库,并使用应用硬件描述语言ClaSH硬件的有效性。
2019-05-23 cs.PL
Hop and HipHop : Multitier Web Orchestration
富应用程序融合了经典计算、客户端-服务器并发、基于Web的接口以及嵌入式系统中复杂的基于时间和事件的反应式编程。为了处理它们,我们通过HipHop扩展了Hop Web编程平台,HipHop是一种专用于基于事件的流程编排的特定领域语言。借鉴Esterel的同步反应模型,HipHop基于同步并发和抢占原语,这些原语是复杂反应行为的模块化设计的关键组件。由于Hop的自反性,HipHop能够处理Web应用程序的动态性,这与Esterel不同。通过一个音乐播放器的例子,我们展示了如何使用HipHop编排代码模块化地构建一个非平凡的Hop应用程序。
2013-11-30 cs.PL
Diva: A Declarative and Reactive Language for In-Situ Visualization
在大规模科学模拟中,使用自适应工作流管理进行现场可视化和分析已经成为一个日益增长的趋势。然而,协调自适应工作流与传统的过程程序设计语言可能是困难的,因为系统流是由不可预测的科学现象,这往往出现在一个未知的顺序,并可以逃避事件处理。这使得自适应工作流的实现繁琐且容易出错。最近,反应式和声明式编程范式已经被认为是其他领域中类似问题的合适解决方案。然而,有一个缺乏的研究,以适应这些方法在原位可视化和分析。在本文中,我们提出了一种语言设计和运行时系统开发自适应系统,通过声明式和反应式编程范式。我们说明了如何使用我们的方法实现自适应工作流编程系统,并证明它与燃烧模拟的用例。
2020-09-06 cs.HC cs.PL
Automated Verification of Reactive and Concurrent Programs by Calculation
反应式程序将传统的顺序编程结构与原语相结合,以允许与其他并发代理进行通信。它们在现代应用中无处不在,从组件系统和Web服务到网络物理系统和自主机器人。在本文中,我们提出了一个代数验证策略的并发反应式程序,与一个大的或无限的状态空间。我们定义了新的运营商来描述相互作用和状态更新,以及相关的方程理论。有了这个,我们可以计算一个反应式程序的指称语义,从而促进自动证明。值得注意的是,我们的推理支持迭代程序与反应不变量,Kleene代数的基础上,并行组成。我们通过验证反应缓冲区来说明我们的策略。我们的法律和战略是机械化的伊莎贝尔/UTP,我们的霍尔和他的统一编程理论(UTP)框架的实施,提供健全的保证和实际的验证支持。
2021-04-12 cs.LO cs.PL
ReactiFi: Reactive Programming of Wi-Fi Firmware on Mobile Devices
网络可编程性将需要处理未来增加的网络流量和不断变化的应用需求。然而,当前没有使用高级的、易于使用的程序设计语言来对Wi-Fi固件进行编程的方法。这阻碍了新网络服务/应用的快速原型设计和部署,并阻碍了Wi-Fi网络中的持续性能优化,因为所使用的硬件平台和Wi-Fi域都需要专业知识。在本文中,我们提出了ReactiFi,一种高级反应式程序设计语言,用于在移动消费设备上对Wi-Fi芯片进行编程。ReactiFi使程序员能够实现PHY,MAC和IP层机制的扩展,而无需Wi-Fi芯片的专业知识,从而允许新的应用和网络协议。ReactiFi程序直接在Wi-Fi芯片上执行,与在主CPU上执行相比,提高了性能和功耗。ReactiFi在概念上类似于函数式反应式语言,但专用于Wi-Fi固件的特定领域需求。首先,它可以处理底层平台特定的细节,而不会干扰Wi-Fi芯片的核心功能。其次,它支持关于应用程序的内存使用的静态推理,这对于通常内存受限的Wi-Fi芯片很重要。第三,它将计算之间的依赖关系的动态变化限制为动态分支,以实现关于计算顺序的静态推理。我们在两个真实案例研究中对ReactiFi进行了经验评估。我们的研究结果表明,在Wi-Fi芯片上执行应用程序时,而不是在操作系统内核或用户空间中执行应用程序时,吞吐量、延迟和功耗都得到了显着改善。此外,我们表明,与手动编写的C代码相比,ReactiFi的高级编程…
2021-03-04 cs.NI cs.PL
Using human-in-the-loop synthesis to author functional reactive programs
响应异步事件的程序编写起来很有挑战性;它们很难推理,测试和调试也很棘手。因为这些程序可能有一个巨大的输入时间和交错空间,程序员可能很容易错过角落的情况。我们建议应用合成,以帮助程序员更容易地创建程序,并在其正确性有更高的信心。我们已经写了一个有效的编码的功能反应式编程(FRP)语义的基础上的功能编程在玫瑰解除列表。我们证明,这种技术是最先进的,首先比较其性能对现有的两个合成工具,产生列表操作程序,然后通过合成一套基准完整的规格。我们还提出了一个交互式工具,在该工具中,程序员以输入/输出示例或不变量的形式提供一些初始部分规范;该工具通过合成两个候选程序来发现规范中的歧义,并给用户一个区分它们的输入;用户更新规范并继续迭代直到找到正确的程序。作为评估,我们展示了使用该工具的一套基准测试,从网络编程和物联网领域,走查一个现实的网络基准测试的样本交互,表明我们可以收敛到目标程序与易处理的互动数量。作为未来的工作,我们讨论对其他FRP语言进行编码,以探索元语言特征、允许合成更大程序的分解策略以及改进的程序员工具(例如GUI),以更容易地得出规范。
2019-09-24 cs.PL
Adjoint Reactive GUI
大多数与计算机的交互是通过图形用户界面完成的。传统上,这些都是使用共享可变状态和回调以命令式方式实现的。这是有效的,但也很难推理和容易出错。函数式反应式编程(FRP)提供了一种优雅的选择,它允许以声明式的方式设计GUI。然而,大多数FRP语言是同步的,并不断检查新数据。这意味着FRP风格的GUI将在每个程序周期中"唤醒"。这对于像文本编辑器和浏览器这样的应用程序来说是有问题的,在这些应用程序中,长时间内通常什么都不发生,我们希望实现休眠直到新数据到达。在本文中,我们提出了一个异步FRP语言的GUI设计称为$λ_{\mathsf{Widget}}$。我们的语言提供了一个新的语义部件,GUI的构建块,它提供了一个自然的Curry-Howard逻辑解释和一个有效的实现策略。
2020-10-26 cs.PL
BPjs --- a framework for modeling reactive systems using a scripting language and BP
我们描述了一个新的通用框架模型驱动的工程,基于行为编程的一些进展。我们开发的工具统一了到目前为止在行为编程中所做的几乎所有工作,在一组通用的接口下。它的架构支持可插入的事件选择策略,这可以使模型更加直观和紧凑。程序状态空间可以使用各种算法来遍历,例如DFS和A*。此外,程序状态以使得能够使用并行和分布式算法扫描状态空间的方式表示。使用此工具创建的可执行模型可以直接嵌入到Java应用程序中,从而实现模型优先的系统工程方法,最初创建并验证模型,然后逐渐围绕模型构建工作应用程序。模型本身由一组用JavaScript编写的小脚本组成(因此称为“BPjs”)。使用各种案例研究,本文展示了一个宽松的程序设计语言与正式的模型分析工具相结合,创造了一种有效的方式来开发强大的复杂系统。此外,正如我们从我们运行的实验课程中所了解到的,JavaScript的使用使从业者更容易使用这个系统,从而更容易使用模型检验和模型驱动工程。除了为行为编程中的开发和案例研究提供基础设施外,该工具还被设计为行为编程和模型驱动工程中的研究和创新的通用平台。
2018-06-03 cs.FL cs.PL cs.SE
Spacetime Programming: A Synchronous Language for Composable Search Strategies
搜索策略是有效求解约束满足问题的关键。然而,在现有的约束求解器中编程搜索策略是一项艰巨的任务,并且基于约束的语言通常具有组合性问题。我们提出时空编程,一个范例扩展同步语言Esterel和定时并发约束编程回溯,创建和组成搜索策略。在这种形式中,搜索策略的组成方式与我们组成并发进程的方式相同。我们的贡献包括时空编程的设计和行为语义,以及证明时空程序是确定性的,反应性的和广泛的功能。此外,时空编程提供了一个基于约束的并发性的理论基础和约束求解的实际方面之间的桥梁。我们开发了一个原型的编译器,产生搜索策略与一个小的开销相比,硬编码的。
2019-09-24 cs.PL
Adding Real-time Capabilities to a SML Compiler
最近人们对采用函数式和反应式编程用于实时的【形】系统设计产生了很大的兴趣。为了开发实时的【形】系统,正朝着一种更具声明性的方法发展,其目的是提高软件的保真度。为了研究实时的【形】系统的函数式和反应式编程的好处,需要实时的【形】感知的函数式编译器和语言运行时。在本文中,我们研究了对现代标准ML编译器MLton的必要更改,以提供对实时的【形】执行的基本支持。我们详细介绍了我们目前的进展,在修改MLton与线程模型,支持优先级,分块对象模型,以支持实时的【形】垃圾回收,和低级别的修改,以执行实时的【形】操作系统的顶部。我们提出了初步的数字和我们正在进行的工作原型,它能够在x86机器上启动用MLton编译的ML程序。
2016-01-13 cs.PL
An Approach to the Implementation of Overlapping Rules in Standard ML
我们描述了一种在标准ML中编程基于规则的系统的方法,重点是所谓的重叠规则,即当其他规则被触发时仍然可以激活的规则。这样的规则是有用的,当实现基于规则的反应系统,并达到这种效果,我们展示了一个简单的实现Loyall的主动行为树,用于控制目标导向的代理在奥兹虚拟环境。我们讨论了我们的框架的实现使用面向实现这些系统的反应库。
2000-10-03 cs.PL
Dependent Types for Multi-Rate Flows in Synchronous Programming
同步程序设计语言出现于20世纪80年代,作为实现反应式系统的工具,它与来自物理环境的事件交互,并且通常必须在严格的时间约束下进行。在这份报告中,我们在ATS内部编码各种实时原语的实验同步语言称为前奏曲,其中ATS是一个静态类型的语言与ML类似的功能核心,支持依赖类型(的DML风格)和线性类型。我们表明,这些原语上施加的验证要求可以正式表示在ATS中的依赖类型。此外,我们修改了Prelude编译器,自动生成ATS代码从Prelude源。这个修改后的编译器允许我们仅仅依靠ATS中的类型检查来履行源于对Prelude代码进行类型检查的需要的证明义务。而ATS通常被用作通用程序设计语言,我们在此证明,它也可以方便地用于支持某些形式的高级静态检查的语言配备了较少的表达类型。
2017-02-08 cs.PL
Implementing a Language for Distributed Systems: Choices and Experiences with Type Level and Macro Programming in Scala
多层程序设计语言通过在单个一致的代码库中开发分布式系统来降低开发分布式系统的复杂性。编译器或运行时将分布式系统的组件的代码分离,从而能够对诸如数据表示、串行化和网络协议之类的低级实现细节进行抽象。我们的ScalaLoci语言允许开发人员在类型级别声明不同的组件及其架构关系,允许关于分布和远程通信的静态推理,并保证跨组件的静态类型安全。编译器将多层程序分割成特定于组件的代码,并自动生成通信样板。组件之间的通信可以通过使用反应式编程声明性地指定组件之间的数据流来建模。在本文中,我们报告了我们的设计和我们的经验,我们的语言功能嵌入到Scala作为主机语言的实现。我们展示了如何结合Scala的高级类型级编程和它的宏系统来丰富语言的新抽象。我们评论的挑战,我们遇到的,我们为我们目前的实施和大纲的建议,一个改进的宏系统,以支持嵌入特定领域的抽象的用例开发的解决方案。
2020-02-14 cs.PL
A Behavior Tree-inspired programming language for autonomous agents
针对传统行为树模型随应用规模扩大显现的功能局限,本文提出受行为树启发的自主智能体函数式编程语言,解决响应式选择等核心问题并给出规范与Haskell实现,验证了其处理复杂行为的能力。
2024-11-26 cs.AI cs.PL cs.RO
Formal Semantics and Type System for Vega Data Transformations
Charles University(查理大学)
本文为 Vega 数据可视化语言定义了基于图的操作语义,并为其核心数据变换语言设计了类型系统,能够捕获常见错误并保证类型安全性。
2026-06-16 cs.PL
The Art of the Meta Stream Protocol: Torrents of Streams
Akka Stream、Reactive Extensions和LINQ等流库的兴起普及了数据处理的声明式函数风格。流范例提供了简洁的语法来写下处理管道,以消耗当今可用的大量实时数据。这些库为程序员提供了嵌入在宿主语言中的域特定语言(DSL)来描述数据流。然而,这些库都存在可扩展性问题。流的语义被硬编码到DSL语言中,并且不能被库的用户改变。我们介绍了一种方法来修改流媒体库的语义通过元编程在运行时和编译时,并展示其通用性。我们表明,元设施的表现力是强大的,足以使推和拉语义,错误处理,并行,和运营商融合。我们评估我们的工作,通过实施一个新的流元架构方面确定的缺点,并表明其设计和架构坚持元级架构的设计原则。最先进的技术为程序员提供了大量关于反应式流处理库的选择。用通用语言表达反应式系统是很困难的。在这些库中,扩展性和微调应该是可能的,以确保在这个单一的DSL中可以表达各种各样的应用程序。
2021-07-15 cs.PL
A Programming Paradigm for Spatiotemporal Composability
Peking University(北京大学);DeepSeek-AI(深度求索)
该研究针对软件动态组合的时空可组合性问题,提出上下文范式,实现可撤销效应与反应式余效应,开发元框架Cordis,将时空可组合性扩展至整个组件系统。
2026-08-27 cs.PL cs.SE
A multi-paradigm language for reactive synthesis
California Institute of Technology(加州理工学院);Jet Propulsion Lab, Caltech(加州理工学院喷气推进实验室)
本文提出一种整合命令式与声明式元素的反应合成问题描述语言,通过游戏求解器输入结构化编程语言,支持序列约束表达,结合LTL片段和过去LTL实现高效合成。
2016-02-03 cs.LO cs.PL cs.SY
On the Formal Semantics of Speech-Act Based Communication in an Agent-Oriented Programming Language
Universidade do Vale do Rio dos Sinos(南里奥格兰德河谷大学);Universidade Federal do Rio Grande do Sul(南里奥格兰德联邦大学);University of Liverpool(利物浦大学);University of Durham(杜伦大学)
智能体通信语言的研究通常以言语行为范式为出发点。尽管他们的明显的吸引力,言语行为模型的通信有几个严重的缺点作为人工智能体系统中的通信的基础。特别是,它已被证明是非常困难的,以语音行为为基础的智能体通信语言的满意的语义。在某种程度上,问题在于言语行为语义学通常参考代理的“心理状态”(他们的信念,愿望和意图),并且通常没有办法将这种态度归因于任意的计算代理。此外,代理程序设计语言只有他们的语义形式化的抽象,独立的版本,忽略了方面,如通信原语。关于通信,实现的代理程序设计语言往往是相当特别的。本文解决了这两个问题,通过给语义的语音行为的AgentSpeak代理收到的消息。AgentSpeak是一种基于逻辑的Agent程序设计语言,它结合了反应式规划系统的PRS模型的主要特征。本文建立在一个结构操作语义,我们在以前的工作中开发的AgentSpeak。本文的主要贡献如下:我们以前的工作的AgentSpeak解释器的理论基础上的扩展;一个计算接地的语义(核心)用于言语行为为基础的智能体通信语言的施为;和一个定义良好的扩展AgentSpeak,支持智能体通信。
2011-10-31 cs.AI cs.MA cs.PL