Послесловие

Почему Python?

Приемущества Python

Основной язык имплементации Sage это Python (см. [Py]), однако код, который должен обрабатываться быстро, написан на компилируемом языке. У Python есть ряд приемуществ:

  • Сохранение объектов широко используется в Python. В Python присутствует поддержка сохранения (почти) любых объектов на диск или в базу данных.
  • Замечательная поддержка документации функций и пакетов в исходном коде, включая автоматический доступ к документации и автоматическое тестирование всех примеров. Примеры проверяются автоматически на регулярной основе и их правильная работоспособность гарантирована.
  • Управление памятью: Python имеет продуманный и стабильный менеджер памяти и сборщик мусора, которые исправно работают с циркулярными обращениями и позволяют использовать локальные переменные в файлах.
  • Python имеет множество пакетов, доступных уже сейчас, которые могут быть интересны пользователям Sage: численный анализ и линейная алгебра, 2D и 3D визуализация, сеть (для распределенных вычислений и серверов, например с помощью twisted), поддержка баз данных и т.д.
  • Портируемость: Python с легкостью компилируется на большинстве платформ в считанные минуты.
  • Работа с исключениями: Python содержит сложный и продуманный механизм работы с исключениями, благодаря чему программы продолжают работать даже при возникновении после в коде их вызова.
  • Отладчик: Python включает в себя отладчик, так что когда программа не работает по какой-то причине, пользователь может получить доступ к истории стека, проверить состояние необходимых переменных, перемещаться по стеку.
  • Профайлер Python запускает код и создает отчет по количеству вызовов и времени работы каждой функции.
  • Язык: Вместо того, чтобы писать новый язык для математики, как это было сделано для Magma, Maple, Mathematica, Matlab, GP/PARI, GAP, Macaulay 2, Simath, и т.д., мы используем язык Python, который является популярным языком программирования; он активно развивается и оптимизируется сотнями опытных специалистов по программному обеспечению (см. [PyDev]).

Пре-парсер: Различия между Sage и Python

В некоторых математических аспектах Python может ввести в заблуждение, поэтому Sage ведет себя немного другим образом.

  • Нотация для возведения в степень: ** против ^. В 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'
    
  • Деление целых чисел: Выражение 2/3 в Python означает не то, чего ожидает математик. В Python, если m и n целые числа, тогда m/n также целое число, если быть точнее, то целая часть после деления m на n. Следовательно 2/3=0. В сообществе 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
    
  • Большие простые числа: Python имеет нативную поддержку целых чисел производной точности в дополнение к C-int’ам. Они намного медленнее, чем то, что предоставляет GMP, а также имеют свойство: символ L в конце, чтобы отличать их от переменных типа int’ (и это не изменится в ближайшее время). Sage использует простые числа производной точности с помощью GMP C-библиотеки, и они выводятся на экран без L.

Вместо изменения интерпретатора Python (как поступили некоторые люди для внутренних проектов), мы используем Python как есть, и применяем пре-парсер для IPython так чтобы поведение командной строки IPython соответствовало ожиданиям математиков. Это означает, что любой существующий код на Python может быть использован в Sage. Однако, нужно придерживаться стандарта Python при написании пакетов, которые будут импортированы в Sage.

(Чтобы установить пакет Python, который, скажем, вы нашли в интернете, следуйте инструкции, но запускайте sage -python вместо python. Очень часто это означает, что нужно ввести sage -python setup.py install.)

Я хочу посодействовать разработке. Как?

Если вы хотите помочь в разработке Sage, это будет оценено по достоинству! Помощь может варьироваться от внесении изменений в код, дополнении справочной информации до нахождения багов.

Поищите информацию для разработчиков на главной странице Sage; кроме всего, вы можете найти список проектов, связанных с Sage, отсортированных по приоритету и категории. Руководство разроботчика Sage содержит необходимую информацию; вы также можете узнать больше в Google-группе sage-devel.

Как мне ссылаться на Sage?

Если вы используете Sage для написания работы, пожалуйста, укажите, что вычисления были произведены с помощью Sage. Включите

[Sage] William A. Stein et al., Sage Mathematics Software (Version 4.3).
       The Sage Development Team, 2009, http://www.sagemath.org.

в раздел библиографии (заменяя 4.3 версией Sage, которую вы используете). Кроме того, пожалуйста, постарайтесь отследить, какие компоненты Sage были использованы для вычислений, например PARI?, GAP?, Singular? Maxima?, и укажите эти системы. Если вы сомневаетесь о том, какое программное обеспечение используется для вычислений, задайте вопрос в Google-группе sage-devel См. Univariate Polynomials для обсуждения подобных тем.


Если вы прочитали это руководство от начала до конца, и у вас есть соображения по поводу времени, затраченного на него, пожалуйста, выскажите свое мнение в Google-группе sage-devel.

Наслаждайтесь Sage!

Содержание

Предыдущая тема

Использование SageTeX

Следующая тема

Дополнение

Эта страница