คำถามติดแท็ก code-generation

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

22
โปรแกรมอัตโนมัติ: เขียนโค้ดที่เขียนรหัส [ปิด]
หลังจากอ่านหนังสือThe Pragmatic Programmerหนึ่งในข้อโต้แย้งที่ฉันพบว่าน่าสนใจที่สุดคือ "เขียนโค้ดที่เขียนโค้ด" ฉันพยายามค้นหาคำอธิบายหรือบทความเกี่ยวกับเรื่องนี้ทางอินเทอร์เน็ตและในขณะที่ฉันพบบทความที่ดีเกี่ยวกับเรื่องนี้ฉันยังไม่พบการติดตั้งโค้ดเฉพาะหรือตัวอย่างที่ดี ฉันรู้สึกว่ามันยังไม่เป็นที่ถกเถียงกันทั่วไปอะไรบางอย่างที่ขาดเอกสารหรือมันไม่ได้เป็นที่ยอมรับของคนจำนวนมากและฉันต้องการทราบเพิ่มเติมเกี่ยวกับเรื่องนี้ คุณคิดยังไงกับเรื่องนี้? เป็นสิ่งที่จะเพิ่มประสิทธิภาพการทำงานของคุณหรือไม่ มีแหล่งข้อมูลที่ดีในเรื่องอะไรบ้างในหนังสือบล็อกบล๊อคสไลด์ ฯลฯ ตัวอย่างโค้ดบางส่วนจะช่วยให้ฉันเข้าใจการใช้งานได้ดีขึ้น นี่คือหน้า wikiของหัวเรื่องด้วยเทคนิคการเขียนโปรแกรมที่เกี่ยวข้องเช่น Meta Programming, Generative Programming และ Code Generation

6
เหตุใดโปรแกรมจึงใช้สแตกการโทรหากมีการเรียกใช้ฟังก์ชันซ้อนกัน?
ทำไมคอมไพเลอร์ถึงไม่มีโปรแกรมเช่นนี้: function a(b) { return b^2 }; function c(b) { return a(b) + 5 }; และแปลงเป็นโปรแกรมเช่นนี้: function c(b) { return b^2 + 5 }; ด้วยเหตุนี้จึงไม่จำเป็นต้องให้คอมพิวเตอร์จำที่อยู่ส่งคืนของ c (b) ฉันคิดว่าพื้นที่ฮาร์ดดิสก์ที่เพิ่มขึ้นและ RAM ที่จำเป็นในการจัดเก็บโปรแกรมและสนับสนุนการรวบรวม (ตามลำดับ) คือเหตุผลที่เราใช้ call stack ถูกต้องไหม

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

2
การตัดสินใจออกแบบ - ทำไมต้องสร้าง <p> โดยไม่มี </p>
TL; DR บางโปรแกรมที่ใช้กันอย่างแพร่หลาย, ซึ่งสร้าง html, จะสร้างแท็กเปิดย่อหน้าเท่านั้น, และไม่ปิดโปรแกรม, โดยสันนิษฐานว่าเบราว์เซอร์จะปิดย่อหน้าอย่างเหมาะสม. บนใบหน้าของมันดูเหมือนว่าฉันว่าเบราว์เซอร์จะปิดย่อหน้าอย่างถูกต้องไม่ถูกต้อง การตีความของฉันถูกต้องหรือไม่ โดยทั่วไปแล้วการแลกเปลี่ยนอะไรที่เกี่ยวข้องกับการตัดสินใจประเภทนี้? การค้นหาผ่านซอร์สโค้ด moinmoin บรรทัดของรหัสต่อไปนี้ดึงดูดสายตาของฉัน: # We only open those tags and let the browser auto-close them: _auto_closing_tags = set(['p']) ( แหล่งที่มา ) หลังจากอ่านส่วนที่เหลือของการนำไปใช้ฉันเชื่อมั่นว่าใช่แน่นอนเมื่อ moinmoin สร้างรหัส html สำหรับหน้าใดหน้าหนึ่งของมันมันจะสร้างแท็กเปิดย่อหน้าอย่างถูกต้องตามความเหมาะสมในขณะเดียวกันก็ตั้งใจหลีกเลี่ยง แท็กปิดย่อหน้า (แม้จะสามารถทำได้เล็กน้อย) สำหรับกรณีการใช้งานที่เฉพาะเจาะจงของฉันค่อนข้างผิดปกติพฤติกรรมนี้ไม่ถูกต้อง ฉันถูกล่อลวงให้ส่งรายงานข้อผิดพลาดและ / หรือเปลี่ยนพฤติกรรม อย่างไรก็ตามดูเหมือนว่าการตัดสินใจการออกแบบนี้ได้ทำขึ้นมาอย่างพิถีพิถันแล้ว ฉันไม่เก่งพอในความซับซ้อนของมาตรฐาน html หรือการใช้งานเบราว์เซอร์ต่าง ๆ เพื่อให้สามารถบอกได้ว่านี่เป็นพฤติกรรมที่ถูกต้องโดยทั่วไปและฉันมีความรู้สึกว่าสัญชาตญาณของฉันในการแก้ไข / …

