В скриптах ";" меня незначительно, но раздражает. Хотя тоже на вкус и цвет, недавно как-то просили помониторить наличие продукта в одном из инет-магазов, который не мог в уведомления о наличии товара. Подумав, я взял дарт из-за его dart:html, он работал как скрипт и там-таки тоже ";". Что касается ди, то тут есть другие мелочи, например, либы, которые должны в два щелчка подключаться с скрипту без каких-то сложных сборок. проблемы как в самих либах, так и в их подключении, хотя может rdmd более-менее адаптирован к этому, тут не знаю.
>и зачем проверка типов должна быть опциональной?
чтобы выключать её для производительности, dsl и метапрограммирования, например, для динамического добавления методов в базовые типы чисел\строк\etc, которые компилятор никак не может вывести, они могут создаваться очень виртуозно. В случае строгих проверок часть динамических фич отвалятся. Ну, такой пример... полезность его сомнительна, но все таки:
def columnName = "User"
String.metaClass."from$columnName" = { "$delegate from $columnName" }
//компилятор скажет, а схренали тут это?
println "select".fromUser()
//select from User