Search
Write a publication
Pull to refresh
5
0
Павел @jeremy_spb

Teamlead

Send message

Котлин более свежий язык. Я думаю, что они как раз учли ошибки других JVM языков. Ну по крайней мере постарались. И в Котлин версии уже хаки грязные не проходят. Хотя конечно сложно представить, что кто-то будет такой ад пытаться сделать в продакшен коде.

Я думаю автор статьи имел введу Junior Developers, а не возраст. Хотя, конечно, думаю знание конкретно liquidbase не является атрибутом Senior разработчика на Java. Но думаю большинство сеньеров так или иначе сталкивались с этим инструментом.
Да, достаточно интересное использование, но думаю перегруженное для такого. По производительности надо замерять конечно.
Как мне кажется, вопрос же сложности компилятора. До какой вложенности стоит запоминать контекст? А если мы присваиваем новой переменной ссылку внутри новой функции, а потом проверяем? Стоит ли нам в этом случае запоминать контекст? Это трейдофф между мощностью компилятора, временем компиляции и конечно же ресурсами, которые используются для компиляции
Нет, так не сработает. Даже если вспомогательная функция будет inline.
Java является строго типизированным языком. Все классы в иерархии идут от класс Object. Зачастую методы могут принимать обобщенный тип, аж до Object и в зависимости от типа менять свое поведение. Кроме того, компилятор не запоминает контекст, в отличии, например, от Kotlin. Для него то, что мы проверили на String уже на следующей строке не имеет значения.
public class Sample {
   public void method(Object obj) {
      System.out.println(obj.toUpperCase()); // compile-time error
   }
   public void methodB(Object obj) {
      if (obj instanceof String) {
         System.out.println(obj.toUpperCase()); // compile-time error
      }
   }
}


В этом плане Kotlin является более продвинутым в компиляции. Вот тот же пример на Kotlin
fun sampleFun(obj: Any) {
   if (obj is String) {
      print(obj.toUpperCase())  // it works
  }
}

Ну в целом мы в наших проектах активно используем javax.annotation.nonnull и nullable. Вместе с современной IDE в нашем коде nptr ex не случается, максимум на стыке со сторонними библиотеками. Но есть побочные явления:
1) код естественно захламляется
2) можно забыть поставить аннотацию и ide ничего не скажет (код ревью нам в помощь)
3) в постороннем коде аннотаций может и не быть (и скорее всего и не будет)
Добавить в jdk такую аннотацию можно было бы и в compile time проверять. Это безусловно усложнит анализ кода. Надо будет отслеживать проверки на null. Кроме того весь багаж кода как-то надо будет поддержать по обратной совместимости. Не будут же все переписывать библиотеки?


Честно говоря мне очень нравится в этом плане Kotlin. nullable типы как отдельный класс типов очень удобен. Пока явно не указал, все notnull. Кроме того Kotlin компилятор хорошо понимает все виды java notnull аннтотации. Прям хорошая работа

В общем у меня надежда есть, но к сожалению я не перформанс инженер Java\JVM и сказать авторитетно ничего не смогу, пока не выйдет в public финальная версия. А потом можно будет попробовать сравнить, сделав какие-нибудь объективные тесты на одинаковом окружении.
Мое мнение тут субъективно. Пока все последние оптимизации JVM и стандартной библиотеки очень даже радуют.
На последнем Joker хороший доклад Олега Куксенко на эту тему был. Если кратко, решает JVM. Она может положить как в стек, так и в кучу.
Вот вырезка из PDF доклада
JVM decides if:
● allocate on heap
OR
● put on stack (locals, parameters, result)
● inline into container class
● inline into array (flattened array)

Посмотрим, конечно, что в финале выйдет. Но тем не менее это уже шаг вперед.
Для этого стоит дождаться value types от Valhalla. Value types выглядят как очень хороший шаг вперед в области эффективности при должном уровне абстракции. Но пока там есть много открытых вопросов. Это реально один из самых интересных проектов Java. Наверно Loom и Valhalla для меня самые интересные на текущий момент.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity