Компилятор Би под Дубной

83 views
Skip to first unread message

Serge Vakulenko

unread,
Apr 21, 2025, 3:16:58 AMApr 21
to БЭСМ-6
Раз уж у нас тут постепенно актуализировалась тема написания компиляторов, я тоже увлёкся и реализовал давнишнюю мечту: портонул Би с PDP-7 на БЭСМ-6.

Исходник компилятора: b-besm.b

Проект на Гитхабе: besm6/b-compiler

История вопроса следующая. В 1969 году Кен Томпсон создал язык Би для машины PDP-7. Компилятор порождал так называемый шитый код, который интерпретировался во время выполнения. Позже в 1971-м Деннис Ритчи портонул Би на машину Honeywell GE 645, но без всякого шитого кода, а уже с нормальной генерацией бинарного кода целевого процессора. А когда Ритчи взялся тащить Би на PDP-11, оказалось, что наличие байтовой адресации существенно меняет дело. Пришлось добавить в Би типы, и он быстро превратился в знакомый нам Си.

Исходники компилятора Би считались потерянными. Но девять лет назад Robert Swierczek чудесным образом сумел восстановить тексты Би из обрывков распечаток в рамках проекта pdp7-unix.

Я взял эти исходники и вместо выдачи шитого кода для PDP-7 вставил генерацию машинных команд БЭСМ-6 для ассемблера Madlen. Добавил минимальную рантайм библиотеку и запихнул в мониторную систему Дубна. Компилятор пишет ассемблерный текст на барабан и, если не случилось ошибок, выполняет как бы команду *READ:1. Дальше обычным образом стартует Мадлен и формирует объектные модули. Компилятор Би и рантайм библиотеку я поместил на отдельную ленту, её можно подключать командой *TAPE:7/B. Покажу пример на симуляторе dubna.

Вот скрипт с исходным текстом классического примера Hello World. Компилятор запускается с ленты командой *TRANS.

*name B compiler
*tape:7/b,40
*library:40
*trans-main:40020
main() {
    printf("Hello, B!*n");
}
*execute
*end file


Запускаем. Я не стал убирать таблицу загрузки, чтобы вам было видно размер кода:

