Completing the Functional Approach in Object-Oriented Languages
针对面向对象语言中函数式特性零散的问题,提出基于Java的Java-TX语言,通过全局类型推断、真实函数类型等特性完善函数式方法,重点实现类型参数自动推断与函数类型异构转换以保留字节码类型信息。
2024-12-04 cs.PL
Object-oriented Programming Laws for Annotated Java Programs
面向对象的编程法则已经在不与行为接口规约语言(BISL)相结合的语言的上下文中提出。源代码和接口规范之间的强依赖性可能会在转换程序时造成许多困难。在本文中,我们介绍了一套面向对象的语言,如Java结合Java建模语言(JML)的编程法则。这套法律处理面向对象的功能,同时考虑到他们的规格。有些法律只涉及规约语言的特征。这些定律构成了一组小的转换,用于开发更精细的转换,如重构。
2010-03-25 cs.LO cs.PL cs.SE
A Co-contextual Type Checker for Featherweight Java (incl. Proofs)
本文讨论面向对象程序设计语言的组合和增量类型检查。最近的工作实现了增量类型检查的结构类型的功能性语言通过上下文类型规则,基于约束的制定,消除任何上下文依赖的表达式类型。然而,这些工作并没有涵盖面向对象语言的关键特性:子类型多态性,名义类型和实现继承。类型检查器以类表的形式对这些特性进行编码,这是类型上下文的另一种形式,可以抑制增量。在目前的工作中,我们证明了一个适当的上下文的概念,类表存在,铺平了道路,有效的增量类型检查面向对象的语言。这产生Igarashi等人的新制剂。的Featherweight Java(FJ)类型系统,其中我们用类表需求的对偶概念替换类表,用类表需求上的对偶操作替换类表操作。我们证明了FJ的类型系统和我们的上下文制定的等价性。基于我们的配方,我们实现了一个增量FJ类型检查器,并比较其性能对javac的一些现实的例子程序。
2018-05-23 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
SCJ-Circus: a refinement-oriented formal notation for Safety-Critical Java
安全关键Java(Safety-Critical Java,SCJ)是Java的一个版本,其目标是支持实时,嵌入式,安全关键软件的开发。特别是,SCJ通过引入实施更简单的体系结构和更简单的并发和内存模型的抽象来支持此类软件的认证。在本文中,我们提出了SCJ-Circus,一个面向细化的正式符号,支持规范和验证的低级别的编程模型,包括SCJ引入的新的抽象。SCJ-Circus是状态丰富进程代数Circus家族的一部分,因此,SCJ-Circus包括Circus结构,用于建模顺序和并发行为,实时和面向对象。我们在这里提出的语法和语义的SCJ-Circus,这是定义映射SCJ-Circus结构的标准Circus。这是基于现有的方法建模SCJ程序。我们还扩展了现有的马戏团为基础的细化策略,目标SCJ程序占SCJ马戏团模型的生成接近SCJ的实现。
2016-06-07 cs.LO cs.PL cs.SE
Bounded-Choice Statements for User Interaction in Imperative and Object-Oriented Programming
为命令式编程(C、Java和Android)添加多功能交互是一项重要任务。不幸的是,现有的语言只提供有限的用户交互结构。这些构建体通常以$unbounded$定量的形式存在。例如,现有的语言只能通过$read(x)/scan(x)$结构从用户处获取键盘输入。注意,在$x$可以具有任何值的意义上,$x$的值是无界的。因此,这种构造对于具有有界输入的应用程序没有用处。为了支持有界选择,我们提出了新的有界选择语句的用户交互。每个输入设备(键盘、鼠标、触摸、$...$)自然都需要一个新的有界选择语句。然而,为了使事情变得简单,我们专注于键盘的有界选择语句- kchoose-以允许用户更多地控制和更多地指导参与。很容易将我们的想法调整到其他输入设备。我们通过Java(BI)来说明我们的想法,这是核心Java的扩展,为键盘提供了一个新的有界选择语句。
2015-11-23 cs.PL
Towards an Application of Update Propagation on Logic Programs Representing Java Source Code
逻辑程序现在被用作学术原型中面向对象源代码的表示已有大约十年的时间。这种表示允许对面向对象的源代码进行清晰而简洁的分析。这一方法的全部潜力远未得到开发。在本文中,我们报告了一个应用程序的完善的更新传播理论内的逻辑程序。给定面向对象代码作为逻辑程序中的事实的表示,代码的改变对应于这些事实的更新。我们演示了如何更新传播提供了一种通用的方法来生成增量版本的这种分析。
2013-01-11 cs.PL cs.SE
Java Prolog Interface
目前有许多关于Java和Prolog程序设计语言之间交互的倡议。这些举措允许结合两种编程范式,面向对象编程和逻辑编程。每个建议的接口都有特定的功能,这取决于最终的用途。本文介绍了一种新的JavaProlog接口,用于实现Java端的Prolog持久化交互和Prolog端的函数式编程。为了支持这种交互,最高级的解决方案实现了Java对象和Prolog术语之间的语言间数据类型映射。Java Prolog Interface是一个现代化的解决方案,它从现有的解决方案中获得了最好的功能,并将所有功能结合在一起。它更灵活,适应性更强,并且有一个易于使用的应用程序提供者接口(API)。JPI实现了javax.script接口,包括Java 1.6版。该项目像现有的解决方案一样,为最流行的开源Prolog引擎提供了一个实现。托管在Prolobjectlink存储库的GitHub源代码管理上,并将生成的工件部署在Maven Central存储库上。该项目也有一个网页托管在GitHub上。
2022-03-31 cs.PL
Embracing Objects Over Statics: An Analysis of Method Preferences in Open Source Java Frameworks
本研究针对“现代Java应用为提升性能会偏好静态方法”的假设,用YourKit分析器考察28个开源Java框架的运行时行为,发现实例方法和构造函数使用占主导,说明开发者仍青睐面向对象方法。
2024-10-08 cs.PL cs.SE
Reducing Programs to Objects
本文提出 EO 这一仅含对象及其组合与装饰机制的极简面向对象语言,并探讨哪些已知编程语言特性可以仅用对象来实现。
2023-10-27 cs.PL
Automated Debugging In Java Using OCL And JDI
正确性约束为面向对象系统中的自动调试提供了基础。本文讨论了一种将正确性约束纳入Java开发环境的新方法。我们的方法使用对象约束语言(“OCL”)作为规约语言和Java接口(“JDI”)作为验证API。OCL提供了一种用于表达面向对象的约束的标准语言,其可以与统一建模语言(“UML”)软件模型集成。JDI提供了一个标准的Java API,能够支持类型安全和无副作用的运行时约束评估。所得到的正确性约束机制:(1)不需要程序设计语言修改;(2)既不需要访问也不需要改变现有的源代码;以及(3)与标准的现成Java虚拟机(“VM”)一起工作。一个原型的正确性约束审计员,以证明该机制的自动调试的目的的效用。
2001-01-03 cs.PL cs.SE
JavaBench: A Benchmark of Object-Oriented Code Generation for Evaluating Large Language Models
The Hong Kong University of Science and Technology(香港科技大学);Guangzhou HKUST Fok Ying Tung Research Institute(广州香港科技大学霍英东研究院);Nanjing University(南京大学)
提出项目级Java基准JavaBench,包含4个项目、106个类和389个方法,评估LLM面向对象代码生成能力,发现LLM在项目级Java编程上远落后于本科生。
2024-10-11 cs.AI cs.LG cs.PL
Java Classes with "-Er" and "-Utils" Suffixes Have Higher Complexity
本研究通过分析212个开源GitHub仓库的13,861个Java类,验证了带有-Er/-Or和-Utils后缀的类因承担过多功能职责而具有更高复杂度的直觉,发现其复杂度指标平均值至少高出2.5倍。
2024-03-26 cs.PL
Comparing Selected Criteria of Programming Languages Java, PHP, C++, Perl, Haskell, AspectJ, Ruby, COBOL, Bash Scripts and Scheme Revision 1.0 - a Team CPLgroup COMP6411-S10 Term Report
比较程序设计语言是软件工程师讨论的一个常见话题。很少有语言变得足够流行,以至于只有少数人使用它们,或者在研究或教育中找到自己的位置;但是专业程序员在他们的职业生涯中可以轻松使用几十种不同的语言。为了跟上不断变化的编程范式、硬件发展等,每年都会设计、指定和实现多种程序设计语言。在本文中,我们对以下十种程序设计语言进行了比较研究:Haskell、Java、Perl、C++、Auscel J、COBOL、Ruby、PHP、Bash编程语言和Scheme。安全编程实践、Web应用程序开发、Web服务设计和组合、基于面向对象的抽象、反射、面向方面、函数式编程、声明式编程、批处理脚本和用户界面原型设计。
2010-08-20 cs.PL
A Comparative Study of the Usability of Two Object-oriented Concurrent Programming Languages
并发性在通用计算中的重要性正在迅速增加,这是由于最近转向多核处理架构。因此,越来越多的开发人员不得不学习编写并发程序,这是一项即使对专家来说也很难的任务。因此,语言设计者们正在致力于使并发编程比使用传统线程库“更容易”的语言。然而,一种新语言比另一种语言更有用的说法不能由纯粹的理论考虑来支持,而需要实证研究。在本文中,我们提出了一个研究的设计,比较并发程序设计语言方面的理解和调试现有的程序和编写正确的新程序。这种研究的一个关键挑战是避免在培训阶段和解释参与者的解决方案时可能引入的偏见。我们通过使用自学材料和评估方案来解决这些问题,该方案暴露了校正器的任何主观决定,或者完全消除它们。我们应用我们的设计比较两个面向对象的语言的并发性,多线程Java和SCOOP(简单并发面向对象编程),在学术环境。我们得到的结果有利于SCOOP,即使研究参与者以前的Java线程的培训。
2010-11-28 cs.PL
NLOMJ--Natural Language Object Model in Java
本文以英语为实验语言,介绍了Java语言中的自然语言对象模型NLOMJ。该模型用面向对象程序设计中的“对象”概念描述了自然语言中任何允许的表达式的语法元素及其相互之间的复杂关系。它直接映射到自然语言的语法和语义,可以作为一种语言学方法用于信息检索。围绕NLOMJ的UML图,介绍了重要的类(句子、子句和短语)及其子类,并解释了它们的语法和语义意义。
2006-02-06 cs.CL 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
GOOL: A Generic Object-Oriented Language (extended version)
我们提出了GOOL,一个通用的面向对象的语言。它证明了一种具有正确抽象的语言可以捕获面向对象程序的本质。我们展示了如何GOOL程序可以用来生成人类可读的,文档化的和惯用的多种语言的源代码。此外,在GOOL中,可以表达常见的编程习惯和模式,从简单的库级函数,到简单的任务(命令行参数,列表处理,打印),再到更复杂的模式,例如具有输入,输出和输入输出参数的方法,最后是设计模式(例如观察者,状态和策略)。GOOL是Haskell中的嵌入式DSL,可以生成Python,Java,C#和C++代码。
2019-11-26 cs.PL
Behavioural Types for Memory and Method Safety in a Core Object-Oriented Language
我们提出了一个基于类型的分析,确保内存安全和对象协议完成的Java类语言蒙戈。对象被标注了方法调用的可接受序列的用法、类似于类型状态的规范。该分析将使用检查与静态检查结合在一起,使用检查控制方法被调用的顺序,静态检查确定引用是否可能包含空值。该分析防止了空指针解引用和内存泄漏,并确保每个对象的预期使用协议得到遵守和完成。类型系统以类型检查器的形式实现。
2020-02-28 cs.PL
Java Subtyping as an Infinite Self-Similar Partial Graph Product
由于支持变量注释,例如Java类型,Java和其他泛型名义类型的OO程序设计语言中的子类型关系既有趣又复杂。在这些语言中,基础对象类型之间的子类型关系,即,没有类型变量的,是定义完整OO子类型关系的基础,即,包括类型变量。作为类型集合上的排序关系,面向对象程序设计语言中的子类型关系总是可以表示为有向图。为了更好地理解Java中的子类型关系的一些微妙之处,在本文中,我们提出了如何使用两个新的操作(二元操作和一元操作)在有向图上精确地构建地面Java类型之间的子类型关系。我们使用的二元运算称为部分笛卡尔图积,它在本质上类似于标准图积和群积。它的定义特别是基于标准笛卡尔图积的定义。我们相信,在构建基础泛型Java子类型关系时使用图操作揭示了子类型关系的一些不直接明显的结构,不仅在Java中,而且更普遍地,在主流泛型名义类型OO程序设计语言中,如C#,Scala和Kotlin。因此,我们相信,精确地描述图操作可以用来显式地构建这些语言中的子类型关系,正如我们在本文中所做的那样,可以显着提高我们对这些语言的类型系统的特征的理解,如命名类型和方差注释,以及这些特征对名义型OOP中的名义子类型的依赖性。
2018-07-15 cs.PL
Comparative Studies of 10 Programming Languages within 10 Diverse Criteria - a Team 10 COMP6411-S10 Term Report
这是一个关于程序设计语言的调查:C++,JavaScript,ANOJ,C#,Haskell,Java,PHP,Scala,Scheme和JavaScript。我们的调查工作涉及这十种程序设计语言的比较研究,以下标准:安全编程实践,Web应用程序开发,Web服务组合,基于OOP的抽象,反射,面向方面,函数式编程,声明式编程,批处理脚本和UI原型。我们在上述标准的背景下研究这些语言,以及它们为每个语言提供的支持水平。
2010-08-20 cs.PL
Refinable Function : An Object-oriented Approach to Procedure Modularity
模块化是现代软件工程的基本方面,然而许多先进的模块化技术需要前瞻性的技术作为开发和操作过程的一部分。在本文中,我们提出了精炼功能,一个面向对象的方法,先进的基于语言的,对称模块化技术的过程。我们在概念上比较了可精炼函数与现有技术,以证实模块化的好处可以在没有编译器支持的情况下在成熟的面向对象语言中实现。介绍了函数的继承、封装和多态性等概念,将面向对象的思想引入到过程模块化中,并描述了在JavaScript中可精炼函数的设计和实现,以验证我们的方法在实际Web应用开发中的有效性。我们通过讨论在异步处理上应用模块化的关注点来介绍可精炼函数实现的实际方面。我们测试并实现了Refinable Function,以证实其与Web应用程序开发和产品线实现的相关性。
2021-09-14 cs.PL
An Analysis of Bug Distribution in Object Oriented Systems
我们引入了一种新的方法来描述Java软件的图形,其中节点表示一个Java文件-称为编译单元(CU)-边表示它们之间的关系。软件系统的特征在于图属性的度分布,如输入或输出链接,以及在其CU上计算的Chidamber和Kemerer度量的分布。每个CU在其生命周期中可能与一个或多个bug相关。我们发现了软件系统和攻击其节点的错误之间的关系。我们发现,一些指标的分布,以及每个CU的错误数量,在它们的尾部表现出幂律行为,以及受特定错误影响的CU数量。我们研究了软件度量在不同版本中的演变,以了解CU度量和CU故障之间的关系如何随时间变化。
2009-05-20 cs.PL cs.SE
Poplar: A Java Extension for Evolvable Component Integration
Java程序设计语言包含许多有助于基于组件的软件开发(CBSD)的功能,例如接口、可见性级别和对封装的强大支持。然而,组件演化经常会导致所谓的破坏性更改,这主要是因为组件以显式方法调用和字段访问的形式相互连接的刚性。我们提出了一个Java扩展,白杨树,我们目前正在开发。在Poplar中,组件间的依赖关系使用声明式查询来表示;使用规划算法生成的具体链接代码在编译时替换这些代码。Poplar包括一个基于类类型状态协议和标签的最小规约语言,以及一个轻量级的效果系统,它可以确保手写代码和生成的代码之间没有不必要的干扰。我们给出了几个例子,全自动组件集成使用白杨树,并展示了它的潜力,大大简化面向对象的软件开发,通过进化和静态检查的集成链接。
2011-06-09 cs.PL cs.SE
$φ$-Calculus: Object-Oriented Formalism
Huawei(华为)
本文提出$φ$-演算,旨在为面向对象编程提供一个形式化工具,弥补现有方法在覆盖现代OO语言特性方面的不足。
2026-07-07 cs.PL
Lucretia - a type system for objects in languages with reflection
面向对象的脚本语言(如JavaScript或Python)由于其灵活性而越来越受欢迎。尽管如此,用这些语言编写的越来越多的代码库需要一些方法来自动控制程序的属性,以确保它们在运行时的稳定性。我们提出了一个类型系统,称为Lucretia,这使得有可能控制反射语言的对象结构。主题减少和健全的类型系统的语言的语义证明。
2012-06-22 cs.LO cs.PL
Clash of the Lambdas
Java 8中引入的Java语言完成了静态类型的主流语言,同时具有面向对象和函数特性。在Java中使用Java语言的主要动机是促进基于流的声明式API,从而更容易并行。在本文中,我们评估了流处理中使用的lambda抽象的性能影响,对于在虚拟机(C#,F#,Java和Scala)和运行时平台(Linux和Windows上的JVM,Windows上的.NET Java,Linux上的Mono)上运行的各种高级语言。此外,我们评估了两个优化库(ScalaBlitz和LinqOptimizer)可以为C#,F#和Scala提供的性能增益。我们的研究基于小规模的吞吐量基准,非常小心地隔离不同的因素,咨询所涉及系统的专家,并确定原因和机会。我们发现,Java表现出很高的实现成熟度,这是一个主导因素的基准。与此同时,优化框架对于常见的查询模式可以非常有效。
2014-07-14 cs.PL
Exploring Aspects of Polyglot High-Performance Virtual Machine GraalVM
当代软件往往变得非常复杂,我们需要使用各种技术和不同的程序设计语言来进行开发。由于程序设计语言之间的互操作性可能会导致高开销,从而导致性能损失,因此研究当前使用高级面向对象语言编写的编译器的多语言虚拟机如何处理它非常重要。OpenJDK的Project Metropolis提出了GraalVM,这是一个开源的高性能多语言虚拟机,主要用Java编写。本文介绍了GraalVM的体系结构及其功能,并进一步研究了它如何解决常见的互操作性和性能问题。GraalVM在结合各种程序设计语言时使软件生态系统富有成效,例如Java,JavaScript,C/C++,Python,Ruby,R等。GraalVM的重要部分是用Java编写的Graal编译器,与传统的C/C++语言编译器相比,它允许开发人员更快,更简单,更高效地维护和优化代码。Graal可以用作即时(JIT)或静态提前(AOT)编译器。Graal是一个积极优化的编译器,实现了常见的编译器优化,重点是出色的内联和转义分析算法。本文将Graal与一些最专业的竞争对手进行了比较,并提出了我们在学术环境中测试的结果。
2021-12-15 cs.PL
Latte: Lightweight Aliasing Tracking for Java
提出 Latte 方法,通过仅需参数和字段注解、推断局部变量注解并放宽唯一性限制,最小化面向对象语言中别名跟踪的注解量和不变式复杂度,支持破坏性读取且无需更改语言语义。
2023-09-11 cs.PL cs.SE
A new model for Context-Oriented Programs
面向上下文编程(COP)是一种新的编程技术,它允许在程序执行时更改命令执行的上下文。与面向对象编程(面向方面编程)相比,COP更灵活(模块化和结构化)。本文提出了一个精确的语法导向的操作语义面向上下文的编程与层,实现COP语言,如ContextJ* 和ContextL。我们的语言模型是建立在Java丰富的层概念和激活和停用层范围。本文还提出了一个静态类型系统,保证类型化的程序不会卡住。利用所提出的语义方法,本文给出了类型系统的数学正确性。
2014-02-23 cs.PL cs.SE
Is Fortran Still Relevant? Comparing Fortran with Java and C++
本文提出了一个比较研究,以评估和比较Fortran与两个最流行的程序设计语言Java和C++。Fortran在2003年和2008年经历了主要和次要的扩展。(1)这些扩展在多大程度上使Fortran可以与Java和C++相媲美?(2)在支持模板、对象构造函数和析构函数、抽象数据类型和动态绑定等特性方面,它们有什么不同和相似之处?这些是我们在本研究中试图回答的主要问题。一个面向对象的光线追踪应用程序实现这三种语言进行比较。通过只使用一个程序,我们确保只有一组要求,从而使比较均匀。根据我们的文献调查,这是第一次进行研究,比较这些语言的应用软件度量的光线追踪应用程序,并比较这些结果与在实践中发现的相似性和差异。我们激励语言实现者和编译器开发人员,通过提供二进制分析和分析的应用程序,以提高Fortran对象的处理和处理,从而使其更加多产和通用。这项研究促进和鼓励读者进一步探索,研究和更有效地使用这些语言,特别是Fortran。
2014-06-11 cs.PL cs.SE
Extending Object-Oriented Languages by Declarative Specifications of Complex Objects using Answer-Set Programming
许多应用程序需要复杂结构的数据对象。如果所考虑的对象受到不同的应用程序特定的约束,则开发用于创建此类对象的新算法解决方案或调整现有算法解决方案可能是一项重要且昂贵的任务。但是,通常以声明方式描述所需的对象相对容易。在本文中,我们建议使用答案集编程(ASP)--一个完善的声明式编程范式从该地区的人工智能--实例化对象的标准面向对象的程序设计语言。特别是,我们扩展了Java的声明性规范,所需的对象可以使用可用的ASP求解器技术自动生成。
2011-12-06 cs.AI cs.PL
Simple Reference Immutability for System F-sub
本文在混合语言背景下,将引用不可变性扩展至System F-sub,构建F-sub-M演算,并证明其满足健全性和不可变性安全属性。
2023-07-11 cs.PL
Fat API bindings of C++ objects into scripting languages
High Performance Coders(高性能程序员)
本文探讨通过REST服务和Node.jsAPI模块,利用Classdesc系统实现C++对象到JavaScript/TypeScript环境的反射。
2024-03-22 cs.PL
Analysis of MiniJava Programs via Translation to ML
MiniJava是面向对象的程序设计语言Java的一个子集。标准ML是函数式程序设计语言ML家族的规范代表,包括F#和OCaml。已经为类Java和类ML语言开发了不同的程序分析和验证工具和技术。当然,为特定语言开发的工具强调准确处理该语言中常用的语言特征。在Java中,这意味着对象具有可变属性和动态方法分派。在ML中,这意味着具有模式匹配的高阶函数和代数数据集。我们建议将程序从一种语言翻译成另一种语言,并使用目标语言的工具进行分析和验证。通过这样做,我们希望确定目标语言的工具中需要改进的地方,并提出可能指导其改进的技术,这些技术可能与源语言的工具中使用的技术一样。更一般地说,我们希望开发用于推理程序的工具,这些工具对代码风格和数据表示的变化更具弹性。我们首先概述了从MiniJava到ML的转换,该转换仅使用ML的核心功能;特别是,它避免了使用ML的可变引用。
2020-12-30 cs.PL
Reasoning About Exceptional Behavior At the Level of Java Bytecode
本文扩展 ByteBack,提出通过 Vimp 中间层在 Java 字节码层面建模并验证异常行为,可支持多版本 Java 及 Scala、Kotlin。
2024-09-30 cs.LO cs.PL
Replacing ANSI C with other modern programming languages
用其他现代程序设计语言(如Python或Java)取代ANSI C语言可能是技术大学的一个实际辩论话题。那些主要兴趣不在编程领域的研究人员似乎更喜欢现代和更高级的语言。保持标准语言ANSI C作为工程师和微控制器编程、机器人和数据采集课程的主要工具是另一个强烈的不同意见趋势。面向函数和面向对象的语言可能是实际争论中的另一个突出话题。
2014-12-18 cs.CY cs.PL
From Principles to Practice with Class in the First Year
我们建议在第一年的课程函数和面向对象编程之间的桥梁。传统上,从函数式编程开始的课程在第二门课程中过渡到专业的,通常是面向对象的语言。这种过渡给学生带来了障碍,并且经常导致开发环境、语法和库的细节与课程应该关注的OO编程基础相混淆。相反,我们建议从一系列自定义教学语言开始第二门课程,最大限度地减少从第一门课程的过渡,并允许学生专注于核心思想。在完成教学语言的顺序之后,我们过渡到Java,此时学生对基本原理有很强的掌握。我们有3年的经验,这当然,与显着的成功。
2013-12-10 cs.PL
OOPredictor: Predicting Object-Oriented Accesses using Static Analysis
University of New Brunswick(新不伦瑞克大学);IBM Canada(IBM加拿大)
OOPredictor通过静态分析预测面向对象程序的访问模式,以提高缓存性能和垃圾回收效率。
2025-12-03 cs.PL
Secure the Clones
与不受信任的代码交换可变数据对象是一个微妙的问题,因为存在创建攻击者可访问的数据空间的风险。因此,Java的安全编程指南强调在接受或分发对内部可变对象的引用之前使用防御性复制的重要性。但是,复制方法(如clone())的实现完全留给程序员。它可能无法提供对象的足够深的副本,并且可能会被恶意子类重写。目前没有基于语言的机制支持安全的对象克隆。本文提出了一种基于类型的注释系统,用于为基于类的面向对象程序定义模块化复制策略。复制策略指定对象及其克隆之间允许的最大共享。我们提出了一个静态的执行机制,将保证所有类履行其复制政策,即使在存在覆盖的复制方法,并建立在Coq的整体方法的语义正确性。该机制已实现和实验评估克隆方法从几个Java库。
2012-06-04 cs.PL
The Green Language
Green是一种静态类型的面向对象语言,它将子类型与继承分离。它支持垃圾回收、作为一级对象的类、参数化类、内省反射和一种称为shell的运行时元对象。
2013-06-25 cs.PL
Choral: Object-Oriented Choreographic Programming
本文提出首个基于主流抽象的编排式编程语言 Choral,通过引入分布式数据类型概念将编排式与面向对象编程相融合,实现了模块化角色代码生成,并凭借对象传递等特性成为首个高阶编排式语言。
2023-10-19 cs.PL
Haskell's overlooked object system
Haskell提供了类型类绑定和参数多态性,而不是Java和OCaml等面向对象语言的子类型多态性。Haskell 98不带扩展、带普通扩展或带新扩展是否能完全支持传统的面向对象程序设计,包括封装、可变状态、继承、重写、静态检查、隐式和显式子类型等,这是一个有争议的问题。包括第一级词法作用域类、隐式多态类、灵活的多重继承、安全向下转换和安全协变参数。Haskell确实可以支持宽度和深度,结构和名义子类型。我们解决了保持Haskell的类型推断的特殊挑战,即使是对象和对象操作函数。面向对象特性在Haskell中作为OOHaskell库引入。OOHaskell适合作为类型化OO语言设计的沙箱。
2005-09-10 cs.PL
So You Want to Analyze Scheme Programs With Datalog?
静态分析通过只检查程序的语法来近似程序的结果。例如,控制流分析(CFA)确定在程序中的每个调用点可以调用哪些语法(对于函数式语言)或(对于面向对象的)方法。在研究类模式语言的控制流分析方面,存在着丰富的理论成果,但实现往往是复杂和专门的。相比之下,面向对象语言(特别是Java)享受高精度的控制流分析,可以扩展到数千行(或更多)代码。最先进的实现(如Soufflé上的DOOP)使用Horn-SAT(Datasheet)构建分析,以将分析编译为高效的实现,如高性能关系代数内核。在本文中,我们提出了一个实现的控制流分析的一个重要子集的方案(包括集!,call/cc和原始操作)。我们提出了一个最坏的情况下的长期证明我们的m-CFA的多项式复杂性和评论的可扩展性结果使用Soufflé的评价。
2021-07-27 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
Using Category Theory in Modeling Generics in OOP (Outline)
在面向对象的程序设计语言(如Java和C#)中建模泛型是一个挑战。最近,我们提出了一个新的序理论的方法来建模泛型。鉴于序理论和范畴理论之间的密切关系,在这个扩展的摘要中,我们还介绍了如何从范畴理论中,如排除,单子和操作,在我们的方法来建模泛型的一些工具。
2019-06-12 cs.PL math.CT
Test Case Generation for Object-Oriented Imperative Languages in CLP
测试是软件开发过程的重要组成部分。测试用例生成(Test Case Generation,TCG)是自动生成应用于被测系统的测试用例集的过程。白盒TCG通常通过符号执行来执行,即,代替对正常值执行程序(例如,numbers),则程序在表示任意值的符号值上执行。在处理面向对象(OO)命令式语言时,符号执行变得具有挑战性,因为它必须能够回溯,复杂的堆分配数据结构应该在TCG过程中创建,并且必须考虑继承,虚拟调用和异常等特性。由于其固有的符号执行机制,我们追求在本文中,约束逻辑程序设计(CLP)有一个很好的未开发的应用领域在TCG。我们将支持我们的主张,开发一个完全基于CLP的框架,以TCG的面向对象的命令式语言,并通过评估它对一组具有挑战性的Java程序的相应实现。我们的方法的一个独特的特点是,它只使用CLP来处理所有的语言特征,而不需要开发特定的约束运算符(例如,对堆进行建模)。
2010-07-29 cs.PL cs.SE
An Interference-Free Programming Model for Network Objects
网络对象是分布式面向对象编程的简单而自然的抽象。然而,支持网络对象的语言通常将同步问题以及相关的陷阱(如数据竞争和失败的可能性)留给用户。在本文中,我们提出了D-SCOOP,一个分布式编程模型,允许无干扰和事务式推理(潜在的多个)网络对象,同步处理自动和网络故障管理的补偿机制。我们实现这一点,利用多线程的面向对象的并发模型的运行时语义,直接推广它与基于消息的协议,有效地协调远程对象。我们提出了我们的路径融合这些对比,但互补的想法,并评估的自动同步在D-SCOOP的性能开销,发现它接近-或优于-明确的基于锁定的同步在Java RMI。
2016-04-15 cs.DC cs.PL cs.SE