แน่นอน! ทำไมไม่ใช้ภาษาที่ทรงพลังและมีความหมายสำหรับปัญหาที่ซับซ้อนกว่าคนอื่น ๆ ในตอนแรกคิดว่า? โดยเฉพาะอย่างยิ่งเมื่อคนที่ประสบปัญหามีความสามารถในการใช้ภาษาดังกล่าว (การสร้างเป็นปัญหาของโปรแกรมเมอร์และแก้ไขได้ดีที่สุดโดยโปรแกรมเมอร์)
ฉันถามตัวเองด้วยคำถามนี้เมื่อหลายปีก่อนและตัดสินใจว่า Java เป็นภาษาที่ดีสำหรับการกำหนดงานสร้างโดยเฉพาะอย่างยิ่งสำหรับโครงการ Java และด้วยเหตุนี้ฉันจึงเริ่มทำบางสิ่งเกี่ยวกับมัน
การปฏิเสธความรับผิด : ในคำตอบนี้ฉันส่งเสริมiwantระบบสร้างที่ฉันกำลังพัฒนา แต่เนื่องจากนี่เป็นการสนทนาที่แสดงความเห็นต่อไปฉันแน่ใจว่ามันใช้ได้
ฉันจะไม่ทำอย่างละเอียดเกี่ยวกับประโยชน์ของ Java (พลังและความหมาย) หรือ iwant โดยเฉพาะ หากคุณสนใจคุณสามารถอ่านเพิ่มเติมเกี่ยวกับหน้า Iwant
แต่ฉันจะพิจารณาว่าเพราะเหตุใด Java (และ GPL อื่น ๆ ) จึงถูกยกระดับอย่างไม่เหมาะสมสำหรับการสร้าง คำตอบและความคิดเห็นมากมายที่นี่เป็นตัวอย่างที่ดีของการคิดเช่นนี้ ลองพิจารณาข้อโต้แย้งทั่วไป:
"Java มีความจำเป็น แต่การ build นั้นถูกกำหนดไว้อย่างดีที่สุดในวิธีการประกาศ"พวกเขาอาจพูดว่า
จริง แต่เมื่อใช้ภาษาเป็น metalanguage สำหรับเป็นDSL ภายในจริงๆสิ่งที่นับเป็นของไวยากรณ์ แม้แต่ภาษาที่จำเป็นอย่างจาวาก็สามารถถูกหลอกให้เปิดเผยได้ หากมันมีลักษณะและรู้สึกว่าเป็นสิ่งที่ประกาศ ตัวอย่างเช่น:
JacocoTargetsOfJavaModules.with()
.jacocoWithDeps(jacoco(), modules.asmAll.mainArtifact())
.antJars(TestedIwantDependencies.antJar(),
TestedIwantDependencies.antLauncherJar())
.modules(interestingModules).end().jacocoReport(name)
นี้เป็นตัวอย่างจริงจากโครงการสาธิต Iwant
ในความเป็นจริงเปรียบเทียบสิ่งนี้กับบางระบบที่สร้างขึ้นซึ่งคาดคะเนที่เปิดเผยผู้ใช้ของพวกเขากับคำกริยาที่จำเป็นเช่น "ทดสอบ" หรือ "รวบรวม" การประกาศข้างต้นมีเพียงคำนามไม่มีคำกริยา การรวบรวมและการทดสอบคืองานที่ iwant ดำเนินการโดยปริยายเพื่อให้คำนามแก่ผู้ใช้ที่เขา / เธอต้องการ มันไม่ใช่ภาษา มันเป็นวิธีที่คุณใช้
"Java เป็น verbose"
ใช่โค้ด Java มากมายมี verbose แต่มันไม่ใช่ภาษามันเป็นวิธีการใช้งานของคุณ หากการใช้งานเป็น verbose เพียงแค็ปซูลมันอยู่ข้างหลังเป็นนามธรรมที่ดี GPL จำนวนมากมีกลไกที่เพียงพอสำหรับสิ่งนี้
ลองจินตนาการถึงตัวอย่างโค้ด Java ข้างต้นที่เขียนด้วย XML แทนที่วงเล็บด้วยวงเล็บเหลี่ยมแล้วเลื่อนไปรอบ ๆ จากนั้นทำซ้ำคำหลักทุกคำเป็นแท็กปิด! Java เป็นไวยากรณ์คือไม่ละเอียด
(ฉันรู้ว่าการเปรียบเทียบกับ XML เปรียบเสมือนการรับขนมจากเด็ก แต่การสร้างจำนวนมากเกิดขึ้นเพื่อกำหนดใน XML)
"คุณต้องคอมไพล์สคริปต์บิลด์ของคุณ"
นี่คือจุดที่ถูกต้อง อย่างไรก็ตามมันเป็นเพียงปัญหาทางเทคนิคเล็กน้อยที่จะแก้ไข ฉันสามารถแก้ไขได้โดยใช้beanshellหรือล่ามอื่น ๆ แต่ฉันแก้ไขมันโดยรักษามันเป็นเพียงปัญหาการสร้างและ bootstrapping iwant ด้วยเชลล์หรือสคริปต์ง่าย ๆ ที่รวบรวมและรัน Java bootstrapper อย่างง่าย
"Java มีสำเร็จรูป"
จริง คุณต้องนำเข้าคลาสคุณต้องพูดถึง "สาธารณะ" "คลาส" และอื่น ๆ และนี่คือ DSL ภายนอกที่เรียบง่ายทำคะแนนชนะได้ง่าย
และถ้าโครงการของคุณช่างน่าเบื่อหน่ายที่แผ่นฉนวนนี้มีความสำคัญขอแสดงความยินดี ปัญหาของคุณไม่ใช่เรื่องยากและมันไม่สำคัญว่าคุณจะแก้ปัญหาอย่างไร
แต่หลายโครงการต้องการมากกว่าการรวบรวมรายงานความครอบคลุมและบรรจุภัณฑ์ หากสำเร็จรูปของ Java เป็นที่ยอมรับสำหรับปัญหาของลูกค้าทำไมไม่สร้างปัญหา? ทำรองเท้าสำหรับเด็กคนอื่นเท่านั้นทำไม?