4
เครื่องสร้างรหัสอัตโนมัติ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เพื่อนร่วมงานคนหนึ่งของฉันชอบใช้เครื่องสร้างรหัสอัตโนมัติซึ่งสร้างรหัสจำนวนมากที่มีเอกสารไม่ดีและยากต่อการดูแลรักษา ค่าใช้จ่ายของการใช้เครื่องสร้างรหัสคุ้มค่ากับความยุ่งยากในการบำรุงรักษาหรือไม่เพื่อลดระยะเวลาในการสร้าง?

2
กรอบการพัฒนาภาษาควรจะใช้ง่ายแค่ไหน?
นี่เป็นส่วนหนึ่งของชุดคำถามที่มุ่งเน้นโครงการที่เรียกว่า Abstraction Project ซึ่งมีจุดประสงค์เพื่อสรุปแนวคิดที่ใช้ในการออกแบบภาษาในรูปแบบของกรอบ หน้าอื่นที่เกี่ยวข้องกับมันที่เกี่ยวข้องกับการพิมพ์ที่มีโครงสร้างที่สามารถดูได้ที่นี่ เมตาหัวข้อที่เกี่ยวข้องกับสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับกรอบและสถานที่ที่เหมาะสมในการโพสต์สามารถพบได้ที่นี่ มันง่ายแค่ไหนที่จะใช้ Framework การพัฒนาภาษา? ฉันได้เขียนกรอบการสร้างรหัสขนาดใหญ่ซึ่งรวมถึงความสามารถในการส่งผลลัพธ์ไปยังคอมไพเลอร์เฉพาะภาษา หัวข้อที่ใช้งานง่ายขึ้นมาจากตัวอย่างหนึ่งของกรอบงาน: CodeDOM หรือโมเดลเอกสารวัตถุรหัส มันเป็นกรอบงานที่เขียนโดย Microsoft ที่อธิบายโครงสร้างรหัสทั่วไป แต่โดยทั่วไปแล้วมักจะออกมาก (การแสดงออกทางสีหน้า) และมีแนวโน้มที่จะเป็นนามธรรมเล็กน้อยในการเป็นตัวแทนของการสร้างบางอย่างเพื่อการปล่อยรหัสไม่ดีอย่างจริงจัง CodeDOM ไม่ดีจัดการเปล่งPrivateImplementationTypeบนCodeMemberMethodเมื่อชนิดที่ใช้เป็นอินเตอร์เฟซทั่วไป CodeDOM เป็นเหตุผลดั้งเดิมของฉันในการเขียนโปรแกรมสร้างรหัสเครื่องแรก สิ่งหนึ่งที่ฉันพยายามทำเพื่อลดความซับซ้อนของเฟรมเวิร์กคือลดจำนวนงานที่คุณต้องทำบางอย่างและมุ่งเน้นไปที่การทำงานกับประเภทที่เฉพาะเจาะจงซึ่งประกอบไปด้วยการกระทำเหล่านั้น นี่คือการเปรียบเทียบแบบเคียงข้างกันว่าเฟรมเวิร์กที่ฉันเขียนนั้นทำงานอย่างไร: //Truncated... /* * * From a project that generates a lexer, this is the * state-&gt;state transition character range selection logic. * */ var nextChar …

5
การสร้างคลาส Java ด้วยพารามิเตอร์ค่าเวลาคอมไพล์
พิจารณาสถานการณ์ที่คลาสใช้พฤติกรรมพื้นฐานวิธีการและอื่น ๆ แต่คลาสที่แตกต่างกันของคลาสนั้นอาจมีอยู่สำหรับการใช้ที่แตกต่างกัน ในกรณีเฉพาะของฉันฉันมีเวกเตอร์ (เวกเตอร์เรขาคณิตไม่ใช่รายการ) และเวกเตอร์นั้นสามารถใช้ได้กับพื้นที่ยูคลิดมิติ N- มิติใด ๆ (1 มิติ, 2 มิติ, ... ) คลาส / ประเภทนี้สามารถกำหนดได้อย่างไร? นี่จะเป็นเรื่องง่ายใน C ++ ที่เทมเพลตของคลาสสามารถมีค่าจริงเป็นพารามิเตอร์ได้ แต่เราไม่มีความหรูหราใน Java ทั้งสองวิธีที่ฉันสามารถคิดได้ว่าสามารถนำมาใช้เพื่อแก้ปัญหานี้คือ: มีการดำเนินการของแต่ละกรณีที่เป็นไปได้ในเวลารวบรวม public interface Vector { public double magnitude(); } public class Vector1 implements Vector { public final double x; public Vector1(double x) { this.x = …

3
การเขียนคอมไพเลอร์คอมไพเลอร์ - ความเข้าใจด้านการใช้งานและคุณสมบัติ
นี่เป็นส่วนหนึ่งของชุดคำถามที่มุ่งเน้นไปที่โครงการน้องกับโครงการ Abstraction ซึ่งมีจุดมุ่งหมายเพื่อสรุปแนวคิดที่ใช้ในการออกแบบภาษาในรูปแบบของกรอบ โปรเจ็กต์น้องสาวเรียกว่า OILexer ซึ่งมีวัตถุประสงค์เพื่อสร้างตัวแยกวิเคราะห์จากไฟล์ไวยากรณ์โดยไม่ต้องใช้การฉีดโค๊ดในการจับคู่ บางหน้าอื่น ๆ ที่เกี่ยวข้องกับคำถามเหล่านี้เกี่ยวข้องกับการพิมพ์โครงสร้างสามารถดูได้ที่นี่และความสะดวกในการใช้งานที่พบที่นี่ เมตาหัวข้อที่เกี่ยวข้องกับสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับกรอบและสถานที่ที่เหมาะสมในการโพสต์สามารถพบได้ที่นี่ ฉันมาถึงจุดที่ฉันจะเริ่มแยกต้นไม้แยกออกจากไวยากรณ์ที่กำหนดตามด้วย Recursive Descent parser ซึ่งใช้ DFA เพื่อแยกแยะเส้นทางข้างหน้า (คล้ายกับ ANTLR 4's LL (*)) ดังนั้นฉันจึง คิดว่าฉันจะเปิดมันเพื่อรับข้อมูลเชิงลึก ในคอมไพเลอร์ตัวแยกวิเคราะห์คุณลักษณะชนิดใดที่เหมาะที่สุด? จนถึงตอนนี้เป็นภาพรวมคร่าวๆของสิ่งที่นำไปใช้: แม่แบบ ดูการคาดการณ์ล่วงหน้ารู้ว่าอะไรถูกต้อง ณ จุดที่กำหนด Rule 'Deliteralization' ใช้ตัวอักษรในกฎและแก้ไขโทเค็นที่มา Automata ของ Nondeterministic Automata ที่กำหนด เครื่องสถานะศัพท์ง่ายสำหรับการรับรู้โทเค็น วิธีอัตโนมัติของ Token: สแกน - มีประโยชน์สำหรับความคิดเห็น: ความคิดเห็น: = "/ *" สแกน ("* …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.