fbpx
วิกิพีเดีย

พอลิกล็อต

พอลิกล็อต (อังกฤษ: polyglot) ในทางคอมพิวเตอร์ หมายถึง โปรแกรมคอมพิวเตอร์หรือสคริปต์ที่เขียนขึ้นในรูปแบบที่ถูกต้องของภาษาโปรแกรมหลายภาษาด้วยรหัสต้นฉบับอันเดียวกัน ซึ่งโปรแกรมจะทำงานหรือให้ผลลัพธ์เหมือนกันจากการแปลด้วยคอมไพเลอร์หรืออินเทอร์พรีเตอร์ของภาษานั้นอย่างอิสระ

โดยทั่วไปแล้วพอลิกล็อตเขียนขึ้นจากการผสานภาษาซี ซึ่งอนุญาตให้มีการจำกัดความ (define) วลีต่างๆ ได้ด้วยตัวประมวลผลก่อน (preprocessor) รวมกับภาษาสคริปต์อื่นๆ เช่น ภาษาลิสป์ ภาษาเพิร์ล หรือ sh

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

#define a /* #<?php echo "\010Hello, world!\n"// 2> /dev/null > /dev/null \ ; // 2> /dev/null; x=a; $x=5 // 2> /dev/null \ ; if (($x)) // 2> /dev/null; then return 0; // 2> /dev/null; fi #define e ?> #define b */ #include <stdio.h> #define main() int main() #define printf printf( #define true ) #define function function main() { printf "Hello, world!\n"true/* 2> /dev/null | grep -v true*/; return 0; } #define c /* main #*/ 

โปรแกรมดังกล่าวจะแสดงข้อความ Hello, world! พร้อมทั้งขึ้นบรรทัดใหม่บนจอภาพ สามารถอธิบายได้ดังนี้

  • "#" หมายถึงประพจน์ของตัวประมวลผลก่อนในภาษาซี แต่หมายถึงการระบุหมายเหตุใน bash และภาษาพีเอชพี
  • "//" คือหมายเหตุในภาษาพีเอชพี และหมายถึงสารบบราก (root directory) ใน bash
  • การเปลี่ยนทางของเชลล์ถูกใช้เพื่อขจัดผลลัพธ์ที่ไม่ต้องการ
  • โค้ดระบุตำแหน่งภาษาพีเอชพี "<?php" กับ "?>" ยังคงใช้ได้ผล แม้จะอยู่ในบรรทัดที่ระบุหมายเหตุเอาไว้
  • ประพจน์ "function main()" สามารถใช้ได้ทั้งในภาษาพีเอชพีและ bash ในขณะที่ภาษาซีจะใช้ "#define" เป็นเครื่องมือแปลงประพจน์นั้นให้กลายเป็น "main()" ขณะแปลภาษา
  • อักขระกำหนดหมายเหตุสามารถผสานกันเพื่อให้ทำงานได้หลากหลาย
  • "if (($x))" เป็นประพจน์ที่ถูกต้องทั้งใน bash และภาษาพีเอชพี
  • "printf" เป็นคำสั่งในตัว (shell builtin) ของ bash ซึ่งเหมือนกับฟังก์ชันในภาษาซี เว้นแต่ไม่มีการกำหนดวงเล็บ (ตัวประมวลผลก่อนของภาษาซีจะเป็นผู้เติมวงเล็บให้)
  • สามบรรทัดสุดท้ายถูกใช้เฉพาะใน bash เพื่อเรียกฟังก์ชัน "main" ในภาษาพีเอชพีฟังก์ชันนี้ได้นิยามไว้แล้วแต่ไม่มีการใช้ ส่วนภาษาซีไม่จำเป็นต้องเรียกใช้

แหล่งข้อมูลอื่น

