Введение

Язык программирования, используемый в калькуляторах Texas Instruments – язык программирования калькуляторов. TI BASIC – официальное название языка, подобного BASIC, встроенного в графические калькуляторы Texas Instruments (TI). TI BASIC представляет собой семейство языков, состоящее из трех различных и несовместимых версий, выпущенных для разных продуктов:
TI BASIC 83 (на процессоре Z80) для серии TI 83, серии TI 84 Plus.
TI BASIC 89 (на процессоре 68k) для серии TI 89, серии TI 92, Voyage 200.
TI BASIC Nspire (на процессоре ARM) для TI Nspire и TI Nspire CAS.
Компания TI редко упоминает язык по имени, но название TI BASIC использовалось в некоторой документации для разработчиков. Для многих приложений это наиболее удобный способ программирования любого калькулятора TI, поскольку возможность написания программ на TI BASIC встроена в него. Также можно использовать язык ассемблера (часто называемый "asm"), и существуют компиляторы C для перевода в ассемблер: TIGCC для калькуляторов на базе Motorola 68000 (68k) и SDCC для калькуляторов на базе Zilog Z80. Однако оба они являются кросс-компиляторами и не позволяют программировать непосредственно на калькуляторе. TI BASIC значительно медленнее языка ассемблера (поскольку его необходимо интерпретировать), что делает его более подходящим для написания программ для быстрого решения математических задач или выполнения повторяющихся операций, а не для программирования игр или графически сложных приложений. Некоторые учебники математики даже приводят примеры программ на TI BASIC (обычно для широко распространенного варианта, используемого в сериях TI 82/83/84). Несмотря на некоторую минималистичность по сравнению с языками программирования, используемыми на компьютерах, TI BASIC тем не менее играет важную роль в сообществе программистов. Поскольку графические калькуляторы TI требуются для изучения продвинутой математики во многих средних школах и университетах, TI BASIC часто дает студентам первое представление о мире программирования.

Синтаксис

Синтаксис всех версий TI BASIC несколько отличается от типичных реализаций BASIC. Сам язык обладает некоторыми базовыми возможностями структурированного программирования, но практически не использует или не допускает пробелы или отступы. Он также зависит от несколько нестандартного набора символов, включающего специальные символы для присваивания (правая стрелка "STO", которая отсутствует в большинстве наборов символов), извлечения квадратного и кубического корней, а также других математических символов, а также токенизированный ввод и хранение ключевых слов. Все операторы начинаются с двоеточия, которое также служит разделителем операторов внутри строки. На моделях TI 83/84 закрывающие скобки, квадратные скобки, фигурные скобки и кавычки могут быть необязательно опущены в конце строки или перед токеном STO для экономии места, хотя в некоторых случаях их лучше оставить. Например, на моделях TI 83/84 функция цикла for работает значительно медленнее без закрывающих скобок в определенных ситуациях. В выражениях используется инфиксная нотация со стандартным приоритетом операторов. Многие операторы требуют аргументы в скобках, подобно синтаксису, используемому для математических функций. Синтаксис присваивания (копирования данных в переменную) необычен по сравнению с большинством традиционных языков программирования для компьютеров; вместо использования оператора let с знаком равенства, как в BASIC, или оператора :=, как в языках семейства Algol, TI BASIC использует оператор присваивания сто→ (стрелка вправо) со следующим синтаксисом: источник → назначение. Это аналогично синтаксису, используемому на некоторых японских калькуляторах, таких как Casio, Canon и Sharp, которые часто применяли подобный подход с момента появления первых японских буквенно-цифровых калькуляторов массового производства в конце 1970-х и начале 1980-х годов.

Типы данных

TI BASIC — язык со строгой и динамической типизацией. Доступные типы данных существенно различаются между версиями для 68k и Z80. Создание пользовательских типов данных невозможно без использования библиотеки, написанной на языке ассемблера. Списки часто используются вместо структур данных.

Переменные

Гибкость использования переменных значительно различается в зависимости от модели калькулятора. Например, на TI 84 Plus доступны все буквы английского алфавита, а также символ тета (Θ).

TI-83/84 (Z80)

На TI 83/84 программист может создавать списки, имена которых состоят максимум из пяти символов. Все остальные типы данных ограничены, например, 27 вещественных или комплексных переменных, а также ряд предопределенных имен переменных других типов (например, матрицы должны быть одной из десяти переменных [A]–[J]). На TI 83/84 некоторые переменные, такие как Ans и финансовые переменные, имеют фиксированные адреса в оперативной памяти, что обеспечивает гораздо более быстрый доступ к ним, чем к 27 буквенным переменным. Ans функционирует как специальная переменная, содержащая результат последнего выполненного выражения. Строка, содержащая только переменную, также будет выполнена, и её содержимое будет сохранено в Ans как результат. Поскольку Ans пересчитывается так часто, она чаще всего используется для хранения очень временных вычислений или значений, к которым в противном случае был бы медленный доступ, например, элементов списка. Все переменные являются глобальными.

TI-89 (68k)

В отличие от этого, в калькуляторах 68k имена всех переменных могут содержать до восьми буквенно-цифровых символов, включая греческие символы. Кроме того, переменные можно группировать в "папки" или делать локальными для программы, объявляя их с помощью оператора Local.

TI-83/84 (Z80)

Программисты Z80 часто начинают строки с " (двойные кавычки) для обозначения комментария. Строки, начинающиеся с " фактически выполняются, изменяя переменную Ans, но это не влияет ни на что, кроме производительности, если Ans считывается сразу после этого.

TI-89 (68k)

Калькуляторы 68k позволяют программам включать однострочные комментарии, используя символ ©. Если комментарий является первой строкой после оператора "Prgm", он отображается в строке состояния при выборе программы в каталоге; такие комментарии часто используются для документирования имен или типов параметров. Интерпретатор 68k имеет встроенную функцию для хранения количества пробелов в начале строки, что позволяет использовать отступы.

TI-83/84 (Z80)

Версия TI BASIC для Z80 не позволяет создавать явные "функции" как в 68k. Однако, поскольку все переменные глобальные, функции можно эмулировать, присваивая переменным значения, аналогичные аргументам, перед вызовом другой программы. Возвращаемых значений нет; команда Return останавливает текущую программу и возобновляет выполнение с места вызова.

TI-89 (68k)

68k версия TI BASIC позволяет создавать пользовательские функции. Функции имеют тот же синтаксис, что и программы, за исключением того, что они используют ключевые слова Func EndFunc вместо Prgm EndPrgm, и им запрещено использовать инструкции, выполняющие ввод-вывод, изменяющие нелокальные переменные или вызывающие программы. Однако функции могут быть нечистыми, поскольку они могут вызывать встроенные функции, такие как getTime, getKey или rand. Все функции имеют возвращаемое значение, которое, при отсутствии явного оператора Return, является результатом вычисления последнего выражения.

Языковые расширения третьих сторон

Сторонние приложения, в хронологическом порядке Omnicalc, xLIB, Celtic и Doors CS, перегрузили функции TI BASIC на калькуляторах Z80, чтобы предоставить расширенную функциональность языка. Эти сторонние библиотеки переопределяют функции суммирования, работы с вещественными числами, det (определителя) и единичной матрицы, которые обрабатываются и интерпретируются соответствующими приложениями. Среди дополнительных возможностей — быстрые процедуры рисования фигур, инструменты для работы со спрайтами и тайлмапами, функции модификации и доступа к программам и VAT, средства создания графического интерфейса и многое другое, большая часть чего обычно доступна только программистам на ассемблере. Для работы всех функций требуется наличие на калькуляторе пользователя приложения, такого как Doors CS 7.0, что иногда рассматривается как недостаток при использовании этих библиотек.

Привет, мир.

Следующие программы при выполнении выведут фразу "HELLO, WORLD!".