Основной язык реализации Sage — это Python (см. [Py]), однако код, который должен обрабатываться быстро, написан на компилируемом языке. У 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] 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. См. Полиномы одной переменной для дальнейшего обсуждения этой темы.
Если вы прочитали это руководство от начала до конца, и у вас есть соображения по поводу времени, затраченного на него, пожалуйста, выскажите свое мнение в Google-группе sage-devel.
Наслаждайтесь Sage!