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

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

5
Google ปิดเป็นคอมไพเลอร์จริงหรือไม่?
คำถามนี้เป็นคำถามแรงบันดาลใจจากการอภิปรายในการแสดงความคิดเห็นในคำถามนี้กองมากเกิน Google ปิดคอมไพเลอร์เอกสารระบุต่อไปนี้ (เน้นเพิ่ม): Closure Compiler เป็นเครื่องมือสำหรับการดาวน์โหลด JavaScript และทำงานได้เร็วขึ้น มันเป็นคอมไพเลอร์ที่แท้จริงสำหรับ JavaScript แทนที่จะรวบรวมจากภาษาต้นฉบับเป็นรหัสเครื่องจะรวบรวมจาก JavaScript เป็น JavaScript ที่ดีกว่า อย่างไรก็ตามWikipediaให้คำจำกัดความของ "compiler" ดังต่อไปนี้: คอมไพเลอร์คือโปรแกรมคอมพิวเตอร์ (หรือชุดของโปรแกรม) ที่แปลงซอร์สโค้ดที่เขียนในภาษาโปรแกรม (ภาษาต้นฉบับ) เป็นภาษาคอมพิวเตอร์อื่น ... นักเขียนภาษามักจะเป็นโปรแกรมที่แปลรูปแบบของการแสดงออกโดยไม่ต้องเปลี่ยน ภาษา. จากนั้นฉันก็จะบอกว่า Google Closure ไม่ใช่คอมไพเลอร์ แต่ความจริงที่ว่า Google ระบุอย่างชัดเจนว่าที่จริงแล้วมันเป็น "คอมไพเลอร์ที่แท้จริง" ทำให้ฉันสงสัยว่ามีอะไรมากกว่านั้น Google Closure เป็นคอมไพเลอร์ JavaScript จริงๆหรือ

6
มีภาษาที่ transpiles ไป C ด้วยไวยากรณ์ที่ดีขึ้นหรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา CoffeeScript เป็นภาษาที่เปลี่ยนไปใช้ JavaScript ด้วยไวยากรณ์ที่สะอาดซึ่งได้รับแรงบันดาลใจจาก Ruby มีภาษาที่คล้ายกันซึ่ง transpiles เป็น C หรือไม่ทำให้โค้ดที่อ่านง่ายขึ้นโดยไม่กระทบต่อประสิทธิภาพ หากไม่มีสิ่งนี้เกิดขึ้นมีเหตุผลที่ดีที่จะไม่สร้างมันขึ้นมาหรือไม่?
19 c  syntax  compiler 

4
ทำความเข้าใจกับกรอบสแต็คของการเรียกใช้ฟังก์ชันใน C / C ++ หรือไม่
ฉันกำลังพยายามที่จะเข้าใจว่าสแต็คเฟรมถูกสร้างขึ้นและตัวแปรใด (params) ถูกผลักไปยังสแต็กตามลำดับ ผลลัพธ์การค้นหาบางรายการแสดงว่าคอมไพเลอร์ C / C ++ ตัดสินใจตามการดำเนินการที่ดำเนินการภายในฟังก์ชั่น ตัวอย่างเช่นถ้าฟังก์ชั่นควรจะเพิ่มค่าการส่งผ่านโดย 1 (คล้ายกับตัวดำเนินการ ++) และส่งกลับมันจะทำให้พารามิเตอร์ทั้งหมดของฟังก์ชั่นและตัวแปรท้องถิ่นในการลงทะเบียน ฉันสงสัยว่าจะใช้รีจิสเตอร์ใดสำหรับพารามิเตอร์ส่งคืนหรือส่งผ่านตามค่า การอ้างอิงถูกส่งคืนอย่างไร คอมไพเลอร์เลือกระหว่าง eax, ebx, ecx และ edx อย่างไร ฉันต้องทราบอะไรบ้างในการทำความเข้าใจวิธีการลงทะเบียนการอ้างอิงสแต็คและฮีปที่ใช้สร้างและทำลายระหว่างการเรียกใช้ฟังก์ชัน
19 c++  c  compiler  stack 

