COBOL 的依赖管理
Dependency Management for COBOL
COBOL 世界中是否存在传递依赖管理之类的东西?
是否有任何类型的 COBOL 二进制文件存储库系统?
您的(非常广泛但仍然有效的)问题的答案将是 "NO",正如评论中已经暗示的那样。对于这个答案,我将 "dependency management software" 定义为一种软件,它可以帮助查看 运行 一个应用程序(由许多 COBOL 程序组成 [否则你不需要为此进行管理] 需要哪些程序和文件) ), 理想版本[对于程序 X 的版本 N,我需要版本 M 中的程序 Y 和 Z,以及文件 A 和 B]。
使 COBOL 的工作依赖系统变得困难的是,您将拥有一个易于跟踪的源级别依赖(仅由源和副本书组成)和一个您无法跟踪的 运行时间依赖:
CALL "SOMEMODULE"
(或多或少的静态调用)可以很容易地跟踪,但您经常会看到 CALL somemodule
(实际模块名称存储在变量中的高度动态调用)。对于后者,您必须检查变量可以获得的所有可能值(有时只有一个简单的 MOVE "PROG"
直接在 CALL
之前,有时变量会被子程序甚至更改取自 file/DB/whatever)。
您通常拥有的第二个依赖项是 files/DB-connections。这些大多不像 ASSIGN to "file1"
那样是静态的,而是动态的 ASSIGN TO filename
,与动态程序调用一样存在相同的问题。
因此,您通常没有真正的依赖关系管理(如上定义),而只有 "snapshots" [编译] COBOL 程序和文件的版本,其中包含(应该)工作的所有内容。
在 "Windows/Unix world" 中,您将它们放在存档、备份程序(可能是增量的)或适用于二进制文件的版本管理中。
您可以查看一些 IBM 工具——用于二进制文件的 Rational Asset Manager 和用于依赖项的 Websphere Asset Analyzer。
您的问题与 Cobol
无关,但与 BS2000
(您的操作系统)相关,因为您只使用二进制文件。
对于 C++,您可以找到许多库(在 Linux、Windows、BS2000 上),您可以将它们导入到您的系统中并构建(如果可能)并放入 LMS 库中L型元件(BS2000)。
在过去(2005 年),我为 BS2000
编写了一个比 EDT
(BS2000 西门子编辑器)更强大的新编辑器,其中我添加了 Regex
功能,包括PCRE
图书馆。
我在 BS2000
上下载了 PCRE
源代码,并且我已经迁移了他的代码,以便所有模块都能正常工作。
完成后,我将二进制文件放入名为 BREGEX.B.LMSLIB
的库中,其版本号与 PCRE
库相同。
现在,每次我想在 C++ 程序和 COBOL 程序中使用 Regex
时,我都会将此模块包含在 BINDER
脚本中(BS2000 上的 link 编辑器取代了 TSOSLNK)使用 //RESOLVE-MODULES
或 //INCLUDE-LIBRARY
BINDER 命令的脚本。
如果此 L
模块需要来自其他库的其他模块,我必须在我的 BINDER
脚本中明确包含这些模块。
由于 link 版本完全由 BS2000
程序(BS2000 中的脚本)完成,您可以混合使用 BINDER
命令和 BS2000
变量以包含所有依赖项。
示例:
/START-BINDER
//INCLUDE-MODULE <main-program-name>
//RESOLVE-LIBRARY BREGEX.B.LMSLIB
//RESOLVE-LIBRARY LOGGING-LIBRARY-FOR-BREGEX
//RESOLVE-LIBRARY DEPENDENCY-LIBRARY-2-FOR-BREGEX
//END
或使用 BS2000
'scripting' 变量
/INCLUDE-PROCEDURE INIT-BINDER-SCRIPTING-VARIABLE
/START-BINDER
//INCLUDE-MODULE <main-program-name>
/BREAK
/&(RESOLVE-BREGEX)
/RESOLVE
//END
PS:我在没有一些例子的情况下回答,因为我正在度假,但如果有人问一些例子(使用评论),我可以在我的家用电脑上找到它们并提供更多信息。
关于信息,我已经 12 年多没有在 BS2000 上编程了,我一直保留着我的编辑器的资源!
COBOL 世界中是否存在传递依赖管理之类的东西?
是否有任何类型的 COBOL 二进制文件存储库系统?
您的(非常广泛但仍然有效的)问题的答案将是 "NO",正如评论中已经暗示的那样。对于这个答案,我将 "dependency management software" 定义为一种软件,它可以帮助查看 运行 一个应用程序(由许多 COBOL 程序组成 [否则你不需要为此进行管理] 需要哪些程序和文件) ), 理想版本[对于程序 X 的版本 N,我需要版本 M 中的程序 Y 和 Z,以及文件 A 和 B]。
使 COBOL 的工作依赖系统变得困难的是,您将拥有一个易于跟踪的源级别依赖(仅由源和副本书组成)和一个您无法跟踪的 运行时间依赖:
CALL "SOMEMODULE"
(或多或少的静态调用)可以很容易地跟踪,但您经常会看到 CALL somemodule
(实际模块名称存储在变量中的高度动态调用)。对于后者,您必须检查变量可以获得的所有可能值(有时只有一个简单的 MOVE "PROG"
直接在 CALL
之前,有时变量会被子程序甚至更改取自 file/DB/whatever)。
您通常拥有的第二个依赖项是 files/DB-connections。这些大多不像 ASSIGN to "file1"
那样是静态的,而是动态的 ASSIGN TO filename
,与动态程序调用一样存在相同的问题。
因此,您通常没有真正的依赖关系管理(如上定义),而只有 "snapshots" [编译] COBOL 程序和文件的版本,其中包含(应该)工作的所有内容。
在 "Windows/Unix world" 中,您将它们放在存档、备份程序(可能是增量的)或适用于二进制文件的版本管理中。
您可以查看一些 IBM 工具——用于二进制文件的 Rational Asset Manager 和用于依赖项的 Websphere Asset Analyzer。
您的问题与 Cobol
无关,但与 BS2000
(您的操作系统)相关,因为您只使用二进制文件。
对于 C++,您可以找到许多库(在 Linux、Windows、BS2000 上),您可以将它们导入到您的系统中并构建(如果可能)并放入 LMS 库中L型元件(BS2000)。
在过去(2005 年),我为 BS2000
编写了一个比 EDT
(BS2000 西门子编辑器)更强大的新编辑器,其中我添加了 Regex
功能,包括PCRE
图书馆。
我在 BS2000
上下载了 PCRE
源代码,并且我已经迁移了他的代码,以便所有模块都能正常工作。
完成后,我将二进制文件放入名为 BREGEX.B.LMSLIB
的库中,其版本号与 PCRE
库相同。
现在,每次我想在 C++ 程序和 COBOL 程序中使用 Regex
时,我都会将此模块包含在 BINDER
脚本中(BS2000 上的 link 编辑器取代了 TSOSLNK)使用 //RESOLVE-MODULES
或 //INCLUDE-LIBRARY
BINDER 命令的脚本。
如果此 L
模块需要来自其他库的其他模块,我必须在我的 BINDER
脚本中明确包含这些模块。
由于 link 版本完全由 BS2000
程序(BS2000 中的脚本)完成,您可以混合使用 BINDER
命令和 BS2000
变量以包含所有依赖项。
示例:
/START-BINDER
//INCLUDE-MODULE <main-program-name>
//RESOLVE-LIBRARY BREGEX.B.LMSLIB
//RESOLVE-LIBRARY LOGGING-LIBRARY-FOR-BREGEX
//RESOLVE-LIBRARY DEPENDENCY-LIBRARY-2-FOR-BREGEX
//END
或使用 BS2000
'scripting' 变量
/INCLUDE-PROCEDURE INIT-BINDER-SCRIPTING-VARIABLE
/START-BINDER
//INCLUDE-MODULE <main-program-name>
/BREAK
/&(RESOLVE-BREGEX)
/RESOLVE
//END
PS:我在没有一些例子的情况下回答,因为我正在度假,但如果有人问一些例子(使用评论),我可以在我的家用电脑上找到它们并提供更多信息。
关于信息,我已经 12 年多没有在 BS2000 上编程了,我一直保留着我的编辑器的资源!