27
Fri, Dec
0 New Articles

The Future of RPG

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Much like COBOL, RPG isn't going away any time soon, so let's see if we can get some new features!

 

Many of us in the industry have been working with RPG for 30 or more years. We can remember back to the time when the CALL opcode was added, which changed the language forever. Now, RPG is as full-featured a language as any out there and includes the still unparalleled direct access to the database that makes RPG programs run rings around any other programming environment. So what could improve it? Well, I can certainly think of a few things.

First Off, Bring Back FRED!

Actually, FRED is not quite the correct venue, but let me explain. FRED stands for Feature Request Database that existed some time ago for WDSC enhancements (back when there was such a thing as WDSC). It was a place where people could submit their requests for new or enhanced features, although to be precise it was for WDSC, not the RPG language itself. For RPG, IBM also would occasionally request enhancement suggestions from the community through a technique of giving people a budget and letting them spend their budget dollars on various enhancements based on prices set by IBM.

 

The only technique available today is the Design Change Request, or DCR, but as far as I know there's no way to review those DCRs and provide any feedback to IBM as to which is really needed. The DCR is the ultimate squeaky wheel: those who take the time to go through the process are the ones heard by IBM. Me, I'd like to see something more like some of the open-source development projects where enhancement requests are listed and people can vote for them.  I've revamped the Pluta Brothers Design site, and there's a new section called Community where I'm going to start gathering requirements and maybe even putting out polls. I'll package up that information and send it off to whoever will listen at IBM.

What Would You Ask For?

OK, assuming that there was such a place to request new features, what exactly would I request? Let me go off in a few different directions here and see if it perhaps gets your brain percolating a little. I'll start with a couple of larger areas.

 

Procedure Overloading

I'm stealing a term that describes how Java implements the concept of polymorphism. With overloading, you can have the same procedure name with different parameter lists, and each parameter list would then call a different procedure. Among other things, overloading allows you to define procedures that accept different combinations of parameters without having to have a lot of *OMIT parameters. An example would be the following:

 

      nextDay = AddDays( startDate: days);

 

 

I'd like to be able to pass in either a numeric value or a date parameter. Either way, I'd like the procedure to return that date plus (in this case) one day. The code might look something like this:

    

     p AddDays        b

     d               pi              d

     d   numDate                  8s 0

     d   days                    5u 0

     /free

      return (AddDays( %date(numDate): days));

     /end-free

     p                e

    

     p AddDays        b

     d               pi              d

     d   isoDate                    d

     d   days                    5u 0

     /free

      return ( isoDate + %days(days));

     /end-free

     p                e

    

You'll note two different definitions for the AddDays procedure: one with an 8S0 numeric input parameter for the date, and one with a type D date field. Both would reside in the same service program. And while this is a simple example, a subtle but very important point is that the first version calls the second version. The first version simply converts the numeric date to a D date and sends that converted value to the second version. This is a very common pattern in OO programming because it allows you to put all the actual programming logic in one procedure. It doesn't matter much in this case, but imagine if this were a complicated business algorithm that used values from the database and so on. Rather than cloning the logic, you keep it all in one place. That way, when you do have to change the logic, you only need to change it in one place. Polymorphism helps encourage that practice.

 

Name Spaces for Service Programs

The idea would be that you could have the same procedure name in two different service programs and call one or the other by specifying the service program name as the prefix to the procedure. The reason is simple; it allows you to avoid collisions between two service programs. You may not think that service programs would collide, but they can do so quite easily. As a very simple example, let's assume that all your service programs use a common error infrastructure in which the called procedure signals an error via a return code but allows the caller to extract more detailed information on demand. Your code might look like this:

 

      if GetTradingPartner( customer: partnerID) <> 0;

        errorInfo = GetLastErrorInfo();

       endif;

 

The name GetTradingPartner might be unique among your service programs, but if you use this architecture regularly, the name GetLastErrorInfo will not be. So unfortunately if you were to use two service programs in the same application, you would have a conflict between the two procedures. It would be nice if the compiler would allow you to identify the service program name in the program and use that as a disambiguating value during the ILE binding process, tying each procedure call to the corresponding service program:

 

      if GetTradingPartner( customer: partnerID) <> 0;

        errorInfo = XmlService.GetLastErrorInfo();

       endif;

 

Of course, this means you'd have to have a way to tie the prefix (in this case, XmlService) to the appropriate service program, which would mean some tweaks to the ILE binding process. And the polymorphism above would also require an enhanced ILE binding process, but I can dream, can't I?

 

Well, those are my big areas. Let's move down to some smaller things that might make life a little easier.

 

Ternary BIF

I have to admit that when I first saw it, I absolutely hated the ternary operator. It seems clunky and arbitrary and unnecessary. But over the years I've really come to appreciate it, especially since in RPG it allows me to condense five lines of code into one. Here's what the code might look like:

 

      shipDate = %cond-value(RequestedDate <> *loval : RequestedDate : OrderDate);

 

I call my version the %cond-value (conditional value) BIF. You pass in three values: a Boolean indicator followed by two values of the same type. If the Boolean is true, the BIF returns the first value; otherwise, it returns the second. Thus the line above replaces this code:

 

      if RequestedDate <> *loval;

      shipDate = RequestedDate;

       else;

        shipDate = OrderDate;

       endif;

 

Simple, easy to understand. The compiler would have to do some work; the two values would have to be compatible, and both would have to be compatible with the target. But in essence, you'd just do the same tests that you'd have to do for the if/else/endif code. And removing four lines of code, two of which consist of nothing more than an opcode, is always a good idea in my book.

 

More Than One Line per Physical Line

Another way to reduce the number of lines in a source member is to make better use of them, and you could theoretically do that by allowing multiple operations on one source line:

 

      if RequestedDate <> *loval; shipDate = RequestedDate; else; shipDate = OrderDate; endif;

 

Of course, if I did that, I'd go past the 80-character source line limit. Which brings up another minor enhancement.

 

Allow /free to Span the Entire Source Line

This ought to be self-explanatory.

Are There Others?

Well, yes, I've got quite a few others! And I'm sure you could come up with several of your own just by sitting and thinking over what you've coded the last few weeks. Why not share those ideas in the comments? Who knows, maybe we can get IBM to listen to us!

 

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: