We've been through these debates over and over. You know what I mean: those arguments that free format (/FREE) is somehow better than regular RPG IV. No one is more sick of this nonsense than I am. All prejudice aside, the truth is that there are decades of RPG III and RPG IV code out there that are in RPG syntax (a.k.a. fixed format), and that is the style "everybody" uses. This argument is somewhat similar to the argument about MS Windows. It may or may not be better than Mac OS X or OS/400, but it is the most used OS out there.
To me, these arguments are more like airing one's frustrations than debating the merits. For example, the people in the free-format camp consistently say that free-format RPG is better because it is more readable.
While these points are neither relevant nor valid (they are merely opinions), they do illustrate why the free-format RPG syntax is still relegated to a few hundred RPG IV developers (out of nearly two million RPG programmers worldwide): The reason is that there is no compelling reason to switch to free-format. After all, doing so would be like forcing people to learn French when English is the spoken language. (OK, so that's a cheap tongue-in-cheek reference to IBM Canada, the owners of RPG IV.)
To be practical, some free-format is important in RPG IV. Most languages throughout the world have some English terms interspersed in them, and RPG IV programmers should consider interspersing some free-format code into their RPG IV. It isn't all that intrusive, and in some situations, it provides new functionality.
However, as with learning a second spoken language (or if you do not live in the United States, learning a third or fourth spoken language), you don't completely switch over to that new language, but rather use certain key components of it to enhance your native dialog. For example, swearing in Italian has always been popular in my house.
This is the place I've come to with RPG IV's /FREE syntax. I use it to solve specific problems that are difficult and frustrating to solve with RPG IV's regular syntax . RPG IV's /FREE syntax includes a handful of features that are not directly available in regular RPG IV syntax. Granted, there is nothing in /FREE that can't be done with regular RPG IV syntax, but admittedly, some things are easier to do in /FREE.
For example, I recently needed to update two fields in a database file on a V5R2 machine. With the traditional UPDATE operation code, I would simply issue an UPDATE opcode with the file name in Factor 2, and the entire record would be updated.
In this situation, however, I only wanted to update two of the more than 20 fields in the database record. I could have done this by issuing the EXCEPT operation and hand coding the two fields on an exception Output specification. Instead, however, I dropped into /FREE and did it rather simply, as follows:
Regular RPG IV Syntax
C Except SomeItems
OSALESREC E SomeItems
/FREE RPG IV Syntax
update slshist %Fields(UPC : PRDCDE);
In /FREE syntax, we can use the UPDATE operation code along with the %FIELDS parameter/keyword to specify the fields we want to update. It makes things a bit easier than creating the EXCEPT output statements in regular RPG IV syntax.
Again, you can achieve similar results with regular syntax, but the /FREE syntax is arguably easier. Of course, it is only easier if you already know the syntax.
I tend to use the /FREE syntax in this situation and occasionally when I need to CHAIN to a file using a partial key. The CHAIN operation provides an ease-of-use capability similar to that of the UPDATE operation, in that it lets you create an ad hoc keylist.
For example, in traditional RPG IV, a keylist is declared once and then may be used anywhere in the source member, as follows:
C ItemKey KLIST
C KFLD ITMNBR
C KFLD UPC
C ItemKey Chain ItemMast
In /FREE syntax, the keylist may still be used, but it's stuck in the fixed-format syntax. The CHAIN operation, however, allows you to specified the fields you want to use to access a file in an ad hoc keylist, as follows:
chain (ITMNBR:UPC) ItemMast;
The ad hoc keylist is enclosed in parentheses. This takes the place of the true keylist, but a true keylist could also have been used.
Problems with Consistency
While these two examples illustrate the ease with which you can do certain things with the /FREE syntax, they also illustrates one of the primary reasons that /FREE will never be the de facto syntax for RPG IV: lack of consistency.
The UPDATE operation uses a parameter keyword (similar to a built-in function) to declare the fields you want to output. The CHAIN operation, however, uses just parentheses to specify the fields you are using to declare the ad hoc keylist. Why doesn't the UPDATE operation simply use parentheses or why doesn't the CHAIN operation have a %KLIST parameter keyword? More importantly, why are they not using the same grammar? Consistency for /FREE syntax could turn into a rather lengthy discussion, so I'm not going to pursue it here.
While many /FREE advocates dismiss these inconsistencies, they are, from my experience, the single biggest problem with teaching the /FREE syntax and then getting programmers to move to it. RPG programmers need their language to be predictable. They are not writing compilers or operating systems; they are writing end-user applications that need to work.
Back in the RPG III days and in the early days of RPG IV, when a new feature was about to be announced, I would write articles in advance and update my book The Modern RPG IV Language in anticipation of the new features. Once the feature was announced, I'd sometime have to make modifications, based on whether the feature delivered more or less capability and functionality than I'd expected.
Today, when a new feature is announced for RPG IV, particularly when /FREE syntax is involved, not only can I not predict the syntax of the new feature, I don't even attempt to write anything about it for months after it is shipped because I can never anticipate the syntax or the capability of any given feature.
RPG IV really only needs enhancements in a few areas, such as dynamic array sizes, CGI programming, and handling the IFS file structures.
Bob Cozzi has been programming in RPG since 1978. Since then, he has written many articles and several books, including The Modern RPG Language--the most widely used RPG reference manual in the world. Bob is also a very popular speaker at industry events such as RPG World and is the author of his own Web site and of the RPG ToolKit, an add-on library for RPG IV programmers.