$ dubna hello.dub
...
*NAME B COMPILER
*TAPE:7/*,40
*LIBRARY:40
*TRANS-MAIN:40020
                     OVERLAY OT  20/04/25
B COMPILER FOR BESM-6, VERSION 04/2025
COMPILED 3 LINES OF CODE, FOUND 0 ERRORS

*NO LIST
*CALL BLOCKERR
*MADLEN
 MAIN          CP 0.0,      ST 0.0,      RT     1.0*
*READ OLD
*EXECUTE
      *LIBRA:40 = B/DIV       B/EQ        B/GT        B/LT        B/MUL       B/NE        B/RET       B/SAVE0     B/SAVE
      B/TOUT      B/TRUE      CHAR        PRINTD      PRINTO      PRINTF      WRITE       WRITEB      OUT*CNT     OUT*SHFT
      OUT*BUFF    FLUSH       FOUT

         MAIN       01000                PRINTD     01413                B/MUL      01757                ISOTCOSY   06002
         PROGRAM  E 01000                PRINTO     01466                B/GT       01766                ISOTCOS1 E 06053
         B/SAVE0    01011                WRITE      01517                FOUT       01771                DRUMTAP*   06073
         B/RET      01016                B/TRUE     01622                WRCARD     01772                CHKWORD* C 06124
         PRINTF     01023                OUT*CNT    01623                WRWORD   E 02014                PRINT8     06125
         B/SAVE     01256                OUT*SHFT   01624                WBEGIN   E 02033                STOP*      06306
         CHAR       01263                OUT*BUFF   01625                WRIEND   E 02042                EXIT     E 06307
         B/NE       01301                FLUSH      01654                B/TOUT     02075                CBOБOДHO   06335
         B/EQ       01304                B/LT       01744                WRWORD/  C 04000
         WRITEB     01307                B/DIV      01747                XWRITE/  C 06000

HELLO, B!


Вот ещё несколько примеров для Би из разных мест. Все они работают под Дубной:
  • doors.dub - классическая задачка про 100 дверей
  • e-2.dub - вычисление константы e
  • fibonacci.dub - числа Фибоначчи
  • fizzbuzz.dub - классическая задачка Fizz-Buzz
  • isprime.dub - проверка числа на простоту
  • mandelbrot.dub - вычисление множества Мандельброта
Мандельброт выглядит забавно: mandelbrot.txt

Выводы из всей этой затеи:
  • Би вполне был возможен на БЭСМ-6 уже тогда, в середине 70-х. Увы, никто из аксакалов-бэсмачей про него не знал.
  • Если бы Би тогда состоялся, он мог бы стать важным средством системной разработки. Не судьба. Позже язык ЯРМО пытался занять нишу.
  • Результат примерно соответствует мечте Игоря Григорьевича Пасынкова, когда в 1986 году он позвал меня в курчатник заниматься Си для Эльбруса-Б. Ему хотелось видеть Си не только под юниксом, но и в мониторке.
--Сергей

Alexei Roudnev Exigen

unread,
Apr 23, 2025, 8:11:55 PMApr 23
to be...@googlegroups.com
Любопытно. А нет ли смысла нечто такое использовать для обучения? Я так понимаю что изначально это был до предела упрощенный (без типовой?) Си?

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/8cbeffe0-7bec-4bdd-8d47-cd4578e2abc9n%40googlegroups.com.

Serge Vakulenko

unread,
Apr 23, 2025, 8:20:33 PMApr 23
to БЭСМ-6
On Wednesday, April 23, 2025 at 5:11:55 PM UTC-7 Alexei_...@exigengroup.com wrote:
Любопытно. А нет ли смысла нечто такое использовать для обучения? Я так понимаю что изначально это был до предела упрощенный (без типовой?) Си?

Изначально это был предельно упрощённый BCPL. Тоже безтиповый. Си появился на два года позже, как улучшенный Би.

Sergey Ryzhkov

unread,
Apr 24, 2025, 5:42:46 AMApr 24
to be...@googlegroups.com
А как ты разобрался с фигурными скобками?

пн, 21 апр. 2025 г., 08:17 Serge Vakulenko <serge.v...@gmail.com>:
--

Serge Vakulenko

unread,
Apr 24, 2025, 2:44:16 PMApr 24
to БЭСМ-6
On Thursday, April 24, 2025 at 2:42:46 AM UTC-7 Сергей Рыжков wrote:
А как ты разобрался с фигурными скобками?

Перекодировал в ≤ ≥.

 —Сергей
Message has been deleted

Alex Loktionoff

unread,
Apr 27, 2025, 7:29:21 AMApr 27
to БЭСМ-6

Да, интересная тема, никаких проблем с char :)

понедельник, 21 апреля 2025 г. в 09:16:58 UTC+2, serge.v...@gmail.com:
Раз уж у нас тут постепенно актуализировалась тема написания компиляторов, я тоже увлёкся и реализовал давнишнюю мечту: портонул Би с PDP-7 на БЭСМ-6.

Исходник компилятора: b-besm.b

Проект на Гитхабе: besm6/b-compiler
--Сергей

Alex Loktionoff

unread,
Apr 27, 2025, 7:35:57 AMApr 27
to БЭСМ-6
А почему в коде все взятия адреса элемента массива заменены на арифметику указателей?
И пробелы местами удалены, например во всех return ?
При переносе что-то было урезано?

четверг, 24 апреля 2025 г. в 20:44:16 UTC+2, serge.v...@gmail.com:

Alex Loktionoff

unread,
Apr 27, 2025, 7:55:48 AMApr 27
to БЭСМ-6
Интересно, а что за соглашение о вызовах? С чем совместимо?
gen_call(narg) { /* call with parameters */ extrn acc_active; write(' 14'); write(',vtm,'); number(-narg); write('*n'); if (narg > 1) { write(' 15'); write(',wtc,'); number(-narg); write('*n'); } else { write(' 15'); write(',wtc,*n'); } write(' 13'); write(',vjm,*n'); if (narg > 1) { write(' 15'); write(',utm,'); write('-1*n'); } acc_active = 1; }


понедельник, 21 апреля 2025 г. в 09:16:58 UTC+2, serge.v...@gmail.com:
Раз уж у нас тут постепенно актуализировалась тема написания компиляторов, я тоже увлёкся и реализовал давнишнюю мечту: портонул Би с PDP-7 на БЭСМ-6.


Исходник компилятора: b-besm.b

Проект на Гитхабе: besm6/b-compiler

... 
--Сергей

Serge Vakulenko

unread,
Apr 27, 2025, 3:05:51 PMApr 27
to БЭСМ-6
On Sunday, April 27, 2025 at 4:29:21 AM UTC-7 oxy...@gmail.com wrote:

Да, интересная тема, никаких проблем с char :)

Это верно. На словных машинах типа pdp7 или ge645 не было проблем с char по причине отсутствия такого понятия. 😀  И только когда Томпсону и Ритчи досталась pdp11, пришлось срочно переделывать Би в Си. Байтовая адресация всё меняет.
 
--Сергей

Serge Vakulenko

unread,
Apr 27, 2025, 6:45:59 PMApr 27
to БЭСМ-6
On Sunday, April 27, 2025 at 4:35:57 AM UTC-7 oxy...@gmail.com wrote:
А почему в коде все взятия адреса элемента массива заменены на арифметику указателей?

Наверное вы не то сравниваете. Вот оригинальный Би для pdp7: b.b
А вот что получилось для бэсм6: b-besm.b

Изначально было: np = rp + 2;
Это работает на словных машинах. Но на Линуксе x86_64 получается некорректный указатель. Вместо инкремента на два слова выходит инкремент на два байта.

Все такие места я переделал как: np = &rp[2];
Теперь работает и на Линуксе тоже. Компилятор автоматически домножает индекс массива на размер слова.
 
И пробелы местами удалены, например во всех return ?

Пробелы наоборот вставлены, для лучшей читабельности.
 
При переносе что-то было урезано?

Ничего не урезано, но добавлено несколько фич. Символы подчерк и доллар в именах. Операции сдвига и инкремента-декремента. Операция ?:.

 --Сергей

Serge Vakulenko

unread,
Apr 27, 2025, 9:35:21 PMApr 27
to БЭСМ-6
On Sunday, April 27, 2025 at 4:55:48 AM UTC-7 oxy...@gmail.com wrote:
Интересно, а что за соглашение о вызовах? С чем совместимо?

Это я наваял по старой памяти, наподобие сохранившихся csave и cret от Эльбруса-Б. Совместимо с Фортраном в одну сторону.

Из Би можно вызывать фортрановские процедуры без параметров, и наоборот. В исходниках read() можно видеть, как вызывается monread_(). Подчерк превращается в звёздочку в Мадлене, получается MONREAD*.

Из Би можно вызывать фортрановские функции с одним параметром - непосредственно. В качестве параметра надо передавать его адрес. Можно вызывать фортрановские процедуры с одним параметром, добавляя лишний первый аргумент. В функции init() так вызывается WBEGIN, а в flush() - WRCARD.
 
--Сергей

Alex Loktionoff

unread,
May 3, 2025, 4:26:37 PMMay 3
to БЭСМ-6
Жалко, а почему не ПАСКАЛЬ? Тогда совместимость была бы лучше и с ПАСКАЛем и ФОРТРАНом ?

понедельник, 28 апреля 2025 г. в 03:35:21 UTC+2, serge.v...@gmail.com:

