后记¶
为什么选择 Python?¶
Python 的优势¶
尽管必须快速执行的代码是用编译型语言实现的,但 Sage 的主要实现语言是 Python(见 [Py] )。 Python 具有以下几点优势:
对象保存 在 Python 中得到了很好的支持。Python 广泛支持将(几乎)任意对象保存到磁盘文件或数据库中。
源代码中对函数和包的 文档 支持非常好,包括自动提取文档和自动测试所有示例。 这些示例会定期自动测试,并保证如预期工作。
内存管理:Python 现有的内存管理器和垃圾收集器设计精巧且强大, 可以正确处理循环引用,并允许文件中的局部变量。
Python 拥有许多对 Sage 用户非常有用的 包:数值分析和线性代数,2D 和 3D 可视化, 网络(用于分布式计算和服务,例如通过 twisted),数据库支持等。
可移植性:Python 在大多数平台上,只需几分钟即可轻松从源代码编译 Python。
异常处理:Python 拥有复杂且精巧的异常处理系统,即使代码出现错误,程序也能优雅地恢复。
调试器:Python 包含调试器,因此当代码由于某种原因失败时, 用户可以访问详尽的堆栈跟踪,检查所有相关变量的状态,并上下移动堆栈。
性能分析器:Python 拥有性能分析器,它会运行代码并创建一份详细报告,说明每个函数被调用的次数和时间。
一门语言:不同于 Magma、Maple、Mathematica、Matlab、GP/PARI、GAP、Macaulay 2、Simath 等 那样为数学编写一门 新语言,我们使用 Python 语言,它是一种流行的计算机语言, 由数百名经验丰富的软件工程师积极开发和优化。Python 是一个重要的开源成功案例,拥有成熟的开发流程(见 [PyDev] )。
预解析器:Sage 与 Python 之间的区别¶
Python 的一些数学方面可能会令人困惑,因此 Sage 在多个方面的行为与 Python 不同。
指数运算符的表示法:
**vs^。在 Python 中,^表示“异或”,而不是指数运算。因此在 Python 中我们有:>>> 2^8 10 >>> 3^2 1 >>> 3**2 9
^的这种用法可能略显奇怪,并且对于纯数学研究来说效率不高,因为“异或”函数很少使用。 为了方便起见,Sage 在将所有命令行传递给 Python 之前都会进行预解析, 将不在字符串中的^替换为**:sage: 2^8 256 sage: 3^2 9 sage: "3^2" '3^2'
>>> from sage.all import * >>> Integer(2)**Integer(8) 256 >>> Integer(3)**Integer(2) 9 >>> "3^2" '3^2'
Sage 中的按位异或运算符是
^^。这也适用于就地运算符对于就地运算符^^=:sage: 3^^2 1 sage: a = 2 sage: a ^^= 8 sage: a 10
>>> from sage.all import * >>> Integer(3)^Integer(2) 1 >>> a = Integer(2) >>> a ^= Integer(8) >>> a 10
整数除法:Python 表达式
2/3并不像数学家们所预期的那样:2/3返回浮点数0.6666...。 请注意//是欧几里得除法,2//3返回0。我们在 Sage 解释器中通过将整型字面量包装在
Integer( )中,并使除法作为有理数的构造函数来处理这个问题。例如:sage: 2/3 2/3 sage: (2/3).parent() Rational Field sage: 2//3 0
>>> from sage.all import * >>> Integer(2)/Integer(3) 2/3 >>> (Integer(2)/Integer(3)).parent() Rational Field >>> Integer(2)//Integer(3) 0
长整数:Python 原生支持除 C int 类型外的任意精度整数。 这些原生整数的性能显著低于 GMP 所提供的。Sage 使用 GMP C 库来实现任意精度整数。
与某些人为了内部项目修改 Python 解释器不同,我们完全按照原样使用 Python 语言, 并为 IPython 编写预解析器,使 IPython 的命令行行为符合数学家的预期。 这意味着任何现有的 Python 代码都可以在 Sage 中使用。 然而,仍需遵守标准的 Python 规则,以便编写能够导入 Sage 的包。
(例如,要安装在互联网上找到的 Python 库,请按照说明进行操作,
但使用 sage -python 而不是 python。
通常这意味着输入 sage -python setup.py install。)
我想做出一些贡献。我应该怎么做?¶
如果你想为 Sage 做出贡献,我们会非常感谢你的帮助!贡献可以从实质性代码贡献到向 Sage 添加文档或报告错误。
浏览 Sage 网页以获取开发者信息。你还可以找到一份按优先级和类别排序的 Sage 相关项目列表。
Sage 开发者指南 也有一些有用的信息,
你还可以查看 sage-devel Google 讨论组。
如何引用 Sage?¶
如果你在论文中使用了 Sage,当引用使用 Sage 的计算时,包含以下内容: 如果你使用 Sage 撰写论文,请将以下内容添加到参考文献中来引用使用 Sage 完成的计算
[Sage] SageMath, the Sage Mathematics Software System (Version 8.7),
The Sage Developers, 2019, https://www.sagemath.org.
(将 8.7 替换为你使用的 Sage 版本)。此外,请尝试追踪在计算中使用了哪些 Sage 组件,
例如 PARI?, GAP?, Singular?, Maxima? 并引用这些系统。如果你不确定计算使用了哪个软件,
可以随时在 sage-devel Google 讨论组上提问。有关这一点的进一步讨论,请参阅 一元多项式。
如果你恰好刚刚读完这篇教程,并且知道花了多长时间,请在 sage-devel Google 讨论组上告诉我们。
祝使用 Sage 愉快!