Litterat programlama kavramında kendim için yeni olsa da (ve bu yüzden tekneyi tamamen kaçırıyorum), bir DSL konseptiyle aynı çizgide gibi görünüyor .
Bir DSL'in arkasındaki fikir, bir problem alanını, bu problemleri çözmek için algoritmalar oluşturmak için kullanılabilecek basit, doğal dil odaklı bir dilbilgisine damıtmaktır.
Bana göre, aynı fikir ya da en azından temel temeli, okuryazar programlama ile aynı ya da en azından yakından ilişkilidir.
Örneğin, güçlü dünyada DSL'leri daha düzenli kullanmak ve yaygın sorunları çözmek için yeni DSL'ler oluşturmak için güçlü bir baskı vardır. Bu push, hem dil içindeki araçlardan (kolay oluşturucular) hem de DSL tabanlı bir API'yi destekleyen çekirdek kitaplıklardan gelir.
En azından dünyanın bu köşesindeki eğilimin okuryazar programlamaya yönelik olduğu düşünüldüğünde, bunun için çabalamanın iyi bir yöntem olduğunu söyleyebilirim.
Ne yazık ki, iyi bir dsl oluşturmak için gerekli düşünme düzeyi çoğu zaman programcıların ötesinde, gördüğümden. Zaman zaman ihtiyaç duyulan bazı kavramlarla şahsen mücadele ettiğimi biliyorum. Bu tür tekniklerin daha yaygın bir şekilde benimsenmesini engelleyen bu zorluk olabilir.
Bu aracı kullanırken klasik durumunuz bir şeydir, ancak oluşturmak tamamen farklı bir düzeydedir.
Bakış açımı biraz genişletmek için, DSL'lerin okuryazar programlama ile aynı şey olması değil, daha çok okuryazar programlamayı daha mümkün kılıyorlar . Özellikle doğal dil DSL'leri olduğunda .
Mükemmel 1.8 sürümünde, doğal dil DSL özelliği daha güçlü komut zincirleri eklenerek önemli ölçüde geliştirildi .
Örneğin, yalnızca kod cümleleri değil , aşağıdaki kod satırları programlanmaktadır :
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Not: Kod örneği Guillaume Laforge'un blogundan gelir
Okuryazar programlamanın ardındaki temel fikir, doğal dilin insanlar için daha anlaşılır olmasıdır. Groovy'nin doğal dil DSL yetenekleri bence bunu çok daha yakın bir gerçeklik haline getiriyor. Özellikle bu DSL'ler bir uygulama için iş kuralları oluşturmak amacıyla kullanıldığında.
Doğal dil kullanarak bir sistemin kritik bileşenlerini "kodlayabilme", okuryazar programlamanın özüdür. Doğal dili kod parçalarıyla dağıtmak, okuryazar programlamanın piç haline getirilmiş bir şeklidir. Yararlı olsa da, doğal dili kod olarak kullanmanıza izin veren doğal dil DSL'lerinin ileriye doğru büyük bir sıçrama olduğuna inanıyorum .
Genel olarak programlama kabiliyetini genişletmek, sürecin bir sonraki adımıdır, ancak büyük ölçüde bunu yapacak araçlar zaten mevcuttur. Evet, henüz "genel" bir DSL yok, ancak daha küçük alanlar için bu özellik mevcut.
Bunun eylemdeki diğer örnekleri için (belirli bir sırayla):