Serge Vakulenko

unread,
May 3, 2025, 7:42:15 PMMay 3
to БЭСМ-6
On Saturday, May 3, 2025 at 1:26:37 PM UTC-7 oxy...@gmail.com wrote:
Жалко, а почему не ПАСКАЛЬ? Тогда совместимость была бы лучше и с ПАСКАЛем и ФОРТРАНом ?

Главные две проблемы, которые должно решать соглашение о связях для Би:
- чтобы функции можно было вызывать как процедуры, игнорируя результат;
- чтобы работал printf() с переменным числом аргументов.

Ни Паскалевские, ни Фортрановские соглашения тут не годятся, увы.

--Сергей

Alex Loktionoff

unread,
May 4, 2025, 4:10:46 AMMay 4
to БЭСМ-6


понедельник, 28 апреля 2025 г. в 00:45:59 UTC+2, serge.v...@gmail.com:
On Sunday, April 27, 2025 at 4:35:57 AM UTC-7 oxy...@gmail.com wrote:
А почему в коде все взятия адреса элемента массива заменены на арифметику указателей?

Наверное вы не то сравниваете. Вот оригинальный Би для pdp7: b.b
А вот что получилось для бэсм6: b-besm.b

Изначально было: np = rp + 2;
Это работает на словных машинах. Но на Линуксе x86_64 получается некорректный указатель. Вместо инкремента на два слова выходит инкремент на два байта.

Все такие места я переделал как: np = &rp[2];
Теперь работает и на Линуксе тоже. Компилятор автоматически домножает индекс массива на размер слова.
А можно подробнее, какой компилятор на Линуксе?  
 
 
И пробелы местами удалены, например во всех return ?

Пробелы наоборот вставлены, для лучшей читабельности.
 
При переносе что-то было урезано?

Ничего не урезано, но добавлено несколько фич. Символы подчерк и доллар в именах. Операции сдвига и инкремента-декремента. Операция ?:.
Понятно, видно много изменений, я подумал что что-то не удалось портировать.
 
 
 --Сергей

Serge Vakulenko

unread,
May 4, 2025, 4:18:08 AMMay 4
to БЭСМ-6
On Sunday, May 4, 2025 at 1:10:46 AM UTC-7 oxy...@gmail.com wrote:
понедельник, 28 апреля 2025 г. в 00:45:59 UTC+2, serge.v...@gmail.com:
Все такие места я переделал как: np = &rp[2];
Теперь работает и на Линуксе тоже. Компилятор автоматически домножает индекс массива на размер слова.
А можно подробнее, какой компилятор на Линуксе?
 
Ничего не урезано, но добавлено несколько фич. Символы подчерк и доллар в именах. Операции сдвига и инкремента-декремента. Операция ?:.
Понятно, видно много изменений, я подумал что что-то не удалось портировать.

Всё отлично легло на БЭСМ.

--Сергей

Alex Loktionoff

unread,
May 4, 2025, 4:24:53 AMMay 4
to БЭСМ-6


воскресенье, 4 мая 2025 г. в 01:42:15 UTC+2, serge.v...@gmail.com:
On Saturday, May 3, 2025 at 1:26:37 PM UTC-7 oxy...@gmail.com wrote:
Жалко, а почему не ПАСКАЛЬ? Тогда совместимость была бы лучше и с ПАСКАЛем и ФОРТРАНом ?

Главные две проблемы, которые должно решать соглашение о связях для Би:
- чтобы функции можно было вызывать как процедуры, игнорируя результат;
Результат возвращается в аккумуляторе на ФОРТРАНе, игнорировать очень просто.
 
- чтобы работал printf() с переменным числом аргументов.
Но в Пиринском паскале было возможно вызывать функцию, передавая разное количество аргументов. 
 
