คำถามติดแท็ก compilation

5
วิธีการเขียนคอมไพเลอร์ขั้นพื้นฐานมาก
คอมไพเลอร์ขั้นสูงเช่นgccรหัสคอมไพล์ลงในไฟล์ที่เครื่องสามารถอ่านได้ตามภาษาที่เขียนโค้ดนั้น (เช่น C, C ++ เป็นต้น) ในความเป็นจริงพวกเขาตีความความหมายของแต่ละรหัสตามห้องสมุดและฟังก์ชั่นของภาษาที่เกี่ยวข้อง ช่วยแก้ให้ด้วยนะถ้าฉันผิด. ฉันต้องการเข้าใจคอมไพเลอร์โดยการเขียนคอมไพเลอร์พื้นฐาน (อาจเป็น C) เพื่อคอมไพล์ไฟล์สแตติก (เช่น Hello World ในไฟล์ข้อความ) ฉันลองทำแบบฝึกหัดและหนังสือบางเล่ม แต่ทั้งหมดสำหรับกรณีจริง พวกเขาจัดการกับการรวบรวมรหัสแบบไดนามิกที่มีความหมายเชื่อมต่อกับภาษาที่เกี่ยวข้อง ฉันจะเขียนคอมไพเลอร์พื้นฐานเพื่อแปลงข้อความคงเป็นไฟล์ที่เครื่องอ่านได้อย่างไร ขั้นตอนต่อไปจะแนะนำตัวแปรในคอมไพเลอร์ ลองนึกภาพว่าเราต้องการเขียนคอมไพเลอร์ที่รวบรวมเฉพาะบางฟังก์ชั่นของภาษา ขอแนะนำบทเรียนและแหล่งข้อมูลเชิงปฏิบัติที่ได้รับความนิยมอย่างสูง :-)
214 c  compiler  compilation  gcc 

1
ทำความเข้าใจกับความแตกต่าง: ล่ามแบบดั้งเดิมคอมไพเลอร์ JIT ล่าม JIT และคอมไพเลอร์ AOT
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างล่ามแบบดั้งเดิมคอมไพเลอร์ JIT ล่าม JIT และคอมไพเลอร์ AOT ล่ามเป็นเพียงเครื่อง (เสมือนหรือทางกายภาพ) ที่ดำเนินการคำสั่งในภาษาคอมพิวเตอร์บางภาษา ในแง่นี้ JVM เป็นล่ามและ CPU จริงเป็นล่าม การคอมไพล์ล่วงหน้าเวลาหมายถึงการคอมไพล์โค้ดเป็นภาษาบางภาษาก่อนดำเนินการ (ตีความ) มัน อย่างไรก็ตามฉันไม่แน่ใจเกี่ยวกับคำจำกัดความที่แน่นอนของผู้แปล JIT และล่าม JIT ตามคำนิยามผมอ่าน, JIT รวบรวมเป็นเพียงการรวบรวมรหัสเพียงก่อนที่จะแปลความหมายของมัน ดังนั้นโดยทั่วไปการรวบรวม JIT ก็คือการรวบรวม AOT เสร็จสิ้นก่อนดำเนินการ (ตีความ) ใช่ไหม และล่าม JIT เป็นโปรแกรมที่มีทั้งคอมไพเลอร์ JIT และล่ามและรวบรวมรหัส (JITs มัน) ก่อนที่มันจะตีความมัน? โปรดอธิบายความแตกต่าง

