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

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

30
เรียนรู้การเขียนคอมไพเลอร์ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน5 ปีที่ผ่านมา คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ภาษาที่ต้องการ : C / C ++, Java และ Ruby ฉันกำลังมองหาหนังสือ / บทช่วยสอนที่มีประโยชน์เกี่ยวกับวิธีการเขียนคอมไพเลอร์ของคุณเองเพียงเพื่อการศึกษา ฉันคุ้นเคยกับ C / C ++, Java และ Ruby มากที่สุดดังนั้นฉันจึงต้องการทรัพยากรที่เกี่ยวข้องกับหนึ่งในสามเหล่านั้น แต่ทรัพยากรที่ดีใด ๆ ก็เป็นที่ยอมรับ


16
application binary interface (ABI) คืออะไร?
ฉันไม่เคยเข้าใจชัดเจนว่า ABI คืออะไร โปรดอย่านำฉันไปที่บทความ Wikipedia ถ้าฉันเข้าใจได้ฉันจะไม่โพสต์ข้อความยาว ๆ ที่นี่ นี่คือความคิดของฉันเกี่ยวกับอินเทอร์เฟซต่าง ๆ : รีโมตทีวีเป็นอินเทอร์เฟซระหว่างผู้ใช้กับทีวี เป็นนิติบุคคลที่มีอยู่ แต่ไร้ประโยชน์ (ไม่มีฟังก์ชั่นใด ๆ ) ด้วยตัวเอง ฟังก์ชั่นทั้งหมดสำหรับแต่ละปุ่มบนรีโมทนั้นมีการใช้งานในเครื่องรับโทรทัศน์ อินเทอร์เฟซ:เป็นเลเยอร์ "เอนทิตีที่มีอยู่" ระหว่าง functionalityและconsumerของฟังก์ชันการทำงานนั้น ส่วนต่อประสานไม่ได้ทำอะไรเลย มันแค่เรียกใช้ฟังก์ชั่นที่อยู่ข้างหลัง ตอนนี้ขึ้นอยู่กับผู้ใช้ที่มีอินเทอร์เฟซชนิดต่าง ๆ Command Line Interface (CLI)คำสั่งเป็นเอนทิตีที่มีอยู่ผู้บริโภคคือผู้ใช้และหน้าที่การใช้งานอยู่ด้านหลัง functionality: ฟังก์ชั่นซอฟต์แวร์ของฉันที่แก้จุดประสงค์บางอย่างที่เราอธิบายอินเตอร์เฟซนี้ existing entities: คำสั่ง consumer: ผู้ใช้งาน หน้าต่างส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI)ปุ่มและอื่น ๆ เป็นสิ่งที่มีอยู่และอีกครั้งที่ผู้บริโภคคือผู้ใช้ functionality: ฟังก์ชั่นซอฟต์แวร์ของฉันที่แก้ปัญหาที่เราอธิบายอินเตอร์เฟซนี้ existing entities: หน้าต่างปุ่ม ฯลฯ consumer: ผู้ใช้งาน …

6
กระบวนการรวบรวม / เชื่อมโยงทำงานอย่างไร
กระบวนการรวบรวมและเชื่อมโยงทำงานอย่างไร (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนี้)

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

4
เหตุใด Java จึงเปิดสวิตช์ int ที่ต่อเนื่องกันจึงปรากฏว่าทำงานเร็วขึ้นพร้อมกับเคสเพิ่มเติม
ฉันกำลังทำงานกับโค้ด Java บางตัวซึ่งจำเป็นต้องปรับให้เหมาะสมอย่างมากเนื่องจากมันจะทำงานในฟังก์ชั่นฮ็อตที่มีการเรียกใช้หลาย ๆ จุดในลอจิกโปรแกรมหลักของฉัน เป็นส่วนหนึ่งของรหัสนี้เกี่ยวข้องกับการคูณdoubleตัวแปรโดย10ยกพลไม่ใช่เชิงลบint exponents วิธีหนึ่งที่รวดเร็ว (แก้ไข: แต่ไม่ใช่วิธีที่เร็วที่สุดโปรดดูอัปเดตที่ 2 ด้านล่าง) เพื่อรับค่าที่คูณได้switchในexponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... …

5
คำเตือนการรวบรวม: ไม่มีกฎในการประมวลผลไฟล์สำหรับสถาปัตยกรรม i386
ฉันจะแก้ไขคำเตือนนี้ได้อย่างไร [คำเตือน] คำเตือน: ไม่มีกฎในการประมวลผลไฟล์ '$ (PROJECT_DIR) /MyApp/MessageCell.h' ของประเภท sourcecode.objj.h สำหรับสถาปัตยกรรม i386

7
เสียงดังก้องกับ GCC - ซึ่งสร้างไบนารีที่ดีกว่า? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ปัจจุบันฉันใช้ GCC แต่ฉันค้นพบ Clang เมื่อเร็ว ๆ นี้และฉันกำลังไตร่ตรองการสลับ มีปัจจัยหนึ่งในการตัดสินใจว่า - คุณภาพ (ความเร็ว, หน่วยความจำรอยเท้า, ความน่าเชื่อถือ) ของไบนารีที่สร้าง - หากgcc -O3สามารถสร้างไบนารีที่ทำงานได้เร็วขึ้น 1% หรือใช้หน่วยความจำน้อยลง 1% มันเป็นดีลเลอร์ดีล Clang มีความเร็วในการคอมไพล์ที่ดีขึ้นและการปล่อยหน่วยความจำเวลาคอมไพล์ที่ต่ำกว่า GCC แต่ฉันสนใจในการวัด / เปรียบเทียบผลของซอฟต์แวร์ที่คอมไพล์แล้ว - คุณช่วยชี้ให้ฉันเห็นหรือเล่าประสบการณ์ของคุณได้ไหม?

5
ความแตกต่างระหว่าง __PRETTY_FUNCTION__, __FUNCTION__, __func__ คืออะไร
อะไรคือความแตกต่างระหว่าง__PRETTY_FUNCTION__, __FUNCTION__, __func__และสถานที่ที่พวกเขาจะได้รับการบันทึก? ฉันจะตัดสินใจได้อย่างไรว่าควรใช้อันไหน

12
รวบรวมได้อย่างไรอย่างรวดเร็ว
ฉัน Googled และแหย่ไปที่เว็บไซต์ Go แต่ดูเหมือนว่าฉันจะไม่สามารถหาคำอธิบายสำหรับเวลาสร้างที่ไม่ธรรมดาของ Go พวกเขาเป็นผลิตภัณฑ์ของคุณสมบัติภาษา (หรือขาดมัน), คอมไพเลอร์เพิ่มประสิทธิภาพสูงหรืออย่างอื่น? ฉันไม่พยายามโปรโมตไป; ฉันแค่อยากรู้

27
ไม่สามารถโหลดไฟล์หรือชุดประกอบ ... พารามิเตอร์ไม่ถูกต้อง
เมื่อเร็ว ๆ นี้ฉันพบข้อยกเว้นต่อไปนี้ที่โซลูชัน C #: ข้อผิดพลาด 2 ไม่สามารถโหลดไฟล์หรือชุดประกอบ 'Newtonsoft.Json, รุ่น = 3.5.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = b9a188c8922137c6' หรือการอ้างอิงอย่างใดอย่างหนึ่ง พารามิเตอร์ไม่ถูกต้อง (ข้อยกเว้นจาก HRESULT: 0x80070057 (E_INVALIDARG)) สิ่งนี้ไม่ได้ขึ้นอยู่กับรหัสของฉันหรือชื่อชุดประกอบ (เช่นNewtonsoft.Jsonในกรณีนี้) เมื่อฉันลบ dll นี้จากการแก้ปัญหาคอมไพเลอร์บอกเกี่ยวกับอีกในข้อยกเว้นเดียวกัน ดังนั้นฉันคิดว่าบางสิ่งบางอย่างจะถูกปิด / เปิดที่พีซีของฉัน :)

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

4
กำลังอ่าน GHC Core
หลักคือภาษากลางของ GHC Reading Core สามารถช่วยให้คุณเข้าใจประสิทธิภาพของโปรแกรมได้ดีขึ้น มีคนถามหาเอกสารหรือแบบฝึกหัดเกี่ยวกับการอ่าน Core แต่ฉันไม่สามารถหาได้มากนัก มีเอกสารอะไรบ้างสำหรับการอ่าน GHC Core นี่คือสิ่งที่ฉันพบ: เขียน Haskell เร็วเท่ากับ C: ใช้ประโยชน์จากความเข้มงวดความเกียจคร้านและการเรียกซ้ำ Haskell เร็วเท่ากับ C: ทำงานที่ระดับความสูงสูงเพื่อประสิทธิภาพระดับต่ำ RWH: บทที่ 25 การทำโปรไฟล์และการเพิ่มประสิทธิภาพ Haskell ประสิทธิภาพสูงคุยกันที่ CUFP (สไลด์ 65-80)

11
คำเตือนคอมไพเลอร์“ ไม่มีบรรทัดใหม่ที่ท้ายไฟล์”
อะไรคือสาเหตุของคำเตือนต่อไปนี้ในคอมไพเลอร์ C ++ บางตัว? ไม่มีการขึ้นบรรทัดใหม่ท้ายไฟล์ เหตุใดฉันจึงควรมีบรรทัดว่างท้ายไฟล์ต้นทาง / ส่วนหัว

1
GCC และ g ++ bootstrapped เป็นอย่างไร
สิ่งนี้ได้ดักฟังฉันมาระยะหนึ่งแล้ว GCC และ g ++ รวบรวมตัวเองอย่างไร ฉันเดาว่าการแก้ไขทุกครั้งจะได้รับการคอมไพล์ด้วยการแก้ไขที่สร้างไว้ก่อนหน้านี้ มันเป็นเรื่องจริงเหรอ? และถ้าเป็นเช่นนั้นหมายความว่ารุ่นเก่าที่สุดของ g ++ และ GCC ถูกเขียนไว้ในชุดประกอบหรือไม่?

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