Memang! Mengapa tidak menggunakan bahasa yang kuat dan ekspresif untuk masalah yang lebih kompleks daripada yang sering orang (awalnya) pikirkan? Apalagi ketika orang yang menghadapi masalah sudah kompeten dengan bahasa seperti itu. (Bangunan adalah masalah pemrogram sendiri dan paling baik dipecahkan oleh pemrogram.)
Saya juga bertanya pada diri sendiri pertanyaan ini bertahun-tahun yang lalu dan memutuskan bahwa Jawa adalah bahasa yang baik untuk mendefinisikan bangunan, terutama untuk proyek-proyek Jawa. Dan, sebagai hasilnya, saya mulai melakukan sesuatu tentang itu.
DISCLAIMER : Dalam jawaban ini saya mempromosikan iwant , sistem build yang saya kembangkan. Tapi karena ini adalah diskusi pendapat, saya yakin tidak apa-apa.
Saya tidak akan menguraikan manfaat Jawa (kekuatan dan ekspresif) atau saya ingin secara khusus. Jika Anda tertarik, Anda dapat membaca lebih lanjut di halaman iwant .
Sebagai gantinya saya akan mempertimbangkan mengapa Java (dan GPL lainnya) begitu mudah diberhentikan sebagai tidak sesuai untuk pembangunan. Banyak jawaban dan komentar di sini adalah contoh bagus dari pemikiran seperti itu. Mari kita pertimbangkan beberapa argumen umum:
"Java sangat penting, tetapi build paling baik didefinisikan dengan cara deklaratif" , kata mereka.
Benar. Tetapi ketika menggunakan bahasa sebagai bahasa logam untuk DSL internal , yang benar-benar diperhitungkan adalah sintaksisnya . Bahkan bahasa imperatif seperti Java dapat diakali menjadi deklaratif. Jika terlihat dan terasa deklaratif, itu (untuk tujuan praktis) deklaratif. Sebagai contoh:
JacocoTargetsOfJavaModules.with()
.jacocoWithDeps(jacoco(), modules.asmAll.mainArtifact())
.antJars(TestedIwantDependencies.antJar(),
TestedIwantDependencies.antLauncherJar())
.modules(interestingModules).end().jacocoReport(name)
Ini adalah contoh nyata dari proyek demo iwant .
Faktanya, bandingkan ini dengan beberapa sistem build yang seharusnya deklaratif yang mengekspos pengguna mereka pada kata kerja imperatif seperti "test" atau "compile". Deklarasi di atas hanya berisi kata benda, tanpa kata kerja. Kompilasi dan pengujian adalah tugas-tugas yang secara implisit ditangani oleh iwant untuk memberikan pengguna kata benda yang diinginkannya. Itu bukan bahasa. Begitulah cara Anda menggunakannya.
"Java is verbose"
Ya, banyak kode Java di luar sana yang verbose. Tetapi sekali lagi, itu bukan bahasa, itu bagaimana Anda menggunakannya. Jika suatu implementasi bertele-tele, cukup enkapsulasi di balik abstraksi yang bagus. Banyak GPL menyediakan mekanisme yang memadai untuk ini.
Bayangkan saja cuplikan Java di atas yang ditulis dalam XML. Ganti tanda kurung dengan kurung sudut dan pindahkan. Dan duplikat setiap kata kunci sebagai tag penutup! Java sebagai sintaks yang tidak verbose.
(Saya tahu, membandingkan dengan XML seperti mengambil permen dari bayi, tetapi banyak bangunan yang didefinisikan dalam XML.)
"Anda harus mengkompilasi skrip pembuatan Anda"
Ini adalah poin yang valid. Namun demikian, ini hanya masalah teknis kecil yang harus dipecahkan. Saya bisa menyelesaikannya dengan menggunakan beanhell atau penerjemah lain. Sebagai gantinya, saya menyelesaikannya dengan memperlakukannya hanya sebagai masalah build dan bootstrap iwant dengan shell sederhana atau skrip semut yang mengkompilasi dan menjalankan bootstrapper Java sederhana.
"Java memiliki boilerplate"
Benar. Anda harus mengimpor kelas, Anda harus menyebutkan "publik", "kelas" dan sebagainya. Dan di sini DSL eksternal sederhana mencetak kemenangan awal yang mudah.
Dan jika proyek Anda sangat sepele sehingga boilerplate ini signifikan, selamat. Masalah Anda bukan yang sulit dan benar-benar tidak masalah bagaimana Anda menyelesaikannya.
Tetapi banyak proyek membutuhkan lebih dari kompilasi, laporan cakupan dan pengemasan. Jika boilerplate Java dapat diterima untuk masalah pelanggan, mengapa tidak membangun masalah? Mengapa hanya membuat sepatu untuk anak-anak orang lain?