9
โปรแกรมเมอร์สามเณรผิดหวังเพราะไม่มีคำศัพท์ในคอมไพเลอร์ผิดพลาด
เพื่อนในครอบครัวของฉันขอความช่วยเหลือจากเขาเมื่อเขาเรียนรู้การเขียนโปรแกรม (ในภาษา C) ในขณะที่เรากำลังพูดถึงเขาแสดงความไม่พอใจเกี่ยวกับการมีเวลาที่ยากลำบากในการทำความเข้าใจข้อความแสดงข้อผิดพลาดที่คอมไพเลอร์ของเขา (GCC) ให้เขาเมื่อเขาทำผิด เขาไม่เข้าใจคำศัพท์ทั้งหมดที่ใช้และบางครั้งเป็นการรวมกันของพวกเขาซึ่งอยู่นอกเหนือความเข้าใจของเขา เขาถามฉันว่า "ทำไมคอมไพเลอร์ของเอกสารถึงไม่รวมคำอธิบายข้อความผิดพลาดอีกต่อไปแล้ว?" - และฉันไม่มีคำตอบที่ดีสำหรับเขา ฉันเอง - ในฐานะโปรแกรมเมอร์ที่มีประสบการณ์มาก - ไม่ค่อยเกิดขึ้นในสถานการณ์นี้ แต่สิ่งที่เกิดขึ้นได้ยากเหล่านั้นเกิดขึ้น - ข้อความแสดงข้อผิดพลาดแปลกใหม่ที่ฉันไม่เคยพบมาก่อน ฉันจัดการโดยค้นหาข้อความแสดงข้อผิดพลาดในเครื่องมือค้นหา แต่ดูเหมือนจะไม่ได้ผลสำหรับเขา - โดยเฉพาะอย่างยิ่งเนื่องจากข้อผิดพลาดที่เขาพบพบบ่อยและเกิดขึ้นในหลายกรณีที่แตกต่างกันซึ่งเขามีปัญหาเกี่ยวกับเขา ด้วยตัวเอง ดังนั้นโปรแกรมเมอร์มือใหม่ควรเข้าหาความท้าทายในการทำความเข้าใจข้อความแสดงข้อผิดพลาดของคอมไพเลอร์อย่างไร? โดยเฉพาะกับการรวมกันของ C และ GCC?

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


11
คอมไพเลอร์ C ++ เอาวงเล็บที่ไม่มีประโยชน์ออกหรือไม่
รหัสจะ int a = ((1 + 2) + 3); // Easy to read ทำงานช้ากว่า int a = 1 + 2 + 3; // (Barely) Not quite so easy to read หรือคอมไพเลอร์สมัยใหม่ฉลาดพอที่จะลบ / ปรับวงเล็บ "ไร้ประโยชน์" ดูเหมือนว่าจะเป็นข้อกังวลในการเพิ่มประสิทธิภาพเล็ก ๆ น้อย ๆ แต่การเลือก C ++ มากกว่า C # / Java / ... นั้นเกี่ยวกับการปรับให้เหมาะสมที่สุด (IMHO)

6
ฟังก์ชันแบบอินไลน์ใน C ++ ประเด็นคืออะไร?
ตามสิ่งที่ฉันอ่านคอมไพเลอร์ไม่จำเป็นต้องแทนที่การเรียกใช้ฟังก์ชันของฟังก์ชันอินไลน์ด้วยร่างกาย แต่จะทำเช่นนั้นหากทำได้ นี่ทำให้ฉันคิด - ทำไมเราถึงมีคำอินไลน์ถ้าเป็นเช่นนั้น? ทำไมไม่ทำฟังก์ชั่นอินไลน์ฟังก์ชั่นทั้งหมดโดยค่าเริ่มต้นและให้คอมไพเลอร์คิดว่ามันสามารถทดแทนการโทรด้วยร่างกายฟังก์ชั่นหรือไม่?

5
ทำไมผลลัพธ์ของคอมไพเลอร์จึงเรียกว่า object code?
จากบทความการเขียนโปรแกรมภาษาอธิบายโดย Paul Graham เผยแพร่ในแฮกเกอร์ & จิตรกร : ภาษาระดับสูงที่คุณกินคอมไพเลอร์ยังเป็นที่รู้จักกันเป็น รหัสที่มาและการแปลภาษาเครื่องจะสร้างเรียกว่ารหัสวัตถุ จากบทความ Wikipedia เกี่ยวกับรหัสวัตถุ : รหัสวัตถุหรือบางครั้งวัตถุโมดูลคือสิ่งที่คอมไพเลอร์คอมพิวเตอร์ผลิต จากคำจำกัดความของ 'คอมไพเลอร์' : ตามเนื้อผ้าเอาท์พุทของการรวบรวมได้รับการเรียกว่ารหัสวัตถุหรือบางครั้งโมดูลวัตถุ (โปรดทราบว่าคำว่า "object" ที่นี่ไม่เกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุ) ดังนั้นสิ่งที่เป็นวัตถุระยะที่เกี่ยวข้องกับ?

8
เหตุใด IDE ของฉันจึงไม่รวบรวมพื้นหลัง / สิ่งปลูกสร้าง
วันนี้ฉันพัฒนาบนคอมพิวเตอร์ที่ค่อนข้างซับซ้อนมันมีหลายคอร์ไดรฟ์ SSD และสิ่งที่ไม่ ยังคงส่วนใหญ่เวลาฉันเขียนโปรแกรมคอมพิวเตอร์ไม่สบายทำอะไร เมื่อฉันต้องการคอมไพล์และรัน / ปรับใช้โครงการที่ค่อนข้างซับซ้อนที่สุดก็ยังคงใช้เวลาสองสามวินาที ทำไม? ตอนนี้เรากำลังมีชีวิตอยู่มากขึ้นเรื่อย ๆ ใน "อายุทันที" ทำไมฉันไม่สามารถกด F5 ใน Visual Studio และเปิด / ปรับใช้แอปพลิเคชันของฉันได้ทันที สองสามวินาทีอาจไม่ฟังดูแย่นัก แต่ก็ยังมีความเสียดทานทางปัญญาและเวลาที่เพิ่มขึ้นและตรงไปตรงมาทำให้การเขียนโปรแกรมสนุกน้อยลง ดังนั้นการรวบรวมได้อย่างไรในทันที? คนเรามักจะแก้ไขไฟล์ในแอสเซมบลีต่าง ๆ จะเกิดอะไรขึ้นถ้า Visual Studio / The IDE ทำการคอมไพล์ / และสร้างทุกสิ่งที่ฉันแก้ไขตลอดเวลาเพื่อให้เหมาะสม Heck ถ้าพวกเขาต้องการที่จะก้าวไปข้างหน้าจริงๆพวกเขาสามารถรวบรวมต่อชั้น การรวบรวมอาจไม่ทำงาน แต่ก็ไม่สามารถทำอะไรได้อย่างเงียบ ๆ (ยกเว้นการเพิ่มข้อความแสดงข้อผิดพลาดในหน้าต่างข้อผิดพลาด) คอมพิวเตอร์ในปัจจุบันแน่นอนสามารถอุทิศหลักหรือสองในงานนี้และถ้ามีคนพบว่ามันน่ารำคาญมันอาจถูกปิดการใช้งานโดยตัวเลือก ฉันรู้ว่าอาจมีปัญหาทางเทคนิคหลายพันรายการและการคัดลอกเงาแฟนซีที่จะต้องได้รับการแก้ไขเพื่อให้ราบรื่นและใช้งานได้จริง แต่จะทำให้การเขียนโปรแกรมราบรื่นยิ่งขึ้น มีเหตุผลจริงหรือไม่ที่สถานการณ์นี้ไม่สามารถเกิดขึ้นได้? การสึกหรอของไบนารีที่เขียนต่อเนื่องจะมากเกินไปหรือไม่ แอสเซมบลีไม่สามารถเก็บไว้ในหน่วยความจำจนกว่าจะมีการปรับใช้ / รัน

3
จัดส่งห้องสมุดชั้นหนึ่งของฉัน gotchas ใด ๆ ที่ฉันต้องระวัง?
ฉันเป็นนักพัฒนาเว็บเกี่ยวกับที่จะปลดล็อคความสำเร็จ "ห้องสมุด First Class ที่เผยแพร่" ในอาชีพการงานของฉันและฉันเหงื่อออกกระสุน (ฉันก็เครียดทั้งคืน) ฉันชอบที่จะแตะประสบการณ์ของชุมชนเพื่อดูว่าใครมีคำแนะนำหรือคำแนะนำใด ๆ เพื่อให้แน่ใจว่าสิ่งนี้จะดำเนินไปอย่างราบรื่นที่สุด มีอะไรพิเศษหรือ gotchas ฉันต้องระวัง? มีอะไรพิเศษเกี่ยวกับกระบวนการสร้างที่สามารถกลับมากัดฉันได้ไหม ที่นี่ฉันอยู่ที่: ห้องสมุดได้รับการทดสอบโดยหน่วยและมีรหัสครอบคลุมประมาณ 97% API ได้รับการบันทึกไว้อย่างดีและมีการสร้างเอกสาร xml สำหรับการสนับสนุนภายใน ฉันได้รับรองว่าผู้เข้าถึงคลาสสาธารณะ / ส่วนตัวนั้นถูกต้องและถูกต้อง เช่นเดียวกันกับ getters / setters ทั้งหมด การจัดการข้อผิดพลาดไม่ได้อย่างสง่างามอย่างที่ฉันต้องการ แต่ฉันไม่เห็นเส้นตายและยอมรับว่ามันเป็น "ดีเท่าที่ควรจะเป็น" ในตอนนี้ ไม่มีการบันทึกที่เป็นมิตร Debug.Writeline ถูกใช้อย่างกว้างขวาง ... ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้ว่านี่เป็นภาพสะท้อนของความไม่มีประสบการณ์ของฉัน :( คำแนะนำของคุณได้รับการชื่นชมอย่างมาก! ห้องสมุดจะใช้ในการสร้างรายงาน หมวกมาตรฐาน - เชื่อมต่อกับฐานข้อมูลแบบอ่านอย่างเดียวดำเนินการ calcs จัดรูปแบบและส่งออกข้อมูลไปยังสตรีมตอบกลับ ฉันถูกทาบทามให้เป็นแหล่งข้อมูลเพื่อเติมเต็มให้กับหนึ่งในโปรแกรมเมอร์ที่ลาออกและงานนี้ให้ฉันเป็นโครงการ "ฟันของคุณ" …

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

4
อะไรคือความหมายของประโยค“ เราต้องการให้มันถูกคอมไพล์ดังนั้นมันจึงไม่เผาซีพียูทำสิ่งที่ผิด”
ผมอ่านนี้บทความ มันมีย่อหน้าต่อไปนี้ และสกาล่ากลายเป็นว่าเร็วหรือไม่? คุณนิยามคำว่า fast อะไร เกี่ยวกับเร็วเท่า Java ไม่จำเป็นต้องเร็วเท่ากับ C หรือ Assembly Python ไม่เร็วกว่า Ruby อย่างมีนัยสำคัญ เราต้องการทำมากขึ้นด้วยเครื่องจักรที่น้อยลงใช้ประโยชน์จากการทำงานพร้อมกันได้ดี เราต้องการที่จะรวบรวมดังนั้นจึงไม่เผาซีพียูทำสิ่งที่ผิด ฉันกำลังมองหาความหมายของประโยคสุดท้าย ภาษาที่แปลจะทำให้ซีพียูทำสิ่งที่ "ผิด" อย่างไร

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

4
ค่าคงที่ใน C #
ทำไมคอมไพเลอร์เก็บค่าคงที่ในข้อมูลเมตาแอสเซมบลี? พวกเขาฝังตัวโดยตรงกับรหัสภาษาระดับกลางจากข้อมูลเมตาแอสเซมบลีหรือไม่
9 c#  clr  compilation 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.