化学信息学和计算化学中的C 编程语言外文翻译资料

 2022-08-10 19:51:13

英语原文共 16 页,剩余内容已隐藏,支付完成后下载完整资料


化学信息学和计算化学中的C 编程语言

摘要

本文介绍了C 编程语言及其编程生态系统的显着特征,重点介绍了该语言如何影响科学软件开发。提供了C 及其前身C语言​​的简要历史。在定义编程模型的语言的最重要方面将进行更详细的描述,并通过代码示例进行说明。特别注意C 与其他常用于化学信息学,机器学习,数据处理和统计计算的高级语言之间的互操作性。

关键词:编程语言,C,C ,计算科学,计算化学,化学信息学

引言

近年来,已经开发了在许多高级领域特定和通用的编程语言,极大地提高了程序员在各种软件项目工程中的生产率。直到1980年代中期以前,科学编程一直由Fortran主导,如今,它拥有一系列健全的工具,语言和库,可以很好地解决计算机科学家和科学软件开发人员在日常工作中遇到的各种问题。例如,MATLAB被广泛用于数值计算,R语言在统计计算和数据可视化中占主导地位,Python是从机器学习和自然语言处理到典型的化学信息学任务(例如化学结构搜索和检索)的广泛科学应用的绝佳选择,还有虚拟化合物筛选和分子特性预测,仅举几例。但是,在现代高级编程语言中,C 扮演着主导现代科学软件开发的角色,尽管第一眼看来,这可能并不那么明显。在本文中,我们将简要介绍C 的历史,并着重介绍使其变得如此特别的主要特征。

C语言和C 的简要历史

C 的前身C语言是1970年代初期由Dennis M. Ritchie开发的,当时Denis M. Ritchie是Bell Labs(AT&T)的雇员,他和他的同事正在研究Unix,这是一种用于大型机的多用户分时操作系统。如今这种普遍的操作系统的早期版本是用特定于体系结构的非便携式汇编语言编写的。随着Unix的进一步扩展和普及,开发人员意识到有必要使用与平台无关的高级编程语言来重写它的某些部分,以使代码库更易于管理并易于移植到不同的计算机体系结构中。在那时,Fortran是最常用的高级语言之一。作为数值计算的首选语言,大约1979年代初的Fortran由于其冗长的流控制结构和缺少直接的内存访问操作而不适用于低级编程,同时,Fortran也不太适合非数字计算,通常涉及定义复杂的数据结构和对其进行操作,而专为符号计算和列表处理而设计的语言,例如Lisp(仅次于Fortran的第二古老的高级计算机语言)很难掌握,而且通常需要专用且非常昂贵的硬件才能获得可接受的性能[1]。值得注意的是,第一个非常大而复杂的化学信息学软件包之一是一种交互式计算机程序,旨在帮助计划复杂有机分子的合成,称为LHASA(应用于合成分析的逻辑和启发式方法),主要用Fortran编写,包含近30000个的非常复杂的Fortran代码行[2,3]。

为进一步发展,Unix的更好选择是编程语言B,它是Ken Thompson于1960年代从BCPL派生的,用于编码与机器无关的应用程序,例如操作系统和其他语言的编译器。B语言被视为C的直接前身。与Fortran相比,B语言更适合于操作系统开发,因为它提供了可以有效映射到典型机器的结构,具有清晰简洁的语法并支持有效的直接内存访问操作。B语言的主要缺点是缺乏对数据类型的支持。实际上,它仅支持一种类型,与体系结构相关的计算机字被视为整数。因此,在B语言中,对除机器字以外的数据类型(例如,单字节字符或由字段组成的结构)很难以可移植的方式实现。缺点也使得B完全不适合用作通用编程语言。在70年代初,Dennis M. Ritchie逐渐向B添加了对原始(整数和浮点数以及字符)和复杂(用户定义的结构)数据类型的支持,并清理了其语法。最终,经过改进的B与原始B的区别很大,以至于它变成了另一种语言,在英语字母的下一个字母之后被半开玩笑地称为C。1978年,由Brian Kernighan和Dennis Ritchie撰写的著名的“The C Programming Language”一书的第一版出版了[4]。在作者笔下,本书中描述的C语言版本通常称为K&RC。C语言在操作系统和设备驱动程序开发人员中迅速流行。随后,大多数Unix组件都用C重写。由于相对简单,可移植性和效率高,C的普及很快超出了其最初的操作系统开发目标,并且成为最常用的通用组件之一应用于编程语言,适用于从设备驱动程序,微控制器和操作系统到视频游戏和高性能数据分析包的一系列应用。

