Programming Idioms for Transactional Events
transmittance events(TE)是Concurrent ML(CML)的扩展,CML是一种同步消息传递的编程模型。以前的工作主要集中在TE的形式语义及其实现。本文考虑编程习惯用法,特别是那些与对应的CML习惯用法意外不同的编程习惯用法。首先,我们解决了TE中客户端-服务器协议的一个微妙问题。其次,我们认为,CML的包装和保护原语不翻译以及TE,我们建议有用的变通办法。最后,我们讨论了如何重写CML协议,使用中止动作。
2010-02-04 cs.DC cs.PL
Reactive Programming in Standard ML
反应式系统是保持与其环境的持续交互的系统,通过从环境接收输入事件并产生输出事件作为响应来激活。设计用于对这样的系统进行编程的现代程序设计语言使用基于瞬时和激活的概念的范例。我们描述了一个标准ML的库,它为编程反应式系统提供了基本的原语。该库是一个低级系统,可以在其上构建更复杂的反应行为,这为现有反应语言的原型扩展提供了一个方便的框架。
2004-05-23 cs.PL
Event-driven Adaptation in COP
面向上下文的程序设计语言为我们提供了原始的结构,以适应程序的行为取决于其操作环境,即上下文的演变。在以前的工作中,我们提出了ML_CoDa,一个面向上下文的语言,有两个组件:一个声明性的成分编程的上下文和一个功能的计算。本文描述了ML_CoDa的扩展,以处理异步事件通知的不可预测的上下文更改的适应。
2016-06-20 cs.PL
CPC: programming with a massive number of lightweight threads
线程是编写并发程序的一种方便和模块化的抽象,但通常相当昂贵。线程的标准替代方案,事件循环编程,允许更轻的并发单元,但导致代码难以编写,甚至更难理解。Continuation Passing C(CPC)是一个翻译器,可根据程序员的选择,将以线程风格编写的程序转换为使用事件和本机系统线程编写的程序。我们与两名本科生一起,通过编写Hekate自学了如何在CPC中编程,Hekate是一个大规模并发网络服务器,旨在有效地处理成千上万的同时连接的对等体。在本文中,我们描述了一些编程习惯用法,我们在写Hekate时学到的;虽然其中一些习惯用法是特定于CPC的,但许多应该适用于其他具有足够便宜的线程的编程系统。
2011-02-04 cs.PL
Assertion checker for the C programming language based on computations over event traces
提出了一种基于精确程序行为模型的软件测试和调试自动化工具的开发方法。程序行为模型被定义为一组事件(事件跟踪),事件上有两个基本的二元关系-优先级和包含,并表示动作之间的时间关系。开发了一种用于事件跟踪计算的语言,为断言检查、调试查询、执行配置文件和性能测量提供了基础。该方法是非破坏性的,因为断言文本与目标程序源代码分离,可以独立维护。断言可以捕获特定目标程序的动态属性,并且可以形式化典型错误和调试策略的一般知识。事件语法通过目标程序自动插装为断言语言实现提供了可靠的基础。一个实现架构和初步的实验与原型断言检查的C程序设计语言进行了讨论。
2001-01-12 cs.PL cs.SE
Jolie & LEMMA: Model-Driven Engineering and Programming Languages Meet on Microservices
在微服务领域,模型驱动工程已成为架构设计的强大方法,新的程序设计语言引入了语言抽象,以更有效地处理微服务开发。本文以LEMMA框架和Jolie程序设计语言为代表,对这两种方法如何结合进行了初步的探讨。通过为Jolie开发一个概念元模型,我们引出了这两种方法之间的紧密联系,这表明有很多收获。我们讨论了一些低挂水果,来自我们的发现,并提出了一些有趣的未来方向,从我们的新观点。
2021-04-06 cs.PL cs.SE
Programming Finite-Domain Constraint Propagators in Action Rules
在本文中,我们提出了一种新的语言,称为AR({ \it Action Rules}),并描述了各种传播有限域的约束可以在其中实现。一个动作规则指定一个模式的代理,代理可以执行的动作,和事件模式的事件,可以激活代理。AR将逻辑编程的面向目标的执行模型与事件驱动的执行模型相结合。这种混合执行模型有利于编程约束传播。约束的传播子是一个代理,它维护约束的一致性,并由约束中的域变量的更新激活。AR具有比目前有限域约束系统中广泛使用的语言{ \it indexicals}更强的描述能力,并且不仅可以灵活地实现区间一致性算法,还可以实现弧一致性算法。作为例子,我们提出了一个弱弧一致性传播的{ \tt all\_distinct}约束和混合算法的n元线性等式约束。B-Prolog已经扩展以适应动作规则。基准测试表明,B-Prolog作为一个CLP(FD)系统显着优于其他CLP(FD)系统。
2005-06-02 cs.PL
Proceedings 17th Workshop on Programming Language Approaches to Concurrency and Communication-cEntric Software
本文集收录了2026年PLACES会议论文,探讨并发与分布式编程挑战及现代软件基础,涵盖新语言设计、模型、类型系统及应用领域。
2026-04-07 cs.PL
Expansion and evolution of the R programming language
语言使用的变化是由文化力量驱动的;目前还不清楚这是否延伸到程序设计语言。它们被设计为供人类使用,但与计算机硬件而不是人类受众的交互可能会限制所用术语词汇的演变机会。我在R中测试了这一点,R是一种开源的、成熟的、常用的统计计算程序设计语言。在2014年至2021年期间发布的360,321个GitHub存储库的语料库中,我提取了168,857,044个函数调用作为R语言的n-grams。在八年的时间里,R迅速多样化,并经历了大量的词汇变化,这是由社区软件包的tidyverse集合越来越受欢迎所驱动的。我的研究结果提供的证据表明,用户可以影响程序设计语言的进化,其模式与在自然语言中观察到的模式相匹配,并反映了遗传进化。R的演变可能是由于分析复杂性的增加,促使新用户使用R,为替代词典和伴随的平流变化创造了选择压力。这种变化的速度和幅度可能会对用R和类似语言编码的分析和科学调查的可读性和连续性产生后续影响。
2022-08-26 cs.PL
Proceedings 16th International Workshop on Programming Language Approaches to Concurrency and Communication-cEntric Software
本文是PLACES 2025研讨会论文集,涵盖并发与分布式编程语言方法、类型系统、验证及应用,旨在促进相关领域新思想交流。
2025-05-25 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
Eventual Linear Ranking Functions
程序终止性是程序分析中的一个研究热点。在过去的几年里,已经见证了用于程序设计语言(如C和Java)的终止分析器的发展,其具有显著的精度和性能。这些系统在很大程度上是基于来自声明式约束编程领域的技术和工具。在本文中,我们首先回顾了一个算法的基础上法卡斯引理发现线性排名功能证明终止的某一类循环。然后,我们提出了一个扩展的方法来显示存在的最终线性排名功能,即,线性函数,在循环的有限展开之后成为排名函数。证明了算法的正确性和完备性。
2013-06-08 cs.PL
A Logical Approach to Event Handling in Imperative Languages
虽然事件处理是现代交互式编程中的关键元素,但不幸的是,它的理论基础相当薄弱。为了解决这个问题,我们建议采用可计算性逻辑\cite{Jap08}的游戏逻辑的方法来处理事件。
2015-08-26 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
Type-Driven Prompt Programming: From Typed Interfaces to a Calculus of Constraints
本文提出类型驱动的提示编程框架Lambda Prompt,通过依赖类型演算与概率精化表达句法和语义约束,并针对约束表达与算法支持不足提出优化规则及编译器研究方向。
2025-08-17 cs.FL cs.PL
Precise Dataflow Analysis of Event-Driven Applications
事件驱动编程广泛用于实现用户界面、Web应用程序和非阻塞I/O。事件驱动程序被组织为事件处理程序的集合,其执行由事件触发。传统的静态分析技术无法精确地推理事件驱动代码,因为它们保守地假设事件处理程序可以以任何顺序执行。本文提出了一个自动转换过程间有限分布子集(IFDS)的问题,过程间分布式环境(IDE)的问题作为一个通用的解决方案,以获得精确的静态分析的事件驱动的应用程序,在这两种形式的问题可以解决现有的实现。我们的贡献是展示如何提高分析精度,自动丰富前者的状态信息的事件处理程序过滤掉不可行的路径。我们证明了我们的转换的正确性和报告的实验证明的概念实现的一个子集的JavaScript。
2019-10-28 cs.PL
Data-Driven Feedback Generation for Introductory Programming Exercises
本文介绍了“搜索,对齐和修复”数据驱动的程序修复框架,以自动生成反馈的入门编程练习。与现有技术不同,我们的目标是为大型或MOOC规模的入门编程课程开发一种高效,全自动和问题不可知的技术。我们利用大量可用的学生提交在这样的设置和开发新的算法来识别类似的程序,对齐正确和不正确的程序,并通过找到最小的修复修复不正确的程序。我们已经在SARFGEN系统中实现了我们的技术,并对来自Microsoft-DEV 204.1X edX课程和Microsoft CodeHunt平台的数千名真实学生的尝试进行了评估。我们的研究结果表明,SARFGEN可以在平均两秒内为89.7%的错误学生提交生成简洁,有用的反馈。它已与Microsoft-DEV 204. 1XedX类集成并部署用于生产。
2017-11-20 cs.CY cs.PL cs.SE
Refinement-Types Driven Development: A study
本文倡导在日常编程中集成SMT求解器,通过Liquid Haskell的细化类型增强类型检查能力,并以编译器绑定器作用域处理为案例验证其有效性,同时提供了有限映射理论的原型实现。
2025-09-18 cs.PL
Exploratory Experiments on Programming Autonomous Robots in Jadescript
Università degli Studi di Parma(帕尔马大学)
本文介绍了探索性实验,以验证自主机器人使用面向代理的程序设计语言编程的可能性。通过各种类型的传感器对环境进行适当的感知,并通过有效的致动器对外部事件做出及时的反应,对于为机器人提供足够的自主性至关重要。面向代理的编程范式与这方面相关,因为它提供了语言级的抽象来处理事件和命令执行器。本文介绍了一种新的面向Agent的程序设计语言Jadescript,并介绍了它的一些新特性。一个简单的案例研究应用程序的探索性实验,以显示所提出的方法的有效性,并使用该语言来编程自主机器人。
2020-07-23 cs.AI cs.MA cs.PL
Logic Programming Semantics for Causal Processes
German University Of Digital Science Potsdam(德国波茨坦数字科学大学)
研究逻辑程序设计语义与因果过程最终状态的关系,指出正逻辑程序稳定模型对应特定过程最终状态,支持模型描述任意起点可达状态,为逻辑程序设计语义讨论提供新视角及时间维度。
2026-07-24 cs.AI cs.LO cs.PL
Model-Driven Engineering for Quantum Programming: A Case Study on Ground State Energy Calculation
本研究提出基于模型驱动工程的新框架,结合基于门的量子计算与量子退火方法,开发了程序自动转换映射机制,应用于变分量子本征求解器算法求解基态能量,证明了该框架的实用可行性。
2024-05-27 cs.PL cs.SE quant-ph
Lifestate: Event-Driven Protocols and Callback Control Flow (Extended Version)
在事件驱动的软件框架(如Android)上开发交互式应用程序(app)是非常困难的。要创建符合预期的应用程序,开发人员必须遵循复杂且通常是隐式的异步编程协议。这些协议阻止了回调的正确注册,以便从具有适当应用程序编程接口(API)调用的框架接收控制,这些API调用反过来影响可能的未来回调的集合。例如,当应用在框架的某个状态下调用特定API方法时(在该状态下,此类调用无效),应用就会违反协议。在这个领域中,自动推理很难实现的原因很大程度上是因为在这样的框架下编写应用程序很难实现:协议的规范不清楚,控制流复杂、异步且高阶。在本文中,我们解决的问题,指定和建模事件驱动的应用程序编程协议。特别是,我们正式的核心元模型,捕捉事件驱动的框架和应用程序回调之间的对话。基于这个元模型,我们定义了一种语言,称为生命状态,允许精确和正式的描述应用程序编程协议和回调控制流所施加的事件驱动的框架。Lifestate统一了应用程序回调对框架的期望建模,并指定了应用程序在调用框架时必须遵守的规则。通过这种方式,我们有效地结合了生命周期约束和类型状态规则。为了评估生命状态建模的有效性,我们提供了一个动态验证算法,该算法将应用程序的执行轨迹和生命状态协议规范作为输入,以生成一个见证协议违反的轨迹,或者证明没有这样的轨迹是可实现的。
2019-06-13 cs.PL cs.SE
Type-driven Neural Programming by Example
University of Amsterdam(阿姆斯特丹大学)
在这篇论文中,我们研究了通过例子编程(PBE),这是关于找到一个程序映射给定的输入到给定的输出。传统上,PBE在形式方法与神经方法之间存在分歧,其中形式方法通常涉及演绎技术,如SAT求解器和类型,而神经方法涉及使用相应程序对样本输入-输出进行训练,通常使用基于序列的机器学习技术,如LSTM [41]。由于这种分裂,编程类型尚未用于神经程序合成技术。我们提出了一种方法,将编程类型到PBE的神经程序合成方法。我们介绍了基于这种想法的类型化神经符号程序合成(TNSPS)方法,并在函数式编程环境中对其进行测试,以经验验证类型信息可能有助于提高有限大小数据集上神经合成器的泛化能力。我们的TNSPS模型建立在现有的神经符号程序合成(NSPS),一个基于树的神经合成器结合信息的输入-输出的例子加上当前的程序,通过进一步暴露信息的类型,这些输入-输出的例子,的语法产生式规则,以及我们希望在程序中扩展的孔。我们进一步解释了如何在我们的领域内生成数据集,该领域使用Haskell的有限子集作为合成语言。最后,我们讨论几个感兴趣的话题,可能有助于进一步采取这些想法。为了可重复性,我们公开发布代码。
2020-09-17 cs.AI cs.PL cs.SE
Programming Unikernels in the Large via Functor Driven Development
将应用程序编译为unikernels允许它们针对不同的执行环境进行调整。对单一操作系统的依赖被提供特定服务的库的链接所取代。在实践中这样做揭示了一个主要的障碍:跨异构执行目标管理配置矩阵。一个实际的单内核应用程序依赖于数百个库,每个库可能对不同的目标执行平台提出不同的要求(例如,加密加速)。我们提出了一个模块化的方法来构建大规模的代码库,干净地分离配置,应用程序和操作系统逻辑。我们的实现是建立在\mirage的unikernel框架,使用\ocaml语言的强大的抽象和元编程设施。利用模块,我们可以独立地构建许多组件,通过一组标准化签名实现松散耦合。组件可以由其他组件参数化和组合。我们的方法占状态,依赖排序和错误管理,我们多年来的使用已经证明了显着的效率优势,利用编译器功能,如全局链接时优化配置过程中。我们描述了我们的应用程序的架构和经验,通过我们的方法的一些实际应用,并讨论如何在\mirage库开发可以促进采用其他unikernel框架和程序设计语言。
2019-05-07 cs.OS cs.PL
A Preliminary Data-driven Analysis of Common Errors Encountered by Novice SPARC Programmers
答案集编程(ASP),逻辑编程的现代发展,使计算与STEM学科的自然整合。这种整合解决了K-12教育中广泛承认的挑战,基于ASP的整合的早期经验结果是有希望的。虽然与命令式程序设计语言相比,ASP被认为是一种简单的语言,但编程错误仍然是学生的一个重大障碍。这对于K-12学生来说尤其如此,他们是ASP的新手用户。对错误进行分类并测量其难度已经使人们对Java等命令式语言有了深入的了解。然而,很少有人知道的类型和困难的K-12学生使用ASP遇到的错误。为了解决这个问题,我们收集了高中学生在一个4节课的ASP语言教学研讨会上提交的程序。从这个数据集中的错误消息中,我们确定了一个错误类的集合,并测量每个类出现的频率以及解决的难度。
2022-08-05 cs.CY cs.PL
An Algebraic Approach to Weighted Answer-set Programming
提出一种基于事件等价关系的代数方法,将事实上的权重标注传播到回答集程序的标准模型和事件,并用多项式表达不确定性,以评估程序对数据集的建模适用性。
2025-03-28 cs.LO cs.PL cs.SC
Natlog: a Lightweight Logic Programming Language with a Neuro-symbolic Touch
University of North Texas(北德克萨斯大学)
我们介绍Natlog,一个轻量级的逻辑程序设计语言,共享Prolog的统一驱动的执行模型,但具有简化的语法和语义。我们的概念验证Natlog实现紧密嵌入在基于Python的深度学习生态系统中,专注于基础术语数据集的内容驱动索引。作为我们的符号索引算法的覆盖,相同的功能可以委托给神经网络,为Natlog的解析引擎提供基础事实。我们的开源实现可以在https://pypi.org/project/natlog/上以Python包的形式获得。
2021-09-17 cs.AI cs.LG cs.LO
The process of purely event-driven programs
使用进程代数,本文描述了纯粹的事件驱动的程序设计语言背后的过程/语义的形式化。
2018-08-24 cs.LO cs.PL
Design and Implementation of a Tracer Driver: Easy and Efficient Dynamic Analyses of Constraint Logic Programs
跟踪程序为用户提供有关程序执行的有用信息。在这篇文章中,我们提出了一个“跟踪驱动程序”。从单个跟踪程序开始,它提供了一个强大的前端,使多个动态分析工具能够轻松实现,同时限制了跟踪生成的开销。相关的执行事件由灵活的事件模式指定,并且可以系统地或“按需”提供大量跟踪数据。建议的跟踪驱动程序已被设计的约束逻辑编程的背景下,实验已经在GNU-Prolog。现有工具提供的执行视图可以很容易地模拟,开销可以忽略不计。实验结果表明,所描述的架构的灵活性和权力导致良好的性能。跟踪程序驱动程序开销与两个跟踪事件之间的平均时间成反比。尽管跟踪器驱动程序的原理独立于被跟踪的程序设计语言,但它最适合于高级语言,例如约束逻辑编程,其中每个被跟踪的执行事件包含许多低级执行步骤。此外,约束逻辑编程特别难以调试。当前环境没有提供所有有用的动态分析工具。他们可以从我们的跟踪驱动程序中受益匪浅,该驱动程序可以以非常低的成本集成动态分析。
2008-04-25 cs.PL cs.SE
Program Language Translation Using a Grammar-Driven Tree-to-Tree Model
Harvey Mudd College(哈维穆德学院)
在程序设计语言之间进行翻译的任务与翻译自然语言的挑战不同之处在于,程序设计语言是用一组严格得多的结构和语法规则来设计的。以前的工作已经使用了树到树的编码器/解码器模型,以在翻译期间利用程序的固有树结构。然而,神经解码器默认不利用目标语言的已知语法规则。在本文中,我们描述了一个树解码器,利用知识的语言的语法规则,专门生成语法正确的程序。我们发现,这种基于语法的树到树模型优于最先进的树到树模型在两种程序设计语言之间的翻译先前使用的合成任务。
2018-07-04 cs.LG cs.PL stat.ML