Wikang pamprograma

pormal na wikang ginagamit para makapagsulat ng mga programa
(Idinirekta mula sa Wikang pangkompyuter)

Ang wikang pamprograma (Ingles: programming language) ay isang pormal na wikang naglalaman ng mga tagubilin (instructions) na kayang magpalabas ng samu't saring output. Ginagamit ang mga wikang pamprograma sa pagpoprograma sa kompyuter para magsagawa ng mga algoritmo.

Isang larawan na nagpapakita sa programang 'Hello World' na nakasulat sa wikang pamprogramang C.
Isang halimbawa ng programang 'Hello World' na isinulat sa wikang C. na may mga komento sa wikang Ingles. Kapag ito ay kinompayl at pinatakbo, lalabas sa iskrin ang "Hello, world!"

Naglalaman ang karamihan sa mga wikang pamprograma ng mga tagubilin para sa mga kompyuter. May mga makinang napoprograma na gumagamit ng mga tiyak na tagubilin imbes na wikang pamprogramang panlahatan (general-purpose programming languages). Mas nauna sa mga kompyuter ang mga sinaunang halimbawa nito, kung saan ang maaaring pinakauna sa mga ito ay ang awtomatikong tagatugtog ng plawta na inilarawan sa ika-9 ng siglo ng magkapatid na Musa sa Baghdad, sa kasagsagan ng Ginintuang Panahon ng Islam.[1] Simula noong unang bahagi ng dantaong 1800s, ginamit ang mga programa para manduhan ang ugali ng mga makinang tulad ng makina ni Jacquard, kahong tumutugtog (music box), at mga tumutugtog na piyano.[2] Di gumagawa ang mga programang ginamit sa mga naturang makina ng iba pang ugali, bilang tugon sa mga iba't ibang pinapasok (input) at nilalabas (output), bukod sa nakasaad na tagubilin.

Libo-libo na ang nagawang mga wikang pamprograma, at patuloy itong nadadagdagan kada taon. Isinusulat ang maraming wika sa anyong pautos (mga tagubiling kailangang gawin), habang ang ilan naman ay isinulat sa anyong paturol (binigay ang kailangang maging resulta, hindi kung paano ito dapat gawin),

Madalas hinahati sa dalawa ang paglalarawan para sa mga wikang pamprograma: ang sintaksis (anyo) at ang semantika (kahulugan) nito. May mga dokumentong nagpapaliwanag sa ilang mga wika (madalas tinatawag sa Ingles bilang specification document), tulad ng C na pinapaliwanag ng pamantayang ISO, habang ginagamit naman ng ilan, tulad ng Perl, ang ginagamit madalas ng karamihan at tinatanggap bilang sanggunian nito. May mga ilan ding gumagamit ng parehong paraan - may isang dokumentong naglalarawan sa wika, at galing naman sa napagkasunduan ng nakakarami ang mga karugtong (extensions) nito.

Kahulugan baguhin

Isang notasyon ang mga wikang pamprograma para makapagsulat ng mga programa sa kompyuter.[3] May mga ilang naghihigpit sa terminong "wikang pamprograma" sa mga wikang kayang gawin ang lahat ng mga posibleng algoritmo.[3][4] Importante ang katangian ng mga ito para masabi kung ano wikang pamprograma sa mga wikang hindi, tulad ng:

Gamit (Function) at Layon (Target)

