ผลต่างระหว่างรุ่นของ "ภาษาโปรแกรม"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Potapt (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
แทนที่เนื้อหาด้วย "<br /> หมวดหมู่:สัญกรณ์"
บรรทัด 1:
<br />
'''ภาษาโปรแกรม''' คือ[[ภาษาประดิษฐ์]]ชนิดหนึ่งที่ออกแบบขึ้นมาเพื่อสื่อสาร[[ชุดคำสั่ง]]แก่[[เครื่องจักร]] โดยเฉพาะอย่างยิ่ง[[คอมพิวเตอร์]] ภาษาโปรแกรมสามารถใช้สร้าง[[โปรแกรม]]ที่ควบคุมพฤติกรรมของเครื่องจักร และ/หรือ แสดงออกด้วย[[ขั้นตอนวิธี]] (algorithm) อย่างตรงไปตรงมา ผู้เขียนโปรแกรมซึ่งหมายถึงผู้ที่ใช้ภาษาโปรแกรมเรียกว่า [[โปรแกรมเมอร์]] (programmer)
 
ภาษาโปรแกรมในยุคแรกเริ่มนั้นเกิดขึ้นก่อนที่คอมพิวเตอร์จะถูกประดิษฐ์ขึ้น โดยถูกใช้เพื่อควบคุมการทำงานของ[[เครื่องทอผ้าของแจ็กการ์ด]]และ[[เครื่องเล่นเปียโน]] ภาษาโปรแกรมต่าง ๆ หลายพันภาษาถูกสร้างขึ้นมา ส่วนมากใช้ในวงการคอมพิวเตอร์ และสำหรับวงการอื่นภาษาโปรแกรมก็เกิดขึ้นใหม่ทุก ๆ ปี ภาษาโปรแกรมส่วนใหญ่อธิบายการคิดคำนวณในรูปแบบเชิงคำสั่ง อาทิลำดับของคำสั่ง ถึงแม้ว่าบางภาษาจะใช้การอธิบายในรูปแบบอื่น ตัวอย่างเช่น ภาษาที่สนับสนุนการเขียนโปรแกรมเชิงฟังก์ชัน หรือการเขียนโปรแกรมเชิงตรรกะ
 
การพรรณนาถึงภาษาโปรแกรมหนึ่ง ๆ มักจะแบ่งออกเป็นสองส่วนได้แก่ [[วากยสัมพันธ์ (ภาษาโปรแกรม)|วากยสัมพันธ์]] (รูปแบบ) และ[[อรรถศาสตร์]] (ความหมาย) บางภาษาถูกนิยามขึ้นด้วยเอกสารข้อกำหนด (ตัวอย่างเช่น [[ภาษาซี]]เป็นภาษาหนึ่งที่กำหนดโดยมาตรฐาน[[ไอโซ]]) ในขณะที่ภาษาอื่นอย่าง[[ภาษาเพิร์ล]]รุ่น 5 และก่อนหน้านั้น ใช้[[การทำให้เกิดผลแบบอ้างอิง]] (reference implementation) เป็นลักษณะเด่น
 
== คำจำกัดความ ==
ภาษาโปรแกรมเป็นสัญกรณ์อย่างหนึ่งสำหรับการเขียนโปรแกรม ซึ่งมีข้อกำหนดต่าง ๆ เกี่ยวกับการคิดคำนวณหรือขั้นตอนวิธี <ref name="Aaby 2004">{{cite book|last=Aaby|first=Anthony|title=Introduction to Programming Languages|year=2004|url=http://burks.brighton.ac.uk/burks/pcinfo/progdocs/plbook/index.htm}}</ref> ผู้แต่งตำราบางคน (ไม่ใช่ทั้งหมด) ได้ให้คำจำกัดความของ "ภาษาโปรแกรม" อย่างเข้มงวดว่า หมายถึงภาษาที่สามารถแสดงออกด้วยขั้นตอนวิธีที่เป็นไปได้''ทั้งหมด'' <ref name="Aaby 2004"/><ref>ในมโนทัศน์แบบคณิตศาสตร์ สิ่งนี้หมายความว่า ภาษาโปรแกรมคือ[[ทัวริงบริบูรณ์]] {{cite book | last=MacLennan | first=Bruce J. | title=Principles of Programming Languages | page=1 | publisher=Oxford University Press | year=1987 | isbn=0-19-511306-3 }}</ref> คุณลักษณะมักเป็นปัจจัยพิจารณาที่สำคัญสำหรับคำถามว่า อะไรที่ถือว่าเป็นภาษาโปรแกรม รวมทั้งปัจจัยต่อไปนี้
* '''การทำงานและเป้าหมาย''' ''ภาษาโปรแกรมคอมพิวเตอร์'' คือภาษาชนิดหนึ่ง <ref name="Fischer">Steven R. Fischer, ''A history of language'', Reaktion Books, 2003, ISBN 186189080X, p. 205</ref> ที่ใช้สำหรับเขียน[[โปรแกรมคอมพิวเตอร์]] ซึ่งเกี่ยวข้องกับคอมพิวเตอร์ที่กระทำการคิดคำนวณหรือขั้นตอนวิธีบางอย่าง <ref name=sigplan>{{cite web|author=[[Association for Computing Machinery|ACM]] SIGPLAN|title=Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery|url=http://www.acm.org/sigs/sigplan/sigplan_bylaws.htm|accessdate=2006-06-19|year=2003}}, ''The scope of SIGPLAN is the theory, design, implementation, description, and application of computer programming languages - languages that permit the specification of a variety of different computations, thereby providing the user with significant control (immediate or delayed) over the computer's operation.''</ref> และควบคุมอุปกรณ์ภายนอกที่เป็นไปได้อาทิ [[เครื่องพิมพ์]] [[เครื่องขับจานบันทึก]] [[หุ่นยนต์]] <ref name="robots">{{cite web|url=http://www.cs.brown.edu/people/tld/courses/cs148/02/programming.html |title=Programming Robots |accessdate=2006-09-23 |last=Dean |first=Tom |date= |year=2002 |work=Building Intelligent Robots |publisher=Brown University Department of Computer Science}}</ref> และอื่น ๆ ตัวอย่างเช่น โปรแกรม[[โพสต์สคริปต์]] มักถูกสร้างโดยโปรแกรมอื่นเพื่อควบคุมเครื่องพิมพ์หรือจอภาพ ภาษาโปรแกรมโดยนัยทั่วไปมากขึ้น อาจใช้พรรณนาการคิดคำนวณบนเครื่องจักรบางชนิด ซึ่งอาจเป็นเครื่องจักรนามธรรมก็ได้ เป็นที่ยอมรับกันโดยทั่วไปว่า ข้อกำหนดภาษาโปรแกรมที่สมบูรณ์ จะต้องมีการพรรณนาลักษณะเครื่องจักรหรือหน่วยประมวลผลสำหรับภาษานั้น ซึ่งอาจเป็นการพรรณนาในอุดมคติก็ได้ <ref name=nara2>R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN 012012108, p.193 : "a complete specification of a programming language must, by definition, include a specification of a processor--idealized, if you will--for that language." [แหล่งข้อมูลนี้มีการอ้างอิงจากแหล่งอื่นที่รับรองข้อความดังกล่าว]</ref> ในทางปฏิบัติเป็นส่วนใหญ่ ภาษาโปรแกรมเกี่ยวข้องกับคอมพิวเตอร์ จึงทำให้ภาษาโปรแกรมต่าง ๆ โดยปกติถูกกำหนดและศึกษาในแนวทางนี้ <ref>{{cite book|last=Ben Ari|first=Mordechai|title=Understanding Programming Languages|publisher=John Wiley and Sons| year=1996|quote=Programs and languages can be defined as purely formal mathematical objects. However, more people are interested in programs than in other mathematical objects such as groups, precisely because it is possible to use the program—the sequence of symbols—to control the execution of a computer. While we highly recommend the study of the theory of programming, this text will generally limit itself to the study of programs as they are executed on a computer.}}</ref> ภาษาโปรแกรมต่างจาก[[ภาษาธรรมชาติ]]ตรงที่ ภาษาธรรมชาติใช้แสดงปฏิสัมพันธ์ระหว่างมนุษย์ด้วยกันเพียงเท่านั้น ในขณะที่ภาษาโปรแกรมทำให้มนุษย์สื่อสารชุดคำสั่งแก่เครื่องจักรได้อีกด้วย
* '''แนวคิดนามธรรม''' ภาษาโปรแกรมโดยปกติจะมี[[ภาวะนามธรรม (วิทยาการคอมพิวเตอร์)|ภาวะนามธรรม]] สำหรับนิยามและจัดดำเนินการ[[โครงสร้างข้อมูล]] หรือควบคุมกระแสการทำงาน ความจำเป็นในทางปฏิบัติที่ภาษาโปรแกรมสนับสนุนภาวะนามธรรมอย่างเพียงพอ แสดงออกมาด้วยหลักการที่เป็นนามธรรม <ref>David A. Schmidt, ''The structure of typed programming languages'', MIT Press, 1994, ISBN 0262193493, p. 32</ref> หลักการนี้บางครั้งก็คิดค้นขึ้นเพื่อเป็นข้อเสนอแนะให้โปรแกรมเมอร์สามารถใช้ภาวะนามธรรมเช่นนั้นได้อย่างถูกต้อง <ref>{{cite book|last=Pierce|first=Benjamin|title=Types and Programming Languages|publisher=MIT Press|year=2002|isbn=0-262-16209-1|page=339}}</ref>
* '''พลังในการแสดงออก''' [[ทฤษฎีการคำนวณ]]แบ่งประเภทภาษาต่าง ๆ ตามการคิดคำนวณโดยความสามารถในการแสดงออก ภาษา[[ทัวริงบริบูรณ์]]ทุกภาษาสามารถทำให้เกิดผลได้ด้วยเซตของขั้นตอนวิธีที่เหมือนกัน [[ภาษาเอสคิวแอล]]และ[[ภาษาแชริตี]]เป็นตัวอย่างของภาษาที่ไม่เป็นทัวริงบริบูรณ์ แต่ก็ยังเรียกว่าเป็นภาษาโปรแกรม <ref>{{cite web | author=Digital Equipment Corporation | title=Information Technology - Database Language SQL (Proposed revised text of DIS 9075) | url=http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt | work=ISO/IEC 9075:1992, Database Language SQL | accessdate=June 29, 2006}}</ref><ref>{{cite web|author=The Charity Development Group|title=The CHARITY Home Page | url=http://pll.cpsc.ucalgary.ca/charity1/www/home.html | month=December|year=1996|accessdate=2006-06-29}}, ''Charity is a categorical programming language...'', ''All Charity computations terminate.''</ref>
 
[[ภาษามาร์กอัป]]อย่างเช่น [[เอกซ์เอ็มแอล]] [[เอชทีเอ็มแอล]] หรือ[[ทร็อฟฟ์]] เป็นต้น ซึ่งถูกนิยามว่าเป็น[[ข้อมูลเชิงโครงสร้าง]] โดยทั่วไปไม่ถือว่าเป็นภาษาโปรแกรม <ref>[http://www.w3.org/XML/1999/XML-in-10-points.html XML in 10 points] [[W3C]], 1999, ''XML is not a programming language.''</ref><ref>{{cite book|last=Powell|first=Thomas|title=HTML & XHTML: the complete reference|publisher=McGraw-Hill|year=2003|isbn=0-07-222-942-X|page=25|quote=''HTML is not a programming language.''}}</ref><ref>{{cite book|last1=Dykes|first1=Lucinda|first2=Ed|last2=Tittel|title=XML For Dummies, 4th Edition|publisher=Wiley|year=2005|isbn=0-7645-8845-1|page=20|quote=''...it's a markup language, not a programming language.''}}</ref> อย่างไรก็ตาม ภาษาโปรแกรมอาจจะใช้วากยสัมพันธ์เหมือนภาษามาร์กอัป ถ้าอรรถศาสตร์เชิงคำนวณมีการนิยามไว้ ตัวอย่างเช่น [[เอกซ์เอสแอลที]] ซึ่งเป็นภาษาย่อยของเอกซ์เอ็มแอลที่เป็นทัวริงบริบูรณ์ <ref>{{cite web|url=http://www.ibm.com/developerworks/library/x-xslt/ |title=What kind of language is XSLT? |publisher=Ibm.com |date= |accessdate=2010-12-03}}</ref><ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx |title=XSLT is a Programming Language |publisher=Msdn.microsoft.com |date= |accessdate=2010-12-03}}</ref><ref>{{cite book|last=Scott|first=Michael|title=Programming Language Pragmatics|publisher=[[Morgan Kaufmann]]|year=2006|isbn=0-12-633951-1|page=802|quote=''XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.''}}</ref> ยิ่งไปกว่านั้น [[ภาษาลาเทกซ์]]ซึ่งตามปกติใช้สำหรับสร้างโครงสร้างเอกสาร แต่ก็มีเซตย่อยของทัวริงบริบูรณ์อยู่ด้วย <ref>http://tobi.oetiker.ch/lshort/lshort.pdf</ref><ref>{{cite book|last=Syropoulos|first=Apostolos|coauthors=Antonis Tsolomitis, Nick Sofroniou|title=Digital typography using LaTeX|publisher=Springer-Verlag|year = 2003|isbn=0-387-95217-9|page=213|quote=''TeX is not only an excellent typesetting engine but also a real programming language.''}}</ref>
 
วลี ''ภาษาคอมพิวเตอร์'' บางครั้งก็ใช้แทนความหมายของภาษาโปรแกรม <ref>Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91</ref> อย่างไรก็ตาม ผู้แต่งตำราแต่ละคนก็ใช้วลีทั้งสองรวมถึงขอบเขตที่ชัดเจนในแนวทางที่ต่างกัน แนวคิดหนึ่งอธิบายว่า ภาษาโปรแกรมเป็นเซตย่อยของภาษาคอมพิวเตอร์ <ref>Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, ''[http://www.loa-cnr.it/ICSOFT2007_final.pdf Towards a General Ontology of Computer Programs]'', [http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html ICSOFT 2007], pp. 163-170</ref> ในทำนองนี้ ภาษาที่ใช้ในการคิดคำนวณอันมีเป้าหมายต่างกัน ที่แสดงออกเป็นโปรแกรมคอมพิวเตอร์ โดยนัยทั่วไปคือภาษาคอมพิวเตอร์ที่ถูกเลือกขึ้นมา ยกตัวอย่างเช่น ภาษามาร์กอัปบางครั้งก็ถูกพูดถึงว่าเป็นภาษาคอมพิวเตอร์ เพื่อเน้นย้ำว่ามันไม่ได้ออกแบบมาเพื่อเขียนโปรแกรม <ref>S.K. Bajpai, ''Introduction To Computers And C Programming'', New Age International, 2007, ISBN 812241379X, p. 346</ref> แนวคิดอีกอย่างหนึ่งอธิบายว่า ภาษาโปรแกรมคือโครงสร้างเชิงทฤษฎีสำหรับการเขียนโปรแกรมให้แก่เครื่องจักรนามธรรม และภาษาคอมพิวเตอร์คือเซตย่อยของสิ่งดังกล่าวที่ทำงานบนคอมพิวเตอร์ในทางกายภาพ ซึ่งมีทรัพยากรฮาร์ดแวร์จำกัด <ref>R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN 012012108, p.215: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many names--or registers--which can assume only finitely many values--or states--and these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."</ref> [[จอห์น ซี. เรย์โนลด์]] เน้นว่า ภาษา[[ข้อกำหนดรูปนัย]] (formal specification) มีลักษณะของภาษาโปรแกรมมากพอ ๆ กับภาษาที่ตั้งใจให้กระทำการ เขายังให้เหตุผลด้วยว่า รูปแบบรับเข้าเชิงข้อความหรือแม้แต่เชิงกราฟิกที่ส่งผลต่อพฤติกรรมของคอมพิวเตอร์ ก็ถือเป็นภาษาโปรแกรมเช่นกัน ถึงแม้ข้อเท็จจริงคือสิ่งเหล่านั้นไม่ใช่ทัวริงบริบูรณ์ และให้ความเห็นอีกว่า การมองข้าม[[มโนทัศน์]]ของภาษาโปรแกรมคือสาเหตุของความบกพร่องมากมายในรูปแบบรับเข้า <ref>John C. Reynolds, ''Some thoughts on teaching programming and programming languages'', [[SIGPLAN]] Notices, Volume 43, Issue 11, November 2008, p.109</ref>
 
== ลักษณะของภาษาโปรแกรม ==
ภาษาโปรแกรมแต่ละภาษาสามารถพิจารณาว่าเป็นเซตของข้อกำหนดอย่างเป็นทางการของ[[วากยสัมพันธ์ (ภาษาโปรแกรม)|วากยสัมพันธ์]] [[ศัพท์]] และ[[ความหมาย]]
 
ข้อกำหนดเหล่านี้มักรวมถึง:
* ข้อมูล และ[[โครงสร้างข้อมูล]]
* คำสั่ง และลำดับการทำงาน
* ปรัชญาในการออกแบบ
* สถาปัตยกรรมของภาษา
 
ภาษาส่วนใหญ่ที่มีการใช้งานอย่างกว้างขวาง หรือมีการใช้งานในระยะเวลาพอสมควร จะมีกลุ่มทำงานเพื่อสร้างมาตรฐาน ซึ่งมักจะมีการพบปะกันเป็นระยะๆ เพื่อสร้างและจัดพิมพ์นิยามอย่างเป็นทางการของภาษา รวมถึงการปรับปรุงเพิ่มเติมภาษาด้วย
 
=== ชนิดข้อมูล ===
การจัดเก็บข้อมูลภายในคอมพิวเตอร์สมัยใหม่นั้น ภายในแล้วจะเก็บเป็นตัวเลขศูนย์และหนึ่ง ([[เลขฐานสอง]]) อย่างไรก็ตาม ข้อมูลมักถูกแทนสารสนเทศในชีวิตประจำวันเช่น ชื่อบุคคล เลขบัญชี หรือผลการวัด ดังนั้นข้อมูลแบบฐานสองจะถูกจัดการโดยภาษาโปรแกรม เพื่อทำให้รองรับการจัดเก็บข้อมูลที่ซับซ้อนขึ้นเหล่านี้
 
ระบบที่ข้อมูลถูกจัดการภายในโปรแกรมเรียกว่า[[ชนิดข้อมูล]]ของภาษาโปรแกรม การออกแบบและศึกษาเกี่ยวกับชนิดข้อมูลเรียกว่า[[ทฤษฎีชนิด]] ภาษาโปรแกรมสามารถจัดออกได้เป็นกลุ่มภาษาที่มี ''[[การจัดชนิดแบบสถิตย์]]'' และภาษาที่มี ''[[การจัดชนิดแบบพลวัต]]''
 
=== โครงสร้างข้อมูล ===
 
โครงสร้างข้อมูล คือรูปแบบของการจัดเก็บข้อมูล ที่เกิดจากการนำเอาตัวแปรประเภทต่าง ๆ กันมาประยุกต์รวมกันเพื่อให้ง่ายต่อการที่จะนำไปใช้ ในalgorithm ต่าง ๆ
 
== ภาษาโปรแกรมที่นิยม ==
* [[ภาษาเครื่อง]] (Machine Languages)
* [[ภาษาแอสเซมบลี]] (Assembly)
* [[ภาษาระดับสูง]] (High-level Languages)
** [[ภาษาซี]] (C)
** [[ภาษาซีพลัสพลัส]] (C++)
** [[ภาษาซีชาร์ป]] (C#)
** [[ภาษาโคบอล]] (COBOL)
** [[ภาษาปาสกาล]] (Pascal)
** [[ภาษาเบสิก]] (BASIC)
** [[ภาษาฟอร์แทรน]] (FORTRAN)
** [[ภาษาจาวา]] (Java)
** [[ภาษาจาวาสคริปต์]] (JavaScript)
** [[ภาษาเพิร์ล]] (Perl)
** [[ภาษาพีเอชพี]] (PHP)
** [[ภาษาไพทอน]] (Python)
** [[ภาษาโปรล็อก]] (Prolog)
** [[ภาษาอ็อบเจกทีฟ-ซี]] (Objective-C)
** [[ภาษารูบี้]] (Ruby)
 
== อ้างอิง ==
{{รายการอ้างอิง}}
 
{{ภาษาโปรแกรมที่สำคัญ}}
 
[[หมวดหมู่:ภาษาโปรแกรม| ]]