Alana özgü dil - Domain-specific language

Bir alana özgü dil (DSL) bir bilgisayar dili belirli bir uygulamaya özel alan adı. Bu, bir genel amaçlı dil (GPL), etki alanları arasında geniş ölçüde uygulanabilir. Yaygın etki alanları için yaygın olarak kullanılan dillerden, örneğin: HTML web sayfaları için, yalnızca bir veya birkaç yazılım parçası tarafından kullanılan dillere kadar, örneğin LAPA yazılım kodu. DSL'ler, dil türüne göre daha da alt bölümlere ayrılabilir ve alana özel biçimlendirme Diller, alana özgü modelleme Diller (daha genel olarak, şartname dilleri ) ve alana özgü programlama Diller. Özel amaçlı bilgisayar dilleri, bilgisayar çağında her zaman var olmuştur, ancak "alana özgü dil" terimi, yükselişe bağlı olarak daha popüler hale gelmiştir. alana özgü modelleme. Daha basit DSL'ler, özellikle tek bir uygulama tarafından kullanılanlar, bazen gayri resmi olarak adlandırılır mini diller.

Genel amaçlı diller ile alana özgü diller arasındaki çizgi her zaman keskin değildir, çünkü bir dil belirli bir alan için özel özelliklere sahip olabilir, ancak daha geniş bir şekilde uygulanabilir veya tersine ilke olarak geniş uygulama yeteneğine sahip olabilir, ancak pratikte öncelikle belirli bir alan. Örneğin, Perl başlangıçta bir metin işleme ve yapıştırıcı dili olarak geliştirilmiştir. AWK ve kabuk komut dosyaları, ancak daha sonra çoğunlukla genel amaçlı bir programlama dili olarak kullanıldı. Aksine, PostScript bir Turing tamamlandı dil ve prensipte herhangi bir görev için kullanılabilir, ancak pratikte dar bir şekilde bir sayfa açıklama dili.

Kullanım

Uygun DSL'lerin tasarımı ve kullanımı, alan mühendisliği, eldeki etki alanına uygun bir dil kullanarak - bu, mevcut bir DSL veya GPL kullanmaktan veya yeni bir DSL geliştirmekten oluşabilir. Dil odaklı programlama Problemleri ifade etmek için özel amaçlı dillerin yaratılmasını problem çözme sürecinin standart bir parçası olarak görür. Mevcut bir dili yeniden kullanmak yerine alana özgü bir dil (onu destekleyen yazılımla) oluşturmak, dil belirli bir sorun türünün veya çözümün mevcut bir dilin izin verebileceğinden daha açık bir şekilde ifade edilmesine izin veriyorsa faydalı olabilir. söz konusu sorun yeterince sık yeniden ortaya çıkıyor. Pragmatik olarak, bir DSL belirli bir problem alanına, belirli bir problem temsil tekniğine, belirli bir çözüm tekniğine veya bir alanın diğer yönlerine özel olabilir.

Genel Bakış

Alana özgü bir dil, belirli bir alandaki sorunları çözmek için özel olarak oluşturulur ve bunun dışındaki sorunları çözme amacı taşımaz (teknik olarak mümkün olsa da). Bunun aksine, birçok alandaki sorunları çözmek için genel amaçlı diller oluşturulmuştur. Alan aynı zamanda bir iş alanı da olabilir. Bazı iş alanı örnekleri şunları içerir:

  • hayat sigortası poliçeleri (büyük bir sigorta şirketi tarafından dahili olarak geliştirilmiştir)
  • savaş simülasyonu
  • maaş hesaplama
  • fatura

Alana özgü bir dil, küçük bir programlama dili ile bir komut dosyası dili ve genellikle benzer bir şekilde kullanılır. programlama kütüphanesi. Bu kavramlar arasındaki sınırlar, komut dosyası dilleri ile genel amaçlı diller arasındaki sınıra çok benzer şekilde oldukça bulanıktır.

Tasarım ve uygulamada

Alana özgü diller, tasarım ve uygulamada çok özel hedefleri olan dillerdir (veya genellikle beyan edilen sözdizimleri veya gramerlerdir). Alana özgü bir dil, görsel bir diyagram oluşturma dilinden biri olabilir, örneğin Genel Eclipse Modelleme Sistemi programatik soyutlamalar, örneğin Eclipse Modelleme Çerçevesi veya metin dilleri. Örneğin, komut satırı yardımcı programı grep var Düzenli ifade metin satırlarındaki desenlerle eşleşen sözdizimi. sed yardımcı program, normal ifadeleri eşleştirmek ve değiştirmek için bir sözdizimi tanımlar. Çoğu zaman, bu küçük diller bir kabuk daha karmaşık programlama görevlerini gerçekleştirmek için.

