spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Программа
_program test;
_const foo=foo;
_begin writeln(foo) _end.
на Паскаль-автокоде компилируется и печатает 0, который берётся из адреса 0, а не из константного пула, как обычно.
Константа получается целого типа, её можно присвоить целой переменной.

Аналогичная программа
program test(output);
const foo = foo;
begin writeln(foo) end.
на Паскаль-мониторе не компилируется:
 00001    1  0 PROGRAM TEST(OUTPUT);
 00001    2  1 CONST FOO=FOO;
 ******34 TИП HE COOTBETCT TИПY ЭЛEMEHTA ФAЙЛA
 00023    3  0 BEGIN WRITELN(FOO) END.
        *****                   0

Константа получается "никакого" типа, с ней ничего нельзя сделать.

В то же время этот же компилятор на С++ выдаёт
 00001    1  0 program test(output);
Error 6: Missing constant 
Error 12: Bad symbol 
 00001    2  1 const foo=foo;
       ^^^^^               01
 00015    3  0 begin writeln(foo) end.

А всё дело в разнице между константой 0 и значением указателя NIL, которая на БЭСМ-6 в Паскале есть, а в С++ - нет.

Ну и в том, что недосформированный объект, описывающий константу, зачем-то вставляется в таблицу символов до того, как проанализирована правая часть определения константы (это ошибка Пирина, у Вирта правильно).

Date: 2021-06-08 10:53 pm (UTC)
vak: (Default)
From: [personal profile] vak
Получается, после переписывания на Си++ эта ошибка случайно "починилась".

Date: 2021-06-09 03:21 am (UTC)
vak: (Default)
From: [personal profile] vak
Я специально пытался найти архитектуру, где NULL был бы не 0. Не обнаружилось такой.

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 04:18 am
Powered by Dreamwidth Studios