กลับไปหน้าบทความ

อ่าน 12 นาที

IBM RPG

RPG เป็น ภาษาโปรแกรมระดับสูง สำหรับ แอปพลิเคชันทางธุรกิจ เปิดตัวในปี 1959 สำหรับ IBM 1401 เป็นที่รู้จักกันดีในฐานะภาษาโปรแกรมหลักของกลุ่มผลิตภัณฑ์ คอมพิวเตอร์ระดับกลาง ของ IBM...

IBM RPG

โปรแกรมสร้างรายงานRPG
กระบวนทัศน์หลายกระบวนทัศน์
นักพัฒนาไอบีเอ็ม
ปรากฏครั้งแรก1959 ( 1959 )
เวอร์ชันเสถียร
RPG IV เวอร์ชัน 7 รุ่น 4 / 6 ตุลาคม 2020 ( 6 ตุลาคม 2020 )
วินัยในการพิมพ์แข็งแกร่งมั่นคง
โอเอสCPF , SSP , OS/400 , IBM i , OS/VS1 , z/OS , DOS/VSE , VSE/SP , VSE/ESA , z/VSE , VS/9 , PRIMOS , OpenVMS , Wang VS , Burroughs MCP , HP MPE , MS-DOS , OS/2 , Microsoft Windows
ภาษาถิ่น
RPG, RPG II , RPG III , RPG 400, RPG IV , RPG/ILE; RPG/Free, Baby/36, Baby/400, Lattice RPG, VAX RPG II
ได้รับอิทธิพลจาก
9PAC , ฟาร์โก

RPGเป็นภาษาโปรแกรมระดับสูงสำหรับแอปพลิเคชันทางธุรกิจเปิดตัวในปี 1959 สำหรับIBM 1401เป็นที่รู้จักกันดีในฐานะภาษาโปรแกรมหลักของกลุ่มผลิตภัณฑ์คอมพิวเตอร์ระดับกลาง ของ IBM รวมถึง ระบบปฏิบัติการIBM i [ 1 ] RPGมีแนวคิดที่โดดเด่นหลายประการ เช่น วงจรโปรแกรม และไวยากรณ์แบบคอลัมน์[ 2 ]เวอร์ชันล่าสุดคือRPG IVซึ่งมีคุณสมบัติที่ทันสมัยหลายประการ รวมถึงไวยากรณ์แบบอิสระ[ 3 ]

แพลตฟอร์ม

ภาษาการเขียนโปรแกรม RPG ถูกสร้างขึ้นครั้งแรกโดย IBM สำหรับระบบ 1401 ของพวกเขา ต่อมา IBM ได้ผลิตเวอร์ชันสำหรับ7070/72/74 [ 4 ] [ 5 ]และSystem/360 [ 6 ] RPG II กลายเป็นภาษาการเขียนโปรแกรมหลักสำหรับกลุ่มผลิตภัณฑ์คอมพิวเตอร์ระดับกลาง ของพวกเขา ( System/3 , System/32 , System/34 , System /38 , System/36และAS/400 ) นอกจากนี้ ยังมีการใช้งานสำหรับDEC VAX , Sperry Univac BC/7, Univac system 80, Siemens BS2000 , Burroughs B700, B1700 , Hewlett Packard HP 3000 , ICL 2900 series, Honeywell 6220 และ 2020, Four-Phase IV/70 และ IV/90 series, Singer System 10และWANG VSรวมถึงคอมไพเลอร์และสภาพแวดล้อมรันไทม์ต่างๆ สำหรับระบบที่ใช้ Unix เช่น Infinite36 (เดิมคือ Unibol 36) และพีซี (Baby/400, Lattice-RPG) ด้วย

แอปพลิเคชัน RPG II ยังคงได้รับการสนับสนุนภายใต้ระบบปฏิบัติการVSE [ 7 ] และ z /OS [ 8 ] Unisys MCP [ 9 ] Microsoft Windows [ 10 ]และOpenVMS [ 11 ]

ประวัติศาสตร์

พื้นหลัง

เดิมทีพัฒนาโดยIBMในปี 1959 ชื่อReport Program Generator นั้นสื่อถึงวัตถุประสงค์ของภาษาได้เป็นอย่างดี นั่นคือ การสร้างรายงานจากไฟล์ข้อมูล[ 12 ] FOLDOCยกย่อง Wilf Hey ที่ทำงานที่ IBM ซึ่งส่งผลให้เกิดการพัฒนา RPG [ a ] ​​FARGO ( fourteen-o-one automatic report generation operation) เป็นรุ่นก่อนหน้าของ RPG บนIBM 1401

