Comments 9
Такими темпами, Kotlin обойдет Scala по всем статьям лет за 5.
Медленно, но верно движутся к светлому будущему. А лайтбенд че то топчется на месте…
Медленно, но верно движутся к светлому будущему. А лайтбенд че то топчется на месте…
+6
Интересно, а компилятор проверит, что обещания контракта метод действительно выполняет или примет их на веру?
0
Пока неизвестно, как оно будет, но контракт ведь пишет разработчик для конкретного метода. Возможно, выполнение этого контракта тоже будет лежать на совести разработчика.
0
Вот на совести разработчика — это сделает язык дырявым. Простой пример:
fun test() {
val x: String
run { x = "Hello" }
println(x.length)
}
fun <R> run(block: () -> R): Unit {
contract {
callsInPlace(block, EXACTLY_ONCE)
}
//return block() бугагашечка
}
В результате, если мы поверили контракту, но не проверили его, то в методе test()
мы получаем обращение к неинициализированной локальной переменной — то, чего, например, в Java не может быть никогда и ни за что.
На самом деле даже если контракты проверяются при компиляции, не забываем, что компиляция раздельная. Если метод run
в прекомпилированном классе, и мы там подхачили контракт руками, мы получим тот же эффект. Опасной мне кажется эта фича, в общем. Может, конечно, разработчики умнее меня и как-то всё предусмотрели...
+1
Согласен. Но, как заявляли неоднократно разработчики языка, многое может поменяться. Мне кажется, что контракты будут для особых редких ситуаций.
Но нельзя не согласиться, что фича довольно мощная и интересная, хоть пока и нет определенности в области ее применения. Посмотрим, что из этого выйдет.
Но нельзя не согласиться, что фича довольно мощная и интересная, хоть пока и нет определенности в области ее применения. Посмотрим, что из этого выйдет.
+1
Дело может оказаться даже не в самой возможности проверки, а в том, что такие проверки могут быть очень дорогими для компилятора, что значительно увеличит время сборки проекта. Если разработчик покроет много методов контрактами, то само извлечение метаинформации уже будет дороговато, а если добавить и проверку выполнимости контракта…
0
Они не стопроцентно работают, их можно обмануть.
0
Sign up to leave a comment.
Текущая разработка Kotlin