***********
Послесловие
***********
Почему 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]_).
.. _section-mathannoy:
Пре-парсер: Различия между 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 2, если ``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
- **Большие целые числа:** 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, отсортированных по
приоритету и категории. `Руководство разроботчика Sage
<http://doc.sagemath.org/html/en/developer/>`_ содержит полезную информацию; вы
также можете узнать больше в Google-группе ``sage-devel``.
Как правильно ссылаться на 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?, и укажите
эти системы. Если вы сомневаетесь о том, какое программное обеспечение
используется для вычислений, задайте вопрос в Google-группе ``sage-devel``.
См. :ref:`section-univariate` для дальнейшего обсуждения этой темы.
------------
Если вы прочитали это руководство от начала до конца, и у вас есть соображения
по поводу времени, затраченного на него, пожалуйста, выскажите свое мнение в
Google-группе ``sage-devel``.
Наслаждайтесь Sage!