Programming Paradigms, Turing Completeness and Computational Thinking
编程范式的概念,以及相关的程序设计语言和方法,是计算机科学教学法的一个既定原则,载于国际课程。然而,这一概念与库恩的经典概念化的科学范式作为一个占主导地位的世界观,它取代了它的前辈通过优越的解释力。此外,编程范式如何被描述和区分也不是很清楚。事实上,仔细观察,明显不同的编程范式是非常紧密联系的。相反,它们应该被视为图灵完全计算与计算思维补充的统一计算机科学范式的不同传统。
2020-02-14 cs.PL
Application specific dataflow machine construction for programming FPGAs via Lucent
现场可编程门阵列(FPGA)具有加速特定HPC代码的潜力。然而,即使随着高级综合(HLS)的出现,FPGA程序员也可以用C或C++编写代码,对此类器件进行编程仍然需要相当多的专业知识。这在很大程度上是因为这些架构是建立在CPU或GPU的Von Neumann抽象之上的。因此,通过命令式语言对FPGA进行编程并不是最佳的,并且可能会导致底层架构上的算法的第一个版本和最终版本之间存在非常显著的性能差异,其中步骤通常不明显,并且需要相当多的专业知识。在这份立场文件中,我们认为,应利用建立在Cumblow原则基础上的语言来实现FPGA的快速构造代码,这类似于程序员采用开发专门用于其应用的定制Cumblow机器的抽象。这是我们的信念,可以学到很多东西,从一代的编程语言,在20世纪70年代和80年代流行的通用编程机器,我们介绍了Lucent这是一个现代的衍生物的Lucid,并作为一个工具来探索这一假设。朗讯的理念是通过为开发人员提供最合适的语言级抽象,为FPGA提供高程序员生产力和性能。Lucent的重点是非常支持HPC内核的加速,而不是嵌入式电子和电路级,我们通过示例简要概述了该语言的驱动。
2021-04-10 cs.PL
Type oriented parallel programming for Exascale
虽然近年来HPC硬件和软件有了很大的进步,但我们用来编程这些机器的语言和模型仍然更加静态。这并不是因为缺乏努力,而是因为许多程序设计语言构建的基础不足以满足并行工作所需的表达能力。其结果是可编程性和性能之间的隐含权衡,由于许多科学用户是自己领域的专家,而不是HPC专家,这使得情况变得更糟。面向类型的编程通过类型系统编码语言的复杂性来解决这个问题。大多数语言功能都包含在一个松散耦合的类型库中,可以灵活地用于控制许多方面,如并行性。由于这种方法的高级性质,在编译过程中有很多信息可用于优化,并且在没有类型信息的情况下,编译器可以应用合理的默认选项,从而支持专家程序员和新手。我们证明,在没有性能或可扩展性的损失时,运行在高达8196个核心的Cray XE6系统,在这种类型的面向方式编写的代码提供了改进的可编程性。程序员能够在高级别上编写简单的隐式并行HPC代码,然后在需要时通过添加其他类型信息来显式调优。
2016-10-27 cs.DC cs.PL
Asynchronous Execution of Python Code on Task Based Runtime Systems
尽管在并行和分布式计算的领域中取得了进步,但是在高性能计算(HPC)资源上编程的复杂性已经阻止了许多领域专家,特别是在机器学习和人工智能(AI)领域中的专家,利用这样的系统的性能益处。研究人员和科学家倾向于使用高生产力语言,以避免使用低级语言编程的不便,以及获得该级别编程所需的必要技能的成本。近年来,Python在NumPy等线性代数库的支持下,尽管面临着阻止这些代码分布式运行的限制,但仍然受到了欢迎。在这里,我们提出了一个解决方案,既保持高层次的编程抽象,以及并行和分布式的效率。Phylanx是一个异步数组处理工具包,它通过将Python和NumPy函数和变量映射到由HPX执行的依赖关系树中,将Python和NumPy操作转换为可以在HPC资源上并行执行的代码,HPX是一个通用的,并行的,基于任务的运行时系统,用C++编写。Phylanx还为调试和性能分析提供了内省和可视化功能。我们通过将广泛使用的机器学习算法的实现与公认的NumPy标准进行比较,测试了我们方法的基础。
2018-10-22 cs.PL
Are Programming Paradigms Paradigms? A Critical Examination of Floyd's Appropriation of Kuhn's Philosophy
本文批判性考察了弗洛伊德借用库恩“范式”概念提出“编程范式”的过程,指出其含义已发生根本偏离,并呼吁重新审视该术语在计算领域的使用。
2025-05-03 cs.PL
Context-Oriented Programming: A Programming Paradigm for Autonomic Systems
动态软件适应性是自主计算所利用的核心特性之一。然而,开发在运行时间改变其行为以适应操作条件的软件是一项具有挑战性的任务。在文献中已经提出了几种方法来解决这个问题,在不同的和互补的抽象层次:软件体系结构,中间件和编程水平。我们专注于ad-hoc程序设计语言结构可能提供的支持,以支持动态自适应行为。我们介绍了面向上下文的程序设计语言,我们提出了一个框架,该框架的位置在MAPE-K自主循环支持的范例。我们讨论了使用面向上下文的程序设计语言,而不是其他主流方法的基础上,面向动态方面的程序设计语言的优势,并提出了一个案例研究,显示如何提出的编程风格自然适合动态适应的要求。最后,我们讨论了一些已知的问题,并概述了一些开放的研究挑战。
2012-03-30 cs.PL
Many Cores, Many Models: GPU Programming Model vs. Vendor Compatibility Overview
针对当前HPC领域多厂商GPU、多编程模型并存且支持情况复杂的问题,本文梳理了三大厂商GPU与各编程模型的适配关系,以表格和注释呈现并评估支持程度,为科研程序员提供参考指南。
2023-10-04 cs.DC cs.PL
Coordination Level Modeling and Analysis of Parallel Programs using Petri Nets
在过去的十五年中,高性能计算(HPC)社区已经要求并行编程环境,其调和分布式存储器并行计算平台的通用性、更高抽象级别、可移植性和效率。哈希组件模型似乎是解决HPC社区要求满足这些要求的替代方案。本文提出的基础,将使一个基于哈希模型的并行程序设计环境,以解决问题的“调试”,性能评估和验证的形式属性的并行程序通过一个强大的,简单的,广泛采用的形式主义:Petri网。
2012-08-19 cs.DC cs.PL cs.SE
Pourquoi existe-t-il de nombreux paradigmes de programmation ?
针对图灵完备语言等价却存在多种编程范式的现象,本文通过先定义编程范式,再分析不同范式对不同应用场景(如学习、问题解决)的适配性,解释了多种编程范式存在的原因。
2024-11-29 cs.PL
The Logic Programming Paradigm and Prolog
这是一个关于逻辑编程和Prolog的教程,适合于熟悉命令式编程的学生的程序设计语言课程。
2001-07-12 cs.AI cs.PL
Fixed-Point-Oriented Programming: A Concise and Elegant Paradigm
针对自引用计算类问题传统实现复杂易错、现有范式缺乏直接支持的问题,提出面向不动点的编程FPOP范式,通过高层抽象、结构化推理规则与用户引导优化实现声明式高效编程,大幅简化代码并推动该领域研究应用。
2025-07-29 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
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
Reasoning About a Service-oriented Programming Paradigm
本文介绍了一种新的分布式应用程序开发方法:面向服务的方法。这是一个概念文件的基础上,我们的经验,在开发一个理论和编程服务的语言。理论形式化和语言解释器都向我们展示了一种新的编程范式存在的证据。在本文中,我们说明了它的基本特征。
2009-06-22 cs.DC cs.PL
mdspan in C++: A Case Study in the Integration of Performance Portable Features into International Language Standards
多维数组在高性能计算(HPC)中无处不在,但它们在C++语言标准中的缺失是其用于HPC的长期和众所周知的限制。本文描述了mdspan的设计和实现,mdspan是一个建议的C++标准多维数组视图(计划包含在C++23中)。该提案在很大程度上受到Kokkos项目中所做工作的启发,Kokkos项目是许多HPC机构部署的C++性能可移植编程模型,用于为exascale级超级计算系统准备代码库。本文描述了mdspan的最终设计,经过五年的过程,在C++社区达成共识。特别是,我们将阐述该设计如何解决性能可移植编程的一些核心挑战,以及其定制点如何允许无缝扩展到目前C++标准未解决的领域,但在当今系统的异构计算世界中至关重要。最后,我们提供了当前形式的提案的生产质量实现。这项工作包括几个基准,旨在展示现代设计的零开销性质的实现。
2020-10-13 cs.DC cs.PL
QuECT: A New Quantum Programming Paradigm
量子计算构成了计算机科学的一个迅速扩展的子领域。有效的量子编程语言的可用性促进了量子算法的开发,文献中已经提出了大量的方法,从基于GUI的简单工具到精心设计的独立编程语言。在本文中,我们提出了一种新的范例称为量子嵌入电路技术(QuECT),允许程序员嵌入一个电路图在一个经典的“主机”语言。该范式可以在任何现代古典语言中实现。作者使用Java开发了一个原型。
2011-04-04 cs.PL quant-ph
An Integrated Development Environment for Declarative Multi-Paradigm Programming
在本文中,我们提出了CIDER(咖喱集成开发环境),一个分析和编程环境的声明性多范式语言咖喱。CIDER是一个图形环境,通过提供程序分析和可视化的集成工具来支持Curry程序的开发。CIDER完全在Curry中实现,使用GUI编程(基于Tcl/Tk)和元编程库。我们的环境的一个重要方面是开发环境对其他声明性源语言(例如,Prolog或Haskell)和扩展性w.r.t.新的分析方法。为了支持后一个特性,底层实现语言Curry的惰性求值策略变得非常有用。
2001-11-19 cs.PL cs.SE
Next-Paradigm Programming Languages: What Will They Look Like and What Changes Will They Bring?
程序设计语言设计的梦想是在软件开发任务中带来数量级的生产力改进。设计师可以无休止地争论如何实现这个梦想,以及我们离实现这个梦想有多近。相反,我想关注一个问题,这个问题的答案可能会令人惊讶地更清晰:下一个范式、高生产力程序设计语言背后的共同原则是什么?它们将如何改变日常程序开发?根据我十多年的声明性语言繁重开发经验,我推测高生产力语言的某些原则是不可避免的。这些包括,例如,性能上的巨大变化(包括改变算法渐近复杂性的自动转换);程序员工作流程的根本变化,将测试从一个近乎卑微的任务提升到深入理解的行为;对形式证明的需求的变化;等等。
2019-05-01 cs.PL cs.SE
Towards Comparing Programming Paradigms
University of Applied Sciences Burgenland(布尔根兰应用科学大学);University of Vienna(维也纳大学)
计算机科学的快速技术进步找到了解决方案,同时也创造了越来越复杂的要求。由于不断发展的复杂性,当今的程序设计语言提供了强大的框架,这些框架为重复性任务提供了标准解决方案,以帮助程序员并避免重新发明具有所谓开箱即用功能的轮子。在本文中,我们提出了一种方法,比较不同的编程范式的理论,技术和实践水平。此外,本文提出了两个有代表性的编程方法,无论是在封闭的SAP环境的初步比较的结果。
2019-05-15 cs.CL cs.HC cs.PL
CodeRosetta: Pushing the Boundaries of Unsupervised Code Translation for Parallel Programming
Cisco Outshift(思科Outshift);Google DeepMind(谷歌DeepMind);Iowa State University(爱荷华州立大学)
本文提出 CodeRosetta 编码器-解码器模型,利用定制预训练与训练目标实现编程语言及其 HPC 扩展的双向无监督翻译,在 C++-CUDA 和 Fortran-并行 C++ 任务上显著优于现有 LLM。
2024-10-27 cs.AI cs.DC cs.LG
Functional Programming Paradigm of Python for Scientific Computation Pipeline Integration
Shenzhen United Imaging Research Institute of Innovative Medical Equipment(深圳联合创新医疗设备研究院);United Imaging Healthcare Inc.(联影医疗);Institute for Medical Imaging Technology, Shanghai Jiao Tong University School of Medicine, United Imaging Healthcare(上海交通大学医学院医学影像技术研究所、联影医疗)
本文提出了一种基于Python架构的函数式编程范式,旨在通过统一的数据控制系统集成不同的数据映射操作库与科学计算流,以加速原型验证、优化算法性能并降低维护成本。
2024-06-03 cs.AI cs.CE cs.LG