ภาษาทั้งสองมีจุดประสงค์เพื่ออำนวยความสะดวกในการเปลี่ยนผ่านสำหรับช่างเทคนิคเครื่องคำนวณตาราง (Tab) ของ IBM ไปสู่คอมพิวเตอร์รุ่นใหม่ในขณะนั้น ช่างเทคนิคเครื่อง Tab คุ้นเคยกับการเสียบสายไฟเข้ากับแผงควบคุมเพื่อดำเนินการป้อนข้อมูล แสดงผล ควบคุม และนับจำนวน (บวก ลบ คูณ หาร) โปรแกรมของเครื่อง Tab ทำงานโดยใช้สัญญาณที่ปล่อยออกมาในรอบการทำงานของเครื่อง ดังนั้น FARGO และ RPG จึงจำลองแนวคิดของรอบการทำงานของเครื่องด้วยรอบการทำงานของโปรแกรม RPG มีประสิทธิภาพเหนือกว่าและเข้ามาแทนที่ FARGO อย่างรวดเร็วในฐานะโปรแกรมสร้างรายงานที่ได้รับความนิยม

ต่อมา IBM ได้นำ RPG (7070-RG-902) มาใช้ แต่ไม่ได้นำ FARGO มาใช้ในIBM 7070/72/74 [ 14 ] [ 15 ]

ภาษาโปรแกรมทางเลือกที่มีให้เลือกใช้โดยทั่วไปในเวลานั้น ได้แก่Assembler , COBOL , Commercial Translator , COMTRANหรือFORTRAN Assembler และ COBOL เป็นที่นิยมใช้มากกว่าในงานปฏิบัติการทางธุรกิจบนเมนเฟรม (รุ่น 707X, 7080, System/360รุ่น 30 ขึ้นไป) ในขณะที่ RPG มักใช้โดยลูกค้าที่กำลังเปลี่ยนจากอุปกรณ์ประมวลผลแบบตาราง ( รุ่น 14xx , System/360 รุ่น 20)

RPG II

ภาษาโปรแกรม RPG IIเปิดตัวประมาณปี 1969 พร้อมกับ คอมพิวเตอร์ตระกูล System/3ต่อมาได้ถูกนำไปใช้กับSystem/32 , System/34และSystem/36โดยมีการปรับปรุงเวอร์ชันของภาษาให้ดีขึ้น นอกจากนี้ RPG II ยังมีให้ใช้งานสำหรับระบบขนาดใหญ่ รวมถึงเมนเฟรมIBM System/370 ที่ใช้ ระบบปฏิบัติการ DOS/VSE (ในขณะนั้นคือVSE/SP , VSE/ESAและz/VSE ) ICLยังได้ผลิตเวอร์ชันสำหรับระบบปฏิบัติการ VME/K ของตนด้วย

ในยุคแรกเริ่มของ RPG จุดแข็งหลักคือวงจรโปรแกรมโปรแกรมเมอร์จะเขียนโค้ดเพื่อประมวลผลแต่ละระเบียน และวงจรโปรแกรมจะดำเนินการเปลี่ยนแปลงกับทุกระเบียนในไฟล์ โดยดูแลเรื่องการควบคุมการไหลของโปรแกรม ในเวลานั้น แต่ละระเบียน (บัตรเจาะรูแต่ละใบ) จะถูกเปรียบเทียบกับแต่ละบรรทัดในโปรแกรม ซึ่งจะดำเนินการกับระเบียนหรือไม่ก็ได้ ขึ้นอยู่กับว่าบรรทัดนั้นมี "ตัวบ่งชี้" เปิดหรือปิดอยู่ ตัวบ่งชี้ประกอบด้วยชุดตัวแปรตรรกะหมายเลข 01–99 สำหรับวัตถุประสงค์ที่ผู้ใช้กำหนด หรือชุดย่อยอื่นๆ ที่เล็กกว่าตามฟังก์ชันการประมวลผลระเบียน ฟิลด์ หรือรายงาน แนวคิดเรื่องการแบ่งระดับและการจับคู่ระเบียนเป็นเอกลักษณ์เฉพาะของภาษา RPG II และได้รับการพัฒนาขึ้นโดยคำนึงถึงเครื่องอ่านบัตรเป็นหลัก คุณสมบัติการจับคู่ระเบียนของวงจรช่วยให้การประมวลผลไฟล์ที่มีความสัมพันธ์แบบส่วนหัวต่อรายละเอียดทำได้ง่าย โปรแกรม RPG ที่เขียนขึ้นเพื่อใช้ประโยชน์จากวงจรโปรแกรมสามารถสร้างรายงานที่ซับซ้อนได้ด้วยจำนวนบรรทัดโค้ดคอมพิวเตอร์ที่น้อยกว่าโปรแกรมที่เขียนในCOBOLและภาษาอื่นๆ ที่เน้นด้านธุรกิจ

ส่วนข้อกำหนดไฟล์ของโปรแกรม จะแสดงรายการไฟล์ทั้งหมดที่จะเขียน อ่าน หรืออัปเดต ตามด้วยข้อกำหนดการกำหนดข้อมูลซึ่งประกอบด้วยองค์ประกอบของโปรแกรม เช่น โครงสร้างข้อมูลและอาร์เรย์มิติ คล้ายกับส่วน "พื้นที่ทำงาน" ของโปรแกรม COBOL ถัดมาคือข้อกำหนดการคำนวณ ซึ่งประกอบด้วยคำสั่งที่สามารถเรียกใช้งานได้ อาจมีข้อกำหนดเอาต์พุตตามมา ซึ่งสามารถใช้กำหนดรูปแบบของไฟล์หรือรายงานอื่นๆ ได้ หรืออีกทางหนึ่ง ไฟล์โครงสร้างข้อมูลและรายงานบางส่วนสามารถกำหนดจากภายนอกได้ ซึ่งส่วนใหญ่ช่วยลดความจำเป็นในการเขียนโค้ดข้อกำหนดอินพุตและเอาต์พุต (" I/O ") ด้วยตนเอง

RPG III

RPG IIIถูกสร้างขึ้นสำหรับSystem/38และรุ่นต่อมาคือAS/400 RPG III แตกต่างจากภาษาเดิมอย่างมาก โดยมีโครงสร้างที่ทันสมัย ​​เช่น บล็อก IF-ENDIF, ลูป DO และซับรูทีน RPG III ยังมีให้ใช้งานสำหรับระบบขนาดใหญ่ รวมถึงเมนเฟรมIBM System/370 ที่ใช้ OS/VS1 นอกจากนี้ Unisysยังมีให้ใช้งานสำหรับ ระบบปฏิบัติการ VS/9ที่ทำงานบนเมนเฟรม UNIVAC Series 90 ด้วย

นับตั้งแต่มีการเปิดตัวIBM System/38ในปี 1979 โปรแกรมเมอร์ RPG ส่วนใหญ่ได้เลิกใช้ cycle และหันมาควบคุมการไหลของโปรแกรมด้วยโครงสร้างการวนซ้ำมาตรฐานแทน แม้ว่า IBM จะยังคงให้ความเข้ากันได้กับเวอร์ชันเก่าของ cycle อยู่ก็ตาม

DE/RPG

DE/RPGหรือ Data Entry RPG เป็นโปรแกรมที่ใช้ได้เฉพาะใน เวิร์กสเตชันป้อนข้อมูล IBM 5280ซีรีส์ในช่วงต้นทศวรรษ 1980 เท่านั้น มันคล้ายกับ RPG III แต่ไม่มีคำอธิบายข้อมูลภายนอก (DDS) สำหรับอธิบายข้อมูล (ไฟล์) เหมือนใน System/38 และรุ่นต่อมา แทนที่จะเป็นเช่นนั้น ส่วน DDS ต้องถูกรวมเข้าไปในซอร์สโค้ดของ RPG เอง

RP/400

RPG/400นั้นแท้จริงแล้วคือ RPG III ที่ทำงานบน AS/400 IBM เปลี่ยนชื่อคอมไพเลอร์ RPG เป็น "RPG/400" แต่ในขณะที่เปิดตัวนั้น มันเหมือนกับคอมไพเลอร์ RPG III บน System/38 ทุกประการ ผลิตภัณฑ์เกือบทั้งหมดของ IBM System/38 ถูกเปลี่ยนชื่อเป็น xxx/400 และคอมไพเลอร์ RPG ก็ไม่มีข้อยกเว้น RPG III ที่คอมไพล์ด้วยคอมไพเลอร์ RPG/400 นั้นไม่ได้นำเสนออะไรใหม่ให้กับภาษา RPG III จนกระทั่ง IBM เริ่มพัฒนาโค้ดการทำงานใหม่ๆ เช่น SCAN, CAT และ XLATE หลังจากที่ AS/400 วางจำหน่ายมาได้หลายปี การปรับปรุงเหล่านี้สำหรับ RPG III นั้นไม่มีอยู่ในเวอร์ชัน System/38 ของ RPG III

RPG IV และ ILE RPG

RPG IVหรือRPG ILE [ 16 ]ได้รับการเผยแพร่ในปี พ.ศ. 2537 เป็นส่วนหนึ่งของการเปิดตัว V3R2 ของOS/400 (ปัจจุบันรู้จักกันในชื่อ IBM i ) [ 17 ] [ 18 ]

ด้วยการเปิดตัว RPG IV ชื่อ RPG จึงไม่ใช่ตัวย่อ อย่างเป็นทางการอีกต่อ ไป RPG IV นำเสนอการแสดงออกที่หลากหลายมากขึ้นภายในข้อกำหนดการคำนวณตัวประกอบ 2 แบบขยาย และต่อมาได้มีการเพิ่มข้อกำหนดการคำนวณและไวยากรณ์ขั้นตอนแบบอิสระ RPG IV ในกรอบงานสภาพแวดล้อมภาษาแบบบูรณาการเรียกว่า ILE RPG และคู่มือผู้ใช้จะอธิบายความแตกต่างของทั้งสอง[ 19 ] [ 20 ] [ 21 ] IBM ให้การสนับสนุน RPG IV และ ILE RPG ในแพลตฟอร์ม IBM i ปัจจุบัน[ 22 ]

