GnuCOBOL

Last updated

GnuCOBOL
Original author(s) Keisuke Nishida, Roger While
Developer(s) Edward Hart, Sergey Kashyrin, Ron Norman, Simon Sobisch and many others.
Initial release25 January 2002;22 years ago (2002-01-25)
Stable release
3.2 [1]   OOjs UI icon edit-ltr-progressive.svg / 28 July 2023;15 months ago (28 July 2023)
Repository sf.net/p/gnucobol/code
Written in C, with a C++ branch
Size 2 MB
Available inEnglish, German, Italian, Japanese, Spanish
Type Programming language
License GPL with runtime libraries under LGPL
Website gnu.org/software/gnucobol

GnuCOBOL (formerly known as OpenCOBOL, and briefly as GNU Cobol) is a free implementation of the COBOL programming language that is part of the GNU project. GnuCOBOL translates the COBOL code into C and then compiles it using the native C compiler. [2]

Contents

History

While collaborating with Rildo Pragana on TinyCOBOL, Keisuke Nishida initiated the development of a COBOL compiler designed for integration with GCC, which led to the creation of the OpenCOBOL project. Nishida served as the lead developer until 2005, up to version 0.31. Roger While succeeded him as the lead developer and released OpenCOBOL 1.0 on December 27, 2007. Development on the OpenCOBOL 1.1 pre-release continued until February 2009. In May 2012, active development transitioned to SourceForge, and the February 2009 pre-release was officially 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 contributed a Report Writer module as a branch of GnuCobol 2.0, and Sergey Kashyrin 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

While aiming to adhere to COBOL standards, including the COBOL 2014 specification and features commonly found in existing compilers, the developers do not assert any formal level of standards conformance. [7] Nevertheless, the 2.2 final release successfully passes 9,688 out of 9,708 tests (99.79%) from the NIST test suite, with 20 tests excluded. [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. On UNIX and similar operating systems (such as Linux), the GNU C compiler is used for this process. On Windows, the C compiler provided by Microsoft's Visual Studio Express package is used. Although the two-step compilation process is typically performed with a single command, an option is available to halt the process after the C code has been generated. [9]

Documentation

From 2002 until 2012, the official home of the development team was the opencobol.org website, which served as the primary source of upstream development information. [10] However, more recent[ when? ] developments have shifted to a SourceForge project space under 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 example000200IDENTIFICATIONDIVISION.000300PROGRAM-ID.hello.000400PROCEDUREDIVISION.000500DISPLAY "Hello, world!".000600STOPRUN.

Compilation and execution:

$ cobc-xHELLO.COB $ ./HELLO Hello, world!

Modern, free format

*> GnuCOBOL Hello World exampleiddivision.program-id.hello.proceduredivision.display "Hello, world!"end-displaygoback.

Compilation and execution:

$ cobc-x-freehello.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-freehello.cob hello.cob: 1: Warning: PROGRAM-ID header missing - assumedhello.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.proceduredivision.display "Hello, world!".

Compilation occurs without errors:

$ cobc-xsmallest.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:

Availability

Related Research Articles

<span class="mw-page-title-main">Bash (Unix shell)</span> GNU replacement for the Bourne shell

Bash, short for Bourne-Again SHell, is a shell program and command language supported by the Free Software Foundation and first developed for the GNU Project by Brian Fox. Designed as a 100% free software alternative for the Bourne shell, it was initially released in 1989. Its moniker is a play on words, referencing both its predecessor, the Bourne shell, and the concept of rebirth.

<span class="mw-page-title-main">GNU</span> Free software collection

GNU is an extensive collection of free software, which can be used as an operating system or can be used in parts with other operating systems. The use of the completed GNU tools led to the family of operating systems popularly known as Linux. Most of GNU is licensed under the GNU Project's own General Public License (GPL).

A "Hello, World!" program is generally a simple computer program that emits to the screen a message similar to "Hello, World!". A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a sanity check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.

An integrated development environment (IDE) is a software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, and a debugger. Some IDEs, such as IntelliJ IDEA, Eclipse and Lazarus contain the necessary compiler, interpreter or both; others, such as SharpDevelop and NetBeans, do not.

The Open Source Definition (OSD) is a document published by the Open Source Initiative. Derived from Bruce Perens' Debian Free Software Guidelines, the definition is the most common standard for open-source software. The definition has ten criteria, such as requiring freely accessed source code and granting the open-source rights to everyone who receives a copy of the program. Covering both copyleft and permissive licenses, it is effectively identical to the definition of free software, but motivated by more pragmatic and business-friendly considerations. The Open Source Initiative's board votes on proposals of licenses to certify that they are compliant with the definition, and maintains a list of compliant licenses on its website. The definition has been adapted into the Open Knowledge Foundation's Open Definition for open knowledge and into open hardware definitions.

<span class="mw-page-title-main">Liberty BASIC</span>

Liberty BASIC (LB) is a commercial computer programming language and integrated development environment (IDE). It has an interpreter, developed in Smalltalk, which recognizes its own dialect of the BASIC programming language. It runs on 16- and 32-bit Windows and OS/2.

<span class="mw-page-title-main">Source Mage</span> Linux distribution

Source Mage is a source-based Linux distribution descended from Sorcerer. Components of this operating system are downloaded as source code and compiled locally on the user's computer.

A compile farm is a server farm, a collection of one or more servers, which has been set up to compile computer programs remotely for various reasons. Uses of a compile farm include:

Object Pascal is an extension to the programming language Pascal that provides object-oriented programming (OOP) features such as classes and methods.

The GNU Assembler, commonly known as gas or as, is the assembler developed by the GNU Project. It is the default back-end of GCC. It is used to assemble the GNU operating system and the Linux kernel, and various other software. It is a part of the GNU Binutils package.

<span class="mw-page-title-main">FreeBASIC</span> BASIC dialect

FreeBASIC is a free and open source multiplatform compiler and programming language based on BASIC licensed under the GNU GPL for Microsoft Windows, protected-mode MS-DOS, Linux, FreeBSD and Xbox. The Xbox version is no longer maintained.

<span class="mw-page-title-main">Mathomatic</span> Computer algebra system

Mathomatic is a free, portable, general-purpose computer algebra system (CAS) that can symbolically solve, simplify, combine and compare algebraic equations, and can perform complex number, modular, and polynomial arithmetic, along with standard arithmetic. It can perform symbolic calculus (derivative, extrema, Taylor series, and polynomial integration and Laplace transforms), numerical integration, and can handle all elementary algebra except logarithms. Trigonometric functions can be entered and manipulated using complex exponentials, with the GNU m4 preprocessor. Not currently implemented are general functions such as f(x), arbitrary-precision and interval arithmetic, as well as matrices.

<span class="mw-page-title-main">Tiny C Compiler</span> Compiler for the C programming language

The Tiny C Compiler is an x86, X86-64 and ARM processor C compiler initially written by Fabrice Bellard. It is designed to work for slow computers with little disk space. Windows operating system support was added in version 0.9.23. TCC is distributed under the GNU Lesser General Public License.

<span class="mw-page-title-main">CMake</span> Cross-platform, compiler-independent build system generator

In software development, CMake is cross-platform free and open-source software for build automation, testing, packaging and installation of software by using a compiler-independent method. CMake is not a build system itself; it generates another system's build files. It supports directory hierarchies and applications that depend on multiple libraries. It can invoke native build environments such as Make, Qt Creator, Ninja, Android Studio, Apple's Xcode, and Microsoft Visual Studio. It has minimal dependencies, requiring only a C++ compiler on its own build system.

<span class="mw-page-title-main">GNU General Public License</span> Series of free software licenses

The GNU General Public Licenses are a series of widely used free software licenses, or copyleft licenses, that guarantee end users the freedoms to run, study, share, and modify the software. The GPL was the first copyleft license for general use and was originally written by Richard Stallman, the founder of the Free Software Foundation (FSF), for the GNU Project. The license grants the recipients of a computer program the rights of the Free Software Definition. The licenses in the GPL series are all copyleft licenses, which means that any derivative work must be distributed under the same or equivalent license terms. It is more restrictive than the Lesser General Public License and even further distinct from the more widely-used permissive software licenses such as BSD, MIT, and Apache.

<span class="mw-page-title-main">Go (programming language)</span> Programming language

Go is a statically typed, compiled high-level general purpose programming language. It was designed at Google in 2009 by Robert Griesemer, Rob Pike, and Ken Thompson. It is syntactically similar to C, but also has memory safety, garbage collection, structural typing, and CSP-style concurrency. It is often referred to as Golang because of its former domain name, golang.org, but its proper name is Go.

Objective-C is a high-level general-purpose, object-oriented programming language that adds Smalltalk-style message passing (messaging) to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its NeXTSTEP operating system. Due to Apple macOS’s direct lineage from NeXTSTEP, Objective-C was the standard language used, supported, and promoted by Apple for developing macOS and iOS applications from 1997, when Apple purchased NeXT until the introduction of the Swift language in 2014.

<span class="mw-page-title-main">Devuan</span> Linux distribution based on Debian

Devuan is a fork of the Debian Linux distribution that uses sysvinit, runit or OpenRC instead of systemd. Devuan aims to avoid "lock-in" by projects like systemd and aims to maintain compatibility with other init systems to avoid detaching Linux from other Unix systems.

<span class="mw-page-title-main">Nim (programming language)</span> Programming language

Nim is a general-purpose, multi-paradigm, statically typed, compiled high-level system programming language, designed and developed by a team around Andreas Rumpf. Nim is designed to be "efficient, expressive, and elegant", supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C, C++, Objective-C, and JavaScript, and supporting compiling to those same languages as intermediate representations.

References

  1. Simon Sobisch (28 July 2023). "Release of GnuCOBOL 3.2" . Retrieved 29 July 2023.
  2. "README". ftp.gnu.org.
  3. Tiffin, Brian (19 October 2013). "OpenCOBOL FAQ". What is the current version of OpenCOBOL?. Retrieved 13 December 2013.
  4. Tiffin, Brian. "GNU Cobol is now a real thing". Archived from the original on 5 October 2013. Retrieved 1 October 2013.
  5. 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.
  6. Tiffin, Brian. "State of the Project". Archived from the original on 7 March 2016. Retrieved 23 July 2015.
  7. "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.
  8. "OpenCOBOL FAQ". Does OpenCOBOL pass the NIST Test Suite?. Retrieved 9 October 2013.
  9. 1 2 Cutler, Gary. "OpenCOBOL Programmer's Guide" (PDF). Opencobol.addltocobol.com. Retrieved 20 November 2012.
  10. "An open-source COBOL compiler". OpenCOBOL. Retrieved 20 November 2012.
  11. Cutler, Gary. "GnuCOBOL Guides". Opencobol.addltocobol.com. Retrieved 22 July 2015.
  12. "GnuCOBOL - Browse Files at". Sourceforge.net. 27 December 2007. Retrieved 28 October 2015.
  13. GnuCOBOL downloads at SourceForge
  14. GnuCOBOL downloads at SourceForge
  15. "Debian -- Details of package open-cobol in buster". packages.debian.org.
  16. GnuCOBOL downloads at SourceForge