Skip to content

Latest commit

 

History

History
148 lines (103 loc) · 5.47 KB

afterword.rst

File metadata and controls

148 lines (103 loc) · 5.47 KB

后记

为什么选择Python?

Python的优点

虽然为了提高速度的那些代码必须使用编译语言实现, 但Sage的基本语言是Python(参见 [Py])。Python有几个优点:

  • Python对 保存对象 支持的很好。在Python中, 可以将几乎所有的对象保存到磁盘文件或数据库中。
  • 源码中函数和包有好的 文档 支持,包括自动提取文档和自动测试所有例子。 例子被自动测试以保证可以正确工作。
  • 内存管理: Python拥有良好的健壮的内存管理和回收机制, 可以正确处理循环引用,并且在文件中允许使用局部变量。
  • Python有 很多包 可能是Sage用户很感兴趣的:数值分析和线性代数, 二维和三维可视化,网络(用于分布式计算和服务器),数据库,等等。
  • 可移植性: 在很多平台上,Python可以很容易由源码编译。
  • 异常处理: Python有精心设计的高级异常处理系统, 当所调用的代码出错时也能恢复。
  • 调试: Python包括一个调试器,当代码由于某种原因失败时, 用户可以访问扩展堆栈,查看所有相关变量,以及上下移动堆栈。
  • 性能分析器: Python的性能分析器可以运行代码并建立详细的报告, 包括每个函数被调用了多少次,运行时间等。
  • 统一语言: 不象Magma, Maple, Mathematica, Matlab, GP/PARI, GAP, Macaular 2, Simath等软件那样,为数学又新建一种语言, 我们使用的Python语言是流行的计算机语言,由许多有经验的工程师开发和优化。 Python成熟的开发过程是开源软件成功的实例(参见 [PyDev]).

预处理器:Sage与Python的差别

Python的某些数学方面容易让人弄混,因此Sage在这些方面与Python不同。

  • 指数的记号: **^. Python中, ^ 是“xor”的意思, 不是指数,所以在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'
    
  • 整数除法: Python表达式 2/3 不会产生数学家期待的结果。 Python中,如果 mn 都是整数,那么 m/n 也是整数, 即 m 除以 n 的商。所以 2/3=0. Python社区中有一些关于修改Python的讨论,使得 2/3 的返回浮点数 0.6666..., 而 2//3 返回 0.

    我们在Sage解释器中处理这个问题,将字面的整数转为 Integer(), 并使除法作为有理数的构造器。如:

    sage: 2/3
    2/3
    sage: (2/3).parent()
    Rational Field
    sage: 2//3
    0
    sage: int(2)/int(3)
    0
    
  • 长整数: 除C的整型外,Python本身支持任意精度的整数。 这比GMP所提供的整型要慢的多,而且输出时末尾会有一个 L 以便与整型区分(这个性质短期内不会改变)。 Sage使用GMP的C语言库实现任意精度的整型,并且输出时没有 L.

我们不是去修改Python的解释器(有些人在内部项目中是这样做的), 我们用的就是Python语言本身,只是为IPython增加了一个预处理器, 使得命令行的工作方式与数学家的习惯一致。 这意味着已有的Python代码都可以用于Sage。 然而在编写一个要导入Sage的包时,还是要遵守标准Python的规则。

(要安装一个Python库,比如你从互联网上找的,跟着指南做就行, 只是要执行 sage -python 而不是 python. 多数情况下是输入 sage -python setup.py install.)

我想做点贡献。怎么做?

如果你愿意为Sage做点贡献,非常感谢!提交代码,添加文档,报告Bug, 都是欢迎的。

浏览Sage网站上关于开发人员的信息,除了别的信息, 你可以找到一个Sage相关项目的长长的列表,已根据类别和优先级排序。 “Sage编程指南”是有用的信息,同样,你也可以看看名为 sage-devel 的Google讨论组。

如何引用Sage?

如果你的论文中用到了Sage,请在使用Sage计算的结果处引用Sage, 参考文献中包含如下条目:

[SAGE], SAGE Mathematical Software, Version 2.6, http://www.sagemath.org

(将2.6替换为你所用的Sage版本)。并且要注意查看你的计算用到了Sage 的哪些模块,如,PARI? GAP? Singular? Maxima? 也要引用那些系统。 如果你对用到了哪些软件有疑问,可以在 sage-devel Google讨论组中提问。 关于这一点的更多讨论参见 :ref:`section-univariate`.


如果你直接读完该教程,并且对于它花了你多少时间有一些概念,请让我们知道, 可在 Sage-devel Google讨论组中发贴。

祝使用Sage愉快!

[Py]The Python language http://www.python.org/ , Reference Manual http://docs.python.org/ref/ref.html
[PyDev]Guido, Some Guys, and a Mailing List: How Python is Developed, http://www.python.org/dev/dev_intro.html.