Java Modular Extension for Operator Overloading
本文介绍了一种用于Java语言编译器和集成开发环境(IDE)的模块化扩展(插件),它在保持向后兼容性的同时,为Java语言增加了运算符重载功能。该扩展使用了类似于SugarJ的基于库的语言可扩展性的思想。但与大多数语言扩展不同,它直接在编译器内部工作,没有任何外部预处理器。这提供了更快的编译速度,更好的语言兼容性和对本地开发工具(IDE,构建工具)的支持。扩展插件到javac和Eclipse Java编译器以及所有使用编译器的工具,如IDE(Netbeans,Eclipse,IntelliJ IDEA),构建工具(ant,maven,gradle)等。只需添加一个jar库到类路径和/或安装一个插件到IDE。本文还讨论了如何构建这样的Java编译器扩展。扩展源代码在http://amelentev.github.io/java-oo/上开放
2014-06-16 cs.PL
Scoped Extension Methods in Dynamically-Typed Languages
上下文扩展方法是在其宿主类的包之外的包中声明的方法。由于扩展方法,开发人员可以适应他们不拥有的类的需求:向核心类添加方法是一个典型的用例。这对于调整软件特别有用,因此可以提高可重用性。查询在大多数动态类型语言中,扩展方法是全局可见的。由于任何开发人员都可以为任何类定义扩展方法,因此会发生命名冲突:如果两个开发人员在同一个类中定义了具有相同签名的扩展方法,则只有一个扩展方法可见并覆盖另一个。类似地,如果两个开发人员在类层次结构中各自定义了一个同名的扩展方法,则其中一个将重写另一个。为了避免这种“意外覆盖”,一些动态类型语言将扩展方法的可见性限制在特定的范围内。然而,它们的语义还没有得到充分的描述和比较。此外,这些解决方案通常依赖于专用且缓慢的方法查找算法来解决运行时的冲突。Approach.在本文中,我们给出了Ruby精化、Groovy类别、Classbox和Method Shelter的底层模型的形式化,这些模型是动态类型语言中的范围扩展方法解决方案。知识我们的正式框架使我们能够客观地比较和分析所研究的解决方案和其他不同的方法,如MultiJava的缺点。此外,语言设计者可以使用我们的正式框架来确定哪种机制具有较少的“意外覆盖”风险。接地。我们的比较和分析现有的解决方案是接地,因为它是基于指称语义形式化。重要性扩展方法广泛用于支持它们的程序设计语言中,特别是动态类型语言,如Phar…
2017-08-04 cs.PL
COOLIO: A Language Support Extension for the Classroom Object Oriented Language
COOL是一种面向对象的程序设计语言,用于在许多本科生和研究生课程中教授编译器设计。由于大多数学生不熟悉该语言,代码编辑器和IDE通常缺乏对COOL的支持,因此用COOL编写代码和测试程序对学生来说是一种负担,导致他们无法完全理解该语言和编译器的许多重要和高级功能。在这篇工具论文中,我们描述了COOLIO,一个在流行的VSCode IDE中支持COOL的扩展。COOLIO提供(i)通过词法分析和解析对COOL语言的语法突出显示支持,(ii)语义感知的自动完成功能,帮助学生编写更少的代码并减轻必须记住不熟悉的COOL语法和语法的负担,以及(iii)来自底层COOL解释器/编译器的相关反馈(例如,错误信息、键入信息)通过VSCode编辑器向学生提供调试帮助。我们相信,COOLIO将帮助学生享受编写COOL程序,从而学习和欣赏更先进的编译器概念。
2023-02-09 cs.PL
Interpreted Programming Language Extension for 3D Render on the Web
有一些工具可以简化程序员的2D/3D图形开发。有时,这些并不是所有需要商业许可证或基于试用的用户都可以直接访问,或者在使用它们之前需要很长的学习时间。在现代社会,发布最终程序的时间对于公司的成功至关重要,也是为了节省资金。然后,如果程序员能够使用已知的程序设计语言来处理工具以最大限度地缩短开发时间,那么他们就可以以最少的努力按时交付最终程序。这个概念是本文的目标,提供一个工具来创建3D渲染在一个熟悉的程序设计语言,以加快Web开发时间的过程。我们提出了一个扩展的解释程序设计语言与一个简单的语法在Web上显示3D图形生成一个模板,在一个众所周知的Web程序设计语言,它可以被定制和扩展。我们的建议是基于Lua程序设计语言作为程序员的输入语言,提供一个Web编辑器,解释其语法和导出模板在WebGL超过JavaScript,也得到即时输出在Web浏览器中。测试表明,我们的方法的有效性专注于编写的代码行,也得到了预期的输出使用一些计算资源。
2020-04-03 cs.PL
HSTREAM: A directive-based language extension for heterogeneous stream computing
本文提出HSTREAM,一种基于指令的异构流计算语言扩展,通过编译器自动生成目标代码和运行时负载分配,在保持OpenMP级编程简易性的同时,实现超越纯CPU或纯GPU的执行性能。
2018-09-25 cs.PL
Generic Constraints Projection: Four-Dimensional Type Inference for Dynamic Languages
School of Software, Shanghai Jiao Tong University(上海交通大学软件学院)
研究动态语言类型推断中函数参数的四个证据来源,提出广义约束投影框架GCP,用零注释方式存储并检查调用,利用相关技术和协议,证明了诸多性质,还在Outline语言中实例化并应用于Python源恢复注释。
2026-08-18 cs.PL
A Context-Oriented Extension of F#
面向上下文的程序设计语言为我们提供了原始的结构,以适应程序的行为取决于其操作环境,即上下文的演变。在以前的工作中,我们提出了ML_CoDa,一个面向上下文的语言,有两个组件:一个声明性的成分编程的上下文和一个功能的计算。本文描述了ML_CoDa作为F#扩展的实现。
2015-12-24 cs.PL
Annotated imports
介绍了与import语句相关的scala语言的简单扩展:导出的import,它提供了以可组合的形式重用import子句序列的能力,以及默认重写器,它提供了整个编译单元的基于宏的可插入AST转换机制,通过导入库对象激活。使用这些工具不仅允许更紧凑的代码,它还可以防止应用程序员产生某些类型的错误,并允许在标准编译器上实现本地语言扩展作为库。部分讨论的扩展作为pre-sip \cite{ai-presip}提交给scala语言委员会,可以作为scala语言未来版本中改进导入语义的第一步。
2014-04-13 cs.PL
Sampling Optimized Code for Type Feedback
为了有效地执行动态类型语言,许多语言实现都采用了两层体系结构。第一层的目标是低延迟启动时间,并收集动态配置文件,例如变量的动态类型。第二层使用优化编译器提供高吞吐量,该编译器将代码专门化为记录的类型信息。如果程序行为改变到在专用代码中出现以前未看到的类型,则该专用代码变为无效,它被去优化,并且控制被转移回第一层执行引擎,该第一层执行引擎将重新开始专用化。但是,如果程序行为变得更加具体,例如,如果多态变量变得单态,则不会发生任何变化。一旦程序运行优化的代码,就没有办法注意到优化的机会已经错过了。我们建议采用基于采样的分析器来监控本地代码,而无需任何插装。没有检测意味着当探查器不活动时,不会产生开销。我们提出了一个实现的上下文中的借记即时,优化编译器的R语言。基于采样的配置文件,我们能够检测出Debit生成的本机代码何时专门用于陈旧的类型反馈,并将其重新编译为更特定于类型的代码。我们表明,采样增加了不到3%的开销,在大多数情况下,在少数情况下高达9%,它可靠地检测陈旧的类型反馈在毫秒内。
2020-10-05 cs.PL
Extension Language Automation of Embedded System Debugging
嵌入式系统包含几个目标处理抽象层。这些层包括电子电路、二进制机器码、助记符汇编代码以及高级过程和面向对象的抽象。物理嵌入式系统中的物理和时间约束以及工件使得软件工程师不可能在处理器抽象的单个层上操作。Luxdbg嵌入式系统调试器将这些层暴露给调试器用户,并添加了一个附加层,即扩展语言层,允许用户扩展调试器及其目标处理器功能。Tcl是Luxdbg的扩展语言。Luxdbg用户可以应用Tcl来自动化交互式调试步骤,重定向和互连目标处理器输入输出设施,调度多处理器执行,记录和响应目标处理异常,以及自动化目标系统测试。在调试器中包含像Tcl这样的扩展语言可以为分布式调试带来额外的好处,其中调试器可以在计算机网络上传递扩展语言表达式。
2000-11-06 cs.PL cs.SE
QCOR: A Language Extension Specification for the Heterogeneous Quantum-Classical Model of Computation
量子计算是一种新兴的计算范式,它利用量子力学的定律来执行基本的逻辑运算。现有的量子计算编程模型在设计时考虑了容错硬件,设想了独立的应用程序。然而,近期的量子计算机容易受到噪声的影响,这限制了它们的独立实用性。为了更好地利用有噪声的量子设备的有限计算强度,已经提出了混合算法,由此量子计算机以异构方式与它们的经典对应物一起使用。这种{ \it工作方式}需要一种编程模型和一种高级程序设计语言,在单一源代码范例中原生地无缝支持异构量子经典硬件架构。由于缺乏这样的模型,我们引入了一个语言扩展规范,称为QCOR,使单源量子经典编程。使用QCOR库和基于指令的语言扩展编写的程序可以编译为功能混合二进制可执行文件。在定义了QCOR的编程模型、内存模型和执行模型之后,我们讨论了QCOR如何实现变分、迭代和前馈量子计算。QCOR以与硬件无关的异构方式实现量子经典计算,并努力构建高性能计算(HPC)的最佳实践。开发语言中的高抽象级别旨在加速熟悉经典HPC的研究人员采用量子计算。
2019-09-05 cs.PL quant-ph
Pluggable AOP: Designing Aspect Mechanisms for Third-party Composition
面向方面编程(AOP)的研究通常集中在一种语言中,在这种语言中,特定的方面扩展与基础语言集成在一起。以这种方式指定的语言具有固定的、不可扩展的AOP功能。在本文中,我们考虑更一般的情况下,集成一个基础语言与一组特定于该语言的第三方方面扩展。我们提出了一个通用的基于混合的方法来实现方面的扩展,在这样一种方式,多个,独立开发的,动态的方面扩展可以受到第三方组合和协作工作。
2005-04-30 cs.PL cs.SE
Safe and usable kernel extensions with Rex
针对 eBPF 因语言与验证器鸿沟导致安全扩展被拒的可用性问题,提出基于安全 Rust 的内核扩展框架 Rex,通过语言级安全与轻量级运行时保障安全,无需静态验证且不牺牲性能。
2025-04-28 cs.OS cs.PL
Foundations of the GraphAlg Language
本文展示图算法领域特定语言GraphAlg如何建立在矩阵操作形式语言MATLANG之上,通过扩展和语法糖实现,并证明任何GraphAlg程序可在支持同时归纳的for-MATLANG扩展中模拟。
2026-06-11 cs.DB cs.PL
Expressivity of AuDaLa: Turing Completeness and Possible Extensions
Eindhoven University of Technology(埃因霍温理工大学)
本文通过在AuDaLa中实现图灵机证明其图灵完备性,并探讨如何通过扩展提升其实际表达能力以匹配传统并行语言。
2026-04-15 cs.LO cs.PL
Design and Implementation of Dynamic Memory Management in a Reversible Object-Oriented Programming Language
可逆面向对象程序设计语言(ROOPL)于2016年底提出,并证明了面向对象编程范式在可逆环境中工作。该语言的特点是简单的静态作用域对象,这使得非平凡的程序乏味,如果不是不可能使用有限的工具编写。我们引入了一个新的语言ROOPL++形式的扩展ROOPL,具有动态存储管理和固定大小的数组,以增加语言的表达能力。该语言是ROOPL的超集,并已正式定义其语言语义,类型系统和计算的普遍性。可逆内存管理器布局的考虑进行了讨论,并最终导致伙伴内存布局的选择。ROOPL++中添加的扩展翻译到可逆的汇编语言PISA提供无垃圾计算。动态存储管理扩展成功地增加了ROOPL的表达能力,并因此表明,非平凡的可逆数据结构,如二叉树和双向链表,是可行的,并不违背可逆计算范式。
2018-04-12 cs.DS cs.PL
A Modular Formalization of Reversibility for Concurrent Models and Languages
并发一致可逆性是并发可逆性的参考概念。我们介绍了一个模块化的框架,用于定义并发模型和语言的并发一致的可逆扩展。我们展示了我们的框架可以用来定义不同的CCS和并发X-机的形式主义可逆扩展。这种方法的普遍性允许在不同的环境中重复使用理论和技术。
2016-08-11 cs.LO cs.PL
A Modular Approach to Metatheoretic Reasoning for Extensible Languages
本文提出一种模块化方法,通过分解证明和基于先验约束的泛型推理,解决可扩展语言中元理论性质的模块化证明问题,并展示其正确性。
2023-12-22 cs.LO cs.PL
Compiling Stan to Generative Probabilistic Languages and Extension to Deep Probabilistic Programming
INRIA Paris(法国国家信息与自动化研究所巴黎);École normale supérieure – PSL University(巴黎高等师范学院 – PSL大学);UMass Amherst(马萨诸塞大学阿默斯特分校);MIT-IBM Watson AI Lab(MIT-IBM沃森人工智能实验室);IBM Research(IBM研究院)
Stan是一种概率程序设计语言,在统计学社区中很流行,具有用于表达概率模型的高级语法。Stan在本质上不同于Church、Anglican或Pyro等生成概率程序设计语言。本文提出了一种将任意Stan模型编译成生成语言的综合编译方案,并证明了其正确性。我们使用我们的编译方案为Stanc3编译器构建两个新的后端,目标是Pyro和NumPyro。实验结果表明,NumPyro后端在26个基准测试中的几何平均值比Stan提高了2.3倍。在Pyro的基础上,我们扩展了Stan,支持显式变分推理指南和深度概率模型。这样,熟悉Stan的用户就可以访问新功能,而无需学习一门全新的语言。
2021-04-11 cs.AI cs.LG cs.PL
Experiments with a PCCoder extension
Romanian Institute of Science and Technology(罗马尼亚科学技术研究所)
最近在通过神经网络从有限的输入-输出对应集合(诸如DeepCoder及其PCCoder重新实现/优化)合成以某种领域特定语言(DSL)编写的程序方面的研究证明了这种方法在DSL语言中自动程序生成的效率,尽管范围有限,但在程序可以被翻译成基本上任何程序设计语言的意义上是通用的。我们使用符号IFI和IFL对DeepCoder/PCCoder的DSL进行扩展,符号IFI和IFL表示Int和List类型的If分支(测试)指令的函数表达式。我们注意到训练集的大小、训练后的神经网络的参数数量以及从有限的输入-输出对应集合中寻找合成程序所花费的时间都增加了(加倍)。结果是积极的意义上保持应用合成随机生成的测试集的准确性。
2021-07-23 cs.LG cs.PL cs.SE