Как стать автором
Обновить

Комментарии 19

Текстовые блоки, конечно прорыв. Как их собираются подсвечивать? В примере видно, что подсветка синтаксиса не та (подсвечено do).

это недостаток подсветки в carbon.now.sh, в котором мы оформляли код
До функциональности груви (2003) и скалы (2004) и так и не дотянули. Интерполяции нет, raw нет (ну так написано в JEP, я не анализировал глубже). Обещали в следующий раз. То есть это конечно приятная новость, но на прорыв как-то не очень тянет.
Как написано в одной из статей про текстовые блоки:
В Java строковые литералы (и текстовые блоки) не поддерживают интерполяцию выражений (подстановку переменных), как некоторые другие языки. Исторически строковые выражения создавались с помощью обычной конкатенации строк (+). В Java 5 был добавлен String:format для форматирования строк в стиле «printf».

Java не является первопроходцем в реализации Текстовых блоков. В данном случае она выступает в роли догоняющего, т.к. многострочные строки давно реализованы во многих языках. В статье www.infoq.com/articles/java-text-blocks есть табличка с перечислением языков, которые так или иначе поддерживают разные виды строковых летиралов.
Так я вам об этом и говорю — что догонять вполне можно было более хорошее решение, с интерполяцией например, потому что они уже давно в наличии. Уж я не помню, была ли интерполяция в груви с самого начала, но уж лет 10 точно как есть.

Я понимаю при этом, что не всякое решение можно сделать не нарушив совместимость (в том же груви эти строки с интерполяцией — это не String, это GString, и это может что-то поломать).
В JEP 378: Text Blocks написано:
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.
Единственный недостаток интерполяторов — на вход приходят кусочки строки и подставленные объекты, и доступа к синтаксическому дереву нет. Из-за этого не получится, например, сделать интерполятор, который бы мог подставить "имя переменной = значение".

"тенденциозные блокировки"! сразу понятно, почему их удалили.

Пожалуйста, не переводите больше технические статьи, смысла которых не понимаете. У Google Translate и то качественнее получается.

Deprecate for Removal — это не «исключение при удалении»
Uncondended locking — это не «неконтролируемая блокировка»
Sealed Classes — это не «изолированные классы»
и т. д.
Самый гуманный путь — это написать в личку о неточностях, которые вы заметили в тексте, тем самым внеся свой вклад в перевод статьи. Спасибо.
Обычно так и делаю. Но в данном случае речь не о нескольких неточностях, а о том, что вся статья выглядит как машинный перевод без какого-либо контекста предметной области. Улучшить её можно, только написав заново с нуля Java специалистом.

Так. А вообще, какие ScriptEngine живые в яве остались? Не пора ли весь javax.script deprecate for removal?

Убрали реализацию конкретного движка из состава JDK.
Сам Scripting API реализуется много чем и интегрируется именно через javax.script

Зашел на сайт jcp.org, нашел JSR 223. У него там статус withdrawn. Насколько я понимаю, это означает, что желающие запилить свой скриптовый язык рискуют остаться без поддержки.

А что-то вроде async/await появилось или уже может быть есть?

Смотрите Project Loom.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации