บทความนี้ไม่มีจาก |
เมทาโปรแกรมมิง (อังกฤษ: metaprogramming) คือเทคนิคการเขียนโปรแกรมคอมพิวเตอร์ ซึ่งจะทำงานโดยเขียนหรือจัดการโปรแกรมอื่น (หรือโปรแกรมของตัวเอง) เสมือนข้อมูลของโปรแกรม หรือสร้างงานบางส่วนขณะแปลโปรแกรมแล้วเติมเต็มงานที่เหลือขณะโปรแกรมทำงาน ในหลายกรณี เมทาโปรแกรมมิงช่วยให้โปรแกรมเมอร์สามารถประหยัดเวลาในการเขียนรหัสต้นฉบับที่เหมือนๆ กันจำนวนมากแทนที่จะเขียนทั้งหมดเองด้วยมือ อาจเรียกได้ว่าเป็นการทำงานแบบ "โปรแกรมที่เขียนโปรแกรม"
ภาษาที่ใช้เขียน เมทาโปรแกรม (metaprogram) จะถูกเรียกว่า (metalanguage) และภาษาที่ถูกโปรแกรมจัดการจะเรียกว่า (object language) ความสามารถของภาษาที่เป็นอภิภาษาภายในภาษาเดียวกันได้ เรียกว่าของภาษาโปรแกรม (reflection/reflexivity) ซึ่งสมบัติสะท้อนเป็นคุณลักษณะหนึ่งของภาษาที่จะนำไปสู่เมทาโปรแกรมมิงได้สะดวกยิ่งขึ้น
เมทาโปรแกรมมิงมักจะมีแนวทางการเขียนหนึ่งในสองทาง ทางแรกคือการเปิดเผยโครงสร้างภายในของเอนจินขณะทำงานไปเป็นรหัสต้นฉบับผ่านทางเอพีไอ ทางที่สองคือการจัดการนิพจน์สตริงที่รวมคำสั่งไปเป็นรหัสต้นฉบับแบบพลวัต
ตัวอย่าง
ตัวอย่างต่อไปนี้เป็นเมทาโปรแกรมที่เขียนขึ้นใน bash
#!/bin/bash # metaprogram echo '#!/bin/bash' >program for ((I=1; I<=992; I++)) do echo "echo $I" >>program done chmod +x program
(หรือโปรแกรม) ข้างต้นจะสร้างสคริปต์ขึ้นมาใหม่จำนวน 993 บรรทัด เก็บไว้ในแฟ้มชื่อ "program" ซึ่งจะทำงานเป็นการพิมพ์ค่า 1 ถึง 992 ออกมา นี่เป็นเพียงตัวอย่างหนึ่งของการใช้รหัสเพื่อเขียนรหัสจำนวนมาก ไม่ใช่แนวทางที่เหมาะสมที่สุดสำหรับการพิมพ์รายชื่อจำนวน ถึงอย่างไรก็ตาม โปรแกรมเมอร์สามารถเขียนและสั่งให้เมทาโปรแกรมทำงาน และจะได้รหัสต้นฉบับเป็นจำนวนหลายพันบรรทัดภายในไม่กี่นาที
ถ้าหากโปรแกรมสามารถถูกปรับแต่งในขณะทำงานได้ (เช่น ภาษาลิสป์ ภาษาไพทอน ภาษาสมอลล์ทอล์ก ภาษารูบี ภาษาพีเอชพี ภาษาเพิร์ล และจาวาสคริปต์) เทคนิคเมทาโปรแกรมมิงจะสามารถทำงานได้ทันทีโดยไม่ต้องสร้างรหัสต้นฉบับด้วยซ้ำไป แต่ก็ไม่ใช่ว่าทุกภาษาจะทำเช่นนี้ได้
ตัวอย่างหนึ่งของเครื่องมือเมทาโปรแกรมมิงที่เป็นที่รู้จักมากที่สุดก็คือคอมไพเลอร์ (compiler) ซึ่งช่วยให้โปรแกรมเมอร์เขียนโปรแกรมขนาดเล็กได้จากภาษาโปรแกรมระดับสูง เพื่อเขียนโปรแกรมภาษาเครื่องหรือภาษาแอสเซมบลีที่เทียบเท่ากัน คอมไพเลอร์จึงกลายเป็นเครื่องมือพื้นฐานสำหรับการเขียนโปรแกรม เนื่องจากการเขียนภาษาเครื่องลงไปโดยตรงนั้นไม่มีประสิทธิภาพเมื่อนำมาใช้งานจริง
อีกตัวอย่างหนึ่งของเครื่องมือเมทาโปรแกรมมิงก็คือ และ ซึ่งเครื่องมือสองอย่างนี้ใช้สำหรับสร้าง (lexical analyzer) และ (lexical parser) สำหรับ yacc นั้นอาจเรียกได้ว่าเป็น "คอมไพเลอร์ของคอมไพเลอร์" คือเครื่องมือที่ใช้สำหรับสร้างเครื่องมือแปลภาษาระดับสูงให้เป็นภาษาเครื่อง
ดูเพิ่ม
- (automatic/generative programming)
- (language-oriented programming)
- (self-modifying code)
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir emthaopraekrmming xngkvs metaprogramming khuxethkhnikhkarekhiynopraekrmkhxmphiwetxr sungcathanganodyekhiynhruxcdkaropraekrmxun hruxopraekrmkhxngtwexng esmuxnkhxmulkhxngopraekrm hruxsrangnganbangswnkhnaaeplopraekrmaelwetimetmnganthiehluxkhnaopraekrmthangan inhlaykrni emthaopraekrmmingchwyihopraekrmemxrsamarthprahydewlainkarekhiynrhstnchbbthiehmuxn kncanwnmakaethnthicaekhiynthnghmdexngdwymux xaceriykidwaepnkarthanganaebb opraekrmthiekhiynopraekrm phasathiichekhiyn emthaopraekrm metaprogram cathukeriykwa metalanguage aelaphasathithukopraekrmcdkarcaeriykwa object language khwamsamarthkhxngphasathiepnxphiphasaphayinphasaediywknid eriykwakhxngphasaopraekrm reflection reflexivity sungsmbtisathxnepnkhunlksnahnungkhxngphasathicanaipsuemthaopraekrmmingidsadwkyingkhun emthaopraekrmmingmkcamiaenwthangkarekhiynhnunginsxngthang thangaerkkhuxkarepidephyokhrngsrangphayinkhxngexncinkhnathanganipepnrhstnchbbphanthangexphiix thangthisxngkhuxkarcdkarniphcnstringthirwmkhasngipepnrhstnchbbaebbphlwttwxyangtwxyangtxipniepnemthaopraekrmthiekhiynkhunin bash bin bash metaprogram echo bin bash gt program for I 1 I lt 992 I do echo echo I gt gt program done chmod x program hruxopraekrm khangtncasrangskhriptkhunmaihmcanwn 993 brrthd ekbiwinaefmchux program sungcathanganepnkarphimphkha 1 thung 992 xxkma niepnephiyngtwxyanghnungkhxngkarichrhsephuxekhiynrhscanwnmak imichaenwthangthiehmaasmthisudsahrbkarphimphraychuxcanwn thungxyangirktam opraekrmemxrsamarthekhiynaelasngihemthaopraekrmthangan aelacaidrhstnchbbepncanwnhlayphnbrrthdphayinimkinathi thahakopraekrmsamarththukprbaetnginkhnathanganid echn phasalisp phasaiphthxn phasasmxllthxlk phasarubi phasaphiexchphi phasaephirl aelacawaskhript ethkhnikhemthaopraekrmmingcasamarththanganidthnthiodyimtxngsrangrhstnchbbdwysaip aetkimichwathukphasacathaechnniid twxyanghnungkhxngekhruxngmuxemthaopraekrmmingthiepnthiruckmakthisudkkhuxkhxmiphelxr compiler sungchwyihopraekrmemxrekhiynopraekrmkhnadelkidcakphasaopraekrmradbsung ephuxekhiynopraekrmphasaekhruxnghruxphasaaexsesmblithiethiybethakn khxmiphelxrcungklayepnekhruxngmuxphunthansahrbkarekhiynopraekrm enuxngcakkarekhiynphasaekhruxnglngipodytrngnnimmiprasiththiphaphemuxnamaichngancring xiktwxyanghnungkhxngekhruxngmuxemthaopraekrmmingkkhux aela sungekhruxngmuxsxngxyangniichsahrbsrang lexical analyzer aela lexical parser sahrb yacc nnxaceriykidwaepn khxmiphelxrkhxngkhxmiphelxr khuxekhruxngmuxthiichsahrbsrangekhruxngmuxaeplphasaradbsungihepnphasaekhruxngduephim automatic generative programming language oriented programming self modifying code