พอล, กล, อต, บทความน, ไม, การอ, างอ, งจากแหล, งท, มาใดกร, ณาช, วยปร, บปร, งบทความน, โดยเพ, มการอ, างอ, งแหล, งท, มาท, าเช, อถ, เน, อความท, ไม, แหล, งท, มาอาจถ, กค, ดค, านหร, อลบออก, เร, ยนร, าจะนำสารแม, แบบน, ออกได, อย, างไรและเม, อไร, งกฤษ, polyglot, ในทางคอม. bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir phxliklxt xngkvs polyglot inthangkhxmphiwetxr hmaythung opraekrmkhxmphiwetxrhruxskhriptthiekhiynkhuninrupaebbthithuktxngkhxngphasaopraekrmhlayphasadwyrhstnchbbxnediywkn sungopraekrmcathanganhruxihphllphthehmuxnkncakkaraepldwykhxmiphelxrhruxxinethxrphrietxrkhxngphasannxyangxisraodythwipaelwphxliklxtekhiynkhuncakkarphsanphasasi sungxnuyatihmikarcakdkhwam define wlitang iddwytwpramwlphlkxn preprocessor rwmkbphasaskhriptxun echn phasalisp phasaephirl hrux shethkhnikhthiichepnpktithisudsxngxyangsahrbkarsrangopraekrmphxliklxtkhux karichpraoychncakxkkhraaethnhmayehtu comment thiaetktangkn aelakarcakdkhwamwlidwykarthanganinphasaxun aelaethkhnikhthiichiddixikxyanghnungkhux karphlikaephlngiwyakrnkhxngphasa caktwxyangtxipniepnphxliklxtthiekhiynkhunephuxthanganbn phasasiaebbaexnsi ANSI C phasaphiexchphi aela bash define a lt php echo 010Hello world n 2 gt dev null gt dev null 2 gt dev null x a x 5 2 gt dev null if x 2 gt dev null then return 0 2 gt dev null fi define e gt define b include lt stdio h gt define main int main define printf printf define true define function function main printf Hello world n true 2 gt dev null grep v true return 0 define c main opraekrmdngklawcaaesdngkhxkhwam Hello world phrxmthngkhunbrrthdihmbncxphaph samarthxthibayiddngni hmaythungpraphcnkhxngtwpramwlphlkxninphasasi aethmaythungkarrabuhmayehtuin bash aelaphasaphiexchphi khuxhmayehtuinphasaphiexchphi aelahmaythungsarbbrak root directory in bash karepliynthangkhxngechllthukichephuxkhcdphllphththiimtxngkar okhdrabutaaehnngphasaphiexchphi lt php kb gt yngkhngichidphl aemcaxyuinbrrthdthirabuhmayehtuexaiw praphcn function main samarthichidthnginphasaphiexchphiaela bash inkhnathiphasasicaich define epnekhruxngmuxaeplngpraphcnnnihklayepn main khnaaeplphasa xkkhrakahndhmayehtusamarthphsanknephuxihthanganidhlakhlay if x epnpraphcnthithuktxngthngin bash aelaphasaphiexchphi printf epnkhasngintw shell builtin khxng bash sungehmuxnkbfngkchninphasasi ewnaetimmikarkahndwngelb twpramwlphlkxnkhxngphasasicaepnphuetimwngelbih sambrrthdsudthaythukichechphaain bash ephuxeriykfngkchn main inphasaphiexchphifngkchnniidniyamiwaelwaetimmikarich swnphasasiimcaepntxngeriykichaehlngkhxmulxun aekikhphxliklxtaepdphasa phasaokhbxl phasapaskal phasafxraethrn phasasi ophstskhript echllyuniks phasaekhruxngkhxng Intel x86 aela phasaephirl 5 raychuxphxliklxt phxliklxt Merry Christmas insiphasa phxliklxt Happy New year insiphasa phxliklxtsiphasa phasasiaebbaexnsi echllyuniks phasaephirl aela tcl bthkhwamekiywkbkhxmphiwetxr xupkrntang hruxekhruxkhayniyngepnokhrng khunsamarthchwywikiphiediyidodyephimkhxmul duephimthi sthaniyxy ethkhonolyisarsnethsekhathungcak https th wikipedia org w index php title phxliklxt amp oldid 5731641, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม