![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Доброго времени суток, уважаемые форумчане!
Я смотрю, java развивается семимильными шагами. Не успел толком разобраться с новшествами JDK 7, как уже на подходе восьмерка. Вот и хочу попросить Вас разъяснить, что же такое "поддержка динамически-типизированных языков" (вообще, что это за языки такие), "динамические вызовы" (InvokeDynamic), MethodHandle - в семерке и "аннотации типов" (подключаемые системы типов) в JDK 8. Если можно, с рабочими примерами, а то все, что я находил в статьях на эту тему - это просто куски в пару строчек малопонятного мне кода. Спасибо! -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Т. е. я имел в виду, какие именно языки поддерживаются и как эта поддержка реализована. Что-то вроде как .NET поддерживает несколько языков? -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
InvokeDynamic в байткоде позволяет осуществлять динамический вызов метода с меньшими ограничениями. Раньше требовалось, чтобы тип нашего объекта явно содержал объявление вызываемого метода. С введением InvokeDynamic достаточно будет его фактического наличия. Другими словами, InvokeDynamic позволяет делать Duck Typing
Понятное дело, что в Java компилятор не позволяет такое делать, типизация в языке строго статическая. Но для других языков, выполняющихся на платформе JVM, поддержка подобной инструкции сильно облегчает реализацию динамической типизации. Подробнее читать тут -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Спасибо, jk1, за ссылки... Про "утиную типизацию", в теории, понятно, еще бы примерчик на эту тему... Что касается английской статьи, то в нее мне надо хорошенько вникнуть. Вот, бывает так, посмотрел, к примеру, пару строчек кода с try-with-resource, и все стало понятно, как примменять, где применять и как это вообще работает. Или даже лямбда-синтаксис в восьмерке - почитал, понял для себя, что это есть хорошо, и принял в душе эту концепцию
![]() ![]() -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Тогда постараюсь показать на примере. Есть у нас такой код:
Все бы хорошо, только на Java это не компилируется, хотя нужный метод в наличии есть. Но! Java - не единственный язык, который может выполнятся в рамках JVM. Jython, например, позволяет писать код на Python, а выполнять его на JVM. В Python требования к типизации куда более слабые, например вот этот классический пример duck typing будет работать без проблем:
На Java бы такое никогда не скомпилировалось. Так вот, до недавнего времени реализовывать поддержку duck typing на JVM было сложно по причине жестких требований к типизации при вызове методов. То есть транслятор Jython может перевести код на Python, использующий Duck Typing, в байткод JVM, но она просто откажется его выполнять (JVM проводит верификацию байткода перед выполнением). Это обходилось разными хаками вроде использования reflection или динамических прокси, производительность которых оставляла желать много лучшего. InvokeDynamic позволяет осуществлять вызов методов в байткоде с гораздо меньшим количеством ограничений по типизации, что сильно облегчает задачу тем, кто реализует трансляторы других языков в байткод. Java-программисту же от InvokeDynamic никакой пользы нет. -------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Спасибо за примеры, теперь про динамические вызовы стало гораздо понятнее!
Правильно ли я понял, что InvokeDynamic сделан для поддержки на JVM ДРУГИХ языков? Т. е. получается, что теперь JVM, подобно .NET обладает мультиязыковой поддержкой? -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Все-таки решил напрячься и почитать документацию (однако полезная штука, жаль, что американцы не пишут по-человечески, а на какой-то тарабарщине и непонятными буквами
![]() . Так что вопросы по семерке пока снимаются. jk1 - заслуженный плюс! Но у меня еще остались вопросы:
-------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Нашел здесь о дальнейших перспективах java. Да, multylanguage support будет реализована, но Jython, вроде, там не заявлен. А жаль, похоже, интересный язык! Пока тему закрываю, а на мой последний вопрос, думаю, скоро в нете инфы будет гораздо больше.
-------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Это все рекламные обещания и ничего больше. За каждым из этих языков стоит свое community, которое развивает язык и средства трансляции в байткод. В силу того, что Java поддерживала и будет поддерживать обратную совместимость ситуация с поддержкой этих языков как минимум не ухудшится в обозримом будущем. То есть поддержка Jython есть и мало зависит от желания менеджеров из Оракла. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Вот, нашел, как будут применяться аннотации типов в java. Что же, идея понятна и где-то даже полезна (в частности, @NonNull, - много попадается в нете жалоб, что в java часто надо проверять объект на "ненулевость"). Но, блин, кроме всех ключевых слов, стандартных классов и методов, всяческих спецификаторов, суффиксов и флагов форматирования, регулярных выражений, теперь еще и ЭТО запоминать!
![]() ![]() -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 0 Всего: 1 |
||||
|
||||
Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
Это от неумения грамотно писать. С исключениями работать не умеем/не хотим - при ошибках возвращаем null. А потом жалуемся на NPE. Есть очень небольшое количество ситуаций, где возврат null правомерен. На практике null возвращается гораздо чаще. Отсюда проблемы. |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Тонко. ![]() Вот сколько планируется изменений и многие из ни уже будут в восьмерке не лет через 5 а уже скоро! Интересно, как они думают с такими темпами обеспечивать обратную совместимость? -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |