Обман трудящихся в Фортране
Aug. 25th, 2025 06:22 pmДопустим, захотелось нам в Фортране сделать указатель на функцию PF и сделать его указывающим на функцию F.
Пишем
Так, разумеется, нельзя. Все три компилятора, указывая на строку присваивания, говорят
Форекс: ФYHKЦ F БEЗ APГ
Фортран-Дубна:
HEПPABИЛЬHO ИCПOЛЬЗOBAHO HAИMEHOBAHИE ФYHKЦИИ.
OШИБOЧHЫЙ OПEPATOP ЛИБO ПPOПYЩEH ЗHAK OПEPAЦИИ.
Фортран-ГДР: IMPROPER USE OF IDENTIFIER >F<
Теперь будем не присваивать, а попробуем сделать рассылку данных:
Форекс говорит то же самое, что и раньше, Фортран-ГДР - ILLEGAL ITEM IN DATA SET PART, а вот Фортран-Дубна...
CЧETЧИK ПOBTOPEHИЙ DOЛЖEH БЫTЬ ЦEЛOЙ KOHCTAHTOЙ B ПPEDEЛAX 1 - 32767.
не указывая конкретно никуда, а потом еще и
Ах, так!
Так, разумеется, компилируется, куда оно денется. Теперь попробуем это дело вызвать.
Вылетает на контроль команды (вот он, обман трудящихся). Тогда пишем
И вот так работает.
Пишем
PROGRAM MAIN
EXTERNAL F
PF = F
END
Так, разумеется, нельзя. Все три компилятора, указывая на строку присваивания, говорят
Форекс: ФYHKЦ F БEЗ APГ
Фортран-Дубна:
HEПPABИЛЬHO ИCПOЛЬЗOBAHO HAИMEHOBAHИE ФYHKЦИИ.
OШИБOЧHЫЙ OПEPATOP ЛИБO ПPOПYЩEH ЗHAK OПEPAЦИИ.
Фортран-ГДР: IMPROPER USE OF IDENTIFIER >F<
Теперь будем не присваивать, а попробуем сделать рассылку данных:
PROGRAM MAIN
EXTERNAL F
DATA PF/F/
END
Форекс говорит то же самое, что и раньше, Фортран-ГДР - ILLEGAL ITEM IN DATA SET PART, а вот Фортран-Дубна...
CЧETЧИK ПOBTOPEHИЙ DOЛЖEH БЫTЬ ЦEЛOЙ KOHCTAHTOЙ B ПPEDEЛAX 1 - 32767.
не указывая конкретно никуда, а потом еще и
ABTOKOД MADLEN
(1.10.72)
ДЛИHA ПOДПPOГPAMMЫ ПPEBЫШAET BOЗMOЖHOCTИ MAШИHЫ
, OCT , 00000000 00000000
Ах, так!
PROGRAM MAIN
EXTERNAL F
PF = CAST(F)
END
FUNCTION CAST(F)
CAST=F
RETURN
END
Так, разумеется, компилируется, куда оно денется. Теперь попробуем это дело вызвать.
PROGRAM MAIN
EXTERNAL F
PF = CAST(F)
CALL CALL(PF)
END
FUNCTION CAST(F)
CAST=F
RETURN
END
SUBROUTINE CALL(F)
CALL F
RETURN
END
SUBROUTINE F
PRINT 1
1 FORMAT('HELLO WORLD')
RETURN
END
Вылетает на контроль команды (вот он, обман трудящихся). Тогда пишем
PROGRAM MAIN
EXTERNAL F
CALL CAST(F, PF)
CALL CALL(PF)
END
SUBROUTINE CALL(F)
CALL F
RETURN
END
SUBROUTINE F
PRINT 1
1 FORMAT('HELLO WORLD')
RETURN
END
*assem
CAST:,NAME,
14,STI,
,AOX,=3000000
14,CTX,
,STX,
13,UJ,
,END,
И вот так работает.
no subject
Date: 2025-08-26 03:13 am (UTC)no subject
Date: 2025-08-26 03:16 am (UTC)