Derleyici yapımı hakkında bilgi edinmenin ve anlamanın avantajı nedir?


10

Yazılım Mühendisliği diplomamın 3. yılında mezunum. Bu yıldan itibaren, üniversitem derleyici oluşturma teorisinin temellerini öğreten 'Derleyici İnşaatları' adlı yeni bir ders başlattı.

Bir Yazılım Mühendisinin derleyici yapımı hakkında bilgi edinmesi için gerçek dünya avantajı ne olurdu?


2
Derleyici kursu almaktan kesinlikle pişman olmama rağmen, şimdiye kadar sahip olduğum en zor şeydi. Çoğu CSci kursunda ya öğrenilmesi gereken önemli bir teori ya da her ikisinde birden fazla programlama yoktu. Derleyiciler her ikisine de sahipti.
David Thornley


1
3. yılımda da uni'de yaptım. - Kursun tamamında aldığım 2. en iyi modüldü (AI'dan sonra).
TWith2Sugars

@ TWith2Sugars: Neden CC'nin en iyilerden biri olduğunu söyledin?
Nipuna

1
kuruş benim için birkaç kez sınıfta düştü - artı çekici bir öğretim görevlisi ve iyi arkadaş öğrenciler gerçekten zevk bir şey yaptı. Hatırladığım anlardan biri, başlangıçta dilbilgisi ifadeleri yapmaya başlamamız ve öğretim görevlisinin "Bu ikinci terime kadar mantıklı olmayacağı" dedi - İkinci terim, derleyicinin geri kalanını (1'st) terim bir ayrıştırıcı / belirteç oluşturduk). Bunu benim için harika bir modül yaptı.
TWith2Sugars

Yanıtlar:


12

Derleyici yapımını öğrenmenin pratik bir yanı vardır. Uygulamaya özgü bazı komut dillerini uygulamak için ayrıştırıcılar oluşturmam gereken birkaç durum oldu. Uygulamaya esnek, yazılabilir arayüzler oluşturmamı sağladı.

Ayrıca, bazı dillerin neden oldukları gibi tasarlandıkları ve neden hiçbir dilin mükemmel olmadığı hakkında daha fazla bilgi verir.

Bu zor bir ders, müfredattaki en zor derslerden biri. Bir yaz seansında almakla hata yaptım; bir yaz oturumunda asla derleyici kursu almazsanız, beyniniz patlar.


5
Patlayan beyin için +1. Ayrıca, derleyicinizi dönem sonuna kadar yazmayı asla ertelemeyin!
Deneyimden

20

Oh, iyi bir tane. Al, pişman olmayacaksın.

Programlama dillerinin büyüsüne, bunların karşılaştırmalı özelliklerine, yüksek seviyeli kodun yürütülebilir formuna dönüştürülmesine ilişkin bilgi edinirsiniz. Birçok dil özelliğini daha iyi anlayacaksınız, neyin mümkün olduğunu ve bu şeylerin nasıl yapıldığını daha geniş bir şekilde göreceksiniz. Hepsini farklı gözlerle göreceksin.

CS'nin temel şeylerini öğrenmek için üniversitede zaman harcamak akıllıca olacaktır. Somut programlama dilleri, araçları ve kütüphaneleri hepsi gelip gider, ancak temel kalır.

Ayrıca kursta hayatta kalırsanız (ciddi olması şartıyla), programlama için doğru beyne sahip olduğunuz için kendinizi tebrik edebilirsiniz. Bu teori ile pratik bir proje yapın, özgeçmişinizde belirtin ve iyi işverenlerle çok ilgileneceksiniz.


2
Ayrıca, buradaki düzenli bir konu olan iyi / kötü bir dil hakkında size fikir verir.
JBRWilkinson

8

Kesinlikle!

Örneğin, günlük olarak bir veritabanı sınıfı gibi kullanacağınız bir konu olmayabilir, derleyicileri anlamak size büyük bir temel sağlayacaktır.

Benzer bir örnek bir İşletim Sistemleri sınıfı olacaktır. Bir programcı olabilir ve bir işletim sisteminin her gün nasıl çalıştığını düşünmeyebilirsiniz, ancak topraklamaya sahip olmak uzun vadede size yardımcı olacaktır.


2
Lisans işletim sistemim, eşzamanlılığı gerçekten anlamam gereken ilk yerdi. Oldukça pratikti. Lisans programlama dilleri kursum en iyi ayrıştırıcıları yazarken oldu.
justkt

Herhangi bir nedenden ötürü 3.
yılımda

6

Evet! Ders, programlama dilini, veri türlerini ve işlevlerini ayrıştırma ve belirli CPU'lar için makine koduna nasıl çevireceğiniz hakkında daha derin bir anlayış sağlayacaktır.

Bu, kendi başına, çok pratik günlük kullanım olmayabilir, ancak işlerin nasıl çalıştığını bildiğinize dair size güven verecektir . Bu, düşük düzeyli optimizasyon yapmanız ve herkesin güdük olduğu gerçekten kötü hataları bulmanız gerektiğinde (burada deneyimle konuşarak) çok yararlıdır.


4

Günümüzde Etki Alanına Özel Diller hakkında çok fazla vızıltı var . Ve gerçekten tüm vızıltıya değer, gerçek potansiyelleri henüz keşfedilmemiş . Böylece, derleyicilerin yapım becerileri sadece önemli olmakla kalmayacak, gelecekte de önemli hale gelecektir. Şu anki sorun doğrudan derleyicilerle ilgili olmasa bile, geliştirme süremin yaklaşık% 60'ını eDSL derleyicilerini uygulamak için harcıyorum.


eDSL derleyicileri ile ne demek istiyorsun?
Nipuna

1
Meta programlamayı destekleyen diller kullandığım için, uyguladığım her gömülü alana özgü dil pratikte bir derleyici makrosudur. Bazıları oldukça karmaşıktır, kendi tip sistemleri ve çok sayıda çeviri kartı vardır, bazıları önemsizdir, ancak hepsi derleyicidir. Gerçekten ihtiyaç olmadıkça tercümanların anlamı yoktur.
SK-logic

1

Programlama kariyerinin tamamı için kullanacağınız araçların (örn. Derleyiciler, tercümanlar, ayrıştırıcılar) nasıl oluşturulduğunu ve sınırlamaların neler olduğunu anlamak için bir ders almak faydalı olacaktır.

Bunu akademik bir bağlamda da yapmaya değer, çünkü bu, eski dünyanın ilginç yapılarını ve eski dilleri ve mimarileri, yani çok karmaşıklığı ele almakla eşleşmiş karmaşıklığı ortaya çıkarmaz. Ayrıca, bir derleyicinin bir ders için bir bütün olarak inşa edilmesinde, endüstride bir tane üzerinde çalışmaktan daha çok çalışmanız daha olasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.