Comments 19
Текстовые блоки, конечно прорыв. Как их собираются подсвечивать? В примере видно, что подсветка синтаксиса не та (подсвечено do).
В Java строковые литералы (и текстовые блоки) не поддерживают интерполяцию выражений (подстановку переменных), как некоторые другие языки. Исторически строковые выражения создавались с помощью обычной конкатенации строк (+). В Java 5 был добавлен String:format для форматирования строк в стиле «printf».
Java не является первопроходцем в реализации Текстовых блоков. В данном случае она выступает в роли догоняющего, т.к. многострочные строки давно реализованы во многих языках. В статье www.infoq.com/articles/java-text-blocks есть табличка с перечислением языков, которые так или иначе поддерживают разные виды строковых летиралов.
Я понимаю при этом, что не всякое решение можно сделать не нарушив совместимость (в том же груви эти строки с интерполяцией — это не String, это GString, и это может что-то поломать).
Non-Goals
- Text blocks do not directly support string interpolation. Interpolation may be considered in a future JEP. In the meantime, the new instance method String::formatted aids in situations where interpolation might be desired.
- Text blocks do not support raw strings, that is, strings whose characters are not processed in any way.
интерполяция и Raw-строки — это, видимо, вопрос будущего. Ждем)
Если говорить про интерполяцию, то это выглядит в библиотеке как StringContext, где места для подстановки сами по себе (в виде массива кусков строки), а подставляемые параметры — сами по себе. То есть, без поддержки компилятора это совсем не так удобно, как с ним.
Три интерполятора есть из коробки в стандартной библиотеке языка, при желании можно дописать свои. Например, в cats вместо .toString предлагают использовать тайпкласс Show, и в этой библиотеке есть свой интерполятор, который для подставленных в строку элементов будет использовать show.
Единственный недостаток интерполяторов — на вход приходят кусочки строки и подставленные объекты, и доступа к синтаксическому дереву нет. Из-за этого не получится, например, сделать интерполятор, который бы мог подставить "имя переменной = значение".
"тенденциозные блокировки"! сразу понятно, почему их удалили.
Deprecate for Removal — это не «исключение при удалении»
Uncondended locking — это не «неконтролируемая блокировка»
Sealed Classes — это не «изолированные классы»
и т. д.
Так. А вообще, какие ScriptEngine живые в яве остались? Не пора ли весь javax.script deprecate for removal?
Убрали реализацию конкретного движка из состава JDK.
Сам Scripting API реализуется много чем и интегрируется именно через javax.script
Что нового в Java 15?