ข้อดีของการเรียนรู้และทำความเข้าใจกับการสร้างคอมไพเลอร์คืออะไร?


10

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

อะไรจะเป็นข้อได้เปรียบในโลกแห่งความเป็นจริงสำหรับวิศวกรซอฟต์แวร์ในการเรียนรู้เกี่ยวกับการสร้างคอมไพเลอร์?


2
แม้ว่าฉันจะไม่เสียใจอย่างแน่นอนในการรวบรวมหลักสูตร แต่มันเป็นสิ่งที่ยากที่สุดที่ฉันเคยมี หลักสูตร CSci ส่วนใหญ่มีทั้งทฤษฎีที่สำคัญที่ต้องเรียนรู้หรือการเขียนโปรแกรมจำนวนมากไม่ใช่ทั้งสองอย่าง คอมไพเลอร์มีทั้ง
David Thornley

อันนี้ดูเหมือนทฤษฎีมากเกินไป: ocw.mit.edu/courses/electrical-engineering-and-computer-science/…
งาน

1
ฉันทำที่มหาวิทยาลัยในปีที่ 3 ด้วย - เป็นโมดูลที่ดีที่สุดอันดับสองที่ฉันเรียนในหลักสูตรทั้งหมด (หลังจาก AI)
TWith2Sugars

@ TWith2Sugars: ทำไมคุณถึงพูดว่า CC เป็นหนึ่งในทีมที่ดีที่สุด?
Nipuna

1
เงินลดลงหลายครั้งสำหรับฉันในชั้นเรียน - รวมถึงอาจารย์ผู้สอนที่มีส่วนร่วมและเพื่อนนักศึกษาที่ดีทำให้มันเป็นสิ่งที่ฉันชอบจริงๆ หนึ่งในช่วงเวลาที่ฉันจำได้คือเราเริ่มทำนิพจน์ไวยากรณ์ในตอนแรกและอาจารย์พูดว่า "นี่จะไม่สมเหตุสมผลจนกว่าจะถึงภาคที่สอง" - ภาคที่สองคือเมื่อเราเริ่มสร้างส่วนที่เหลือของคอมไพเลอร์ (1'st คำที่เราสร้าง parser / tokeniser) นั่นสำหรับฉันทำให้มันเป็นโมดูลที่ยอดเยี่ยม
TWith2Sugars

คำตอบ:


12

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

นอกจากนี้ยังช่วยให้คุณเข้าใจมากขึ้นว่าทำไมบางภาษาจึงได้รับการออกแบบในแบบที่เป็นและทำไมไม่มีภาษาใดที่สมบูรณ์แบบ

เป็นหลักสูตรที่ยากลำบากหนึ่งในหลักสูตรที่ยากขึ้น ฉันทำผิดพลาดในช่วงฤดูร้อน ไม่เคยเรียนวิชาคอมไพเลอร์ในช่วงฤดูร้อนสมองของคุณจะระเบิด


5
+1 สำหรับการระเบิดของสมอง นอกจากนี้อย่าเลื่อนการเขียนคอมไพเลอร์ของคุณจนกว่าจะสิ้นสุดภาคการศึกษา! ฉันรู้จากประสบการณ์ ...
Jeremy Heiler

20

โอ้มันเป็นสิ่งที่ดี รับไปคุณจะไม่เสียใจ

คุณจะได้รับความเข้าใจอย่างลึกซึ้งเกี่ยวกับความมหัศจรรย์ของภาษาการเขียนโปรแกรมลักษณะการเปรียบเทียบการแปลงรหัสระดับสูงให้อยู่ในรูปแบบที่ปฏิบัติการได้ คุณจะเข้าใจคุณลักษณะหลายภาษาได้ดียิ่งขึ้นจะมีมุมมองที่กว้างขึ้นเกี่ยวกับสิ่งที่เป็นไปได้และสิ่งที่ทำไปแล้ว คุณจะเห็นทุกอย่างด้วยตาที่แตกต่างกัน

คุณควรใช้เวลาที่มหาวิทยาลัยเพื่อเรียนรู้สิ่งพื้นฐานของ CS ภาษาการเขียนโปรแกรมที่เป็นรูปธรรมเครื่องมือและห้องสมุดพวกเขาทั้งหมดมาและไป แต่รากฐานอยู่

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


2
นอกจากนี้ยังช่วยให้คุณเข้าใจถึงภาษาที่ดี / ไม่ดีซึ่งเป็นหัวข้อปกติที่นี่
JBRWilkinson

8

อย่างแน่นอน!

อาจไม่ใช่หัวข้อที่คุณใช้ทุกวันเช่นคลาสฐานข้อมูลการเข้าใจคอมไพเลอร์จะทำให้คุณมีพื้นฐานที่ดี

ตัวอย่างที่คล้ายกันจะเป็นคลาสระบบปฏิบัติการ คุณอาจเป็นโปรแกรมเมอร์และไม่คิดว่าระบบปฏิบัติการทำงานอย่างไรทุกวัน แต่การมีพื้นฐานอยู่ในนั้นจะช่วยคุณได้ในระยะยาว


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

ด้วยเหตุผลบางอย่างในปีที่ 3 ของฉันการลบโมดูลระบบปฏิบัติการ :( จริง ๆ อยากจะทำมันเช่นกัน
TWith2Sugars

6

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

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


4

มีจำนวนมากของฉวัดเฉวียนเกี่ยวกับการเป็นเฉพาะโดเมนภาษา Nowdays และพวกเขาจริงๆคุ้มค่าทุกฉวัดเฉวียน, ศักยภาพที่แท้จริงของพวกเขาก็ยังไม่ได้สำรวจ ดังนั้นคอมไพเลอร์ทักษะการก่อสร้างจะไม่เพียง แต่มีความสำคัญ แต่จำเป็นในอนาคต ฉันใช้เวลาประมาณ 60% ในการพัฒนาของฉันในการใช้คอมไพเลอร์ eDSL แม้ว่าปัญหาในปัจจุบันจะไม่เกี่ยวข้องโดยตรงกับคอมไพเลอร์เลย


คอมไพเลอร์ eDSL หมายถึงอะไร
Nipuna

1
ขณะที่ฉันใช้ภาษาที่รองรับ metaprogramming ภาษาเฉพาะแต่ละโดเมนแบบฝังที่ฉันใช้จะเป็นแมโครคอมไพเลอร์ บางอันค่อนข้างซับซ้อนด้วยระบบการพิมพ์ของตัวเองและการส่งผ่านการแปลจำนวนมากบางเรื่องก็เล็กน้อย แต่ทั้งหมดเป็นคอมไพเลอร์ ไม่มีประเด็นในล่ามเว้นแต่ว่าพวกเขาต้องการจริงๆ
SK-logic

1

มันคุ้มค่าที่จะเข้าคอร์สเพื่อทำความเข้าใจว่าเครื่องมือที่คุณจะใช้กับอาชีพการเขียนโปรแกรมทั้งหมด (เช่นคอมไพเลอร์, ล่าม, ตัวแยกวิเคราะห์) จะถูกสร้างขึ้นและมีข้อ จำกัด อะไรบ้าง

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

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