Бейсик - один из самых простых языков. При этом спектрумовский диалект дополнительно упрощён:
1. Нет оператора ELSE
2. Нет оператора множественного ветвления.
3. Строковые функции и переменные отличаются символом $ в конце имени.
4. Имя пользовательской функции может состоять только из одной буквы.
5. Пользловательские функции обязаны быть чистыми и реализовывать только функции в их математическом понимании.
6. Процедуры вызываются не по именам, а по меткам оператором GOSUB.
7. Область видимости переменных и подпрограмм ровно одна и она глобальна.
8. Многомерный массив - не синоним массива массивов.
9. Нет ничего, что соответствовало бы не только объектам, но и записям (в терминах языка pascal), или структурам (в терминах языка c).
10. Оператор присваивания - LET, а не знак равенства.
11. Знак равенства самостоятельного значения вообще не имеет, после LET он становится разделителем операнда-назначения и операнда-источника оператора присваивания, а между IF и THEN - оператором сравнения.
12. Меткой является номер строки.
13. Номера имеют все строки.
14. Пометить можно только первый оператор строки.
15. Есть только один вид циклов - циклы со счётчиками.
16. Оператор NEXT имеет операнд - счётчик того цикла, чьё тело завершается перед данным оператором NEXT.
17. В цикл нельзя вложить другой цикл с тем же счётчиком.
Кроме того, исходник набирался сразу на некой смеси текста с байт-кодом, в которой кадый оператор и каждая переменная, литерал, или номер строки кодировались байт-кодом, но литералы и имена переменных дублировались текстом, а операторы и номера строк кодировались только бай-кодом. Но даже такой интерпретатор работал
в 50 раз медленнее компилированных в натив Z80 тогдашними откровенно сырыми компиляторами бейсик-программ. И это было заметно даже на
Код: Выделить всё
10 INPUT "y=";f$, "xmin=";xmin; "xmax=";xmax, "Step=";s
20 FOR x=xmin TO xmax STEP s
30 LET y=val(f$)
40 PLOT x*10+128,y*10+96
50 NEXT x
, где val - встроенная функция преобразования строки в число с возможностью парсинга инфиксных арифметических выражений и использования всех встроенных функций спектрумовского бейсика, а PLOT - оператор рисования точки. Ну ладно, это ещё можно ускорить. Но при двух циклах и автоматическом выборе текущего шага на основании оценки производной правой разностью начнёт уже заметно тормозить даже вполне чистый байт-код смолбейсика. Вот если программа, достаточно сложная, чтоб тормоза проявились, или сама не влезет в память, или не сможет разместить в ней данные, тогда можно интерпретировать. Или если сам интерпретатор работает быстрей, чем можно адресовать коды операций основной программы. Или если задача - вывести что нибудь сугубо статическое, дождаться ввода и передать его другому процессору и при этом скорость работы программы лимитируется не возможностями интерпретатора, а внешними факторами вроде быстродействия приводов принтера, или времени реакции пользователя. Или если программа хотябы гарантированно одноразовая и при этом время исполнения компилированного кода в сумме со временем компиляции догоняет время исполнения интерпретируемого исходника, что опять таки ограничено сложностью самой программы и количеством обрабатываемых этой программой данных. И в любом случае лишь при дополнительном условии, что задача закрыть исходный текст от посторонних глаз гарантированно не строит.