Паскалевский тест компилируется
May. 10th, 2019 12:40 amСегодня мы со
spamsink совершили рывок и совместными усилиями довели паскалевский тест до состояния компилируемости без ошибок. Список обнаруженных проблем:
1. Не поддерживается тип "set of char", и даже "set of 'a'..'z'".
2. Не работает тип "set of 1..100". Максимальный размер для множества целых чисел - "set of 0..47".
3. Не поддерживается массив файлов, то есть тип 'array of text'.
4. Примитивы succ() и pred() не работают с целыми аргументами.
5. Экспонента плавающих чисел ограничена диапазоном -18..18.
6. Процедура dispose() не принимает выражение в качестве аргумента, только переменную.
7. Примитивы pack() и unpack() не работают с массивами с отличающимися типами индексов, например "array [integer] of ..." и "array [char] of ...".
8. Тест целиком не помещается в таблицы компилятора, пришлось разбить его на три части.
1. Не поддерживается тип "set of char", и даже "set of 'a'..'z'".
2. Не работает тип "set of 1..100". Максимальный размер для множества целых чисел - "set of 0..47".
3. Не поддерживается массив файлов, то есть тип 'array of text'.
4. Примитивы succ() и pred() не работают с целыми аргументами.
5. Экспонента плавающих чисел ограничена диапазоном -18..18.
6. Процедура dispose() не принимает выражение в качестве аргумента, только переменную.
7. Примитивы pack() и unpack() не работают с массивами с отличающимися типами индексов, например "array [integer] of ..." и "array [char] of ...".
8. Тест целиком не помещается в таблицы компилятора, пришлось разбить его на три части.
no subject
Date: 2019-05-10 06:47 pm (UTC)Я посмотрел, какой код порождается для динамической проверки типов при передаче фактических параметров-процедур. На первый взгляд, это довольно труднопонимаемо; я рад, что сам компилятор это не использует, иначе декомпиляция сильно осложнилась бы.
no subject
Date: 2019-05-10 10:31 pm (UTC)Проверку параметров-процедур вернул обратно в основной тест.
Вопрос возник: откуда берутся ограничения на размер кода функции и на количество деклараций? У нас ведь кросс-компилятор, и памяти дофига. Не убрать ли эти ограничения?
no subject
Date: 2019-05-10 11:01 pm (UTC)no subject
Date: 2019-05-10 11:11 pm (UTC)no subject
Date: 2019-05-11 12:03 am (UTC)500 литералов - это не общее количество, а размер группы, в которой совпадающие объединяются. Как только набирается 500, они выталкиваются в файл и начинается формирование новой группы; из-за этого между группами могут быть повторения. Когда я увеличил размер группы (MAXLIT), то рекомпиляция компилятора перестала совпадать, так что пока для удобства оставил как есть.
no subject
Date: 2019-05-10 07:34 pm (UTC)write('Control13: start '); i := 10; for i := 1 to i do write(i:3); writeln(' s/b start 1 2 3 4 5 6 7 8 9 10');На БЭСМ-6 оно, довольно предсказуемо, уходит в бесконечный цикл.
no subject
Date: 2019-05-10 08:28 pm (UTC)FОR I := 15 DОWNТО 1 DО WRIТЕLN(’НЕLLО, WОRLD’: I);
не обрезает строки, когда ширина по формату меньше длины строки (аналогично с печатью TRUE/FALSE).
Печать вещественных чисел существенно отличается от стандарта.
А в остальном, более или менее, всё в порядке.
no subject
Date: 2019-05-10 10:32 pm (UTC)Я ещё не добрался.
no subject
Date: 2019-05-10 10:58 pm (UTC)