*********** Послесловие *********** Почему 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!