C 语言
在欢迎你拥抱OpenFOAM之前,首先欢迎来到C++的世界!
若有程序员说
xxx语言是世界上最好的语言
不严重的情况是整个聊天群下午就会爆掉了,严重的是会引起人身攻击的。虽然PHP直接在官方文档里面说
PHP is the best language for web programming
但C++并没有说C++ is the best language for scientific computing。但在这里稍微引用一下OpenFOAM创始人Henry Weller对FORTRAN-77语言的评价,或许会有点意思:
在1984年本科之前,我最开始的时候从Basic语言学起,然后转移到Pascal和C。在我的论文里我使用FORTRAN-77,不得不说FORTRAN-77这玩意实在是完犊子!太差劲了!!C和Pascal比FORTRAN-77会好一点
如果决定好了用OpenFOAM,你必须站队C++。
C++在C语言的基础上,融合了3种不同的编程思想:C语言的过程性编程、C++的对象性编程、以及C++的泛型编程。初次接触C++的时候,会对面向过程以及面向对象不知所以。但等你阅读本教程之后回过头来重新思考会更加明朗。OpenFOAM之所以采用C++进行编写,最重要的原因在于C++的面向对象性编程思想。
然而,是否这意味着直接学习C++的面向对象性编程思想就可以了呢?未必。因为C++在某种程度上来说,是建立在C语言基础之上。在学习类之前,有必要学习C中的函数、指针、数组等基本内容。这也衍生了俩种不同的学习套路:一种是先学习C,再学习C++。一种是直接学习C++。在本科教学阶段,大部分非计算机的专业均讲授的是C,对于这部分人可能先学习C,再学C++更好。对于大部分C已经忘了差不多的,或者打算速成的,完全可以直接学习C++。本教程,不需要预备性的C语言基础,带领用户直接打开C++的大门。
对了,下面这个图送给你们做PHP的:
机器语言
计算机的大脑叫做CPU,用来执行计算操作。最白的小白会问
我用Photoshop磨皮也执行的是计算操作么?
答案是是的。简单来说,即使Photoshop的磨皮也是对图像的矩阵做特征值相关的数学运行后得到的美白效果。但如果用户让计算机做矩阵相加的操作,计算机是不明白的,因为计算机并不懂数学操作。即使你有麦克风,对计算机喊3+5,计算机同样不可能给你结果,因为它不懂人话。人类想让计算机做的任何事情,都需要翻译称为计算机可以理解的语言来进行。计算机唯一可以理解的东西是机器语言,是一系列的二进制数字。比如下面这一串数字:
1000100111011000
计算机将能够二进制数字转换为一系列的高低电平,并驱动内部的电子器件进行运算。网上的段子说,曾经一个无人知晓的程序员,可以直接用01写机器语言并进行运算。但这种晦涩难懂的一系列数字,大大增加了使用计算机进行运算人员的理解难度。就像你想从德国人那里赚钱,但需要先学一年德语,
are you kidding me?
汇编语言
在这个背景下,诞生了汇编语言。针对某个特定的CPU(如i7-5820k),汇编语言可直接操作硬件进行计算。但汇编语言并非机器语言,在这里,编译器的作用就是将汇编语言翻译为计算机可以理解的机器语言。汇编语言依旧过于抽象,并且针对特定的计算机型。将这套程序换到另一个机器上就不能运行。
20世纪70年代,贝尔实验室的Dennis Ritchie在开发UNIX操作系统的时候,开发了C语言。C语言具备汇编语言的高效性,具备硬件访问能力可直接操作硬件,并且具有通用性以及是可移植的。和汇编语言一样,C++语言写好后,需要编译器来对它进行编译,才能产生机器可以理解的机器语言,由此,计算机才能进行计算。比如下面就是C语言进行的5+3的代码:
int main()
{
int a = 3;
int b = 5;
int result = a + b;
return 0;
}
在这里用户不需要去理解int main
的含义(其实int
是返回类型,main
表示函数名),也会理解上面进行的是5+3的操作。相对汇编语言,C语言的可读性是无法逾越的进步。
还有,本教程中C++代码全部高亮显示。各种颜色,只是起着美观的作用。