Isang wikang ginagamit para makapagsulat ng mga programa sa kompyuter ang wikang pamprograma. Nangangahulugan nito na dapat nagsasagawa ang kompyuter ng mga pagkokompyut[5] o algoritmo at maaaring nakakapagkontrol ng mga panlabas na device tulad ng mga printer, disk drive, robot, at iba pa.[6] Halimbawa, ginagawa kalimitan ng ibang programa ang mga programang ginawa sa wikang PostScript para makontrol ang isang printer o device na pan-display. Sa pangkalahatan, maaaring ilarawan ng mga wikang pamprograma ang kakalkulahin sa isang, posibleng basal (abstract) na, makina. Tinatanggap kadalasan na dapat maglaman ang isang kumpletong pagdedetalye sa isang wikang pamprograma ng isang paglalarawan sa isang (maaaring napakaperpekto, o idealized) makina o tagaprosesong (processor) para sa wikang iyon.[7] Sa praktikal na pananaw, kadalasang sinasama sa usapan patungkol sa mga wikang pamprograma ang kompyuter, kaya naman madalas pinag-aaralan at binibigyang-kahulugan sa makinang ito ang mga wikang pamprograma.[8] Iba ang mga natural na wika sa mga wikang pamprograma: ginagamit lamang kasi ang mga natural na wika para sa komunikasyon nang tao sa tao, habang ginagamit naman ang mga wikang pamprograma para sa komunikasyon sa pagitan ng tao sa makina sa pamamagitan ng mga tagubilin.

Kabasalan (Abstraction)

Madalas naglalaman ang mga wikang pamprograma ng mga kabasalan (abstraction) para bigyang kahulugan at manipulahin ang mga istraktura ng datos (data structures) o di kaya'y kontrolin ang daloy ng gagawin (flow of execution). Ipinahahayag ng prinsipyo ng kabasalan (abstraction principle) ang praktikal na pangangailangan ng suporta ng mga wikang pamprograma sa sapat na antas ng kabasalan.[9] Binuo ang prinsipyong ito bilang isang rekomendasyon sa mga nagpoprograma para gamitin nang maayos ang mga kabasalan.[10]

Lakas na Magpahayag (Expressive power)

Inuuri ng teorya ng pagkokompyut (computing theory) ang mga wika base sa mga kalkulasyong kaya nilang gawin. Masasabing kumpletong Turing (Turing complete) ang isang wika kung kayang gawin nito ang lahat ng posibleng algoritmo. Madalas ituring ang ilang wika, tulad ng ANSI/ISO na SQL-92 at Charity, bilang isang wikang pamprograma kahit na hindi sila kumpletong Turing.[11][12]

Hindi madalas inuuri ang mga wikang pammarka (markup languages), tulad ng XML, HTML, at troff, bilang mga wikang pamprograma.[13][14][15] Gayunpaman, maaaring magkaroon ang mga wikang pamprograma ng kaparehong sintaksis (anyo) tulad ng mga wikang pammarka basta may semantikang pangkalkula na binigay. Halimbawa nito ang wikang XSLT, isang kumpletong Turing na wika na may sintaksis kapareho sa XML.[16][17] Isa pang halimbawa ang LaTeX, isang wikang madalas gamiting panggawa ng istraktura ng mga dokumento at may subset na kumpletong Turing.[18][19]

Madalas ring ginagamit ang terminong wikang pangkompyuter bilang kasingkahulugan ng wikang pamprograma,[20] subalit iba-iba ang paraan ng paggamit ng mga nasa larangan sa dalawang termino, pati na sa kung anong sakop ng bawat isa. Inilalarawan ng isang paggamit ang mga wikang pamprograma bilang isa lamang pangkat ng wikang pangkompyuter.[21] Madalas ring inlalarawan bilang mga wikang pangkompyuter ang mga wikang ginagamit sa larangan ng pagkokompyut na may ibang layunin kaysa sa gumawa ng isang programa sa kompyuter. Halimbawa, itinuturing mga wikang pangkompyuter ang mga wikang pammarka para maidiin na hindi sila ginagamit sa larangan ng pagpoprograma.[22]

Samantala, may isa ring paggamit na naglalarawan sa mga wikang pangkompyuter bilang isang pangkat lamang ng mga wikang pamprograma, kung isasama ang teoretikal na pagbubuo para maiprograma ang mga basal (abstract) na makina, sa kadahilanang tumatakbo lamang ang mga wikang pangkompyuter sa mga kompyuter, isang makinang may limitadong pinagkukunan ng lakas ng hardware.[23] Idiniin ni John C. Reynolds na katulad din ng mga wikang pamprograma ang mga wikang may pormal na pagdedetalye (formal specification languages) sa kadahilanang pareho silang mga wikang ginagamit para magsagawa (execute) ng isang bagay. Katwiran niya, mga wikang pamprograma din ang mga pinapasok na teksto at maging mga grapiko na nakakaapekto sa ugali ng kompyuter, kahit na karaniwang mga hindi kumpletong Turing ang mga ito. Pinuna rin niya na ang pagbabalewala sa mga konsepto ng wikang pamprograma ay ang dahilan kung bakit maraming lamat at butas ang mga pormat ng pag-input.[24]

Kasaysayan baguhin

Mga panimulang pagpapaunlad baguhin

Pinoprograma nang walang tulong mula sa mga nakalagay na programa (stored program) ang pinakaunang mga kompyuter, tulad ng Collosus, sa pamamagitan ng pagbago sa sirkito o di kaya'y magtakda gamit ng mga pisikal na kontrol.

Lumipas ang ilang taon, maisusulat na ang mga programa gamit ng mga wikang pangmakina, kung saan maaaring magsulat ang isang tagaprograma ng mga tagubuling nakanumero at direkta itong isasagawa ng makina. Halimbawa, maaaring magkaroon ng tatlong numero ang tagubilin para ipagdagdag ang dalawang halagang nasa magkaibang lokasyon sa memorya: isang opcode (pinaiksing operation code o kodigo ng operasyon) na pumipili sa operasyon ng "pagdagdag" kasama ng dalawang lokasyon sa memorya. Binabasa ang mga programang ito, mapa-sampuan (decimal) man o dalawahan (binary), gamit ng mga punched card, paper tape, magnetic tape, o di kaya'y binubukas-sara gamit ng mga switch na nasa harapang panel ng nasabing kompyuter. Kalaunan, tinawag ang mga wikang pangmakina bilang mga wikang pamprograma ng unang henerasyon (1GL, "first generation language").

Sumunod na ginawa ang mga wkang pamprograma ng ikalawang henerasyon (2GL, "second generation language"), mas kilalang mga wikang assembly. Malapit pa rin ang mga wikang nasa henerasyong ito sa arkitektura ng mga tagubilin ng isang kompyuter. Ginawa ito na may intensyong maging mas madaling mabasa ng tao at nang mabawasan ang mga pagkakamaling posibleng magawa ng tagaprograma sa kakakompyut ng mga adres.

Una namang isinulat ang mataas na wikang pamprograma o mga wikang pamprograma ng ikatlong henerasyon (3GL, "third generation language") noong dekada 1950s. Ang Plankalkül, ginawa para sa Alemang kompyuter na Z3 ni Konrad Zuse noong 1943 hanggang 1945, ay isang halimbawa ng sinaunang mataas na wikang dinisenyo para sa mga kompyuter, pero hindi ito nasubukan hanggang noong 1998 at 2000.

Isa sa mga itinuturing na unang halimbawa ng mataas na wikang ginawa para sa elektronikong kompyuter ang Short Code, isang mungkahi noong 1949 ni John Mauchly. Di tulad ng kodigong pangmakina, nakasulat gamit ng mga ekpresyong matematikal sa anyong mauunawaan ng nagbabasa ng kodigo ang bawat pahayag ng wika. Kaso lamang, kinakailangan nitong isalin sa kodigong pangmakina sa kada pagtakbo ng mga programang nakasulat sa wikang ito, na lalo pang nagpabagal imbes na magpabilis sa proseso.

Ginawa naman ni Alick Glennie ang Autocode noong unang bahagi ng dekada 1950s sa Pamantasan ng Machester. Bilang isang wikang pamprograma, gumagamit ito ng isang kompayler para agad na masalin ang wika sa kodigong pangmakina. Ang unang kadigo at kompayler na ginawa ay ginawa noong 1952 para sa kompyuter na Mark 1 sa naturang pamantasan. Ito ang itinuturing na kauna-unahang nakokompayl na mataas na wikang pamprograma.

Noong 1954, ginawa ni R.A. Brooker ang ikalawang autocode para sa Mark 1 at tinawag na "Mark 1 Autocode." Gumawa rin si Brooker ng autocode para naman sa kompyuter na Ferrari Mercury noon ding dekadang iyon sa tulong ng Pamantasan ng Machester. Ginawa naman ni D.F. Hartley ng Laboratoryong Pangmatematika ng Pamantasan ng Cambridge noong 1961 ang bersiyon nito para sa makinang EDSAC 2. Kilala bilang EDSAC 2 Autocode, direktang ginawa ito mula sa autocode ng Mercury na may ilang pagbabago para umakma sa lokal na paggamit. Kilala ito dahil sa pag-ooptimisa sa kodigong nakabagay (object code) at pagsusuri sa pinagmulang wika (source language diagnostics), mga bagay na kinokonsiderang nakaabante noong panahong iyon. Kasabayan (ngunit hiwalay) nito ang Atlas Autocode na ginawa para naman sa makinang Atlas 1 ng Pamantasan ng Manchester.

Noon ding taong 1954, inimbento ni John Backus sa IBM ang wikang FORTRAN. Ito ang kauna-unahang pangkalahatang wikang pamprogramang marami ang gumamit na ginawa para gamitin, imbes na panukala lamang o pagpatunay mula sa isang papel. Ginagamit pa rin hanggang ngayon ang naturang wika para sa mga malalakas at matitinding pagkokompyut at mga programang sumusukat sa bilis ng mga superkompyuter.

Smantala, sa Estados Unidos, ginawa ni Grace Hopper ang wikang FLOW-MATIC. Ginawa ito para sa kompyuter na UNIVAC sa Remington Rand mula noong 1955 hanggang 1959. Napansin ni Hopper at ang kagrupo niya na hindi komportable ang mga customer ng paproseso ng mga datos sa negosyo sa mga notasyong pangmatematika, kaya naman ginawa nila ang wikang nakasulat sa wikang Ingles at sumubok ng isang prototype. Inilabas sa publiko noong 1958 ang kompayler ng nasabing wika, at maituturing na kumpleto na ito noong 1959. Malaki ang impluwensiya ng FLOW-MATIC sa disenyo ng wikang COBOL, dahil tanging ito at ang direktang apo nitong AIMACO lamang ang aktwal na ginagamit noong panahong iyon.

Mga wikang pamprograma baguhin

Ang ilan sa mga halimbawa ng mga wikang pamprograma ay ang mga sumusunod:

Sanggunian baguhin

  1. Koetsier, Teun (Mayo 2001). "On the prehistory of programmable machines; musical automata, looms, calculators" [Patungkol sa sinaunang kasaysayan ng mga makinang napoprograma; mga automata ng musika, tagatahi, at tagakalkula.]. Mechanism and Machine Theory [Mekanismo at Teorya ng Makina] (sa Ingles). 36 (5): 589–603. doi:10.1016/S0094-114X(01)00005-2.
  2. Ettinger, James (2004) Jacquard's Web (sa Ingles), Oxford University Press
  3. 3.0 3.1 Aaby, Anthony (2004). Introduction to Programming Languages [Pagpapakilala sa mga Wikang Pamprograma] (sa Ingles). Inarkibo mula sa ang orihinal noong Nobyembre 8, 2012. Nakuha noong Oktubre 2, 2020.
  4. Sa larangan ng matematika, ibig sabihin, ang mga wikang pamprograma ay kumpletong Turing. MacLennan, Bruce J. (1987). Principles of Programming Languages [Mga Prinsipyo ng mga Wikang Pamprograma] (sa Ingles). Oxford University Press. p. 1. ISBN 978-0-19-511306-8.
  5. ACM SIGPLAN (2003). "Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery" [Mga batas ng espesyal na interesadong pangkat sa mga wikang pamprograma ng Asosasyon ng Makinarya ng Pagkakalkula]. Inarkibo mula sa orihinal noong Hunyo 22, 2006. 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. (Ang saklaw ng SIGPLAN ay ang teorya, disenyo, implementasyon, paglalarawan, at ang paggamit sa mga wikang pamprogramang pangkompyuter - mga wikang nagpapahintulot sa pagtutukoy ng iba't ibang mga uri ng pagkakalkula, upang mabigyan ang tagagamit ng makabuluhang kontrol (agaran o naantala) sa operasyon ng kompyuter.)
  6. Dean, Tom (2002). "Programming Robots" [Pagprograma sa mga Robot]. Building Intelligent Robots [Paggawa sa mga Matatalinong Robot] (sa Ingles). Brown University Department of Computer Science. Nakuha noong Oktubre 2, 2020.{{cite web}}: CS1 maint: url-status (link)
  7. Narasimahan, R. Programming Languages and Computers: A Unified Metatheory [Wikang pamprograma at Kompyuter: Isang Pinagsanib na Metateorya] (sa Ingles). p. 189 - 247. sa Alt, Franz (1994). Advances in computers (sa Ingles). Bol. 8. Academic Press. p. 193. ISBN 0-12-012108-5. a complete specification of a programming language must, by definition, include a specification of a processor—idealized, if you will—for that language. (Kailangan, ayon sa kahulugan nito, ng isang kumpletong paglalarawan sa wikang pamprograma ang paglalarawan ng isang tagaproseso - napakaperpekto, kung gusto mo - para sa wikang iyon.)
  8. Mordechai, Ben Ari (1996). Understanding Programming Languages [Pag-unawa sa mga Wikang Pamprograma] (sa Ingles). John Wiley and Sons. 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. (Maaaring bigyang-kahulugan ang mga programa't wika bilang mga lantay na pormal na matematikal na bagay. Gayunpaman, mas maraming tao ang interesado sa mga programa kaysa sa iba pang mga matematikal na bagay tulad ng mga grupo, sa kadahilanang posibleng gamitin ang programa - mga sunod-sunod na simbolo - para kontrolin ang gagawin ng kompyuter. Kahit na inirerekomenda naming pag-aralan ang teorya ng pagpoprograma, ang tekstong ito ay lilimitahan lamang para sa pag-aaral ng mga programang isinasagawa sa mga kompyuter.)
  9. Schmidt, David A. (1994). The structure of typed programming languages [Ang istraktura ng mga nakauring wikang pamprograma] (sa Ingles). MIT Press. p. 32. ISBN 0-262-19349-3.
  10. Pierce, Benjamin (2002). Types and Programming Languages [Mga uri at Wikang Pamprograma] (sa Ingles). MIT Press. p. 363. ISBN 978-0-262-16209-8.
  11. "Information Technology – Database Language SQL (Proposed revised text of DIS 9075)" [Teknolohiyang Impormasyon - Database ng Wikang SQL (Iminungkahing binagong teksto ng DIS 9075)] (sa Ingles). Nakuha noong Oktubre 2, 2020.{{cite web}}: CS1 maint: url-status (link)
  12. The Charity Development Group (Disyembre 1996). "The CHARITY Home Page" (sa Ingles). Nakuha noong Oktubre 2, 2020.{{cite web}}: CS1 maint: url-status (link)
  13. Bos, Bert (Hunyo 2, 2003). "XML in 10 points" [XML sa sampung punto]. W3C (sa Ingles). Inarkibo mula sa ang orihinal noong Setyembre 6, 2009. Nakuha noong Oktubre 5, 2020. XML is not a programming language. (Hindi isang wikang pamprograma ang XML.)
  14. Powell, Thomas (2003). HTML & XHTML: the complete reference [HTML & XHTML: ang kumpletong sanggunian] (sa Ingles). McGraw-Hill. p. 25. ISBN 978-0-07-222942-4. HTML is not a programming language. (Hindi isang wikang pamprograma ang HTML.)
  15. Dykes, Lucinda; Tittel, Ed (2005). XML For Dummies [XML para sa Mangmang] (sa Ingles) (Ika-4 na pat.). Wiley. ISBN 978-0-7645-8845-7.
  16. "XSLT is a Programming Language" [Wikang Pamprograma ang XSLT]. Microsoft Docs (sa Ingles). Oktubre 27, 2016. Nakuha noong Oktubre 8, 2020.{{cite web}}: CS1 maint: url-status (link)
  17. Scott, Michael (2006). Programming Language Pragmatics [Mga Pragmatiko ng Wikang Pamprograma] (sa Ingles). Morgan Kaufmann. p. 802. ISBN 978-0-12-633951-2. XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language. (Ang XSLT, kahit na dalubhasa sa pagbabago ng XML, ay isang kumpletong Turing na wikang pamprograma.)
  18. Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (Hunyo 20, 2016). "The Not So Short Introduction to LATEX 2ε" [Ang Isang Di Gaanong Maiksing Pagpapakilala sa LATEX 2ε] (Bersyon 5.06). tobi.oetiker.ch (sa Ingles). pp. 1–157. Inarkibo (PDF) mula sa orihinal noong Marso 14, 2017.
  19. Syropoulos, Apostolos; Antonis Tsolomitis; Nick Sofroniou (2003). Digital typography using LaTeX [Tipograpiyang digital gamit ang LaTeX] (sa Ingles). Springer-Verlag. p. 213. ISBN 978-0-387-95217-8. TeX is not only an excellent typesetting engine but also a real programming language.
  20. Edmunds, Robert A. (1985). The Prentice-Hall standard glossary of computer terminology [Ang pamantayang talahulungunan ng mga terminolohiyang pangkompyuter ng Prentice-Hall] (sa Ingles). Prentice-Hall. p. 91.
  21. Lando, Pascal; Lapujade, Anne; Kassel, Gilles; Fürst, Frédéric. "Towards a General Ontology of Computer Programs" [Tungo sa isang Pangkalahatang Ontolohiya ng mga Programang Pangkompyuter] (PDF) (sa Ingles). Inarkibo mula sa ang orihinal (PDF) noong Hulyo 7, 2015. Nakuha noong Oktubre 8, 2020.
  22. Bajpai, S.K. (2007). Introduction To Computers And C Programming [Pagpapakilala sa mga Kompyuter at Pagprograma sa [wikang] C] (sa Ingles). New Age International. p. 346. ISBN 81-224-1379-X.
  23. Narasimahan, R. Programming Languages and Computers: A Unified Metatheory [Wikang pamprograma at Kompyuter: Isang Pinagsanib na Metateorya] (sa Ingles). p. 189 - 247. [...] 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. [talababa ng may-akda:] 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 ([...] ang modelo [...] para sa mga wikang pangkompyuter ay iba sa mga [...] para sa mga wikang pamprograma sa dalawang kaparaanan lamang. Sa isang wikang pangkompyuter, may limitadong dami ng mga pangalan-o rehistro-na kaya lamang tumanggap ng limitadong dami ng halaga-o estado-at ang mga estadong ito ay hindi na ibinukod sa iba pang mga katangian. [talababa] Nagmumukha itong katotohanan pero malayo ang naaabot ng mga implikasyon nito. Halimbawa, masasabing mababawasan sa natural na paraan ang kahit anong modelo ng mga wikang pamprograma, sa pamamagitan ng pagsasaayos sa ilang partikular na parametro nito o tampok, sa isang modelong para sa mga wikang pangkompyuter)
  24. Reynolds, John C. (Nobyembre 2008). "Some thoughts on teaching programming and programming languages". SIGPLAN Notices. Bol. 43, blg. 11. p. 109.

  Ang lathalaing ito na tungkol sa Kompyuter ay isang usbong. Makatutulong ka sa Wikipedia sa pagpapalawig nito.