Ни Паскалевские, ни Фортрановские соглашения тут не годятся, увы.
Сергей, можно продолжить дискуссию в теме про соглашениях о вызовах?
Мне это очень интересно, и думаю всем будет полезно.
Пиринский паскаль мог вызывать ФОРТРАН и АЛГОЛ, хотя с расширенными словами FORTRAN.
Хотелось бы прийти к общему знаменателю в теме и реализовать в новописном компиляторе: https://groups.google.com/g/besm6/c/LJ91waEdhzE
 
--Сергей
 
понедельник, 28 апреля 2025 г. в 03:35:21 UTC+2, serge.v...@gmail.com:
On Sunday, April 27, 2025 at 4:55:48 AM UTC-7 oxy...@gmail.com wrote:
Интересно, а что за соглашение о вызовах? С чем совместимо?

Это я наваял по старой памяти, наподобие сохранившихся csave и cret от Эльбруса-Б. Совместимо с Фортраном в одну сторону.

Из Би можно вызывать фортрановские процедуры без параметров, и наоборот. В исходниках read() можно видеть, как вызывается monread_(). Подчерк превращается в звёздочку в Мадлене, получается MONREAD*.

Из Би можно вызывать фортрановские функции с одним параметром - непосредственно. В качестве параметра надо передавать его адрес. Можно вызывать фортрановские процедуры с одним параметром, добавляя лишний первый аргумент. В функции init() так вызывается WBEGIN, а в flush() - WRCARD.
 
... 
 
--Сергей

Alex Loktionoff

unread,
May 4, 2025, 4:34:19 AMMay 4
to БЭСМ-6


воскресенье, 4 мая 2025 г. в 10:18:08 UTC+2, serge.v...@gmail.com:
On Sunday, May 4, 2025 at 1:10:46 AM UTC-7 oxy...@gmail.com wrote:
понедельник, 28 апреля 2025 г. в 00:45:59 UTC+2, serge.v...@gmail.com:
Все такие места я переделал как: np = &rp[2];
Теперь работает и на Линуксе тоже. Компилятор автоматически домножает индекс массива на размер слова.
А можно подробнее, какой компилятор на Линуксе?
Спасибо, за ссылку, полагаю BCause можно брать за основу при совместной работе БЕСМ6 проектах?
типа de-fecto standard D компилятор
 
Ничего не урезано, но добавлено несколько фич. Символы подчерк и доллар в именах. Операции сдвига и инкремента-декремента. Операция ?:.
Понятно, видно много изменений, я подумал что что-то не удалось портировать.

Всё отлично легло на БЭСМ.
Вот как Вы только создали тему про В, как осенило, что В просто создан для БЭСМ6 - адресация ко всему пословная.
А даже если приспичит строки есть, и работай с ними как с bit-stream или bit-fields на манер packed array ПАСКАЛЯ.
Пару функций оберток так для ядра ОС вообще разницы не будет. Но гладко бывает на бумаге...
Понятно что изменения введены только как расширения, здорово, что удалось сохранить совместимость.
Еще бы добавить struct и union и тогда вообще С не нужен для ядра :)
 
--Сергей

Василий Долматов

unread,
May 4, 2025, 9:39:09 AMMay 4
to be...@googlegroups.com


4 мая 2025 г., в 11:24, Alex Loktionoff <oxy...@gmail.com> написал(а):



воскресенье, 4 мая 2025 г. в 01:42:15 UTC+2, serge.v...@gmail.com: 
On Saturday, May 3, 2025 at 1:26:37 PM UTC-7 oxy...@gmail.com wrote:
Жалко, а почему не ПАСКАЛЬ? Тогда совместимость была бы лучше и с ПАСКАЛем и ФОРТРАНом ?

Главные две проблемы, которые должно решать соглашение о связях для Би:
- чтобы функции можно было вызывать как процедуры, игнорируя результат;
Результат возвращается в аккумуляторе на ФОРТРАНе, игнорировать очень просто.
 