ในปี 2544 ด้วยการเปิดตัวOS/400 V5R1 RPG IV นำเสนออิสระในการคำนวณที่มากกว่าที่เสนอโดย Extended Factor-2 Calculation Specification: การป้อนข้อมูลแหล่งที่มา แบบข้อความอิสระซึ่งเป็นทางเลือกแทนรูปแบบแหล่งที่มาแบบเดิมที่ขึ้นอยู่กับคอลัมน์ การคำนวณ "/FREE" ไม่จำเป็นต้องวางรหัสการดำเนินการไว้ในคอลัมน์ใดคอลัมน์หนึ่ง รหัสการดำเนินการเป็นทางเลือกสำหรับการดำเนินการ EVAL และ CALLP และไวยากรณ์โดยทั่วไปจะคล้ายกับภาษาการเขียนโปรแกรมทั่วไปกระแสหลักมากกว่า จนถึงเดือนพฤศจิกายน 2556 รูปแบบอิสระนี้ใช้เฉพาะกับข้อกำหนดการคำนวณเท่านั้น[ 23 ]ด้วย การอัปเกรดภาษาเป็น IBM i V7R1 TR7 การคำนวณ "/free" และ "/end-free" จึงไม่จำเป็นอีกต่อไป และภาษาก็ได้ตัดขาดความสัมพันธ์กับบัตรเจาะรูในที่สุด

IBM Rational Developer for i (RDi) [ 24 ]ซึ่งเป็นสภาพแวดล้อมการพัฒนาแบบบูรณาการที่ใช้Eclipseได้รับการแนะนำโดย IBM สำหรับการพัฒนา RPG [ 25 ]โปรแกรมแก้ไขข้อความ Source Entry Utility (SEU) ไม่ได้รับการแนะนำสำหรับการพัฒนา RPG อีกต่อไป และการพัฒนาได้หยุดลงหลังจาก IBM i 6.1 [ 26 ]เครื่องมือพัฒนาแบบดั้งเดิมอื่นๆ ได้แก่ CODE/400 (อิงตาม IBM WorkFrame/2) และVisualAge สำหรับ RPG

การพัฒนาภาษาอย่างต่อเนื่อง

IBM ยังคงปรับปรุงภาษา RPG อย่างต่อเนื่อง[ 27 ]ผ่านการเผยแพร่ซอฟต์แวร์และ “การปรับปรุงเทคโนโลยี” (TR) ภายในเวอร์ชัน[ 28 ] [ 29 ] มีการเพิ่มฟังก์ชันในตัว (BIF) มากขึ้น มีความสามารถในการเชื่อมโยงกับอ็อบเจ็กต์Java [ 30 ]และAPI ของ IBM i สามารถใช้เขียน โปรแกรม CGI ได้ ด้วยความช่วยเหลือจากชุดเครื่องมือเว็บCgidev2 ของ IBM [ 31 ] RPG Toolboxและแพ็กเกจเชิงพาณิชย์อื่นๆ ที่รองรับเว็บ แม้จะมีการเปลี่ยนแปลง แต่ก็ยังคงรักษาความเข้ากันได้กับเวอร์ชันก่อนหน้าไว้ได้มาก ดังนั้นโปรแกรม RPG ที่เขียนเมื่อ 37 ปีที่แล้วจึงสามารถทำงานได้ในปัจจุบันโดยไม่ต้องแก้ไขมากนัก

ตัวคอมไพเลอร์ล่วงหน้าของ SQL ช่วยให้นักพัฒนา RPG ในปัจจุบันสามารถใช้ประโยชน์จาก SQE (SQL Query Engine) ที่คิดค่าใช้จ่ายตามจริงของ IBM ได้ ด้วยวิธีการ F-Spec แบบเดิม นักพัฒนาต้องระบุเส้นทางการเข้าถึงชุดข้อมูลที่เฉพาะเจาะจง แต่ตอนนี้พวกเขาสามารถใช้คำสั่ง SQL แบบฝังมาตรฐานได้โดยตรงในโปรแกรม เมื่อคอมไพล์แล้ว ตัวคอมไพเลอร์ล่วงหน้าของ SQL จะแปลงคำสั่ง SQL เป็นคำสั่ง RPG ซึ่งจะเรียกใช้โปรแกรมจัดการฐานข้อมูลที่ดำเนินการตามคำขอค้นหาในที่สุด

ภาษา RPG IV ใช้ ชุดอักขระ EBCDIC เป็นพื้นฐาน แต่ก็รองรับ UTF-8, UTF-16 และชุดอักขระอื่นๆ อีกมากมาย ลักษณะการทำงานแบบมัลติเธรดของภาษานี้ถูกมองว่าแปลกประหลาดโดยบางคน เนื่องจากทีมพัฒนาคอมไพเลอร์ได้จัดการกับเธรดโดยการให้แต่ละเธรดมีพื้นที่จัดเก็บข้อมูลแบบคงที่ของตัวเอง แทนที่จะทำให้สภาพแวดล้อมการทำงานของ RPG สามารถเรียกกลับได้ ซึ่งทำให้เกิดความสับสนระหว่างความแตกต่างระหว่างเธรดและกระบวนการ (ทำให้เธรดใน RPG IV เป็นเหมือนลูกผสมระหว่างเธรดและกระบวนการ)

ในปี 2010 IBM ได้เปิดตัวRPG Open Accessหรือที่รู้จักกันในชื่อRational Open Access: RPG Editionซึ่งอนุญาตให้โปรแกรมเมอร์กำหนดตัวจัดการ I/O ใหม่ได้ ทำให้สามารถอ่านและเขียนข้อมูลจากแหล่งข้อมูลที่ RPG ไม่รองรับในตัวได้[ 32 ]

ประเภทข้อมูล

RPG รองรับชนิดข้อมูลต่อไปนี้

หมายเหตุ:อักขระใน คอลัมน์ ชนิดข้อมูลคืออักขระที่ถูกเข้ารหัสไว้ในข้อกำหนดนิยาม (Definition Specification) ในคอลัมน์ที่กำหนดไว้สำหรับชนิดข้อมูล เพื่อเปรียบเทียบ ในภาษาอย่าง C ที่การกำหนดตัวแปรเป็นแบบอิสระและจะใช้คำหลักเช่นintเพื่อประกาศตัวแปรจำนวนเต็ม ในภาษา RPG ตัวแปรจะถูกกำหนดด้วยข้อกำหนดนิยามแบบตายตัว ในข้อกำหนดนิยาม ซึ่งแสดงด้วยตัวอักษรDในคอลัมน์ที่ 6ของบรรทัดโค้ด อักขระชนิดข้อมูลจะถูกเข้ารหัสในคอลัมน์ที่ 40นอกจากนี้ หากละเว้นอักขระชนิดข้อมูล นั่นคือเว้นว่างไว้ ค่าเริ่มต้นจะเป็น Aหากไม่ได้ระบุตำแหน่งทศนิยม P เมื่อระบุตำแหน่งทศนิยมสำหรับฟิลด์แบบเดี่ยว และS (ZONED) เมื่อระบุตำแหน่งทศนิยมภายในโครงสร้างข้อมูล

ประเภทข้อมูล ชื่อ ความยาว คำอธิบาย
Aอักขระตัวอักษรและตัวเลข 1 ถึง 16,773,104 ไบต์ (คงที่) 1 ถึง 16,773,100 ไบต์ (ความยาวแปรผัน) อักขระตัวอักษรและตัวเลข
Bเลขฐานสอง 1 ไบต์ (8 บิต) 2 ไบต์ (16 บิต) 4 ไบต์ (32 บิต) 8 ไบต์ (64 บิต) จำนวนเต็มไบนารีแบบมีเครื่องหมาย
Cอักขระ UCS-2 1 ถึง 8,386,552 ตัวอักษร (คงที่) 1 ถึง 8,386,550 ตัวอักษร (เปลี่ยนแปลงได้) อักขระ UCS-2 16 บิต ( DBCSหรือ EGCS)
Dวันที่ 10 ไบต์ วันที่: ปี เดือน วัน
Fตัวเลข จุดลอยตัว4 ไบต์ (32 บิต) 8 ไบต์ (64 บิต) เลขฐานสองแบบจุดลอยตัวจริง
Gตัวละครกราฟิก 1 ถึง 8,386,552 ตัวอักษร (คงที่) 1 ถึง 8,386,550 ตัวอักษร (เปลี่ยนแปลงได้) อักขระกราฟิก 16 บิต ( DBCSหรือ EGCS)
Iตัวเลขจำนวนเต็ม 1 ไบต์ (8 บิต) 2 ไบต์ (16 บิต) 4 ไบต์ (32 บิต) 8 ไบต์ (64 บิต) จำนวนเต็มไบนารีแบบมีเครื่องหมาย
Nตัวบ่งชี้อักขระ1 ไบต์ '1' = จริง'0' = เท็จ
Oวัตถุ ขนาดไม่เปิดเผย การอ้างอิงวัตถุ
Pเลข ฐานสิบแพ็ค1 ถึง 63 หลัก, 2 หลักต่อไบต์ บวกเครื่องหมาย เลขฐานสิบคงที่แบบมีเครื่องหมาย ประกอบด้วยหลักจำนวนเต็มและหลักเศษส่วน
Sตัวเลข ทศนิยมแบบแบ่งโซน1 ถึง 63 หลัก, 1 หลักต่อไบต์ เลขฐานสิบคงที่แบบมีเครื่องหมาย ประกอบด้วยหลักจำนวนเต็มและหลักเศษส่วน
Tเวลา 8 ไบต์ เวลา: ชั่วโมง นาที วินาที
Uตัวเลขจำนวนเต็ม 1 ไบต์ (8 บิต) 2 ไบต์ (16 บิต) 4 ไบต์ (32 บิต) 8 ไบต์ (64 บิต) จำนวนเต็มไบนารีที่ไม่มีเครื่องหมาย
Zไทม์สแตมป์26 ไบต์ วันที่และเวลา :   ปี เดือน วัน ชั่วโมง นาที วินาที ไมโครวินาที
*ขั้นตอนการกำหนดตำแหน่งจุดชี้ระบบชี้ตำแหน่งจุดชี้16 ไบต์ ที่อยู่ไปยังข้อมูลที่อยู่ไปยังขั้นตอนที่เปิดใช้งานที่อยู่ไปยังวัตถุ

