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

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

2
คอมไพเลอร์ควรรายงานข้อผิดพลาดและคำเตือนอย่างไร
ฉันไม่ได้วางแผนที่จะเขียนคอมไพเลอร์ในอนาคตอันใกล้นี้ ยังฉันค่อนข้างสนใจกับเทคโนโลยีคอมไพเลอร์และสิ่งนี้จะทำให้ดีขึ้นได้อย่างไร เริ่มต้นด้วยภาษาที่คอมไพล์คอมไพเลอร์ส่วนใหญ่มีระดับข้อผิดพลาดสองระดับ: คำเตือนและข้อผิดพลาดส่วนใหญ่เป็นสิ่งที่ไม่ร้ายแรงที่คุณควรแก้ไขเป็นครั้งแรกและข้อผิดพลาดที่บ่งบอกเวลาส่วนใหญ่ที่ไม่สามารถสร้างเครื่องได้ (หรือไบต์) รหัสจากอินพุต แม้ว่านี่จะเป็นคำจำกัดความที่ค่อนข้างอ่อนแอ ในบางภาษาเช่น Java คำเตือนบางอย่างเป็นไปไม่ได้ที่จะกำจัดโดยไม่ใช้@SuppressWarningคำสั่ง นอกจากนี้ Java ยังจัดการปัญหาที่ไม่ร้ายแรงบางอย่างเป็นข้อผิดพลาด (เช่นโค้ดที่เข้าไม่ถึงใน Java ทำให้เกิดข้อผิดพลาดด้วยเหตุผลที่ฉันต้องการทราบ) C # ไม่มีปัญหาเดียวกัน แต่มีเพียงเล็กน้อย ดูเหมือนว่าการรวบรวมเกิดขึ้นในหลายรอบและการส่งผ่านที่ล้มเหลวจะป้องกันการส่งต่อจากการดำเนินการต่อไป ด้วยเหตุนี้ข้อผิดพลาดที่คุณได้รับเมื่องานสร้างล้มเหลวมักจะประเมินค่าต่ำเกินไป ในการรันครั้งเดียวอาจกล่าวได้ว่าคุณมีข้อผิดพลาดสองข้อ แต่เมื่อคุณแก้ไขข้อผิดพลาดบางทีคุณอาจได้รับ 26 ข้อใหม่ การขุดไปที่ C และ C ++ เพียงแสดงชุดค่าผสมที่ไม่ดีในจุดอ่อนการวินิจฉัยการคอมไพล์ของ Java และ C # (แม้ว่าอาจจะมีความแม่นยำมากกว่าที่จะกล่าวว่า Java และ C # เพิ่งไปได้ด้วยปัญหาครึ่งหนึ่ง) คำเตือนบางอย่างควรเป็นข้อผิดพลาด (เช่นเมื่อเส้นทางโค้ดไม่คืนค่าทั้งหมด) และยังคงเป็นคำเตือนเพราะฉันคิดว่าในเวลาที่พวกเขาเขียนมาตรฐานเทคโนโลยีคอมไพเลอร์ก็ไม่ดีพอที่จะทำให้เป็นแบบนี้ ตรวจสอบที่จำเป็น ในหลอดเลือดดำเดียวกันคอมไพเลอร์มักตรวจสอบมากกว่ามาตรฐานกล่าว แต่ยังคงใช้ระดับข้อผิดพลาดคำเตือน "มาตรฐาน" สำหรับการค้นพบเพิ่มเติม …

2
เหตุใดความยืดหยุ่นของ Forth จึงทำให้ไวยากรณ์ไม่เหมาะสม
ฉันเพิ่งทำภารกิจการเขียนภาษาโปรแกรมสแต็ก ก่อนที่ฉันจะเริ่มออกแบบภาษาของฉัน แต่ฉันคิดว่ามันเป็นความคิดที่ดีที่จะอ่านและทดลองใช้ภาษาที่มีอยู่เดิม นี่นำฉันมาที่หัวข้อของโพสต์นี้ ฉันอ่านบทความวิกิพีเดียใน Forthซึ่งเป็นภาษาที่ใช้สแต็กซึ่งใช้การแสดงออกสไตล์ postfix ในบทความฉันเห็นข้อความต่อไปนี้: ความยืดหยุ่นของ Forth ทำให้ไวยากรณ์ BNF คงที่ไม่เหมาะสมและไม่มีคอมไพเลอร์เสาหิน การขยายคอมไพเลอร์เพียงต้องการเขียนคำใหม่แทนที่จะแก้ไขไวยากรณ์และเปลี่ยนการใช้งานพื้นฐาน จากความเข้าใจของฉันในศัพท์แสง Forth คำว่า "คำว่า" ดูเหมือนจะตรงกันกับ "subroutine" ด้วยสิ่งนี้ข้อความข้างต้นดูเหมือนแปลก ทำไมความสามารถในการสร้างฟังก์ชั่นใหม่ใน Forth จึงทำให้ไวยากรณ์เป็นทางการสำหรับ Forth ไม่เหมาะสม? ทำไมคุณต้องเขียนไวยากรณ์ใหม่สำหรับแต่ละรูทีนย่อยใหม่ที่คุณกำหนด การเขียนคำศัพท์ใหม่ในสภาพแวดล้อมประกอบด้วยการขยายคอมไพเลอร์อย่างไร ข้อความข้างต้นดูเหมือนจะคล้ายกับว่าไวยากรณ์อย่างเป็นทางการไม่เหมาะสมสำหรับ Python เพราะคุณสามารถกำหนดฟังก์ชั่นใหม่ได้ ในความเป็นจริงฉันตัดสินใจที่จะพยายามเขียนไวยากรณ์สไตล์ BNF สำหรับชุดย่อยง่ายๆของ Forth ด้านล่าง: program ::= stmt+ stmt ::= func | expr func ::= ':' expr+ ';' expr …

1
เหตุใด GCC จึงเปลี่ยนจากวัวกระทิงเป็นตัวแยกวิเคราะห์แบบสืบซ้ำสำหรับ C ++ และ C
มีการเปลี่ยนแปลงภาษาที่ต้องใช้หรือมีเหตุผลบางอย่างที่ทำไมกระทิงจึงไม่เหมาะสมหรือเหมาะสมที่สุด? ฉันเห็นวิกิพีเดียว่าพวกเขาเปลี่ยนไปอ้างอิงถึงบันทึกย่อประจำรุ่นGCC 3.4และGCC 4.1 สถานะรีลีสโน้ตเหล่านี้: ตัวแยกวิเคราะห์ C ++ purser แบบเขียนซ้ำด้วยมือได้แทนที่ตัวแยกวิเคราะห์ C ++ ที่ได้จาก YACC จาก GCC รุ่นก่อนหน้า parser ใหม่มีโครงสร้างพื้นฐานที่พัฒนาขึ้นอย่างมากซึ่งจำเป็นสำหรับการแยกวิเคราะห์ซอร์สโค้ด C ++ ที่ดีขึ้นการจัดการส่วนขยายและการแยกที่สะอาด (ถ้าเป็นไปได้) ระหว่างการวิเคราะห์ซีแมนทิกส์ที่เหมาะสมและการแยกวิเคราะห์ parser ใหม่แก้ไขข้อบกพร่องมากมายที่พบใน parser เก่า และ: ตัวแยกวิเคราะห์ C และ Objective-C แบบเก่าของ Bison ถูกแทนที่ด้วยตัวแยกวิเคราะห์แบบเรียกซ้ำแบบสืบพันธุ์แบบเขียนด้วยมือที่เร็วขึ้น สิ่งที่ฉันอยากรู้คือปัญหาที่แท้จริงของพวกเขาคืออะไรและทำไมจึงเป็นไปไม่ได้ / วิธีแก้ปัญหาโดยใช้วัวกระทิง
10 c++  c  parsing  compiler 

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

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

3
วิธีใช้การประเมินผลขี้เกียจของ if ()
ขณะนี้ฉันกำลังใช้ตัวประเมินผลนิพจน์ (นิพจน์บรรทัดเดียว, เช่นสูตร) ​​ตามสิ่งต่อไปนี้: การแสดงออกที่ป้อนถูกโทเค็นเพื่อแยก booleans ตัวอักษรจำนวนเต็มทศนิยมสตริงฟังก์ชั่นตัวระบุ (ตัวแปร) ฉันใช้อัลกอริทึม Shunting-yard (แก้ไขเบา ๆ เพื่อจัดการฟังก์ชันที่มีจำนวนตัวแปรที่มีข้อโต้แย้ง) เพื่อกำจัดวงเล็บและสั่งให้ผู้ประกอบการที่มีความสำคัญมาก่อนในลำดับ postfixed shunting-yard ของฉันสร้างคิวโทเค็น (จำลอง) (โดยใช้อาร์เรย์อาร์เรย์ภาษา Powerbuilder Classic ของฉันสามารถกำหนดวัตถุ แต่มีอาร์เรย์แบบไดนามิกเป็นหน่วยเก็บข้อมูลดั้งเดิมไม่ใช่รายการจริงไม่มีพจนานุกรม) ที่ฉันประเมินตามลำดับด้วย เครื่องกองง่าย ผู้ประเมินของฉันทำงานได้ดี แต่ฉันก็ยังขาดif()และฉันก็สงสัยว่าจะดำเนินการต่อไปอย่างไร ถ้าฉันเพิ่มif()ฟังก์ชันอื่นที่มีส่วนที่เป็นจริงและเท็จอยู่คนเดียวif(true, msgbox("ok"), msgbox("not ok"))จะแสดงข้อความทั้งสองในขณะที่ฉันต้องการจะแสดงเพียงข้อความเดียว นี่เป็นเพราะเมื่อฉันต้องการประเมินฟังก์ชั่นข้อโต้แย้งทั้งหมดได้รับการประเมินและวางลงบนสแต็ก คุณช่วยให้ฉันใช้if()วิธีขี้เกียจบางอย่าง? ฉันคิดว่าการประมวลผลเหล่านี้เป็นมาโครชนิดหนึ่ง แต่ในตอนแรกฉันยังไม่ได้ประเมินสภาพ บางทีฉันอาจต้องใช้โครงสร้างชนิดอื่นที่ไม่ใช่คิวเพื่อแยกเงื่อนไขและนิพจน์จริง / เท็จออกจากกัน? สำหรับตอนนี้นิพจน์จะถูกวิเคราะห์ก่อนการประเมินผล แต่ฉันยังวางแผนที่จะเก็บการแทนค่ากลางไว้เป็นชนิดของนิพจน์ที่คอมไพล์แล้วสำหรับการประเมินในอนาคต แก้ไข : หลังจากที่แม้ว่าบางอย่างเกี่ยวกับปัญหาที่เกิดขึ้นผมคิดว่าผมสามารถสร้างตัวแทนต้นไม้ในการแสดงออกของฉัน (เป็น AST แทนกระแสโทเค็นเชิงเส้น) if()จากที่ผมได้อย่างง่ายดายสามารถละเว้นหนึ่งหรือสาขาอื่นของฉัน

7
วิชาวิทยาศาสตร์คอมพิวเตอร์ใดบ้างที่จำเป็นต้องทำตามหลักสูตรเบื้องต้นในคอมไพเลอร์ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันไม่ใช่วิทยาการคอมพิวเตอร์ระดับปริญญาตรีและทำงานเป็นนักพัฒนาเว็บ (java, python, AS3 ฯลฯ ) ในฐานะมืออาชีพ ฉันเรียน 1 หลักสูตรต่อภาคการศึกษาที่มหาวิทยาลัยท้องถิ่นของฉัน ฉันใช้ปัญญาประดิษฐ์ (ประกอบด้วยตรรกะไวยากรณ์อิสระบริบทการแยกคำ CYK เบื้องต้น NLP โซ่มาร์คอฟ HMM ฯลฯ ) ภาคการศึกษาสุดท้าย ฉันวางแผนที่จะลงเรียนหลักสูตรเบื้องต้นในคอมไพเลอร์ใน semster ที่กำลังจะมาถึงซึ่งครอบคลุมหลักสูตรต่อไปนี้: การวิเคราะห์คำศัพท์, การวิเคราะห์ไวยากรณ์, การวิเคราะห์เชิงความหมาย, สภาพแวดล้อมแบบรันไทม์, การเป็นตัวแทนระดับกลาง, การสร้างรหัส, การจัดสรรการลงทะเบียน, การเลือกคำแนะนำและการจัดตารางเวลา, การแนะนำการเพิ่มประสิทธิภาพของรหัสท้องถิ่นและสากล คำถามของฉันคือมีวิชาวิทยาศาสตร์คอมพิวเตอร์ที่ฉันควรรู้ก่อนเข้าเรียนหลักสูตรนี้หรือไม่? ถ้าใช่จะเป็นการดีหากคุณสามารถระบุหลักสูตรเหล่านั้นได้

6
ข้อดีของการเรียนรู้และทำความเข้าใจกับการสร้างคอมไพเลอร์คืออะไร?
ฉันเป็นนักศึกษาปริญญาตรีในปีที่ 3 ของการศึกษาระดับปริญญาวิศวกรรมซอฟต์แวร์ จากปีนี้มหาวิทยาลัยของฉันได้เปิดตัวหลักสูตรใหม่ที่เรียกว่า 'คอมไพเลอร์คอนสตรัคชั่น' ซึ่งสอนพื้นฐานของทฤษฎีการสร้างคอมไพเลอร์ อะไรจะเป็นข้อได้เปรียบในโลกแห่งความเป็นจริงสำหรับวิศวกรซอฟต์แวร์ในการเรียนรู้เกี่ยวกับการสร้างคอมไพเลอร์?
10 tools  compiler 

3
ทำไมคอมไพเลอร์โดยทั่วไปสร้างไฟล์ปฏิบัติการสำหรับแพลตฟอร์มที่ติดตั้งไว้เท่านั้น?
ฉันเป็นนักพัฒนา C ++ และในความพยายามที่จะเข้าใจการพัฒนาข้ามแพลตฟอร์มได้ดียิ่งขึ้นฉันพยายามทำความเข้าใจกับรายละเอียดการใช้งานคอมไพเลอร์ให้ดีขึ้นและพวกเขาสร้างไบนารีเฉพาะระบบปฏิบัติการได้อย่างไร ในระหว่างการศึกษาของฉันฉันรู้ว่าอย่างน้อยก็ชั่วขณะคอมไพเลอร์ส่วนใหญ่ที่คุณดาวน์โหลดสำหรับแพลตฟอร์มเฉพาะรวบรวมไบนารีสำหรับแพลตฟอร์มนั้นเท่านั้น ดังนั้นถ้าคุณดาวน์โหลด IDE ที่มาพร้อมกับคอมไพเลอร์ exe สำหรับ Windows คอมไพเลอร์นั้นจะสามารถรวบรวมโปรแกรมของคุณสำหรับแอปพลิเคชัน windows x86-x64 และไม่ใช่แอปพลิเคชัน Linux หรือ Mac ตอนนี้ฉันเข้าใจแล้วว่าแพลตฟอร์มต่าง ๆ ต้องการรูปแบบไบนารีที่แตกต่างกัน แต่สิ่งที่ทำให้พูดคอมไพเลอร์ Visual C ++ บน windows เพื่อสร้างไฟล์ปฏิบัติการไบนารีของ linux ทำได้ยาก? ตราบใดที่คุณมีคำแนะนำการประกอบสำหรับ CPU ที่คุณใช้งานอยู่รวมถึงไลบรารีเฉพาะของ OS คุณไม่ควรรวบรวม exectuables สำหรับแพลตฟอร์มใด ๆ บนเครื่องใด ๆ

2
ไม่มีปัญหาเรื่องไก่และไข่ตั้งแต่ GCC เขียนใน C ++ เอง?
ตั้งแต่ 4.8 รีลีส C ++ คอมไพเลอร์ GCC (ส่วน G ++) จะถูกเขียนไม่ได้อยู่ใน C อีกต่อไป แต่ใน C ++ ฉันมีคำถามสมมุติในเรื่องนี้ ฉันสงสัยว่าจะรวบรวมรหัส C ++ ของ GCC บนแพลตฟอร์มใหม่ที่ไม่มีคอมไพเลอร์ C ++ ได้อย่างไร แน่นอนคุณสามารถใช้ไบนารีที่สร้างไว้ล่วงหน้าซึ่งรวบรวมไว้ในเครื่องอื่น ๆ หรือคุณสามารถใช้ GCC รุ่นเก่ากว่าที่เขียนใน C และคอมไพล์เวอร์ชันปัจจุบันด้วย อย่างไรก็ตามหากไม่มีไบนารีที่สร้างไว้ล่วงหน้าแล้วและเป็นเวอร์ชั่นใหม่ล่าสุดคุณติดอยู่ใช่ไหม? ถ้าไม่มีความหมายอื่น ๆ ในสถานการณ์นี้ที่เกิดจากการสลับจาก C เป็น C ++ ของโครงการ GCC หรือไม่
10 c++  compiler  gcc 

3
Clang / LLVM พร้อมสำหรับช่วงไพร์มหรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา เสียงดังกราวสามารถใช้แทน gcc? ประสบการณ์ของคุณเกี่ยวกับสิ่งนั้น? มีข้อเสียอะไรบ้าง? ประสิทธิภาพของการคอมไพล์ดีกว่า gcc มาก แต่ประสิทธิภาพของโค้ดที่สร้างขึ้นเมื่อรันมัน? มีเครื่องมือที่ดีเป็น front-end (IDE) ให้ทำงานบน Linux หรือ Windows หรือไม่? แก้ไข: ฉันหมายถึงคอมไพเลอร์ C C ++ มันยังไม่ค่อยดีเท่าไหร่

5
ทำไมไม่อนุญาตให้มีการบรรทุกมากเกินไปกับประเภทการคืนสินค้า (อย่างน้อยก็ในภาษาที่ใช้โดยทั่วไป)
ฉันไม่รู้เกี่ยวกับภาษาการเขียนโปรแกรมทั้งหมด แต่เป็นที่ชัดเจนว่าโดยปกติแล้วความเป็นไปได้ของการโอเวอร์โหลดวิธีที่พิจารณาประเภทการส่งคืน (สมมติว่าอาร์กิวเมนต์เป็นจำนวนและประเภทเดียวกัน) ไม่ได้รับการสนับสนุน ฉันหมายถึงสิ่งนี้: int method1 (int num) { } long method1 (int num) { } ไม่ใช่ว่ามันเป็นปัญหาใหญ่สำหรับการเขียนโปรแกรม แต่บางครั้งฉันก็ยินดีต้อนรับ เห็นได้ชัดว่าไม่มีทางที่ภาษาเหล่านั้นจะสามารถสนับสนุนได้โดยไม่มีวิธีแยกความแตกต่างของวิธีการที่เรียกว่า แต่ไวยากรณ์สำหรับสิ่งนั้นอาจจะง่ายเหมือนอย่าง [int] method1 (num) หรือ [long] method1 (num) วิธีนั้นคอมไพเลอร์จะรู้ว่าจะเป็นอันไหนที่จะถูกเรียก ฉันไม่รู้ว่าคอมไพเลอร์ทำงานอย่างไร แต่มันก็ดูไม่ยากที่จะทำดังนั้นฉันจึงสงสัยว่าทำไมบางสิ่งเช่นนั้นถึงไม่ได้รับการปรับแต่ง อะไรคือสาเหตุที่ทำให้บางอย่างเช่นนั้นไม่รองรับ

3
ทำไมไพ ธ อนจึงต้องการทั้งคอมไพเลอร์และล่าม
ฉันเข้าใจความจริงที่ว่า Java ต้องการทั้งคอมไพเลอร์และล่าม มันรวบรวมซอร์สโค้ดเป็น bytecode จากนั้นเครื่องเสมือน (บน Windows, Linux, Android ฯลฯ ) แปลว่า bytecode เป็นรหัสเครื่องสำหรับสถาปัตยกรรมปัจจุบัน แต่ทำไมไพ ธ อนจึงต้องการทั้งคอมไพเลอร์และล่าม เนื่องจาก Python ไม่ได้ขึ้นกับแพลตฟอร์มทำไมไม่ใช้แค่การตีความ? เท่าที่ฉันรู้คุณไม่สามารถรันโปรแกรม Python (เรียบเรียงเป็น bytecode) บนเครื่อง Windows หรือ Linux ใด ๆ โดยไม่มีการดัดแปลง หรือฉันผิด

8
อะไรทำให้ C หยุดการคอมไพล์ / ตีความ / JIT'ed?
Java นั้นได้รับการยกย่องในเรื่องของการพกพาที่น่าทึ่งซึ่งฉันเข้าใจว่าเป็นเพราะ JVM คำถามของฉันคือสิ่งที่ห้ามไม่ให้ C ถูกคอมไพล์ / ตีความ / JIT'ed .. ถ้าเป็นเช่นนั้น C สามารถเขียนได้หนึ่งครั้งและทำให้มันทำงานบนอุปกรณ์ที่คุณเคยมี แต่นี่ไม่ใช่กลไกที่เป็นที่นิยมสำหรับการประมวลผลโปรแกรม C อะไรคือข้อเสียของการประมวลผล C ด้วยวิธีนี้และอะไรคือข้อดีของการประมวลผล Java ด้วยวิธีนี้และไม่ได้รวบรวมรหัสเครื่องนอกเหนือจากความสามารถในการพกพาของหลักสูตร?

3
อะไรคือความท้าทายที่เกี่ยวข้องกับการพิมพ์ในการเขียนคอมไพเลอร์สำหรับภาษาที่พิมพ์แบบไดนามิก?
ในการพูดคุยครั้งนี้ Guido van Rossum กำลังพูดคุย (27:30) เกี่ยวกับความพยายามในการเขียนคอมไพเลอร์สำหรับรหัสไพ ธ อน กลับกลายเป็นว่ามันไม่ง่ายนักที่จะเขียนคอมไพเลอร์ที่รักษาคุณสมบัติการพิมพ์แบบไดนามิกที่ดีทั้งหมดและยังคงรักษาความถูกต้องทางความหมายของโปรแกรมของคุณเพื่อให้มันทำสิ่งเดียวกันจริง ๆ ไม่ว่าคุณจะทำอะไรแปลก ๆ เร็วกว่า อะไรคือความท้าทาย (ที่เป็นไปได้) ที่เกี่ยวข้องกับการพิมพ์ในการเขียนคอมไพเลอร์สำหรับภาษาที่พิมพ์แบบไดนามิกเช่น Python?

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