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

คอมไพเลอร์เป็นโปรแกรมคอมพิวเตอร์ที่แปลงซอร์สโค้ดที่เขียนในภาษาโปรแกรมหนึ่งเป็นภาษาคอมพิวเตอร์อื่น

8
ทำไมโปรเซสเซอร์ Itanium จึงยากที่จะเขียนคอมไพเลอร์
โดยทั่วไประบุว่าสถาปัตยกรรม Itanium 64- บิตโปรเซสเซอร์ของ Intel ล้มเหลวเนื่องจากชุดคำสั่งการปฏิวัติEPICเป็นเรื่องยากมากในการเขียนคอมไพเลอร์ที่ดีซึ่งหมายถึงการขาดเครื่องมือสำหรับนักพัฒนาที่ดีสำหรับ IA64 ซึ่งหมายความว่าผู้พัฒนาโปรแกรมสร้างสถาปัตยกรรมขาด ดังนั้นจึงไม่มีใครต้องการใช้ฮาร์ดแวร์โดยไม่ต้องใช้ซอฟต์แวร์มากดังนั้นแพลตฟอร์มจึงล้มเหลวและทุกอย่างต้องการเล็บเกือกม้า คอมไพเลอร์ที่ดี แต่ทำไมคอมไพเลอร์จึงเป็นปัญหาทางเทคนิคที่ยาก? สำหรับฉันแล้วดูเหมือนว่าหากการขนานอย่างชัดเจนใน EPIC นั้นเป็นเรื่องยากสำหรับผู้ขายคอมไพเลอร์ที่จะใช้ ... ทำไมต้องวางภาระนั้นไว้กับพวกเขาตั้งแต่แรก มันไม่ได้เป็นวิธีแก้ปัญหาที่ดีและเข้าใจกันดีในปัญหานี้ไม่ได้มีอยู่แล้ว: วางภาระให้กับ Intel แทนและให้เป้าหมายที่เรียบง่ายแก่นักเขียนคอมไพเลอร์ Itanium ออกมาในปี 1997 โดยจุดนี้ระบบรหัสไบต์UCSD P-Codeอายุเกือบ 20 ปีเครื่อง Zอายุน้อยกว่าเล็กน้อยและ JVM เป็นดาวรุ่งพุ่งแรงใหม่ในโลกของภาษาโปรแกรม มีเหตุผลใดบ้างที่ Intel ไม่ได้ระบุภาษา "Itanium bytecode แบบง่าย" และให้เครื่องมือที่แปลง bytecode นี้เป็นรหัส EPIC ที่ได้รับการปรับปรุงโดยใช้ประโยชน์จากความเชี่ยวชาญของพวกเขาในฐานะผู้ออกแบบระบบตั้งแต่แรก?
50 history  compiler 

4
คอมไพเลอร์ C ++ ตัวแรกสามารถเขียนเป็น C ++ ได้อย่างไร?
Stroustrup อ้างว่า Cfront ซึ่งเป็นคอมไพเลอร์ C ++ ตัวแรกเขียนด้วย C ++ ( คำถามที่พบบ่อยของ Stroustrup ) อย่างไรก็ตามเป็นไปได้อย่างไรที่คอมไพเลอร์ C ++ แรกจะถูกเขียนใน C ++ โค้ดที่ประกอบเป็นคอมไพเลอร์จำเป็นต้องถูกคอมไพล์ด้วยและทำให้คอมไพเลอร์ C ++ ตัวแรกไม่สามารถเขียนใน C ++ ได้ใช่ไหม

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

9
อะไรคือความแตกต่างระหว่าง "ไวยากรณ์" และ "น้ำตาลเชิงกล"
พื้นหลัง หน้า Wikipedia เกี่ยวกับSyntactic Sugarกล่าวว่า: ในวิทยาการคอมพิวเตอร์น้ำตาล syntactic เป็นไวยากรณ์ในภาษาการเขียนโปรแกรมที่ออกแบบมาเพื่อให้สิ่งที่ง่ายต่อการอ่านหรือการแสดง มันทำให้ภาษา "หวาน" สำหรับมนุษย์ที่จะใช้: สิ่งที่สามารถแสดงได้ชัดเจนยิ่งขึ้นรัดกุมหรือในรูปแบบทางเลือกที่บางคนอาจชอบ ฉันไม่เข้าใจจริงๆว่าความแตกต่างระหว่างวากยสัมพันธ์น้ำตาลกับวากยสัมพันธ์คืออะไร ฉันขอขอบคุณจุดที่รุ่นน้ำตาลสามารถชัดเจนและกระชับมากขึ้นบางทีต้มออกไปบางแผ่น แต่ฉันรู้สึกว่าในบางระดับไวยากรณ์ทั้งหมดจะทำเช่นนั้นเพื่อสร้างสิ่งที่เป็นนามธรรมเกี่ยวกับสิ่งที่โค้ดได้รับการรวบรวมลงไป จากหน้า Wikipedia เดียวกัน: ตัวประมวลผลภาษารวมถึงคอมไพเลอร์ตัววิเคราะห์แบบคงที่และที่คล้ายกันมักจะขยายการสร้าง sugared เป็นโครงสร้างพื้นฐานมากขึ้นก่อนการประมวลผลบางครั้งกระบวนการที่เรียกว่า "desugaring" ในฐานะที่เป็นแบบฝึกหัดทางความคิดถ้าฉันใช้ "บ่อยครั้ง" ในคำสั่งนี้เพื่อหมายถึง "เสมอ": หากความแตกต่างเป็นเพียงว่าคอมไพเลอร์ "desugars" ไวยากรณ์ก่อนที่จะย้ายไปยังขั้นตอนถัดไป ของคอมไพเลอร์รู้ (หรือสนใจ) อะไรคือ Sugar'd Syntax หรือไม่ คำถามที่เกี่ยวข้องมากในเว็บไซต์นี้"คำจำกัดความที่เข้มงวดของน้ำตาลซินแทคติค" มีคำตอบที่เริ่ม: IMHO ฉันไม่คิดว่าคุณจะมีคำจำกัดความเกี่ยวกับน้ำตาลในประโยคเพราะวลีนี้เป็น BS และน่าจะถูกใช้โดยคนที่พูดถึง "โปรแกรมเมอร์จริง" โดยใช้ "เครื่องมือจริง" ใน "ระบบปฏิบัติการจริง" สิ่งใดที่อาจบ่งบอกฉันได้ว่าอาจไม่มีความแตกต่างอย่างมากกับ coder ที่ใช้ภาษานี้ บางทีความแตกต่างอาจสังเกตได้เฉพาะนักเขียนคอมไพเลอร์เท่านั้น? …

6
ล่ามสร้างรหัสเครื่องหรือไม่
ฉันศึกษาหัวข้อคอมไพเลอร์และล่ามอย่างเข้มข้น ฉันต้องการตรวจสอบว่าความเข้าใจพื้นฐานของฉันถูกต้องหรือไม่ดังนั้นให้ลองทำดังนี้: ฉันมีภาษาที่เรียกว่า "Foobish" และคำหลักคือ <OUTPUT> 'TEXT', <Number_of_Repeats>; ดังนั้นถ้าฉันต้องการพิมพ์ไปยังคอนโซล 10 ครั้งฉันจะเขียน OUTPUT 'Hello World', 10; สวัสดี World.foobish- ไฟล์ ตอนนี้ฉันเขียนล่ามในภาษาที่ฉันเลือก - C # ในกรณีนี้: using System; namespace FoobishInterpreter { internal class Program { private static void Main(string[] args) { analyseAndTokenize(Hello World.foobish-file)//Pseudocode int repeats = Token[1]; string outputString = Token[0]; for (var …

6
เหตุใด Facebook จึงแปลงรหัส PHP เป็น C ++ [ปิด]
ฉันอ่านว่า Facebook เริ่มต้นใน PHP และจากนั้นเพื่อเพิ่มความเร็วพวกเขาก็รวบรวม PHP เป็นรหัส C ++ หากเป็นกรณีนี้ทำไมพวกเขาไม่ทำ: เพียงแค่เขียนโปรแกรมใน c ++? แน่นอนว่าจะต้องมีข้อผิดพลาด / ข้อบกพร่องบางอย่างเมื่อกดปุ่มวิเศษแปลภาษาที่พอร์ต PHP ไปยังรหัส c ++ ใช่ไหม? ถ้าตัวแปลงที่น่าประทับใจนี้ใช้งานได้ดีทำไมถึงติดกับ PHP เลย? ทำไมไม่ใช้อะไรอย่าง Ruby หรือ Python ล่ะ? หมายเหตุ - ฉันเลือกทั้งสองอย่างนี้แบบสุ่ม แต่ส่วนใหญ่เป็นเพราะเกือบทุกคนบอกว่าการเข้ารหัสในภาษาเหล่านั้นเป็น "ความสุข" ดังนั้นทำไมไม่พัฒนาเป็นภาษาที่ยอดเยี่ยมแล้วกดปุ่มวิเศษ c ++ รวบรวม?
42 c++  php  compiler  facebook 

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

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

4
คอมไพเลอร์ JIT สำหรับ C, C ++ และไลค์
มีคอมไพเลอร์ทันเวลาหรือไม่สำหรับภาษาที่คอมไพล์เช่น C และ C ++ (ชื่อแรกที่นึกได้คือ Clang และ LLVM! แต่ฉันไม่คิดว่าพวกเขาจะสนับสนุน) คำอธิบาย: ฉันคิดว่าซอฟต์แวร์สามารถได้รับประโยชน์จากข้อเสนอแนะการทำโปรไฟล์รันไทม์และการรวบรวมฮอตสปอตที่รันไทม์ให้ได้ประสิทธิภาพสูงสุดแม้สำหรับภาษาที่คอมไพล์ระหว่างเครื่องเช่น C และ C ++ การปรับให้เหมาะสมแบบแนะนำตัวด้วยโปรไฟล์ทำหน้าที่คล้ายกัน แต่ด้วยความแตกต่าง JIT จะมีความยืดหยุ่นมากขึ้นในสภาพแวดล้อมที่แตกต่างกัน ใน PGO คุณเรียกใช้ไบนารีของคุณก่อนที่จะปล่อย หลังจากคุณเผยแพร่แล้วจะไม่มีการรวบรวมผลตอบรับจากสภาพแวดล้อม / อินพุตที่รันไทม์ ดังนั้นหากรูปแบบการป้อนข้อมูลมีการเปลี่ยนแปลงมันจะสอบสวนเพื่อปรับประสิทธิภาพ แต่ JIT ใช้งานได้ดีแม้ในสภาพนั้น อย่างไรก็ตามฉันคิดว่ามันเป็นเรื่องที่ถกเถียงกันอยู่ว่าการรวบรวม JIT นั้นมีประโยชน์มากกว่าค่าใช้จ่ายของตัวเอง

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 ถูกต้องไหม

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

5
ทำไมไพ ธ อนไม่ต้องการคอมไพเลอร์?
แค่สงสัย (ตอนนี้ฉันเริ่มต้นด้วย C ++ ที่ต้องการคอมไพเลอร์) ทำไม Python ไม่ต้องการคอมไพเลอร์? ฉันเพิ่งป้อนรหัสบันทึกเป็นผู้บริหารและเรียกใช้ ใน C ++ ฉันต้องสร้างและสิ่งสนุกอื่น ๆ ทั้งหมด

2
เหตุใดจึงเป็นการยากที่จะสร้างโปรแกรมรุ่น 64 บิต
ในการเขียนโปรแกรมช่วงเวลาสั้น ๆ ของฉันมันเป็นเรื่องที่ไม่สำคัญที่จะรวบรวม C ++, Java และอื่น ๆ ของฉันสำหรับเครื่อง 32 หรือ 64 บิตตราบใดที่ฉันมีแหล่งข้อมูลเต็มรูปแบบสำหรับโปรแกรม แต่ซอฟต์แวร์จำนวนมากไม่ออก 64 บิต ที่น่ารำคาญที่สุดคือยังไม่มีเอ็นจิ้น Unity รุ่น 64 บิต อะไรทำให้มันยากที่จะรวบรวมบางโปรแกรมสำหรับเครื่อง 64 บิต?

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

10
คอมไพเลอร์และล่ามสามารถมีข้อบกพร่องและเรา (ในฐานะผู้ใช้) ทำอะไรเพื่อจัดการกับพวกเขา? [ปิด]
หากงานของคอมไพเลอร์คือการแปลซอร์สโค้ดเป็นรหัสระดับเครื่องจะมีความผิดพลาดใด ๆ ในคอมไพเลอร์หรือแปลผิดพลาดหรือไม่? เช่นเดียวกันกับล่าม: บางครั้งมันไม่สามารถส่งออกเนื้อหาที่ต้องการได้หรือไม่? ฉันไม่เคยได้ยินข้อบกพร่องใด ๆ ในคอมไพเลอร์ / ล่าม แต่มีอยู่หรือไม่?

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