ตัวอย่างโค้ด

โปรแกรมต่อไปนี้รับหมายเลขลูกค้าเป็นพารามิเตอร์อินพุต และส่งคืนชื่อและที่อยู่เป็นพารามิเตอร์เอาต์พุต นี่คือเวอร์ชันพื้นฐานที่สุดของไวยากรณ์ RPG IV โปรแกรมเดียวกันนี้จะแสดงให้เห็นในภายหลังด้วยเวอร์ชันไวยากรณ์ที่ทันสมัยขึ้นและกฎที่ผ่อนคลายมากขึ้น

 * ในอดีต เกม RPG มีลักษณะเป็นคอลัมน์ แต่ปัจจุบันสามารถจัดรูปแบบได้อย่างอิสระ * ได้รับอนุญาตภายใต้สถานการณ์เฉพาะบางประการ * วัตถุประสงค์ของรหัสบรรทัดต่างๆ นั้นถูกกำหนดโดย * รหัสตัวอักษรในคอลัมน์ที่ 6 * เครื่องหมายดอกจัน (*) ในคอลัมน์ที่ 7 หมายถึงบรรทัดความคิดเห็น * ข้อกำหนด "F" (ไฟล์) กำหนดไฟล์และอุปกรณ์อินพุต/เอาต์พุตอื่นๆ F ARMstF1 หากเปลี่ยนชื่อดิสก์ EK (ARMST: RARMST) * ข้อมูลจำเพาะ "D" (ข้อมูล) ใช้สำหรับกำหนดตัวแปร D pCusNo S 6p D pName S 30a D pAddr1 S 30a D pAddr2 S 30a ดี พีซิตี้ เอส 25เอ ดี พีสเตท เอส 2เอ ดีพีซิปเอส 10เอ * ข้อกำหนด "C" (การคำนวณ) ใช้สำหรับคำสั่งที่สามารถดำเนินการได้ * พารามิเตอร์ถูกกำหนดโดยใช้โอเปอเรเตอร์ plist และ parm รายการ C *entry plist C parm pCusNo C parm pName C parm pAddr1 C parm pAddr2 ซี พาร์ม พีซิตี้ C parm pState C parm pZip * คำสั่ง "chain" ใช้สำหรับการเข้าถึงไฟล์ที่มีคีย์แบบสุ่ม C pCusNo chain ARMstF1 * หากพบข้อมูล ให้ย้ายฟิลด์จากไฟล์ไปยังพารามิเตอร์ C ถ้า %พบ C eval pName = ARNm01 C eval pAddr1 = ARAd01 C eval pAddr2 = ARAd02 C eval pCity = ARCy01 C eval pState = ARSt01 C eval pZip = ARZp15 ซี เอ็นดิฟ * เกม RPG ใช้สวิตช์หลายตัว สวิตช์ "LR" เดิมทีหมายถึง "last record" (บันทึกสุดท้าย) * LR จะทำเครื่องหมายโปรแกรมและพื้นที่จัดเก็บข้อมูลของโปรแกรมนั้นว่าสามารถลบออกจากหน่วยความจำได้ C eval *InLR = *On 

โปรแกรมเดียวกันนี้ใช้การคำนวณฟรีที่มีให้ใช้งานตั้งแต่เวอร์ชัน V5R1 เป็นต้นไป:

 * ข้อกำหนด "F" (ไฟล์) กำหนดไฟล์และอุปกรณ์อินพุต/เอาต์พุตอื่นๆ FARMstF1 ถ้าเปลี่ยนชื่อดิสก์ EK (ARMST: RARMST) * ข้อมูลจำเพาะ "D" (ข้อมูล) ใช้สำหรับกำหนดตัวแปรและพารามิเตอร์ * "ต้นแบบ" ของโปรแกรมอยู่ในไฟล์แยกต่างหาก * อนุญาตให้โปรแกรมอื่นเรียกใช้งานได้ /คัดลอก cust_pr * "ส่วนต่อประสานขั้นตอน" อธิบายถึงพารามิเตอร์ *ENTRY D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a ดี พีซิตี้ 25เอ ดี พีสเตท 2a ดีพีซิป 10เอ /ฟรี // คำสั่ง "chain" ใช้สำหรับการเข้าถึงไฟล์ที่มีคีย์แบบสุ่ม chain pCusNo ARMstF1; // หากพบระเบียน ให้ย้ายฟิลด์จากไฟล์ไปยังพารามิเตอร์ ถ้า %พบ; pName = ARNm01; pAddr1 = ARAd01; pAddr2 = ARAd02; pCity = ARCy01; pState = ARSt01; pZip = ARZp15; จบเงื่อนไข; // เกม RPG ใช้สวิตช์หลายตัว สวิตช์ "LR" เดิมทีหมายถึง "บันทึกสุดท้าย" // LR จะทำเครื่องหมายโปรแกรมและพื้นที่เก็บข้อมูลของโปรแกรมนั้นว่าสามารถลบออกจากหน่วยความจำได้ *InLR = *เปิด; /end-free 

