Mathematica 软件引擎

Mathematica 是当今最复杂的软件系统之一. 它由数百万行 C/C++、Java 和 Mathematica 源代码写成.

Mathematica 中的 C 代码实际上是用支持一定的内存管理和面向对象特征的扩展 C 语言写成的. Mathematica 代码使用 ShareDumpSave 进行了优化.

Mathematica 内核中,不同部分的代码构成大致如下:语言和系统占 30%;数值计算占 20%;代数计算占 20%;图形与内核输出占 30%.

大多数代码是相当密集的和系统化的:实际上是简单过程或表的那些部分使用最少的代码,这是因为这些代码趋向于在较高的层次上编写——常常直接以 Mathematica 语言编写.

内核中的源代码,对于运行 Mathematica 的所有计算机系统是完全相同的.

然而,对于前端,需要大量专门化的代码来支持不同类型的用户界面环境. 前端包含大约 700,000 行独立于系统的 C++ 源代码,其中大约 200,000 行涉及表达式的格式构造. 这里有 50,000 到 100,000 行的特殊代码,这些代码专门处理每个不同的用户界面环境.

Mathematica 使用客户——服务器计算模型. 前端和内核通过 MathLink 来连接——使用同样的系统与其它程序通讯. MathLink 支持多个传输层,包含基于 TCP/IP 的和使用共享内存的.

前端与内核使用三个独立的 MathLink 链接来连接. 一个是用于用户提交的计算. 第二个是用于前端求解 Dynamic 表达式的值. 三是用于内核,以通知前端应该使哪个 Dynamic 对象失效.

Mathematica 内核的 C 代码部分,主要通过交换完整的 Mathematica 表达式实现不同部分之间的通信,以此来获得模块性和一致性.

但是应当注意,即使系统的不同部分在源代码层次是相当独立的,它也有许多算法的相互依赖性. 例如,我们可以常常看到使用了大量代数算法的数值函数,或者使用嵌入在不同 Mathematica 函数中的高级数学算法的图形代码.

自从1986年 Mathematica 开始发展以来,平均每年有1千开发人员从事 Mathematica 源代码的创建. 此外,与代码创建相当的精力或者更多的精力用在代码的测试和验证上.

自从第1版发行以来,Mathematica 的源代码已经有了很大改变. 在内核中的代码总行数从第1版的 150,000 行,到第2版的 350,000 行,又到第3版的 600,000 行,第4版的 800,000 行,第5版的一千五百万行,到第6版的两千五百万行. 此外,在每个阶段,现有代码都被修改了——因此,在第6版中,仅有很少的一部分代码与第1版中的代码是相同的.

然而,尽管在内部代码中有这些变化,Mathematica 用户层次的设计一直保持与第1版的兼容性. 到目前为止,添加了许多新功能,但 Mathematica 第1版中创建的程序无需任何改变,绝对能在第 6 版中运行.

New to Mathematica? Find your learning path »
Have a question? Ask support »