คำถามติดแท็ก compiler-construction

แท็กคอมไพเลอร์ - ก่อสร้างควรนำไปใช้กับคำถามที่เกี่ยวข้องกับการเขียนโปรแกรมของคอมไพเลอร์หรือคำถามเกี่ยวกับรายละเอียดการทำงานภายในของคอมไพเลอร์ อย่าใช้สำหรับคำถามเกี่ยวกับ * ใช้ * คอมไพเลอร์เฉพาะหรือข้อผิดพลาดในการรวบรวม

16
ตัวแปรสแตติกเก็บไว้ที่ไหนใน C และ C ++
ในส่วนใด (.BSS, .DATA, อื่น ๆ ) ของไฟล์ที่เรียกใช้งานเป็นตัวแปรสแตติกที่เก็บไว้เพื่อไม่ให้มีการชนกันของชื่อ? ตัวอย่างเช่น: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; printf("%d,%d", foo, bar); printf("%d, %d", foo, bar); } } หากฉันรวบรวมทั้งไฟล์และเชื่อมโยงไปยังไฟล์หลักที่เรียกใช้ …

8
รวบรวมด้วย g ++ โดยใช้หลายแกน
คำถามด่วน: ธงคอมไพเลอร์คืออะไรที่อนุญาตให้ g ++ วางไข่หลายอินสแตนซ์ของตัวเองเพื่อรวบรวมโครงการขนาดใหญ่ได้เร็วขึ้น (เช่นไฟล์ต้นฉบับ 4 ไฟล์ในเวลาเดียวกันสำหรับ CPU แบบมัลติคอร์)?

4
คอมไพเลอร์ C # ตรวจจับประเภท COM ได้อย่างไร
แก้ไข:ฉันได้เขียนผลขึ้นเป็นบล็อกโพสต์ คอมไพเลอร์ C # ใช้ COM ประเภทค่อนข้างน่าอัศจรรย์ ตัวอย่างเช่นคำสั่งนี้ดูเหมือนปกติ ... Word.Application app = new Word.Application(); ... จนกว่าคุณจะรู้ว่านั่นApplicationคือส่วนต่อประสาน การเรียกตัวสร้างบนอินเทอร์เฟซหรือไม่ Yoiks! นี้จริงได้รับการแปลเป็นโทรไปType.GetTypeFromCLSID()และอื่น ๆ Activator.CreateInstanceเพื่อ นอกจากนี้ใน C # 4 คุณสามารถใช้อาร์กิวเมนต์ที่ไม่อ้างอิงสำหรับrefพารามิเตอร์และคอมไพเลอร์เพิ่งเพิ่มตัวแปรท้องถิ่นที่จะผ่านการอ้างอิงโดยยกเลิกผลลัพธ์: // FileName parameter is *really* a ref parameter app.ActiveDocument.SaveAs(FileName: "test.doc"); (ใช่มีข้อโต้แย้งจำนวนมากหายไปพารามิเตอร์ตัวเลือกไม่ดีใช่ไหม :) ฉันพยายามตรวจสอบพฤติกรรมของคอมไพเลอร์และฉันไม่ได้ปลอมส่วนแรก ฉันสามารถทำส่วนที่สองโดยไม่มีปัญหา: using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; [ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface …

11
แยกไฟล์. py อ่าน AST ปรับเปลี่ยนแล้วเขียนรหัสต้นฉบับที่แก้ไขแล้ว
ฉันต้องการแก้ไขรหัสต้นฉบับของโปรแกรมแบบหลาม โดยทั่วไปฉันต้องการอ่าน.pyไฟล์สร้างASTแล้วเขียนกลับรหัสต้นฉบับของ Python ที่แก้ไขแล้ว (เช่น.pyไฟล์อื่น) มีวิธีการที่จะแยก / รหัสที่มาหลามรวบรวมโดยใช้โมดูลหลามมาตรฐานเช่นมีหรือast compilerอย่างไรก็ตามฉันไม่คิดว่าพวกเขาจะสนับสนุนวิธีการแก้ไขซอร์สโค้ด (เช่นลบการประกาศฟังก์ชั่นนี้) แล้วเขียนกลับรหัสต้นฉบับไพ ธ อน UPDATE: เหตุผลที่ฉันต้องการจะทำคือผมอยากจะเขียนห้องสมุดทดสอบการกลายพันธุ์สำหรับหลามส่วนใหญ่โดยการลบงบ / สำนวน rerunning การทดสอบและเห็นสิ่งที่แบ่ง

6
คอมไพเลอร์แรกเขียนอย่างไร
ฉันได้ยินเกี่ยวกับไก่และไข่และรองเท้าบู๊ต ฉันมีคำถามสองสามข้อ อะไรเขียนคอมไพเลอร์แรกที่แปลงบางสิ่งเป็นคำสั่งเลขฐานสอง แอสเซมบลีที่รวบรวมหรือแปลเป็นคำแนะนำแบบไบนารีหรือไม่ ... ฉันคิดว่ามันยากที่จะเชื่อว่าพวกเขาเขียนคอมไพเลอร์เป็นเลขฐานสอง

3
คอมไพเลอร์ C # เขียนด้วยภาษาใด?
ฉันดูซอร์สโค้ดที่http://referencesource.microsoft.com/และปรากฏว่าซอร์สโค้ดทั้งหมดอยู่ใน C # ฉันยังดูซอร์สโค้ดสำหรับแพลตฟอร์มคอมไพเลอร์ C # ใหม่ ( Roslyn ) และยังอยู่ใน C # เป็นไปได้อย่างไร? คอมไพเลอร์ภาษา C # เขียนเป็น C # หรือไม่ หรือฉันขาดอะไรบางอย่างที่ชัดเจน? ถ้าคอมไพเลอร์ C # เขียนใน C # แล้วมันทำงานอย่างไร

2
อะไรคือความแตกต่างระหว่าง sjlj vs dwarf vs seh?
ฉันหาข้อมูลไม่เพียงพอที่จะตัดสินใจว่าฉันควรใช้คอมไพเลอร์ใดในการรวบรวมโครงการของฉัน มีหลายโปรแกรมในคอมพิวเตอร์ที่ต่างกันจำลองกระบวนการ บน Linux ฉันใช้ GCC ทุกอย่างยอดเยี่ยม ฉันสามารถเพิ่มประสิทธิภาพรหัสมันรวบรวมอย่างรวดเร็วและใช้หน่วยความจำไม่มาก ฉันทำมาตรฐานของตัวเองด้วยคอมไพเลอร์ MSVC และ GCC หลังจากนั้นหนึ่งสร้างไบนารีเร็วขึ้นเล็กน้อย (สำหรับแต่ละ subar Architecture) แม้ว่าเวลาในการรวบรวมจะมากกว่า MSVC ดังนั้นฉันจึงตัดสินใจใช้ MinGW แต่ไม่พบคำอธิบายใด ๆ เกี่ยวกับวิธีการจัดการข้อยกเว้นและการใช้งานใน MinGW ฉันสามารถใช้การกระจายที่แตกต่างกันสำหรับระบบปฏิบัติการและสถาปัตยกรรมที่แตกต่างกัน การพิจารณา: เวลารวบรวมและหน่วยความจำไม่สำคัญสำหรับการใช้งานของฉัน สิ่งสำคัญเท่านั้นคือการปรับให้เหมาะสมแบบรันไทม์ ฉันต้องการโปรแกรมของฉันให้เร็วพอ คอมไพเลอร์ช้าเป็นที่ยอมรับ ระบบปฏิบัติการ: Microsoft Windows XP / 7/8 / Linux สถาปัตยกรรม: Intel Core i7 / Core2 / และ i686 รุ่นเก่าที่รัน XP: P

8
การใช้ if-return-return หรือ if-else-return นั้นมีประสิทธิภาพมากกว่าหรือไม่
สมมติว่าผมมีคำสั่งด้วยif returnจากมุมมองประสิทธิภาพฉันควรใช้ if(A > B): return A+1 return A-1 หรือ if(A > B): return A+1 else: return A-1 ฉันควรจะเลือกภาษาใดภาษาหนึ่งเมื่อใช้ภาษาที่รวบรวม (C) หรือภาษาสคริปต์ (Python)


1
TargetetedPatchingOptOut:“ ประสิทธิภาพมีความสำคัญอย่างยิ่งต่อการอินไลน์ข้ามขอบเขตภาพ NGen”?
เคยผ่านบางคลาสเฟรมเวิร์กโดยใช้ตัวสะท้อนสัญญาณและสังเกตเห็นว่าเมธอดและคุณสมบัติจำนวนหนึ่งมีแอ็ตทริบิวต์ต่อไปนี้ [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] ฉันค่อนข้างแน่ใจว่าฉันได้เห็นความคิดเห็นข้างต้นที่อื่นและไม่เคยติดตาม มีคนช่วยบอกฉันหน่อยได้มั้ยว่าสิ่งนี้มีความหมายอย่างไรใน C # และบริบทอื่น ๆ

