มาโคร (วิทยาการคอมพิวเตอร์)

จาก Wikipedia สารานุกรมเสรี
ข้ามไปที่การนำทางข้ามไปที่การค้นหา
โปรแกรมแก้ไขมาโครของ jEdit

มาโคร (ย่อมาจาก "macroinstruction" จากกรีกรวมแบบฟอร์มμακρο- 'ยาวขนาดใหญ่[1] ) ในวิทยาการคอมพิวเตอร์เป็นกฎหรือรูปแบบที่ระบุวิธีการป้อนข้อมูลบางอย่างที่ควรจะแมปเพื่อส่งออกแทน การใช้แมโครเพื่อป้อนข้อมูลคือการขยายตัวแมโครอินพุตและเอาต์พุตอาจเป็นลำดับของราชสกุลศัพท์หรือตัวอักษรหรือต้นไม้ไวยากรณ์มาโครอักขระได้รับการสนับสนุนในแอปพลิเคชันซอฟต์แวร์เพื่อให้เรียกใช้ลำดับคำสั่งทั่วไปได้ง่าย โทเค็นและมาโครต้นไม้ได้รับการสนับสนุนในภาษาโปรแกรมบางภาษาเพื่อเปิดใช้งานนำมาใช้รหัสหรือจะขยายภาษาบางครั้งภาษาเฉพาะของโดเมน

มาโครถูกใช้เพื่อสร้างลำดับของคำสั่งการคำนวณที่พร้อมใช้งานสำหรับโปรแกรมเมอร์เป็นคำสั่งโปรแกรมเดียวทำให้งานการเขียนโปรแกรมไม่น่าเบื่อและเกิดข้อผิดพลาดน้อยลง[2] [3] (ดังนั้นจึงเรียกว่า "มาโคร" เนื่องจากโค้ด "ขนาดใหญ่" สามารถขยายได้จากลำดับอักขระ "เล็ก") มาโครมักจะอนุญาตพารามิเตอร์ตำแหน่งหรือคีย์เวิร์ดที่กำหนดสิ่งที่โปรแกรมแอสเซมเบลอร์ตามเงื่อนไขสร้างและได้รับการใช้ในการสร้างทั้งโปรแกรมหรือห้องสวีทโปรแกรมตามตัวแปรเช่นระบบปฏิบัติการ , แพลตฟอร์มหรือปัจจัยอื่น ๆ คำนี้มาจาก "มาโครคำสั่ง" และการขยายดังกล่าวเดิมใช้ในการสร้างรหัส ภาษาแอสเซมบลี

มาโครแป้นพิมพ์และเมาส์[ แก้ไข]

มาโครแป้นพิมพ์และมาโครเมาส์ช่วยให้ลำดับการกดแป้นพิมพ์และการทำงานของเมาส์ในระยะสั้นสามารถเปลี่ยนเป็นลำดับการกดแป้นพิมพ์และการทำงานของเมาส์ได้โดยปกติจะใช้เวลานานกว่า ด้วยวิธีนี้ลำดับการกดแป้นพิมพ์และการเคลื่อนไหวของเมาส์ที่ใช้บ่อยหรือซ้ำ ๆ กันสามารถเป็นไปโดยอัตโนมัติได้ โปรแกรมแยกสำหรับการสร้างแมโครเหล่านี้จะเรียกว่าบันทึกแมโคร

ในช่วงทศวรรษที่ 1980 โปรแกรมมาโครซึ่งเดิมคือSmartKeyจากนั้นก็คือ SuperKey, KeyWorks, Prokey - เป็นที่นิยมอย่างมากอันดับแรกเป็นวิธีการจัดรูปแบบบทภาพยนตร์โดยอัตโนมัติจากนั้นสำหรับงานป้อนข้อมูลของผู้ใช้ที่หลากหลาย โปรแกรมเหล่านี้ขึ้นอยู่กับโหมดการทำงานTSR ( ยุติและพักอาศัย ) และนำไปใช้กับการป้อนข้อมูลแป้นพิมพ์ทั้งหมดไม่ว่าจะเกิดขึ้นในบริบทใด พวกเขาต้องตกอยู่ในความล้าสมัยไปบ้างตามการมาของอินเทอร์เฟซผู้ใช้ที่ขับเคลื่อนด้วยเมาส์และความพร้อมใช้งานของมาโครแป้นพิมพ์และเมาส์ในแอปพลิเคชันเช่นโปรแกรมประมวลผลคำและสเปรดชีตทำให้สามารถสร้างมาโครแป้นพิมพ์ที่ไวต่อแอปพลิเคชันได้

มาโครแป้นพิมพ์สามารถใช้ในเกมเล่นตามบทบาทออนไลน์ที่มีผู้เล่นหลายคนจำนวนมาก (MMORPG) เพื่อทำงานซ้ำ ๆ แต่มีกำไรจึงสะสมทรัพยากร เนื่องจากสิ่งนี้ทำได้โดยไม่ต้องใช้ความพยายามของมนุษย์มันสามารถบิดเบือนเศรษฐกิจของเกมได้ ด้วยเหตุนี้การใช้มาโครจึงเป็นการละเมิดTOSหรือEULAของ MMORPG ส่วนใหญ่และผู้ดูแลระบบของพวกเขาใช้ความพยายามอย่างมากในการปราบปรามพวกมัน [4]

มาโครแอปพลิเคชันและสคริปต์[ แก้ไข]

แป้นพิมพ์และเมาส์แมโครที่สร้างขึ้นโดยใช้โปรแกรมที่สร้างขึ้นในลักษณะแมโครบางครั้งเรียกว่าแมโครแอพลิเคชัน พวกเขาสร้างขึ้นโดยดำเนินการตามลำดับครั้งเดียวและปล่อยให้แอปพลิเคชันบันทึกการกระทำ ภาษาการเขียนโปรแกรมมาโครที่เป็นพื้นฐานซึ่งส่วนใหญ่เป็นภาษาสคริปต์ที่มีการเข้าถึงคุณลักษณะของแอปพลิเคชันโดยตรงอาจมีอยู่ด้วย

โปรแกรมแก้ไขข้อความของโปรแกรมเมอร์Emacs (ย่อมาจาก "การแก้ไขมาโคร") ตามแนวคิดนี้ไปสู่ข้อสรุป ตัวแก้ไขส่วนใหญ่สร้างจากมาโคร เดิมที Emacs ถูกออกแบบมาเป็นชุดของมาโครในภาษาแก้ไขTECO ; หลังจากนั้นมันก็เป็นลางภาษาท้องถิ่นของเสียงกระเพื่อม

โปรแกรมแก้ไขข้อความของโปรแกรมเมอร์คนอื่นVim (ลูกหลานของvi ) ยังมีการใช้งานมาโครเต็มรูปแบบ สามารถบันทึกลงในรีจิสเตอร์ (มาโคร) ว่าบุคคลประเภทใดบนแป้นพิมพ์และสามารถเล่นซ้ำหรือแก้ไขได้เช่นเดียวกับมาโครVBAสำหรับ Microsoft Office กลุ่มยังมีภาษาสคริปต์ที่เรียกว่าVimscript [5]เพื่อสร้างมาโคร

Visual Basic for Applications (VBA) เป็นภาษาการเขียนโปรแกรมที่รวมอยู่ในMicrosoft Officeตั้งแต่ Office 97 ถึง Office 2019 (แม้ว่าจะมีอยู่ในส่วนประกอบบางอย่างของ Office ก่อน Office 97) อย่างไรก็ตามฟังก์ชันของมันได้พัฒนามาจากและแทนที่ภาษามาโครที่เดิมรวมอยู่ในแอปพลิเคชันเหล่านี้บางส่วน

XEDITซึ่งทำงานบนคอมโพเนนต์Conversational Monitor System (CMS) ของVMรองรับมาโครที่เขียนในEXEC , EXEC2และREXXและคำสั่ง CMS บางคำสั่งเป็นตัวตัดรอบมาโคร XEDIT Hessling Editor (THE) ซึ่งเป็นโคลนบางส่วนของ XEDIT รองรับมาโคร Rexx โดยใช้ Regina และ Open Object REXX (oorexx) แอปพลิเคชันทั่วไปจำนวนมากและบางส่วนบนพีซีใช้ Rexx เป็นภาษาสคริปต์

ไวรัสมาโคร[ แก้ไข]

VBAสามารถเข้าถึงการเรียกระบบ Microsoft Windowsส่วนใหญ่และดำเนินการเมื่อเปิดเอกสาร นี้จะทำให้มันค่อนข้างง่ายที่จะเขียนไวรัสคอมพิวเตอร์ใน VBA หรือที่รู้จักกันทั่วไปว่าเป็นไวรัสแมโคร ในช่วงกลางถึงปลายทศวรรษที่ 1990 ไวรัสนี้กลายเป็นหนึ่งในไวรัสคอมพิวเตอร์ที่พบบ่อยที่สุด อย่างไรก็ตามในช่วงปลายทศวรรษ 1990 จนถึงปัจจุบันMicrosoftได้ทำการแพตช์และอัปเดตโปรแกรมของตน นอกจากนี้โปรแกรมป้องกันไวรัสในปัจจุบันยังต่อต้านการโจมตีดังกล่าวทันที

มาโครที่กำหนดพารามิเตอร์[ แก้ไข]

แมโครแปรเป็นแมโครที่สามารถใส่วัตถุมอบไว้ในการขยายตัวของ นี้จะช่วยให้บางแมโครของอำนาจของการเป็นฟังก์ชั่น

ดังตัวอย่างง่ายๆในภาษาโปรแกรม Cนี่คือมาโครทั่วไปที่ไม่ใช่มาโครที่กำหนดพารามิเตอร์:

 # กำหนด PI 3.14159

สิ่งนี้ทำให้สตริง "PI" ถูกแทนที่ด้วย "3.14159" ทุกที่ที่เกิดขึ้น สตริงนี้จะถูกแทนที่เสมอและสตริงผลลัพธ์จะไม่สามารถแก้ไขได้ด้วยวิธีใด ๆ ในทางกลับกันตัวอย่างของมาโครที่กำหนดพารามิเตอร์คือ:

 # กำหนด pred (x) ((x) -1)

สิ่งที่มาโครนี้ขยายขึ้นอยู่กับอาร์กิวเมนต์ x ที่ส่งผ่านไปยังมัน นี่คือการขยายที่เป็นไปได้บางส่วน:

 ก่อน (2) → ((2) -1) ก่อน (y + 2) → ((y + 2) -1) ก่อน (f (5)) → ((f (5)) - 1)

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

ในทางกลับกันมาโครที่กำหนดพารามิเตอร์ที่ใช้ในภาษาเช่นLisp , PL / IและSchemeจะมีประสิทธิภาพมากกว่ามากสามารถตัดสินใจได้ว่าจะสร้างโค้ดใดโดยพิจารณาจากอาร์กิวเมนต์ ทำให้พวกเขามีประสิทธิภาพสามารถนำมาใช้ในการดำเนินการสร้างรหัสเวลาทำงาน

มาโครการแทนที่ข้อความ[ แก้ไข]

ภาษาเช่นCและภาษาแอสเซมบลีบางภาษามีระบบมาโครพื้นฐานซึ่งใช้เป็นตัวประมวลผลล่วงหน้าไปยังคอมไพลเลอร์หรือแอสเซมเบลอร์ มาโครตัวประมวลผลล่วงหน้า Cทำงานโดยการแทนที่ข้อความอย่างง่ายที่โทเค็นแทนที่จะเป็นระดับอักขระ อย่างไรก็ตามสิ่งอำนวยความสะดวกมาโครของแอสเซมเบลอร์ที่ซับซ้อนกว่าเช่นIBM High Level Assembler (HLASM) ไม่สามารถใช้กับพรีโปรเซสเซอร์ได้ รหัสสำหรับการประกอบคำแนะนำและข้อมูลจะสลับกับรหัสสำหรับการประกอบการเรียกมาโคร

การใช้มาโครแบบคลาสสิกอยู่ในระบบการเรียงพิมพ์ของคอมพิวเตอร์TeXและอนุพันธ์ซึ่งฟังก์ชันการทำงานส่วนใหญ่จะขึ้นอยู่กับมาโคร

MacroMLเป็นระบบทดลองที่พยายามปรับการพิมพ์แบบคงที่และระบบมาโคร Nemerleมีแมโครไวยากรณ์พิมพ์และวิธีการผลิตหนึ่งที่จะคิดว่าแมโครไวยากรณ์เหล่านี้คือเป็นการคำนวณแบบหลายขั้นตอน

ตัวอย่างอื่น ๆ :

  • m4เป็นหน่วยประมวลผลมาโครแบบสแตนด์อะโลนที่มีความซับซ้อน
  • TRAC
  • TAL ส่วนขยายมาโครที่มาพร้อมกับภาษาแอตทริบิวต์แม่แบบ
  • SMX: สำหรับหน้าเว็บ
  • ML / 1 (ภาษามาโครหนึ่ง)
  • วัตถุประสงค์ทั่วไป Macroprocessorเป็นรูปแบบตามบริบทที่ตรงกับการประมวลผลแมโครซึ่งสามารถอธิบายได้ว่าการรวมกันของการแสดงออกปกติ , EBNFและAWK [ ต้องการอ้างอิง ]
  • SAM76
  • troffและnroff : สำหรับการเรียงพิมพ์และการจัดรูปแบบการจัดการ Unix
  • CMS EXEC : สำหรับมาโครบรรทัดคำสั่งและมาโครแอปพลิเคชัน
  • EXEC 2ในConversational Monitor System (CMS): สำหรับมาโครบรรทัดคำสั่งและมาโครแอปพลิเคชัน
  • CLISTในตัวเลือกการแบ่งเวลา (TSO) ของ IBM : สำหรับมาโครบรรทัดคำสั่งและมาโครแอ็พพลิเคชัน
  • REXX : สำหรับมาโครบรรทัดคำสั่งและมาโครแอปพลิเคชันในเช่นAmigaOS , CMS, OS / 2 , TSO
  • SCRIPT : สำหรับการจัดรูปแบบเอกสาร
  • เชลล์ต่างๆสำหรับเช่นLinux

แอปพลิเคชันหลักบางตัวเขียนเป็นมาโครข้อความที่เรียกใช้โดยแอปพลิเคชันอื่นเช่นโดยXEDITใน CMS

ภาษาที่ฝังได้[ แก้ไข]

บางภาษาเช่นPHPสามารถฝังในข้อความรูปแบบอิสระหรือซอร์สโค้ดของภาษาอื่นได้ กลไกในการรับรู้ชิ้นส่วนโค้ด (ตัวอย่างเช่นการอยู่ในวงเล็บ<?phpและ?>) คล้ายกับภาษามาโครที่เป็นข้อความ แต่เป็นภาษาที่มีคุณสมบัติครบถ้วนและทรงพลังกว่ามาก

มาโครขั้นตอน[ แก้ไข]

มาโครในภาษาPL / Iเขียนด้วยชุดย่อยของ PL / I เอง: คอมไพเลอร์เรียกใช้ " คำสั่งก่อนตัวประมวลผล " ในเวลาคอมไพล์และผลลัพธ์ของการดำเนินการนี้จะเป็นส่วนหนึ่งของโค้ดที่คอมไพล์ ความสามารถในการใช้ภาษาขั้นตอนที่คุ้นเคยเนื่องจากภาษามาโครให้พลังมากกว่ามาโครการแทนที่ข้อความโดยเสียค่าใช้จ่ายของคอมไพเลอร์ที่ใหญ่กว่าและช้ากว่า

มาโครเฟรมของเทคโนโลยีเฟรมมีไวยากรณ์คำสั่งของตัวเอง แต่ยังสามารถมีข้อความในภาษาใดก็ได้ แต่ละเฟรมเป็นทั้งส่วนประกอบทั่วไปในลำดับชั้นของส่วนประกอบย่อยที่ซ้อนกันและโพรซีเดอร์สำหรับการรวมตัวเองเข้ากับเฟรมการประกอบย่อย (กระบวนการวนซ้ำที่แก้ไขความขัดแย้งในการรวมในส่วนของส่วนประกอบย่อยระดับที่สูงกว่า) เอาต์พุตเป็นเอกสารแบบกำหนดเองซึ่งโดยทั่วไปแล้วโมดูลซอร์สที่คอมไพล์ได้ กรอบเทคโนโลยีสามารถหลีกเลี่ยงการแพร่กระจายของส่วนประกอบที่คล้ายกัน แต่แตกต่างกันอย่างละเอียดปัญหาที่มี plagued พัฒนาซอฟต์แวร์ตั้งแต่การประดิษฐ์ของแมโครและที่ซับรูทีน

ส่วนใหญ่ภาษาแอสเซมบลีมีสิ่งอำนวยความสะดวกแมโครขั้นตอนที่มีประสิทธิภาพน้อยลงเช่นการอนุญาตให้บล็อกของรหัสจะซ้ำ N ครั้งสำหรับวงคลี่ ; แต่สิ่งเหล่านี้มีไวยากรณ์ที่แตกต่างจากภาษาแอสเซมบลีจริงโดยสิ้นเชิง

มาโครวากยสัมพันธ์[ แก้ไข]

ระบบมาโครเช่นตัวประมวลผลล่วงหน้า C ที่อธิบายไว้ก่อนหน้านี้ซึ่งทำงานในระดับของโทเค็นคำศัพท์ไม่สามารถรักษาโครงสร้างศัพท์ได้อย่างน่าเชื่อถือ ระบบมาโครวากยสัมพันธ์จะทำงานแทนที่ระดับโครงสร้างไวยากรณ์นามธรรมและรักษาโครงสร้างคำศัพท์ของโปรแกรมดั้งเดิมไว้ การใช้งานระบบมาโครวากยสัมพันธ์ที่ใช้กันอย่างแพร่หลายพบได้ในภาษาที่มีลักษณะคล้ายลิสป์ภาษาเหล่านี้เหมาะอย่างยิ่งสำหรับมาโครลักษณะนี้เนื่องจากไวยากรณ์ที่เหมือนกันในวงเล็บ (เรียกว่าS-expression). โดยเฉพาะอย่างยิ่งไวยากรณ์ที่เหมือนกันช่วยให้กำหนดการเรียกใช้มาโครได้ง่ายขึ้น มาโคร Lisp เปลี่ยนโครงสร้างโปรแกรมด้วยภาษาเต็มพร้อมใช้งานเพื่อแสดงการเปลี่ยนแปลงดังกล่าว ในขณะที่มาโครวากยสัมพันธ์มักพบในภาษาที่มีลักษณะคล้าย Lisp แต่ก็มีให้บริการในภาษาอื่นเช่นProlog , [6] Dylan , [7] Scala , [8] Nemerle , [9] Rust , [10] Elixir , [11 ] นิ่ม , [12] Haxe , [13]และจูเลีย [14]นอกจากนี้ยังมีให้บริการเป็นส่วนขยายของบุคคลที่สามสำหรับJavaScript , [15] C #และงูหลาม [16] [17]

มาโคร Lisp ต้น[ แก้ไข]

ก่อนที่ Lisp จะมีมาโครมันมีสิ่งที่เรียกว่าFEXPRsซึ่งเป็นตัวดำเนินการที่เหมือนฟังก์ชันซึ่งอินพุตไม่ใช่ค่าที่คำนวณโดยอาร์กิวเมนต์ แต่เป็นรูปแบบวากยสัมพันธ์ของอาร์กิวเมนต์และผลลัพธ์ของมันคือค่าที่จะใช้ในการคำนวณ กล่าวอีกนัยหนึ่ง FEXPRs ถูกนำไปใช้ในระดับเดียวกับ EVAL และมีหน้าต่างเข้าสู่เลเยอร์การประเมินเมตา โดยทั่วไปแล้วสิ่งนี้พบว่าเป็นแบบจำลองที่ยากที่จะหาเหตุผลได้อย่างมีประสิทธิภาพ [18]

ในปีพ. ศ. 2506 ทิโมธีฮาร์ทเสนอให้เพิ่มมาโครเป็น Lisp 1.5 ในAI Memo 57: คำจำกัดความของมาโครสำหรับ LISP [19]

มาโคร Anaphoric [ แก้ไข]

anaphoric macro คือมาโครการเขียนโปรแกรมประเภทหนึ่งที่จับภาพบางรูปแบบที่จัดมาให้กับมาโครโดยเจตนาซึ่ง anaphor อาจอ้างถึง (นิพจน์ที่อ้างถึงอื่น) มาโคร Anaphoric ปรากฏตัวครั้งแรกใน On Lisp ของ Paul Graham และชื่อของพวกมันเป็นการอ้างอิงถึง anaphora ทางภาษา - การใช้คำแทนคำก่อนหน้า

มาโครที่ถูกสุขอนามัย[ แก้ไข]

ในช่วงกลางทศวรรษที่แปดสิบเอกสารจำนวนหนึ่ง[20] [21] ได้แนะนำแนวคิดของการขยายมาโครที่ถูกสุขอนามัย ( syntax-rules) ซึ่งเป็นระบบที่ใช้รูปแบบซึ่งสภาพแวดล้อมทางวากยสัมพันธ์ของนิยามมาโครและการใช้มาโครมีความแตกต่างกันทำให้สามารถกำหนดมาโครและ ผู้ใช้ไม่ต้องกังวลเกี่ยวกับการดักจับตัวแปรโดยไม่ได้ตั้งใจ (เปรียบเทียบความโปร่งใสในการอ้างอิง ) แมโครถูกสุขลักษณะได้รับมาตรฐานสำหรับโครงการในR5RS , R6RSและR7RSมาตรฐาน จำนวนของการใช้งานของแมโครที่ถูกสุขอนามัยการแข่งขันอยู่เช่นsyntax-rules, syntax-caseเปลี่ยนชื่ออย่างชัดเจนและปิดประโยค ทั้งสองอย่างsyntax-rulesและsyntax-caseได้รับการกำหนดมาตรฐานตามโครงการ

เมื่อเร็ว ๆ นี้แร็กเก็ตได้รวมแนวคิดของมาโครที่ถูกสุขอนามัยเข้ากับ " หอคอยของผู้ประเมิน " เพื่อให้เวลาในการขยายทางวากยสัมพันธ์ของระบบมาโครหนึ่งเป็นรันไทม์ธรรมดาของโค้ดอีกบล็อกหนึ่ง[22]และแสดงวิธีการใช้การขยายและการแยกวิเคราะห์ ในภาษาที่ไม่มีวงเล็บ [23]

ภาษาอื่น ๆ นอกเหนือจาก Scheme อาจใช้มาโครที่ถูกสุขอนามัยหรือใช้ระบบที่ถูกสุขอนามัยเพียงบางส่วน ตัวอย่าง ได้แก่Scala , สนิม , ยาอายุวัฒนะ , จูเลีย , ดีแลน , สะเดาและNemerle

แอปพลิเคชัน[ แก้ไข]

ลำดับการประเมิน
ระบบมาโครมีการใช้งานที่หลากหลาย ความสามารถในการเลือกลำดับของการประเมินผล (ดูการประเมินแบบขี้เกียจและฟังก์ชันที่ไม่เข้มงวด ) ทำให้สามารถสร้างโครงสร้างทางวากยสัมพันธ์ใหม่ (เช่นโครงสร้างการควบคุม ) ซึ่งแยกไม่ออกจากที่สร้างขึ้นในภาษา ตัวอย่างเช่นในภาษาถิ่นของ Lisp ที่มีcondแต่ขาดifมันเป็นไปได้ที่จะกำหนดคำหลังในแง่ของการใช้มาโครในอดีต ตัวอย่างเช่น Scheme มีทั้งความต่อเนื่องและมาโครที่ถูกสุขอนามัยซึ่งช่วยให้โปรแกรมเมอร์สามารถออกแบบโครงสร้างการควบคุมของตนเองเช่นโครงสร้างการวนซ้ำและการออกก่อนกำหนดโดยไม่จำเป็นต้องสร้างเป็นภาษา
ภาษาย่อยของข้อมูลและภาษาเฉพาะโดเมน
ถัดไปมาโครช่วยให้สามารถกำหนดภาษาข้อมูลที่คอมไพล์เป็นรหัสได้ทันทีซึ่งหมายความว่าโครงสร้างเช่นเครื่องของรัฐสามารถนำไปใช้ในลักษณะที่เป็นธรรมชาติและมีประสิทธิภาพ [24]
โครงสร้างการผูก
นอกจากนี้ยังสามารถใช้มาโครเพื่อแนะนำโครงสร้างการผูกใหม่ได้อีกด้วย ตัวอย่างที่เป็นที่รู้จักมากที่สุดคือการแปลงletไปสู่การประยุกต์ใช้ฟังก์ชันเป็นชุดของอาร์กิวเมนต์

Felleisenคาดเดา[25]ว่าทั้งสามประเภทนี้ประกอบกันเป็นการใช้มาโครที่ถูกต้องตามกฎหมายหลักในระบบดังกล่าว คนอื่น ๆ เสนอให้ใช้มาโครทางเลือกอื่นเช่นมาโครอะนาฟอริกในระบบมาโครที่ไม่ถูกสุขลักษณะหรือยอมให้มีการเปลี่ยนแปลงที่ไม่ถูกสุขลักษณะ

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

มาโครสำหรับซอฟต์แวร์ที่ไม่ขึ้นกับเครื่อง[ แก้ไข]

โดยปกติแล้วมาโครจะใช้เพื่อแมปสตริงสั้น ๆ (การเรียกมาโคร) กับลำดับคำสั่งที่ยาวขึ้น การใช้มาโครอีกวิธีหนึ่งที่ใช้กันน้อยกว่าคือการทำสิ่งที่ตรงกันข้าม: เพื่อแมปลำดับคำสั่งกับสตริงมาโคร นี่คือวิธีการที่ดำเนินการโดย Stage2 มือถือ Programming ระบบซึ่งใช้คอมไพเลอร์แมโครพื้นฐาน (เรียกว่า SIMCMP) เพื่อ map การเรียนการสอนเฉพาะชุดของคอมพิวเตอร์ที่กำหนดให้คู่เครื่องอิสระแมโคร แอปพลิเคชัน (โดยเฉพาะอย่างยิ่งคอมไพเลอร์) ที่เขียนในมาโครที่ไม่ขึ้นกับเครื่องเหล่านี้สามารถรันได้โดยไม่มีการเปลี่ยนแปลงบนคอมพิวเตอร์ใด ๆ ที่ติดตั้งมาโครคอมไพเลอร์พื้นฐาน แอปพลิเคชันแรกที่ทำงานในบริบทดังกล่าวเป็นคอมไพเลอร์มาโครที่ซับซ้อนและมีประสิทธิภาพมากขึ้นซึ่งเขียนด้วยภาษามาโครที่ไม่ขึ้นกับเครื่อง มาโครคอมไพเลอร์นี้ถูกนำไปใช้กับตัวมันเองในไฟล์bootstrap fashion เพื่อสร้างเวอร์ชันที่รวบรวมและมีประสิทธิภาพมากขึ้นของตัวเอง ข้อดีของวิธีนี้คือสามารถย้ายแอปพลิเคชันที่ซับซ้อนจากคอมพิวเตอร์เครื่องหนึ่งไปยังคอมพิวเตอร์เครื่องอื่นโดยใช้ความพยายามเพียงเล็กน้อย (สำหรับสถาปัตยกรรมเครื่องเป้าหมายแต่ละเครื่องเพียงแค่การเขียนมาโครคอมไพเลอร์พื้นฐาน) [26] [27]การถือกำเนิดของภาษาโปรแกรมสมัยใหม่โดยเฉพาะอย่างยิ่งCซึ่งคอมไพเลอร์มีอยู่ในคอมพิวเตอร์แทบทุกเครื่องทำให้แนวทางดังกล่าวไม่จำเป็น นี่เป็น แต่หนึ่งในกรณีแรก (ถ้าไม่ใช่คนแรก) ของคอมไพเลอร์ร่วมมือ

ภาษาแอสเซมบลี[ แก้]

ในขณะที่คำสั่งแมโครสามารถกำหนดโดยโปรแกรมเมอร์สำหรับชุดคำสั่งโปรแกรมแอสเซมเบลอร์เนทีฟใด ๆ โดยทั่วไปแล้วมาโครจะเชื่อมโยงกับไลบรารีแมโครที่ส่งมาพร้อมกับระบบปฏิบัติการที่อนุญาตให้เข้าถึงฟังก์ชันระบบปฏิบัติการเช่น

  • การเข้าถึงอุปกรณ์ต่อพ่วงโดยวิธีการเข้าถึง (รวมถึงมาโครเช่นเปิดปิดอ่านและเขียน)
  • ฟังก์ชันระบบปฏิบัติการเช่น ATTACH, WAIT และ POST สำหรับการสร้างงานย่อยและการซิงโครไนซ์ [28]โดยทั่วไปแล้วมาโครดังกล่าวจะขยายเป็นโค้ดที่เรียกใช้งานได้เช่นสำหรับคำสั่งแมโคร EXIT
  • รายการคำสั่งกำหนดค่าคงที่เช่นสำหรับมาโครDCB - DTF (กำหนดไฟล์) สำหรับDOS [29]หรือการรวมกันของรหัสและค่าคงที่โดยมีรายละเอียดของการขยายขึ้นอยู่กับพารามิเตอร์ของคำสั่งมาโคร (เช่น เป็นข้อมูลอ้างอิงไปยังไฟล์และพื้นที่ข้อมูลสำหรับคำสั่งอ่าน);
  • รหัสปฏิบัติการมักจะสิ้นสุดในคำสั่งbranch และ link registerเพื่อเรียกรูทีนหรือคำสั่งหัวหน้างานเรียกใช้ฟังก์ชันระบบปฏิบัติการโดยตรง

ในระบบปฏิบัติการรุ่นเก่าเช่นที่ใช้บนเมนเฟรมของ IBM ฟังก์ชันการทำงานของระบบปฏิบัติการเต็มรูปแบบจะใช้ได้เฉพาะกับโปรแกรมภาษาแอสเซมเบลอร์เท่านั้นไม่ใช่สำหรับโปรแกรมภาษาระดับสูง (เว้นแต่จะใช้รูทีนย่อยภาษาแอสเซมบลีแน่นอน) เนื่องจากคำสั่งแมโครมาตรฐานไม่เสมอไป มีคู่ในกิจวัตรที่พร้อมใช้งานสำหรับภาษาระดับสูง

ประวัติ[ แก้ไข]

ในช่วงกลางทศวรรษ 1950 เมื่อการเขียนโปรแกรมภาษาแอสเซมบลีถูกใช้โดยทั่วไปในการเขียนโปรแกรมสำหรับคอมพิวเตอร์ดิจิทัลการใช้คำสั่งมาโครเริ่มต้นขึ้นเพื่อวัตถุประสงค์หลัก 2 ประการคือเพื่อลดปริมาณการเข้ารหัสโปรแกรมที่ต้องเขียนโดยการสร้างคำสั่งภาษาแอสเซมบลีหลายคำสั่ง จากคำสั่งมาโครหนึ่งคำสั่งและเพื่อบังคับใช้มาตรฐานการเขียนโปรแกรมเช่นการระบุคำสั่งอินพุต / เอาต์พุตในรูปแบบมาตรฐาน[30]คำสั่งมาโครเป็นขั้นตอนกลางอย่างมีประสิทธิภาพระหว่างการเขียนโปรแกรมภาษาแอสเซมบลีและภาษาโปรแกรมระดับสูงที่ตามมาเช่นFORTRANและCOBOL. การติดตั้งการเขียนโปรแกรมที่เก่าแก่ที่สุดสองรายการในการพัฒนา "ภาษามาโคร" สำหรับคอมพิวเตอร์ IBM 705 คือที่ Dow Chemical Corp. ในเดลาแวร์และหน่วยบัญชาการทางอากาศสำนักงานโลจิสติกส์ขีปนาวุธขีปนาวุธในแคลิฟอร์เนีย คำสั่งมาโครที่เขียนในรูปแบบของภาษาแอสเซมบลีเป้าหมายจะถูกประมวลผลโดยมาโครคอมไพเลอร์ซึ่งเป็นตัวประมวลผลล่วงหน้าไปยังแอสเซมเบลอร์เพื่อสร้างคำสั่งภาษาแอสเซมบลีอย่างน้อยหนึ่งคำสั่งที่จะประมวลผลต่อไปโดยโปรแกรมแอสเซมเบลอร์ที่จะแปล คำแนะนำภาษาแอสเซมบลีเป็นคำแนะนำภาษาเครื่อง[31]

ในช่วงปลายทศวรรษ 1950 ภาษามาโครตามมาด้วย Macro Assemblers นี่คือการรวมกันของทั้งสองอย่างที่โปรแกรมหนึ่งทำหน้าที่ทั้งสองอย่างของมาโครพรีโปรเซสเซอร์และแอสเซมเบลอร์ในแพ็คเกจเดียวกัน [31] [การตรวจสอบล้มเหลว ]

ในปีพ. ศ. 2502 ดักลาสอีอีสต์วูดและดักลาสแมคอิลรอยจากBell Labs ได้นำมาโครแบบมีเงื่อนไขและแบบวนซ้ำมาใช้ในแอสเซมเบลอร์SAP ที่เป็นที่นิยม[32]สร้างสิ่งที่เรียกว่า Macro SAP [33] McIlroy 1960 กระดาษน้ำเชื้อในพื้นที่ของการขยายใด ๆ (รวมทั้งระดับสูง ) เขียนโปรแกรมภาษาผ่านการประมวลผลแมโคร [34] [32]

Macro Assemblers อนุญาตให้โปรแกรมเมอร์ภาษาแอสเซมบลีใช้ภาษามาโครของตนเองและอนุญาตให้มีการเคลื่อนย้ายโค้ดอย่าง จำกัด ระหว่างเครื่องสองเครื่องที่ใช้ CPU เดียวกัน แต่มีระบบปฏิบัติการที่แตกต่างกันตัวอย่างเช่น MSDOS และ CPM-86 เวอร์ชันแรก ๆ จำเป็นต้องเขียนไลบรารีแมโครสำหรับเครื่องเป้าหมายแต่ละเครื่อง แต่ไม่ใช่โปรแกรมภาษาแอสเซมบลีโดยรวม โปรดทราบว่าแอสเซมเบลอร์มาโครที่มีประสิทธิภาพมากขึ้นอนุญาตให้ใช้โครงสร้างแอสเซมบลีแบบมีเงื่อนไขในคำสั่งแมโครที่สามารถสร้างโค้ดที่แตกต่างกันบนเครื่องต่างๆหรือระบบปฏิบัติการที่แตกต่างกันซึ่งช่วยลดความจำเป็นในการใช้ไลบรารีหลาย ๆ[ ต้องการอ้างอิง ]

ในช่วงทศวรรษที่ 1980 และต้นทศวรรษที่ 1990 เดสก์ท็อปพีซีใช้งานได้เพียงไม่กี่ MHz และรูทีนภาษาแอสเซมบลีมักใช้เพื่อเร่งความเร็วโปรแกรมที่เขียนด้วยภาษา C, Fortran, Pascal และอื่น ๆ ในขณะนั้นภาษาเหล่านี้ใช้รูปแบบการเรียกที่แตกต่างกัน มาโครสามารถใช้เพื่อเชื่อมต่อกับรูทีนที่เขียนด้วยภาษาแอสเซมบลีไปยังส่วนหน้าของแอพพลิเคชั่นที่เขียนด้วยภาษาเกือบทุกภาษา อีกครั้งรหัสภาษาแอสเซมบลีพื้นฐานยังคงเหมือนเดิมมีเพียงไลบรารีมาโครเท่านั้นที่จำเป็นในการเขียนสำหรับภาษาเป้าหมายแต่ละภาษา[ ต้องการอ้างอิง ]

ในระบบปฏิบัติการสมัยใหม่เช่น Unix และอนุพันธ์การเข้าถึงระบบปฏิบัติการมีให้ผ่านรูทีนย่อยซึ่งโดยปกติจะจัดเตรียมโดยไลบรารีแบบไดนามิก ภาษาระดับสูงเช่น C ช่วยให้สามารถเข้าถึงฟังก์ชันระบบปฏิบัติการได้อย่างครอบคลุมทำให้ไม่ต้องใช้โปรแกรมภาษาแอสเซมเบลอร์สำหรับฟังก์ชันดังกล่าว [ ต้องการอ้างอิง ]

ดูเพิ่มเติม[ แก้ไข]

  • มาโคร Anaphoric
  • ภาษาแอสเซมบลี§มาโคร (ที่มาของแนวคิดเรื่องมาโคร)
  • การเขียนโปรแกรมที่ขยายได้
  • มาโครที่ถูกสุขอนามัย
  • การเขียนโปรแกรมโดยการสาธิต  - เทคนิคการสอนคอมพิวเตอร์หรือหุ่นยนต์พฤติกรรมใหม่ ๆ
  • การแก้ไขสตริง  - การแทนที่ตัวยึดตำแหน่งในสตริงด้วยค่า
  • วิทยาศาสตร์คอมพิวเตอร์และวิศวกรรม
  • วิทยาศาสตร์คอมพิวเตอร์

อ้างอิง[ แก้ไข]

  1. ^ Oxford English Dictionary , sv macro , macro-instructionและ macro-
  2. ^ กรีนวาลด์เออร์วิน D. ; Maureen Kane (เมษายน 2502) "ระบบ Share 709: การเขียนโปรแกรมและการปรับเปลี่ยน" วารสาร ACM . นิวยอร์กนิวยอร์กสหรัฐอเมริกา: ACM 6 (2): 128–133 ดอย : 10.1145 / 320964.320967 . S2CID  27424222 การใช้มาโครโปรแกรมเมอร์ที่สำคัญอย่างหนึ่งคือการประหยัดเวลาและข้อผิดพลาดประเภทธุรการในการเขียนลำดับคำสั่งซึ่งมักจะทำซ้ำในหลักสูตรของโปรแกรม
  3. ^ Strachey, คริส (ตุลาคม 1965) "Macrogenerator วัตถุประสงค์ทั่วไป" . วารสารคอมพิวเตอร์ . 8 (3): 225–241. ดอย : 10.1093 / comjnl / 8.3.225 .
  4. ^ "Runescape: ใหญ่เกมผจญภัยออนไลน์โดย Jagex จำกัด" สืบค้นเมื่อ2008-04-03 .
  5. ^ "สคริปต์: กลุ่มออนไลน์" www.vim.org .
  6. ^ "เปิดฉากแมโคร" www.metalevel.at . สืบค้นเมื่อ2021-04-05 .
  7. ^ "The Dylan มาโครระบบ - เปิดดีแลน" opendylan.org . สืบค้นเมื่อ2021-04-05 .
  8. ^ "Def แมโคร" เอกสารสกาล่า สืบค้นเมื่อ2021-04-05 .
  9. ^ "เกี่ยวกับ - การเขียนโปรแกรมภาษา Nemerle เว็บไซต์อย่างเป็นทางการ" nemerle.org . สืบค้นเมื่อ2021-04-05 .
  10. ^ "แมโคร - สนิม Programming Language" doc.rust-lang.org . สืบค้นเมื่อ2021-04-05 .
  11. ^ "มาโคร" elixir-lang.github.com . สืบค้นเมื่อ2021-04-05 .
  12. ^ "มาโคร" nim-lang.org . สืบค้นเมื่อ2021-04-05 .
  13. ^ "Macros". Haxe - The Cross-platform Toolkit.
  14. ^ "Metaprogramming · The Julia Language". docs.julialang.org. Retrieved 2021-04-05.
  15. ^ "Sweet.js - Hygienic Macros for JavaScript". www.sweetjs.org.
  16. ^ "Macros in Python: quasiquotes, case classes, LINQ and more!: lihaoyi/macropy". 7 February 2019 – via GitHub.
  17. ^ "LeMP Home Page · Enhanced C#". ecsharp.net.
  18. ^ Marshall, Joe. "untitled email". Retrieved May 3, 2012.
  19. ^ "AIM-057, MACRO Definitions for LISP, Timothy P. Hart". hdl:1721.1/6111. Cite journal requires |journal= (help)
  20. ^ Kohlbecker, Eugene; Friedman, Daniel; Felleisen, Matthias; Duba, Bruce. "Hygienic Macro Expansion". doi:10.1145/319838.319859.
  21. ^ [1] Clinger, Rees. "Macros that Work"
  22. ^ Flatt, Matthew. "Composable and compilable macros: you want it when?" (PDF).
  23. ^ Rafkind, Jon; Flatt, Matthew. "Honu: Syntactic Extension for Algebraic Notation through Enforestation" (PDF).
  24. ^ "Automata via Macros". cs.brown.edu.
  25. ^ [2], Matthias Felleisen, LL1 mailing list posting
  26. ^ Orgass, Richard J.; William M. Waite (September 1969). "A base for a mobile programming system". Communications of the ACM. New York, NY, USA: ACM. 12 (9): 507–510. doi:10.1145/363219.363226. S2CID 8164996.
  27. ^ Waite, William M. (July 1970). "The mobile programming system: STAGE2". Communications of the ACM. New York, NY, USA: ACM. 13 (7): 415–421. doi:10.1145/362686.362691. S2CID 11733598.
  28. ^ "University of North Florida" (PDF).
  29. ^ "DTF (DOS/VSE)".
  30. ^ "IBM Knowledge Center". IBM Knowledge Center.
  31. ^ a b "Assembler Language Macro Instructions". Cisco.
  32. ^ a b Holbrook, Bernard D.; Brown, W. Stanley. "Computing Science Technical Report No. 99 – A History of Computing Research at Bell Laboratories (1937–1975)". Bell Labs. Archived from the original on September 2, 2014. Retrieved February 2, 2020.
  33. ^ "Macro SAP – Macro compiler modification of SAP". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 13, 2008.
  34. ^ Layzell, P. (1985). "The History of Macro Processors in Programming Language Extensibility". The Computer Journal. 28 (1): 29–33. doi:10.1093/comjnl/28.1.29.

External links[edit]

  • How to write Macro Instructions
  • Rochester Institute of Technology, Professors Powerpoint