1. Совместимость компиляторов и интерпретатора Бейсика
В предлагаемой таблице (табл. 5) представлены ограничения, налагаемые рассматриваемыми компиляторами на синтаксис операторов и функций Бейсика. Недопустимые инструкции отмечены знаком минус (-). Если инструкция допустима, но ее употребление имеет особенности по сравнению с интерпретатором, она отмечена цифрой, означающей номер примечания.
Таблица 5. Ограждения синтаксиса при использовании компиляторов.
|
* |
iJ |
■ ------------5 Tftbfr* 1 j |
||||
|
Функции Бейсика |
||||||
|
ABS |
+ |
+ |
+ |
+ |
+ |
+ |
|
ACS |
- |
- |
- |
+ |
+ |
+ |
|
AND |
- |
17 |
- |
+ |
+ |
+ |
|
ASN |
- |
- |
- |
+ |
+ |
+ |
|
ZX СсшуЖ» |
Me*** г |
Soltek К |
Softek : «М Л |
Softek |
Tobo* 7н> |
|
|
ATN |
- |
- |
- |
+ |
+ |
+ |
|
ATTR |
+ |
+ |
+ |
+ |
+ |
+ |
|
BIN |
+ |
+ |
+ |
+ |
+ |
+ |
|
CHR$ |
+ |
+ |
+ |
+ |
+ |
+ |
|
CODE |
+ |
+ |
+ |
+ |
+ |
+ |
|
COS |
- |
- |
- |
+ |
+ |
+ |
|
EXP |
- |
- |
- |
+ |
+ |
+ |
|
FN |
- |
- |
- |
- |
- |
+ |
|
IN |
+ |
+ |
+ |
+ |
+ |
+ |
|
INKEY$ |
1 |
+ |
+ |
+ |
+ |
+ |
|
INT |
2 |
2 |
- |
+ |
+ |
+ |
|
LEN |
- |
+ |
+ |
+ |
+ |
+ |
|
LN |
- |
- |
- |
+ |
+ |
+ |
|
NOT |
- |
- |
+ |
+ |
+ |
+ |
|
OR |
- |
- |
+ |
+ |
+ |
+ |
|
PEEK |
+ |
+ |
+ |
+ |
+ |
+ |
|
PI |
- |
- |
- |
+ |
+ |
+ |
|
POINT |
+ |
+ |
+ |
+ |
+ |
+ |
|
RND |
3 |
3 |
3 |
+ |
+ |
+ |
|
SCREENS |
- |
- |
+ |
+ |
+ |
+ |
|
SGN |
+ |
+ |
+ |
+ |
+ |
+ |
|
SIN |
- |
- |
- |
+ |
+ |
+ |
|
SQR |
4 |
4 |
- |
+ |
+ |
+ |
|
STR$ |
- |
- |
+ |
+ |
+ |
+ |
|
TAN |
- |
- |
- |
+ |
+ |
+ |
|
USR addr |
+ |
+ |
+ |
+ |
+ |
+ |
|
USR "A" |
5 |
5 |
5 |
+ |
+ |
+ |
|
VAL |
- |
- |
- |
6 |
+ |
+ |
|
VAL$ |
- |
- |
- |
7 |
7 |
+ |
|
НттшФ оде* |
- IX £ooipSer |
Mc*f*r г |
Soltek В |
Softek : НМЛ |
Softek I loboi |
|
|
Операторы Бейсика |
||||||
|
AT |
+ |
+ |
+ |
+ |
+ |
+ |
|
ВЕЕР |
18 |
18 |
+ |
+ |
+ |
+ |
|
BORDER |
+ |
+ |
+ |
+ |
+ |
+ |
|
BRIGHT |
+ |
+ |
+ |
+ |
+ |
+ |
|
CLEAR |
+ |
8 |
8 |
+ |
+ |
8 |
|
CLOSE # |
- |
- |
- |
+ |
+ |
- |
|
CLS |
+ |
+ |
+ |
+ |
+ |
+ |
|
CONTINUE |
- |
- |
- |
- |
- |
- |
|
COPY |
+ |
+ |
+ |
+ |
+ |
+ |
|
DATA |
+ |
+ |
+ |
+ |
+ |
+ |
|
DEF FN |
- |
- |
- |
- |
- |
+ |
|
DIM A() |
- |
9 |
- |
9 |
9 |
+ |
|
DIM A$() |
- |
- |
- |
9 |
9 |
+ |
|
DRAW |
+ |
+ |
+ |
+ |
+ |
+ |
|
FLASH |
+ |
+ |
+ |
+ |
+ |
+ |
|
FOR...TO...STEP |
10 |
10 |
+ |
+ |
+ |
+ |
|
GO SUB |
11 |
11 |
11 |
11 |
11 |
+ |
|
GOTO |
11 |
11 |
11 |
11 |
11 |
+ |
|
IF...THEN |
+ |
+ |
+ |
+ |
+ |
+ |
|
INK |
+ |
+ |
+ |
+ |
+ |
+ |
|
INPUT A |
+ |
+ |
+ |
+ |
+ |
+ |
|
INPUT A$ |
- |
+ |
+ |
+ |
+ |
+ |
|
INPUT LINE |
- |
- |
- |
6 |
7 |
+ |
|
INVERSE |
+ |
+ |
+ |
+ |
+ |
+ |
|
LET A= |
+ |
+ |
+ |
+ |
+ |
+ |
|
LET A$= |
- |
+ |
+ |
+ |
+ |
+ |
|
LIST, LLIST |
- |
- |
- |
- |
- |
12 |
|
LOAD |
- |
- |
13 |
13 |
13 |
- |
|
ZX Compter |
MO** г |
Softek IS |
Softek : ** iA : |
! Softek W4J |
?«bo* j «► |
|
|
LPRINT |
+ |
+ |
+ |
+ |
+ |
+ |
|
MERGE |
- |
- |
- |
- |
- |
- |
|
NEW |
+ |
+ |
+ |
+ |
+ |
+ |
|
NEXT |
+ |
+ |
+ |
+ |
+ |
+ |
|
OPEN # |
- |
- |
- |
+ |
+ |
+ |
|
OUT |
+ |
+ |
+ |
+ |
+ |
+ |
|
OVER |
+ |
+ |
+ |
+ |
+ |
+ |
|
PAPER |
+ |
+ |
+ |
+ |
+ |
+ |
|
PAUSE |
+ |
+ |
+ |
+ |
+ |
+ |
|
PLOT |
+ |
+ |
+ |
+ |
+ |
+ |
|
PRINT A |
+ |
+ |
+ |
+ |
+ |
+ |
|
PRINT A$ |
- |
+ |
+ |
+ |
+ |
+ |
|
PRINT # |
- |
- |
+ |
+ |
+ |
+ |
|
RANDOMIZE |
- |
+ |
+ |
+ |
+ |
|
|
READ |
+ |
+ |
+ |
+ |
+ |
+ |
|
REM |
+ |
+ |
14 |
14 |
14 |
+ |
|
RESTORE |
15 |
15 |
+ |
+ |
+ |
+ |
|
RETURN |
+ |
+ |
+ |
+ |
+ |
+ |
|
RUN |
- |
- |
- |
- |
- |
+ |
|
SAVE |
- |
- |
13 |
13 |
13 |
+ |
|
STOP |
16 |
16 |
+ |
+ |
+ |
+ |
|
TAB |
+ |
+ |
+ |
+ |
+ |
+ |
|
TO |
- |
- |
+ |
+ |
+ |
+ |
|
VERIFY |
- |
- |
13 |
13 |
13 |
- |
Комментарии к таблице:
• При использовании целочисленных компиляторов любые дробные параметры в тексте программы диагностируются как ошибка и вызывают остановку компиляции.
• В среде ZX-Compiler v. 1.0 не поддерживаются символьные переменные
129
5 Зак. № 192
• Аргументы функций и параметры операторов в среде ZX Compiler v. 1.0, представляющие собой выражения, должны заключаться в круглые скобки. Для MCoder 2 это ограничение распространяется только на операторы PLOT, DRAW и CIRCLE.
• Цифры в таблице обозначают:
1. функция поддерживается только в контексте CODE INKEY$;
2. избыточный оператор;
3. функция возвращает целочисленный результат;
4. дробная часть отбрасывается;
5. результат возвращается в виде числа со знаком в дополнительном коде (см. стр. 109);
6. инструкция компилируется, но приводит к сбою при выполнении программы;
7. компилируется, но работает неправильно;
8. допускается только без параметров;
9. массивы могут быть только одномерными;
10. инструкция STEP не поддерживается;
11. в качестве параметров нельзя использовать выражения и переменные;
12. выводится листинг программы, находящейся в области Бейсика, а не скомпилированной программы;
13. операторы работают только с файлами типа CODE;
14. может использоваться также для ввода операторов, расширяющих стандартный Бейсик;
15. допускается только с параметром;
16. воспринимается как ограничитель текста программы (аналогично END в ряде других языков высокого уровня);
17. может использоваться только в качестве условия в операторе IF...THEN;
18. в параметрах могут использоваться натуральные дроби.
2. Сравнительные характеристики компиляторов
В табл. 6 сведены данные о повышении скорости работы тест-программ, оттранслированных различными компиляторами, по сравнению со скоростью их выполнения интерпретатором Бейсика, а также размеры скомпилированных программ. Для проверки использовались 3 тест-программы: 1 -я и 2-я целочисленные (экранная графика и целочисленная арифметика), а 3-я использует алгебраические операции с «плавающей точкой».
Тест 1 Тест 2

10 FOR А=0 ТО 175 20 FOR В=0 ТО 255 30 PLOT В.А
40 NEXT В: NEXT А
10 FOR А=1 ТО 256 20 FOR В=1 ТО 256
30 LET С=(А*В)-(А*В) 40 NEXT В: NEXT А
Тест 3
10 FOR А=0 ТО 255
20 LET B=ABS (ACS (RND))+ASN (RND)—ATN (RND) 30 LET B=ATTR (A,B)+BIN 100111 Ю/CODE "q" 40 LET A$=CHR$ A 50 LET B=COS PI: LET B=SIN PI
60 LET B=TAN PI—EXP PI: LET B=IN (31)-CODE INKEY$ 70 LET B=INT (2/3): LET B=LEN A$ 80 LET B=LN PI+PEEK 23681-POINT (128,88) 90 LET A$=SCREEN$ (10,10)
100 LET B=SGN (RND)+SIN (RND)*SQR (ABS (RND))/TAN (RND)
110 LET A$=STR$ 12345
120 LET B=USR 7962+USR "a"
130 NEXT A
140 BEEP 0.1,0.1
Таблица 6. Сравнение эффективности компиляторов.
|
Тест |
Бейсик: |
ZX Сorcpter |
MCoder *]$eftefclS |
Softek FP |
rOtOSH** |
|||
|
f Л |
ij |
|||||||
|
Степень ускорения (по сравнению с Spectrum-Бейсиком), крат |
||||||||
|
1 |
1 |
16 |
16 |
35 |
3.7 |
3.7 |
6.2 |
6.6 |
|
2 |
1 |
17 |
28 |
18 |
3.1 |
3.1 |
7.0 |
7.5 |
|
3 |
1 |
- |
- |
- |
1.1 |
1.1 |
19 |
19 |
|
Длина программы с переменными {без учета компилятора), байт |
||||||||
|
1 |
108 |
115 |
134 |
142 |
92 |
109 |
145 |
126 |
|
2 |
145 |
154 |
171 |
189 |
166 |
166 |
171 |
148 |
|
3 |
379 |
- |
- |
- |
409 |
409 |
416 |
354 |
• Режим 1 компиляции Tobos FP включается оператором РОКЕ 53252,0; режим 2 — РОКЕ 53252,55 (подробнее см. стр. 119).