1983年,由美国国家标准协会(ANSI)组成的委员会开发基于K&R C的C语言的标准版本。ANSI在1989年发布了该标准定义,通常称为“ ANSI C”。随后,ANSI X3.159-1989 C标准进行了几次修订,其中最新的(非正式名称为C18)是ISO / IEC 9899:2018 [ 5 ]。

1970年,面向对象编程(OOP)范式迅速流行。Simula 67是第一种支持OOP的编程语言,主要用于离散事件仿真,过程建模,大规模集成电路仿真,电信协议分析和其他特殊应用。1979年,Bjarne Stroustrup攻读博士学位。英国剑桥大学计算机科学系的一名研究人员使用Simula 67进行研究计算,并发现OOP范例非常有效率,但是所有现有的实现方式均效率低下。那时,C已经成为最常用的通用编程语言之一,因此Stroustrup有了将OOP功能添加到C的绝妙主意,并开始从事“ C with Classes”(K&R C的超集)的工作[6]。带有类的C的早期实现是将“带有类的C”代码转换为标准K&R C的转换器,该代码可以由任何可用的C编译器进行编译。通过添加其他重要功能,包括改进的类型检查,运算符重载和虚拟功能,对“带有类的C”进行了扩展。1983年,Stroustrup将“带有类的C”重命名为C 。C语言中的 运算符是用于递增变量的运算符,这反映了Stroustrup的C 概念是下一代C语言。1986年,Stroustrup出版了他的著名著作《 C 编程语言》 [7],成为事实上的语言参考手册。很快,C 开始在开发人员社区中广泛普及,并且几乎所有主要计算机平台和操作系统都可以使用几种高质量的C 编译器和库。

可能最重要的C 版本是1989年的C 2.0,该文档记录在Ellis和Stroustrup的“带注释的C 参考手册”中 [8]。C 2.0是一种成熟的面向对象语言,支持多种继承,抽象类,静态成员函数,常量成员函数和受保护的类成员,用于通用编程的模板,用于结构化错误处理的异常,名称空间和布尔类型。

下一个重要版本出现在2011年,当时C 11标准发布。C 11增强了几个影响运行时性能的功能,其中最重要的是“移动构造函数”,它消除了早期C 的祸害,即当将大型对象按值传递给函数或从函数返回时,它们的复制成本高昂且不需要。C 11还包括许多重要功能,可用于产生更简洁,更易读的代码。其中最主要的是自动变量(在保留类型安全的同时消除了对详细变量声明的需求)和基于范围的“for”循环(允许使用几乎类似于Python的语法循环遍历容器的元素)。

在长时间延迟到达C 11之后,C 标准委员会每三年更新一次C 标准。2014年,发布了C 14标准,随后在2017年发布了C 17,在撰写本文时,这是针对C 编程语言的ISO/IEC 14882:2017标准的最新版本[9]。下一个标准版本计划在2020年发布。该语言正在迅速发展,以提高代码的可读性和表达能力。例如,在C 11中引入并在C 14中增强了带闭包的lambda表达式[10],显然是受Haskel和F#之类的功能编程语言启发的,它使得将类似于函数的对象传递给诸如排序,搜索和过滤之类的通用方法成为可能,这在不牺牲性能的情况下大大缩短了使用这些方法的代码。最新版本的C 通过提供创建和管理与其他此类序列同时执行的指令序列(通常称为“线程”)并在不同对象之间同步内存访问的功能,使利用现代多核计算机体系结构的可移植代码更容易编写。线程并行运行。

