อ่าน 36 นาที
ฟอร์ทราน
ฟอร์แทรน ( / ˈ f ɔːr t r æ n / ; เดิมชื่อFORTRAN ) เป็นภาษาโปรแกรมเชิงคำสั่งแบบคอมไพล์รุ่นที่สามซึ่งออกแบบมาเพื่อการคำนวณเชิงตัวเลขและ การ คำนวณ ทางวิทยาศาสตร์
ฟอร์ทราน
| ฟอร์ทราน | |
|---|---|
| กระบวนทัศน์ | หลายกระบวนทัศน์ : โครงสร้าง , คำสั่ง ( เชิงกระบวนการ , เชิงวัตถุ ), ทั่วไป , อาร์เรย์ |
| ออกแบบโดย | จอห์น แบคคัส |
| นักพัฒนา | จอห์น แบคคัส และไอบีเอ็ม |
| ปรากฏครั้งแรก | 1957 |
| เวอร์ชันเสถียร | Fortran 2023 (ISO/IEC 1539:2023) / 17 พฤศจิกายน 2023 |
| วินัยในการพิมพ์ | แข็งแกร่งมั่นคงชัดเจน |
| นามสกุลไฟล์ | .f90, .f,.for |
| เว็บไซต์ | fortran-lang.org |
| การนำไปใช้งานหลักๆ | |
| Absoft , Cray , GFortran , G95 , IBM XL Fortran, Intel , Hitachi , Lahey/Fujitsu, Numerical Algorithms Group , Open Watcom , PathScale , PGI , Silverfrost , Oracle Solaris Studio , VAX/DEC/VSIและอื่นๆ | |
| ได้รับอิทธิพลจาก | |
| การกำหนดความเร็ว | |
| ได้รับอิทธิพล | |
| ALGOL 58 , BASIC , C , Chapel , [ 1 ] CMS-2 , DOPE , Fortress , MATLAB , PL/I , PACT I , MUMPS , IDL , Ratfor , SAKO [ 2 ] | |
| บทความนี้เป็นส่วนหนึ่งของชุดบทความเกี่ยวกับ ภาษาโปรแกรมฟอร์ทราน |
ฟอร์แทรน ( / ˈ f ɔːr t r æ n / ; เดิมชื่อFORTRAN ) เป็นภาษาโปรแกรมเชิงคำสั่งแบบคอมไพล์รุ่นที่สามซึ่งออกแบบมาเพื่อการคำนวณเชิงตัวเลขและ การ คำนวณ ทางวิทยาศาสตร์
ภาษา Fortran เดิมทีได้รับการพัฒนาโดยIBMโดยมีคู่มืออ้างอิงเผยแพร่ในปี 1956 [ 3 ]อย่างไรก็ตาม คอมไพเลอร์ตัวแรกเริ่มสร้างโค้ดที่ถูกต้องได้ในอีกสองปีต่อมา[ 4 ]โปรแกรมคอมพิวเตอร์ Fortran ถูกเขียนขึ้นเพื่อรองรับการใช้งานทางวิทยาศาสตร์และวิศวกรรม เช่นการพยากรณ์อากาศเชิงตัวเลขการวิเคราะห์องค์ประกอบจำกัดพลศาสตร์ของไหลเชิง คำนวณ ฟิสิกส์ พลาสมาธรณีฟิสิกส์ฟิสิกส์เชิงคำนวณผลึกศาสตร์และเคมีเชิงคำนวณเป็นภาษาที่ได้รับความนิยมสำหรับการคำนวณประสิทธิภาพสูง[ 5 ] และใช้สำหรับโปรแกรมที่ใช้วัดประสิทธิภาพและจัดอันดับ ซูเปอร์คอมพิวเตอร์ที่เร็วที่สุดในโลก[ 6 ] [ 7 ]
ภาษาฟอร์แทรนได้รับการพัฒนาผ่านเวอร์ชันและภาษาถิ่นต่างๆ มากมาย เวอร์ชันแรกๆ ที่สำคัญที่สุดสองเวอร์ชันคือ FORTRAN II และ FORTRAN IV [ 8 ]ในปี พ.ศ. 2509 สถาบันมาตรฐานแห่งชาติอเมริกัน (ANSI) ได้พัฒนามาตรฐานสำหรับฟอร์แทรนเพื่อจำกัดการแพร่กระจายของคอมไพเลอร์ที่ใช้ไวยากรณ์ที่แตกต่างกันเล็กน้อย[ 9 ]เวอร์ชันต่อๆ มาได้เพิ่มการสนับสนุนสำหรับชนิดข้อมูลอักขระการเขียนโปรแกรมแบบมีโครงสร้าง (Fortran 77) การเขียนโปรแกรม แบบอาร์เรย์การเขียนโปรแกรมแบบโมดูลาร์การเขียนโปรแกรมแบบเจเนริก (Fortran 90) การ คำนวณแบบขนาน ( Fortran 95 ) การเขียนโปรแกรมเชิงวัตถุ (Fortran 2003) และการเขียนโปรแกรมแบบพร้อมกัน (Fortran 2008)

การตั้งชื่อ
คู่มือฉบับแรกสำหรับ FORTRAN อธิบายว่าเป็นระบบแปลสูตรและพิมพ์ชื่อด้วยตัวพิมพ์เล็กFortran [ 10 ] : หน้า 2 [ 11 ] แหล่งข้อมูลอื่นแนะนำ ว่า ชื่อนี้หมายถึงตัวแปลสูตร[ 12 ]หรือโดยทั่วไปคือ การ แปลสูตร[ 13 ] [ 14 ] [ 15 ]
คอมพิวเตอร์ IBM รุ่นแรกๆ ไม่รองรับ ตัวอักษรพิมพ์ เล็กและชื่อของเวอร์ชันภาษาจนถึง FORTRAN 77 มักจะเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด[ 16 ] FORTRAN 77 เป็นเวอร์ชันสุดท้ายที่ชุดอักขระ Fortran ประกอบด้วยตัวอักษรพิมพ์ใหญ่เท่านั้น[ 17 ]
มาตรฐาน Fortran 90 เปลี่ยนชื่อภาษาจาก "FORTRAN" ที่เขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด เป็น "Fortran" ที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่[ 18 ]
ต้นกำเนิด

ในช่วงปลายปี 1953 John W. Backusได้ยื่นข้อเสนอต่อผู้บังคับบัญชาของเขาที่IBMเพื่อพัฒนาทางเลือกที่ใช้งานได้จริงมากกว่าภาษาแอสเซมบลีสำหรับการเขียนโปรแกรมคอมพิวเตอร์เมนเฟรม IBM 704 ของพวกเขา[ 11 ] : 69 ทีม FORTRAN ในประวัติศาสตร์ของ Backus ประกอบด้วยโปรแกรมเมอร์ Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt , Robert Nelson, Irving Ziller, Harold Stern, Lois HaibtและDavid Sayre [ 19 ] แนวคิดของพวกเขารวมถึงการป้อนสมการลงในคอมพิวเตอร์ได้ง่ายขึ้น ซึ่งเป็นแนวคิดที่พัฒนาโดยJ. Halcombe Laningและแสดงให้เห็นในระบบ Laning และ Zierlerในปี 1952 [ 20 ]เช่นเดียวกับการพัฒนาอื่นๆ ในช่วงแรกของการคำนวณ มีความพยายามคู่ขนานที่เป็นอิสระ หลายอย่าง ในแนวทางเหล่านี้ โดยมีตัวอย่างอื่นๆ ของภาษา proto-Fortran รวมถึงระบบ A-0สำหรับUNIVAC I และ MATH-MATICที่ตามมา ภาย ใต้การ กำกับดูแลของGrace Murray Hopperงานภาษาขั้นสูงที่พัฒนาโดยHeinz Rutishauserสำหรับ คอมพิวเตอร์ Zuse 4และ งาน Autocode Mark 1 ที่ทำโดยRA BrookerสำหรับFerranti Mercury [ 15 ]

ข้อกำหนดฉบับร่างสำหรับระบบแปลสูตรคณิตศาสตร์ของ IBMเสร็จสมบูรณ์ในเดือนพฤศจิกายน พ.ศ. 2497 [ 11 ] : 71 คู่มือฉบับแรกสำหรับ FORTRAN ปรากฏในเดือนตุลาคม พ.ศ. 2499 [ 10 ] [ 11 ] : 72 พร้อมกับ คอมไพเลอร์ FORTRAN ตัวแรกที่ส่งมอบในเดือนเมษายน พ.ศ. 2490 [ 11 ] : 75 FORTRAN สร้างโค้ดที่มีประสิทธิภาพเพียงพอสำหรับ โปรแกรมเมอร์ ภาษาแอสเซมบลีที่จะยอมรับการแทนที่ภาษาการเขียนโปรแกรมระดับสูง[ 8 ]
จอห์น แบคคัส กล่าวในการสัมภาษณ์กับThinkซึ่งเป็นนิตยสารสำหรับพนักงานของ IBM ในปี 1979 ว่า "งานส่วนใหญ่ของผมมาจากความขี้เกียจ ผมไม่ชอบเขียนโปรแกรม ดังนั้น เมื่อผมทำงานเกี่ยวกับIBM 701โดยเขียนโปรแกรมสำหรับการคำนวณวิถีขีปนาวุธ ผมจึงเริ่มทำงานกับระบบการเขียนโปรแกรมเพื่อให้การเขียนโปรแกรมง่ายขึ้น" [ 21 ]
ภาษานี้ได้รับการยอมรับอย่างกว้างขวางจากนักวิทยาศาสตร์ในการเขียนโปรแกรมที่เน้นการคำนวณเชิงตัวเลข ซึ่งกระตุ้นให้นักเขียนคอมไพเลอร์สร้างคอมไพเลอร์ที่สามารถสร้างโค้ดที่เร็วและมีประสิทธิภาพมากขึ้น การรวมชนิดข้อมูลจำนวนเชิงซ้อนในภาษานี้ทำให้ Fortran เหมาะอย่างยิ่งสำหรับการใช้งานทางเทคนิค เช่น วิศวกรรมไฟฟ้า[ 22 ]
ภายในปี 1960 มีเวอร์ชันของ FORTRAN สำหรับ คอมพิวเตอร์ IBM 709 , 650 , 1620และ7090ที่สำคัญคือ ความนิยมที่เพิ่มขึ้นของ FORTRAN กระตุ้นให้ผู้ผลิตคอมพิวเตอร์คู่แข่งจัดหาคอมไพเลอร์ FORTRAN สำหรับเครื่องของตน ดังนั้นภายในปี 1963 จึงมีคอมไพเลอร์ FORTRAN มากกว่า 40 ตัว ภาษาดังกล่าวแพร่หลายในอุตสาหกรรมคอมพิวเตอร์มากจนกระทั่งในเวลานั้น มีการแจกจ่ายคู่มือ FORTRAN ทุกประเภทมากกว่า 220,000 เล่ม[ 15 ]
FORTRAN ถูกจัดเตรียมไว้สำหรับ คอมพิวเตอร์ IBM 1401โดยคอมไพเลอร์ 63 เฟสที่เป็นนวัตกรรมใหม่ ซึ่งทำงานทั้งหมดในหน่วยความจำหลักที่มีอักขระเพียง 8000 ตัว (หกบิต) คอมไพเลอร์สามารถทำงานได้จากเทปหรือจากเด็คการ์ด 2200 ใบ โดยไม่ต้องใช้เทปหรือดิสก์จัดเก็บข้อมูลเพิ่มเติม มันเก็บโปรแกรมไว้ในหน่วยความจำและโหลดโอเวอร์เลย์ที่ค่อยๆ แปลงโปรแกรมในตำแหน่งเดิมให้เป็นรูปแบบที่สามารถเรียกใช้งานได้ ดังที่ Haines ได้อธิบายไว้[ 23 ] บทความนี้ได้รับการพิมพ์ซ้ำและแก้ไขในAnatomy of a Compiler ทั้งสองฉบับ [ 24 ]และในคู่มือ IBM "Fortran Specifications and Operating Procedures, IBM 1401" [ 25 ] รูปแบบที่สามารถเรียกใช้งานได้นั้นไม่ใช่ภาษาเครื่อง ทั้งหมด แต่การคำนวณเลขทศนิยม การเขียนสคริปต์ย่อย การรับ/ส่งข้อมูล และการอ้างอิงฟังก์ชันจะถูกตีความ ซึ่งมาก่อนรหัส P-code ของ UCSD Pascal ถึงสองทศวรรษGOTRANซึ่งเป็นเวอร์ชันที่เรียบง่ายและตีความได้ของ FORTRAN I (มีคำสั่งเพียง 12 ประเภท ไม่ใช่ 32 ประเภท) สำหรับการดำเนินการ "โหลดและไป" นั้นมีให้ใช้งาน (อย่างน้อยก็สำหรับ คอมพิวเตอร์ IBM 1620 รุ่นแรก ) [ 26 ] Fortran สมัยใหม่ และเกือบทุกเวอร์ชันในภายหลัง ได้รับการคอมไพล์อย่างสมบูรณ์ เช่นเดียวกับภาษาประสิทธิภาพสูงอื่นๆ
การพัฒนาของ Fortran เกิดขึ้นควบคู่ไปกับการพัฒนาเทคโนโลยีคอมไพเลอร์ในช่วงแรกและความก้าวหน้าหลายอย่างในทฤษฎีและการออกแบบคอมไพเลอร์ได้รับแรงบันดาลใจโดยเฉพาะจากความต้องการสร้างโค้ดที่มีประสิทธิภาพสำหรับโปรแกรม Fortran [ 27 ]อันที่จริง คอมไพเลอร์ Fortran เป็นหนึ่งในโปรแกรมที่ซับซ้อนที่สุดที่มีอยู่ ณ เวลานั้น และถูกใช้โดยกลุ่มทดสอบผลิตภัณฑ์ของ IBM ในPoughkeepsie รัฐนิวยอร์กเป็นส่วนหนึ่งของการทดสอบการยอมรับสำหรับคอมพิวเตอร์ที่สร้างขึ้นใหม่[ 15 ]
ฟอร์แทรน
การเปิดตัว FORTRAN ครั้งแรกสำหรับ IBM 704 [ 10 ] ประกอบด้วย คำสั่ง 32 ประเภทรวมถึง:
DIMENSIONและEQUIVALENCEคำแถลง- ข้อความมอบหมาย
- คำสั่ง คำนวณเลขคณิต
IFแบบสามทาง(ซึ่งปัจจุบันเลิกใช้แล้ว ) ที่ส่งการควบคุมไปยังหนึ่งในสามตำแหน่งในโปรแกรม ขึ้นอยู่กับว่าผลลัพธ์ของการคำนวณเลขคณิตนั้นเป็นลบ ศูนย์ หรือบวก - คำสั่งควบคุมสำหรับตรวจสอบข้อยกเว้น (
IF ACCUMULATOR OVERFLOW,IF QUOTIENT OVERFLOW, และIF DIVIDE CHECK); และคำสั่งควบคุมสำหรับจัดการสวิตช์ตรวจจับและไฟแสดงสถานะตรวจจับ (IF (SENSE SWITCH),IF (SENSE LIGHT), และSENSE LIGHT) GO TOคำนวณGO TOและASSIGNกำหนดGO TODOลูป- รูปแบบการรับส่งข้อมูล:
FORMAT,READ,READ INPUT TAPE,WRITE OUTPUT TAPE,PRINT, และPUNCH - อินพุต/เอาต์พุตที่ไม่ได้จัดรูปแบบ:
READ TAPE,READ DRUM,WRITE TAPE, และWRITE DRUM - อินพุต/เอาต์พุตอื่นๆ:
END FILE,REWIND, และBACKSPACE PAUSE,STOP, และCONTINUEFREQUENCYคำสั่ง (สำหรับให้ คำแนะนำ ในการปรับแต่งประสิทธิภาพแก่คอมไพเลอร์)
คำสั่ง ทางคณิตศาสตร์นั้นIFชวนให้นึกถึง (แต่ไม่สามารถนำไปใช้งานได้โดยตรง) คำสั่งเปรียบเทียบแบบสามทาง (CAS—Compare Accumulator with Storage) ที่มีอยู่ใน 704 คำสั่งนี้เป็นวิธีเดียวในการเปรียบเทียบตัวเลข โดยการทดสอบความแตกต่างของตัวเลข ซึ่งมีความเสี่ยงที่จะเกิดการโอเวอร์โฟลว์ ข้อบกพร่องนี้ได้รับการแก้ไขในภายหลังด้วยฟังก์ชัน "เชิงตรรกะ" ที่นำมาใช้ใน FORTRAN IV
เดิมทีคำสั่ง นี้FREQUENCYใช้ (และเป็นทางเลือก) เพื่อระบุความน่าจะเป็นของการแยกสาขาสำหรับกรณีการแยกสาขาทั้งสามของIFคำสั่งทางคณิตศาสตร์ นอกจากนี้ยังสามารถใช้เพื่อแนะนำจำนวนรอบที่DOลูปอาจทำงานได้ คอมไพเลอร์ FORTRAN ตัวแรกใช้การถ่วงน้ำหนักนี้เพื่อทำการจำลองแบบมอนเตคาร์โลของโค้ดที่สร้างขึ้นในระหว่างการคอมไพล์ซึ่งผลลัพธ์ที่ได้จะถูกนำมาใช้เพื่อเพิ่มประสิทธิภาพการจัดวางบล็อกพื้นฐานในหน่วยความจำ ซึ่งเป็นการเพิ่มประสิทธิภาพที่ซับซ้อนมากสำหรับยุคนั้น เทคนิคมอนเตคาร์โลนี้ได้รับการบันทึกไว้ในบทความของ Backus และคณะเกี่ยวกับการใช้งานดั้งเดิมนี้ ในชื่อThe FORTRAN Automatic Coding System :
หน่วยพื้นฐานของโปรแกรมคือบล็อกพื้นฐาน บล็อกพื้นฐานคือส่วนของโปรแกรมที่มีจุดเริ่มต้นหนึ่งจุดและจุดสิ้นสุดหนึ่งจุด วัตถุประสงค์ของส่วนที่ 4 คือการเตรียมตารางตัวก่อนหน้า (ตาราง PRED) สำหรับส่วนที่ 5 ซึ่งแสดงรายการบล็อกพื้นฐานและแสดงรายการบล็อกพื้นฐานแต่ละบล็อกที่สามารถเป็นตัวก่อนหน้าโดยตรงในลำดับการไหล พร้อมกับความถี่สัมบูรณ์ของการเชื่อมโยงบล็อกพื้นฐานดังกล่าวแต่ละรายการ ตารางนี้ได้มาจากการรันโปรแกรมหนึ่งครั้งในลักษณะมอนเตคาร์โล ซึ่งผลลัพธ์ของการถ่ายโอนแบบมีเงื่อนไขที่เกิดขึ้นจากคำสั่งประเภท IF และ GO TO ที่คำนวณได้จะถูกกำหนดโดยตัวสร้างตัวเลขสุ่มที่มีการถ่วงน้ำหนักอย่างเหมาะสมตามคำสั่ง FREQUENCY ที่ให้ไว้[ 19 ]
คอมไพเลอร์ FORTRAN ตัวแรกรายงานข้อมูลการวินิจฉัยโดยการหยุดโปรแกรมเมื่อพบข้อผิดพลาดและแสดงรหัสข้อผิดพลาดบนคอนโซล โปรแกรมเมอร์สามารถค้นหารหัสดังกล่าวได้ในตารางข้อความแสดงข้อผิดพลาดในคู่มือการใช้งาน ซึ่งให้คำอธิบายสั้น ๆ เกี่ยวกับปัญหา[ 10 ] : หน้า 19–20 [ 28 ]ต่อมาได้มีการรวมซับรูทีนการจัดการข้อผิดพลาดเพื่อจัดการข้อผิดพลาดของผู้ใช้ เช่น การหารด้วยศูนย์ ซึ่งพัฒนาโดย NASA [ 29 ]เข้ามา เพื่อแจ้งให้ผู้ใช้ทราบว่าบรรทัดใดของโค้ดมีข้อผิดพลาด
รูปแบบคงที่และบัตรเจาะรู



ก่อนการพัฒนาไฟล์ดิสก์ โปรแกรมแก้ไขข้อความ และเทอร์มินัล โปรแกรมส่วนใหญ่มักถูกป้อนลงบน แป้น พิมพ์เจาะรูแบบ 80 คอลัมน์ โดยแต่ละบรรทัดอยู่บน บัตรหนึ่งใบ จากนั้นจะนำบัตรที่เจาะแล้วไปใส่ในเครื่องอ่านบัตรเพื่อทำการคอมไพล์ รหัสบนบัตรเจาะรูไม่มีตัวอักษรพิมพ์เล็กหรืออักขระพิเศษจำนวนมาก จึงมี เครื่องเจาะรู IBM 026 รุ่นพิเศษที่สามารถพิมพ์อักขระพิเศษที่ใช้ในภาษา FORTRAN ได้อย่างถูกต้อง
เนื่องจากเป็นการสะท้อนถึงวิธีการป้อนข้อมูลด้วยบัตรเจาะรู โปรแกรม Fortran จึงถูกเขียนขึ้นในรูปแบบคอลัมน์คงที่ในตอนแรก หากมีตัวอักษร "C" ในคอลัมน์ที่ 1 บัตรทั้งหมดจะถูกมองว่าเป็นข้อความแสดงความคิดเห็นและถูกละเลยโดยคอมไพเลอร์ มิฉะนั้น คอลัมน์ของบัตรจะถูกแบ่งออกเป็นสี่ช่อง:
- ตัวเลข 1 ถึง 5 เป็นช่องสำหรับระบุป้ายกำกับ: ลำดับตัวเลขในช่องนี้จะถูกนำมาใช้เป็นป้ายกำกับในคำสั่ง DO หรือคำสั่งควบคุม เช่น GO TO และ IF หรือเพื่อระบุคำสั่ง FORMAT ที่อ้างถึงในคำสั่ง WRITE หรือ READ เลขศูนย์นำหน้าจะถูกละเว้น และ 0 ไม่ใช่หมายเลขป้ายกำกับที่ถูกต้อง
- ช่องที่ 6 เป็นช่องสำหรับต่อข้อความ: อักขระอื่นที่ไม่ใช่ช่องว่างหรือเลขศูนย์ในช่องนี้ จะทำให้การ์ดใบนั้นถือเป็นส่วนต่อจากข้อความในการ์ดใบก่อนหน้า โดยปกติการ์ดต่อข้อความจะมีหมายเลข 1, 2 เป็นต้นและการ์ดเริ่มต้นอาจมีเลขศูนย์ในช่องต่อข้อความ ซึ่งไม่ใช่ส่วนต่อจากการ์ดใบก่อนหน้า
- หมายเลข 7 ถึง 72 มีช่องสำหรับใส่ข้อความ
- 73 ถึง 80 ถูกละเลย (เครื่องอ่านการ์ดสำหรับ IBM 704 ซึ่งเป็นคอมพิวเตอร์ที่ใช้พัฒนา Fortran สามารถอ่านได้เพียง 72 คอลัมน์ โดยจัดวางลงในคำ 36 บิตจำนวน 24 คำ) [ 30 ]
ดังนั้น คอลัมน์ที่ 73 ถึง 80 จึงสามารถใช้สำหรับข้อมูลระบุตัวตน เช่น การตอกหมายเลขลำดับหรือข้อความ ซึ่งสามารถใช้เพื่อจัดเรียงการ์ดใหม่ได้หากกองการ์ดหล่นลงมา แม้ว่าในทางปฏิบัติแล้วสิ่งนี้จะสงวนไว้สำหรับโปรแกรมการผลิตที่เสถียรก็ตามIBM 519สามารถใช้เพื่อคัดลอกชุดโปรแกรมและเพิ่มหมายเลขลำดับได้ คอมไพเลอร์รุ่นแรกๆ บางตัว เช่น IBM 650 มีข้อจำกัดเพิ่มเติมเนื่องจากข้อจำกัดของเครื่องอ่านการ์ด[ 31 ] สามารถตั้งโปรแกรมการ ตอกบัตรให้แท็บไปที่คอลัมน์ที่ 7 และข้ามไปหลังจากคอลัมน์ที่ 72 คอมไพเลอร์รุ่นหลังๆ ได้ผ่อนคลายข้อจำกัดรูปแบบคงที่ส่วนใหญ่ และข้อกำหนดนี้ถูกยกเลิกในมาตรฐาน Fortran 90
ภายในช่องข้อความตัวอักขระเว้นวรรค (ช่องว่าง) จะถูกละเว้นนอกข้อความหลัก วิธีนี้ช่วยให้สามารถละเว้นช่องว่างระหว่างโทเค็นเพื่อความกระชับ หรือรวมช่องว่างภายในตัวระบุเพื่อความชัดเจนได้ ตัวอย่างเช่นAVG OF Xเป็นตัวระบุที่ถูกต้อง เทียบเท่ากับAVGOFXและเป็นข้อความที่ถูกต้อง เทียบเท่ากับเนื่องจากเลขศูนย์ในคอลัมน์ที่ 6 ถูกมองว่าเป็นช่องว่าง ในขณะที่เป็น แทน ซึ่งเป็นการกำหนดค่า 1.101 ให้กับตัวแปรชื่อโปรดสังเกตความแตกต่างเล็กน้อยระหว่างเครื่องหมายจุลภาคและจุด 101010DO101I=1,10110101DO 101I=1,101101010DO101I=1.10110101DO101I=1.101DO101I
สตริง Hollerithซึ่งเดิมอนุญาตให้ใช้ได้เฉพาะในคำสั่ง FORMAT และ DATA เท่านั้น จะมีคำนำหน้าด้วยจำนวนอักขระและตัวอักษร H (เช่น26HTHIS IS ALPHANUMERIC DATA.) ซึ่งช่วยให้สามารถคงช่องว่างไว้ในสตริงอักขระได้ แต่การนับจำนวนผิดพลาดก็เป็นปัญหาอยู่
วิวัฒนาการ
| ปี | ชื่อเรียกอย่างไม่เป็นทางการ | มาตรฐานอย่างเป็นทางการ |
|---|---|---|
| 1957 | ฟอร์แทรน | ไม่มีข้อมูล |
| 1958 | ฟอร์แทรน 2 | ไม่มีข้อมูล |
| 1958 | ฟอร์แทรน III | ไม่มีข้อมูล |
| 1961 | ฟอร์แทรน IV | ไม่มีข้อมูล |
| พ.ศ. 2509 | ฟอร์แทรน 66 | ANSI X3.9-1966 |
| พ.ศ. 2521 | ฟอร์แทรน 77 | ANSI X3.9-1978 ISO 1539:1980 |
| 1991 | ฟอร์ทราน 90 | ANSI X3.198-1992 ISO/IEC 1539:1991 |
| พ.ศ. 2540 | ฟอร์ทราน 95 | ISO/IEC 1539-1:1997 |
| 2004 | ฟอร์ทราน 2003 | ISO/IEC 1539-1:2004 |
| 2010 | ฟอร์ทราน 2008 | ISO/IEC 1539-1:2010 |
| 2018 | ฟอร์ทราน 2018 | ISO/IEC 1539-1:2018 |
| 2023 | ฟอร์ทราน 2023 | ISO/IEC 1539-1:2023 |
ฟอร์แทรน 2
FORTRAN IIของ IBM ปรากฏขึ้นในปี พ.ศ. 2491 การปรับปรุงหลักคือการสนับสนุนการเขียนโปรแกรมเชิงขั้นตอนโดยอนุญาตให้ผู้ใช้เขียนซับรูทีนและฟังก์ชันที่ส่งคืนค่าด้วยพารามิเตอร์ที่ส่งผ่านโดยการอ้างอิงคำสั่ง COMMON ให้วิธีการสำหรับซับรูทีนในการเข้าถึงตัวแปรทั่วไป (หรือตัวแปรส่วนกลาง ) มีการแนะนำคำสั่งใหม่หกคำสั่ง: [ 32 ]
SUBROUTINE,FUNCTION, และENDCALLและRETURNCOMMON
ในมุมมองของโรเบิร์ต เบเมอร์ ผู้บุกเบิกด้านการคำนวณ การเพิ่มซับรูทีนที่คอมไพล์แยกต่างหากลงในภาษาถือเป็น "การพัฒนาที่มีความสำคัญเทียบเท่ากับ FORTRAN ดั้งเดิม" [ 15 ]
ในช่วงไม่กี่ปีต่อมา FORTRAN II ได้เพิ่มการรองรับชนิดข้อมูล DOUBLE PRECISIONและCOMPLEX
คอมไพเลอร์ FORTRAN รุ่นแรกๆ ไม่รองรับการเรียกซ้ำในซับรูทีน สถาปัตยกรรมคอมพิวเตอร์รุ่นแรกๆ ไม่รองรับแนวคิดของสแต็ก และเมื่อพวกเขารองรับการเรียกซับรูทีนโดยตรง ตำแหน่งการส่งกลับมักจะถูกเก็บไว้ในตำแหน่งคงที่ที่อยู่ติดกับโค้ดซับรูทีน (เช่นIBM 1130 ) หรือรีจิสเตอร์เครื่องเฉพาะ ( IBM 360 เป็นต้นไป ) ซึ่งอนุญาตให้มีการเรียกซ้ำได้ก็ต่อเมื่อซอฟต์แวร์รักษาสแต็กไว้ และที่อยู่การส่งกลับถูกเก็บไว้ในสแต็กก่อนที่จะทำการเรียก และถูกกู้คืนหลังจากที่การเรียกส่งกลับเสร็จสิ้น การขาดการเรียกซ้ำเป็นข้อเสียเปรียบอย่างมากต่อภาษาที่ใช้ร่วมกับอัลกอริธึมและแอปพลิเคชันบางอย่าง[ 33 ]และจำกัดวิธีที่โปรแกรมเมอร์สามารถคิดเกี่ยวกับสิ่งต่างๆ ดังกล่าวได้[ 34 ]แม้ว่าจะไม่ได้ระบุไว้ใน FORTRAN 77 แต่คอมไพเลอร์ F77 จำนวนมากรองรับการเรียกซ้ำเป็นตัวเลือก[ 35 ]และเมนเฟรม Burroughsซึ่งออกแบบมาโดยมีการเรียกซ้ำในตัว ก็ใช้การเรียกซ้ำเป็นค่าเริ่มต้น มันกลายเป็นมาตรฐานใน Fortran 90 ผ่านคำหลักใหม่ RECURSIVE [ 36 ]
โปรแกรม FORTRAN II อย่างง่าย
โปรแกรมนี้ใช้สำหรับสูตรของเฮรอนโดยอ่านข้อมูลจากเทปม้วนที่มีจำนวนเต็ม 5 หลัก 3 ตัว คือ A, B และ C เป็นข้อมูลป้อนเข้า ไม่มีการประกาศ "ชนิดข้อมูล" ใดๆ ตัวแปรที่มีชื่อขึ้นต้นด้วย I, J, K, L, M หรือ N จะเป็น "จำนวนเต็มแบบคงที่" (fixed-point) มิฉะนั้นจะเป็นจำนวนเต็มแบบลอยตัว (floating-point) เนื่องจากในตัวอย่างนี้จะประมวลผลจำนวนเต็ม ดังนั้นชื่อของตัวแปรจึงขึ้นต้นด้วยตัวอักษร "I" ชื่อของตัวแปรต้องขึ้นต้นด้วยตัวอักษรและสามารถต่อด้วยตัวอักษรและตัวเลขได้ โดยมีจำนวนอักขระสูงสุดไม่เกิน 6 ตัวในภาษา FORTRAN II หาก A, B และ C ไม่สามารถแทนด้านของรูปสามเหลี่ยมในเรขาคณิตระนาบได้ การทำงานของโปรแกรมจะสิ้นสุดลงด้วยรหัสข้อผิดพลาด "STOP 1" มิเช่นนั้น จะมีการพิมพ์บรรทัดผลลัพธ์ที่แสดงค่าอินพุตสำหรับ A, B และ C ตามด้วยพื้นที่ของสามเหลี่ยมที่คำนวณได้ในรูปแบบตัวเลขทศนิยม โดยใช้พื้นที่สิบตำแหน่งตามบรรทัดผลลัพธ์ และแสดงตัวเลขสองหลักหลังจุดทศนิยม ซึ่งก็คือ .2 ใน F10.2 ของคำสั่ง FORMAT ที่มีป้ายกำกับ 601
C พื้นที่ของสามเหลี่ยมที่มีฟังก์ชันรากที่สองมาตรฐานช่องป้อนข้อมูล C - หน่วยอ่านเทป 5, ช่องป้อนข้อมูลจำนวนเต็มเอาต์พุต C - หน่วยเครื่องพิมพ์แบบบรรทัดที่ 6, เอาต์พุตจริงC ข้อผิดพลาดในการป้อนข้อมูล ข้อผิดพลาดในการแสดงผล รหัสเอาต์พุต 1 ในรายการควบคุมงานอ่านเทปอินพุต5 , 501 , IA , IB , ICรูปแบบ 501 ( 3 I5 )C IA, IB และ IC ต้องไม่เป็นค่าลบหรือศูนย์นอกจากนี้ ผลรวมของด้านสองด้านของรูปสามเหลี่ยมC ต้องมากกว่าด้านที่สาม ดังนั้นเราจึงตรวจสอบด้านนั้นด้วยเช่นกันIF ( IA ) 777 , 777 , 701 701 IF ( IB ) 777 , 777 , 702 702 IF ( IC ) 777 , 777 , 703 703 IF ( IA + IB - IC ) 777 , 777 , 704 704 IF ( IA + IC - IB ) 777 , 777 , 705 705 IF ( IB + IC - IA ) 777 , 777 , 799 777 จุดจอดที่1C. โดยใช้สูตรของเฮรอน เราคำนวณได้ดังนี้พื้นที่ของสามเหลี่ยม 799 S = FLOATF ( IA + IB + IC ) / 2.0พื้นที่= √ ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) *+ ( S - FLOATF ( IC )))เขียนเทปเอาต์พุต6 , 601 , IA , IB , IC , AREA 601 FORMAT ( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H AREA = , F10 . 2 ,+ 13 หน่วยสี่เหลี่ยมจัตุรัสH )หยุดจบฟอร์แทรน III
IBM ยังได้พัฒนาFORTRAN IIIในปี 1958 ซึ่งอนุญาตให้ใช้ โค้ด แอสเซมบลีแบบอินไลน์รวมถึงคุณสมบัติอื่นๆ ด้วย อย่างไรก็ตาม เวอร์ชันนี้ไม่เคยถูกวางจำหน่ายเป็นผลิตภัณฑ์ เช่นเดียวกับ 704 FORTRAN และ FORTRAN II, FORTRAN III มีคุณสมบัติที่ขึ้นอยู่กับเครื่อง ซึ่งทำให้โค้ดที่เขียนด้วย FORTRAN III ไม่สามารถพกพาได้จากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง รวมถึงการรองรับนิพจน์บูลีนด้วย[ 11 ] : 76 เวอร์ชันแรกๆ ของ FORTRAN ที่จัดหาโดยผู้จำหน่ายรายอื่นก็ประสบกับข้อเสียเปรียบเดียวกันนี้
ฟอร์แทรน IV
IBM เริ่มพัฒนาFORTRAN IVในปี 1961 อันเป็นผลมาจากความต้องการของลูกค้า FORTRAN IV ได้ลบคุณสมบัติที่ขึ้นอยู่กับเครื่องของ FORTRAN II ออกไป (เช่นREAD INPUT TAPE) ในขณะเดียวกันก็เพิ่มคุณสมบัติใหม่ เช่นLOGICALชนิดข้อมูลนิพจน์บูลีนเชิงตรรกะและคำสั่ง IF เชิงตรรกะซึ่งเป็นทางเลือกแทนคำสั่ง IF ทางคณิตศาสตร์ มีการเพิ่มการประกาศชนิดข้อมูล พร้อมกับIMPLICITคำสั่งเพื่อแทนที่ธรรมเนียมเดิมที่ระบุว่าตัวแปรเป็นINTEGERถ้าชื่อขึ้นต้นด้วยI, J, K, L, MหรือN; และREALเป็น มิฉะนั้น[ 37 ] : หน้า 70, 71 [ 38 ] : หน้า 6–9
FORTRAN IV ได้รับการเผยแพร่ในที่สุดในปี พ.ศ. 2505 โดยเริ่มแรกสำหรับ คอมพิวเตอร์ IBM 7030 ("Stretch") ตามด้วยเวอร์ชันสำหรับIBM 7090/7094ในปี พ.ศ. 2506 [ 39 ]และต่อมาสำหรับIBM 1401ในปี พ.ศ. 2509 [ 40 ]
ภายในปี พ.ศ. 2508 FORTRAN IV ควรจะสอดคล้องกับมาตรฐานที่กำลังพัฒนาโดยAmerican Standards Association X3.4.3 FORTRAN Working Group [ 14 ]
ระหว่างปี พ.ศ. 2509 ถึง พ.ศ. 2511 IBM ได้นำเสนอคอมไพเลอร์ FORTRAN IV หลายตัวสำหรับSystem/360โดยแต่ละตัวตั้งชื่อตามตัวอักษรที่ระบุปริมาณหน่วยความจำขั้นต่ำที่คอมไพเลอร์ต้องการในการทำงาน [ 41 ] ตัวอักษร (F, G, H) ตรงกับรหัสที่ใช้กับหมายเลขรุ่นของ System/360 เพื่อระบุขนาดหน่วยความจำ โดยตัวอักษรแต่ละตัวจะเพิ่มขึ้นเป็นสองเท่า: [ 42 ] : หน้า 5
- 1966 : FORTRAN IV F สำหรับ DOS/360 (64K ไบต์)
- 1966 : FORTRAN IV G สำหรับ OS/360 (128 กิโลไบต์)
- 1968 : FORTRAN IV H สำหรับ OS/360 (256 กิโลไบต์)
โดยเฉพาะอย่างยิ่ง คอมไพเลอร์ FORTRAN H มีบทบาทสำคัญในการพัฒนาแนวทางการเพิ่มประสิทธิภาพบางประเภท เช่น การจัดสรรรีจิสเตอร์ชุดเฉพาะเพื่อเก็บค่าของตัวแปรขณะอยู่ในลูป[ 43 ]โดยรวมแล้ว คอมไพเลอร์มีการเพิ่มประสิทธิภาพได้ 3 ระดับ[ 43 ]เนื่องจากนักพัฒนาคอมไพเลอร์ Fortran ได้เรียนรู้ตั้งแต่เนิ่นๆ ว่าความสามารถในการปิดการเพิ่มประสิทธิภาพเป็นสิ่งจำเป็น เพราะมันทำให้เวลาในการคอมไพล์เพิ่มขึ้นอย่างมากสำหรับการทำงานของโปรแกรมที่มักจะไม่ทำงานอยู่แล้ว[ 15 ] แม้จะมีหน่วยความจำหลักจำนวนมากให้ใช้ คอมไพเลอร์ FORTRAN H ก็ยังคงถูกจัดระเบียบผ่านโอเวอร์เลย์จำนวนหนึ่ง[ 43 ]โดยรวมแล้ว คอมไพเลอร์ Fortran เป็นแหล่งรายได้ที่สำคัญสำหรับ IBM โดยมียอดขายประมาณ 300 ล้านดอลลาร์ในปี 1966 (เทียบเท่ากับ 2,977 ล้านดอลลาร์ในปี 2025) [ 15 ]
บริษัท Digital Equipment Corporationดูแลรักษา DECSYSTEM-10 Fortran IV (F40) สำหรับPDP-10ตั้งแต่ปี 1967 ถึง 1975 [ 38 ]คอมไพเลอร์ยังมีให้บริการสำหรับซีรี่ส์ UNIVAC 1100และระบบ ซีรี่ส์ Control Data 6000และ7000 ด้วย [ 44 ]
ในสภาพแวดล้อมการเขียนโปรแกรม FORTRAN IV ในยุคนั้น ยกเว้นระบบที่ใช้ใน Control Data Corporation (CDC) จะมีการวางคำสั่งเพียงคำสั่งเดียวต่อบรรทัด เวอร์ชันของ CDC อนุญาตให้มีคำสั่งหลายคำสั่งต่อบรรทัดได้ หากคั่นด้วย เครื่องหมาย $ (ดอลลาร์) แผ่นงาน FORTRAN แบ่งออกเป็นสี่ส่วน ดังที่ได้อธิบายไว้ข้างต้น
คอมไพเลอร์สองตัวในสมัยนั้น IBM "G" และ UNIVAC อนุญาตให้เขียนความคิดเห็นในบรรทัดเดียวกันกับคำสั่ง โดยคั่นด้วยอักขระพิเศษ: "master space": V (รูเจาะ 7 และ 8) สำหรับ UNIVAC และรูเจาะ 12/11/0/7/8/9 (เลขฐานสิบหก FF) สำหรับ IBM ความคิดเห็นเหล่านี้ไม่ควรแทรกไว้ตรงกลางของการ์ดต่อเนื่อง[ 38 ] [ 44 ]
ฟอร์แทรน 66
บางทีพัฒนาการที่สำคัญที่สุดในประวัติศาสตร์ช่วงต้นของ FORTRAN ก็คือการตัดสินใจของสมาคมมาตรฐานอเมริกัน (ปัจจุบันคือสถาบันมาตรฐานแห่งชาติอเมริกัน (ANSI)) ที่จะจัดตั้งคณะกรรมการซึ่งได้รับการสนับสนุนจากสมาคมผู้ผลิตอุปกรณ์ธุรกิจ (BEMA) เพื่อพัฒนามาตรฐาน Fortran ของอเมริกามาตรฐานสองฉบับที่เกิดขึ้นซึ่งได้รับการอนุมัติในเดือนมีนาคม 1966 ได้กำหนดภาษาไว้สองภาษา คือFORTRAN (อิงจาก FORTRAN IV ซึ่งทำหน้าที่เป็นมาตรฐานโดยพฤตินัย) และBasic FORTRAN (อิงจาก FORTRAN II แต่ตัดคุณสมบัติที่ขึ้นอยู่กับเครื่องออกไป) FORTRAN ที่กำหนดโดยมาตรฐานฉบับแรก ซึ่งมีชื่ออย่างเป็นทางการว่า X3.9-1966 กลายเป็นที่รู้จักในชื่อFORTRAN 66 (แม้ว่าหลายคนยังคงเรียกมันว่า FORTRAN IV ซึ่งเป็นภาษาที่ใช้เป็นพื้นฐานหลักของมาตรฐาน) FORTRAN 66 กลายเป็นมาตรฐานอุตสาหกรรมเวอร์ชันแรกของ FORTRAN อย่างมีประสิทธิภาพ FORTRAN 66 ประกอบด้วย:
- โปรแกรมหลัก,
SUBROUTINE,FUNCTION, และBLOCK DATAหน่วยโปรแกรม INTEGER,REAL,DOUBLE PRECISION,COMPLEX, และLOGICALประเภทข้อมูลCOMMON,DIMENSION, และEQUIVALENCEข้อความDATAคำสั่งสำหรับระบุค่าเริ่มต้น- ฟังก์ชัน ภายในและ
EXTERNAL(เช่น ฟังก์ชันไลบรารี) - คำชี้แจงการมอบหมายงาน
GO TOคำนวณGO TOกำหนดGO TOและASSIGNข้อความ- ประโยค ตรรกะ และ ประโยค
IFคำนวณ (สามทาง)IF DOคำสั่งวนซ้ำREAD,WRITE,BACKSPACE,REWIND, และENDFILEคำสั่งสำหรับการรับส่งข้อมูลแบบลำดับFORMATคำแถลงและรูปแบบที่กำหนดCALL,RETURN,PAUSE, และSTOPข้อความ- ค่าคงที่ของ Hollerithใน ข้อความ
DATAและFORMATอาร์กิวเมนต์สำหรับขั้นตอนต่างๆ - รหัสระบุตัวตนที่มีความยาวไม่เกินหกตัวอักษร
- บรรทัดแสดงความคิดเห็น
ENDเส้น
โปรแกรม Heron เวอร์ชัน Fortran II ข้างต้นจำเป็นต้องมีการแก้ไขหลายอย่างเพื่อให้สามารถคอมไพล์เป็นโปรแกรม Fortran 66 ได้ การแก้ไขรวมถึงการใช้คำ สั่ง READ`and` เวอร์ชันที่เป็นอิสระจากเครื่องมากกว่า WRITEและการลบFLOATFฟังก์ชันการแปลงประเภทที่ไม่จำเป็นออก แม้จะไม่จำเป็น แต่IFสามารถเขียนคำสั่งทางคณิตศาสตร์ใหม่โดยใช้IFคำสั่งและนิพจน์ตรรกะในรูปแบบที่มีโครงสร้างมากขึ้นได้
C พื้นที่ของสามเหลี่ยมที่มีฟังก์ชันรากที่สองมาตรฐานช่องป้อนข้อมูล C - หน่วยอ่านเทป 5, ช่องป้อนข้อมูลจำนวนเต็มเอาต์พุต C - หน่วยเครื่องพิมพ์แบบบรรทัดที่ 6, เอาต์พุตจริงC ข้อผิดพลาดในการป้อนข้อมูล ข้อผิดพลาดในการแสดงผล รหัสเอาต์พุต 1 ในรายการควบคุมงานอ่าน( 5 , 501 ) IA , IB , ICรูปแบบ 501 ( 3 I5 )ซีC IA, IB และ IC ต้องไม่เป็นค่าลบหรือศูนย์นอกจากนี้ ผลรวมของด้านสองด้านของรูปสามเหลี่ยมC ต้องมากกว่าด้านที่สาม ดังนั้นเราจึงตรวจสอบด้านนั้นด้วยเช่นกันถ้า( IA . GT . 0 . และ. IB . GT . 0 . และ. IC . GT . 0 ) ไปที่10เขียน( 6 , 602 )รูปแบบ 602 ( 42 H IA , IB และIC ต้องมากกว่าศูนย์)จุดหยุดที่1 10 ดำเนินการต่อซีถ้า( IA + IB - IC . GT . 0+ . และ. IA + IC - IB . GT . 0+ . และ. IB + IC - IA . GT . 0 ) GOTO 20เขียน( 6 , 603 )รูปแบบ 603 ( 50 H ผลรวมของสองด้านต้องมากกว่าด้านที่สาม)จุดหยุดที่1 20 ดำเนินการต่อซีC. โดยใช้สูตรของเฮรอน เราคำนวณได้ดังนี้พื้นที่ของสามเหลี่ยมS = ( IA + IB + IC ) / 2.0พื้นที่= รากที่สองของ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))เขียน( 6 , 601 ) IA , IB , IC , AREA 601 FORMAT ( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H AREA = , F10 . 2 ,+ 13 หน่วยสี่เหลี่ยมจัตุรัสH )หยุดจบแม้ว่าจะไม่เหมาะสมกับการใช้งานที่เกี่ยวข้องกับกองทัพส่วนใหญ่ แต่ Fortran ก็เป็นหนึ่งในภาษาโปรแกรมระดับสูงเพียงไม่กี่ภาษาที่ได้รับการอนุมัติให้ใช้โดยกระทรวงกลาโหมสหรัฐฯ ในช่วงทศวรรษ 1970 [ 34 ]ความตั้งใจคือภาษาโปรแกรมเหล่านี้จะถูกแทนที่ด้วยภาษาโปรแกรม Ada ที่ได้รับการสนับสนุนจากกระทรวงกลาโหม[ 34 ]แต่ก็ไม่ได้เกิดขึ้น และเหตุผลสำหรับ การแก้ไขภาษา Ada 9Xระบุว่า เนื่องจากซอฟต์แวร์ทางคณิตศาสตร์จำนวนมากยังคงมีอยู่และยังคงเขียนด้วย Fortran จึงจำเป็นต้องมีการสนับสนุนใน Ada สำหรับการเชื่อมต่อกับรูทีน Fortran อย่างชัดเจน[ 45 ]
ฟอร์แทรน 77


หลังจากที่มาตรฐาน FORTRAN 66 ได้รับการเผยแพร่ ผู้ผลิตคอมไพเลอร์ได้แนะนำส่วนขยายหลายอย่างให้กับStandard Fortranทำให้คณะกรรมการ ANSI X3J3 เริ่มทำงานเกี่ยวกับการแก้ไขมาตรฐานปี 1966 ในปี 1969 โดยได้รับการสนับสนุนจากCBEMAซึ่งเป็นสมาคมผู้ผลิตอุปกรณ์ธุรกิจคอมพิวเตอร์ (เดิมคือ BEMA) ร่างสุดท้ายของมาตรฐานที่แก้ไขแล้วนี้ได้เผยแพร่ในปี 1977 นำไปสู่การอนุมัติมาตรฐาน FORTRAN ใหม่ในเดือนเมษายน 1978 มาตรฐานใหม่นี้เรียกว่าFORTRAN 77และมีรหัสอย่างเป็นทางการว่า X3.9-1978 ได้เพิ่มคุณสมบัติที่สำคัญหลายประการเพื่อแก้ไขข้อบกพร่องหลายประการของ FORTRAN 66:
- บล็อก
IFและEND IFคำสั่ง พร้อม เงื่อนไขELSE IFเสริมELSEเพื่อให้การสนับสนุนภาษาที่ดีขึ้นสำหรับการเขียนโปรแกรมเชิงโครงสร้าง DOส่วนขยายของลูป รวมถึงนิพจน์พารามิเตอร์ การเพิ่มค่าลบ และจำนวนรอบที่เป็นศูนย์OPENและ ข้อความสำหรับการปรับปรุงความสามารถCLOSEด้านINQUIREอินพุต/เอาต์พุต- การอ่าน/เขียนไฟล์แบบเข้าถึงโดยตรง
CHARACTERประเภทข้อมูลนี้แทนที่สตริง Hollerith ด้วยฟังก์ชันการทำงานที่ขยายมากขึ้นสำหรับการป้อนและแสดงผลอักขระ รวมถึงการประมวลผลข้อมูลแบบอักขระPARAMETERคำสั่งสำหรับระบุค่าคงที่SAVEคำสั่งสำหรับตัวแปรโลคัลแบบถาวร- ชื่อทั่วไปสำหรับฟังก์ชันภายใน (เช่น ฟังก์ชันนี้
SQRTยังรับอาร์กิวเมนต์ประเภทอื่น ๆ เช่นCOMPLEXหรือ ได้ด้วยREAL*16) - ชุดฟังก์ชันภายใน (
LGE,LGT,LLE,LLT) สำหรับ การเปรียบเทียบคำ ศัพท์ของสตริง โดยอิงตามลำดับการเรียงตัวอักษรASCII (ฟังก์ชัน ASCII เหล่านี้เป็นข้อเรียกร้องของกระทรวงกลาโหมสหรัฐฯในการลงคะแนนอนุมัติแบบมีเงื่อนไข) - อาร์เรย์มีมิติสูงสุดเจ็ดมิติ แทนที่จะเป็นสามมิติ นอกจากนี้ รูปแบบการแสดงดัชนีที่อนุญาตก็ได้รับการขยายให้ครอบคลุมมากขึ้นด้วย
ในการแก้ไขมาตรฐานครั้งนี้ มีการลบหรือเปลี่ยนแปลงคุณสมบัติหลายอย่างในลักษณะที่อาจทำให้โปรแกรมที่เคยเป็นไปตามมาตรฐานนั้นใช้การไม่ได้ (การลบเป็นทางเลือกเดียวที่อนุญาตสำหรับ X3J3 ในขณะนั้น เนื่องจากแนวคิดเรื่อง "การเลิกใช้ " ยังไม่พร้อมใช้งานสำหรับมาตรฐาน ANSI) ในขณะที่รายการความขัดแย้งส่วนใหญ่ 24 รายการ (ดูภาคผนวก A2 ของ X3.9-1978) เกี่ยวข้องกับช่องโหว่หรือกรณีผิดปกติที่ได้รับอนุญาตตามมาตรฐานก่อนหน้า แต่ไม่ค่อยได้ใช้ อย่างไรก็ตาม มีความสามารถเฉพาะบางอย่างที่ถูกลบออกไปโดยเจตนา เช่น:
- ค่าคงที่ของ Hollerithและ ข้อมูลของ Hollerithเช่น
GREET=12HHELLOTHERE! - การอ่านข้อมูลลงในตัวอธิบาย H edit (ฟิลด์ Hollerith) ในข้อกำหนด FORMAT
- การกำหนดดัชนีเกินขอบเขตของอาร์เรย์ด้วยดัชนีย่อย
มิติA ( 10 , 5 ) Y = A ( 11 , 1 )
- การถ่ายโอนการควบคุมออกจากและกลับเข้าสู่ช่วงของลูป DO (หรือที่เรียกว่า "ช่วงขยาย")
โปรแกรม Heron เวอร์ชัน Fortran 77 ไม่จำเป็นต้องแก้ไขเวอร์ชัน Fortran 66 อย่างไรก็ตาม ตัวอย่างนี้แสดงให้เห็นถึงการปรับปรุงคำสั่ง I/O เพิ่มเติม รวมถึงการใช้ I/O แบบกำหนดทิศทางด้วยรายการ และการแทนที่ตัวอธิบายการแก้ไข Hollerith ใน คำสั่งด้วยสตริงที่อยู่ในเครื่องหมายคำพูด นอกจาก นี้ FORMATยังใช้คำสั่งแบบมีโครงสร้างIFและEND IFแทนที่จะ ใช้ GOTO/CONTINUE
โปรแกรมเฮรอนC พื้นที่ของสามเหลี่ยมที่มีฟังก์ชันรากที่สองมาตรฐานC INPUT - หน่วยป้อนข้อมูลมาตรฐานเริ่มต้น, การป้อนข้อมูลจำนวนเต็มเอาต์พุต C - หน่วยเอาต์พุตมาตรฐานเริ่มต้น, เอาต์พุตจริงC ข้อผิดพลาดในการป้อนข้อมูล ข้อผิดพลาดในการแสดงผล รหัสเอาต์พุต 1 ในรายการควบคุมงานอ่าน( * , * ) IA , IB , ICซีC IA, IB และ IC ต้องไม่เป็นค่าลบหรือศูนย์นอกจากนี้ ผลรวมของด้านสองด้านของรูปสามเหลี่ยมC ต้องมากกว่าด้านที่สาม ดังนั้นเราจึงตรวจสอบด้านนั้นด้วยเช่นกันถ้า( IA . LE . 0 . หรือ. IB . LE . 0 . หรือ. IC . LE . 0 ) แล้วเขียน( * , * ) 'IA, IB และ IC ต้องมากกว่าศูนย์'จุดหยุดที่1จบเงื่อนไขซีถ้า( IA + IB - IC . LE . 0+ . หรือ. IA + IC - IB . LE . 0+ . หรือ. IB + IC - IA . LE . 0 ) จากนั้นเขียน( * , * ) ว่า 'ผลรวมของสองด้านต้องมากกว่าด้านที่สาม'จุดหยุดที่1จบเงื่อนไขซีC. โดยใช้สูตรของเฮรอน เราคำนวณได้ดังนี้พื้นที่ของสามเหลี่ยมS = ( IA + IB + IC ) / 2.0พื้นที่= รากที่สองของ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))เขียน( * , 601 ) IA , IB , IC , AREA 601 FORMAT ( 'A= ' , I5 , ' B= ' , I5 , ' C= ' , I5 , ' AREA= ' , F10 . 2 ,+ 'หน่วยตาราง' )หยุดจบการเปลี่ยนไปใช้ Fortran มาตรฐาน ANSI
การพัฒนามาตรฐานฉบับปรับปรุงใหม่เพื่อใช้แทน FORTRAN 77 นั้นต้องล่าช้าออกไปหลายครั้ง เนื่องจากกระบวนการกำหนดมาตรฐานไม่สามารถตามทันการเปลี่ยนแปลงอย่างรวดเร็วในด้านการคำนวณและการเขียนโปรแกรม ในขณะเดียวกัน FORTRAN 77 ซึ่งถูกใช้เป็น "มาตรฐาน FORTRAN" มาเกือบสิบห้าปี ก็กลายเป็นภาษาโปรแกรมที่มีความสำคัญทางประวัติศาสตร์มากที่สุด
การขยายการใช้งานจริงที่สำคัญของ FORTRAN 77 คือการเปิดตัว MIL-STD-1753 ในปี 1978 [ 46 ]ข้อกำหนดนี้ซึ่งพัฒนาโดยกระทรวงกลาโหมของสหรัฐอเมริกาได้กำหนดมาตรฐานคุณสมบัติหลายประการที่คอมไพเลอร์ FORTRAN 77 ส่วนใหญ่ใช้ แต่ไม่ได้รวมอยู่ในมาตรฐาน ANSI FORTRAN 77 คุณสมบัติเหล่านี้จะถูกรวมเข้าในมาตรฐาน Fortran 90 ในที่สุด
DO WHILEและEND DOคำแถลงINCLUDEคำแถลงIMPLICIT NONEรูปแบบต่างๆ ของIMPLICITข้อความ- ฟังก์ชันภายใน สำหรับการจัดการบิตโดยอิงจากฟังก์ชันที่คล้ายกันซึ่งรวมอยู่ในIndustrial Real-Time Fortran (ANSI/ISA S61.1 (1976))
มาตรฐานIEEE 1003.9 POSIXที่เผยแพร่ในปี 1991 ได้จัดเตรียมวิธีการง่ายๆ สำหรับโปรแกรมเมอร์ FORTRAN 77 ในการเรียกใช้ระบบ POSIX [ 47 ]มีการกำหนดการเรียกใช้มากกว่า 100 รายการในเอกสาร ซึ่งช่วยให้สามารถเข้าถึงการควบคุมกระบวนการที่เข้ากันได้กับ POSIX การจัดการสัญญาณ การควบคุมระบบไฟล์ การควบคุมอุปกรณ์ การชี้ไปยังขั้นตอน และ I/O สตรีมในลักษณะที่พกพาได้
ฟอร์ทราน 90
มาตรฐานภาษาโปรแกรม Fortran 90 (และก่อนหน้านั้นคือFortran 8X ) ซึ่งเป็นรุ่นต่อจาก FORTRAN 77 ที่ล่าช้ามานานในที่สุดก็ได้รับการเผยแพร่เป็นมาตรฐาน ISO/IEC 1539:1991 ในปี 1991 และเป็นมาตรฐาน ANSI ในปี 1992 นอกจากการเปลี่ยนการสะกดอย่างเป็นทางการจาก FORTRAN เป็น Fortran แล้ว การปรับปรุงครั้งสำคัญนี้ยังเพิ่มคุณสมบัติใหม่ ๆ มากมายเพื่อสะท้อนถึงการเปลี่ยนแปลงที่สำคัญในแนวทางการเขียนโปรแกรมที่พัฒนาขึ้นนับตั้งแต่มาตรฐานปี 1978:
- การป้อนโค้ดแบบอิสระช่วยขจัดความจำเป็นในการเว้นอักขระหกตำแหน่งแรกก่อนป้อนคำสั่ง การต่อบรรทัดจะระบุด้วย
&อักขระที่อยู่ท้ายบรรทัด แทนที่จะเป็นในคอลัมน์ที่ 6 ของบรรทัดถัดไป ช่องว่างก็มีความสำคัญเช่นกัน โดยทั่วไปไฟล์ที่มีชื่อลงท้ายด้วย จะบ่ง.f90บอกถึงโค้ดต้นฉบับแบบอิสระ รูปแบบโค้ดต้นฉบับแบบตายตัวแบบเก่าก็ยังคงมีอยู่ แต่ถือว่าล้าสมัยแล้ว - คำหลัก Fortran ตัวพิมพ์เล็ก
- รหัสระบุตัวตนมีความยาวได้สูงสุด 31 ตัวอักษร (ในมาตรฐานเดิมมีความยาวเพียง 6 ตัวอักษร)
- ความคิดเห็นแทรกในเนื้อหา
- ความสามารถในการดำเนินการกับอาร์เรย์ (หรือส่วนต่างๆ ของอาร์เรย์) โดยรวม ซึ่งช่วยลดความซับซ้อนของการคำนวณทางคณิตศาสตร์และวิศวกรรมได้อย่างมาก
- คำสั่งกำหนดค่าอาร์เรย์ทั้งหมด บางส่วน และแบบปิดบัง รวมถึงนิพจน์อาร์เรย์ เช่น
X(1:N)=R(1:N)*COS(A(1:N)) WHEREคำสั่งสำหรับการกำหนดค่าอาร์เรย์แบบเลือก- ค่าคงที่และนิพจน์ที่มีค่าเป็นอาร์เรย์
- ฟังก์ชันที่ผู้ใช้กำหนดเองซึ่งส่งค่าเป็นอาร์เรย์ และตัวสร้างอาร์เรย์
- คำสั่งกำหนดค่าอาร์เรย์ทั้งหมด บางส่วน และแบบปิดบัง รวมถึงนิพจน์อาร์เรย์ เช่น
RECURSIVEขั้นตอน- โมดูลคือเครื่องมือที่ใช้ในการจัดกลุ่มขั้นตอนและข้อมูลที่เกี่ยวข้องเข้าด้วยกัน และทำให้หน่วยงานอื่น ๆ ในโปรแกรมสามารถเข้าถึงได้ รวมถึงความสามารถในการจำกัดการเข้าถึงเฉพาะบางส่วนของโมดูลเท่านั้น
- กลไกการส่งผ่านอาร์กิวเมนต์ที่ได้รับการปรับปรุงอย่างมาก ทำให้สามารถตรวจสอบอินเทอร์เฟซ ได้ในระหว่างการคอมไพล์
- ส่วนต่อประสานที่ผู้ใช้เขียนขึ้นสำหรับขั้นตอนทั่วไป
- การโอเวอร์โหลดผู้ปฏิบัติงาน
- ประเภทข้อมูลที่ได้มา (มีโครงสร้าง)
- ไวยากรณ์การประกาศชนิดข้อมูลใหม่ เพื่อระบุชนิดข้อมูลและคุณลักษณะอื่นๆ ของตัวแปร
- การจัดสรรหน่วยความจำแบบไดนามิกโดยใช้
ALLOCATABLEแอตทริบิวต์และคำสั่งALLOCATEต่างๆDEALLOCATE POINTERคุณสมบัติ การกำหนดค่าตัวชี้ และNULLIFYคำสั่งต่างๆ เพื่ออำนวยความสะดวกในการสร้างและจัดการโครงสร้างข้อมูล แบบไดนามิก- โครงสร้างการวนซ้ำที่มีระเบียบ พร้อม
END DOคำสั่งสำหรับการยุติการวนซ้ำ และEXITคำCYCLEสั่งสำหรับการยุติDOการวนซ้ำปกติอย่างเป็นระบบ SELECT CASE,CASE, . . .CASE DEFAULT,END SELECTโครงสร้างสำหรับการเลือกหลายวิธี- ข้อกำหนดความแม่นยำเชิงตัวเลขแบบพกพาที่อยู่ภายใต้การควบคุมของผู้ใช้
- ขั้นตอนภายในแบบใหม่และปรับปรุงให้ดียิ่งขึ้น
ความล้าสมัยและการลบ
แตกต่างจากการแก้ไขครั้งก่อน Fortran 90 ไม่ได้ลบคุณสมบัติใดๆ ออก[ 48 ]โปรแกรม FORTRAN 77 ที่สอดคล้องกับมาตรฐานใดๆ ก็สอดคล้องกับมาตรฐานภายใต้ Fortran 90 เช่นกัน และมาตรฐานใดๆ ก็ควรจะสามารถใช้กำหนดพฤติกรรมของโปรแกรมได้
มีการระบุคุณสมบัติจำนวนเล็กน้อยว่า "ล้าสมัย" และคาดว่าจะถูกลบออกในมาตรฐานฉบับต่อไป ฟังก์ชันการทำงานทั้งหมดของฟีเจอร์เวอร์ชันเก่าเหล่านี้สามารถทำได้โดยฟีเจอร์ Fortran รุ่นใหม่กว่า บางส่วนยังคงไว้เพื่อลดความซับซ้อนในการพอร์ตโปรแกรมเก่า แต่หลายส่วนถูกลบออกไปใน Fortran 95
| คุณสมบัติที่ล้าสมัย | สถานะปัจจุบัน |
|---|---|
| คำสั่ง IF ทางคณิตศาสตร์ | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F2018 |
| พารามิเตอร์ DO หรือตัวแปรควบคุมที่ไม่ใช่จำนวนเต็ม | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| การยุติลูป DO ร่วมกัน หรือการยุติด้วยคำสั่งอื่นที่ไม่ใช่ END DO หรือ CONTINUE | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F2018 |
| การแยกสาขาไปยังคำสั่ง END IF จากภายนอกบล็อก | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| แถลงการณ์ PAUSE | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| คำสั่ง ASSIGN และคำสั่ง GO TO ที่กำหนดไว้ | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| หมายเลขคำสั่งที่กำหนดและตัวระบุรูปแบบ | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| คำอธิบายการแก้ไข H | ล้าสมัยในรุ่น F90 และถูกลบออกในรุ่น F95 |
| การควบคุมรูปแบบแนวตั้ง | ถูกลบใน F2003 |
| การส่งคืนทางเลือก | ล้าสมัยในรุ่น F90 |
| คำสั่ง GO TO ที่คำนวณแล้ว | ล้าสมัยในรุ่น F90 |
| ฟังก์ชันคำสั่ง | ล้าสมัยในรุ่น F90 |
| คำสั่ง DATA ในกลุ่มคำสั่งที่สามารถดำเนินการได้ | ล้าสมัยในรุ่น F90 |
| ฟังก์ชันอักขระความยาวที่สมมติขึ้น | ล้าสมัยในรุ่น F90 |
| โค้ดต้นฉบับรูปแบบคงที่ | ล้าสมัยในรุ่น F90 |
| แบบฟอร์มการประกาศคุณลักษณะ* | ล้าสมัยในรุ่น F90 |
| ข้อความการลงทะเบียน | ล้าสมัยในปี 2008 |
| แบบฟอร์มป้ายกำกับของคำสั่ง DO | ล้าสมัยในรุ่น F2018 |
| คำสั่ง COMMON และ EQUIVALENCE และหน่วยโปรแกรม BLOCK DATA | ล้าสมัยในรุ่น F2018 |
| ชื่อเฉพาะสำหรับฟังก์ชันภายใน | ล้าสมัยในรุ่น F2018 |
| โครงสร้างและคำแถลง FORALL | ล้าสมัยในรุ่น F2018 |
ตัวอย่าง "สวัสดีโลก!"
โปรแกรมhelloworld พิมพ์* , "สวัสดีโลก!" จบโปรแกรมhelloworldฟอร์ทราน 95
Fortran 95ซึ่งได้รับการเผยแพร่อย่างเป็นทางการในชื่อ ISO/IEC 1539-1:1997 เป็นการปรับปรุงเล็กน้อย ส่วนใหญ่เป็นการแก้ไขปัญหาที่ค้างคาอยู่บางประการจากมาตรฐาน Fortran 90 อย่างไรก็ตาม Fortran 95 ยังได้เพิ่มส่วนขยายจำนวนหนึ่ง โดยเฉพาะอย่างยิ่งจาก ข้อกำหนด High Performance Fortran :
FORALLและWHEREโครงสร้างแบบซ้อนกันเพื่อช่วยในการสร้างเวกเตอร์- ผู้ใช้กำหนด
PUREและELEMENTALขั้นตอนต่างๆ - การกำหนดค่าเริ่มต้นของส่วนประกอบประเภทที่สืบทอดมา รวมถึงการกำหนดค่าเริ่มต้นของตัวชี้
- ขยายขีดความสามารถในการใช้นิพจน์การเริ่มต้นสำหรับอ็อบเจ็กต์ข้อมูล
- การเริ่มต้นตัวชี้ไปยัง
NULL() - มีการกำหนดไว้อย่างชัดเจนว่า
ALLOCATABLEอาร์เรย์จะถูกปล่อยหน่วยความจำโดยอัตโนมัติเมื่ออยู่นอกขอบเขตการใช้งาน
มีการขยายฟังก์ชันพื้นฐานจำนวนหนึ่ง (ตัวอย่างเช่นdimมีการเพิ่มอาร์กิวเมนต์ให้กับฟังก์ชันmaxlocพื้นฐาน)
คุณสมบัติหลายอย่างที่ถูกระบุว่า "ล้าสมัย" ใน Fortran 90 ได้ถูกลบออกไปจาก Fortran 95 แล้ว:
DOคำสั่งที่ใช้REALตัวแปรDOUBLE PRECISIONดัชนี- การแยกสาขาไปยัง
END IFข้อความจากภายนอกบล็อก PAUSEคำแถลงASSIGNและกำหนดGO TOคำสั่ง และกำหนดตัวระบุรูปแบบHคำอธิบายการแก้ไข Hollerith
ส่วนเสริมที่สำคัญสำหรับ Fortran 95 คือรายงานทางเทคนิค ISO TR-15581: Enhanced Data Type Facilitiesซึ่งเรียกกันอย่างไม่เป็นทางการว่าAllocatable TR ข้อกำหนดนี้ได้กำหนดการใช้งานALLOCATABLEอาร์เรย์ที่ได้รับการปรับปรุง ก่อนที่จะมีคอมไพเลอร์ Fortran ที่สอดคล้องกับ Fortran 2003 อย่างสมบูรณ์ การใช้งานดังกล่าวรวมถึงALLOCATABLEอาร์เรย์เป็นส่วนประกอบของประเภทที่ได้มา ในรายการอาร์กิวเมนต์ดัมมี่ของขั้นตอน และเป็นค่าส่งคืนของฟังก์ชัน ( ALLOCATABLEอาร์เรย์ที่จัดสรรได้ดีกว่าPOINTERอาร์เรย์แบบอิงตาม เนื่องจากALLOCATABLEFortran 95 รับประกันว่าอาร์เรย์จะถูกยกเลิกการจัดสรรโดยอัตโนมัติเมื่ออยู่นอกขอบเขต ทำให้ไม่มีโอกาสเกิดการรั่วไหลของหน่วยความจำนอกจากนี้ องค์ประกอบของอาร์เรย์ที่จัดสรรได้จะอยู่ติดกัน และการใช้ชื่อแทนจะไม่เป็นปัญหาสำหรับการเพิ่มประสิทธิภาพการอ้างอิงอาร์เรย์ ทำให้คอมไพเลอร์สามารถสร้างโค้ดที่เร็วกว่าในกรณีของพอยเตอร์[ 49 ] )
อีกหนึ่งส่วนเสริมที่สำคัญของ Fortran 95 คือรายงานทางเทคนิคของ ISO TR-15580: การจัดการข้อยกเว้นของเลขทศนิยมหรือที่รู้จักกันอย่างไม่เป็นทางการว่าIEEE TR ข้อกำหนดนี้ได้กำหนดการสนับสนุนสำหรับเลขคณิตเลขทศนิยมของ IEEEและการจัดการข้อยกเว้นของเลข ทศนิยม
การคอมไพล์แบบมีเงื่อนไขและสตริงที่มีความยาวแปรผัน
นอกเหนือจาก "ภาษาพื้นฐาน" ที่บังคับใช้ (ตามที่กำหนดไว้ใน ISO/IEC 1539-1 : 1997) ภาษา Fortran 95 ยังประกอบด้วยโมดูลเสริมอีกสองโมดูล:
- สตริงข้อความที่มีความยาวแตกต่างกัน (ISO/IEC 1539-2 : 2000)
- การคอมไพล์แบบมีเงื่อนไข (ISO/IEC 1539-3 : 1998)
ซึ่งรวมกันเป็นมาตรฐานสากลหลายส่วน (ISO/IEC 1539)
ตามที่ผู้พัฒนามาตรฐานระบุไว้ "ส่วนที่เป็นทางเลือกนั้นอธิบายถึงคุณสมบัติแบบครบวงในตัวเอง ซึ่งได้รับการร้องขอจากผู้ใช้และ/หรือผู้พัฒนาจำนวนมาก แต่ไม่ถือว่ามีความเป็นสากลเพียงพอที่จะกำหนดให้เป็นข้อบังคับในคอมไพเลอร์ Fortran ที่เป็นไปตามมาตรฐานทั้งหมด" อย่างไรก็ตาม หาก Fortran ที่เป็นไปตามมาตรฐานมีตัวเลือกดังกล่าว "จะต้องจัดให้มีตามคำอธิบายของสิ่งอำนวยความสะดวกเหล่านั้นในส่วนที่เหมาะสมของมาตรฐาน"
ฟอร์ทรานสมัยใหม่
ภาษาที่กำหนดโดยมาตรฐานศตวรรษที่ 21 โดยเฉพาะอย่างยิ่งเนื่องจากการรวมการ สนับสนุน การเขียนโปรแกรมเชิงวัตถุและต่อมาCoarray Fortranมักถูกเรียกว่า 'Modern Fortran' และคำนี้ถูกใช้มากขึ้นในเอกสาร[ 50 ]
ฟอร์ทราน 2003
Fortran 2003ซึ่งเผยแพร่อย่างเป็นทางการในชื่อ ISO/IEC 1539-1:2004 เป็นการปรับปรุงครั้งใหญ่ที่แนะนำคุณสมบัติใหม่มากมาย[ 51 ]สรุปโดยละเอียดเกี่ยวกับคุณสมบัติใหม่ของ Fortran 2003 สามารถดูได้ที่เว็บไซต์อย่างเป็นทางการ ของ Fortran Working Group ( ISO/IEC JTC1/SC22 /WG5) [ 52 ]
จากบทความดังกล่าว การปรับปรุงที่สำคัญสำหรับการแก้ไขครั้งนี้ ได้แก่:
- การปรับปรุงประเภทที่ได้มา: ประเภทที่ได้มาแบบมีพารามิเตอร์ การควบคุมการเข้าถึงที่ดีขึ้น ตัวสร้างโครงสร้างที่ดีขึ้น และตัวจัดการขั้นสุดท้าย
- การสนับสนุน การเขียนโปรแกรมเชิงวัตถุ : การขยายและ การสืบทอดประเภท, พลีมอร์ฟิซึม , การจัดสรรประเภทแบบไดนามิก และขั้นตอนการทำงานที่ผูกกับประเภท ซึ่งให้การสนับสนุนอย่างสมบูรณ์สำหรับประเภทข้อมูลนามธรรม
- การปรับปรุงการจัดการข้อมูล: ส่วนประกอบที่จัดสรรได้ (รวมถึง TR 15581), พารามิเตอร์ประเภทที่เลื่อนออกไป,
VOLATILEคุณลักษณะ , การระบุประเภทอย่างชัดเจนในตัวสร้างอาร์เรย์และคำสั่งจัดสรร, การปรับปรุงตัวชี้, นิพจน์การเริ่มต้นที่ขยาย และขั้นตอนภายในที่ได้รับการปรับปรุง - การปรับปรุงการรับ/ส่งข้อมูล: การถ่ายโอน แบบอะซิงโครนัส การเข้าถึงสตรีม การดำเนินการถ่ายโอนที่ผู้ใช้กำหนดเองสำหรับประเภทที่ได้มา การควบคุมการปัดเศษที่ผู้ใช้กำหนดเองระหว่างการแปลงรูปแบบ ค่าคงที่ที่มีชื่อสำหรับหน่วยที่เชื่อมต่อไว้ล่วงหน้า
FLUSHคำสั่ง การควบคุมคำหลัก และการเข้าถึงข้อความแสดงข้อผิดพลาด - คำแนะนำเกี่ยวกับขั้นตอน
- รองรับการคำนวณเลขทศนิยมตามมาตรฐาน IEEEและการจัดการข้อผิดพลาดของเลขทศนิยม (รวมถึงมาตรฐาน TR 15580)
- ความสามารถในการทำงานร่วมกับภาษาโปรแกรม C
- รองรับการใช้งานในระดับสากล: สามารถเข้าถึงอักขระ 4 ไบต์ตามมาตรฐาน ISO 10646 และเลือกใช้ทศนิยมหรือเครื่องหมายจุลภาคในการจัดรูปแบบตัวเลขสำหรับการรับและส่งข้อมูล
- การทำงานร่วมกับระบบปฏิบัติการโฮสต์ที่ดียิ่งขึ้น: เข้าถึงอาร์กิวเมนต์บรรทัดคำ สั่ง ตัวแปรสภาพแวดล้อมและข้อความแสดงข้อผิดพลาดของโปรเซสเซอร์
ส่วนเสริมที่สำคัญของ Fortran 2003 คือรายงานทางเทคนิคของ ISO TR-19767: การปรับปรุงสิ่งอำนวยความสะดวกด้านโมดูลใน Fortran รายงานนี้ได้นำเสนอโมดูลย่อยซึ่งทำให้โมดูลของ Fortran มีความคล้ายคลึงกับ โมดูล Modula-2 มากขึ้น โดยมีความคล้ายคลึงกับ หน่วยย่อยส่วนตัวของ Adaสิ่งนี้ช่วยให้สามารถแสดงรายละเอียดและการใช้งานโมดูลในหน่วยโปรแกรมที่แยกจากกันได้ ซึ่งช่วยปรับปรุงการบรรจุไลบรารีขนาดใหญ่ ช่วยรักษาความลับทางการค้าในขณะที่เผยแพร่อินเทอร์เฟซที่แน่นอน และป้องกันการคอมไพล์แบบต่อเนื่อง
ฟอร์ทราน 2008
ISO/IEC 1539-1:2010 หรือที่รู้จักกันอย่างไม่เป็นทางการว่า Fortran 2008 ได้รับการอนุมัติในเดือนกันยายน พ.ศ. 2553 [ 53 ] [ 54 ]เช่นเดียวกับ Fortran 95 นี่เป็นการอัปเกรดเล็กน้อย โดยรวมเอาคำชี้แจงและการแก้ไข Fortran 2003 เข้าไว้ด้วยกัน รวมถึงการแนะนำความสามารถใหม่บางอย่าง ความสามารถใหม่เหล่านี้ได้แก่:
- โมดูลย่อย – สิ่งอำนวยความสะดวกในการจัดโครงสร้างเพิ่มเติมสำหรับโมดูล; แทนที่ ISO/IEC TR 19767:2005
- Coarray Fortran – โมเดลการประมวลผลแบบขนาน
- โครงสร้างDO CONCURRENT – สำหรับการวนซ้ำลูปโดยไม่มีการพึ่งพาซึ่งกันและกัน
- คุณลักษณะ CONTIGUOUS – ใช้สำหรับระบุข้อจำกัดของรูปแบบการจัดเก็บข้อมูล
- โครงสร้าง BLOCKสามารถบรรจุการประกาศอ็อบเจ็กต์ที่มีขอบเขตตามโครงสร้างได้
- ส่วนประกอบที่จัดสรรได้แบบเรียกซ้ำ – ทางเลือกแทนตัวชี้แบบเรียกซ้ำในประเภทที่ได้มา
ร่างมาตรฐานสากลฉบับสุดท้าย (FDIS) มีอยู่ในเอกสาร N1830 [ 55 ]
ส่วนเสริมของ Fortran 2008 คือข้อกำหนดทางเทคนิค (TS) 29113 ขององค์การมาตรฐานสากล (ISO) เกี่ยวกับ ความ สามารถในการทำงานร่วมกันเพิ่มเติมของ Fortran กับ C [ 56 ] [ 57 ]ซึ่งได้ส่งไปยัง ISO ในเดือนพฤษภาคม 2012 เพื่อขออนุมัติ ข้อกำหนดนี้เพิ่มการสนับสนุนสำหรับการเข้าถึงตัวอธิบายอาร์เรย์จาก C และอนุญาตให้ละเว้นประเภทและลำดับของอาร์กิวเมนต์
ฟอร์ทราน 2018
ภาษา Fortran เวอร์ชันปรับปรุง 2018 ก่อนหน้านี้เรียกว่า Fortran 2015 [ 58 ]ถือเป็นการปรับปรุงครั้งสำคัญและเผยแพร่เมื่อวันที่ 28 พฤศจิกายน 2018 [ 59 ]
Fortran 2018 ได้รวมเอาข้อกำหนดทางเทคนิคที่เผยแพร่ก่อนหน้านี้สองฉบับไว้ด้วย:
- ISO/IEC TS 29113:2012 ความสามารถในการทำงานร่วมกันเพิ่มเติมกับ C [ 60 ]
- ISO/IEC TS 18508:2015 คุณสมบัติขนานเพิ่มเติมใน Fortran [ 61 ]
การเปลี่ยนแปลงเพิ่มเติมและคุณสมบัติใหม่ ได้แก่ การสนับสนุน ISO/IEC/IEEE 60559:2011 (เวอร์ชันของมาตรฐานจุดลอยตัวของ IEEEก่อนการแก้ไขย่อยล่าสุด IEEE 754–2019) การป้อน/ส่งออกเลขฐานสิบหก การปรับปรุง IMPLICIT NONE และการเปลี่ยนแปลงอื่นๆ[ 62 ] [ 63 ] [ 64 ] [ 65 ]
Fortran 2018 ได้ลบคำสั่ง IF ทางคณิตศาสตร์ออกไป นอกจากนี้ยังได้ลบโครงสร้าง DO ที่ไม่ใช่แบบบล็อกออกไปด้วย ซึ่งก็คือลูปที่ไม่จบด้วยคำสั่ง END DO หรือ CONTINUE โครงสร้างเหล่านี้ล้าสมัยไปแล้วตั้งแต่ Fortran 90
สิ่งที่ล้าสมัยใหม่ๆ ได้แก่ คำสั่ง COMMON และ EQUIVALENCE และหน่วยโปรแกรม BLOCK DATA ลูป DO ที่มีป้ายกำกับ ชื่อเฉพาะสำหรับฟังก์ชันภายใน และคำสั่งและโครงสร้าง FORALL
ฟอร์ทราน 2023
Fortran 2023 (ISO/IEC 1539-1:2023) ได้รับการเผยแพร่ในเดือนพฤศจิกายน 2023 และสามารถซื้อได้จาก ISO [ 66 ] Fortran 2023 เป็นส่วนขยายย่อยของ Fortran 2018 ที่เน้นการแก้ไขข้อผิดพลาดและการละเว้นใน Fortran 2018 นอกจากนี้ยังเพิ่มคุณสมบัติเล็กๆ น้อยๆ หลายอย่าง รวมถึงนิพจน์และอาร์กิวเมนต์แบบมีเงื่อนไขขั้นตอนง่ายๆ และ ความสามารถในการแจง นับประเภทฟังก์ชันตรีโกณมิติแบบอิงตามองศาและครึ่งรอบก็ถูกเพิ่มเข้ามาด้วย ฟังก์ชันตรีโกณมิติแบบอิงตามองศาเคยเป็นส่วนขยายของผู้จำหน่ายที่พบได้ทั่วไปมาก่อน
ลักษณะทางภาษา
บทความที่เกี่ยวข้องเรื่อง "คุณสมบัติภาษา Fortran 95" อธิบายรายละเอียดทั้งหมดของฟีเจอร์ภาษา Fortranเวอร์ชันภาษาที่กำหนดโดยมาตรฐานในภายหลังมักถูกเรียกรวมกันว่า "Modern Fortran" และมีการอธิบายไว้ในเอกสารต่างๆ
วิทยาศาสตร์และวิศวกรรมศาสตร์



แม้ว่าบทความในวารสารปี 1968 โดยผู้เขียนBASICจะอธิบายว่า FORTRAN เป็น "ภาษาที่ล้าสมัย" แล้วก็ตาม[ 67 ]แต่โปรแกรมต่างๆ ก็ถูกเขียนด้วยภาษา Fortran มาหลายทศวรรษแล้ว และมีซอฟต์แวร์ Fortran จำนวนมากที่ใช้ในชีวิตประจำวันในแวดวงวิทยาศาสตร์และวิศวกรรม[ 68 ] Jay Pasachoffเขียนไว้ในปี 1984 ว่า "นักศึกษาฟิสิกส์และดาราศาสตร์จำเป็นต้องเรียนรู้ FORTRAN เพราะมีสิ่งต่างๆ มากมายใน FORTRAN จนดูเหมือนว่านักวิทยาศาสตร์จะไม่เปลี่ยนไปใช้Pascal , Modula-2หรือภาษาอื่นๆ" [ 69 ]ในปี 1993 Cecil E. Leithเรียก FORTRAN ว่า "ภาษาแม่ของการคำนวณทางวิทยาศาสตร์" และเสริมว่าการแทนที่ด้วยภาษาอื่นๆ "อาจยังคงเป็นความหวังที่ริบหรี่" [ 70 ]
ภาษา Fortran เป็นภาษาหลักสำหรับงาน ประมวลผลขั้นสูงที่เข้มข้นที่สุดบางงานเช่นดาราศาสตร์การจำลองสภาพภูมิอากาศเคมีเชิงคำนวณเศรษฐศาสตร์เชิงคำนวณพลศาสตร์ของไหลเชิงคำนวณ ฟิสิกส์เชิงคำนวณการวิเคราะห์ข้อมูล[ 71 ]การจำลองทางอุทกวิทยาพีชคณิตเชิงเส้นเชิงตัวเลขและไลบรารีเชิงตัวเลข ( LAPACK , IMSLและNAG ) การเพิ่มประสิทธิภาพการจำลองดาวเทียมวิศวกรรมโครงสร้างและการพยากรณ์อากาศ [ 72 ] เกณฑ์มาตรฐานจุดลอยตัวจำนวนมากเพื่อวัดประสิทธิภาพของโปรเซสเซอร์คอมพิวเตอร์ใหม่ เช่น ส่วนประกอบจุดลอยตัวของ เกณฑ์มาตรฐาน SPEC (เช่นCFP2006 , CFP2017 ) เขียนด้วยภาษา Fortran อัลกอริทึมทางคณิตศาสตร์ได้รับการบันทึกไว้อย่างดีใน Numerical Recipes
นอกเหนือจากนี้ รหัสโปรแกรมที่ทันสมัยกว่าในวิทยาศาสตร์การคำนวณโดยทั่วไปจะใช้ไลบรารีโปรแกรมขนาดใหญ่ เช่นMETISสำหรับการแบ่งกราฟPETScหรือTrilinosสำหรับความสามารถด้านพีชคณิตเชิงเส้นdeal.IIหรือFEniCSสำหรับการสนับสนุนเมชและไฟไนต์เอเลเมนต์ และไลบรารีทั่วไปอื่นๆ ตั้งแต่ต้นทศวรรษ 2000 ไลบรารีสนับสนุนที่ใช้กันอย่างแพร่หลายหลายแห่งได้ถูกนำไปใช้ในภาษาCและเมื่อไม่นานมานี้ในภาษาC++ในทางกลับกัน ภาษาโปรแกรมระดับสูง เช่นWolfram Language , MATLAB , PythonและRได้รับความนิยมในบางสาขาของวิทยาศาสตร์การคำนวณ ส่งผลให้สัดส่วนของโปรแกรมทางวิทยาศาสตร์ที่เขียนด้วยภาษาสคริปต์ระดับสูงเหล่านี้เพิ่มขึ้นเรื่อยๆ ด้วยเหตุนี้ จึง มีการเพิ่ม สิ่งอำนวยความสะดวกสำหรับการทำงานร่วมกับภาษา Cใน Fortran 2003 และได้รับการปรับปรุงโดยข้อกำหนดทางเทคนิค ISO/IEC 29113 ซึ่งรวมอยู่ใน Fortran 2018 เพื่อให้สามารถทำงานร่วมกับภาษาโปรแกรมอื่นๆ ได้อย่างยืดหยุ่นมากขึ้น
พกพาสะดวก
ปัญหาเรื่องความสามารถในการพกพาเป็นปัญหาในช่วงแรก เนื่องจากไม่มีมาตรฐานที่ตกลงกันไว้ แม้แต่คู่มืออ้างอิงของ IBM เองก็ตาม และบริษัทคอมพิวเตอร์ต่างแข่งขันกันเพื่อสร้างความแตกต่างให้กับผลิตภัณฑ์ของตนจากบริษัทอื่นโดยการจัดหาคุณสมบัติที่ไม่เข้ากัน มาตรฐานต่างๆ ได้ปรับปรุงความสามารถในการพกพา มาตรฐานปี 1966 ได้กำหนดไวยากรณ์และความหมายอ้างอิง แต่ผู้จำหน่ายยังคงจัดหาส่วนขยายที่ไม่เข้ากัน แม้ว่าโปรแกรมเมอร์ที่ระมัดระวังจะเริ่มตระหนักว่าการใช้ส่วนขยายที่ไม่เข้ากันทำให้เกิดปัญหาด้านความสามารถในการพกพาที่มีราคาแพง และจึงใช้โปรแกรมต่างๆ เช่นPFORT Verifier [ 73 ] [ 74 ]แต่ก็ไม่ใช่จนกระทั่งหลังจากมาตรฐานปี 1977 เมื่อสำนักงานมาตรฐานแห่งชาติ (ปัจจุบันคือNIST ) ได้เผยแพร่FIPS PUB 69โปรเซสเซอร์ที่รัฐบาลสหรัฐฯ ซื้อจึงต้องวินิจฉัยส่วนขยายของมาตรฐาน แทนที่จะเสนอโปรเซสเซอร์สองตัว ในที่สุดคอมไพเลอร์ทุกตัวก็มีอย่างน้อยหนึ่งตัวเลือกในการวินิจฉัยส่วนขยาย[ 75 ] [ 76 ]
ส่วนขยายที่ไม่เข้ากันไม่ใช่ปัญหาเดียวของการพกพา สำหรับการคำนวณเชิงตัวเลข จำเป็นต้องคำนึงถึงลักษณะเฉพาะของเลขคณิต เรื่องนี้ได้รับการแก้ไขโดย Fox et al. ในบริบทของมาตรฐานปี 1966 โดยใช้ไลบรารีPORT [ 74 ]แนวคิดดังกล่าวได้รับการนำไปใช้อย่างกว้างขวาง และในที่สุดก็ถูกรวมเข้าไว้ในมาตรฐานปี 1990 โดยผ่านฟังก์ชันการสอบถามภายใน การนำ มาตรฐาน IEEE 754สำหรับเลขคณิตจุดลอยตัวแบบไบนารีมาใช้อย่างแพร่หลาย (ปัจจุบันเกือบจะเป็นสากล) ได้ขจัดปัญหานี้ไปโดยสิ้นเชิง
การเข้าถึงสภาพแวดล้อมการคำนวณ (เช่น บรรทัดคำสั่งของโปรแกรม ตัวแปรสภาพแวดล้อม คำอธิบายข้อความเกี่ยวกับเงื่อนไขข้อผิดพลาด) ยังคงเป็นปัญหาจนกระทั่งได้รับการแก้ไขโดยมาตรฐานปี 2003
ซอฟต์แวร์ไลบรารีจำนวนมากที่อาจกล่าวได้ว่าเกี่ยวข้องกับการคำนวณทางวิศวกรรมและวิทยาศาสตร์ เช่น ไลบรารีกราฟิก ถูกเขียนขึ้นด้วยภาษาซี ดังนั้นการเข้าถึงซอฟต์แวร์เหล่านี้จึงเป็นปัญหาเรื่องความสามารถในการพกพา ซึ่งปัญหานี้ได้รับการแก้ไขแล้วโดยการรวมความสามารถในการทำงานร่วมกันของภาษาซีเข้าไว้ในมาตรฐานปี 2003
ปัจจุบันเป็นไปได้แล้ว (และค่อนข้างง่าย) ที่จะเขียนโปรแกรมที่สามารถใช้งานได้ทุกแพลตฟอร์มด้วยภาษา Fortran แม้ว่าจะไม่ได้ใช้พรีโปรเซสเซอร์ก็ตาม
รูปแบบทางประวัติศาสตร์
เวอร์ชันผู้ผลิต
จนกระทั่งมีการพัฒนามาตรฐาน Fortran 66 คอมไพเลอร์แต่ละตัวก็รองรับ Fortran เวอร์ชันของตนเอง ซึ่งบางเวอร์ชันก็แตกต่างจากเวอร์ชันหลักมากกว่าเวอร์ชันอื่นๆ ตำราเรียนที่โดดเด่นที่สุดเล่มหนึ่งในยุคนั้น คือ A Guide to FORTRAN IV Programming (1965) ของDaniel D. McCrackenได้จัดทำตารางเปรียบเทียบความแตกต่างของฟีเจอร์ 24 รายการกับ 29 เวอร์ชันของผู้ผลิตและคอมพิวเตอร์ไว้ถึงสองหน้าเต็มๆ[ 14 ] ผู้เขียนตำราเรียนอีกคนจากยุคนั้นJohn M. Blattก็หมดหวังที่จะทำเช่นเดียวกัน โดยเขียนว่า "ผู้ผลิตมักจะพิจารณา 'FORTRAN' ของตนเองเป็นจุดขาย และทันทีที่ภาษาถิ่นหนึ่งของ FORTRAN มี 'ลูกเล่น' บางอย่าง ภาษาถิ่นอื่นๆ ก็จะพยายามทำให้ดีกว่า" [ 77 ]อย่างไรก็ตาม โปรแกรม Fortran สามารถพกพาได้ง่ายกว่าโปรแกรมภาษาแอสเซมบลีมาก และในทางปฏิบัติ ผู้ที่คุ้นเคยกับ Fortran ของผู้ผลิตรายหนึ่งสามารถปรับตัวให้เข้ากับ Fortran ของผู้ผลิตรายอื่นได้อย่างง่ายดาย[ 78 ]
ภาษา Fortran 5ถูกวางจำหน่ายโดย บริษัท Data General Corp ตั้งแต่ต้นทศวรรษ 1970 ถึงต้นทศวรรษ 1980 สำหรับ คอมพิวเตอร์ตระกูล Nova , EclipseและMVมีคอมไพเลอร์ที่ปรับแต่งประสิทธิภาพได้ดีทีเดียวสำหรับมินิคอมพิวเตอร์ในยุคนั้น ภาษานี้มีความคล้ายคลึงกับ FORTRAN 66 มากที่สุด
FORTRAN Vได้รับการเผยแพร่โดยControl Data Corporationในปี พ.ศ. 2511 สำหรับ ซีรี่ส์ CDC 6600ภาษาดังกล่าวมีพื้นฐานมาจาก FORTRAN IV [ 79 ]
นอกจากนี้ Univac ยังมีคอมไพเลอร์สำหรับซีรี่ส์ 1100 ที่รู้จักกันในชื่อ FORTRAN V ซึ่งต่อมาได้แตกแขนงออกมาจาก Univac Fortran V นั่นก็คือ Athena FORTRAN
บริษัทผู้ผลิตคอมพิวเตอร์วิทยาศาสตร์ประสิทธิภาพสูง (เช่นBurroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas InstrumentsและUNIVAC ) ได้เพิ่มส่วนขยายให้กับภาษา Fortran เพื่อใช้ประโยชน์จากคุณสมบัติพิเศษของฮาร์ดแวร์ เช่นแคชคำสั่ง , ไปป์ไลน์ ของซีพียู และอาร์เรย์เวกเตอร์ ตัวอย่างเช่น คอมไพเลอร์ FORTRAN ตัวหนึ่งของ IBM ( H Extended IUP ) มีระดับการเพิ่มประสิทธิภาพที่จัดเรียงลำดับคำสั่งรหัสเครื่อง ใหม่ เพื่อให้หน่วยคำนวณภายในหลายหน่วยทำงานพร้อมกัน อีกตัวอย่างหนึ่งคือCFDซึ่งเป็นภาษา FORTRAN เวอร์ชันพิเศษที่ออกแบบมาโดยเฉพาะสำหรับ ซูเปอร์คอมพิวเตอร์ ILLIAC IVที่ทำงานอยู่ที่ศูนย์วิจัย AmesของNASAนอกจากนี้ ห้องปฏิบัติการวิจัยของ IBM ยังได้พัฒนาภาษาที่ขยายเพิ่มเติมจาก FORTRAN เรียกว่าVECTRANสำหรับการประมวลผลเวกเตอร์และเมทริกซ์
Fortran เชิงวัตถุเป็นส่วนขยายเชิงวัตถุของ Fortran ซึ่งสามารถจัดกลุ่มรายการข้อมูลเป็นวัตถุได้ ซึ่งสามารถสร้างอินสแตนซ์และดำเนินการแบบขนานได้ มีให้ใช้งานสำหรับSolaris , IRIX , NeXTSTEP , iPSCและ nCUBE แต่ไม่ได้รับการสนับสนุนอีกต่อไป[ 80 ] [ 81 ]
ส่วนขยายเฉพาะเครื่องดังกล่าวได้หายไปตามกาลเวลา หรือบางส่วนได้ถูกรวมเข้าไว้ในมาตรฐานหลักแล้ว ส่วนขยายหลักที่ยังคงอยู่คือOpenMPซึ่งเป็นส่วนขยายข้ามแพลตฟอร์มสำหรับการเขียนโปรแกรมหน่วยความจำร่วม ส่วนขยายใหม่ล่าสุดอย่าง Coarray Fortran มีจุดประสงค์เพื่อรองรับการเขียนโปรแกรมแบบขนาน
FOR TRANSITเป็นชื่อของเวอร์ชันย่อของภาษา FORTRAN ของ IBM 704 ซึ่งถูกนำไปใช้กับ IBM 650 โดยใช้โปรแกรมตัวแปลที่พัฒนาขึ้นที่ Carnegie ในช่วงปลายทศวรรษ 1950 [ 82 ]ข้อความแสดงความคิดเห็นต่อไปนี้ปรากฏในคู่มืออ้างอิงของ IBM (ระบบการเข้ารหัสอัตโนมัติ FOR TRANSIT C28-4038 ลิขสิทธิ์ 1957, 1959 โดย IBM):
ระบบ FORTRAN ถูกออกแบบมาสำหรับเครื่องที่ซับซ้อนกว่าเครื่อง 650 ดังนั้นคำสั่งบางส่วนในคู่มืออ้างอิงสำหรับโปรแกรมเมอร์ FORTRAN จึงไม่สามารถใช้งานได้กับระบบ FORTRAN นอกจากนี้ ยังมีการเพิ่มข้อจำกัดบางประการให้กับภาษา FORTRAN อย่างไรก็ตาม ข้อจำกัดเหล่านี้ไม่ได้ทำให้โปรแกรมต้นฉบับที่เขียนขึ้นสำหรับ FORTRAN ไม่สามารถใช้งานร่วมกับระบบ FORTRAN สำหรับเครื่อง 704 ได้
ข้อความที่อนุญาตให้กล่าวได้มีดังนี้:
- คำสั่งกำหนดค่าทางคณิตศาสตร์ เช่น
a = b GO to nGO TO (n1, n2, ..., nm), iIF (a) n1, n2, n3PAUSESTOPDO n i = m1, m2CONTINUEENDREAD n, listPUNCH n, listDIMENSION V, V, V, ...EQUIVALENCE (a,b,c), (d,c), ...
สามารถใช้ซับรูทีนได้มากถึงสิบซับรูทีนในโปรแกรมเดียว
คำสั่ง FOR TRANSIT จำกัดเฉพาะคอลัมน์ที่ 7 ถึง 56 เท่านั้น ใช้บัตรเจาะรูสำหรับการป้อนข้อมูลและแสดงผลบนเครื่อง IBM 650 ต้องใช้สามขั้นตอนในการแปลงโค้ดต้นฉบับเป็นภาษา "IT" จากนั้นคอมไพล์คำสั่ง IT เป็นภาษาแอสเซมบลี SOAP และสุดท้ายสร้างโปรแกรมออบเจ็กต์ ซึ่งสามารถโหลดลงในเครื่องเพื่อเรียกใช้โปรแกรมได้ (โดยใช้บัตรเจาะรูสำหรับการป้อนข้อมูล และแสดงผลลัพธ์บนบัตรเจาะรู)
สำหรับเครื่องรุ่น 650 ที่มีหน่วยความจำแบบดรัมขนาด 2000 คำนั้น มีอยู่สองเวอร์ชัน ได้แก่ FOR TRANSIT I (S) และ FOR TRANSIT II โดยเวอร์ชันหลังใช้สำหรับเครื่องที่มีรีจิสเตอร์ดัชนีและการคำนวณเลขฐานสิบแบบลอยตัวอัตโนมัติ ( bi-quinary ) ภาคผนวก A ของคู่มือประกอบด้วยแผนผังการเดินสายสำหรับแผงควบคุมเครื่องอ่าน/เจาะบัตรIBM 533
ผู้รวบรวมข้อมูลนักเรียน