8
คุณอ่านข้อผิดพลาดการคอมไพล์ C หรือ C ++ หลังจากข้อผิดพลาดแรกหรือไม่
ฉันไม่เคยเข้าใจเลยว่าทำไมคอมไพเลอร์ C และ C ++ จึงพยายามกู้คืนจากข้อผิดพลาดและทำการแยกวิเคราะห์ต่อไป เกือบตลอดเวลาข้อผิดพลาดแรกสร้างกระแสข้อผิดพลาดปลอมที่จะหายไปทันทีที่มีการแก้ไขข้อผิดพลาดแรก หลังจากประสบการณ์หลายปีฉันก็หยุดดูข้อผิดพลาดใด ๆ ยกเว้นไฟล์แรกของทุกไฟล์ ฉันรันคอมไพเลอร์แล้วทำอีกครั้งจนกว่าจะไม่มีข้อผิดพลาดอีก มันเป็นเรื่องธรรมดา

4
Chrome V8 ทำงานอย่างไร และทำไม JavaScript ไม่ได้รวบรวม JIT ตั้งแต่แรก?
ฉันได้ทำการค้นคว้าล่าม / คอมไพเลอร์แล้วฉันก็สะดุดกับ JIT-Compilation โดยเฉพาะ V8 Javascript Engine ของ Google Chrome คำถามของฉันคือ - จะเร็วกว่าการตีความมาตรฐานอย่างไร ทำไมการรวบรวม JIT จึงไม่ถูกใช้ตั้งแต่แรก? ความเข้าใจปัจจุบันของฉัน โปรแกรม Javascript ทุกตัวจะเริ่มต้นเป็นซอร์สโค้ดไม่ว่าวิธีการดำเนินการจะถูกแปลเป็นรหัสเครื่องในที่สุด ทั้งการรวบรวม JITและการตีความต้องเป็นไปตามเส้นทางนี้ดังนั้นการรวบรวม JIT จะเร็วขึ้นอย่างไร มันดูเหมือนว่า JIT รวบรวมเป็นนวัตกรรมที่ค่อนข้างเก่า , ตามออกของวิกิพีเดียJIT รวบรวมบทความ "คอมไพเลอร์ JIT ที่ได้รับการตีพิมพ์ครั้งแรกนั้นมีสาเหตุมาจากการทำงานบน LISP โดย McCarthy ในปี 1960 " "Smalltalk (c. 1983 ) เป็นผู้บุกเบิกด้านใหม่ของการรวบรวม JIT ตัวอย่างเช่นการแปลรหัสเครื่องทำได้ตามความต้องการและผลลัพธ์ถูกแคชไว้เพื่อใช้ในภายหลังเมื่อหน่วยความจำขาดแคลนระบบจะลบรหัสนี้และสร้างใหม่ เมื่อมันต้องการอีกครั้ง " เหตุใดจึงต้องได้รับการตีความ …

2
คอมไพเลอร์ Java AOT ทำงานอย่างไร
มีเครื่องมือไม่กี่อย่างที่นั่น ( Excelsior JET , ฯลฯ ) ที่อ้างว่าแปลงแอป Java ให้เป็นไฟล์ปฏิบัติการดั้งเดิม ( *.exe) อย่างไรก็ตามมันเป็นความเข้าใจของฉันว่าเครื่องมือเหล่านี้เป็นเพียงการสร้าง wrappers พื้นเมืองที่เรียกใช้ / ดำเนินการjavaจากเปลือกหรือบรรทัดคำสั่ง หากความเข้าใจนั้นไม่ถูกต้องฉันไม่เห็นว่ามันจะเป็นไปได้ หาก JVM ที่ทำงานอยู่ ( javaกระบวนการ) เป็นล่ามประสิทธิภาพสูงโดยการโหลด bytecode จาก Java classfiles ในทันทีฉันไม่เห็นว่าแอป Java (คอลเลกชันของไฟล์ bytecode ที่ทำหน้าที่เป็นอินพุตของ JVM) จะเป็นอย่างไร แปลงเป็นปฏิบัติการจริง ๆ นี้เป็นเพราะกระบวนการ JVM เป็นแล้วปฏิบัติการพื้นเมืองที่ใช้ชุดของไฟล์ bytecode เป็น input หากต้องการรวมไฟล์ bytecode เหล่านั้นและกระบวนการ JVM เข้าด้วยกันเป็นโปรแกรมปฏิบัติการแบบเนทีฟแบบรวมไม่สามารถทำได้โดยไม่ต้องเขียน JVM และยกเลิกการแยกจากข้อมูลจำเพาะ …
18 java  compiler  aot 

4
การเขียน lexer ใน C ++
แหล่งข้อมูลที่ดีในการเขียน lexer ใน C ++ คืออะไร (หนังสือบทเรียนแบบฝึกหัดเอกสาร) เทคนิคและวิธีปฏิบัติที่ดีมีอะไรบ้าง ฉันดูบนอินเทอร์เน็ตและทุกคนบอกว่าจะใช้ตัวสร้าง lexer เช่น lex ฉันไม่ต้องการทำอย่างนั้นฉันต้องการเขียน lexer ด้วยมือ
18 c++  compiler  lexer 

3
เหตุใดแกนประมวลผล CPU เพิ่มเติมบนเครื่องเสมือนจึงรวมเวลาช้าลง
[แก้ไข # 2] ถ้าใครจาก VMWare สามารถตีฉันด้วยสำเนาของ VMWare Fusion ฉันยินดีที่จะทำเช่นเดียวกันกับการเปรียบเทียบ VirtualBox กับ VMware อย่างใดฉันสงสัยว่า hypervisor VMware จะได้รับการปรับให้ดีขึ้นสำหรับการทำไฮเปอร์เธรด (ดูคำตอบของฉันด้วย) ฉันเห็นสิ่งที่อยากรู้ เมื่อฉันเพิ่มจำนวนคอร์ในเครื่องเสมือน Windows 7 x64 ของฉันเวลาในการรวบรวมโดยรวมจะเพิ่มขึ้นแทนที่จะลดลง การคอมไพล์มักจะเหมาะอย่างยิ่งสำหรับการประมวลผลแบบขนานเช่นเดียวกับในส่วนตรงกลาง (การทำแผนที่การพึ่งพาโพสต์) คุณสามารถเรียกอินสแตนซ์คอมไพเลอร์ในแต่ละไฟล์. c / .cpp / .cs / ไฟล์ใดก็ได้เพื่อสร้างวัตถุบางส่วน เกิน. ดังนั้นฉันจะจินตนาการว่าการคอมไพล์จริง ๆ แล้วจะขยายขนาดได้ดีกับ # ของแกนประมวลผล แต่สิ่งที่ฉันเห็นคือ: 8 คอร์: 1.89 วินาที 4 แกน: 1.33 วินาที 2 คอร์: …

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

6
คอมไพเลอร์ของ Fortran สร้างโค้ดได้เร็วกว่าคอมไพเลอร์ C จริงๆหรือ
เมื่อฉันเรียนในมหาวิทยาลัยฉันมักจะได้ยินความคิดที่ว่าคอมไพเลอร์ของ Fortran ผลิตโค้ดได้เร็วกว่าคอมไพเลอร์ C สำหรับโปรแกรมที่เทียบเท่า เหตุผลสำคัญที่เป็นเช่นนี้: คอมไพเลอร์ Fortran ปล่อยออกมาโดยเฉลี่ย 1,1 หน่วยประมวลผลคำสั่งต่อบรรทัดของรหัสในขณะที่ C คอมไพเลอร์ส่งเฉลี่ย 1.6 คำสั่งโปรเซสเซอร์ต่อบรรทัดของรหัส - ฉันไม่จำตัวเลขที่แน่นอน แต่ แนวคิดก็คือคอมไพเลอร์ C ปล่อยรหัสเครื่องจักรออกมาอย่างเห็นได้ชัดมากขึ้นดังนั้นจึงผลิตโปรแกรมที่ช้ากว่า การเปรียบเทียบดังกล่าวมีความถูกต้องอย่างไร เราสามารถพูดได้ว่าคอมไพเลอร์ Fortran ผลิตโปรแกรมได้เร็วกว่าคอมไพเลอร์ C หรือในทางกลับกันและทำไมความแตกต่างนี้จึงมีอยู่?

3
เป้าหมายการรวบรวมคืออะไร?
ฉันได้ยินคำนี้เรื่อย ๆ และการค้นหาของ Google ทั้งหมดนำฉันไปสู่บทความเกี่ยวกับคอมไพเลอร์ ฉันแค่อยากจะเข้าใจความหมายของเป้าหมายการรวบรวมคำว่า: | ปรับปรุง: เพื่อให้บริบท: ฉันได้ยินมันบอกว่าการชุมนุมของเว็บเป็นเป้าหมายที่รวบรวมสำหรับภาษาอื่น ๆ เช่น C, C ++, สนิม ฯลฯ
17 compiler 

2
คอมไพเลอร์ทำงานอย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา หมายเหตุ: ฉันประหลาดใจที่สิ่งนี้ไม่ได้ถูกถามมาก่อนและหากฉันไม่พบในการค้นหา ฉันอยู่ในเว็บไซต์หลายแห่งฉันอ่านบทความมากมายและฉันได้ยินคำอธิบายมากมาย ส่วนใหญ่ของพวกเขาดี แต่พวกเขาทั้งหมดจะกว้างหรือซับซ้อนเกินไปหรือเพียงแค่ไม่ดีธรรมดา ดังนั้นคำถามของฉันคือคอมไพเลอร์ทำงานอย่างไร หากนี่เป็นคำถามที่ยากและกว้างโปรดบอกฉัน แต่ถ้าไม่ใช่โปรดตอบคำถาม
17 compiler 

4
เหตุใดรหัสเครื่องดั้งเดิมจึงไม่สามารถถอดรหัสได้อย่างง่ายดาย
ด้วยภาษาที่ใช้เครื่องเสมือนของ bytecode เช่น Java, VB.NET, C #, ActionScript 3.0 เป็นต้นบางครั้งคุณได้ยินเกี่ยวกับความง่ายในการดาวน์โหลดตัวแยกข้อมูลออกจากอินเทอร์เน็ตเรียกใช้ bytecode ในช่วงเวลาที่ดีและ บ่อยครั้งเกิดขึ้นกับสิ่งที่ไม่ไกลจากซอร์สโค้ดต้นฉบับในไม่กี่วินาที สมมุติว่าภาษาแบบนี้มีความเสี่ยงเป็นพิเศษ ฉันเพิ่งเริ่มสงสัยว่าทำไมคุณไม่ได้ยินเพิ่มเติมเกี่ยวกับเรื่องนี้เกี่ยวกับรหัสไบนารี่พื้นเมืองเมื่ออย่างน้อยคุณก็รู้ว่าภาษานั้นถูกเขียนเป็นภาษาดั้งเดิม (และภาษาใดที่จะพยายามถอดรหัส) เป็นเวลานานฉันคิดว่ามันเป็นเพียงเพราะภาษาเครื่องพื้นเมืองบ้าคลั่งมากและซับซ้อนกว่า bytecode ทั่วไป แต่โค้ดไบต์มีลักษณะอย่างไร ดูเหมือนว่านี้: 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 และรหัสเครื่องดั้งเดิมมีลักษณะอย่างไร (เป็นเลขฐานสิบหก) แน่นอนมันมีลักษณะเช่นนี้: 1000: 2A 40 F0 14 1001: …

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

4
เหตุใดจึงยากที่จะรับสมัครงานคอมไพเลอร์ [- เกี่ยวข้อง] [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เมื่อสัปดาห์ที่แล้วมีผู้ร่วมงานไม่กี่คนและฉันได้เข้าร่วมงานแสดงสินค้าในมหาวิทยาลัยที่สำคัญสามแห่ง (สองแห่งที่นี่ในสหรัฐอเมริกาและอีกแห่งในอังกฤษ) ซึ่งเราพยายาม (ไม่ประสบความสำเร็จมาก) ในการคัดเลือกผู้รวบรวมหลายตำแหน่งตั้งแต่ฝึกงานจนถึง รายการระดับ, ถึงอาวุโสมากขึ้นสำหรับทีมของเรา ด้วยความประหลาดใจของเรา 80% ของนักเรียนที่เราพูดคุยเพื่อตอบสนองต่อแถวยาวของ "ฉันต้องการสร้างแอป Ansroid" เมื่อถามว่าพวกเขาสนใจทำอะไร (และอีก 20% "แอป iPhone"!) บางคนแสดงอย่างเปิดเผยว่าพวกเขาไม่ได้ "ต้องการสร้างคอมไพเลอร์ ... มันน่าเบื่อ"; พวกเขาพูดและฉันพูด ดังนั้นเกี่ยวกับแอพมือถือที่ดึงดูด (รุ่นเยาว์) "ผู้พัฒนา" ในทุกวันนี้คืออะไร? และด้วยโทเค็นเดียวกันทำไมคอมไพเลอร์จึงมีหัวข้อ "น่าเบื่อ" สำหรับพวกเขา (ฉันไม่จำเป็นต้องคิดว่าทั้งสองนี้มีความพิเศษซึ่งกันและกันอย่างใดอย่างหนึ่งสามารถสร้างคอมไพเลอร์สำหรับโทรศัพท์มือถือได้ แต่ก็อยู่ข้างๆ) หากมีสิ่งใดที่เราสามารถทำได้เพื่อดึงดูดคนที่มีความสามารถมากขึ้นหรือแม้แต่ผู้สมัครที่สนใจ?

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