อยากรู้อยากเห็นและเรียนรู้: Fortran สมัยใหม่ในช่วงสั้น ๆ

ความก้าวหน้าทางวิทยาศาสตร์และวิศวกรรมยังคงพึ่งพาภาษาฟอร์แทรนมากกว่าภาษาอื่น ๆ โดยมาตรการที่สำคัญหลายประการ แปลกใจ? คุณไม่ควรเป็นแม้ว่าหลายคนที่เรียกตัวเองว่าโปรแกรมเมอร์จะไม่เคยเรียน Fortran มาก่อน ฉันจะสอนคุณ Fortran ภายในห้านาทีหรือน้อยกว่านั้น มันจะไม่เจ็บและคุณจะรู้ว่าอะไรคือภาษาโปรแกรมที่สำคัญและมีอิทธิพลที่สุดเท่าที่เคยมีมา

นักวิทยาศาสตร์คอมพิวเตอร์อาจทำตัวเหมือน Fortran ไม่มีอยู่จริง แต่วัฒนธรรมสมัยนิยม ( The Simpsons , Season 26, Episode 10) ทำได้ดีกว่าเมื่อสังเกตอย่างชาญฉลาด:“ Fortran ภาษาโปรแกรมที่ยิ่งใหญ่ที่สุด!” ในความเป็นจริงมากกว่าครึ่งหนึ่งของการคำนวณ ที่ทำโดยคอมพิวเตอร์ที่ทรงพลังที่สุดในโลกมาจาก Fortran ในระบบขนาดใหญ่บางระบบรหัส Fortran สามารถรับผิดชอบ 80-100% ของการคำนวณ

นอกจากนี้ยังง่ายต่อการเรียนรู้อย่างไม่น่าเชื่อดังที่คุณจะเห็นจากการแนะนำสั้น ๆ เกี่ยวกับการเขียนโปรแกรม Fortran ฉันคิดว่าคุณรู้วิธีการเขียนโปรแกรมในสิ่งอื่นที่ไม่ใช่ Fortran แล้ว (หากคุณยังใหม่กับการเขียนโปรแกรมฉันขอแนะนำให้เรียน Fortran ด้วย“ A Fortran Coloring Book”)

 มาเริ่มกันเลย

 โปรแกรมสวัสดี

    พิมพ์ *, "สวัสดีชาวโลก!"

จบโปรแกรมสวัสดี

พิมพ์ (ใช้นามสกุล. f95 หรือ. f90 สำหรับไฟล์ของคุณ) คอมไพล์เรียกใช้สิ่งนี้และพิมพ์ "Hello, World!" “* ได้” ในงบการพิมพ์เป็นหลักหมายถึงรูปแบบโดยอัตโนมัติ

ตัวอย่างที่สองของฉันใช้คณิตศาสตร์และจบด้วยคำสั่ง 'if / then / else':

โปรแกรม mymath

  โดยปริยายไม่มี

  จริง :: answer, x, y, sum, prod, cubedx, cubedy

  พิมพ์ *, 'พิมพ์ตัวเลขสองตัว (x และ y)'

  อ่าน *, x                                          

  อ่าน *, y                                          

  ผลรวม = x + y  

  prod = x * y                                       

  cubedx = x ** 3;

  ลูกบาศก์ = y ** 3;

  พิมพ์ *, 'ผลรวม x + y คือ' ผลรวม

  พิมพ์ *, 'ผลิตภัณฑ์ x * y คือ', prod

  พิมพ์ *, 'Cubed x and y', cubedx, cubedy

  พิมพ์ *, 'ไซน์ของ x และ y', บาป (x), บาป (y)

  ถ้า (x> y) แล้ว

    พิมพ์ *, 'ฉันสังเกตว่า x มีขนาดใหญ่กว่า y'

  อื่น

    พิมพ์ *, 'ดูเหมือนว่า y จะไม่เล็กกว่า x'

  สิ้นสุดถ้า

จบโปรแกรม mymath  

คุณอาจสังเกตเห็นว่าฉันเล็ดลอด“ โดยนัยไม่มีเลย” นั่นเป็นเรื่องปกติใน Fortran สมัยใหม่ - มันบอกให้คอมไพเลอร์ต้องการให้มีการประกาศตัวแปรอย่างชัดเจนเพื่อให้ตัวแปรที่ไม่รู้จักถูกตั้งค่าสถานะเป็นข้อผิดพลาด หากไม่มีมัน Fortran จะถือว่าตัวแปรที่ขึ้นต้นด้วย 'i' ถึง 'n' (ตัวอักษรสองตัวแรกของจำนวนเต็ม) เป็นจำนวนเต็มและอื่น ๆ เป็นตัวเลขทศนิยม ('จริง') นั่นลดจำนวนไพ่ที่เราต้องชกเมื่อหลายสิบปีก่อน แต่โดยทั่วไปแล้วในยุคปัจจุบันนี้

 การรันโปรแกรมนี้ (และพิมพ์ใน 3.14 และ 1.57) ให้ผลดังต่อไปนี้:

พิมพ์ตัวเลขสองตัว (x และ y)

3.14

1.57

 ผลรวม x + y คือ 4.71000004   

 ผลิตภัณฑ์ x * y คือ 4.92980051   

 ลูกบาศก์ x และ y 30.9591484 3.86989355   

 ไซน์ของ x และ y 1.59254798E-03 0.999999702

 ผมสังเกตว่า x ใหญ่กว่า y   

Fortran ออกแบบมาสำหรับคณิตศาสตร์ (FORmula TRANslation) โปรดทราบว่า "sin (... )" ถูกสร้างขึ้นโดยไม่จำเป็นต้องรวมส่วนหัวหรือแพ็คเกจใด ๆ แน่นอนว่า Fortran รองรับตัวเลขทศนิยมและจำนวนเต็ม แต่ก็รองรับจำนวนเชิงซ้อนเช่นกัน ไม่จำเป็นต้องใช้สารเติมแต่ง

ตัวอย่างที่สามของฉันเกี่ยวข้องกับการวนซ้ำ (เรียกว่า "do" ใน Fortran):

 วนโปรแกรม

  โดยปริยายไม่มี    

  จำนวนเต็ม :: i, j, keep (100,2), w

  w = 0

  ฉัน = 10, 50, 5

    ทำ j = i, 20, 5

       พิมพ์ *, i, j

       w = w + 1

       เก็บ (w, 1) = i

       เก็บ (w, 2) = j

    จบ

  จบ

  ฉัน = 1, w

    พิมพ์ *, 'keep:', keep (i, 1), keep (i, 2)

  จบ

สิ้นสุดโปรแกรมวนซ้ำ

บรรทัดการพิมพ์ในโปรแกรมตัวอย่างของฉันจะรันก็ต่อเมื่อ j do-loop ทำงานเท่านั้น j loop ไม่ทำงานเลยเมื่อฉันเกิน 20 ตัวอย่างนี้ยังแนะนำอาร์เรย์ด้วยการใช้อาร์เรย์ชื่อ 'keep' Fortran เริ่มต้นการกำหนดหมายเลขอาร์เรย์ที่ '1' แทนศูนย์ซึ่งเป็นวิธีเดียวกับที่ชาวอเมริกันจำนวนชั้นอาคาร (ชั้น # 2 หมายถึงชั้นล่างซึ่งถือว่าเป็น '1') สถานที่อื่น ๆ ในโลกใช้เลขศูนย์สำหรับอาคารของพวกเขา (“ ชั้นหนึ่ง” คือสิ่งที่ชาวอเมริกันเรียกว่า“ ชั้นสอง”) เช่น C และ C ++ ทำกับอาร์เรย์ ผลลัพธ์จากตัวอย่าง 'program loop' ดังแสดงด้านล่าง:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 เก็บ: 10 10

 เก็บ: 10 15

 เก็บ: 10 20

 รักษา: 15 15

 เก็บ: 15 20

 เก็บ: 20 20

 ในตัวอย่างสุดท้ายของฉันฉันจะกำหนดรูทีนย่อย (ฟังก์ชัน) ที่เรียกว่า 'ave' เพื่อหาค่าเฉลี่ยของตัวเลขสามตัวที่ฉันกำหนดแบบคงที่ คุณจะสังเกตได้ว่าฉันขี้เกียจและเพิ่งเขียนคำว่า 'จบ' หลังโปรแกรมและฟังก์ชัน ไม่เป็นไร แต่ถ้าคุณใช้ชื่อเหมือนที่ฉันเคยทำไว้ก่อนหน้านี้คอมไพเลอร์จะช่วยตรวจสอบว่าส่วนท้ายตรงกับสิ่งที่คุณต้องการให้ตรงกันหรือไม่

โปรแกรม callret

  โดยปริยายไม่มี

  จริง a, b, c

  av จริง, avsq1, avsq2

  ave จริง

  ข้อมูล a, b, c / 5.0,2.0,3.0 /

  av = ave (a, b, c)

  พิมพ์ *, 'ค่าเฉลี่ยของ', a, b, c, 'คือ:', AV

จบ

ฟังก์ชันจริง ave (x, y, z)

  x จริง, y, z, ผลรวม

  ผลรวม = x + y + z

  ave = ผลรวม / 3.0

  กลับ

จบ

 สิ่งนี้พิมพ์:

 ค่าเฉลี่ย 5.00000000 2.00000000 3.00000000 คือ: 3.33333325 

 ใช่ Fortran สามารถจัดรูปแบบเอาต์พุตได้ หากเราแทนที่ "พิมพ์" ด้านบนดังต่อไปนี้:

  พิมพ์ 8, 'ค่าเฉลี่ยของ', a, b, c, 'คือ', AV

8 รูปแบบ (a, 2 (f4.2, ','), f4.2, a, f7.5)

ผลลัพธ์จะกลายเป็น:

ค่าเฉลี่ย 5.00, 2.00, 3.00 คือ 3.33333

การจัดรูปแบบ Fortran สามารถทำได้ในบรรทัดเดียวและมีผลลัพธ์ที่สวยงามเหมือนกัน:

พิมพ์ "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'ค่าเฉลี่ยของ', a, b, c, 'คือ', AV

หากคุณถูกชักนำให้เชื่อว่า Fortran นั้นแปลกแสดงว่าคุณเข้าใจผิด ฉันเขียนตัวอย่างทั้งหมดนี้ในสิ่งที่โปรแกรมเมอร์ Fortran เรียกว่า 'free form' นั่นกลายเป็นส่วนหนึ่งของ Fortran อย่างเป็นทางการด้วยมาตรฐาน 'Fortran 90' (ดังนั้นคำแนะนำของฉันในการใช้. f90 หรือ. f95 เป็นนามสกุลไฟล์สิ่งเหล่านี้บอกคอมไพเลอร์โดยไม่มีสวิตช์ตัวเลือกพิเศษว่าเรากำลังใช้รูปแบบอิสระ) โปรดทราบว่าในปีพ. ศ. 2499 ผู้ใช้ต้องการบางสิ่งที่เหมาะสำหรับเจาะบัตร ฉันสามารถใช้เวลาหลายชั่วโมงเกี่ยวกับวิธีที่ Fortran รองรับรูปแบบที่เน้นคอลัมน์และอักขระต่อเนื่อง ฯลฯ แต่อย่างที่ฉันได้แสดงไปคุณไม่จำเป็นต้องเรียนรู้สิ่งนั้นในการเขียนหรืออ่านโค้ด Fortran

เหตุใด Fortran จึงถูกนักวิทยาศาสตร์คอมพิวเตอร์รังเกียจ? คำถามที่ดี ฟอร์แทรนเป็นภาษาที่เก่าแก่ที่สุด (ค. 1956) เริ่มต้นในยุคของเทปบัตรเจาะรูและการแทนที่คอมพิวเตอร์ของมนุษย์ มันมีมาก่อนการเขียนโปรแกรมโครงสร้างบล็อกทฤษฎีการแยกวิเคราะห์และกราฟิก ระหว่างทางนักวิทยาศาสตร์คอมพิวเตอร์ได้สำรวจความก้าวหน้าในการประมวลผลในขณะที่แนะนำภาษาโปรแกรมหลายพันภาษาซึ่งส่วนใหญ่ล้มเหลว อย่างไรก็ตามในทุก ๆ ด้านของความพยายามของมนุษย์“ ออกเก่ากับใหม่” เป็นสิ่งที่ทันสมัย วิทยาการคอมพิวเตอร์ไม่แตกต่างกัน 

แต่เมื่อการกระทืบจำนวนเป็นสิ่งสำคัญไม่มีอะไรดีหรือง่ายไปกว่า Fortran ฉันแนะนำว่าเราทุกคนควรรู้จักเครื่องมือมากมายและใช้เครื่องมือที่ดีที่สุดสำหรับงานนี้ เพียงเพราะค้อนคู่ใจของฉันอยู่ในกล่องเครื่องมือมานานไม่ได้หมายความว่าฉันไม่ต้องการมันเพื่องานที่ถูกต้อง ฟอร์แทรนไม่ต่างกัน

Fortran ไม่เพียง แต่เป็นภาษาการเขียนโปรแกรมระดับสูงดั้งเดิมเท่านั้น แต่ยังมีชีวิตมีความสำคัญและใช้กันอย่างแพร่หลาย ใครเริ่มข่าวลือแนะนำเป็นอย่างอื่น

 ทรัพยากร

  • Intel Fortran - ใช้สำหรับ x86 (Intel / AMD) อย่างมากประสิทธิภาพสูง
    • คุณอาจมีสิทธิ์ได้รับคอมไพเลอร์ฟรี (และเครื่องมืออื่น ๆ )
    • สำเนาทดลองใช้พร้อมตัวเลือกในการซื้อในภายหลัง
    •  เบต้าปี 2018 จะทำงานจนถึงเดือนกรกฎาคม 2018: ลองใช้เวอร์ชันเบต้าที่ใช้งานได้เต็มรูปแบบล่าสุดและดีที่สุดรวมถึง Fortran และเครื่องมือที่เกี่ยวข้องจนถึงเวลานั้นฟรี: Intel Parallel Studio XE 2018 Beta - เข้าร่วมเลย
  • GNU Fortran - การสนับสนุนที่กว้างขึ้น (โปรเซสเซอร์จำนวนมากหลายระบบ) ประสิทธิภาพต่ำลง
    • โอเพ่นซอร์สและฟรี
    • บน MacBook Air ของฉัน ... ฉันแค่พูดว่า "brew install gcc" และฉันจะได้รับ gfortran ฟรี

คลิกที่นี่เพื่อดาวน์โหลด Intel Parallel Studio XE รุ่นทดลองใช้ฟรี 30 วัน