Aslında! Neden sık sık (başlangıçta) düşündüğünden daha karmaşık bir problem için güçlü ve anlamlı bir dil kullanmıyorsunuz ? Özellikle problemi yaşayan insanlar zaten böyle bir dille yetkin olduğunda. (Bina programcıların kendi sorunudur ve programcılar tarafından en iyi şekilde çözülür.)
Ayrıca kendime bu soruyu yıllar önce sordum ve Java'nın özellikle Java projeleri için yapıları tanımlamak için iyi bir dil olduğuna karar verdim. Sonuç olarak, bunun hakkında bir şeyler yapmaya başladım.
YASAL UYARI : Bu cevapta , geliştirmekte olduğum bir yapı sistemi olan iwant'ı destekliyorum . Ama bu zaten tartışmalı bir tartışma olduğundan, tamam olduğuna eminim.
Java’nın yararlarını (güçlülük ve açıklayıcılık) veya özellikle istemediğimi açıklamayacağım. Eğer ilgileniyorsanız, iwant sayfasında daha fazla okuyabilirsiniz .
Bunun yerine, Java'nın (ve diğer GPL'lerin) neden bina için uygun olmadığına kolayca karar verildiğini düşüneceğim. Buradaki birçok cevap ve yorum, bu düşüncenin güzel örnekleridir. Bazı tipik argümanları ele alalım:
"Java zorunludur, ancak yapılar en iyi şekilde bildirimsel olarak tanımlanır" diyebilirler.
Doğru. Ancak bir dili dahili DSL için bir meta dil olarak kullanırken , gerçekte sayılan şey onun sözdizimidir . Java gibi zorunlu bir dilin bile bildirimsel olduğu kandırılabilir . Bilgilendirici görünüyor ve hissediyorsa, (pratik amaçlar için) bildiricidir. Örneğin:
JacocoTargetsOfJavaModules.with()
.jacocoWithDeps(jacoco(), modules.asmAll.mainArtifact())
.antJars(TestedIwantDependencies.antJar(),
TestedIwantDependencies.antLauncherJar())
.modules(interestingModules).end().jacocoReport(name)
Bu, iwant'ın demo projesinden gerçek bir örnek .
Aslında, bunu, kullanıcılarını "test" veya "derleme" gibi zorunlu fiillere maruz bırakan sözde bazı beyan edici yapı sistemleriyle karşılaştırın. Yukarıdaki bildiri sadece isimler, fiiller içermez. Derleme ve test etme, kullanıcıya istediği isimleri vermek için iwant tarafından örtük olarak ele alınan görevlerdir. Dil değil. Onu böyle kullanıyorsun.
"Java ayrıntılı"
Evet, çok fazla Java kodu var. Fakat yine de, dil değil, nasıl kullandığınızdır. Bir uygulama ayrıntılı ise, onu güzel bir soyutlamanın arkasına alın. Birçok GPL bunun için yeterli mekanizmalar sunar.
XML ile yazılmış yukarıdaki Java kod parçasını hayal edin. Parantezleri açılı ayraçlarla değiştirin ve hareket ettirin. Ve sonra her anahtar kelimeyi kapanış etiketi olarak kopyalayın ! Bir Java sözdizimi olduğunu değil ayrıntılı.
(XML ile kıyaslamak bir bebekten şeker almak gibi bir şeydir, ancak birçok yapı XML'de tanımlanmaktadır.)
"Derleme betiğinizi derlemelisiniz"
Bu geçerli bir nokta. Bununla birlikte, çözülmesi gereken küçük bir teknik problemdir. Bunu fasulye kabuğu veya başka bir tercüman kullanarak çözebilirdim . Bunun yerine, başka bir derleme problemi olarak görerek ve basit bir Java bootstrapper derleyen ve çalıştıran basit bir kabuk veya karınca betiği ile önyükleme yaparak çözdüm.
"Java'nın kazanı var"
Doğru. Sınıfları ithal etmelisin, "genel", "sınıf" ve benzerlerinden bahsetmelisin. Ve burada basit harici DSL'ler başlangıçta kolay bir kazanç elde ediyor.
Projeniz bu kazanın çok önemli olduğu kadar önemsizse, tebrikler. Sorununuz zor değil ve onu nasıl çözeceğiniz önemli değil.
Ancak birçok projenin derleme, kapsam raporu ve paketlemeden daha fazlasına ihtiyacı vardır. Java'nın kazan plakası müşterilerin sorunları için kabul edilebilirse, neden sorun oluşturmuyorsunuz? Neden ayakkabılar sadece başkalarının çocukları için yapılıyor?