Mathematica 软件引擎
Mathematica 是当今最复杂的软件系统之一. 它由数百万行 C/C++、Java 和
Mathematica 源代码写成.
Mathematica 中的 C 代码实际上是用支持一定的内存管理和面向对象特征的扩展 C 语言写成的.
Mathematica 代码使用
Share 和
DumpSave 进行了优化.
在
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 版中运行.