- чтобы работал printf() с переменным числом аргументов.
Но в Пиринском паскале было возможно вызывать функцию, передавая разное количество аргументов. 
 
Ни Паскалевские, ни Фортрановские соглашения тут не годятся, увы.
Сергей, можно продолжить дискуссию в теме про соглашениях о вызовах?
Мне это очень интересно, и думаю всем будет полезно.

Пиринский паскаль мог вызывать ФОРТРАН и АЛГОЛ, хотя с расширенными словами FORTRAN.

(Занудно)
Пиринский Паскаль не мог "вызывать АЛГОЛ".

Он умел только в «стандартное соглашение о вызовах МС Дубна». 
Соответственно, мог вызывать только тех, кто умел такое изображать из себя.

Алгол (опять-таки занудно - "Алгол-ГДР", «Алгол БЭСМ-6» тут вообще и рядом не лежал) 
поддерживал такое соглашение, если его _заставить_ это сделать - (спецсловом ‘CODE’ перед описанием процедуры), 
Если такого указания ему не давать, то алгольные процедуры могли вызывать друг друга, с совершенно другим «собственным»
«Алголовским» соглашением о связях. О котором Пиринский Паскаль (как и вообще никто в МС Дубна) вообще не имел никакого представления.


Так что, «общим знаменателем» в МС Дубна - было именно соглашение о связях «по-Мазному» и все языки, которые 
хотели хоть с чем-то совмещаться, реализовывали именно его (в ту или в другую или сразу в обе стороны).

Но вот «проблему printf(…)» оно не решает. 

dol@

Хотелось бы прийти к общему знаменателю в теме


и реализовать в новописном компиляторе: https://groups.google.com/g/besm6/c/LJ91waEdhzE
 
--Сергей
 
понедельник, 28 апреля 2025 г. в 03:35:21 UTC+2, serge.v...@gmail.com: 
On Sunday, April 27, 2025 at 4:55:48 AM UTC-7 oxy...@gmail.com wrote:
Интересно, а что за соглашение о вызовах? С чем совместимо?

Это я наваял по старой памяти, наподобие сохранившихся csave и cret от Эльбруса-Б. Совместимо с Фортраном в одну сторону.

Из Би можно вызывать фортрановские процедуры без параметров, и наоборот. В исходниках read() можно видеть, как вызывается monread_(). Подчерк превращается в звёздочку в Мадлене, получается MONREAD*.

Из Би можно вызывать фортрановские функции с одним параметром - непосредственно. В качестве параметра надо передавать его адрес. Можно вызывать фортрановские процедуры с одним параметром, добавляя лишний первый аргумент. В функции init() так вызывается WBEGIN, а в flush() - WRCARD.
 
... 
 
--Сергей
понедельник, 21 апреля 2025 г. в 09:16:58 UTC+2, serge.v...@gmail.com: 
Раз уж у нас тут постепенно актуализировалась тема написания компиляторов, я тоже увлёкся и реализовал давнишнюю мечту: портонул Би с PDP-7 на БЭСМ-6.


Исходник компилятора: b-besm.b

Проект на Гитхабе: besm6/b-compiler

... 
--Сергей

-- 
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
--- 
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ceb890e0-646b-4d67-a9da-d1f2e1a60dafn%40googlegroups.com.

Serge Vakulenko

unread,
May 5, 2025, 6:19:08 PMMay 5
to БЭСМ-6
On Sunday, May 4, 2025 at 1:24:53 AM UTC-7 oxy...@gmail.com wrote:
воскресенье, 4 мая 2025 г. в 01:42:15 UTC+2, serge.v...@gmail.com:
Главные две проблемы, которые должно решать соглашение о связях для Би:
- чтобы функции можно было вызывать как процедуры, игнорируя результат;
Результат возвращается в аккумуляторе на ФОРТРАНе, игнорировать очень просто.

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

Не было в Паскале такой возможности, увы.
 
 Ни Паскалевские, ни Фортрановские соглашения тут не годятся, увы.
Сергей, можно продолжить дискуссию в теме про соглашениях о вызовах?
Мне это очень интересно, и думаю всем будет полезно.
Пиринский паскаль мог вызывать ФОРТРАН и АЛГОЛ, хотя с расширенными словами FORTRAN.
Хотелось бы прийти к общему знаменателю в теме и реализовать в новописном компиляторе: https://groups.google.com/g/besm6/c/LJ91waEdhzE

Я не думаю, что нам удастся прийти к общему знаменателю. 
Если уж разработчикам бесмовских компиляторов за много лет не удалось. 😀
Паскаль мог вызывать только Фортран.
Алгол мог вызывать только Фортран.
Фортран никого чужого не мог вызывать.
И оно не случайно так получилось: логика языка диктовала.
Для Би тоже логика языка диктует свои соглашения о связях.

--Сергей

Leo B.

unread,
May 5, 2025, 6:44:25 PMMay 5
to БЭСМ-6
На самом деле Фортран мог вызывать Алгол через CALL ALPROC, согласно Мазному, и мог вызывать паскалевские программы (от которых предварительно тем или иным способом был откушен вход PROGRAM, разумеется) как процедуры, согласно Пирину.

Leo

Serge Vakulenko

unread,
May 5, 2025, 6:53:36 PMMay 5
to БЭСМ-6
On Monday, May 5, 2025 at 3:44:25 PM UTC-7 Leo B. wrote:
На самом деле Фортран мог вызывать Алгол через CALL ALPROC, согласно Мазному, и мог вызывать паскалевские программы (от которых предварительно тем или иным способом был откушен вход PROGRAM, разумеется) как процедуры, согласно Пирину.

Про ALPROC ты упоминал как-то, но по жизни не попадалось. Пошёл отыскал в исходниках. Прикольный интерфейс.

 ALPROC:,NAME,         KOPPLUNG FORTRAN-ALGOL
C-----------------------------------------------------------------------
C  BEISPIEL EINES AUFRUFS
C    CALL ALPROC(P,'VAR' , X,'CONST', 1.3, 'PROC',P1,
C               'ARRAY1',V,10,'ARRAY2',W,10,10,5)
C    ENTSPRICHT DEM ALGOLAUFRUF  P(X,1.3,P1,V,W)
C    ERSTER PAR = AUFGER PROC,MUSS IN EXTERNAL STEHEN
C    LETZTER PAR = ANZAHL DER PAR DER ALGOLPROC
C-----------------------------------------------------------------------

--Сергей

Василий Долматов

unread,
May 6, 2025, 1:48:24 PMMay 6
to be...@googlegroups.com
мы пробовали… 
феерическая фигня, в реальной жизни неприменимая никак… 
сделана была явно «ради пущей пущести»… :)


реально работали в Алголе-ГДР вызовы в режиме ‘CODE’ в обе стороны (Фортран-Алгол и Алгол-Фортран) и
в режиме ‘ALGOL’ ( Алгол-Алгол)
 
dol@

6 мая 2025 г., в 01:53, Serge Vakulenko <serge.v...@gmail.com> написал(а):

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/b6d660e2-0fe9-425b-9af1-e06f7303a6b5n%40googlegroups.com.

Leo B.

unread,
May 6, 2025, 2:12:32 PMMay 6
to БЭСМ-6
On Tuesday, May 6, 2025 at 10:48:24 AM UTC-7 ReedCat wrote:
мы пробовали… 
феерическая фигня, в реальной жизни неприменимая никак… 
сделана была явно «ради пущей пущести»… :)


реально работали в Алголе-ГДР вызовы в режиме ‘CODE’ в обе стороны (Фортран-Алгол и Алгол-Фортран) и
в режиме ‘ALGOL’ ( Алгол-Алгол)

Василий,