截至2019年,C和C 仍然是非常流行的编程语言,可用于广泛的应用程序[11]。在包括化学信息学和计算化学在内的科学程序设计中,近年来,诸如Python(通用)或R(统计应用,预测建模和机器学习)之类的脚本语言正迅速普及。但是,正如下面将要进一步讨论的那样,当使用Python或R从数字,机器学习,统计,化学信息学,分子力学和其他用C或C 编写的特殊组件中组装计算工作流时,这是一个非常常见的情况。

C 程序员享受着巨大的开发工具生态系统。免费和商用的编译器,调试器和集成开发环境都可轻松用于所有现代计算机平台。两种主要的开源C 编译器GCC [12]和Clang [13] 之间的竞争导致了所产生的目标代码质量的飞速进步,并且重要的是,在出现错误、警告和诊断消息的情况下,提供给程序员的反馈也非常有用。GCC和Clang在Linux和MacOS计算机上均可轻松获得。默认情况下,Microsoft Windows不附带C 编译器,但可以直接从Microsoft [14] 轻松下载Microsoft Visual Studio集成开发环境,其中包括C 编译器,运行时库和工具。各种供应商也提供生成针对特定硬件的非常有效代码的编译器。例如,英特尔C和C 编译器针对支持英特尔架构的处理器进行了高度优化[15]。复杂的集成开发环境,为内置C/C 代码编辑器提供语法高亮显示,上下文相关帮助,强大的调试,概要分析和重构工具,可视化界面设计器以及各种功能,这些功能可促进大型开发人员团队在大型软件上一起工作商业项目(如Microsoft的Microsoft Visual Studio[14]和Visual Studio Code[16]或JetBrains的CLion[17])和开源项目(如广泛使用的Eclipse CDT [18])。C和C 代码库可用于所有可能的编程任务,从底层硬件控制到机器学习和自然语言处理。

C :基本语言特征

让我们首先讨论C 的基本功能,它是从C继承的,并且与诸如面向对象或通用编程的高级概念无关。应该注意的是,现代C并不是现代C 的真正子集,在没有进行任何小修改的情况下,现代C 编译器不会编译大多数用C语言编写的有意义的程序。但是,出于本文的目的,我们可以将现代C 视为“具有更好的类型安全性并且没有一些相对很少使用的功能的经典C”的扩展。在本节中,为简洁起见,C 的意思是“ C或C ”。

C 主要是一种编译语言

在执行之前,必须先“构建” C 的整个程序,也就是说,必须通过称为编译器的程序将其翻译为目标计算机的本机指令,并通过称为链接程序的程序将其与外部预编译的库链接起来。高质量的编译器执行广泛的本地和全局代码优化,并生成非常高效且紧凑的代码。编译的程序不需要任何其他运行时环境就可以在目标计算机上存在才能执行。将其与解释性语言(例如Python)或通常作为独立于平台的中间代码(如Java)编译并交付给用户的语言进行比较。Python代码需要Python解释程序才能运行,而编译成中间Java字节代码的程序需要Java运行时环境,以便在运行时将中间代码转换为主机指令。大型C 程序可能会花费大量时间进行编译,因为其源代码的每一行都必须由编译器处理,不管它是否在程序调用期间实际执行。这会减慢开发周期,但通常会导致代码更可靠,因为编译器可以在编译时捕获许多错误,从而避免了令人讨厌的“运行时错误”意外,这对于像Python这样的解释型语言来说很常见。编译语言的另一个缺点是,编译器从源代码生成的可执行文件不是可移植的,它们只能在为其编译的目标平台(即硬件加操作系统)上运行,或者是二进制文件兼容平台。在编写C 代码,指定编译器选项以及选择要链接的代码库以满足特定的二进制兼容性要求时,必须格外小心(例如,有关二进制兼容性

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[237929],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。