Alana özgü diller arasındaki çizgi ve komut dosyası dilleri biraz bulanık, ancak alana özgü diller genellikle dosya sistemi erişimi, süreçler arası kontrol ve tam özellikli programlama dillerini, komut dosyası oluşturma veya diğerlerini karakterize eden diğer işlevler için düşük düzey işlevlerden yoksundur. Etki alanına özgü birçok dil, bayt kodu veya çalıştırılabilir kod, ancak çeşitli medya nesnelerine: GraphViz dışa aktarır PostScript, GIF, JPEG vb. nerede Csound ses dosyalarına derler ve ışın izleme etki alanına özel bir dil gibi POV grafik dosyalarına derler. Gibi bir bilgisayar dili SQL ilginç bir durum sunar: belirli bir alana özgü olduğu için (SQL örneğinde, ilişkisel veritabanlarına erişme ve yönetme) ve genellikle başka bir uygulamadan çağrıldığı için alana özgü bir dil olarak kabul edilebilir, ancak SQL'de daha fazla anahtar kelime ve işlev vardır. birçok komut dosyası dili ve genellikle kendi başına bir dil olarak düşünülür, belki de programlamadaki veritabanı manipülasyonunun yaygınlığı ve dilde uzman olmak için gereken ustalık miktarı nedeniyle.

Bu çizgiyi daha da bulanıklaştıran birçok alana özgü dil, API'leri açığa çıkardı ve diğer programlama dillerinden, yürütme akışını bozmadan veya ayrı bir işlemi çağırmadan erişilebilir ve böylece programlama kitaplıkları olarak çalışabilir.

Programlama araçları

Bazı alana özgü diller, zaman içinde tam özellikli programlama araçlarını içerecek şekilde genişler ve bu da bir dilin alana özgü olup olmadığı sorusunu daha da karmaşık hale getirir. İyi bir örnek Fonksiyonel dil XSLT, özellikle bir XML grafiğini diğerine dönüştürmek için tasarlanmış olup, başlangıcından bu yana (özellikle 2.0 sürümünde) çeşitli dosya sistemi etkileşimi, dize ve tarih işleme ve veri tipleme biçimlerine izin verecek şekilde genişletilmiştir.

İçinde model odaklı mühendislik, etki alanına özgü birçok dil örneği şu şekilde bulunabilir: OCL, iddialı modelleri dekore etmek için bir dil veya QVT, alana özgü bir dönüşüm dili. Ancak, gibi diller UML tipik olarak genel amaçlı modelleme dilleridir.

Özetlemek gerekirse, bir benzetme faydalı olabilir: Çok Küçük Dil, yiyecek kesmekten ağaçları kesmeye kadar binlerce farklı şekilde kullanılabilen bir bıçak gibidir. Alana özgü bir dil, elektrikli bir matkap gibidir: çok çeşitli kullanımlara sahip güçlü bir araçtır, ancak belirli bir bağlamı, yani nesnelerde delikler açar. Genel Amaçlı Dil, çeşitli görevleri yerine getirmek için tasarlanmış çeşitli araçlara sahip eksiksiz bir çalışma tezgahıdır. Alana özgü diller, mevcut çalışma tezgahlarına bakarak daha iyi bir uygulamaya ihtiyaç duyduklarını fark eden ve belirli bir alana özgü dilin tam olarak bunu sağladığını gören programcılar tarafından kullanılmalıdır.

Alana özgü dil konuları

Harici ve Gömülü Etki Alanına Özgü Diller

Bağımsız bir yorumlayıcı veya derleyici aracılığıyla uygulanan DSL'ler, Dış Etki Alanına Özgü Diller. İyi bilinen örnekler arasında LaTeX veya AWK bulunur. Olarak bilinen ayrı bir kategori Gömülü (veya Dahili) Etki Alanına Özgü Diller genellikle bir kitaplık olarak bir ana bilgisayar dili içinde uygulanır ve ana bilgisayar dilinin yeteneklerine bağlı olmasına rağmen, ana bilgisayar dilinin sözdizimi ile sınırlı olma eğilimindedir.[1]

Kullanım modelleri

Alana özgü diller için birkaç kullanım modeli vardır:[2][3]

  • Doğrudan kullanıcı işlemiyle çağrılan bağımsız araçlarla işleme, genellikle komut satırında veya bir Makefile (ör. normal ifade eşleşmesi için grep, sed, lex, yacc, the GraphViz araç seti vb.)
  • Programlama dili makro sistemleri kullanılarak uygulanan ve derleme zamanında veya gerçek zamanlı olarak bir ana bilgisayar genel amaçlı dile dönüştürülen veya genişletilen etki alanına özgü diller
  • yerleşik alana özgü dil (eDSL),[4] etki alanına özgü dil öğeleri (veri türleri, rutinler, yöntemler, makrolar vb.) eklerken ana bilgisayar genel amaçlı dilinin veya bir alt kümesinin sözdizimini kullanan kitaplıklar olarak uygulanır. (Örneğin. jQuery, Tepki, Gömülü SQL, LINQ )
  • Genel amaçlı dillerde yazılan programlardan (çalışma zamanında) çağrılan etki alanına özgü diller C veya Perl, belirli bir işlevi gerçekleştirmek için, genellikle işlemin sonuçlarını daha sonraki işlemler için "ana bilgisayar" programlama diline döndürmek; genellikle bir tercüman veya sanal makine etki alanına özgü dil, ana bilgisayar uygulamasına yerleştirilmiştir (ör. biçim dizeleri, bir normal ifade motoru )
  • Kullanıcı uygulamalarına (örn. Elektronik tablolardaki makro dilleri) gömülü olan ve (1) uygulamanın kullanıcıları tarafından yazılan kodu yürütmek için kullanılan, (2) uygulama tarafından dinamik olarak oluşturulan veya (3) alana özgü diller her ikisi de.

Etki alanına özgü birçok dil birden fazla şekilde kullanılabilir.[kaynak belirtilmeli ] Bir ana bilgisayar diline gömülü DSL kodu, sed, AWK, Perl veya JavaScript'teki regex'ler gibi özel sözdizimi desteğine sahip olabilir veya dizeler olarak aktarılabilir.

Tasarım hedefleri

Yazılım mühendisliğine özel bir dil yaklaşımını benimsemek hem riskleri hem de fırsatları içerir. İyi tasarlanmış alana özgü dil, bunlar arasında uygun dengeyi bulmayı başarır.

Alana özgü dillerin, genel amaçlı dillerinkiyle çelişen önemli tasarım hedefleri vardır:

  • Alana özgü diller daha az kapsamlıdır.
  • Etki alanına özgü diller, etki alanlarında çok daha anlamlı.
  • Etki alanına özgü diller minimum düzeyde olmalıdır fazlalık.

Deyimler

Programlamada deyimler, programcılar tarafından ortak geliştirme görevlerini yerine getirmek için empoze edilen yöntemlerdir, örneğin:

  • Pencereyi kapatmadan önce verilerin kaydedildiğinden emin olun.
  • Program davranışını etkiledikleri için komut satırı parametreleri her değiştiğinde kodu düzenleyin.

Genel amaçlı programlama dilleri bu tür deyimleri nadiren destekler, ancak alana özgü diller bunları tanımlayabilir, örneğin:

  • Komut dosyası verileri otomatik olarak kaydedebilir.
  • Alana özgü bir dil, komut satırı girişini parametrelendirebilir.

Örnekler

Alana özgü dillerin örnekleri şunları içerir: HTML, Logo kurşun kalem gibi çizim için Verilog ve VHDL donanım tanımlama dilleri, MATLAB ve GNU Oktav matris programlama için, Mathematica, Akçaağaç ve Maxima için sembolik matematik, Şartname ve Açıklama Dili reaktif ve dağıtılmış sistemler için, hesap tablosu formüller ve makrolar, SQL için ilişkisel veritabanı sorguları, YACC yaratmak için gramerler ayrıştırıcılar, düzenli ifadeler belirtmek için lexers, Genel Eclipse Modelleme Sistemi diyagram oluşturma dilleri oluşturmak için, Csound ses ve müzik sentezi ve giriş dilleri için GraphViz ve GrGen, için kullanılan yazılım paketleri grafik düzeni ve grafiği yeniden yazma.

GameMaker Dili

