Etki Alanına Özgü Diller

Satranç oyuncuları, anaokulu öğretmenleri veya sigorta acenteleri gibi herhangi bir alandaki uzmanların bir tartışmasını her dinlediğinizde, kelime dağarcığının günlük dilden oldukça farklı olduğunu fark edeceksiniz. Bu, alana özgü dillerin (DSL'ler) neyle ilgili olduğunun bir parçasıdır: Belirli bir alan, o alana özgü şeyleri tanımlamak için özel bir kelime dağarcığına sahiptir.

Yazılım dünyasında, DSL'ler, sınırlı kelime dağarcığına ve dilbilgisine sahip bir alana özgü bir dilde, okunabilir, anlaşılabilir ve umarım etki alanı uzmanları tarafından yazılabilir, yürütülebilir ifadelerle ilgilidir. Yazılım geliştiricileri veya bilim adamlarını hedef alan DSL'ler uzun süredir ortalıkta dolaşmaktadır.

Örneğin, yapılandırma dosyalarında bulunan Unix 'küçük diller' ve LISP makrolarının gücüyle oluşturulan diller daha eski örneklerden bazılarıdır.

DSL'ler genellikle dahili veya harici olarak sınıflandırılır:

  • Dahili DSL'ler, sözdizimi daha çok doğal dile benzeyecek şekilde bükülmüş genel amaçlı bir programlama dilinde yazılmıştır. Bu, daha fazla sözdizimsel şeker ve biçimlendirme olanakları (örn., Ruby ve Scala) sunan diller için, sunmayan diğer dillere (örn. Java) göre daha kolaydır. Çoğu dahili DSL, mevcut API'leri, kitaplıkları veya iş kodunu sarar ve işlevselliğe daha az akıl almaz erişim için bir sarmalayıcı sağlar. Sadece çalıştırılarak doğrudan çalıştırılabilirler. Uygulamaya ve etki alanına bağlı olarak, veri yapıları oluşturmak, bağımlılıkları tanımlamak, süreçleri veya görevleri çalıştırmak, diğer sistemlerle iletişim kurmak veya kullanıcı girdisini doğrulamak için kullanılırlar. Dahili bir DSL'nin sözdizimi, ana bilgisayar dili tarafından sınırlandırılmıştır. Ana bilgisayar dilini DSL'nize uyarlamanıza yardımcı olabilecek birçok kalıp (örneğin, ifade oluşturucu, yöntem zincirleme ve açıklama ekleme) vardır. Ana bilgisayar dili yeniden derleme gerektirmiyorsa, bir etki alanı uzmanıyla yan yana çalışarak oldukça hızlı bir şekilde dahili bir DSL geliştirilebilir.

  • Harici DSL'ler dilin metinsel veya grafiksel ifadeleridir, metinsel DSL'ler grafiksel olanlardan daha yaygın olma eğiliminde olsa da. Metinsel ifadeler, sözlük, ayrıştırıcı, model dönüştürücü, oluşturucular ve diğer herhangi bir son işleme türünü içeren bir araç zinciri tarafından işlenebilir. Harici DSL'ler çoğunlukla daha sonraki işlemler için temel oluşturan dahili modellere okunur. Bir dilbilgisi tanımlamak yararlıdır (örneğin, EBNF'de). Bir dilbilgisi, araç zincirinin parçalarını (ör. düzenleyici, görselleştirici, ayrıştırıcı oluşturucu) oluşturmak için başlangıç noktası sağlar. Basit DSL'ler için, örneğin normal ifadeler kullanarak el yapımı bir ayrıştırıcı yeterli olabilir. Kendilerinden çok fazla şey istenirse özel ayrıştırıcılar hantal hale gelebilir, bu nedenle özellikle dil gramerleri ve DSL'lerle çalışmak için tasarlanmış araçlara bakmak mantıklıdır, örneğin, openArchitectureWare, ANTlr, SableCC, AndroMDA. Harici DSL'leri XML lehçeleri olarak tanımlamak da oldukça yaygındır, ancak okunabilirlik genellikle bir sorundur, özellikle teknik olmayan okuyucular için.

DSL'nizin hedef kitlesini her zaman hesaba katmalısınız. Geliştiriciler, yöneticiler, ticari müşteriler veya son kullanıcılar mı? Dilin teknik düzeyini, mevcut araçları, sözdizimi yardımını, erken doğrulamayı, görselleştirmeyi ve temsili hedef kitleye uyarlamanız gerekir. DSL'ler, teknik ayrıntıları gizleyerek kullanıcıları, geliştiricilerin yardımına ihtiyaç duymadan sistemleri ihtiyaçlarına göre uyarlama yeteneği vererek güçlendirilebilir. Ayrıca, ilk dil çerçevesi uygulandıktan sonra işin potansiyel dağılımı nedeniyle geliştirmeyi hızlandırabilir. Dil yavaş yavaş geliştirilebilir. Mevcut ifadeler ve gramerler için farklı geçiş yolları da mevcuttur.

Michael Hunger Tarafından

Last updated