首页 > 教程 > 正文

阅读排行

FAQ之 基本概念
2014-01-25 15:44:50   来源:Fcode研讨团队   评论:0 点击:

本文介绍了与Fortran相关的基本编程概念,让新手对计算机,编程,Fortran,编译器等有基本概念,强烈推荐新手阅读

如果你打算开始学 Fortran,或者认为自己很多概念还比较模糊,那么我们建议你阅读这篇文章。

第一,Fortran 是什么?编译器又是什么?

Fortran 是一门编程语言,特长是科学计算,相信你已经了解了。
很多初学者弄不清楚它和编译器有什么差别。于是,就出现了很多不严谨的说法,比如:

Fortran在哪儿下载?Fortran能不能支持Win7,64位?Fortran如何打开?Fortran如何执行程序?

实际上,Fortran 与编译器是两个不同的概念。需要分清它们。

Fortran 是一种语言,是人与人,人与计算机之间的一种约定,是一种抽象的思维方式。它的概念与中文,英文等是类似的。因此,你不能下载英文,安装英文,英文也无所谓支持什么操作系统,如何打开什么的。

国际标准化组织制定了 Fortran 语法标准,并且有 FORTRAN66,FORTRAN77,Fortran90,Fortran95,Fortran2003,Fortran2008 等不同的语法标准规范。这些语法规范都只存在于约定上,并没有具体的产品,你可以下载到关于这些语法规范的文档,但没有可供你安装使用的产品。
Fortran 语法属于全人类,不属于任何一家公司。

我们都知道,要让计算机做事情,英语和中文是不能直接被计算机接受的。必须使用计算机能识别的指令,例如二进制的计算机指令,而学习和使用这样的指令非常的繁琐。于是,人们才制定了高级语言。Fortran 是高级语言的一种。

那么,高级语言如何让计算机接受呢?这就需要借助编译器产品。编译器的作用,就是让人类方便接受的高级语言代码,转变为计算机能够识别的指令

编译器的概念就由此得出了,Fortran编译器,是一种程序,这种程序可以帮助我们把 Fortran 代码,转换为计算机能够识别的可执行代码(exe或其他)。所以,编译器,才是软件,才能够被下载,被购买,被激活,被打开并操作。我们把 Fortran源代码交给编译器,编译器把相应的可执行代码输出出来,执行后得到结果。
编译器的概念,与英语词典软件是类似的。他是属于开发公司。

我们都知道,英语有英式美式的差别,Fortran 与之对应,有 FORTRAN77,Fortran90,95 等等差别。
而英语词典软件,有不同的品牌,比如金山词霸,有道词典,灵格斯词典等等。Fortran 编译器与之对应,有 Intel Fortran,Compaq Fortran,Lahey,PGI,NAG 等等不同的品牌。有若干厂商和组织都开发了符合 Fortran语法规范的编译器产品。(绝大多数编译器产品都是同时兼容FORTRAN77,Fortran90和95语法的

我们总结一下这些概念,如表:
英语 C Fortran 备注
英式英语,美式英语 C/C++ FORTRAN77,Fortran90/95/2003/2008 属于全人类
金山词霸,有道词典,灵格斯词典 VC++,
Borland C++ Builder,
DevC++
Intel Fortran,Compaq Fortran,Lahey 等等 属于开发公司
金山词霸2008,灵格斯词典v3.0 VC++ 6.0,9.0 Intel Fortran XE 2013 , Compaq Fortran 6.6 某版本

上面的表格只是为了示意,有些概念不完全相通。另外,有一些编程语言也隶属于某个公司,例如微软拥有C#,而 Java 属于 Sun。这些情况与 Fortran 不完全相同。

第二,我该选择怎样的编译器?编译器与编辑器是什么关系?IDE 是什么?

由第一个问题,我们知道,Fortran 的编译器产品有很多种,很多厂商和个人都开发了 Fortran 编译器。那么,在这些编译器之中,我们该如何选择呢?哪个编译器更好?

这没有绝对的答案,而应该根据自己的用途和习惯来选择。以下是我们对新手的一些建议,仅供您参考:
\

本站另有文章对各平台主流编译器进行更专业和全面的对比。可参考:http://fcode.cn/content-6-28-1.html

需要注意的是,我国流传较多的 Compaq Visual Fortran 和 PowerStation 这些编译器,不能在 win7 下使用。这一点经官方承认,我们建议你换用其他编译器产品。
(是的,我们知道,在其他网站,比如百度文库,微博,博客上,你可能会看到关于如何在win7下使用CVF的文章和教程,经过验证,他们都不能完美解决兼容性问题,尤其针对较大的工程类型。所以,换用新的编译器或许更理智。)

在 windows 平台上,大多数编译器产品会包括但不限于以下组成部分(或其中几部分):




编译器(核心) 用于把Fortran源代码文件变为目标代码
链接器(核心) 用于把一个或多个目标代码,变为可执行文件(exe或其他)
调试器 用于动态调试代码中的错误
编辑器 用于书写Fortran代码,很多产品会有语法高亮,折叠,自动完成等功能。(请注意它与编译器仅一字之差)
函数库 用于让用户直接使用某些数学功能,绘图功能,或其他功能。
集成开发环境(IDE) 让上述的各项组成部分在一个环境下供用户操作。

而在 Linux 平台下,大多数编译器则不包含编辑器和集成开发环境(IDE)。这是因为,Linux 软件的开放性,使得众多软件之间配合工作更默契。在 Linux 上,可以轻易的找到通用的代码编辑器和集成开发环境。例如 Code::Block 等。

IDE 是一个为广大程序员提供便利的东西,但实际上,它也让很多初学者缺少了理解很多重要概念的机会。我们建议你在使用IDE环境的同时,也体验一下原始的命令行编译方式。后者可以让你很容易理解更多编程中的实质性东西。

第三,使用IDE,还是使用命令行?

不管使用何种方式,操作系统实质都是使用命令行进行编译的。只不过IDE方式,将很多问题都一键完成了,以致于我们可能会忽略后台做的事情。

以下,是在 windows 上使用 Intel Fortran 命令行编译的最简单的例子(红色框为输入命令):

\

由此,我们可以看到,执行一个程序的基本的两个步骤。

第一,编译。执行语句为 ifort -c fcode.f90
这个语句告诉 ifort 编译器,把 fcode.f90 这个源代码文件转变为目标代码 fcode.obj 。这是编译器的核心。
第二,链接。执行语句为 link /subsystem:console fcode.obj
这个语句告诉 intel 链接器,把 fcode.f90 得到的目标代码 fcode.obj 转换为可执行文件 fcode.exe。
/subsystem:console 告诉链接器,我们需要链接一个 console 类型的可执行文件。( 这个概念第5个问题后面会提到)

实际上,link 链接器是微软的产品。只有 ifort 编译器才是 intel 的产品。

上面是一个基本的程序执行过程。真实的情况要复杂一些。如下图:

\
(注:具体编译环境,具体的文件名可能不同。例如Linux下的obj文件通常以 .o 为扩展名)

整个过程可能有三个步骤。预编译,编译,链接。(初学者可以先不管什么是预编译)

我们可以看到,链接过程把多个 obj 文件链接在一起,加上一些函数库和运行时库,共同构成了可执行文件。尤其是针对一些代码较多的应用。单个源代码文件书写起来太长,阅读和修改都很费力。

在命令行下,每一个 obj 文件的生成,一般都需要调用一次编译器(代表上图红色箭头)。最后调用一次 link 链接器。

而在 IDE 环境下,只要把所有的源代码文件添加进去,按下一个 Build 按钮,IDE 就会自动为源代码文件分别执行编译,最后执行链接。整个过程用户只需按下一个按钮。
\
看起来,IDE 似乎很酷。实际应用中,他也很方便。但是IDE存在一些弊端:
1.大多数IDE是收费的。
2.大多数IDE不具有通用性,跨平台后需要对工程进行大量的改造。

而命令行编译,则有很多规范的工程管理手段,例如使用 make 文件。可以简化上述复杂过程的重复过程。并且 make 文件具有良好的可阅读性,跨平台几乎不需要修改。当然,你可能需要针对 make 文件的写法进行一些必要的学习。

综合来说,我们建议初学者使用 IDE 编译。便于快速上手。同时,体验一下命令行编译。在熟悉一段时间后,可根据自己的情况来选择编译方式,而对于已经熟悉的朋友,我们建议使用 make 文件进行项目管理。

第四,固定格式?自由格式?FORTRAN77,Fortran90 ?

如果你已经在阅读一些文献或书籍了,那么肯定会知道。Fortran 代码有自由格式和固定格式两种。

他们是 Fortran 代码的两种书写格式。 一般约定,扩展名为 *.for *.f  的源代码,视为固定格式。而扩展名为 *.f90 的源代码,视为自由格式。

关于这两种格式的具体书写方式,请参考教科书。

这里需要说明的一点,就是很多人误以为 *.f90 扩展名的就是 Fortran90 代码。而 *.for 或 *.f 扩展名的,就是 FORTRAN77 代码。这是不正确的理解。

Fortran90 语法允许程序员使用固定格式和自由格式。所以,*.for 和 *.f 的固定格式,也可以使用 Fortran90 的语法规范。反过来,*.f90 的自由格式,可以使用 Fortran90 或 95 或 2003、2008 语法,也可以使用陈旧的 FORTRAN77 语法。

实际上,Fortran90 与 FORTRAN77 并不是完全不同的两个东西,他们有很大程度的交集。一段代码,很难区分是严格的 Fortran90 ,还是严格的 FORTRAN77。大多数情况下,是混合着的。95/2003/2008 与他们之间的关系也是如此。

综合来说,我们建议你使用 Fortran90 及以上的语法规范来书写自由格式的代码,同时,保证自己具有 FORTRAN77 代码和固定格式代码的阅读能力

第五,Console 还是 GUI?

可能很多朋友对 Console 这个词语还不熟悉,但是你应该见过 windows 下黑黑的那个类似于 DOS 的界面。Console 与 DOS 并不是同一个东西,只是它们使用了很相似的命令拼写而已。

DOS 是一个古老的文件操作系统,在 windows98 以后,他就被彻底的抛弃了。现在 windows 里的命令行界面,称为 Console,它保留了部分 DOS 系统的命令拼写方法,但实质已经完全不同。

大多数程序员刚开始都是接触 Console 类型的程序,在一个黑色的界面下输入输出,控制整个程序的运行。它们区别于有界面的那些 GUI (图形用户界面)程序。我们熟悉的 QQ,迅雷这些商业软件都是 GUI 程序。WinRAR 也是 GUI 程序。

很多初学者看到自己还在用简陋的 console 程序,而其他程序员已经写出了华丽的界面,漂亮的绘图,于是感到很自卑,甚至抛弃手边所学而去学习如何弄出漂亮的界面。这样不是说不好,而是学习不应该浮躁。Console 界面虽然看起来简陋,但正是如此,才让我们把更多的精力用在算法,数据结构和运算上。

另外,请不要忽视了 Console 程序的地位。我们使用的编译器自身,绝大多数都是 Console 程序; WinRAR 的内核:rar.exe 也是 Console 程序。Console 程序大多数来说,是内涵型的。他们没有华丽的外表,却往往在后台默默的工作,不为人知。

作为学习程序设计来说,我们应当首先对语法规范有足够的了解,对数据结构的理解,对算法的理解,对逻辑层次的理解,这些都是非常重要的。等你熟悉了算法,数据结构,编程思想之后,再去学习附带的扩展的界面化的功能,就会十分的轻松了。

第六,应该用什么 Fortran 教材?

我们建议新手阅读彭国伦书写的《Fortran95程序设计》,而后可阅读 Stephen J.Chapman 写的几本书,大多数有中文译本。focde.cn 网站包含他们的部分电子版本,请尽量购买纸质印刷版。

我们不建议你阅读谭浩强的教材,另外,但凡以 FORTRAN77 为主要内容的教材,代码中大量的大写字符,大量的 GOTO 和语句标号的读物,都不应该主要阅读。

相关热词搜索:Fortran FAQ 基本概念

上一篇:Intel 及 Compaq 编译器简单操作与调试
下一篇:FAQ之 Intel Fortran + VS 安装配置

分享到: 收藏