Сконструируй, пожалуйста, пример вызова алгольной процедуры с параметрами из Фортрана в режиме 'CODE'.
С помощью онлайн-эмулятора https://mailcom.com/besm6/runitnew.cgi , если под рукой нет другого.

Спасибо,
Leo
 


Василий Долматов

unread,
May 6, 2025, 4:01:23 PMMay 6
to be...@googlegroups.com


6 мая 2025 г., в 21:12, Leo B. <leo...@gmail.com> написал(а):

On Tuesday, May 6, 2025 at 10:48:24 AM UTC-7 ReedCat wrote:
мы пробовали… 
феерическая фигня, в реальной жизни неприменимая никак… 
сделана была явно «ради пущей пущести»… :)


реально работали в Алголе-ГДР вызовы в режиме ‘CODE’ в обе стороны (Фортран-Алгол и Алгол-Фортран) и
в режиме ‘ALGOL’ ( Алгол-Алгол)

Василий,

Сконструируй, пожалуйста, пример вызова алгольной процедуры с параметрами из Фортрана в режиме 'CODE’.
попробую, если сумею понять, что от меня требуется.

есть процедура на фортране, которая должна вызвать алгольную и что-то оттуда получить?

С помощью онлайн-эмулятора https://mailcom.com/besm6/runitnew.cgi , если под рукой нет другого.

Спасибо,
Leo
 



--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ba2cd03a-9a48-4de3-9b4e-6ee17d299804n%40googlegroups.com.

Василий Долматов

unread,
May 6, 2025, 4:23:58 PMMay 6
to be...@googlegroups.com
да, интересно, что вызов проходит нормально, а вот печать в фортране после возврата - … 

*name ALGOL
*algol

    'code':'procedure' sub;
    
    'begin'
'integer' a, b;
        b:= 6;    a := 7;
        print(''First in sub : a='', a, '' b='', b, newline);
    'end'
'eop'
*FTN
      PROGRAM E
      INTEGER A,B
      A=1
      B=4
      PRINT 2
 2    FORMAT ('TEST') 
      CALL SUB
      PRINT 3
 3    FORMAT ('TEST2')
      PRINT 1, A, B
 1    FORMAT ('FINAL',2I6)
      END
*execute
*end file


что и где с этими принтами не так - сложно понять


6 мая 2025 г., в 21:12, Leo B. <leo...@gmail.com> написал(а):

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ba2cd03a-9a48-4de3-9b4e-6ee17d299804n%40googlegroups.com.

Leo B.

unread,
May 6, 2025, 5:16:10 PMMay 6
to БЭСМ-6
У Мазного сказано, что для правильной работы Алгола головная программа должна быть на Алголе. Если я делаю

*name ALGOL
*algol
    'code':'procedure' sub;
    'begin'
'integer' a, b;
        b:= 6;    a := 7;
        print(''First in sub : a='', a, '' b='', b, newline);
    'end'
'eop'
*FTN
      subroutine E

      INTEGER A,B
      A=1
      B=4
      PRINT 2
 2    FORMAT ('TEST')
      CALL SUB
      PRINT 3
 3    FORMAT ('TEST2')
      PRINT 1, A, B
 1    FORMAT ('FINAL',2I6)
      END
*algol
'code':e; 'begin' e 'end' 'eop'
*execute
*end file

То печатается
TEST
 FIRST IN SUB : A= 7 B= 6

Но потом всё равно падает.

Leo

Василий Долматов

unread,
May 7, 2025, 1:42:10 AMMay 7
to be...@googlegroups.com
угу, в очередной раз скачал Мазного, почитал, поразился, несколько раз зациклил эмулятор, опять поразился… :)

да, пока не готов повторить утверждение, что «в обе стороны»… 

еще немного поковыряю… пока лень не разлучит нас… :)

dol@

7 мая 2025 г., в 00:16, Leo B. <leo...@gmail.com> написал(а):

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/dd5aa9e9-2ba4-4b3c-9b7b-12eb704ccb39n%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages