ภาษาโปรแกรม
ภาษาโปรแกรม คือภาษาประดิษฐ์ชนิดหนึ่งที่ออกแบบขึ้นมาเพื่อสื่อสารชุดคำสั่งแก่เครื่องจักร โดยเฉพาะอย่างยิ่งคอมพิวเตอร์ ภาษาโปรแกรมสามารถใช้สร้างโปรแกรมที่ควบคุมพฤติกรรมของเครื่องจักร และ/หรือ แสดงออกด้วยขั้นตอนวิธี (algorithm) อย่างตรงไปตรงมา ผู้เขียนโปรแกรมซึ่งหมายถึงผู้ที่ใช้ภาษาโปรแกรมเรียกว่า โปรแกรมเมอร์ (programmer)
ภาษาโปรแกรมในยุคแรกเริ่มนั้นเกิดขึ้นก่อนที่คอมพิวเตอร์จะถูกประดิษฐ์ขึ้น โดยถูกใช้เพื่อควบคุมการทำงานของเครื่องทอผ้าของแจ็กการ์ดและเครื่องเล่นเปียโน ภาษาโปรแกรมต่าง ๆ หลายพันภาษาถูกสร้างขึ้นมา ส่วนมากใช้ในวงการคอมพิวเตอร์ และสำหรับวงการอื่นภาษาโปรแกรมก็เกิดขึ้นใหม่ทุก ๆ ปี ภาษาโปรแกรมส่วนใหญ่อธิบายการคิดคำนวณในรูปแบบเชิงคำสั่ง อาทิลำดับของคำสั่ง ถึงแม้ว่าบางภาษาจะใช้การอธิบายในรูปแบบอื่น ตัวอย่างเช่น ภาษาที่สนับสนุนการเขียนโปรแกรมเชิงฟังก์ชัน หรือการเขียนโปรแกรมเชิงตรรกะ
การพรรณนาถึงภาษาโปรแกรมหนึ่ง ๆ มักจะแบ่งออกเป็นสองส่วนได้แก่ วากยสัมพันธ์ (รูปแบบ) และอรรถศาสตร์ (ความหมาย) บางภาษาถูกนิยามขึ้นด้วยเอกสารข้อกำหนด (ตัวอย่างเช่น ภาษาซีเป็นภาษาหนึ่งที่กำหนดโดยมาตรฐานไอโซ) ในขณะที่ภาษาอื่นอย่างภาษาเพิร์ลรุ่น 5 และก่อนหน้านั้น ใช้การทำให้เกิดผลแบบอ้างอิง (reference implementation) เป็นลักษณะเด่น
คำจำกัดความ
ภาษาโปรแกรมเป็นสัญกรณ์อย่างหนึ่งสำหรับการเขียนโปรแกรม ซึ่งมีข้อกำหนดต่าง ๆ เกี่ยวกับการคิดคำนวณหรือขั้นตอนวิธี [1] ผู้แต่งตำราบางคน (ไม่ใช่ทั้งหมด) ได้ให้คำจำกัดความของ "ภาษาโปรแกรม" อย่างเข้มงวดว่า หมายถึงภาษาที่สามารถแสดงออกด้วยขั้นตอนวิธีที่เป็นไปได้ทั้งหมด [1][2] คุณลักษณะมักเป็นปัจจัยพิจารณาที่สำคัญสำหรับคำถามว่า อะไรที่ถือว่าเป็นภาษาโปรแกรม รวมทั้งปัจจัยต่อไปนี้
- การทำงานและเป้าหมาย ภาษาโปรแกรมคอมพิวเตอร์ คือภาษาชนิดหนึ่ง [3] ที่ใช้สำหรับเขียนโปรแกรมคอมพิวเตอร์ ซึ่งเกี่ยวข้องกับคอมพิวเตอร์ที่กระทำการคิดคำนวณหรือขั้นตอนวิธีบางอย่าง [4] และควบคุมอุปกรณ์ภายนอกที่เป็นไปได้อาทิ เครื่องพิมพ์ เครื่องขับจานบันทึก หุ่นยนต์ [5] และอื่น ๆ ตัวอย่างเช่น โปรแกรมโพสต์สคริปต์ มักถูกสร้างโดยโปรแกรมอื่นเพื่อควบคุมเครื่องพิมพ์หรือจอภาพ ภาษาโปรแกรมโดยนัยทั่วไปมากขึ้น อาจใช้พรรณนาการคิดคำนวณบนเครื่องจักรบางชนิด ซึ่งอาจเป็นเครื่องจักรนามธรรมก็ได้ เป็นที่ยอมรับกันโดยทั่วไปว่า ข้อกำหนดภาษาโปรแกรมที่สมบูรณ์ จะต้องมีการพรรณนาลักษณะเครื่องจักรหรือหน่วยประมวลผลสำหรับภาษานั้น ซึ่งอาจเป็นการพรรณนาในอุดมคติก็ได้ [6] ในทางปฏิบัติเป็นส่วนใหญ่ ภาษาโปรแกรมเกี่ยวข้องกับคอมพิวเตอร์ จึงทำให้ภาษาโปรแกรมต่าง ๆ โดยปกติถูกกำหนดและศึกษาในแนวทางนี้ [7] ภาษาโปรแกรมต่างจากภาษาธรรมชาติตรงที่ ภาษาธรรมชาติใช้แสดงปฏิสัมพันธ์ระหว่างมนุษย์ด้วยกันเพียงเท่านั้น ในขณะที่ภาษาโปรแกรมทำให้มนุษย์สื่อสารชุดคำสั่งแก่เครื่องจักรได้อีกด้วย
- แนวคิดนามธรรม ภาษาโปรแกรมโดยปกติจะมีภาวะนามธรรม สำหรับนิยามและจัดดำเนินการโครงสร้างข้อมูล หรือควบคุมกระแสการทำงาน ความจำเป็นในทางปฏิบัติที่ภาษาโปรแกรมสนับสนุนภาวะนามธรรมอย่างเพียงพอ แสดงออกมาด้วยหลักการที่เป็นนามธรรม [8] หลักการนี้บางครั้งก็คิดค้นขึ้นเพื่อเป็นข้อเสนอแนะให้โปรแกรมเมอร์สามารถใช้ภาวะนามธรรมเช่นนั้นได้อย่างถูกต้อง [9]
- พลังในการแสดงออก ทฤษฎีการคำนวณแบ่งประเภทภาษาต่าง ๆ ตามการคิดคำนวณโดยความสามารถในการแสดงออก ภาษาทัวริงบริบูรณ์ทุกภาษาสามารถทำให้เกิดผลได้ด้วยเซตของขั้นตอนวิธีที่เหมือนกัน ภาษาเอสคิวแอลและภาษาแชริตีเป็นตัวอย่างของภาษาที่ไม่เป็นทัวริงบริบูรณ์ แต่ก็ยังเรียกว่าเป็นภาษาโปรแกรม [10][11]
ภาษามาร์กอัปอย่างเช่น เอกซ์เอ็มแอล เอชทีเอ็มแอล หรือทร็อฟฟ์ เป็นต้น ซึ่งถูกนิยามว่าเป็นข้อมูลเชิงโครงสร้าง โดยทั่วไปไม่ถือว่าเป็นภาษาโปรแกรม [12][13][14] อย่างไรก็ตาม ภาษาโปรแกรมอาจจะใช้วากยสัมพันธ์เหมือนภาษามาร์กอัป ถ้าอรรถศาสตร์เชิงคำนวณมีการนิยามไว้ ตัวอย่างเช่น เอกซ์เอสแอลที ซึ่งเป็นภาษาย่อยของเอกซ์เอ็มแอลที่เป็นทัวริงบริบูรณ์ [15][16][17] ยิ่งไปกว่านั้น ภาษาลาเทกซ์ซึ่งตามปกติใช้สำหรับสร้างโครงสร้างเอกสาร แต่ก็มีเซตย่อยของทัวริงบริบูรณ์อยู่ด้วย [18][19]
วลี ภาษาคอมพิวเตอร์ บางครั้งก็ใช้แทนความหมายของภาษาโปรแกรม [20] อย่างไรก็ตาม ผู้แต่งตำราแต่ละคนก็ใช้วลีทั้งสองรวมถึงขอบเขตที่ชัดเจนในแนวทางที่ต่างกัน แนวคิดหนึ่งอธิบายว่า ภาษาโปรแกรมเป็นเซตย่อยของภาษาคอมพิวเตอร์ [21] ในทำนองนี้ ภาษาที่ใช้ในการคิดคำนวณอันมีเป้าหมายต่างกัน ที่แสดงออกเป็นโปรแกรมคอมพิวเตอร์ โดยนัยทั่วไปคือภาษาคอมพิวเตอร์ที่ถูกเลือกขึ้นมา ยกตัวอย่างเช่น ภาษามาร์กอัปบางครั้งก็ถูกพูดถึงว่าเป็นภาษาคอมพิวเตอร์ เพื่อเน้นย้ำว่ามันไม่ได้ออกแบบมาเพื่อเขียนโปรแกรม [22] แนวคิดอีกอย่างหนึ่งอธิบายว่า ภาษาโปรแกรมคือโครงสร้างเชิงทฤษฎีสำหรับการเขียนโปรแกรมให้แก่เครื่องจักรนามธรรม และภาษาคอมพิวเตอร์คือเซตย่อยของสิ่งดังกล่าวที่ทำงานบนคอมพิวเตอร์ในทางกายภาพ ซึ่งมีทรัพยากรฮาร์ดแวร์จำกัด [23] จอห์น ซี. เรย์โนลด์ เน้นว่า ภาษาข้อกำหนดรูปนัย (formal specification) มีลักษณะของภาษาโปรแกรมมากพอ ๆ กับภาษาที่ตั้งใจให้กระทำการ เขายังให้เหตุผลด้วยว่า รูปแบบรับเข้าเชิงข้อความหรือแม้แต่เชิงกราฟิกที่ส่งผลต่อพฤติกรรมของคอมพิวเตอร์ ก็ถือเป็นภาษาโปรแกรมเช่นกัน ถึงแม้ข้อเท็จจริงคือสิ่งเหล่านั้นไม่ใช่ทัวริงบริบูรณ์ และให้ความเห็นอีกว่า การมองข้ามมโนทัศน์ของภาษาโปรแกรมคือสาเหตุของความบกพร่องมากมายในรูปแบบรับเข้า [24]
ลักษณะของภาษาโปรแกรม
ภาษาโปรแกรมแต่ละภาษาสามารถพิจารณาว่าเป็นเซตของข้อกำหนดอย่างเป็นทางการของวากยสัมพันธ์ ศัพท์ และความหมาย
ข้อกำหนดเหล่านี้มักรวมถึง:
- ข้อมูล และโครงสร้างข้อมูล
- คำสั่ง และลำดับการทำงาน
- ปรัชญาในการออกแบบ
- สถาปัตยกรรมของภาษา
ภาษาส่วนใหญ่ที่มีการใช้งานอย่างกว้างขวาง หรือมีการใช้งานในระยะเวลาพอสมควร จะมีกลุ่มทำงานเพื่อสร้างมาตรฐาน ซึ่งมักจะมีการพบปะกันเป็นระยะๆ เพื่อสร้างและจัดพิมพ์นิยามอย่างเป็นทางการของภาษา รวมถึงการปรับปรุงเพิ่มเติมภาษาด้วย
ชนิดข้อมูล
การจัดเก็บข้อมูลภายในคอมพิวเตอร์สมัยใหม่นั้น ภายในแล้วจะเก็บเป็นตัวเลขศูนย์และหนึ่ง (เลขฐานสอง) อย่างไรก็ตาม ข้อมูลมักถูกแทนสารสนเทศในชีวิตประจำวันเช่น ชื่อบุคคล เลขบัญชี หรือผลการวัด ดังนั้นข้อมูลแบบฐานสองจะถูกจัดการโดยภาษาโปรแกรม เพื่อทำให้รองรับการจัดเก็บข้อมูลที่ซับซ้อนขึ้นเหล่านี้
ระบบที่ข้อมูลถูกจัดการภายในโปรแกรมเรียกว่าชนิดข้อมูลของภาษาโปรแกรม การออกแบบและศึกษาเกี่ยวกับชนิดข้อมูลเรียกว่าทฤษฎีชนิด ภาษาโปรแกรมสามารถจัดออกได้เป็นกลุ่มภาษาที่มี การจัดชนิดแบบสถิตย์ และภาษาที่มี การจัดชนิดแบบพลวัต
โครงสร้างข้อมูล
โครงสร้างข้อมูล คือรูปแบบของการจัดเก็บข้อมูล ที่เกิดจากการนำเอาตัวแปรประเภทต่าง ๆ กันมาประยุกต์รวมกันเพื่อให้ง่ายต่อการที่จะนำไปใช้ ในalgorithm ต่าง ๆ
ภาษาโปรแกรมที่นิยม
- ภาษาเครื่อง (Machine Languages)
- ภาษาแอสเซมบลี (Assembly)
- ภาษาระดับสูง (High-level Languages)
- ภาษาซี (C)
- ภาษาซีพลัสพลัส (C++)
- ภาษาซีชาร์ป (C#)
- ภาษาโคบอล (COBOL)
- ภาษาปาสกาล (Pascal)
- ภาษาเบสิก (BASIC)
- ภาษาฟอร์แทรน (FORTRAN)
- ภาษาจาวา (Java)
- ภาษาจาวาสคริปต์ (JavaScript)
- ภาษาเพิร์ล (Perl)
- ภาษาพีเอชพี (PHP)
- ภาษาไพทอน (Python)
- ภาษาโปรล็อก (Prolog)
- ภาษาอ็อบเจกทีฟ-ซี (Objective-C)
- ภาษารูบี้ (Ruby)