สมมติว่าตารางตัวอย่าง ARMSTF1 ถูกสร้างขึ้นโดยใช้คำสั่ง SQL ต่อไปนี้:

สร้างตารางarmstf1 ( arcnum decimal ( 7 , 0 ), arname char ( 30 ), aradd1 char ( 30 ), aradd2 char ( 30 ), arcity char ( 25 ), arstte char ( 2 ), arzip char ( 10 ))

โปรแกรมเดียวกันนี้ใช้การคำนวณแบบอิสระและ SQL แบบฝังตัว:

 * RPG IV ไม่จำเป็นต้องใช้ตัวบ่งชี้ *INLR เพื่อยุติโปรแกรมอีกต่อไป * โดยใช้คีย์เวิร์ด MAIN ในข้อกำหนด "H" (Header) และระบุ "main" หรือ * ชื่อขั้นตอนการเข้าใช้งาน โปรแกรมจะเริ่มต้นและสิ้นสุดตามปกติโดยไม่ต้องใช้ * เปลี่ยนจากวงจรเกม RPG ที่มีมานานหลายทศวรรษ มาใช้ตรรกะการเริ่มต้นและจบแบบ "คล้ายภาษา C" มากขึ้น H MAIN(getCustInf) * ข้อมูลจำเพาะ "D" (ข้อมูล) ใช้สำหรับกำหนดตัวแปรและพารามิเตอร์ * "ต้นแบบ" ของโปรแกรมอยู่ในไฟล์แยกต่างหาก * อนุญาตให้โปรแกรมอื่นเรียกใช้งานได้ /คัดลอก cust_pr * "ส่วนต่อประสานขั้นตอน" อธิบายถึงพารามิเตอร์ *ENTRY P getCustInf B D getCustInf PI D pCusNo 6p 0 const D pName 30a D pAddr1 30a D pAddr2 30a ดี พีซิตี้ 25เอ ดี พีสเตท 2a ดีพีซิป 10เอ /ฟรี เรียกใช้คำสั่ง SQL เพื่อเลือก arName, arAddr1, arAdd2, arCity, arStte, arZip แปลงเป็น :pName, :pAddr1, :pAddr2, :pCity, :pState, :pZip จาก ARMstF1 โดยที่ arCNum = :pCusNo สำหรับการดึงข้อมูลเท่านั้น ดึงข้อมูลเพียงแถวแรกเท่านั้น ปรับให้เหมาะสมสำหรับ 1 แถว ด้วย CS; /end-free P GetCustInf E 

ตั้งแต่ระบบปฏิบัติการเวอร์ชัน V7R1 เป็นต้นไป โปรแกรมข้างต้นไม่จำเป็นต้องมีต้นแบบอยู่ในไฟล์แยกต่างหาก ดังนั้นจึงสามารถเขียนได้อย่างสมบูรณ์ดังนี้:

H main ( GetCustInf ) D ARMSTF1 E DS P GetCustInf B D GetCustInf PI extpgm ( 'CUS001' ) D inCusNo like ( arCNum ) const D outName like ( arName ) D outAddr1 like ( arAdd1 ) D outAddr2 like ( arAdd2 ) D outCity like ( arCity ) D outState like ( arStte ) D outZip like ( arZip ) / free exec sql select arName , arAdd1 , arAdd2 , arCity , arStte , arZip into : outName , : outAddr1 , : outAddr2 , : outCity , : outState , : outZip from ARMSTF1 where arCNum = : inCusNo fetch first 1 row only with CS use currently committed ; / end - free P GetCustInf E

สุดท้ายนี้ หากคุณติดตั้งแพทช์แก้ไขข้อบกพร่องของคอมไพเลอร์ที่เกี่ยวข้องกับ Technology Refresh 7 (TR7) ลงในระบบปฏิบัติการ 7.1 ของคุณ โปรแกรมข้างต้นสามารถเขียนได้อย่างสมบูรณ์ในรูปแบบอิสระ ดังนี้:

ctl - opt main ( GetCustInf ); dcl - ds ARMSTF1 ext end - ds ; dcl - proc GetCustInf ; dcl - pi * n extpgm ( 'CUS001' ); inCusNo like ( arCNum ) const ; outName like ( arName ); outAddr1 like ( arAdd1 ); outAddr2 like ( arAdd2 ); outCity like ( arCity ); outState like ( arStte ); outZip like ( arZip ); end - pi ; exec sql select arName , arAdd1 , arAdd2 , arCity , arStte , arZip into : outName , : outAddr1 , : outAddr2 , : outCity , : outState , : outZip from ARMSTF1 where arCNum = : inCusNo fetch first 1 row only with CS use currently committed ; return ; end - proc ;

หมายเหตุอธิบาย

  1. ^แต่ FOLDOCระบุว่า RPG มีอายุตั้งแต่ปี 1965 ไม่ใช่ปี 1959 ตามที่กล่าวไว้ในที่นี้ [ 13 ]

