Мне нужно скомпилировать исходные коды Cobol в z / OS UNIX с помощью компилятора Cobol 4, но у меня есть только компилятор Cobol 5. Есть ли варианты ограничить Cobol 5 компиляцией Cobol 4? Я использую команду cob2, которую я смонтировал на PDS IGY520.HFS моей установки Cobol на z / OS. Я искал в документации IBM, но ничего не нашел.





Программы COBOL 5 обратно совместимы с COBOL 4 (они могут вызывать друг друга), но COBOL 5 не создает объектных модулей COBOL 4. Зачем нужна компиляция COBOL 4?
COBOL V5 будет компилировать программы, которые COBOL V4 может компилировать; Единственная проблема с синтаксисом, с которой вы столкнетесь, - это если ваша программа использует что-то новое зарезервированное слово в V5, и если да, то это легко исправить. Во время компиляции вам не понадобятся никакие библиотеки. При запуске программы, скомпилированной с помощью V5, вам понадобится среда выполнения V5, но если предположить, что V5 и LE (языковая среда, частью которой является среда выполнения COBOL) установлены правильно, это не будет проблемой.
Что касается совместимости с другими программами, код V5 совместим с любым старым кодом COBOL, за исключением кода, скомпилированного с OS / VS COBOL. Вы можете увидеть различия в поведении, если какая-либо из программ COBOL в вашем приложении использует недопустимые данные. Я делаю ежеквартальную презентацию о проблемах перехода на COBOL V5 / V6, которые вы, возможно, захотите изучить; предыдущие записи и слайды можно найти здесь: ibm.ent.box.com/v/COBOLMigrationWorkshops
Есть одно важное различие между скомпилированным кодом V4 и V5: EC V5 создает объектный код в формате GOFF, который связыватель использует для создания программных объектов вместо модулей загрузки. Таким образом, с V5 требуется, чтобы все загружаемые библиотеки были PDSE, а не PDS (я не знаю наверняка об объектах-библиотеках, но PDSE там тоже не повредит).
Не то, чтобы я в курсе. Я вижу, что может быть полезно следующее.
CMPR2, FLAGMIG, and NOCOMPILE compiler options
The COBOL CMPR2, FLAGMIG, and NOCOMPILE options identify source statements that need to be converted to compile under Enterprise COBOL. The CMPR2 and FLAGMIG options are not available in Enterprise COBOL, but you can use your older compilers with these options to flag the statements that need to be changed in order to compile with Enterprise COBOL.
Enterprise COBOL> V4.2 FLAGMIG4 compiler option
A new compiler option, FLAGMIG4, is available with APAR PM93450 for Enterprise COBOL V4.2 to help you migrate to Enterprise COBOL V5 or V6. It is also recommended that you install PTFs for APARs PI12240, PI26838, and PI58762 as these contain updates to the FLAGMIG4 option. The FLAGMIG4 option identifies language elements in Enterprise COBOL V4 programs that are not supported, or that are supported differently in Enterprise COBOL V5 or V6. The compiler generates a warning diagnostic message for all such language elements.
Нет. Я настоятельно рекомендую вам изучить руководство по миграции, и любой ПОДЕЛИТЬСЯ презентациями по теме миграции, к сожалению, SHARE больше не делает свой отличный контент доступным для лиц, не являющихся участниками.
Наиболее распространенные проблемы связаны с недопустимыми данными, допускаемыми старыми компиляторами. Цитата из презентации SHARE Тома Росса ссылка выше ...
77 A1 PIC X(4) VALUE ’00 0’. *> x’F0F040F0’, third byte *> has x’4’ for zone bits. *> OK in PIC X, not valid in *> PIC 9 USAGE DISPLAY 77 A2 REDEFINES A1 PIC 9(4). PROCEDURE DIVISION. IF A2 = ZERO *> Compiler could do character DISPLAY ’ZERO‘ *> or numeric compare ELSE DISPLAY ’NOT ZERO‘ END-IFWhether the program displays ‘ZERO’ or ‘NOT ZERO’ depends on the compiler options you use in COBOL V4 and earlier and in COBOL V6
Также помните о различиях в том, как обрабатываются упакованные данные, посмотреть этот недавний вопрос.
Параметр компиляции NUMCHECK может помочь вам в этих ситуациях, но имейте в виду, что параметры компиляции не могут обнаруживать недопустимые данные во время компиляции, они могут только генерировать код для обнаружения недопустимых данных во время выполнения.
Спасибо за подробный ответ
Я не уверен, что моя программа будет совместима с большей частью z / OS, если я скомпилирую ее в COBOL 5. Требуются ли для скомпилированного объекта COBOL 5 определенные установленные библиотеки на целевой z / OS, или они просто объект, и нет никакого способа объект COBOL 4 будет работать, а COBOL 5 - нет? Кроме того, в моих источниках есть особый синтаксис COBOL4.