GnuCOBOL
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
Original author(s) | Keisuke Nishida, Roger While |
---|---|
Developer(s) | Edward Hart, Sergey Kashyrin, Ron Norman, Simon Sobisch and many others. |
Initial release | 25 January 2002 |
Stable release | 3.2[1]
/ 28 July 2023 |
Repository | sf |
Written in | C, with a C++ branch |
Size | 2 MB |
Available in | English, German, Italian, Japanese, Spanish |
Type | Programming language |
License | GPL with runtime libraries under LGPL |
Website | gnu |
GnuCOBOL (formerly OpenCOBOL, and for a short time known as GNU Cobol) is a free implementation of the COBOL programming language that is part of the GNU project. GnuCOBOL transcompiles the COBOL source to C before compiling it using the native C compiler.[2]
History
While working with Rildo Pragana on TinyCOBOL, Keisuke Nishida decided to attempt a COBOL compiler suitable for integration with GCC. This soon became the OpenCOBOL project. Nishida worked as the lead developer until 2005 and version 0.31. Roger While then took over as lead and released OpenCOBOL 1.0 on 27 December 2007. Work on the OpenCOBOL 1.1 pre-release continued until February 2009. In May 2012, active development was moved to SourceForge, and the pre-release of February 2009 was marked as a release.[3] In late September 2013, OpenCOBOL was accepted as a GNU Project, renamed to GNU Cobol, and then finally to GnuCOBOL in September 2014.[4] Ron Norman has added a Report Writer module as a branch of GnuCobol 2.0, and Sergey Kashyrin has developed a version that uses C++ intermediates instead of C.[5]
Transfer of copyrights to the Free Software Foundation over GnuCOBOL source code (including versions with GNU Cobol and OpenCOBOL spellings) was finalized on 17 June 2015.[6]
The latest current release is v3.2, which was released on 28 July 2023.
Philosophy
The factual accuracy of parts of this article (those related to number of tests passed (9732 now?), see GnuCOBOL FAQ) may be compromised due to out-of-date information. (April 2021) |
While striving to keep in line with COBOL Standards up to the current COBOL 2014 specification, and also to include features common in existing compilers, the developers do not claim any level of standards conformance.[7] Even so, the 2.2 final release passes over 9,688 (99.79%) of the tests included in the NIST COBOL 85 test suite, out of 9,708 (as 20 are deleted).[8]
GnuCOBOL translates a COBOL program (source code) into a C program. The C program can then be compiled into the actual code used by the computer (object code) or into a library where other programs can call (link to) it. Under UNIX and similar operating systems (such as Linux), the GNU C compiler is used. For Windows, Microsoft’s Visual Studio Express package provides the C compiler. The two step compilation is usually performed by a single command, but an option exists to allow the programmer to stop compilation after the C code has been generated.[9]
Documentation
The official home of the development team from 2002 until 2012 was the opencobol.org site, and was the main source of upstream development information.[10] However, recent[when?] developments are now taking place within a SourceForge project space at GnuCOBOL.
The GnuCOBOL Programmer's Guide, by Gary Cutler, was published under the GNU Free Documentation License.[9] It has been updated to include GnuCOBOL with Report Writer and is listed in the GnuCOBOL documentation overview page with latest versions in the code tree.[11] It is currently maintained by Vincent Coen and others as each new compiler version is issued and is available at GnuCOBOL - GNU Project.
Example programs
Historical
000100* HELLO.COB GnuCOBOL example
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. hello.
000400 PROCEDURE DIVISION.
000500 DISPLAY "Hello, world!".
000600 STOP RUN.
Compilation and execution:
$ cobc -x HELLO.COB
$ ./HELLO
Hello, world!
Modern, free format
*> GnuCOBOL Hello World example
id division.
program-id. hello.
procedure division.
display "Hello, world!" end-display
goback.
Compilation and execution:
$ cobc -x -free hello.cob
$ ./hello
Hello, world!
Shortest
The shortest valid COBOL program, with the relaxed syntax option in GnuCOBOL 2.0, is a blank file. Compilation and execution:
$ cobc -x -frelax-syntax ./empty.cob
./empty.cob: 1: Warning: PROGRAM-ID header missing - assumed
$ ./empty
$
For earlier versions and with relaxed syntax:
display"Hello, world!".
Compilation and execution:
$ cobc -x -frelax-syntax -free hello.cob
hello.cob: 1: Warning: PROGRAM-ID header missing - assumed
hello.cob: 1: Warning: PROCEDURE DIVISION header missing - assumed
$ ./hello
Hello, world!
Without relaxed syntax and with any version of GnuCOBOL, GNU Cobol or OpenCOBOL. (Note, there are 7 leading spaces to conform to FIXED layout COBOL source):
program-id.h.procedure division.display "Hello, world!".
Compilation occurs without errors:
$ cobc -x smallest.cob
$ ./smallest
Hello, world!
Please note that these trivia listings are not to be regarded as good COBOL form; COBOL was designed to be a readable English programming language.
Implementation
The parser and lexical scanner use Bison and Flex. The GPL licensed compiler and LGPL licensed run-time libraries are written in C and use the C ABI for external program linkage.
Build packaging uses the GNU Build System. Standard tests with make check
use Autoconf, ANSI85 testsuite run by make test
use Perl scripts.
The configure script that sets up the GnuCOBOL compile has options that include:
- choice of C compiler and its options for post translation compilation
- database management system for ISAM support
- inclusion of iconv
Availability
- 1.0 release from SourceForge.[12]
- 1.1 release from SourceForge[13]
- 2.0 development release from SourceForge[14]
- open-cobol Debian package.[15]
- 2.2 Final, released 7 September 2017 from SourceForge[16]
- 2.2 Documentation, released September 2017 from the SourceForge Code Tree.
- 3.1 Released July 2020 along with the documentation.
- 3.2 Released July 2023 along with the documentation.
References
- ^ Simon Sobisch (28 July 2023). "Release of GnuCOBOL 3.2". Retrieved 29 July 2023.
- ^ "README". ftp.gnu.org.
- ^ Tiffin, Brian (19 October 2013). "OpenCOBOL FAQ". What is the current version of OpenCOBOL?. Retrieved 13 December 2013.
- ^ Tiffin, Brian. "GNU Cobol is now a real thing". Archived from the original on 5 October 2013. Retrieved 1 October 2013.
- ^ Sobisch, Simon (6 November 2013). "Work in Progress". GNU Cobol 2.0 C++. Archived from the original on 10 May 2020. Retrieved 11 May 2014.
- ^ Tiffin, Brian. "State of the Project". Archived from the original on 7 March 2016. Retrieved 23 July 2015.
- ^ "OpenCOBOL FAQ". 17 October 2013. How complete is OpenCOBOL?. Retrieved 7 June 2014.
While OpenCOBOL can be held to a high standard of quality and robustness, the authors DO NOT claim it to be a "Standard Conforming" implementation of COBOL.
- ^ "OpenCOBOL FAQ". Does OpenCOBOL pass the NIST Test Suite?. Retrieved 9 October 2013.
- ^ a b Cutler, Gary. "OpenCOBOL Programmer's Guide" (PDF). Opencobol.addltocobol.com. Retrieved 20 November 2012.
- ^ "An open-source COBOL compiler". OpenCOBOL. Retrieved 20 November 2012.
- ^ Cutler, Gary. "GnuCOBOL Guides". Opencobol.addltocobol.com. Retrieved 22 July 2015.
- ^ "GnuCOBOL - Browse Files at". Sourceforge.net. 27 December 2007. Retrieved 28 October 2015.
- ^ GnuCOBOL downloads at SourceForge
- ^ GnuCOBOL downloads at SourceForge
- ^ "Debian -- Details of package open-cobol in buster". packages.debian.org.
- ^ GnuCOBOL downloads at SourceForge