9
ฟังก์ชันวนซ้ำสามารถอยู่ในบรรทัดได้หรือไม่?
inline int factorial(int n) { if(!n) return 1; else return n*factorial(n-1); } ขณะที่ฉันกำลังอ่านสิ่งนี้พบว่าโค้ดด้านบนจะนำไปสู่ ​​"การรวบรวมแบบไม่มีที่สิ้นสุด" หากไม่ได้รับการจัดการโดยคอมไพเลอร์อย่างถูกต้อง คอมไพลเลอร์ตัดสินใจอย่างไรว่าจะอินไลน์ฟังก์ชันหรือไม่?

1
แฟล็ก -ObjC linker ทำอะไร
ฉันมีแอพที่ทำงานร่วมกับและไม่มีธงลิงเกอร์ อย่างไรก็ตามหากไม่มีการตั้งค่าตัวเชื่อมโยงฉันจะได้รับพฤติกรรมที่แตกต่างกันมากเมื่อเพิ่มข้อมูลลงในมุมมอง

4
ข้อผิดพลาด: คุณสมบัติอะตอมแบบเขียนได้ไม่สามารถจับคู่ setter / getter ที่สังเคราะห์ได้กับ setter / getter ที่ผู้ใช้กำหนด
ฉันเพิ่งพยายามรวบรวมโครงการ Xcode รุ่นเก่า (ซึ่งใช้ในการรวบรวมได้ดี) และตอนนี้ฉันเห็นข้อผิดพลาดมากมายของแบบฟอร์มนี้: error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter รูปแบบรหัสที่ทำให้เกิดข้อผิดพลาดเหล่านี้จะเป็นดังนี้: // Interface: @property (retain) NSObject * someProperty; // Implementation: @synthesize someProperty; // to provide the getter - (void)setSomeProperty:(NSObject *)newValue { //.. } ฉันเห็นได้ว่าเหตุใดจึงเกิดข้อผิดพลาดขึ้น ฉันบอกคอมไพเลอร์เพื่อสังเคราะห์ accessors คุณสมบัติของฉัน (ทั้งทะเยอทะยานและ setter) และหลังจากนั้นทันทีฉันแทนที่ตัวตั้งค่าด้วยตนเอง …

22
C คอมไพเลอร์สำหรับ Windows? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันทำงานบน Linux ได้ดีโดยใช้ gcc เป็นคอมไพเลอร์ C ของฉัน แต่ต้องการโซลูชัน Windows ความคิดใด ๆ ? ฉันเคยดูDev-C ++ จาก Bloodshedแต่กำลังมองหาตัวเลือกเพิ่มเติม

13
วิธีการไดรฟ์ C #, C ++ หรือคอมไพเลอร์ Java เพื่อคำนวณ 1 + 2 + 3 + ... + 1000 ในเวลาคอมไพล์?
ในการสัมภาษณ์ล่าสุดฉันถูกถามคำถามแปลก ๆ ผู้สัมภาษณ์ถามฉันว่าฉันจะคำนวณ 1 + 2 + 3 + ... + 1000 โดยใช้คุณสมบัติคอมไพเลอร์ได้อย่างไร ซึ่งหมายความว่าฉันไม่ได้รับอนุญาตให้เขียนโปรแกรมและเรียกใช้งาน แต่ฉันควรเขียนโปรแกรมที่สามารถขับเคลื่อนคอมไพเลอร์ให้คำนวณผลรวมนี้ในขณะที่คอมไพล์และพิมพ์ผลลัพธ์เมื่อการคอมไพล์เสร็จสิ้น เขาบอกฉันว่าฉันอาจใช้ generics และคุณสมบัติ pre-processor ของคอมไพเลอร์ เป็นไปได้ที่จะใช้คอมไพเลอร์ C ++, C # หรือ Java ความคิดใด ๆ ??? คำถามนี้ไม่เกี่ยวข้องกับการคำนวณผลรวมโดยไม่มีการวนซ้ำใด ๆ ที่ถามที่นี่ นอกจากนี้ควรสังเกตว่าควรคำนวณผลรวมระหว่างการคอมไพล์ ไม่สามารถพิมพ์เฉพาะผลลัพธ์โดยใช้คำสั่งคอมไพเลอร์ C ++ อ่านข้อมูลเพิ่มเติมเกี่ยวกับคำตอบโพสต์ที่ฉันพบว่าการแก้ปัญหาที่เกิดขึ้นในระหว่างการรวบรวมโดยใช้ C ++ แม่แบบที่เรียกว่าmetaprogramming นี่เป็นเทคนิคที่ดร. เออร์วินอุนรูห์ค้นพบโดยบังเอิญระหว่างกระบวนการสร้างมาตรฐานภาษา C ++ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ในหน้าวิกิพีเดียของ meta-การเขียนโปรแกรม ดูเหมือนว่าจะสามารถเขียนโปรแกรมใน Java โดยใช้คำอธิบายประกอบจาวา …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.