Object-Oriented Parallel Programming
我们介绍了一个面向对象的框架,并行编程,这是基于观察,编程对象可以被自然地解释为进程。并行程序由一组通过执行远程方法进行通信的持久进程组成。我们将讨论代码并行化和进程持久化,并在具有非常大的数据对象的计算的上下文中解释主要思想。
2014-04-17 cs.PL
A Metamodel of Unit Testing for Object-Oriented Programming Languages
单元测试是一种用于验证程序的一部分的准确性和正确功能的方法。这项工作包括研究的关系和方法来测试面向对象的编程(OOP)程序,并提出了一个元模型,使程序员编写测试,同时编写源代码进行测试,利用OOP程序设计语言的关键功能,如继承,多态性等。
2009-12-18 cs.PL
Memory-Efficient Object-Oriented Programming on GPUs
面向对象编程通常被认为对于高性能计算(HPC)来说效率太低,尽管事实上许多重要的HPC问题具有固有的对象结构。我们的目标是为大规模并行SIMD架构(尤其是GPU)带来高效的面向对象编程。在这篇论文中,我们开发了各种技术来优化面向对象的GPU代码。最值得注意的是,我们确定了面向对象的单方法多对象(SMMO)编程模型。我们首先为SMMO应用开发了一个嵌入式C++阵列结构(SOA)数据布局DSL。然后,我们设计了一个无锁的,动态的内存分配器,存储在SOA布局的分配。最后,我们展示了如何通过内存碎片整理进一步优化SMMO应用程序的内存访问。
2019-08-16 cs.PL
Reference Type Logic Variables in Constraint-logic Object-oriented Programming
约束逻辑面向对象的编程,例如使用Muli,促进了商业软件的集成开发,偶尔涉及找到约束逻辑问题的解决方案。面向对象特性的可用性要求将对象也用作逻辑变量,而不是仅限于基本类型的逻辑变量。目前的工作贡献了一个概念,引用类型的逻辑变量的约束逻辑面向对象的编程,考虑到任意类层次结构的程序编写的面向对象的语言。这个概念讨论了约束逻辑面向对象程序和引用类型逻辑变量之间的交互,特别是对逻辑变量的调用和访问,类型操作和等式。此外,它还提出了相应的执行环境如何处理这些交互的方法。
2019-03-01 cs.PL
Refactoring Delta-Oriented Product Lines to achieve Monotonicity
面向增量的编程(DOP)是一种灵活的转换方法来实现软件产品线。在面向增量的产品线中,变体是通过将包含在增量模块中的操作应用于(可能是空的)基本程序来生成的。这些操作可以添加、移除或修改程序中的命名元素(例如,Java程序中的类、方法和字段)。本文提出了将面向增量的生产线重构为单调形式的算法,即,或者仅包含添加和修改操作(单调递增),或者仅包含删除和修改操作(单调递减)。由于其结构简单,单调增量导向的产品线更容易分析。通过Java程序产品线DOP的核心演算形式化了这些算法,并给出了它们的正确性和复杂性。
2016-04-01 cs.LO cs.PL cs.SE
Proving False in Object-Oriented Verification Programs by Exploiting Non-Termination
我们研究了三种不同的面向对象程序验证器:Gobra、KeY和Dafny。我们表明,所有这三个可以证明假使用一个简单的技巧与幽灵变量声明和非终止代码。这表明,这些语言的验证器可以产生不合理的结果,没有太大的困难,这可能是所有面向对象的验证器共同的。
2022-12-05 cs.PL
Detecting unanticipated mutual recursion using Elegant Objects representation of object-oriented programs
Elegant Objects(EO)是面向对象编程范式的一种变体,它支持纯对象和装饰。EO程序设计语言就是基于这些思想,Bugayenko建议将其作为面向对象程序的中间表示。本文提供了一些基于Java,C++和Python的类结构在EO中的合理表示。然后,我们重新制定了经典的脆弱的基类问题的背景下,这些表示。最后,我们讨论了一个算法检测的一个子集的脆弱基类模式在EO程序。我们表明,使用EO作为一种中间语言是合理的,并讨论可能的改进语言,以协助更丰富的静态分析。
2022-09-05 cs.PL
Mapping Objects to Persistent Predicates
Prolog逻辑程序设计在许多需要存储知识的系统中被广泛用于提供持久性。用于供应持久性的Prolog编程语言的一些实现具有与其他程序设计语言的双向接口,总体上具有面向对象的编程语言。目前,缺少用于系统开发的工具和框架,这些工具和框架以简单和敏捷的形式使用逻辑谓词持久性。更具体地说,目前需要一个面向对象和逻辑持久性提供程序,允许在主存中操作对象,并且该对象的持久性具有逻辑编程谓词方面。目前的工作介绍了一个面向对象和逻辑持久性提供者的支持对象的序言声明性映射的替代。所提出的替代方案包括逻辑编程谓词与面向对象方法的对应关系,其中对于逻辑编程的每个元素,一个面向对象的元素使其相互作用。逻辑程序设计谓词的面向对象表示提供了对组成知识的元素进行操作的便利。
2017-05-01 cs.LO cs.PL cs.SE
JavaCtx: Seamless Toolchain Integration for Context-Oriented Programming
面向上下文的编程是一种新兴的范式,它在语言层次上解决了软件动态适应和上下文相关问题的模块化问题。在本文中,我们提出了JavaCtx,一个工具,它采用编码约定生成的上下文感知的Java程序的语义,并随后将其编织到应用程序。JavaCtx的贡献是双重的:设计了一组编码约定,允许用普通Java编写面向上下文的软件,以及面向上下文的语义注入的概念,允许引入上下文感知的语义,而无需源到源的编译过程,这会破坏代码的结构。这两点都允许在现有的工业强度设备中无缝集成JavaCtx,并且大大简化了面向上下文的软件的开发。
2011-04-07 cs.PL
On PROGRESS Operation. How to Make Object-Oriented Programming System More Object-Oriented (DRAFT)
实现持久对象的系统必须提供不同的机会,以便在对象存在期间以任意方式更改对象。在现代编程系统中,OO范式的传统实现具有基本的缺点,这使得持久可修改对象的实现变得相当复杂。存在不具有这些缺点的替代实现。在本文中,提供了PROGRESS操作,该操作修改现有继承层次结构中的现有对象。
2013-04-09 cs.PL cs.SE
A new model for Context-Oriented Programs
面向上下文编程(COP)是一种新的编程技术,它允许在程序执行时更改命令执行的上下文。与面向对象编程(面向方面编程)相比,COP更灵活(模块化和结构化)。本文提出了一个精确的语法导向的操作语义面向上下文的编程与层,实现COP语言,如ContextJ* 和ContextL。我们的语言模型是建立在Java丰富的层概念和激活和停用层范围。本文还提出了一个静态类型系统,保证类型化的程序不会卡住。利用所提出的语义方法,本文给出了类型系统的数学正确性。
2014-02-23 cs.PL cs.SE
Expert Systems with Logic#. A Novel Modeling Framework for Logic Programming in an Object-Oriented Context of C#
IU International University of Applied Sciences(IU国际应用科学大学)
我们提出了一种新的方法如何逻辑编程的专家系统可以直接声明在一个面向对象的语言。
2022-05-16 cs.AI cs.PL
Structured Traversal of Search Trees in Constraint-logic Object-oriented Programming
在本文中,我们提出了一个明确的,非严格的表示搜索树的约束逻辑面向对象编程。我们的搜索树表示包括在应用程序执行过程中的非确定性和确定性行为。引入这样的表示便于使用各种搜索策略。为了证明我们的方法的适用性,我们将显式搜索树的虚拟机的约束逻辑面向对象的程序设计语言Muli。然后,我们示例性地实现了三种搜索算法,按需遍历搜索树:深度优先搜索,广度优先搜索和迭代深化深度优先搜索。特别是,最后两个策略允许一个完整的搜索,这是新颖的约束逻辑面向对象编程,并突出了我们的主要贡献。最后,我们使用几个基准比较实施的策略。
2019-08-27 cs.PL
Concept-Oriented Programming
面向对象编程(OOP)的目的是通过将对象的表示和访问机制隐藏在原语引用中来描述对象的结构和行为。在这篇文章中,我们描述了一种方法,称为面向概念的编程(COP),它侧重于建模参考,假设他们也拥有应用程序特定的结构和行为占了很大一部分,甚至大部分的整体程序的复杂性。COP中的引用是完全合法的,并获得与对象相同的地位,而函数则分布在对象和引用之间。为了支持这种设计,我们引入了一个新的编程结构,称为概念,它概括了传统的类和概念包含关系概括类继承。COP的主要优点是它允许程序员描述任何程序的两个方面:显式使用的对象函数和具有横切性质的引用的中间功能,并在对象访问期间在幕后隐式执行。
2010-09-26 cs.PL
Object-Oriented Modeling of Programming Paradigms
对于正确的应用程序,使用编程范式(如函数或逻辑编程)可以极大地提高软件开发的生产力。但是这些强大的范例都与外来的程序设计语言联系在一起,而软件开发的管理要求对单一语言进行标准化。这种困境可以通过以一种新的方式使用面向对象编程来解决。传统的分析方法是采用面向对象的建模方法。在新的方法中,分析确定了应用程序的理想范例;开发从范例的面向对象建模开始。在本文中,我们说明了新的方法,给出面向对象的建模和约束编程的例子。这些例子表明,不再需要在专用于它的语言中体现编程范式。
2006-11-09 cs.PL cs.SE
Operator-oriented programming: a new paradigm for implementing window interfaces and parallel algorithms
我们提出了一个新的编程范式,可以是有用的,特别是,用于实现窗口接口和并行算法。这个范例允许用户定义可以包含嵌套运算符的运算符。这种新的范式被称为面向运营商。这种模式的目标之一是避免许多面向对象语言中固有的对象定义的复杂性,并转向透明的算法定义。
2010-04-23 cs.DC cs.PL
Concept-Oriented Programming: References, Classes and Inheritance Revisited
面向概念编程(COP)的主要目标是描述对象是如何表示和访问的。它使引用(对象位置)成为程序的第一类元素,负责许多难以通过对象建模的重要功能。COP通过引入一个新的构造、概念和一个新的关系、包含,重新思考并概括了类和继承等面向对象的主要概念。一个优点是,仅使用几个基本概念,我们就能够描述目前属于不同编程范式的许多一般思维模式:建模对象层次结构(基于原型的编程),父方法优先于子方法(Beta中的内部方法),模块化横切关注点(面向方面的编程),价值取向(函数式编程)。由于COP仍然向后兼容面向对象编程,它可以被看作是一个前景的发展方向,一个简单而自然的统一编程模型。
2014-09-13 cs.PL cs.SE
Concurrent Typestate-Oriented Programming in Java
我们描述了一种生成的方法,使并发面向类型状态的编程在Java和其他主流语言。该方法允许程序员使用高级同步抽象来实现暴露状态敏感接口的对象,该高级同步抽象将方法与接收方对象的状态进行同步,这些方法在接收方对象中具有效果。外部工具负责生成实现同步逻辑的所有样板代码。行为类型用于指定对象协议。该工具将协议一致性验证与同步逻辑集成在一起,以便在运行时及时检测到协议违规。
2019-04-02 cs.PL
Pushdown Exception-Flow Analysis of Object-Oriented Programs
静态推理的存在和关于异常是具有挑战性的:异常恶化了众所周知的数据流和控制流分析之间的相互递归。最近开发的用于λ演算的下推控制流分析暗示了一种改进异常分析的方法:下推堆栈可以精确地匹配捕获和抛出,就像它匹配返回和调用一样。这项工作概括了下推控制流分析面向对象的程序和异常。异常的下推分析比下一个最好的分析Bravenboer和Smaragdakis的Doop提高了几个数量级的精度。通过将抽象的垃圾回收推广到面向对象的程序中,我们将分析时间减少了一半。我们评估我们的实现Dalvik字节码的标准基准以及几个Android应用程序。
2013-02-12 cs.PL
Towards Interactive Object-Oriented Programming
为了表示交互式对象,我们提出了一个选择析取声明语句的形式S R,其中S;R是(过程或字段)声明语句类内。此语句具有以下语义:请求用户在创建该类的对象时从S和R中选择一个。此语句用于表示需要与用户交互的交互式对象。
2013-01-29 cs.PL
Process-Oriented Parallel Programming with an Application to Data-Intensive Computing
我们介绍面向过程的编程作为一个自然的扩展面向对象的编程并行计算。它基于这样的观察:面向对象语言的每个类都可以实例化为一个进程,可以通过远程指针访问。进程指针的引入不需要语法扩展,用编程对象标识进程,并使进程能够通过执行远程方法简单地交换信息。面向过程的编程是一种高级语言,可以替代多线程、MPI和当前用于并行计算的许多其他语言、环境和工具。它只使用现有语言(如C++和Python)的最小语法扩展来实现自然的基于对象的并行性,因此有可能导致并行编程的广泛采用。我们实现了一个原型系统运行进程使用C++与MPI,并使用它来计算一个大型的三维傅立叶变换的计算机集群上建立的商品硬件组件。三维傅立叶变换是具有复杂数据访问模式的数据密集型应用程序的原型。面向进程的代码只有几百行,通过实现大规模并行和最大化硬件利用率来实现非常高的数据吞吐量。
2014-07-21 cs.DC 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
Design and Implementation of a Reversible Object-Oriented Programming Language
高级可逆程序设计语言很少,而且通常只提供底层机器细节的基本抽象。现代程序设计语言提供了大量的语言结构和范例,以促进抽象接口的设计,但我们目前对可逆程序设计语言的这些功能的适用性的理解非常有限。我们介绍了第一个可逆的面向对象的程序设计语言,ROOPL,支持用户定义的数据类型,类继承和子类型多态性。该语言扩展了现有可逆命令式语言的设计,并允许在可逆机器上有效实现。我们提供了一个形式化的语言语义,类型系统,我们通过实现一个可逆的图灵机模拟器证明了计算的通用性的语言。ROOPL语句是局部可逆的,不会增加程序大小或计算复杂性,并且该语言提供了对每个类方法的逆语义的直接存取。我们描述了从ROOPL到可逆汇编语言PISA的无垃圾翻译所需的技术,并提供了所述技术的完整实现。我们的研究结果表明,面向对象编程的核心语言功能进行了可逆计算领域的一些能力。
2017-07-25 cs.PL
Object Oriented and Functional Programming for Symbolic Manipulation
讨论了使用不同编程技术进行符号操作的混合方法的优点。该方法的主要目的是将面向对象的程序设计方法与函数式语言在数据处理、内部表示和软件可移植性等方面的优点相结合,使面向对象的程序设计方法便于用户表示数据和算法。
1999-01-13 cs.PL cs.SC
Modelling and Verifying an Object-Oriented Concurrency Model in GROOVE
SCOOP是一种编程模型和语言,允许在高抽象级别上进行并发编程。过去已经提出了几种验证SCOOP程序的方法,但是没有一种方法直接在源代码上操作而不进行修改或注释。我们提出了一个全自动的方法来验证(一个子集)SCOOP程序翻译为基于图形的模型。首先,我们提出了一个基于图变换的SCOOP语义。我们提出了一个实现的模型在国家的最先进的模型检查器GROOVE,它可以用来模拟程序和验证并发性和一致性属性,如死锁发生的不可能性或没有后置条件违反。其次,我们提出了一个翻译工具,SCOOP程序代码上运行,并生成输入的模型。我们通过案例研究的形式检查了一些程序来评估我们的方法。
2015-05-20 cs.LO cs.PL cs.SE
A Comparative Study of the Usability of Two Object-oriented Concurrent Programming Languages
并发性在通用计算中的重要性正在迅速增加,这是由于最近转向多核处理架构。因此,越来越多的开发人员不得不学习编写并发程序,这是一项即使对专家来说也很难的任务。因此,语言设计者们正在致力于使并发编程比使用传统线程库“更容易”的语言。然而,一种新语言比另一种语言更有用的说法不能由纯粹的理论考虑来支持,而需要实证研究。在本文中,我们提出了一个研究的设计,比较并发程序设计语言方面的理解和调试现有的程序和编写正确的新程序。这种研究的一个关键挑战是避免在培训阶段和解释参与者的解决方案时可能引入的偏见。我们通过使用自学材料和评估方案来解决这些问题,该方案暴露了校正器的任何主观决定,或者完全消除它们。我们应用我们的设计比较两个面向对象的语言的并发性,多线程Java和SCOOP(简单并发面向对象编程),在学术环境。我们得到的结果有利于SCOOP,即使研究参与者以前的Java线程的培训。
2010-11-28 cs.PL
Structural Resolution for Abstract Compilation of Object-Oriented Languages
我们提出了基于共归纳逻辑编程的面向对象语言的精确静态类型分析的抽象编译。源代码被翻译成一个逻辑程序,然后类型检查和推理问题就变成了要解决的关于结果逻辑程序的查询。我们利用共归纳语义来处理递归类型和方法产生的无限项和证明。由于最近的概念,结构解析共归纳逻辑编程,我们能够推断出非常精确的类型信息,包括一类不合理的递归类型,导致非终止先前考虑共归纳语义。我们还展示了如何转换逻辑程序,使它们满足结构归结的操作语义的先决条件,我们证明了这一步骤不影响的语义的逻辑程序。
2017-09-14 cs.PL
Choral: Object-Oriented Choreographic Programming
本文提出首个基于主流抽象的编排式编程语言 Choral,通过引入分布式数据类型概念将编排式与面向对象编程相融合,实现了模块化角色代码生成,并凭借对象传递等特性成为首个高阶编排式语言。
2023-10-19 cs.PL
Extending Object-Oriented Languages by Declarative Specifications of Complex Objects using Answer-Set Programming
许多应用程序需要复杂结构的数据对象。如果所考虑的对象受到不同的应用程序特定的约束,则开发用于创建此类对象的新算法解决方案或调整现有算法解决方案可能是一项重要且昂贵的任务。但是,通常以声明方式描述所需的对象相对容易。在本文中,我们建议使用答案集编程(ASP)--一个完善的声明式编程范式从该地区的人工智能--实例化对象的标准面向对象的程序设计语言。特别是,我们扩展了Java的声明性规范,所需的对象可以使用可用的ASP求解器技术自动生成。
2011-12-06 cs.AI cs.PL
Type-Safe Feature-Oriented Product Lines
面向特性的产品线是一系列共享一组公共特性的程序。特性实现了涉众的需求,代表了设计决策和配置选项,当添加到程序中时,涉及到新结构的引入,如类和方法,以及现有结构的细化,如扩展方法。通过面向特征的分解,程序可以仅仅根据用户对特征的选择,通过组合相应的特征代码来生成。面向特征的产品线工程的一个关键挑战是如何保证整个面向特征的产品线的正确性,即,从不同的功能组合产生的所有成员程序。由于有效特征组合的数量随着特征的数量逐渐增长,因此检查所有单独的程序是不可行的。唯一可行的方法是让类型系统检查面向功能的产品线的整个代码库。我们已经开发了这样一个类型系统的基础上,一个面向功能的Java类语言的正式模型。我们证明了类型系统确保面向特征的产品线的每一个有效的程序是良好类型的,类型系统是完整的。
2010-01-20 cs.PL cs.SE
Have Object-Oriented Languages Missed a Trick with Class Function and its Subclasses?
本文指出面向对象语言缺乏面向对象意义上的 class Function 及其子类,通过在流行编程语言中实现此类子类进行实验性研究,探讨面向对象语言错失的这一机会。
2025-07-01 cs.PL
A Constraint and Object Oriented Fifth Generation Programming Language and its Compiler and Runtime System
自LISP语言问世以来,第五代程序设计语言已经发展了几十年。然而,与第四代程序设计语言相比,第五代程序设计语言由于语义晦涩、问题表示严谨、推理能力有限等原因,一直没有得到广泛应用。为此,本文提出的第五代程序设计语言COOL(Constraint and Object Ordered Language)克服了以往第五代程序设计语言语义直观、处理问题条件限制严格等问题,提高了其推理能力。具体改进如下:第一,COOL支持面向过程和面向对象,便于在生产项目中应用;第二,COOL支持表达式作为函数声明和函数返回,提高了对数学公式的语言亲和力,支持将函数参数嵌入函数名字符串,使函数命名更接近自然语言。使数学问题更容易描述;第三,COOL引入了加权机制,通过累积加权加速推理过程。第四,COOL在编程中引入了正向和反向函数的概念,这样计算机就可以推断和执行具有逻辑顺序约束的问题。第五,计算机可以通过回溯算法和动态规划算法,利用正解过程推导出逆解过程,从而使计算机能够推导出具有时序约束的问题。第六,引入预执行步骤,将程序的推理和函数查询过程与执行过程分离,提高程序的执行速度。
2022-06-02 cs.PL
Object-oriented design for massively parallel computing
我们定义了一个抽象的框架,面向对象的编程和面向对象的语言,如C++,可以解释为并行程序设计语言。并行C++代码通常比MPI的等效C++代码短十倍以上。并行C++中代码行数的大量减少主要是由于并发协调和通信指令(包括消息的打包和解包)在对象操作的实现中自动生成。我们实现了一个原型的编译器和并行C++的运行时系统,并使用它们来创建复杂的数据密集型和HPC应用程序。这些结果表明,采用并行面向对象的框架有可能大大降低并行编程的成本。我们还表明,标准的顺序面向对象的程序可以移植到并行架构,自动并行化,并可能加快。并行面向对象的框架使得能够实现具有用于互连结构的专用后端的编译器,其将网络硬件特征直接暴露给应用。我们讨论了潜在的影响计算机体系结构。
2019-03-01 cs.PL
An Efficient Implementation of Guard-Based Synchronization for an Object-Oriented Programming Language
本文提出一种将守卫原子动作附加到对象,结合协程、工作线程及专用队列栈管理的高效实现,使实验语言Lime在合成基准上优于多种主流语言。
2025-05-27 cs.DC cs.LO cs.PL
An approach to find dynamic slice for C++ Program
面向对象程序设计被认为是程序开发和维护中最有前途的方法。面向对象程序的一个重要特征是其可重用性,可重用性可以通过类或可重用组件的继承来实现,动态程序切片是一种在调试时将错误缩小到程序相关部分的有效技术。给定一个切片标准,动态切片只包含那些真正影响切片标准中变量的语句。提出了一种基于依赖分析的面向对象程序动态切片方法。它利用目标程序的控制依赖图和其它静态信息来减少程序执行过程中需要跟踪的信息。在本文中,我们提出了一种方法来找到面向对象程序的动态切片,我们正在寻找对象的切片和函数重载的情况下。
2010-06-14 cs.PL
A Practical Study of Control in Objected-Oriented--Functional--Logic Programming with Paisley
Paisley是Java中用于非确定性模式匹配的可扩展轻量级嵌入式领域特定语言。使用简单的API和编程习惯,它将任意数据对象的函数逻辑处理能力带到Java平台,而不约束底层的面向对象语义。在这里,我们提出了一个扩展的佩斯利框架,增加了基于模式的控制流。它利用了Java语言最近增加的功能,即函数接口和lambda表达式,以实现显式和透明的延续传递风格的控制方法。我们评估的实际影响的新功能,对现实世界的案例研究,重新设计的第三方开源项目使用佩斯利在传统的面向对象的数据查询习惯用法。我们发现这种方法对于遗留代码的增量重构是可行的,在关注点分离、清晰度和意图性方面有了显著的质的改进,从而使代码理解、测试和调试变得更容易。
2017-01-03 cs.PL
Object-Oriented Programming, Functional Programming and R
本文回顾了R中的一些编程技术,这些技术已被证明是有用的,特别是对于大型项目。这些包括面向对象编程的几个版本,用于大量的R包。评论试图澄清各种版本背后的起源和思想,每个版本在适当的背景下都是有价值的。R也受到函数式编程思想的强烈影响,特别是将函数式编程与面向对象编程相结合的愿望。为了阐明这种特殊的思想组合是如何在当前的R语言和支持软件中产生的,本文将首先回顾面向对象和函数式编程背后的基本思想,然后研究R的演变,这些思想提供了背景。函数式编程支持定义良好的、可防御的软件,并提供可重现的结果。面向对象的编程是一种卓越的机制,可以在管理复杂性的同时为用户保持简单。这两种范式在支持主要软件以将模型拟合到数据和许多其他统计应用方面很有价值。这些范式在R.函数式编程激发了R语言的很多东西,但R语言并没有强制执行这种范式。从函数的角度来看,面向对象编程不同于非函数语言中使用的面向对象编程,需要强调这一区别以避免混淆。R最初复制了贝尔实验室的S语言,而S语言又受到早期程序库的强烈影响。在每一个阶段,新的想法都被添加进来,但以前的软件也继续在设计中显示其影响力。概述这一演变将进一步阐明为什么我们目前有这种有点不寻常的想法组合。
2014-09-09 cs.PL cs.SE stat.CO
Object-oriented programming: some history, and challenges for the next fifty years
面向对象编程与Ole-Johan Dahl和Kristen Nygaard在设计Simula语言方面的开创性工作密不可分,该语言于1961年春天在挪威计算中心开始。然而,正如我们今天所认为的那样,五十年后的今天,面向对象是思想、约束和人之间复杂相互作用的结果。达尔和奈加德肯定会认出它是他们的后代,但也可能会惊讶于它已经长大了多少。本文基于2011年8月22日在奥斯陆大学Ole-Johan Dahl hus科学开放之际所做的演讲。它着眼于Simula的基本思想,这些思想是如何发展成为主导的编程范式的,以及当我们接近下一个50年的信息学挑战时,它们必须提供什么。
2013-03-02 cs.PL
Object-Oriented Intensional Programming: Intensional Classes Using Java and Lucid
本文介绍了面向对象的内涵编程(OO-IP),它是在Lucid的最新发展的意义上介于面向对象和内涵程序设计语言之间的一种新的混合语言。这种新的混合语言结合了Lucid和Java的基本特征,并引入了对象流的概念,这使得Lucid流中的每个元素都有可能成为具有嵌入内涵属性的对象。有趣的是,这种混合语言也为Java对象带来了显式表达和操作上下文概念的能力,创建了内涵对象的新概念,即其评估依赖于上下文的对象,在这里被证明可以翻译成标准对象。通过这种新的方法,我们扩展了内涵对象概念的使用和意义,丰富了Lucid中对象流的意义和Java中内涵对象的语义。
2009-09-03 cs.DC cs.PL
Phoenix -- The Arabic Object-Oriented Programming Language
计算机程序是由计算机中央处理单元从计算机存储器内执行的一组电子指令。它的目的是控制计算机的功能,使其能够执行各种任务。基本上,计算机程序是由人类使用程序设计语言编写的。程序设计语言是一组语法规则和词汇,用于指导计算机程序的正确编写。在实践中,大多数现有的程序设计语言都是在讲英语的国家编写的,因此它们都使用英语来表达它们的语法和词汇。然而,许多其他程序设计语言是用非英语语言编写的,例如,中国的BASIC,中国的Python,俄罗斯的Rapira和阿拉伯的Loughaty。本文讨论了一种新的程序设计语言Phoenix的设计与实现。它是一种通用的、高级的、命令式的、面向对象的、编译的阿拉伯语程序设计语言,使用阿拉伯语作为语法和词汇。Phoenix的核心是一个编译器系统,它由六个组件组成,它们是预处理器、扫描器、解析器、语义分析器、代码生成器和链接器。所进行的实验说明了Phoenix语言的几个强大功能,包括函数、while循环和算术运算。作为未来的工作,更先进的功能,包括继承,多态性,文件处理,图形用户界面,和网络的发展。
2019-05-24 cs.PL
GOOL: A Generic Object-Oriented Language (extended version)
我们提出了GOOL,一个通用的面向对象的语言。它证明了一种具有正确抽象的语言可以捕获面向对象程序的本质。我们展示了如何GOOL程序可以用来生成人类可读的,文档化的和惯用的多种语言的源代码。此外,在GOOL中,可以表达常见的编程习惯和模式,从简单的库级函数,到简单的任务(命令行参数,列表处理,打印),再到更复杂的模式,例如具有输入,输出和输入输出参数的方法,最后是设计模式(例如观察者,状态和策略)。GOOL是Haskell中的嵌入式DSL,可以生成Python,Java,C#和C++代码。
2019-11-26 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
Ownership Confinement Ensures Representation Independence for Object-Oriented Programs
献给Edsger W. Dijkstra的记忆。表示独立性或关系参数化形式上表征了数据抽象语言结构提供的封装,并证明了模拟推理的合理性。表示独立性已经在各种语言和构造中得到了证明,但在对可变状态的共享引用中却没有;事实上,它在这些语言中通常是失败的。本文阐述了表示类的独立性,在一个命令式的,面向对象的语言与指针,子类化和动态调度,面向类的可见性控制,递归类型和方法,以及一个简单的模块形式。类的实例被认为是使用私有字段和所谓的表示对象来实现抽象。表示对象的封装通过对别名的限制(称为限制)来表示。证明了满足约束条件的程序的表示独立性。一个静态分析,接受常见的设计,如观察者和工厂模式的限制。形式化不仅考虑了客户端和提供抽象的类之间的通常接口,还考虑了类和它的子类之间的接口(通常称为“受保护的”)。
2002-12-04 cs.PL
On the Interaction of Object-Oriented Design Patterns and Programming Languages
设计模式是从许多真实的系统中提炼出来的,用于对常见的编程实践进行分类。然而,由于缺乏支持程序设计语言的构造或机制,一些面向对象的设计模式被扭曲或过于复杂。在本文中,我们分析了几个已发布的设计模式,以寻找解决实现语言约束的惯用方法。从这个分析,我们奠定了基础的通用语言的结构和机制,如果提供了一个静态类型的,面向对象的语言,将更好地支持设计模式的实现,并传递,有利于建设许多真正的系统。特别是,我们的语言结构目录包括与继承分离的子类型,独立于类的词法作用域闭包对象,以及多方法分派。所提出的构造和机制并不是全新的,而是从各种语言和程序设计语言研究中采用的,并以新的正交方式组合。我们认为,通过描述设计模式的建议的结构和机制,模式描述变得更简单,因此,访问到更多的语言社区。特定语言中缺少的结构和机制可以使用聚合习惯用法来实现。
2019-05-31 cs.PL cs.SE
Comparative Analysis of Widely use Object-Oriented Languages
University of Management and Technology(管理与技术大学)
针对面向对象入门语言难以选择且缺乏统一评估方法的问题,本文提出一个依据技术与环境特征评估常用面向对象语言的综合比较框架。
2023-06-02 cs.AI cs.PL
DynaSOAr: A Parallel Memory Allocator for Object-oriented Programming on GPUs with Efficient Memory Access
长期以来,面向对象编程被认为对于SIMD高性能计算来说效率太低,尽管许多重要的HPC应用程序都具有固有的对象结构。在SIMD加速器(包括GPU)上,这主要是由于内存分配和内存访问的性能问题:有一些库直接在加速器设备上支持并行内存分配,但所有这些库都受到未合并内存访问的影响。我们发现了一类广泛的面向对象的程序,许多重要的现实世界的应用程序,可以有效地实现大规模并行SIMD加速器。我们称这个类为单方法多对象(SMMO),因为并行性是通过在一个类型的所有对象上运行一个方法来表达的。为了让普通程序员能够快速进行GPU编程,我们开发了DynaSOAr,这是一个用于SMMO应用程序的CUDA框架。DynaSOAr由(1)完全并行、无锁、动态内存分配器,(2)数据布局DSL和(3)高效、并行的do-all操作组成。DynaSOAr通过控制内存分配和内存访问,实现了优于最先进的GPU内存分配器的性能。DynaSOAr通过阵列结构数据布局提高了已分配内存的使用率,并通过无锁分层位图有效管理空闲和已分配内存块来实现低内存碎片。与其他分配器相反,我们的设计在很大程度上基于原子操作,以原始(去)分配性能换取更好的整体应用程序性能。在我们的基准测试中,DynaSOAr在最先进的分配器上实现了高达3倍的应用程序代码加速。此外,DynaSOAr比其他分配器更有效地管理堆内存,允许程序员在相同内存量的情况下运行高…
2019-06-09 cs.PL
Object-Oriented Theorem Proving (OOTP): First Thoughts
自动(即,计算机辅助的)定理证明(ATP)可以有多种形式。本文介绍了我们在定义面向对象的定理证明(OOTP)作为一种新的ATP风格的努力的早期步骤。传统的定理证明(TTP)是迄今为止唯一为人熟知的ATP类型。OOTP是TTP的一种推广。虽然TTP强烈地基于函数式编程(FP),但OOTP强烈地基于面向对象编程(OOP)。我们相信OOTP是一种定理证明的风格,它的功能和自然性不亚于TTP,因此在实际应用中可能不亚于TTP。
2019-02-27 cs.PL
Writing Internet of Things Applicatations with Task-Oriented Programming
物联网(IoT)正在快速发展。2018年,地球上每人大约有一台连接设备,此后这一数字一直在增长。这些设备通过不同的方式与环境进行交互,同时使用传感器和执行器,使程序并行。然而,编写这种类型的程序是困难的,因为设备具有很小的计算能力和内存,平台是异构的,语言是低级的。面向任务编程(TOP)是一种声明式程序设计语言范式,用于表达工作的协调、用户和系统的协作、共享数据的分发以及人机交互。mTask语言是一种专门的,但成熟的,用于物联网设备的多后端TOP语言。通过字节码解释后端和与iTask的集成,任务可以在设备上动态执行。这意味着--根据当前的情况--任务可以在运行时间定制,编译为与设备无关的字节码,并发送到设备进行解释。发送到设备的任务完全集成在iTask中,以允许与任务进行各种形式的交互,例如观察任务值和与共享数据源(SDS)进行交互。整个物联网应用程序(包括服务器和设备)都是用一种语言编程的,尽管使用了两种嵌入式领域特定语言(EDSL)。
2022-12-08 cs.PL
Aspect-Oriented Programming based building block platform to construct Domain-Specific Language for HPC application
HPC系统的世界正在向一个更复杂的系统转变,因为处理器的性能改进已经放缓。领域特定语言(Domain-Specific Language,DSL)是一种很有前途的方法,它提供了一个高效的环境来创建一个高效的程序。然而,现有的DSL平台本身往往缺乏可移植性和成本DSL开发人员的巨大努力。为了解决这个问题,我们提出了一个基于面向方面编程(AOP)的DSL构建平台,使开发人员能够通过组合方面模块来构建DSL平台。方面模块管理抽象的应用程序流、数据结构和我们平台上的内存访问。因此,开发人员可以创建任何DSL平台,其目标应用程序具有HPC应用程序通常具有的属性,抽象假设。本研究实现了一个原型平台,可以处理MPI和OpenMP层。原型支持三种类型的应用程序(结构化网格,非结构化网格和粒子模拟)。然后,我们评估了实现平台的灵活性和生产力所带来的开销。
2022-08-29 cs.DC cs.PL
Towards an Application of Update Propagation on Logic Programs Representing Java Source Code
逻辑程序现在被用作学术原型中面向对象源代码的表示已有大约十年的时间。这种表示允许对面向对象的源代码进行清晰而简洁的分析。这一方法的全部潜力远未得到开发。在本文中,我们报告了一个应用程序的完善的更新传播理论内的逻辑程序。给定面向对象代码作为逻辑程序中的事实的表示,代码的改变对应于这些事实的更新。我们演示了如何更新传播提供了一种通用的方法来生成增量版本的这种分析。
2013-01-11 cs.PL cs.SE
Functional vs. Object-Oriented: Comparing How Programming Paradigms Affect the Architectural Characteristics of Systems
University of São Paulo(圣保罗大学);Jheronimus Academy of Data Science(耶罗尼穆斯数据科学学院)
本研究通过比较面向对象和函数式编程在数字钱包系统中的实现,探讨了编程范式对系统架构特征的影响,并通过混合方法分析了开发者的观点和反馈。
2025-10-06 cs.PL cs.SE
Self-composable Programming
许多可变性管理技术依赖于复杂的语言扩展或工具来支持它,虽然这可以提供专用的语法和操作机制,但它难以实际适应,因为将新技术作为开发过程的一部分的成本。我们提出了自组合编程,一种语言驱动的,基于组合的可变性实现,它需要一个面向对象的方法来建模和组成软件中的行为。自组合编程通过提供抽象函数和特定函数的概念引入了行为的层次关系,抽象函数将共性模块化,特定函数继承自抽象函数,并应用精化来包含可变性以实现期望的功能。各种面向对象的技术可以应用在精化过程中,包括显式的基于方法的精化和隐式的基于特征的精化。为了评估潜在的独立性的行为从对象应用面向对象的功能,我们比较它的面向对象的编程概念和经验。
2021-09-14 cs.PL cs.SE
The concept of class invariant in object-oriented programming
本文提出一种面向对象程序验证的类不变式证明规则,系统解决回调、隐秘访问和引用泄漏三大难题,并能处理文献中的挑战性示例。
2024-01-20 cs.PL cs.SE
Towards Neural Synthesis for SMT-Assisted Proof-Oriented Programming
Microsoft Research(微软研究院);University of Cambridge(剑桥大学);University of Ottawa(渥太华大学)
本文构建了大规模F*程序与证明数据集及片段检查器,研究用AI合成证明导向程序,发现微调小模型性能可比肩GPT-4且成本更低,并验证了基于类型的检索增强技术的显著效果。
2024-09-04 cs.AI cs.PL cs.SE