คอมไพเลอร์ FORTRAN ตัวแรกได้กำหนดมาตรฐานประสิทธิภาพสูงสำหรับโค้ดที่คอมไพล์แล้ว เป้าหมายนี้ทำให้การสร้างคอมไพเลอร์เป็นเรื่องยาก ดังนั้นโดยปกติแล้วผู้ผลิตคอมพิวเตอร์จะเป็นผู้สร้างคอมไพเลอร์เพื่อสนับสนุนการขายฮาร์ดแวร์ ข้อกำหนดด้านประสิทธิภาพการทำงานยังคงเป็นเกณฑ์การออกแบบหลักสำหรับภาษาตลอดช่วงวิวัฒนาการของภาษาในช่วงแรก[ 8 ]สิ่งนี้ทำให้เกิดช่องว่างที่สำคัญ: คอมไพเลอร์ที่รวดเร็วในขั้นตอนการคอมไพล์และการโหลด และให้การวินิจฉัยที่ดีสำหรับโปรแกรมเมอร์ ซึ่งมักจะเป็นนักเรียน เนื่องจากในเวลานั้น FORTRAN IV เริ่มกลายเป็นเครื่องมือทางการศึกษาที่สำคัญ
WATFORซึ่งเปิดตัวในช่วงทศวรรษ 1960 เป็นที่นิยมใช้ในวิทยาลัยและมหาวิทยาลัย พัฒนา สนับสนุน และเผยแพร่โดยมหาวิทยาลัยวอเตอร์ลู WATFOR มีพื้นฐานมาจาก FORTRAN IV เป็นหลัก[ 77 ] นักศึกษาที่ใช้ WATFOR สามารถส่งงาน FORTRAN แบบแบตช์ได้ และหากไม่มีข้อผิดพลาดทางไวยากรณ์ โปรแกรมจะดำเนินการโดยตรง การลดความซับซ้อนนี้ทำให้นักศึกษาสามารถมุ่งเน้นไปที่ไวยากรณ์และความหมายของโปรแกรม หรือตรรกะการทำงานของโปรแกรม แทนที่จะต้องจัดการกับภาษาควบคุมงาน (JCL) กระบวนการคอมไพล์/ลิงก์-แก้ไข/ดำเนินการ หรือความซับซ้อนอื่นๆ ของสภาพแวดล้อมเมนเฟรม
นอกจากนี้ WATFOR ยังนำเสนอซูเปอร์เซ็ตของภาษา Fortran โดยเฉพาะอย่างยิ่งการให้คำสั่งที่เรียกว่า "อิสระ" READและPRINTคำสั่งอื่นๆ เป็นทางเลือกแทนคำสั่งREADและWRITE>คำสั่งแบบจัดรูปแบบของ Fortran ทั่วไป[ 77 ]คำFORMATสั่งแบบหลังนี้มีความยืดหยุ่นมาก แต่ก็อาจซับซ้อนได้[ 8 ]และบางครั้งก็ขึ้นอยู่กับความแตกต่างของผู้ผลิตหรือแนวทางเฉพาะไซต์[ 78 ]เนื่องจากวิธีการจัดรูปแบบทำให้แม้แต่โปรแกรมเมอร์ที่มีประสบการณ์ก็ยังประสบปัญหา การให้ทางเลือกในคอมไพเลอร์สำหรับนักเรียนจึงเป็นข้อได้เปรียบอย่างแน่นอน[ 77 ]ข้อเสียของสภาพแวดล้อมที่เรียบง่ายนี้คือ WATFOR ไม่ใช่ตัวเลือกที่ดีสำหรับโปรแกรมเมอร์ที่ต้องการความสามารถที่ขยายออกไปของโปรเซสเซอร์โฮสต์ เช่น WATFOR มักจะเข้าถึงอุปกรณ์ I/O ได้จำกัดมาก WATFOR ถูกแทนที่ด้วยWATFIV [ 77 ]และเวอร์ชันต่อมา
คอมไพเลอร์สำหรับนักศึกษาอีกตัวหนึ่งคือ PUFFT และในขนาดที่เล็กกว่านั้นก็มี FORGO, Wits Fortran และ Kingston Fortran 2
ภาษาที่ใช้ Fortran
ก่อน FORTRAN 77 มีการใช้ พรีโปรเซสเซอร์ จำนวนมาก เพื่อสร้างภาษาที่เป็นมิตรมากขึ้น โดยมีข้อดีคือโค้ดที่ผ่านการประมวลผลล่วงหน้าสามารถคอมไพล์ได้บนเครื่องใดก็ได้ที่มีคอมไพเลอร์ FORTRAN มาตรฐาน[ 83 ]พรีโปรเซสเซอร์เหล่านี้มักจะรองรับการเขียนโปรแกรมแบบมีโครงสร้างชื่อตัวแปรที่ยาวกว่าหกตัวอักษร ชนิดข้อมูลเพิ่มเติมการคอมไพล์แบบมีเงื่อนไขและแม้กระทั่ง ความสามารถ ของมาโครพรีโปรเซสเซอร์ที่ได้รับความนิยม ได้แก่EFL , FLECS , iftran , MORTRAN , SFtran , S-Fortran , RatforและRatfivตัวอย่างเช่น EFL, Ratfor และ Ratfiv ใช้ ภาษาที่คล้ายกับ Cโดยส่งออกโค้ดที่ผ่านการประมวลผลล่วงหน้าใน FORTRAN 66 มาตรฐาน พรีโปรเซสเซอร์ PFORTมักใช้เพื่อตรวจสอบว่าโค้ดสอดคล้องกับชุดย่อยแบบพกพาของภาษา แม้จะมีความก้าวหน้าในภาษา Fortran แต่พรีโปรเซสเซอร์ก็ยังคงถูกใช้สำหรับการคอมไพล์แบบมีเงื่อนไขและการแทนที่มาโคร
โปรแกรม; s = 0 i = 1 , n ; s = s + 1 ; หยุดi ; s = 's' หยุด(การเขียนโปรแกรมแบบบรรทัด)
LRLTRANได้รับการพัฒนาขึ้นที่ห้องปฏิบัติการรังสีลอว์เรนซ์เพื่อรองรับการคำนวณเวกเตอร์และการจัดเก็บข้อมูลแบบไดนามิก รวมถึงส่วนขยายอื่นๆ เพื่อรองรับการเขียนโปรแกรมระบบ การแจกจ่ายซอฟต์แวร์นี้รวมถึง ระบบปฏิบัติการ Livermore Time Sharing System (LTSS) ด้วย
มาตรฐาน Fortran-95 มีส่วนที่ 3ซึ่งเป็นส่วนที่ไม่บังคับ โดยกำหนด ความสามารถ ในการคอมไพล์แบบมีเงื่อนไข ซึ่งเป็นทางเลือก ความสามารถนี้มักเรียกกันว่า "CoCo"
คอมไพเลอร์ Fortran จำนวนมากได้รวมเอาส่วนย่อยของพรีโปรเซสเซอร์ภาษา Cเข้าไว้ในระบบของตนแล้ว
SIMSCRIPTเป็นพรีโปรเซสเซอร์ Fortran เฉพาะงานสำหรับการสร้างแบบจำลองและการจำลองระบบแบบไม่ต่อเนื่องขนาดใหญ่
ภาษาโปรแกรม Fได้รับการออกแบบให้เป็นซับเซ็ตที่สะอาดของ Fortran 95 ซึ่งพยายามกำจัดคุณสมบัติที่ซ้ำซ้อน ไม่มีโครงสร้าง และล้าสมัยของ Fortran เช่นEQUIVALENCEคำสั่ง F ยังคงรักษาคุณสมบัติของอาร์เรย์ที่เพิ่มเข้ามาใน Fortran 90 และลบคำสั่งควบคุมที่ล้าสมัยเนื่องจากโครงสร้างการเขียนโปรแกรมที่เพิ่มเข้ามาใน FORTRAN 77 และ Fortran 90 ผู้สร้าง F อธิบายว่าเป็น "ภาษาการเขียนโปรแกรมอาร์เรย์แบบคอมไพล์ มีโครงสร้าง เหมาะอย่างยิ่งสำหรับการศึกษาและการคำนวณทางวิทยาศาสตร์" [ 84 ] Essential Lahey Fortran 90 (ELF90) เป็นซับเซ็ตที่คล้ายกัน
Lahey และ Fujitsu ร่วมมือกันสร้าง Fortran สำหรับ Microsoft .NET Framework [ 85 ] Silverfrost FTN95 ยังสามารถสร้างโค้ด .NET ได้อีกด้วย[ 86 ]
ตัวอย่างโค้ด
โปรแกรมต่อไปนี้แสดงให้เห็นถึงการจัดสรรหน่วยความจำแบบไดนามิกและการดำเนินการกับอาร์เรย์ ซึ่งเป็นสองคุณสมบัติที่นำมาใช้ใน Fortran 90 สิ่งที่น่าสังเกตเป็นพิเศษคือการไม่มีDOลูปและ คำสั่ง IF/ THENในการจัดการอาร์เรย์ การดำเนินการทางคณิตศาสตร์จะถูกนำไปใช้กับอาร์เรย์ทั้งหมด นอกจากนี้ยังเห็นได้ชัดเจนถึงการใช้ชื่อตัวแปรที่สื่อความหมายและรูปแบบโค้ดทั่วไปที่สอดคล้องกับรูปแบบการเขียนโปรแกรมในปัจจุบัน ตัวอย่างนี้คำนวณค่าเฉลี่ยของข้อมูลที่ป้อนแบบโต้ตอบ
ค่าเฉลี่ยของโปรแกรม! อ่านตัวเลขบางส่วนแล้วหาค่าเฉลี่ย! ตามที่เขียนไว้ หากไม่มีจุดข้อมูล ค่าเฉลี่ยจะเป็นศูนย์! แม้ว่านี่อาจไม่ใช่พฤติกรรมที่พึงประสงค์ แต่ก็ทำให้ตัวอย่างนี้เรียบง่ายไม่มีโดยนัยคะแนนจริงที่จัดสรรได้:: คะแนน(:)จำนวนเต็ม:: จำนวนจุดค่าจริง:: ค่าเฉลี่ย, ค่าเฉลี่ยบวก, ค่าเฉลี่ยลบคะแนนเฉลี่ย= 0.ค่าเฉลี่ยบวก= 0.ค่าเฉลี่ยเชิงลบ= 0เขียน( * , * ) "ป้อนจำนวนจุดที่จะหาค่าเฉลี่ย:"อ่าน( * , * ) จำนวนจุดจัดสรร( คะแนน( จำนวนคะแนน))เขียน( * , * ) "ป้อนคะแนนที่จะหาค่าเฉลี่ย:"อ่าน( * , * ) คะแนน! หาค่าเฉลี่ยโดยการรวมคะแนนทั้งหมดแล้วหารด้วยจำนวนคะแนนถ้า( จำนวนคะแนนมากกว่า0 ) คะแนนเฉลี่ยจะเท่ากับผลรวมของคะแนนทั้งหมดหารด้วยจำนวนคะแนน! ตอนนี้ให้คำนวณค่าเฉลี่ยจากจุดบวกและจุดลบเท่านั้นถ้า( จำนวนคะแนนมากกว่า0 ) > 0 ค่าเฉลี่ยบวก= ผลรวมของคะแนน, คะแนนมากกว่า0 ) / จำนวนคะแนนมากกว่า0ถ้า( จำนวนคะแนน< 0 ) > 0 ค่าเฉลี่ยเชิงลบ= ผลรวมของคะแนน< 0 / จำนวนคะแนน< 0! พิมพ์ผลลัพธ์ไปยังเทอร์มินัล stdout หน่วยที่ 6เขียน( * , '(a,g12.4)' ) 'ค่าเฉลี่ย = ' , average_pointsเขียน( * , '(a,g12.4)' ) 'ค่าเฉลี่ยของจุดบวก = ' , positive_averageเขียน( * , '(a,g12.4)' ) 'ค่าเฉลี่ยของจุดลบ = ' , negative_averageยกเลิกการจัดสรร( คะแนน) ! ปลดปล่อยหน่วยความจำค่าเฉลี่ยของโปรแกรมสุดท้ายอารมณ์ขัน
ในการประชุมคณะกรรมการมาตรฐาน FORTRAN ครั้งเดียวกันกับที่เลือกชื่อ "FORTRAN 77" นั้น มีข้อเสนอทางเทคนิคเชิงเสียดสีรวมอยู่ในเอกสารเผยแพร่อย่างเป็นทางการ โดยใช้ชื่อเรื่องว่า "ตัวอักษร O ถือว่าเป็นอันตราย " ข้อเสนอนี้มีจุดประสงค์เพื่อแก้ไขความสับสนที่บางครั้งเกิดขึ้นระหว่างตัวอักษร "O" กับเลขศูนย์ โดยการตัดตัวอักษรดังกล่าวออกจากชื่อตัวแปรที่อนุญาต อย่างไรก็ตาม วิธีการที่เสนอคือการตัดตัวอักษรดังกล่าวออกจากชุดอักขระทั้งหมด (โดยยังคงจำนวนอักขระทางศัพท์ไว้ที่ 48 ตัว ซึ่งเครื่องหมายโคลอนได้เพิ่มเป็น 49 ตัว) วิธีนี้ถือว่ามีประโยชน์เพราะจะส่งเสริมการเขียนโปรแกรมแบบมีโครงสร้าง โดยทำให้ไม่สามารถใช้GO TOคำสั่งที่เป็นปัญหาได้อีกต่อไป ( FORMATคำสั่งที่มีปัญหาอื่นๆ ก็จะถูกกำจัดออกไปด้วย) มีข้อสังเกตว่า "วิธีนี้อาจทำให้โปรแกรมที่มีอยู่บางโปรแกรมใช้ไม่ได้" แต่ส่วนใหญ่ "อาจจะไม่เป็นไปตามมาตรฐานอยู่แล้ว" [ 87 ] [ 88 ]
เมื่อ X3J3 ถกเถียงกันว่าจำนวนครั้งขั้นต่ำในการทำงานของลูป DO ควรเป็นศูนย์หรือหนึ่งใน Fortran 77 นั้น Loren Meissner ได้เสนอจำนวนครั้งขั้นต่ำเป็นสองครั้ง โดยให้เหตุผล(แบบติดตลก)ว่าหากน้อยกว่าสองครั้ง ก็คงไม่มีเหตุผลที่จะต้องมีลูป
เมื่อมีการเพิ่มอาร์เรย์ที่มีความยาวสมมติขึ้น มีข้อถกเถียงเกี่ยวกับการใช้อักขระที่เหมาะสมในการแยกขอบเขตบนและล่าง ในความคิดเห็นที่ตรวจสอบข้อโต้แย้งเหล่านี้ วอลต์ เบรนเนิร์ด ได้เขียนบทความชื่อ "ดาราศาสตร์ปะทะระบบทางเดินอาหาร" เนื่องจากผู้สนับสนุนบางคนเสนอให้ใช้เครื่องหมายดอกจัน ("*") ในขณะที่คนอื่นๆ นิยมใช้เครื่องหมายโคลอน (":")
ชื่อตัวแปรที่ขึ้นต้นด้วยตัวอักษร I–N จะมีประเภทเริ่มต้นเป็นจำนวนเต็ม ในขณะที่ตัวแปรที่ขึ้นต้นด้วยตัวอักษรอื่นๆ จะมีประเภทเริ่มต้นเป็นจำนวนจริง แม้ว่าโปรแกรมเมอร์จะสามารถแทนที่ค่าเริ่มต้นได้ด้วยการประกาศอย่างชัดเจน[ 89 ]ซึ่งนำไปสู่เรื่องตลกที่ว่า: "ใน FORTRAN พระเจ้าเป็นของจริง (เว้นแต่จะประกาศเป็นจำนวนเต็ม)"
นิตยสาร American Mathematical Monthly (พฤศจิกายน 1978) ได้ตีพิมพ์บทวิจารณ์สั้นๆ ในรูปแบบบทกวีว่า "วิธีการที่ชวนหลงใหลอย่างมีชีวิตชีวา/ในลักษณะที่คล้ายคลึงกับ Seuss/เขียนด้วยลายมือ พร้อมภาพวาดและเสียงหัวเราะมากมาย/พร้อมที่จะทำให้ Fortran โปร่งใส"
ดูเพิ่มเติม
- เอฟ2ซี
- F2PY – ไลบรารี Python สำหรับการเขียนโปรแกรมเชิงตัวเลข
- FORMAC – ระบบพีชคณิตคอมพิวเตอร์ที่ใช้ภาษา FORTRAN
- ภาษาโปรแกรม Fortran บน Wikibooks
- รายชื่อหนังสือเกี่ยวกับการเขียนโปรแกรม Fortran
- รายชื่อคอมไพเลอร์ Fortran
- รายชื่อไลบรารีตัวเลขของ Fortran
- รายชื่อซอฟต์แวร์และเครื่องมือ Fortran
- รายชื่อภาษาโปรแกรม
- การแสดงผลแบบเมทริกซ์ – วิธีการจัดเก็บข้อมูลในหน่วยความจำคอมพิวเตอร์
- โค้ดสปาเก็ตตี้ – โค้ดโปรแกรมที่มีโครงสร้างไม่ดี
อ่านเพิ่มเติม
- มาตรฐานภาษา
- ANSI x3.9-1966 มาตรฐาน FORTRAN ของสหรัฐอเมริกา (PDF)สถาบันมาตรฐานแห่งชาติอเมริกัน เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 15 พฤษภาคม 2011 เรียกดูเมื่อวันที่ 5 พฤษภาคม 2010เรียกกันอย่างไม่เป็นทางการว่า FORTRAN 66
- ANSI x3.9-1978 มาตรฐานแห่งชาติอเมริกัน – ภาษาโปรแกรม FORTRANสถาบันมาตรฐานแห่งชาติอเมริกัน เก็บถาวรจากต้นฉบับเมื่อวันที่ 29 ตุลาคม 2013 เรียกดูเมื่อวันที่ 11 ธันวาคม 2007เรียกอีกอย่างว่าISO 1539–1980 และเรียกกันอย่างไม่เป็นทางการว่า FORTRAN 77
- ANSI X3.198-1992 (R2002) / ISO/IEC 1539:1991 มาตรฐานแห่งชาติอเมริกัน – ภาษาโปรแกรม Fortran Extendedสถาบันมาตรฐานแห่งชาติอเมริกัน / ISO/IECเรียกกันอย่างไม่เป็นทางการว่า Fortran 90
- ISO/IEC 1539-1:1997 เทคโนโลยีสารสนเทศ – ภาษาโปรแกรม – ฟอร์ทราน – ส่วนที่ 1: ภาษาพื้นฐาน (PDF)เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 18 สิงหาคม 2554 เรียกดูเมื่อวันที่ 13 ธันวาคม 2550เรียกกันอย่างไม่เป็นทางการว่า Fortran 95 มาตรฐานนี้แบ่งออกเป็นสองส่วน ส่วนที่ 1 ได้รับการรับรองอย่างเป็นทางการโดย ANSI แล้ว
- ISO/IEC 1539-1:2004 เทคโนโลยีสารสนเทศ – ภาษาโปรแกรม – ฟอร์ทราน – ส่วนที่ 1: ภาษาพื้นฐาน (PDF)เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 31 กรกฎาคม 2023เรียกกันอย่างไม่เป็นทางการว่า Fortran 2003
- ISO/IEC 1539-1:2010 (ร่างมาตรฐานสากลฉบับสุดท้าย) เทคโนโลยีสารสนเทศ – ภาษาโปรแกรม – ฟอร์ทราน – ส่วนที่ 1: ภาษาพื้นฐาน (PDF )เรียกกันอย่างไม่เป็นทางการว่า Fortran 2008
- มาตรฐานที่เกี่ยวข้อง
- Kneis, Wilfried (ตุลาคม 1981). "ร่างมาตรฐาน FORTRAN แบบเรียลไทม์สำหรับอุตสาหกรรม" . ACM SIGPLAN Notices . 16 (7): 45– 60. doi : 10.1145/947864.947868 . ISSN 0362-1340 . S2CID 8662381 .
- ISO 8651-1:1988 ระบบประมวลผลข้อมูล – กราฟิกคอมพิวเตอร์ – การเชื่อมโยงภาษาของระบบเคอร์เนลกราฟิก (GKS) – ส่วนที่ 1: FORTRANเจนีวา สวิตเซอร์แลนด์: ISO 1988
- เอกสารอ้างอิงอื่นๆ
- มาตรฐาน ECMA เกี่ยวกับ FORTRAN (PDF)สมาคมผู้ผลิตคอมพิวเตอร์แห่งยุโรป เมษายน 1965เก็บถาวร(PDF)จากต้นฉบับเมื่อวันที่ 10 พฤษภาคม 2008เรียกดูเมื่อวันที่ 17 พฤศจิกายน 2014
- คู่มืออ้างอิง FORTRAN 77 4.0 (PDF)บริษัท ซัน ไมโครซิสเต็มส์ จำกัด 1995 เก็บถาวรจากต้นฉบับ(PDF) เมื่อ วันที่ 5 มกราคม 2012เรียกดูเมื่อวันที่ 17 พฤศจิกายน 2014
- "แบบฟอร์มการเขียนโค้ด FORTRAN" (PDF) IBM เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 8 มิถุนายน 2015 เรียกดูเมื่อวันที่ 17พฤศจิกายน2014
- เอกสาร IBM System/360 และ System/370 Fortran IV Language (PDF) IBMพฤษภาคม 1974 เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 6 เมษายน 2011เรียกดูเมื่อวันที่ 17 พฤศจิกายน 2014
- Goerz, Michael (2014). "Modern Fortran Reference Card" (PDF) . เก็บถาวร(PDF)จากต้นฉบับเมื่อวันที่ 14 ธันวาคม 2014. เรียกดูเมื่อวันที่ 14 ธันวาคม 2014 .
- หนังสือ
- Adams, Jeanne C. ; Brainerd, Walter S.; Hendrickson, Richard A.; Maine, Richard E.; Martin, Jeanne T.; Smith, Brian T. (2009). คู่มือ Fortran 2003 (ฉบับพิมพ์ครั้งที่ 1). Springer . ISBN 978-1-84628-378-9.
- Akin, JE (2003). การเขียนโปรแกรมเชิงวัตถุโดยใช้ Fortran 90/95 . เคมบริดจ์, นิวยอร์ก: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์. ISBN 978-0-521-52408-7. OCLC 49906306 .
- Arjen, Markus (2012), "Modern Fortran in Practice", Cambridge Univ. Press, ISBN 978-1-13908479-6.
- Brainerd, WS; Goldberg, CH; Adams, JC (1996). คู่มือการเขียนโปรแกรม Fortran 90 (ฉบับที่ 3). Springer. ISBN 978-0-387-94570-5.
- เบรนเนิร์ด, วอลเตอร์ (2015). คู่มือการเขียนโปรแกรม Fortran 2008.ลอนดอน: สปริงเกอร์. ISBN 978-1-4471-6758-7. OCLC 920530344 .
- แชปแมน, สตีเฟน เจ. (2018). ภาษาฟอร์ทรานสำหรับนักวิทยาศาสตร์และวิศวกร (ฉบับที่สี่). นิวยอร์ก : McGraw-Hill Education . หน้า xxiv + 1024. ISBN 978-0-07-338589-1.
- ชิเวอร์ส, เอียน; สเลธโฮล์ม, เจน (2018). บทนำสู่การเขียนโปรแกรมด้วยฟอร์ทราน (ฉบับที่ 4). สปริงเกอร์. ISBN 978-3-319-75501-4.
- Clerman, Norman (2012). Modern Fortran: style and usage . นิวยอร์ก: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ISBN 978-0-521-51453-8. OCLC 776162717 .
- Curcic, Milan (2020). Modern Fortran: การสร้างแอปพลิเคชันแบบขนานที่มีประสิทธิภาพ . Shelter Island, NY: Manning Publications Company. ISBN 978-1-61729-528-7. OCLC 1256806439 .
- Ellis, TMR; Phillips, Ivor R.; Lahey, Thomas M. (1994). การเขียนโปรแกรม Fortran 90 (ฉบับพิมพ์ครั้งที่ 1). Addison Wesley. ISBN 978-0-201-54446-6.
- Etter, DM (1990). โครงสร้าง FORTRAN 77 สำหรับวิศวกรและนักวิทยาศาสตร์ (ฉบับที่ 3). สำนักพิมพ์ The Benjamin/Cummings Publishing Company, Inc. ISBN 978-0-8053-0051-2.
- คอฟแมน, RE (1978). หนังสือระบายสี FORTRAN (PDF) (ฉบับพิมพ์ครั้งที่ 1). สำนักพิมพ์ MIT. ISBN 0-262-61026-4.
- Kerrigan, JF (1993). การย้ายไปใช้ Fortran 90 (ฉบับพิมพ์ครั้งที่ 1). O'Reilly & Associates, Inc. ISBN 1-56592-049-X.
- Kupferschmid, Michael (2002). Classical Fortran: Programming for Engineering and Scientific Applications . Marcel Dekker (CRC Press). ISBN 978-0-8247-0802-3.( เอกสารเพิ่มเติม )
- ลอเรนโซ, มาร์ค โจนส์ (2019). การแยกส่วนเครื่องจักร: ประวัติศาสตร์ของภาษาการเขียนโปรแกรม FORTRAN (Formula TRANslation)จัดพิมพ์โดยอิสระISBN 978-1082395949.
- ลูคิเดส, ไมค์ (1990). ยูนิกซ์สำหรับโปรแกรมเมอร์ FORTRAN . เซบาสโตโพล, แคลิฟอร์เนีย: โอไรลีย์ แอนด์ แอสโซซิเอทส์ อิงค์. ISBN 0-937175-51-X.
- McCracken, Daniel D. (1961). คู่มือการเขียนโปรแกรม FORTRAN . นิวยอร์ก: Wiley. LCCN 61016618 .
- เมทคาล์ฟ, ไมเคิล; รีด, จอห์น; โคเฮน, มัลคอล์ม; บาเดอร์, ไรน์โฮลด์ (2024). คำอธิบายภาษาฟอร์ตแรนสมัยใหม่: การรวมภาษาฟอร์ตแรน 2023 (ฉบับที่ 6). สำนักพิมพ์มหาวิทยาลัยออกซ์ฟอร์ด. ISBN 9780198876595.
- Nyhoff, Larry; Sanford Leestma (1995). FORTRAN 77 สำหรับวิศวกรและนักวิทยาศาสตร์ พร้อมบทนำเกี่ยวกับ Fortran 90 (ฉบับที่ 4). Prentice Hall . ISBN 978-0-13-363003-9.
- เพจ, ไคลฟ์ จี. (1988). คู่มือโปรแกรมเมอร์มืออาชีพสำหรับ Fortran77 (ฉบับ 7 มิถุนายน 2005). ลอนดอน: พิตแมน. ISBN 978-0-273-02856-7สืบค้นข้อมูลเมื่อ วัน ที่4 พฤษภาคม 2553
- Press, William H. (1996). Numerical Recipes in Fortran 90: The Art of Parallel Scientific Computing . Cambridge, UK: Cambridge University Press. ISBN 978-0-521-57439-6.
- Ruetsch, Gregory; Fatica, Massimiliano (2013). CUDA Fortran สำหรับนักวิทยาศาสตร์และวิศวกร (ฉบับพิมพ์ครั้งที่ 1). Elsevier . หน้า 338. ISBN 9780124169708.
- Sleighthome, Jane; Chivers, Ian David (1990). Interactive Fortran 77: A Hands-On Approach . Computers and their applications (ฉบับที่ 2). Chichester: E. Horwood. ISBN 978-0-13-466764-5เก็บถาวรจากต้นฉบับเมื่อวันที่ 12 มีนาคม 2557 เรียกดูเมื่อวันที่ 12 มีนาคม 2557
- บทความ
- Allen, FE (กันยายน 1981). "ประวัติศาสตร์ของเทคโนโลยีประมวลผลภาษาใน IBM". IBM Journal of Research and Development . 25 (5): 535– 548. doi : 10.1147/rd.255.0535 . S2CID 14149353 .
- JW Backus ; RJ Beeber; S. Best; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (กุมภาพันธ์ 1957). ระบบการเข้ารหัสอัตโนมัติ FORTRAN (PDF) . การ ประชุมคอมพิวเตอร์ร่วมตะวันตก. หน้า 188–198 . doi : 10.1145/1455567.1455599
- Chivers, Ian D.; Sleightholme, Jane (2022). "การสนับสนุนคอมไพเลอร์สำหรับมาตรฐาน Fortran 2008 และ 2018" .
- Pigott, Diarmuid (2006). "FORTRAN – คอมไพเลอร์ระดับสูงของ Backus และคณะ (ภาษาคอมพิวเตอร์)"สารานุกรมภาษาคอมพิวเตอร์มหาวิทยาลัยเมอร์ด็อก เก็บถาวรจากต้นฉบับเมื่อวันที่ 8 ตุลาคม 2009 สืบค้นเมื่อ5 พฤษภาคม 2010
- Roberts, Mark L.; Griffiths, Peter D. (1985). "ข้อควรพิจารณาในการออกแบบสำหรับ IBM Personal Computer Professional FORTRAN ซึ่งเป็นคอมไพเลอร์ที่ปรับให้เหมาะสม" IBM Systems Journal . 24 (1): 49– 60. doi : 10.1147/sj.241.0049 .
ลิงก์ภายนอก
- ISO/IEC JTC1/SC22/WG5 —หน่วยงานมาตรฐานอย่างเป็นทางการของภาษา Fortran
- เอกสารมาตรฐาน Fortran — มาตรฐาน GFortran
- fortran-lang.org (2020).
- ประวัติของ FORTRAN และ FORTRAN II — พิพิธภัณฑ์ประวัติศาสตร์คอมพิวเตอร์
- Valmer Norrod และคณะ: หลักสูตรการเรียนรู้ด้วยตนเองเกี่ยวกับการเขียนโปรแกรม FORTRAN—เล่มที่ 1—ตำราเรียน , Computer Science Corporation, El Segundo, California (เมษายน 1970). NASA (N70-25287).
- Valmer Norrod, Sheldom Blecher และ Martha Horton: หลักสูตรการเรียนรู้ด้วยตนเองเกี่ยวกับการเขียนโปรแกรม FORTRAN—เล่มที่ 2—แบบฝึกหัด , NASA CR-1478 (เมษายน 1970), NASA (N70-25288)
- บทนำเกี่ยวกับภาษาโปรแกรม Fortranโดย Reinhold Bader และ Nisarg Patel จากศูนย์ซูเปอร์คอมพิวเตอร์ Leibniz
- บทช่วยสอนเกี่ยวกับ coarray
- Victor Eijkhout: บทนำสู่การเขียนโปรแกรมเชิงวิทยาศาสตร์ใน C++17/Fortran2008, ศิลปะแห่ง HPC เล่ม 3 (PDF) เก็บถาวรเมื่อวันที่ 5 กุมภาพันธ์ 2023 ที่Wayback Machine
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ฟอร์ทราน
ฟอร์แทรน ( / ˈ f ɔːr t r æ n / ; เดิมชื่อFORTRAN ) เป็นภาษาโปรแกรมเชิงคำสั่งแบบคอมไพล์รุ่นที่สามซึ่งออกแบบมาเพื่อการคำนวณเชิงตัวเลขและ การ คำนวณ ทางวิทยาศาสตร์
การตั้งชื่อ
คู่มือฉบับแรกสำหรับ FORTRAN อธิบายว่าเป็น ระบบแปลสูตร และพิมพ์ชื่อด้วยตัว พิมพ์เล็ก Fortran [ 10 ] : หน้า 2 [ 11 ] แหล่งข้อมูลอื่นแนะนำ ว่า ชื่อนี้หมายถึงตัว แปลสูตร [ 12 ] หรือโดยทั่วไปคือ การ แปล สูตร [ 13 ] [ 14 ] [ 15 ]
ต้นกำเนิด
ในช่วงปลายปี 1953 John W. Backus ได้ยื่นข้อเสนอต่อผู้บังคับบัญชาของเขาที่ IBM เพื่อพัฒนาทางเลือกที่ใช้งานได้จริงมากกว่า ภาษาแอสเซมบลี สำหรับการเขียนโปรแกรมคอมพิวเตอร์เมนเฟรม IBM 704 ของพวกเขา[ 11 ] : 69 ทีม FORTRAN ในประวัติศาสตร์ของ Backus...
ฟอร์แทรน
การเปิดตัว FORTRAN ครั้งแรกสำหรับ IBM 704 [ 10 ] ประกอบด้วย คำสั่ง 32 ประเภทรวมถึง: