ตัวอย่าง โปรแกรมภาษาระดับสูง ได้แก่ โปรแกรมภาษา

ในวิทยาการคอมพิวเตอร์เป็นภาษาโปรแกรมระดับสูงเป็นภาษาโปรแกรมที่มีความแข็งแกร่งเป็นนามธรรมจากรายละเอียดของเครื่องคอมพิวเตอร์ในทางตรงกันข้ามกับภาษาโปรแกรมระดับต่ำอาจใช้องค์ประกอบของภาษาที่เป็นธรรมชาติ ใช้งานง่ายกว่าหรืออาจทำให้ระบบคอมพิวเตอร์ทำงานโดยอัตโนมัติ (หรือแม้แต่ซ่อนทั้งหมด) (เช่นการจัดการหน่วยความจำ ) ทำให้กระบวนการพัฒนาโปรแกรมง่ายขึ้นและ เข้าใจง่ายกว่าเมื่อใช้ภาษาระดับล่าง จำนวนของสิ่งที่เป็นนามธรรมที่ให้ไว้กำหนดว่าภาษาโปรแกรม "ระดับสูง" เป็นอย่างไร [1]

ในปี 1960 ที่ระดับสูงการเขียนโปรแกรมภาษาที่ใช้คอมไพเลอร์ถูกเรียกกันว่าautocodes[2]ตัวอย่างของ autocodes เป็นภาษาโคบอลและFortran[3]

การเขียนโปรแกรมภาษาระดับสูงครั้งแรกที่ออกแบบมาสำหรับคอมพิวเตอร์เป็นPlankalkülที่สร้างขึ้นโดยคอนราดซูส[4]อย่างไรก็ตามมันก็ไม่ได้ดำเนินการในเวลาที่เขาและผลงานเดิมของเขาถูกแยกส่วนใหญ่มาจากการพัฒนาอื่น ๆ อันเนื่องมาจากสงครามโลกครั้งที่สองนอกเหนือจากอิทธิพลของภาษาในภาษา "Superplan" โดยไฮนซ์ Rutishauserและยังมีบางส่วนAlgol ภาษาระดับสูงที่แพร่หลายอย่างมีนัยสำคัญตัวแรกคือFortranซึ่งเป็นการพัฒนาระบบAutocodeรุ่นก่อนหน้าของ IBM โดยไม่ขึ้นกับเครื่อง Algolที่กำหนดไว้ในปี 1958 และ 1960 โดยคณะกรรมการของยุโรปและนักวิทยาศาสตร์คอมพิวเตอร์ชาวอเมริกันแนะนำการเรียกซ้ำเช่นเดียวกับฟังก์ชั่นที่ซ้อนกันอยู่ภายใต้ขอบเขตของคำศัพท์ นอกจากนี้ยังเป็นภาษาแรกที่มีความแตกต่างอย่างชัดเจนระหว่างค่าและชื่อ - พารามิเตอร์และความหมายที่เกี่ยวข้อง [5] Algol ยังนำเสนอแนวคิดการเขียนโปรแกรมแบบมีโครงสร้างหลายอย่างเช่นโครงสร้างwhile-doและif-then-elseและไวยากรณ์ของมันเป็นแบบแรกที่อธิบายในรูปแบบทางการ - " Backus – Naur form " (BNF) ในช่วงเวลาใกล้เคียงกันCobol ได้เปิดตัวบันทึก (หรือที่เรียกว่าโครงสร้าง) และLisp ได้เปิดตัวแลมบ์ดาที่เป็นนามธรรมโดยทั่วไปในภาษาโปรแกรมเป็นครั้งแรก

คุณสมบัติ

"ภาษาระดับสูง" หมายถึงระดับที่สูงขึ้นของนามธรรมจากภาษาเครื่องแทนที่จะจัดการกับรีจิสเตอร์แอดเดรสหน่วยความจำและ call stacks ภาษาระดับสูงจะจัดการกับตัวแปรอาร์เรย์อ็อบเจกต์เลขคณิตที่ซับซ้อนหรือนิพจน์บูลีนรูทีนย่อยและฟังก์ชันลูปเธรดล็อกและแนวคิดทางวิทยาศาสตร์คอมพิวเตอร์นามธรรมอื่น ๆ ด้วย a มุ่งเน้นไปที่การใช้งานมากกว่าประสิทธิภาพของโปรแกรมที่ดีที่สุด ซึ่งแตกต่างจากระดับต่ำภาษาแอสเซมบลี , ภาษาระดับสูงจะมีไม่กี่ถ้ามีองค์ประกอบภาษาที่แปลโดยตรงลงพื้นเมืองของเครื่องopcodesนอกจากนี้ยังอาจมีคุณสมบัติอื่น ๆ เช่นรูทีนการจัดการสตริงคุณลักษณะภาษาเชิงวัตถุและอินพุต / เอาต์พุตไฟล์ สิ่งหนึ่งที่ควรทราบเกี่ยวกับภาษาโปรแกรมระดับสูงคือภาษาเหล่านี้อนุญาตให้ถอดโปรแกรมเมอร์ออกจากเครื่องได้ นั่นคือแตกต่างจากภาษาระดับต่ำเช่นภาษาแอสเซมบลีหรือภาษาเครื่องการเขียนโปรแกรมระดับสูงสามารถขยายคำสั่งของโปรแกรมเมอร์และกระตุ้นการเคลื่อนไหวของข้อมูลจำนวนมากในพื้นหลังโดยที่พวกเขาไม่รู้ตัว ความรับผิดชอบและอำนาจในการดำเนินการตามคำสั่งได้ถูกส่งมอบให้กับเครื่องจากโปรแกรมเมอร์แล้ว

โทษที่เป็นนามธรรม

ภาษาระดับสูงตั้งใจที่จะให้คุณลักษณะที่เป็นมาตรฐานของงานทั่วไปอนุญาตให้มีการดีบักที่หลากหลายและรักษาการไม่เชื่อเรื่องพระเจ้าทางสถาปัตยกรรม ในขณะที่ภาษาระดับต่ำมักจะสร้างโค้ดที่มีประสิทธิภาพมากขึ้นผ่านการเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรมระบบเฉพาะ ค่าปรับ Abstractionเป็นค่าใช้จ่ายที่เทคนิคการเขียนโปรแกรมระดับสูงต้องจ่ายสำหรับการไม่สามารถเพิ่มประสิทธิภาพหรือใช้ฮาร์ดแวร์บางอย่างได้เนื่องจากไม่ได้ใช้ประโยชน์จากทรัพยากรทางสถาปัตยกรรมระดับต่ำบางอย่าง การเขียนโปรแกรมระดับสูงจะแสดงคุณสมบัติต่างๆเช่นโครงสร้างข้อมูลและการดำเนินการทั่วไปการตีความรันไทม์และไฟล์โค้ดระดับกลาง ซึ่งมักส่งผลให้มีการดำเนินการมากเกินความจำเป็นการใช้หน่วยความจำที่สูงขึ้นและขนาดโปรแกรมไบนารีที่ใหญ่ขึ้น [6] [7] [8]ด้วยเหตุนี้โค้ดที่ต้องทำงานอย่างรวดเร็วและมีประสิทธิภาพเป็นพิเศษอาจต้องใช้ภาษาระดับต่ำกว่าแม้ว่าภาษาระดับสูงจะทำให้การเข้ารหัสง่ายขึ้น ในหลายกรณีส่วนสำคัญของโปรแกรมส่วนใหญ่ในภาษาระดับสูงสามารถมือเขียนในภาษาประกอบนำไปสู่การได้เร็วขึ้นมากมีประสิทธิภาพมากขึ้นได้อย่างน่าเชื่อถือหรือเพียงแค่ทำงานอย่างโปรแกรมที่ดีที่สุด

อย่างไรก็ตามด้วยความซับซ้อนที่เพิ่มขึ้นของสถาปัตยกรรมไมโครโปรเซสเซอร์สมัยใหม่คอมไพเลอร์ที่ได้รับการออกแบบมาอย่างดีสำหรับภาษาระดับสูงมักจะสร้างโค้ดที่มีประสิทธิภาพเทียบเท่ากับสิ่งที่โปรแกรมเมอร์ระดับต่ำส่วนใหญ่สามารถผลิตด้วยมือได้และนามธรรมที่สูงขึ้นอาจช่วยให้สามารถใช้เทคนิคที่มีประสิทธิภาพมากขึ้นได้ ผลลัพธ์โดยรวมมากกว่าคู่ระดับต่ำในการตั้งค่าเฉพาะ [9]ภาษาระดับสูงได้รับการออกแบบโดยไม่ขึ้นกับสถาปัตยกรรมระบบคอมพิวเตอร์เฉพาะ อำนวยความสะดวกในการดำเนินการนี้โปรแกรมที่เขียนในภาษาดังกล่าวในระบบคอมพิวเตอร์ใด ๆ ที่มีการสนับสนุนที่เข้ากันได้สำหรับการตีความหรือJITโปรแกรม ภาษาระดับสูงสามารถปรับปรุงได้เมื่อนักออกแบบพัฒนาปรับปรุง ในกรณีอื่น ๆ ภาษาระดับสูงใหม่จะพัฒนาขึ้นจากภาษาอื่น ๆ อย่างน้อยหนึ่งภาษาโดยมีเป้าหมายในการรวบรวมโครงสร้างที่ได้รับความนิยมสูงสุดเข้ากับคุณลักษณะใหม่หรือคุณลักษณะที่ได้รับการปรับปรุง ตัวอย่างนี้คือScalaซึ่งรักษาความเข้ากันได้แบบย้อนหลังกับJavaซึ่งหมายความว่าโปรแกรมและไลบรารีที่เขียนด้วย Java จะยังคงใช้งานได้ต่อไปแม้ว่าร้านเขียนโปรแกรมจะเปลี่ยนไปใช้ Scala ก็ตาม ทำให้การเปลี่ยนแปลงง่ายขึ้นและอายุการใช้งานของการเข้ารหัสระดับสูงเช่นนี้ไม่แน่นอน ในทางตรงกันข้ามโปรแกรมระดับต่ำแทบจะไม่สามารถอยู่รอดได้นอกเหนือจากสถาปัตยกรรมระบบที่เขียนขึ้นโดยไม่มีการแก้ไขครั้งใหญ่ นี่คือ 'การแลกเปลี่ยน' ทางวิศวกรรมสำหรับ 'การลงโทษที่เป็นนามธรรม'

ความหมายสัมพัทธ์

ตัวอย่างของภาษาโปรแกรมระดับสูงที่ใช้งานอยู่ในปัจจุบัน ได้แก่Python , Visual Basic , Delphi , Perl , PHP , ECMAScript , Ruby , C # , Javaและอื่น ๆ อีกมากมาย

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

ภาษาแอสเซมบลีอาจถือได้ว่าเป็นระดับที่สูงกว่า (แต่มักจะยังคงเป็นหนึ่งต่อหนึ่งหากใช้โดยไม่มีมาโคร ) เป็นตัวแทนของรหัสเครื่องเนื่องจากสนับสนุนแนวคิดเช่นค่าคงที่และนิพจน์ (จำกัด ) บางครั้งแม้แต่ตัวแปรขั้นตอนและข้อมูล โครงสร้าง . ในทางกลับกันรหัสเครื่องจะอยู่ในระดับที่สูงกว่าไมโครโค้ดหรือการดำเนินการขนาดเล็กที่ใช้ภายในโปรเซสเซอร์หลายตัวโดยเนื้อแท้แล้ว [10]

โหมดการดำเนินการ

มีโหมดการทำงานทั่วไปสามโหมดสำหรับภาษาระดับสูงสมัยใหม่:

ตีความ เมื่อมีการตีความโค้ดที่เขียนด้วยภาษา ไวยากรณ์จะถูกอ่านและดำเนินการโดยตรงโดยไม่มีขั้นตอนการคอมไพล์ โปรแกรมที่เรียกว่า ล่ามอ่านคำสั่งแต่ละโปรแกรมดังต่อไปนี้การไหลของโปรแกรมแล้วตัดสินใจว่าจะทำอย่างไรและไม่ได้ ลูกผสมของล่ามและคอมไพเลอร์จะรวบรวมคำสั่งเป็นรหัสเครื่องและดำเนินการดังกล่าว จากนั้นรหัสเครื่องจะถูกทิ้งเพื่อตีความใหม่หากมีการเรียกใช้บรรทัดอีกครั้ง โดยทั่วไปแล้วล่ามเป็นการนำพฤติกรรมของภาษาไปใช้ที่ง่ายที่สุดเมื่อเทียบกับอีกสองรูปแบบที่ระบุไว้ที่นี่ เรียบเรียง เมื่อมีการคอมไพล์โค้ดที่เขียนด้วยภาษา ไวยากรณ์จะถูกแปลงเป็นรูปแบบปฏิบัติการก่อนที่จะรัน การคอมไพล์มีสองประเภท: การสร้างรหัสเครื่อง คอมไพเลอร์บางรวบรวมรหัสที่มาโดยตรงใน รหัสเครื่อง นี่คือโหมดดั้งเดิมของการคอมไพล์และภาษาที่เปลี่ยนเป็นรหัสของเครื่องโดยตรงและสมบูรณ์ด้วยวิธีนี้อาจเรียกว่า ภาษาที่คอมไพล์อย่างแท้จริง ดู ภาษาประกอบ การแสดงระดับกลาง เมื่อโค้ดที่เขียนด้วยภาษาถูกคอมไพล์ไปยังการ แสดงระดับกลางการแทนค่านั้นสามารถปรับให้เหมาะสมหรือบันทึกไว้เพื่อดำเนินการในภายหลังโดยไม่จำเป็นต้องอ่านซอร์สไฟล์ซ้ำ เมื่อการแสดงกลางจะถูกบันทึกไว้ก็อาจจะเป็นในรูปแบบเช่น bytecode จากนั้นการเป็นตัวแทนระดับกลางจะต้องถูกตีความหรือรวบรวมเพิ่มเติมเพื่อดำเนินการ เครื่องเสมือนที่เรียกใช้ bytecode โดยตรงหรือแปลงเพิ่มเติมเป็นรหัสเครื่องทำให้ความแตกต่างที่ชัดเจนครั้งหนึ่งระหว่างการแสดงระดับกลางและภาษาที่คอมไพล์อย่างแท้จริง แปลจากแหล่งที่มาหรือแปลงไฟล์ โค้ดที่เขียนด้วยภาษาอาจถูกแปลเป็นภาษาระดับล่างซึ่งคอมไพเลอร์โค้ดเนทีฟนั้นใช้กันทั่วไปอยู่แล้ว JavaScriptและภาษา Cเป็นเป้าหมายทั่วไปสำหรับนักแปลดังกล่าว ดู CoffeeScript , ไก่โครงการและ หอไอเฟลเป็นตัวอย่าง โดยเฉพาะรหัส C และ C ++ ที่สร้างขึ้นสามารถมองเห็นได้ (ซึ่งสร้างจากภาษา Eiffel เมื่อใช้ EiffelStudio IDE) ในไดเรกทอรี EIFGENs ของโครงการ Eiffel ที่คอมไพล์ ในหอไอเฟลที่ แปลกระบวนการจะเรียกว่าเป็น transcompiling หรือ transcompiled และคอมไพเลอร์ไอเฟลเป็น transcompiler หรือ คอมไพเลอร์ที่มาต่อแหล่งที่มา

โปรดทราบว่าภาษาไม่ใช่ภาษาที่ตีความอย่างเคร่งครัดหรือภาษาคอมไพล์ แต่การนำพฤติกรรมทางภาษาไปใช้จะใช้การตีความหรือการรวบรวม ตัวอย่างเช่นALGOL 60และFortranได้รับการตีความ (แม้ว่าจะมีการรวบรวมข้อมูลมากกว่าก็ตาม) ในทำนองเดียวกัน Java แสดงให้เห็นถึงความยากลำบากในการพยายามใช้ป้ายกำกับเหล่านี้กับภาษาแทนที่จะนำไปใช้งาน Java ถูกคอมไพล์เป็น bytecode ซึ่งจะถูกเรียกใช้งานโดยการตีความ (ในเครื่องเสมือน Java (JVM)) หรือการคอมไพล์ (โดยทั่วไปจะมีคอมไพเลอร์แบบทันเวลาเช่นHotSpotอีกครั้งใน JVM) ยิ่งไปกว่านั้นการคอมไพล์การแปลงคอมไพล์และการตีความไม่ได้ จำกัด เฉพาะคำอธิบายของสิ่งประดิษฐ์ของคอมไพเลอร์เท่านั้น

สถาปัตยกรรมคอมพิวเตอร์ภาษาระดับสูง

หรืออีกวิธีหนึ่งเป็นไปได้ที่คอมพิวเตอร์จะใช้ภาษาระดับสูงโดยตรง - คอมพิวเตอร์เรียกใช้รหัส HLL โดยตรง นี้เป็นที่รู้จักกันในระดับสูงสถาปัตยกรรมคอมพิวเตอร์ภาษา - The สถาปัตยกรรมคอมพิวเตอร์ตัวเองถูกออกแบบมาเพื่อกำหนดเป้าหมายโดยเฉพาะภาษาสูงระดับ โรห์ระบบขนาดใหญ่เป็นเครื่องเป้าหมายALGOL 60ยกตัวอย่างเช่น [11]

ดูสิ่งนี้ด้วย

  • Abstraction (วิทยาการคอมพิวเตอร์)
  • รายการภาษาโปรแกรมรุ่นใหม่
  • ภาษาโปรแกรมระดับต่ำ
  • แอสเซมเบลอร์ระดับสูง
  • ภาษาโปรแกรมระดับสูงมาก
  • รายการหมวดหมู่ของภาษาโปรแกรม

อ้างอิง

  1. ^ HThreads - อภิธานศัพท์ RD
  2. ^ ลอนดอนคี ธ (2511) "4, การเขียนโปรแกรม". ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์24 Russell Square London WC1: Faber and Faber Limited น. 184. ISBN 0571085938. ภาษาโปรแกรมระดับ 'สูง' มักเรียกว่ารหัสอัตโนมัติและโปรแกรมประมวลผลคอมไพเลอร์CS1 maint: ตำแหน่ง ( ลิงค์ )
  3. ^ ลอนดอนคี ธ (2511) "4, การเขียนโปรแกรม". ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์24 Russell Square London WC1: Faber and Faber Limited น. 186. ISBN 0571085938. ภาษาโปรแกรมระดับสูงสองภาษาซึ่งสามารถใช้เป็นตัวอย่างเพื่อแสดงโครงสร้างและวัตถุประสงค์ของรหัสอัตโนมัติ ได้แก่ ภาษาโคบอล (ภาษาเชิงธุรกิจทั่วไป) และภาษาฟอร์แทรน (การแปลแบบฟอร์ม)CS1 maint: ตำแหน่ง ( ลิงค์ )
  4. ^ Giloi โวล์ฟกังพ [ de ] (1997) "Plankalkülของ Konrad Zuse: The First High-Level" non von Neumann "Programming Language" IEEE Annals of the History of Computing, vol. 19 เลขที่ 2, หน้า 17–24 เมษายน - มิถุนายน 2540 (บทคัดย่อ)
  5. ^ แม้ว่าจะไม่มีแนวคิดเกี่ยวกับพารามิเตอร์อ้างอิงซึ่งอาจเป็นปัญหาได้ในบางสถานการณ์ ผู้สืบทอดหลายรายรวมถึง AlgolW , Algol68 , Simula , Pascal , Modulaและ Adaจึงรวมพารามิเตอร์อ้างอิง (ตระกูลภาษาซีที่เกี่ยวข้องแทนที่จะอนุญาตที่อยู่เป็นพารามิเตอร์ค่า )
  6. ^ สุรนาป. (2549). "Meta-รวบรวมภาษา Abstractions" (PDF)สืบค้นจากต้นฉบับ (PDF)เมื่อ 2015-02-17 . สืบค้นเมื่อ2008-03-17 .
  7. ^ Kuketayev. "ข้อมูลที่เป็นนามธรรมลงโทษ (DAP) เกณฑ์มาตรฐานสำหรับธุรกิจขนาดเล็กวัตถุใน Java" สืบค้นจากต้นฉบับเมื่อ 2009-01-11 . สืบค้นเมื่อ2008-03-17 .
  8. ^ Chatzigeorgiou; สเตฟานิเดส (2545). "การประเมินประสิทธิภาพและพลังของภาษาการเขียนโปรแกรมเชิงวัตถุเทียบกับขั้นตอน" ใน Blieberger; Strohmeier (eds.) ดำเนินการตามกฎหมาย - การประชุมครั้งที่ 7 ระหว่างประเทศเกี่ยวกับเทคโนโลยีซอฟต์แวร์ที่น่าเชื่อถือ - Ada-Europe'2002 สปริงเกอร์. น. 367.
  9. ^ มานูเอลคาร์โร; โจเซ่เอฟโมราเลส; เฮงค์แอล. มุลเลอร์; ช. ปวยบลา; M. Hermenegildo (2549). "ภาษาระดับสูงสำหรับอุปกรณ์ขนาดเล็ก: กรณีศึกษา" (PDF)ระบบการประชุมวิชาการนานาชาติ 2006 คอมไพเลอร์สถาปัตยกรรมและการสังเคราะห์สารสำหรับสมองกลฝังตัว ACM.
  10. ^ ไฮด์แรนดัล (2553). ศิลปะการประกอบภาษา (2nd ed.). ซานฟรานซิสโก: ไม่มีแป้งกด ISBN 9781593273019. OCLC  635507601
  11. ^ Chu, Yaohan (1975), "Concepts of High-Level Language Computer Architecture", High-Level Language Computer Architecture , Elsevier, pp.1–14 , doi : 10.1016 / b978-0-12-174150-1.50007-0 , ISBN 9780121741501

ลิงก์ภายนอก

  • http://c2.com/cgi/wiki?HighLevelLanguage - บทความของWikiWikiWebเกี่ยวกับภาษาโปรแกรมระดับสูง