อ่านเพิ่มเติม

  • "9PAC, โปรแกรมสร้างรายงาน" . ประวัติศาสตร์ของภาษาโปรแกรม (HOPL), มหาวิทยาลัยเมอร์ด็อก, ออสเตรเลีย. 2006. เก็บถาวรจากต้นฉบับเมื่อ 2010-12-24 . เรียกดูเมื่อ2008-04-01 .
  • "RPG, โปรแกรมสร้างรายงาน"ประวัติศาสตร์ของภาษาโปรแกรม (HOPL), มหาวิทยาลัยเมอร์ด็อก, ออสเตรเลีย. 2006. เก็บถาวรจากต้นฉบับเมื่อ 2011-04-15 . สืบค้นเมื่อ2008-04-01 .
  • DuCharme, Bob (2006-02-26). "การดึงข้อมูลจากคอมพิวเตอร์ในช่วงกลางศตวรรษที่ 20 และต้นศตวรรษที่ 21" .
  • คอซซี, โรเบิร์ต (1996). "ภาษาเกม RPG IV สมัยใหม่ "
  • เชลลี, แกรี่ บี.; โทมัส เจ. แคชแมน (1977). บทนำสู่การเขียนโปรแกรมคอมพิวเตอร์ RPG . ฟุลเลอร์ตัน, แคลิฟอร์เนีย: บริษัทอนาไฮม์พับลิชชิ่ง. ISBN 0-88236-225-9.
  • Smith, Brian R.; Martin Barbeau; Susan Gantner; Jon Paris; Zdravko Vincetic; Vladimir Zupka (25 เมษายน 2543). "ใครจะรู้ว่าคุณทำแบบนั้นได้ด้วย RPG IV? คู่มือพ่อมดสำหรับการเข้าถึงระบบและอื่นๆ" (PDF) . องค์กรสนับสนุนทางเทคนิคระหว่างประเทศของ IBM . สืบค้นเมื่อ 18 กุมภาพันธ์ 2555 ."หนังสือปกแดงเล่มนี้มุ่งเน้นไปที่ RPG IV ในฐานะภาษาการพัฒนาแอปพลิเคชันที่ทันสมัย ​​เฟื่องฟู และมีศักยภาพสูงสำหรับศตวรรษที่ 21"
  • RPG Open  — แหล่งข้อมูลฟรี (โอเพนซอร์ส) สำหรับการพัฒนาแอปพลิเคชันด้วย RPG IV และ IBM i
  • IBM (1964). คู่มือการใช้งาน IBM 1401 RPG (PDF) . C24-3261-1.
  • ไอบีเอ็ม (2016) คู่มือโปรแกรมเมอร์ ILE RPG (PDF ) SC09-2507-10.
  • RPG II สำหรับ MVS, OS/390 และ z/OS  — สถานะของผลิตภัณฑ์ IBM RPG II ใน z/OS
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=IBM_RPG&oldid=1354535442 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ IBM RPG

RPG เป็น ภาษาโปรแกรมระดับสูง สำหรับ แอปพลิเคชันทางธุรกิจ เปิดตัวในปี 1959 สำหรับ IBM 1401 เป็นที่รู้จักกันดีในฐานะภาษาโปรแกรมหลักของกลุ่มผลิตภัณฑ์ คอมพิวเตอร์ระดับกลาง ของ IBM...

แพลตฟอร์ม

ภาษาการเขียนโปรแกรม RPG ถูกสร้างขึ้นครั้งแรกโดย IBM สำหรับระบบ 1401 ของพวกเขา ต่อมา IBM ได้ผลิตเวอร์ชันสำหรับ 7070/72/74 [ 4 ] [ 5 ] และ System/360 [ 6 ] RPG II กลายเป็นภาษาการเขียนโปรแกรมหลักสำหรับกลุ่มผลิตภัณฑ์ คอมพิวเตอร์ระดับกลาง ของพวกเขา ( System/3 ,...

พื้นหลัง

เดิมทีพัฒนาโดย IBM ในปี 1959 ชื่อ Report Program Generator นั้น สื่อถึงวัตถุประสงค์ของภาษาได้เป็นอย่างดี นั่นคือ การสร้างรายงานจากไฟล์ข้อมูล [ 12 ] FOLDOC ยกย่อง Wilf Hey ที่ทำงานที่ IBM ซึ่งส่งผลให้เกิดการพัฒนา RPG [ a ] ​​FARGO ( fourteen-o-one automatic...

RPG II

ภาษาโปรแกรม RPG II เปิดตัวประมาณปี 1969 พร้อมกับ คอมพิวเตอร์ตระกูล System/3 ต่อมาได้ถูกนำไปใช้กับ System/32 , System/34 และ System/36 โดยมีการปรับปรุงเวอร์ชันของภาษาให้ดีขึ้น นอกจากนี้ RPG II ยังมีให้ใช้งานสำหรับระบบขนาดใหญ่ รวมถึงเมนเฟรม IBM System/370...