Jaka jest zaleta nauki i zrozumienia budowy kompilatora?

10

Jestem studentem trzeciego roku studiów inżynierskich. Od tego roku moja uczelnia wprowadziła nowy kurs o nazwie „Kompilatory kompilatorów”, który uczy podstaw teorii tworzenia kompilatora.

Jaka byłaby rzeczywista zaleta dla inżyniera oprogramowania w nauce budowy kompilatora?

Nipuna
źródło
2
Chociaż absolutnie nie żałuję, że wziąłem kurs kompilatorów, był to najtrudniejszy, jaki kiedykolwiek miałem. Większość kursów CSci miała albo istotną teorię, której należało się nauczyć, albo wiele programów, a nie oba. Kompilatory miały oba.
David Thornley,
1
Zrobiłem to na uniwersytecie również na trzecim roku. - Był drugim najlepszym modułem, jaki wziąłem na całym kursie (po AI).
TWith2Sugars
@ TWith2Sugars: Dlaczego powiedziałbyś, że CC jest jednym z najlepszych?
Nipuna
1
grosz spadł dla mnie kilka razy na zajęciach - a także angażujący wykładowca i przyzwoici studenci sprawili, że naprawdę mi się podobało. Jednym z tych momentów, które pamiętam, było rozpoczęcie wyrażeń gramatycznych na początku, a prowadzący powiedział: „To nie będzie miało sensu, dopóki nie będzie drugiego terminu”. Drugi termin to moment, w którym zaczęliśmy budować resztę kompilatora (pierwszy termin zbudowaliśmy parser / tokeniser). To dla mnie uczyniło z tego świetny moduł.
TWith2Sugars

Odpowiedzi:

12

Nauka budowy kompilatora ma praktyczną stronę. Kilkakrotnie potrzebowałem zbudować parsery, aby zaimplementować język poleceń specyficzny dla aplikacji. Pozwoliło mi to stworzyć elastyczne, skryptowalne interfejsy do aplikacji.

Zapewnia również lepszy wgląd w to, dlaczego niektóre języki są zaprojektowane w taki sposób, w jaki są, i dlaczego żaden język nie jest idealny.

To trudny kurs, jeden z trudniejszych w programie nauczania. Popełniłem błąd, biorąc to podczas letniej sesji; nigdy nie bierz kursu kompilatora podczas sesji letniej, twój mózg eksploduje.

John Bode
źródło
5
+1 za wybuch mózgu. Nigdy też nie odkładaj pisania kompilatora do końca semestru! Wiem z doświadczenia ...
Jeremy Heiler
20

Och, to jest dobre. Weź to, nie pożałujesz.

Uzyskujesz wgląd w magię języków programowania, ich charakterystykę porównawczą, transformację kodu wysokiego poziomu do postaci wykonywalnej. Lepiej zrozumiesz wiele funkcji językowych, będziesz mieć szerszy obraz tego, co jest możliwe i jak to się robi. Po prostu zobaczysz to wszystko innymi oczami.

Mądrze jest spędzać czas na uniwersytecie, aby uczyć się podstawowych rzeczy z CS. Wszystkie konkretne języki programowania, narzędzia i biblioteki są dostępne dla wszystkich, ale podstawa pozostaje.

Również jeśli przeżyjesz kurs (pod warunkiem, że będzie poważny), możesz pogratulować sobie posiadania odpowiedniego mózgu do programowania. Wykonaj praktyczny projekt z tą teorią, wspomnij o tym w swoim CV, a bardzo zainteresujesz dobrych pracodawców.


źródło
2
Dodatkowo daje wgląd w to, co jest dobrym / złym językiem, co jest tutaj regularnie tematem.
JBRWilkinson
8

Zdecydowanie!

Może to nie być temat, z którego korzystałbyś na co dzień, jak na przykład klasa baz danych, zrozumienie kompilatorów da ci świetne podstawy.

Podobnym przykładem byłaby klasa systemów operacyjnych. Możesz być programistą i nie zastanawiać się nad tym, jak działa system operacyjny na co dzień, ale posiadanie uziemienia pomoże ci na dłuższą metę.

ozz
źródło
2
Mój kurs licencjacki był pierwszym miejscem, w którym musiałem naprawdę zrozumieć współbieżność. To było niezwykle praktyczne. Mój licencjat z języków programowania był najlepszy, gdy pisaliśmy parsery.
justkt
Z jakiegoś powodu w moim trzecim roku usunąłem moduł systemu operacyjnego :( Naprawdę też chciałem to zrobić.
TWith2Sugars
6

Tak! Kurs pozwoli ci na głębsze zrozumienie parsowania języka programowania, typów danych i funkcji oraz sposobu tłumaczenia go na kod maszynowy dla określonych procesorów.

To samo w sobie może nie mieć praktycznego zastosowania na co dzień, ale da ci pewność, że faktycznie wiesz, jak to działa . Jest to bardzo pomocne (tutaj z doświadczeniem), gdy musisz przeprowadzić optymalizację niskiego poziomu i znaleźć te naprawdę paskudne błędy, które wszyscy zakłopotali.

Martin Wickman
źródło
4

W dzisiejszych czasach jest wiele szumu w językach specyficznych dla domeny . I naprawdę są warte całego szumu, ich prawdziwy potencjał nie został jeszcze zbadany . Umiejętności konstrukcyjne kompilatorów staną się więc nie tylko ważne, ale także niezbędne w przyszłości. Spędzam około 60% czasu programistycznego na wdrażaniu kompilatorów eDSL, nawet jeśli obecny problem w ogóle nie jest bezpośrednio związany z kompilatorami.

Logika SK
źródło
co masz na myśli przez kompilatory eDSL?
Nipuna
1
Ponieważ używam języków, które obsługują metaprogramowanie, każdy zaimplementowany język specyficzny dla domeny jest praktycznie makrem kompilatora. Niektóre są dość skomplikowane, mają swój własny system typów i liczne tłumaczenia, niektóre są trywialne, ale wszystkie są kompilatorami. Nie ma sensu tłumaczy, chyba że są naprawdę potrzebni.
SK-logic
1

Warto wziąć udział w kursie, aby zrozumieć, w jaki sposób budowane są narzędzia, których będziesz używać podczas całej kariery programistycznej (np. Kompilatory, interpretery, parsery) i jakie są ograniczenia.

Warto to również zrobić w kontekście akademickim, ponieważ ujawnia to interesujące podstawy, a nie wiele zawiłości świata rzeczywistego, który jest chaotyczny i pogrążony w kontaktach ze starszymi językami i architekturami, tj. Dużą złożonością. Bardziej prawdopodobne jest, że będziesz pracować nad wszystkimi aspektami kompilatora podczas tworzenia całego kursu, niż nad pracą w przemyśle.

Grrussel
źródło