Parametric Denotational Semantics for Extensible Language Definition and Program Analysis
我们提出了一种新的方法来构建一个正式的语义的程序设计语言。我们的方法,使用一个参数指称语义,允许的语义可以很容易地扩展到支持新的语言功能,并抽象定义程序分析。我们将其应用于分析鸭子类型的,反射的,咖喱化的动态语言。这种方法的好处包括它的简洁性和模块性,以及可以在语义的先前化身之上逐渐构建语言特征和分析的容易性。
2018-11-30 cs.PL
Teaching Type Systems Implementation with Stella, an Extensible Statically Typed Programming Language
本研究介绍了一门围绕可扩展静态类型语言Stella开设的半学期类型系统实现课程,依托BNF Converter提供多语言模板,覆盖多项类型系统特性,还汇报了相关教学成果。
2024-07-10 cs.PL cs.SE
SteelCore: An Extensible Concurrent Separation Logic for Effectful Dependently Typed Programs
最近的许多研究都致力于在类型论中对效应进行建模。在这项工作的基础上,我们观察到,有效的类型论可以提供一个基础上建立更复杂的编程结构和程序逻辑的语义,扩展的推理原则,适用于主机有效的类型论本身。具体地说,我们的主要贡献是一个语义的并发分离逻辑(CSL)内的F* 证明助手的方式,使依赖类型,有效的F* 程序利用并发性和指定和验证使用功能齐全,可扩展的CSL。与以前的方法相比,我们直接从非确定性交织原子动作的有效语义中的计算表示中推导出CSL的部分正确性Hoare规则。展示我们的语义的灵活性,我们建立通用的,验证库,支持各种并发结构,从动态分配,可存储的自旋锁,协议索引的通道。我们的结论是,我们有效的语义提供了一个简单而富有表现力的基础上,层域特定的语言和逻辑验证,并发编程。
2021-11-30 cs.PL
Generic Programming with Combinators and Objects
我们提出了一个通用的编程框架OCAML,它使得有可能实现可扩展的转换为大规模的类型定义。我们的框架利用OCAML的面向对象的功能,利用后期绑定覆盖生成的转换的默认行为。对多态变体类型的支持补充了描述可组合数据类型的能力和实现可组合转换的能力。
2021-06-02 cs.PL
Abstracting Extensible Recursive Functions
本文针对可扩展数据类型的递归编程问题,提出可扩展历史同态这一 Mendler 风格方法,使递归调用能处理更大类型,并在行类型理论 R$ωμ$ 中形式化,实现了递归类型与函数的模块化组合。
2025-07-21 cs.PL
MultiPL-E: A Scalable and Extensible Approach to Benchmarking Neural Code Generation
大语言模型已经展示了生成自然语言和程序设计语言文本的能力。这样的模型为多语言代码生成提供了可能性:代码生成模型能将知识从一种语言推广到另一种语言吗?虽然当代的代码生成模型可以生成语义正确的Python代码,但对它们在其他语言中的能力知之甚少。我们提出了MultiPL-E,一个将单元测试驱动的代码生成基准转换为新语言的系统。我们通过使用MultiPL-E将两个流行的Python代码生成基准转换为18种额外的程序设计语言,创建了第一个大规模多语言代码生成基准。我们使用MultiPL-E将HumanEval基准测试和MBPP基准测试扩展到18种语言,包括一系列编程范式和流行程度。使用这些新的并行基准测试,我们评估了三种最先进的代码生成模型:Codex,CodeGen和InCoder的多语言性能。我们发现Codex在其他几种语言的Python上的性能相当甚至超过了它。MultiPL-E中表示的程序设计语言的范围使我们能够探索语言频率和语言特征对模型性能的影响。最后,将代码生成基准编译为新的程序设计语言的MultiPL-E方法是可伸缩和可扩展的,使得评估新的模型、基准和语言变得简单。
2022-12-19 cs.LG cs.PL
MimIR: An Extensible and Type-Safe Intermediate Representation for the DSL Age
本文提出可扩展高阶中间表示 MimIR,通过类型化 axiom 和插件机制让 DSL 开发者无需重写编译器基础设施即可扩展优化与代码生成,并在底层、正则匹配、线性代数与自动微分三个案例中验证其生成代码达到最先进性能。
2024-11-20 cs.PL
Buzz: An Extensible Programming Language for Self-Organizing Heterogeneous Robot Swarms
École Polytechnique de Montréal(蒙特利尔综合理工学院);Royal Melbourne Institute of Technology(皇家墨尔本理工大学)
我们提出了Buzz,一种新的程序设计语言的异构机器人群。Buzz提倡一种组合方法,提供原语来从单个机器人和整个群体的角度定义群体行为。单机器人原语包括机器人特定的指令和邻域数据的操作。基于群的原语允许机器人团队的动态管理,并在整个群中共享信息。自组织源于Buzz运行时平台所基于的完全去中心化的机制。该语言可以扩展以添加新的原语(从而支持异构机器人群),并且其运行时平台被设计为位于其他框架之上,例如机器人操作系统。我们展示了Buzz的功能,通过提供代码的例子,并分析了可扩展性和鲁棒性的运行时平台,通过现实的模拟实验与代表性的群体算法。
2015-08-01 cs.MA cs.PL cs.RO
Types and Semantics for Extensible Data Types (Extended Version)
针对编程语言难以同时扩展数据类型构造器与函数的问题,本文提出原生支持初始代数语义的类型体系和核心演算,以减少编码开销并支持 map/fold 融合优化。
2023-09-26 cs.PL
Unitary Expressions: A Necessary Abstraction for Extensible Quantum Programming Languages and Systems
针对量子计算软件生态中基于名称识别量子门易出错、难维护等问题,研究提出用函数式酉表达式表示法替代,推出含QGL语言、可微分即时编译器和QVM的OpenQudit系统,梯度计算速度领先,可提升量子编程系统的扩展性与易用性。
2025-01-16 cs.PL quant-ph
Fearless Concurrency? Understanding Concurrent Programming Safety in Real-World Rust Software
Rust是近年来在构建各种底层软件时流行的程序设计语言。它旨在通过一套编译器检查规则在实现多线程软件时提供安全并发。不幸的是,人们对检查规则如何影响Rust应用程序中并发编程的安全性的理解有限。本文从并发使用和并发缺陷两个方面对Rust的并发安全性进行了初步研究。我们的研究可以更好地理解Rust的并发性,并可以指导未来的研究人员和从业者编写更好,更可靠的Rust软件,并为Rust开发调试和错误检测工具。
2019-02-05 cs.PL
Generic Programming in OCaml
我们提出了一个通用编程在OCaml库,适应一些技术借鉴其他函数式语言。该库利用了OCaml最近增加的三个功能:通用抽象数据库对于反映类型是必不可少的,可扩展的变体允许这种反映对新的添加开放,扩展点提供语法糖并生成简化库使用的样板代码。该库的构建块可用于通过视图的概念支持许多泛型编程方法。泛型遍历是在库的顶部实现的,并提供强大的组合子来编写复杂树类型上递归函数的简洁定义。我们的案例研究是一个尊重类型抽象的类型安全函数。
2018-12-31 cs.PL
Descend: A Safe GPU Systems Programming Language
针对现有主流GPU编程语言存在内存安全隐患的问题,本文提出安全GPU系统编程语言Descend,通过所有权、生命周期和扩展借用检查等机制保障内存安全,实验显示其相对手写CUDA无显著运行时开销。
2023-05-05 cs.PL
How to Avoid Making a Billion-Dollar Mistake: Type-Safe Data Plane Programming with SafeP4
P4程序设计语言提供了高级的声明性抽象,将软件的灵活性带到了网络领域。不幸的是,用于在P4中表示分组数据的主要抽象,即报头类型,缺乏基本的安全保证。在过去的几年里,越来越多的程序的经验表明了不安全方法的风险,这通常会导致微妙的软件错误。本文提出了SafeP 4,可编程数据平面,其中所有的数据包数据都保证有一个明确的意义,并满足基本的安全保障,特定于域的语言。我们装备SafeP 4的正式语义和静态类型系统,静态保证头的有效性-一个共同的安全漏洞来源,根据我们对现实世界的P4程序的分析。静态地确保头的有效性是具有挑战性的,因为有效头的集合可以在运行时修改,使其成为动态程序属性。我们的类型系统通过使用一种路径敏感的推理来实现静态安全,这种推理可以跟踪来自条件语句、路由表和控制平面的动态信息。我们的评估表明,SafeP 4的类型系统可以有效地消除常见的故障,在许多现实世界的程序。
2019-06-24 cs.PL
Variations on Variants
可扩展变体提高了程序设计语言的模块性和表达能力:它们允许将程序功能分解为独立的块,并允许使用现有数据类型的新情况和对这些数据类型的新操作来无缝扩展现有代码。本文考虑了在Haskell中提供可扩展变体的三种方法。行类型是一种长期理解的用于对可扩展记录和变量进行类型化的机制,但它的采用需要扩展Haskell的核心类型系统。或者,我们可能希望根据现有机制(如类型类)对可扩展变体进行编码。我们描述了一个编码的可扩展的变体,使用实例链,建议扩展的类系统。与许多以前的可扩展变量编码不同,我们的编码不需要为每个使用变量的函数定义新的类型类。最后,我们将我们的编码转换为使用封闭类型族,这是GHC的一个现有功能。这样做演示了封闭类型族中实例链和函数依赖项的解释。像我们这样的编码的一个问题是,它们与编码系统的匹配程度如何。我们比较我们的编码的表现力与彼此和系统的基础上行类型。我们发现,虽然等价的条款在每个系统中的类型,这两个编码需要明确的类型注释,以解决不存在行类型系统中的类型的歧义,类型家族实现保留更多的约束,在主类型比实例链实现。我们提出了一个通用的机制来指导歧义类型变量的实例化,表明它消除了我们的编码类型注释的需要,并讨论了条件下,它保持一致性。
2016-12-24 cs.PL
Towards the Safe Programming of Wireless Sensor Networks
传感器网络的部署、编程和调试是相当具有挑战性的。当前用于这些平台的程序设计语言在其规范和底层实现之间存在显著的语义差距。这一事实排除了(类型)安全应用程序的开发,这可能会简化编程和调试部署的网络的任务。在本文中,我们定义了一个核心演算编程传感器网络,并建议使用它作为一种汇编语言开发类型安全,高级程序设计语言。
2010-02-04 cs.NI cs.PL
Refinement Kinds: Type-safe Programming with Practical Type-level Computation (Extended Version)
这项工作介绍了新的概念,细化,我们开发的上下文中明确多态ML类语言与类型级计算。正如类型精化通过类型域中的值上的谓词所表达的理解原则来嵌入丰富的规范一样,种类精化通过种类域中的类型上的谓词来提供丰富的种类规范。通过利用我们强大的细化类规则,我们语言中的类型不仅用于静态地对程序表达式和值进行分类,而且还可以方便地作为树状数据结构进行操作,并通过对此类结构的逻辑约束来细化它们的类。值得注意的是,由此产生的类型和分类规则允许强大的类型反射,ad-hoc多态和类型元编程,这些通常在现代软件开发中发现,但通常不能在通用语言中以类型安全的方式表达。我们通过建立类型安全的标准元理论结果,并通过一个原型实现的一种检查器,类型检查器和解释器,我们的语言,验证我们的方法在形式上和实用。
2019-08-01 cs.PL
LoRe: A Programming Model for Verifiably Safe Local-First Software
针对本地优先软件缺乏自动化安全保证的问题,本文提出 LoRe 编程模型与编译器,结合响应式编程、静态分析和验证来识别不安全并发交互并按需引入协调一致性。
2023-10-19 cs.PL
Formalization and Implementation of Safe Destination Passing in Pure Functional Programming Settings
University of Kent(肯特大学);Utrecht University(乌得勒支大学);Tweag
本研究在纯函数式编程中形式化和实现了安全的目标传递,通过设计灵活的类型系统确保安全性,并在Haskell中验证了其可行性。
2026-01-13 cs.PL
Type Safe Redis Queries: A Case Study of Type-Level Programming in Haskell
Redis是一种内存中的数据结构存储,通常用作数据库,具有Haskell接口Hedis。Redis是动态类型的--一个键可以被丢弃并重新关联到一个不同类型的值,当一个命令获取一个它不期望的类型的值时,它会发出一个运行时错误的信号。我们开发了一种特定于域的语言,通过利用Haskell的类型级编程技术,包括索引monad,类型级字面量和封闭类型家族,跟踪数据库中的值类型,并静态地保证一类Redis程序不会发生类型错误。
2017-08-30 cs.PL
A Type and Scope Safe Universe of Syntaxes with Binding: Their Semantics and Proofs
几乎每一种编程语言的语法都包含绑定器和相应的绑定事件的概念,以及伴随的$α$等价、避免捕获的替换、类型上下文、运行时环境等概念。在过去,实现和推理程序设计语言需要仔细处理以维护绑定变量的正确行为。现代程序设计语言包含了一些特性,这些特性使得像范围安全这样的约束可以用类型来表达。尽管如此,程序员仍然被迫为范围安全操作的每个新实现重新编写相同的样板(例如,重命名、取代、脱糖、印刷等),然后再进行正确性证明。我们提出了一个具有约束力的语法表达宇宙,并演示了如何(1)实现范围安全遍历一劳永逸的泛型编程;(2)如何派生这些遍历的属性泛型证明。我们的宇宙描述,一般的遍历和证明,以及我们的例子都已经在Agda中正式化,并且可以在https://github.com/gallais/generic-syntax在线获得的附带材料中获得。
2021-10-12 cs.PL
The C Object System: Using C as a High-Level Object-Oriented Language
C对象系统(Cos)是一个小型的C库,它实现了Clos、Objc和其他面向对象的程序设计语言中可用的高级概念:统一对象模型(类、元类和属性元类)、泛型函数、多方法、委托、属性、异常、契约和闭包。Cos依赖于C程序设计语言的可编程能力来扩展其语法并将上述概念实现为第一类对象。Cos旨在满足几个一般原则,如简单性,可扩展性,可重用性,效率和可移植性,这些在单一的程序设计语言中很少能满足。它的设计是为了提供高效和可移植的消息多分发和消息多转发的实现,这是代码可扩展性和可重用性的核心。有了COS功能,软件应该像脚本语言一样灵活和可扩展,像C编程一样高效和可移植。同样,Cos概念应该大大简化自适应和面向方面的编程以及分布式和面向服务的计算
2010-03-12 cs.PL
QIS-XML: An Extensible Markup Language for Quantum Information Science
这篇硕士论文探讨了经典信息科学(CIS)和量子信息科学(QIS)之间的互操作性和集成问题。它简要介绍了可扩展置标语言(XML),并描述了量子计算XML规范(QIS-XML)原型的开发步骤。QIS-XML是一个基于XML的量子逻辑门和量子电路的描述、可视化、交换和处理框架。它还提供了一个潜在的方法,通过XML驱动的编译器的概念,量子计算机的通用程序设计语言。提供了一些例子来描述常用的量子门和电路,并提供了在标准Web浏览器中可视化它们的工具。最后给出了一个算法实例,利用量子电路进行简单的加法运算,并在量子计算机模拟器上运行。总的来说,这一初步工作表明了XML技术如何成为描述和编程量子计算机的架构的核心。QIS-XML利用一个被广泛接受的标准,在传统IT和量子IT之间架起了一座桥梁,这可以促进ICT社区对QIS的接受,并促进IT专家对量子技术的理解。这将支持经典信息科学和量子信息科学整合为完整的信息科学,这一挑战可以被称为“信息科学大一统挑战”。
2011-06-14 cs.ET cs.PL cs.SE
A Practical Study of Control in Objected-Oriented--Functional--Logic Programming with Paisley
Paisley是Java中用于非确定性模式匹配的可扩展轻量级嵌入式领域特定语言。使用简单的API和编程习惯,它将任意数据对象的函数逻辑处理能力带到Java平台,而不约束底层的面向对象语义。在这里,我们提出了一个扩展的佩斯利框架,增加了基于模式的控制流。它利用了Java语言最近增加的功能,即函数接口和lambda表达式,以实现显式和透明的延续传递风格的控制方法。我们评估的实际影响的新功能,对现实世界的案例研究,重新设计的第三方开源项目使用佩斯利在传统的面向对象的数据查询习惯用法。我们发现这种方法对于遗留代码的增量重构是可行的,在关注点分离、清晰度和意图性方面有了显著的质的改进,从而使代码理解、测试和调试变得更容易。
2017-01-03 cs.PL
Stay Safe under Panic: Affine Rust Programming with Multiparty Session Types
通信系统包括跨网络的各种软件组件。为了确保它们的鲁棒性,现代程序设计语言(如Rust)提供了强类型通道(其使用保证是仿射的(最多一次))和二进制通道上的取消操作。为了协调组件正确地相互通信和同步,我们使用多方会话类型的结构化机制,用仿射通信信道和隐式/显式取消机制对其进行扩展。这种新的类型规则,仿射多方会话类型(AMPST),确保取消终止多个独立运行的组件,并保证通信不会由于错误或突然终止而卡住。在AMPST的指导下,我们实现了一个与取消终止算法相关的Rust API自动生成工具(MultiCrusty),Rust编译器通过该工具自动检测不安全的程序。我们的评估表明,MultiCrusty提供了一种有效的机制,用于通信,同步和传播任意进程的取消通知。我们已经实现了几个用例,包括流行的应用程序协议(OAuth,SMTP)和具有异常处理模式的协议(断路器,分布式日志记录)。
2022-04-28 cs.PL
A Vision for Online Verification-Validation
今天的程序员面临着一个错误的选择,是创建可扩展的软件还是创建正确的软件。具体而言,动态语言允许软件具有丰富的可扩展性(通过动态代码加载、动态对象扩展和各种形式的反射),并且今天的程序员利用这种灵活性来“带来他们自己的语言特征”以丰富可扩展语言(例如,通过使用公共JavaScript库)。与此同时,这种基于库的语言扩展通常缺乏对其抽象的执行,导致难以避免和预测的编程错误。为了提供验证这个可扩展的世界,我们提出了在线验证验证(OVV),其中包括语言和VM设计,使一个“无阶段”的方法来程序分析,在对比标准的静态-动态阶段的区别。无阶段分析自由地将抽象解释与具体执行相结合,允许分析使用动态(具体)信息来证明关于未来执行的普遍(抽象)属性。在本文中,我们提出了一个概念概述OVV通过激励的例子程序,使用一个假设的数据库库。我们提出了一个通用的OVV语义,并扩展到这个语义,提供了一个简单的渐进的类型系统的数据库库原语。在OVV设置中实例化这个渐进类型系统的结果是一个检查器,它可以渐进地键入程序的连续延续,直到一个延续被完全验证。为了评估这个例子中OVV的建议愿景,我们实现了VM语义(在Rust中),并表明这种设计允许以这种方式进行渐进式类型化。
2016-08-21 cs.PL
Gemini: A Functional Programming Language for Hardware Description
本文介绍了双子座,功能程序设计语言的硬件描述,提供的功能,如参数多态性,递归数据库,高阶函数,和类型推断更高的表达能力相比,现代硬件描述语言。Gemini通过其独特的类型系统(由多个原子类型和依赖类型组成)演示了新颖的类型理论概念的理论和实现,该类型系统允许该语言安全地对软件和硬件构造进行建模,并通过多阶段编译执行类型推断。本文的主要技术成果包括形式化的双子座语法,类型规则,和评估规则,双子座的类型系统的安全性证明,和编译器的语义分析阶段的原型实现。
2019-11-10 cs.PL
Distributed Programming via Safe Closure Passing
包含函数式编程的编程系统,例如,高阶函数对于大规模分布式编程来说正变得越来越流行。Apache Spark等新框架利用功能技术为内存数据分析提供高级声明式API,通常优于Hadoop MapReduce等传统的“大数据”框架。然而,广泛使用的编程模型仍然相当ad-hoc;实现权衡,静态类型和语义等方面尚未得到很好的理解。我们提出了一个新的异步编程模型,其核心有几个原则,促进分布式数据的功能处理。我们的模型的重点是简单性,性能和表现力。通信的主要方式是将函数(闭包)传递给分布式的、不可变的数据。为了确保闭包的安全和有效分布,我们的模型利用了语法和基于类型的限制。我们报告在Scala中的原型实现。最后,我们提出了初步的实验结果评估的静态,基于类型的优化序列化的性能影响。
2016-02-11 cs.DC cs.PL
Thread and Memory-Safe Programming with CLASS
CLASS是一种基于线性逻辑的通用线性编程语言,通过类型系统自动保证线程与内存安全、无死锁及终止性,支持并发编程、惰性流和智能合约资产操作。
2025-05-27 cs.LO cs.PL
Lolisa: Formal syntax and semantics for a subset of the solidity programming language in Mathematical Tool Coq
本文介绍了为Etheruem区块链平台开发的Solidity程序设计语言的一个大子集的形式语法和语义,基于我们最近开发的一个通用的,可扩展的,可重用的形式内存(GERM)框架和Curry-Howard同构的扩展,表示为执行-验证同构(EVI)。这个子集被表示为Lolisa,据我们所知,它是为Solidity开发的第一个机械化和验证的正式语法和语义。Lolisa的形式语法采用了比Solidity更强大的静态类型系统,以增强类型安全性。此外,Lolisa不仅包含Solidity的几乎所有语法组件,如映射、修饰符、合约和地址类型,而且还包含通用程序设计语言功能,如多个返回值、指针算术、结构和字段访问。因此,Lolisa固有的兼容性允许Solidity程序直接翻译成Lolisa,而无需重建或抽象,并且Lolisa固有的通用性允许它扩展到表达其他程序设计语言。为此,我们还提出了一个初步的计划,系统地扩展到其他语言。
2021-01-04 cs.PL
Rust: The Programming Language for Safety and Performance
Rust是一种年轻的程序设计语言,自2010年由Mozilla推出以来,它越来越受到软件开发人员的关注。在这项研究中,我们试图回答几个研究问题。Rust是否值得如此多的关注?Rust中有什么吸引程序员使用这种新语言?安全性和性能是Rust最早的承诺之一,正如其早期开发人员所声称的那样。Rust是一种高性能的安全语言吗?这些要求是否已经实现?为了回答这些问题,我们调查和分析了最近关于Rust的研究,以及将Rust与其他可用的著名程序设计语言进行基准测试的研究。结果表明,Rust值得程序员增加兴趣,最近的基准测试研究的实验结果表明,Rust在性能,安全性和安全性方面优于其他成熟的语言。尽管这项研究并不全面(在这一领域还需要做更多的工作),但它向编程和研究社区提供了Rust作为未来语言选择的前景。
2022-06-11 cs.PL cs.SE
Type-safe, Polyvariadic Event Correlation
事件关联技术在当今的应用中扮演着关键的角色,导致了不同系列的事件关联方法的出现,这些方法具有大量专门的关联语义,包括支持不同语义的组合和扩展的计算模型。然而,到目前为止,还没有系统地研究将可扩展和可组合事件模式嵌入到静态类型的通用程序设计语言中的类型安全嵌入。事件关联技术通常采用来自数据库查询的众所周知的直观符号,对于这些符号,确实存在类型安全嵌入的方法。然而,我们在论文中认为,这些方法,这基本上是一元解析工作的后代,不太适合事件相关性,因此,不能没有进一步的麻烦被重用/重新用于嵌入事件模式。为了缩小这一差距,我们提出了PolyJoin,一种新的方法来类型安全嵌入多态相关语义的完全多变量事件模式。我们的方法基于无标签最终编码,具有n个变量的事件模式的无咖喱高阶抽象语法(HOAS)表示,适用于任意$n \in \mathbb{N}$。因此,我们的嵌入定义的主机语言没有代码生成,并利用主机语言的类型系统的模式语言的类型系统建模和类型检查。因此,通过构造不可能定义类型不良的模式。我们表明,有可能有一个纯粹的图书馆级嵌入的事件模式,在熟悉的连接查询符号,这是不限于单子。PolyJoin是实用的,类型安全的和可扩展的。它在纯多核OCaml中的实现很容易使用。
2019-07-05 cs.DB cs.PL
Communication-Safe Web Programming in TypeScript with Routed Multiparty Session Types
现代网络编程涉及协调浏览器客户端和服务器之间的交互。通常,基于Web的分布式系统中的交互是非正式描述的,这使得很难确保正确性,特别是通信安全性,即所有端点都没有类型错误或死锁,符合指定的协议。我们提出了STScript,一个工具链,它生成TypeScript API,用于通过WebSockets进行通信安全的Web开发,以及RouST,一种新的会话类型论,支持具有路由机制的多方通信。STScript为开发人员提供了基于RouST的通信协议规范生成的TypeScript API。生成的API建立在TypeScript并发实践的基础上,补充了全栈Web开发中的事件驱动编程风格,并且与服务器端端点的Node.js运行时和浏览器端端点的React.js框架兼容。RouST可以表达通过中间参与者路由的多方交互。它支持浏览器端端点之间的对等通信,通过服务器路由通信,避免过度序列化。RouST保证使用STScript API编写的端点Web应用程序的通信安全。我们使用几个部署为Web应用程序的生产就绪的案例研究来评估STScript对现代Web编程的表现力。
2021-01-12 cs.PL cs.SE
Speak Now: Safe Actor Programming with Multiparty Session Types (Extended Version)
University of Glasgow(格拉斯哥大学);Queen Mary University of London(伦敦大学女王玛丽学院)
Maty是首个支持静态多方会话类型和多会话Actor的编程语言,通过流敏感效果系统和事件驱动编程实现通信安全与系统容错。
2026-03-03 cs.PL
Toka: A Systems Programming Language with Explicit Resource Semantics
USTC(中国科学技术大学)
提出一种名为Toka的系统编程语言,通过显式资源语义(Handle-Soul对偶模型)在语法层面分离指针标识与值,从而在保持物理透明性的同时实现编译时内存安全,并降低生命周期标注的认知负担。
2026-06-01 cs.PL
GPP, the Generic Preprocessor
在计算机科学中,预处理器(或宏处理器)是一种工具,通常基于内联注释来自动更改其输入,以产生作为另一个程序输入的数据。预处理器用于软件开发和文档处理工作流,以翻译或扩展编程或置标语言,以及用于源代码和文本的条件或基于模式的生成。早期的预处理器是相对简单的字符串替换工具,与特定的程序设计语言和应用程序领域相关联,虽然这些工具后来产生了更强大的通用工具,但这些工具通常需要用户学习和使用具有自己语法约定的复杂宏语言。在本文中,我们提出了GPP,一个可扩展的,通用的预处理器,其主要优点是,它的语法和行为可以定制,以适应任何给定的预处理任务。这使得GPP特别有利于研究应用程序,它可以很容易地与新的标记,编程和控制语言一起使用。
2020-08-03 cs.PL
Qumin, a minimalist quantum programming language
在这项工作中,我们介绍Qumin,一种新的量子程序设计语言,重点是提供一个易于使用的,极简的,高层次的,易于扩展的平台,量子编程。Qumin的设计集中于通过使用两种子语言来涵盖经典和量子计算之间的各种交互:一种是处理经典准备和控制的非类型子语言,另一种是显式处理量子例程的线性类型子语言。这使得语言的经典部分可以自由地用于一般编程,同时对量子部分施加限制,以执行量子计算的规则,如量子比特的不可克隆。我们描述了语言的理论基础,在lambda演算和线性类型系统方面,以及更实际的问题,如算法和有用的编程工具,如矩阵和Oracle生成器,简化了程序的经典和量子片段的相互作用的实现。最后,我们提供了一个实验性的开源实现的解释器,typechecker和相关工具的语言(可以在\url{https://github.com/wintershammer/QImp}中找到)。
2017-04-14 cs.PL quant-ph
Fencing off Go: Liveness and Safety for Channel-based Programming (extended version)
Go是一种生产级静态类型的程序设计语言,其设计特点是显式的消息传递原语和轻量级线程,使(并鼓励)程序员能够开发并发系统,其中组件通过通信进行交互,而不是基于锁的共享内存并发。Go语言只能在运行时检测全局死锁,但不能提供编译时保护来防止所有常见的通信不匹配或部分死锁。这项工作开发了一个静态验证框架,在Go程序的活性和安全性,能够检测通信错误和部分死锁在一般类的现实并发程序,包括那些与动态通道创建,无限线程创建和递归。我们的方法从Go程序中推断出其通信模式作为行为类型的忠实表示。通过检查通道使用的语法限制,被称为围栏,我们确保程序是由许多不同的通信模式,可以重复无限多次。这个限制允许我们实现过程来检查类型中的活性和安全性,这反过来又近似于Go程序中的活性和安全性。我们已经在一个工具链中实现了类型推断、活性和安全检查,并在公开的Go程序中进行了测试。注:这是POPL 2017中发表的一篇论文的修订扩展版本,详情请参见第13页。
2017-02-28 cs.LO cs.PL
Qimaera: Type-safe (Variational) Quantum Programming in Idris
变分量子算法是经典-量子混合算法,其中经典和量子计算协同工作以解决计算问题。这些算法为设计合适的程序设计语言带来了有趣的挑战。在本文中,我们介绍Qimaera,这是一组库的Idris 2程序设计语言,使程序员实现(变分)量子算法的优雅的Idris语言的全部力量与量子编程原语,我们介绍同步工作。Idris的两个关键要素使这成为可能:(1)依赖类型,允许我们实现幺正(即可逆和可控)量子操作;(2)线性,允许我们对量子操作的执行进行细粒度控制,确保遵守量子力学定律。我们证明了Qimaera是适合变分量子编程提供实现的两个最突出的变分量子算法- QAOA和VQE。据我们所知,这是这些算法在类型安全框架中的第一个实现。
2021-11-21 cs.LO cs.PL quant-ph
Ad-hoc polymorphic delimited continuations
本文设计并实现了一个由库定义关键字组成的创建可扩展领域特定语言的框架,其核心概念类型类 Dsl 既是定界续延的特设多态版本,也是 Monad 的更通用版本,可用作比现有系统更高效简洁的静态类型可扩展效应系统。
2023-07-29 cs.PL cs.SE
A Modular Approach to Metatheoretic Reasoning for Extensible Languages
本文提出一种模块化方法,通过分解证明和基于先验约束的泛型推理,解决可扩展语言中元理论性质的模块化证明问题,并展示其正确性。
2023-12-22 cs.LO cs.PL
Session-Based Programming for Parallel Algorithms: Expressiveness and Performance
本文研究会话编程和类型的基准测试的例子,比较生产力,安全性和性能与其他通信程序设计语言。并行算法被用来检查上述方面,由于它们广泛使用的消息传递的交互,以及它们在算法研究中的日益突出的硬件资源,如多核机器和集群的可用性。我们贡献了新的基准测试结果SJ,Java的类型安全,二进制会话编程的扩展,对MPJ Express,基于MPI标准的Java消息传递系统。总之,我们观察到(1)尽管有丰富的库和功能,MPI仍然是一个低级API,并且可能遭受显式消息传递的常见缺点,如死锁和意外的消息类型,以及(2)高级会话抽象的好处,这对程序结构有显着影响,以提高可读性和可靠性,并且会话类型安全可以极大地促进通信编程的任务,同时保持有竞争力的性能。
2010-02-04 cs.DC cs.PL
Obsidian: Typestate and Assets for Safer Blockchain Programming
区块链平台正在广泛用于处理尚未建立相互信任的参与者之间的关键交易。许多区块链都是可编程的,支持智能合约,智能合约维护持久状态并支持转换状态的交易。不幸的是,许多智能合约中的漏洞已经被黑客利用。Obsidian是一种新颖的程序设计语言,它的类型系统可以静态检测当今智能合约中常见的错误。黑曜石是基于一个核心演算,二氧化硅,我们证明了类型的可靠性。Obsidian使用typestate来检测不适当的状态操纵,使用线性类型来检测资产滥用。我们描述了两个案例研究,评估黑曜石的适用性的领域的参数保险和供应链管理,发现黑曜石的类型系统有利于推理高层次的国家和所有权的资源。我们将我们的Obsidian实现与Solidity实现进行了比较,观察到Solidity实现需要大量的样板检查和状态跟踪,而Obsidian静态地完成这项工作。
2019-09-08 cs.PL cs.SE
Hardware/Software Co-Assurance using the Rust Programming Language and ACL2
Rust程序设计语言作为一种现代的、类型安全的、内存安全的、潜在的可形式化分析的程序设计语言,已经引起了人们的极大兴趣和使用。我们对Rust的兴趣源于它作为硬件/软件共同保证语言的潜力,并应用于自动驾驶汽车等关键系统。我们报告了Rust作为高级合成(HLS)语言的首次使用。大多数现有的HLS语言都是C的子集。基于Rust的HLS为硬件和软件实现带来了一种现代的、类型安全的、内存安全的表达式语言,具有很高的保证。为了研究Rust作为HLS的适用性,我们精心制作了一个Rust子集,灵感来自Russinoff的Restricted Rummic C(RAC),我们将其命名为Restricted Rummic Rust或RAR。在我们的第一个RAR工具链实现中,我们简单地将RAR源代码转换为RAC。通过这样做,我们利用了一些现有的硬件/软件共同保证工具,以最少的时间和精力投资。在本文中,我们描述了RAR Rust子集,详细介绍了我们的原型RAR工具链,并描述了实现和验证的几个代表性的算法和数据结构编写的RAR,使用ACL 2定理证明进行的正确性证明。
2022-05-24 cs.LO cs.PL
Safe Stream-Based Programming with Refinement Types
在基于流的编程中,数据源被抽象为可以通过回调函数操作的值流。基于流的编程正在迅速流行,因为它为交互式软件中处理异步数据源提供了一个强大的和富有表现力的范例。但是,高级流抽象也会使开发人员难以推理程序中的控制流和数据流关系。这在异步流代码与线程受限功能(例如将UI访问限制为单个线程的UI框架)交互时特别有影响,因为流结构的线程行为通常是不直观的,并且没有充分的文档记录。在本文中,我们提出了一个基于类型的方法,可以静态地证明线程安全的UI访问流为基础的软件。我们的关键见解是,流处理框架的流畅API支持通过类型细化跟踪线程,从而可以自动推断代码在哪个线程上运行-这通常是一个难题。我们将该系统实现为基于注释的Java typechecker,用于基于流行的ReactiveX框架构建的Android程序,并通过注释和分析8个开源应用程序来评估其功效,在这些应用程序中,我们发现33个不安全的UI访问实例,而每186行源代码中只有一个注释的注释负担。我们还报告了将类型检查器应用于Uber Technologies Inc.的两个更大的应用程序的经验。代码库,它目前在每个代码更改时运行,并阻止引入潜在线程错误的更改。
2018-08-09 cs.PL cs.SE
Human-Centered Programming: The Design of a Robotic Process Automation Language
Polish-Japanese Academy of Information Technology(波日信息技术学院)
本文针对RPA缺乏通用、易读且跨平台的任务描述语言问题,提出了一种程序员和非程序员都能理解的可扩展机器人语言XRL,用于自动化重复性业务流程。
2023-11-07 cs.PL cs.RO
SOTER: A Runtime Assurance Framework for Programming Safe Robotics Systems
University of California at Berkeley, CA, USA(加州大学伯克利分校);SRI International(SRI国际);Microsoft(微软)
本文提出SOTER框架,通过一种编程语言和集成的运行时保证系统,为安全机器人系统提供保障,确保在使用未经认证组件时仍能满足安全要求。
2019-04-19 cs.AI cs.PL cs.RO
The Case for Writing Network Drivers in High-Level Programming Languages
在所有生产级服务器、桌面和移动操作系统上,驱动程序都是用C或C++的受限子集编写的。它们占Linux代码的66%,但2017年在Linux中发现的40个与内存安全相关的安全漏洞中有39个位于驱动程序中。这些错误可以通过为驱动程序使用高级语言来防止。我们展示了使用Rust、Go、C#、Java、OCaml、Haskell、Swift、JavaScript和Python实现的英特尔ixgbe 10 Gbit/s网卡的用户空间驱动程序,这些驱动程序都是以各自语言的惯用风格从头开始编写的。我们量化了使用这些语言的成本和收益:高级语言更安全(错误更少,安全检查更多),但运行时安全检查会降低吞吐量,垃圾回收会导致延迟峰值。乱序CPU降低了安全检查的成本:我们的Rust驱动程序每个数据包执行的指令增加了63%,但只比参考C实现慢4%。Go的垃圾收集器即使在重负载下也能将laptop保持在100 $μ$ s以下。其他语言的情况更糟,但它们独特的属性是一个有趣的案例研究。所有实现都可以在www.example.com上免费获得。
2019-09-13 cs.NI cs.PL
What can the programming language Rust do for astrophysics?
天体物理学界使用不同的工具来完成计算任务,如复杂系统模拟、辐射转移计算或大数据。编程语言如Fortran、C或C++通常出现在这些工具中,通常,语言的选择是基于性能的需要。但这是有代价的:安全。例如,一个常见的错误来源是对无效内存区域的访问,这会产生随机执行行为并影响结果的科学解释。2015年,Mozilla Research发布了名为Rust的新编程语言的第一个稳定版本。许多特性使这种新语言对科学界具有吸引力,它是开源的,在提供零成本抽象的同时保证内存安全。我们通过重新实现Mercury-T的基本部分来探索Rust用于天体物理学的优点和缺点,Mercury-T是一种模拟多行星系统的动力学和潮汐演化的Fortran代码。
2017-02-09 astro-ph.IM cs.PL
LLM-Aided Customizable Profiling of Code Data Based On Programming Language Concepts
IBM Research(IBM研究院);IIIT Hyderabad(印度信息技术学院海得拉巴分校);NIT Durgapur(杜尔加普尔国家理工学院)
本研究针对代码大语言模型数据集的画像需求,提出LLM辅助的两阶段混合方法,可定制化提取多语言代码的句法与语义概念,准确率表现优异,支持低资源语言与扩展。
2025-03-19 cs.ET cs.IR cs.LG