Tarafından kullanılan GML komut dosyası dili GameMaker Stüdyosu acemi programcıların programlamayı kolayca öğrenebilmeleri için hedeflenen alana özgü bir dildir. Dil, dahil olmak üzere birden çok dilin bir karışımı olarak hizmet ederken Delphi, C ++, ve TEMEL tam teşekküllü bir programlama dilinin yapıları, veri türleri ve diğer özelliklerinde eksiklik vardır. Yerleşik işlevlerin çoğu korumalı kolay taşınabilirlik amacıyla. Dil, öncelikle herkesin dili öğrenmesini ve bir oyun geliştirmesini kolaylaştırmaya hizmet eder.

Unix kabuk komut dosyaları

Unix kabuk komut dosyaları için alana özgü dile iyi bir örnek verin veri[5] organizasyon. Verileri işleyebilirler Dosyalar veya birçok farklı şekilde kullanıcı girişi. Alan soyutlamaları ve gösterimleri şunları içerir: Canlı Yayınlar (stdin ve stdout gibi) ve akışlardaki işlemler (yeniden yönlendirme ve boru gibi). Bu soyutlamalar, veri akışını ve organizasyonunu tanımlamak için sağlam bir dil oluşturmak için bir araya gelir.

Dil, çalıştırmak ve kontrol etmek için basit bir arayüzden (bir komut dosyası) oluşur süreçler küçük performans görevler. Bu görevler, deyimler verileri tablolar, grafikler, çizelgeler vb. gibi istenen bir formatta organize etmek.

Bu görevler basit kontrol akışı ve arama ve değiştirme gibi birçok yaygın kullanımı kapsayan dizi işleme mekanizmaları dizi dosyalarda veya dizelerin oluşumlarını sayma (sıklık sayma).

Unix betik dilleri olmasına rağmen Turing tamamlandı farklıdırlar genel amaçlı diller.[açıklama gerekli ]

Uygulamada, komut dosyası dilleri küçük Unix araçlarını bir araya getirmek için kullanılır. grep, ls, çeşit veya wc.

ColdFusion İşaretleme Dili

Soğuk füzyon 'nin ilişkili komut dosyası dili, veri odaklı web siteleri için etki alanına özgü bir dilin başka bir örneğidir. Bu komut dosyası dili, Java, .NET, C ++, SMS, e-posta, e-posta sunucuları, http, ftp gibi dilleri ve hizmetleri bir araya getirmek için kullanılır. web sitelerinde kullanım için değişim, dizin hizmetleri ve dosya sistemleri.

ColdFusion İşaretleme Dili (CFML), ColdFusion sayfalarında veri kaynakları ile etkileşim kurmak, verileri işlemek ve çıktıyı görüntülemek için kullanılabilen bir dizi etiket içerir. CFML etiketi sözdizimi, HTML öğesi söz dizimine benzer.

Erlang OTP

Erlang Açık Telekom Platformu başlangıçta içeride kullanılmak üzere tasarlanmıştır Ericsson alana özgü bir dil olarak. Dilin kendisi, sonlu durum makineleri, genel sunucular ve olay yöneticileri oluşturmak için, bir mühendisin uygulamaları dağıtmasına veya endüstri karşılaştırmalarında karma bir etki alanı kümesine yönelik diğer dillerden daha iyi performans gösterdiği kitaplıkları desteklemesine hızlı bir şekilde izin veren bir kitaplık platformu sunar. , C ve C ++ gibi. Dil artık resmi olarak açık kaynak ve web sitelerinden indirilebilir.

FilterMeister

FilterMeister, belirli bir amaç için C'ye dayalı bir programlama diline sahip bir programlama ortamıdır. Photoshop uyumlu görüntü işleme filtresi eklentileri; FilterMeister kendi başına bir Photoshop eklentisi olarak çalışır ve komut dosyalarını yükleyip yürütebilir veya bunları bağımsız eklentiler olarak derleyip dışa aktarabilir. FilterMeister dili, C dilinin ve işlev kitaplığının önemli bir bölümünü yeniden üretmesine rağmen, yalnızca yapabilen özellikleri içerir. Photoshop eklentileri bağlamında kullanılabilir ve yalnızca bu belirli etki alanında yararlı olan bir dizi belirli özellik ekler.

MediaWiki şablonları

Şablon Özelliği MediaWiki temel amacı oluşturmayı desteklemek olan yerleşik alana özgü bir dildir. sayfa şablonları ve aşma MediaWiki sayfalarının diğer MediaWiki sayfalarına (referans olarak dahil edilmesi).

Yazılım mühendisliği kullanımları

Verimliliği ve kalitesini artırmak için alana özgü dillere çok ilgi olmuştur. yazılım Mühendisliği. Alana özgü dil, verimli yazılım mühendisliği için muhtemelen sağlam bir araç seti sağlayabilir. Bu tür araçlar, kritik yazılım sistemlerinin gelişimine girmeye başlıyor.

Yazılım Maliyet Azaltma Araç Seti[6] bunun bir örneğidir. Araç seti, bir belirtim düzenleyicisi içeren bir yardımcı programlar paketidir. gereksinimleri belirtimi, değişken bağımlılıkları görüntülemek için bir bağımlılık grafiği tarayıcısı, bir tutarlılık denetleyicisi eksik vakaları yakalamak için iyi biçimlendirilmiş formüller şartnamede, bir model denetleyicisi ve bir teorem atasözü program özelliklerini spesifikasyona göre kontrol etmek ve gereksinimlere göre değişmezleri otomatik olarak oluşturan bir değişmez üretici.

Daha yeni bir gelişme dil odaklı programlama entegre bir yazılım mühendisliği metodoloji temel olarak etki alanına özgü diller oluşturmaya, optimize etmeye ve kullanmaya dayanır.

Meta derleyiciler

Tamamlayıcı dil odaklı programlama ve alana özgü diğer tüm dil biçimlerinin yanı sıra, derleyici yazma araçları sınıfıdır. meta derleyiciler. Bir meta derleyici yalnızca oluşturmak için yararlı değildir ayrıştırıcılar ve kod üreteçleri etki alanına özgü diller için, ancak meta derleyici kendisi alana özgü bir metaldil etki alanı için özel olarak tasarlanmıştır metaprogramlama.

Alana özgü dilleri ayrıştırmanın yanı sıra, meta derleyiciler çok çeşitli yazılım mühendisliği ve analiz araçları oluşturmak için kullanışlıdır. Meta derleyici metodolojisi genellikle şurada bulunur: program dönüştürme sistemleri.

Hem bilgisayar biliminde hem de bilgisayar endüstrisinde önemli bir rol oynayan meta derleyiciler şunları içerir: Meta-II,[7] ve onun soyundan gelen TreeMeta.[8]

Unreal Engine sürüm 4 ve diğer oyunlardan önce

Gerçek dışı ve Gerçekdışı Turnuva adı verilen bir dili ortaya çıkardı UnrealScript. Bu, rakibe kıyasla değişikliklerin hızlı bir şekilde geliştirilmesine izin verdi Deprem (kullanmak Id Tech 2 motor). Id Tech motoru standart olarak kullanıldı C C kodunun öğrenilmesi ve doğru bir şekilde uygulanması gerekirken, UnrealScript kullanım kolaylığı ve verimlilik için optimize edilmiştir. Benzer şekilde, daha yeni oyunların geliştirilmesi kendi özel dillerini tanıttı, daha yaygın bir örnek Lua komut dosyası oluşturmak için.[kaynak belirtilmeli ]

Politika Otomasyonu için Kural Motorları

Çeşitli İş Kuralları Motorları hem devlet hem de özel sektörde kullanılan politika ve iş kurallarını otomatikleştirmek için geliştirilmiştir. ILOG, Oracle Politika Otomasyonu, DTRules, Salya ve diğerleri, çeşitli sorunlu alanları desteklemeyi amaçlayan DSL'ler için destek sağlar. DTRules Bir Kural Kümesi içinde birden çok DSL kullanımı için bir arayüz tanımlayacak kadar ileri gider.

İş Kuralları Motorlarının amacı, iş mantığının mümkün olduğunca insan tarafından okunabilir bir şekilde temsilini tanımlamaktır. Bu ikisine de izin verir konu uzmanı ve geliştiriciler ile çalışmak ve iş mantığının aynı temsilini anlamak. Çoğu Kural Motoru, iş mantığı için kontrol yapılarını basitleştirmek için hem bir yaklaşım sağlar (örneğin, Bildirime Dayalı Kuralları veya Karar Tabloları ) DSL'ler lehine programlama sözdizimine alternatiflerle birleşti.

İstatistiksel modelleme dilleri

İstatistiksel modelleyiciler, etki alanına özgü diller geliştirmiştir. R (bir uygulaması S dil),Hatalar, Jags, ve Stan. Bu diller, Bayes modelini açıklamak için bir sözdizimi sağlar ve simülasyonu kullanarak bunu çözmek için bir yöntem üretir.

Birden çok programlama diline model ve hizmetler oluşturun

Bir temelde nesne işleme ve hizmetler oluşturun. Arayüz Açıklama Dili Web uygulamaları için JavaScript, dokümantasyon için HTML, yüksek performanslı kod için C ++ gibi etki alanına özel bir dil için. Bu, aşağıdaki gibi diller arası çerçevelerle yapılır. Apache Thrift veya Google Protokol Tamponları.

Kornişon

Kornişon Yazılımın davranışını, bu davranışın nasıl uygulandığını belirtmeden kontrol etmek için test senaryolarını tanımlamak için tasarlanmış bir dildir. Teknik olmayan kullanıcılar tarafından doğal dil sözdizimi kullanılarak okunması ve kullanılması amaçlanmıştır. hat odaklı tasarım. Gherkin ile tanımlanan testler daha sonra genel bir programlama dilinde uygulanmalıdır. Daha sonra, bir Gherkin programındaki adımlar, geliştirici olmayanlar tarafından erişilebilen yöntem çağrısı için bir sözdizimi görevi görür.

Diğer örnekler

Alana özgü dillerin diğer önemli örnekleri şunları içerir:

Avantajlar ve dezavantajlar

Avantajlardan bazıları:[2][3]

  • Alana özgü diller, çözümlerin deyim içinde ve problem alanının soyutlama düzeyinde ifade edilmesine izin verir. Buradaki fikir, alan uzmanlarının kendilerinin de alana özgü dil programlarını anlayabilmeleri, doğrulayabilmeleri, değiştirebilmeleri ve hatta sıklıkla geliştirebilmeleridir. Ancak bu nadiren böyledir.[9]
  • Alana özgü diller izin verir doğrulama etki alanı düzeyinde. Dil yapıları güvenli olduğu sürece, onlarla yazılan herhangi bir cümle güvenli kabul edilebilir.[kaynak belirtilmeli ]
  • Alana özgü diller, ticari bilgi sistemlerinin gelişimini geleneksel yazılım geliştiricilerinden (daha az teknik uzmanlığa sahip olmalarına rağmen) alan hakkında daha derin bilgiye sahip olan daha büyük alan uzmanları grubuna kaydırmaya yardımcı olabilir.[10]
  • Alana özgü diller, sınırlı kapsamları nedeniyle öğrenilmesi daha kolaydır.

Bazı dezavantajlar:

  • Yeni bir dil öğrenmenin maliyeti ve sınırlı uygulanabilirliği
  • Alana özgü bir dilin yanı sıra onunla geliştirmek için gereken araçları tasarlama, uygulama ve sürdürmenin maliyeti (IDE )
  • Uygun kapsamın bulunması, ayarlanması ve sürdürülmesi.
  • Alana özgü ve genel amaçlı programlama dili yapıları arasındaki ödünleşmeleri dengelemenin zorluğu.
  • Olası işlemci kaybı verimlilik elle kodlanmış yazılıma kıyasla.
  • Benzer, standart olmayan alana özgü dillerin çoğalması, örneğin, bir sigorta şirketinde kullanılan bir DSL ile başka bir sigorta şirketinde kullanılan bir DSL.[11]
  • Teknik olmayan alan uzmanları, DSL programlarını kendi başlarına yazmayı veya değiştirmeyi zor bulabilirler.[9]
  • DSL'i BT sisteminin diğer bileşenleriyle entegre etmenin artan zorluğu (genel amaçlı bir dille entegre etmeye kıyasla).
  • Belirli bir DSL'de yetersiz uzman arzı, işgücü maliyetlerini artırma eğilimindedir.
  • Kod örneklerini bulmak daha zor.

Alana özgü dilleri tasarlamak için araçlar

  • JetBrains MPS alana özgü dilleri tasarlamak için bir araçtır. Kullanır projeksiyonel düzenleme Bu, dil ayrıştırıcılarının sınırlarını aşmaya ve tablolar ve diyagramlar gibi DSL düzenleyicileri oluşturmaya izin verir. Dil odaklı programlamayı uygular. MPS, dil tanımı için bir ortamı birleştirir. dil tezgahı ve bu tür diller için Entegre Geliştirme Ortamı (IDE).[12]
  • Xtext programlama dilleri ve alana özgü diller (DSL'ler) geliştirmek için açık kaynaklı bir yazılım çerçevesidir. Standart ayrıştırıcı oluşturuculardan farklı olarak, Xtext yalnızca bir ayrıştırıcı değil, aynı zamanda soyut sözdizimi ağacı için bir sınıf modeli de üretir. Ek olarak, tam özellikli, özelleştirilebilir Eclipse tabanlı bir IDE sağlar.[13]
  • Raket derleyici, JIT derleyici, IDE ve hem etki alanına özel diller hem de tamamen yeni diller oluşturmaya olanak sağlamak için tasarlanmış komut satırı araçlarını içeren bir çapraz platform dil araç zinciridir.[14][15]

Ayrıca bakınız

Referanslar

  1. ^ Fowler, Martin; Parsons, Rebecca. "Etki Alanına Özgü Diller". Alındı 6 Temmuz 2019.
  2. ^ a b Marjan Mernik, Jan Heering ve Anthony M. Sloane. Alana özgü diller ne zaman ve nasıl geliştirilir. ACM Hesaplama Anketleri, 37(4):316–344, 2005.doi:10.1145/1118890.1118892
  3. ^ a b Diomidis Spinellis. Alana özgü diller için dikkate değer tasarım modelleri. Sistemler ve Yazılım Dergisi, 56 (1): 91–99, Şubat 2001. doi:10.1016 / S0164-1212 (00) 00089-3
  4. ^ Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (Mart 2018). "Programlanabilir Programlama Dili". ACM'nin iletişimi. 61 (3): 62–71. doi:10.1145/3127323. S2CID  3887010. Alındı 15 Mayıs 2019.
  5. ^ "The Linux Information Project (LINFO) tarafından veri tanımı". www.linfo.org. Alındı 2016-01-14.
  6. ^ Heitmeyer, C. (1998). "Yazılım gereksinimlerini belirtmek için SCR * araç setini kullanma" (PDF). Bildiriler. Endüstriyel Mukavemet Biçimsel Spesifikasyon Teknikleri 2. IEEE Çalıştayı. IEEE. sayfa 12–13. doi:10.1109 / WIFT.1998.766290. ISBN  0-7695-0081-1. S2CID  16079058. Arşivlenen orijinal (PDF) 2004-07-19 tarihinde.
  7. ^ Shorre, D.V. (1964). "META II bir sözdizimi odaklı derleyici yazma dili". 1964 19. ACM Ulusal Konferansı Bildirileri: 41.301–41.3011. doi:10.1145/800257.808896. S2CID  43144779.
  8. ^ Carr, C. Stephen; Luther, David A .; Erdmann, Şerian (1969). "TREE-META Derleyici-Derleyici Sistemi: Univac 1108 ve General Electric 645 için Meta Derleyici Sistemi". Utah Üniversitesi Teknik Raporu RADC-TR-69-83.
  9. ^ a b Freudenthal, Margus (1 Ocak 2009). "Bir Gümrük Bilgi Sisteminde Alana Özgü Diller". IEEE Yazılımı: 1. doi:10.1109 / MS.2009.152.
  10. ^ Aram, Michael; Neumann, Gustaf (2015-07-01). "İş bilgi sistemlerinin birlikte geliştirilmesinin çok katmanlı analizi" (PDF). İnternet Hizmetleri ve Uygulamaları Dergisi. 6 (1). doi:10.1186 / s13174-015-0030-8. S2CID  16502371.
  11. ^ Miotto, Eric. "Alana özgü ve bilimsel bilgi yapılarının Modele Dayalı Mühendislikte entegrasyonu hakkında" (PDF). Arşivlenen orijinal (PDF) 2011-07-24 tarihinde. Alındı 2010-11-22.
  12. ^ "JetBrains MPS: Etki Alanına Özgü Dil Oluşturucu".
  13. ^ "Xtext".
  14. ^ Tobin-Hochstadt, S .; St-Amour, V .; Culpepper, R .; Flatt, M ​​.; Felleisen, M. (2011). "Kitaplıklar Olarak Diller" (PDF). Programlama Dili Tasarımı ve Uygulaması.
  15. ^ Flatt Matthew (2012). "Racket'te Dil Oluşturmak". ACM'nin iletişimi. Alındı 2012-04-08.

daha fazla okuma

Dış bağlantılar

Nesne