Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по нововведениям в java 
V
    Опции темы
Pawl
Дата 2.6.2012, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Доброго времени суток, уважаемые форумчане!
Я смотрю, java развивается семимильными шагами. Не успел толком разобраться с новшествами JDK 7, как уже на подходе восьмерка. Вот и хочу попросить Вас разъяснить, что же такое "поддержка динамически-типизированных языков" (вообще, что это за языки такие), "динамические вызовы" (InvokeDynamic), MethodHandle - в семерке и "аннотации типов" (подключаемые системы типов) в JDK 8. Если можно, с рабочими примерами, а то все, что я находил в статьях на эту тему - это просто куски в пару строчек малопонятного мне кода.
Спасибо!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 2.6.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(Pawl @  2.6.2012,  10:52 Найти цитируемый пост)
что же такое "поддержка динамически-типизированных языков" (вообще, что это за языки такие)

Т. е. я имел в виду, какие именно языки поддерживаются и как эта поддержка реализована. Что-то вроде как .NET поддерживает несколько языков?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
jk1
Дата 2.6.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



InvokeDynamic в байткоде позволяет осуществлять динамический вызов метода с меньшими ограничениями. Раньше требовалось, чтобы тип нашего объекта явно содержал объявление вызываемого метода. С введением InvokeDynamic достаточно будет его фактического наличия. Другими словами, InvokeDynamic позволяет делать  Duck Typing

Понятное дело, что в Java компилятор не позволяет такое делать, типизация в языке строго статическая. Но для других языков, выполняющихся на платформе JVM, поддержка подобной инструкции сильно облегчает реализацию динамической типизации. 

Подробнее читать тут


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Pawl
Дата 3.6.2012, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Спасибо, jk1, за ссылки... Про "утиную типизацию", в теории, понятно, еще бы примерчик на эту тему... Что касается английской статьи, то в нее мне надо хорошенько вникнуть. Вот, бывает так, посмотрел, к примеру, пару строчек кода с try-with-resource, и все стало понятно, как примменять, где применять и как это вообще работает. Или даже лямбда-синтаксис в восьмерке - почитал, понял для себя, что это есть хорошо, и принял в душе эту концепцию smile. А есть вещи, которые ну никак не даются мне для быстрого восприятия! И если еще при этом вся инфа по ним на английском... Вот тут для того, чтобы "въехать" мне и нужны примеры с рабочим исходным кодом. Много примеров! Тогда процесс "въезда" намного ускоряется! smile 


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
jk1
Дата 3.6.2012, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Тогда постараюсь показать на примере. Есть у нас такой код:
Код

interface Foo {
     String bar();
}

class Bar {
     String bar() { "A man walks into a bar..."; }
}

class FooBar {
      String bar() { "foo bar baz qux"; }
}


void method(Foo foo) {
       System.out.println(foo.bar());
}

method(new Bar());
method(new FooBar());


Все бы хорошо, только на Java это не компилируется, хотя нужный метод в наличии есть. Но! Java - не единственный язык, который может выполнятся в рамках JVM. Jython, например, позволяет писать код на Python, а выполнять его на JVM. В Python требования к типизации куда более слабые, например вот этот классический пример duck typing будет работать без проблем:
Код

class Duck:
    def quack(self):
        print("Quaaaaaack!")
    def feathers(self):
        print("The duck has white and gray feathers.")
 
class Person:
    def quack(self):
        print("The person imitates a duck.")
    def feathers(self):
        print("The person takes a feather from the ground and shows it.")
    def name(self):
        print("John Smith")
 
def in_the_forest(duck):
    duck.quack()
    duck.feathers()
 
def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)
 
game()


На Java бы такое никогда не скомпилировалось.
Так вот, до недавнего времени реализовывать поддержку duck typing на JVM было сложно по причине жестких требований к типизации при вызове методов. То есть транслятор Jython может перевести код на Python, использующий Duck Typing, в байткод JVM, но она просто откажется его выполнять (JVM проводит верификацию байткода перед выполнением). Это обходилось разными хаками вроде использования reflection или динамических прокси, производительность которых оставляла желать много лучшего. InvokeDynamic позволяет осуществлять вызов методов в байткоде с гораздо меньшим количеством ограничений по типизации, что сильно облегчает задачу тем, кто реализует трансляторы других языков в байткод.

Java-программисту же от InvokeDynamic никакой пользы нет. 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Pawl
Дата 3.6.2012, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Спасибо за примеры, теперь про динамические вызовы стало гораздо понятнее!
Цитата(jk1 @  3.6.2012,  10:12 Найти цитируемый пост)
InvokeDynamic позволяет осуществлять вызов методов в байткоде с гораздо меньшим количеством ограничений по типизации, что сильно облегчает задачу тем, кто реализует трансляторы других языков в байткод.Java-программисту же от InvokeDynamic никакой пользы нет.

Правильно ли я понял, что InvokeDynamic сделан для поддержки на JVM ДРУГИХ языков? Т. е. получается, что теперь JVM, подобно .NET обладает мультиязыковой поддержкой?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 3.6.2012, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Все-таки решил напрячься и почитать документацию (однако полезная штука, жаль, что американцы не пишут по-человечески, а на какой-то тарабарщине и непонятными буквами smile ). Вроде разобрался с тем, что делают классы типа MethodHandle в пакете invoke. Я так понял, что это и есть альтернатива всем этим хакам
Цитата(jk1 @  3.6.2012,  10:12 Найти цитируемый пост)
вроде использования reflection или динамических прокси
. Так что вопросы по семерке пока снимаются. jk1 - заслуженный плюс!
Но у меня еще остались вопросы:
Цитата(Pawl @  3.6.2012,  10:48 Найти цитируемый пост)
Правильно ли я понял, что InvokeDynamic сделан для поддержки на JVM ДРУГИХ языков? Т. е. получается, что теперь JVM, подобно .NET обладает мультиязыковой поддержкой?
 ну и про подключаемые системы типов в восьмерке. Спасибо заранее за ответы!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 3.6.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Нашел здесь о дальнейших перспективах java. Да, multylanguage support будет реализована, но Jython, вроде, там не заявлен. А жаль, похоже, интересный язык! Пока тему закрываю, а на мой последний вопрос, думаю, скоро в нете инфы будет гораздо больше.


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
jk1
Дата 3.6.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

Да, multylanguage support будет реализована, но Jython, вроде, там не заявлен. А жаль, похоже, интересный язык!


Это все рекламные обещания и ничего больше. За каждым из этих языков стоит свое community, которое развивает язык и средства трансляции в байткод. В силу того, что Java поддерживала и будет поддерживать обратную совместимость ситуация с поддержкой этих языков как минимум не ухудшится в обозримом будущем.

То есть поддержка Jython есть и мало зависит от желания менеджеров из Оракла.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Pawl
Дата 11.6.2012, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Вот, нашел, как будут применяться аннотации типов в java. Что же, идея понятна и где-то даже полезна (в частности, @NonNull, - много попадается в нете жалоб, что в java часто надо проверять объект на "ненулевость"). Но, блин, кроме всех ключевых слов, стандартных классов и методов, всяческих спецификаторов, суффиксов и флагов форматирования, регулярных выражений, теперь еще и ЭТО запоминать! smile smile


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Karadul
Дата 13.6.2012, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Цитата(Pawl @  2.6.2012,  10:52 Найти цитируемый пост)
Я смотрю, java развивается семимильными шагами. 

Толсто.
Через год, может быть, добавят лямбды, еще через 5 - ФП. Куда там сисярпу до него.
PM MAIL   Вверх
Skipy
Дата 14.6.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



Цитата(Pawl @ 11.6.2012,  00:23)
много попадается в нете жалоб, что в java часто надо проверять объект на "ненулевость"

Это от неумения грамотно писать. С исключениями работать не умеем/не хотим - при ошибках возвращаем null. А потом жалуемся на NPE. Есть очень небольшое количество ситуаций, где возврат null правомерен. На практике null возвращается гораздо чаще. Отсюда проблемы.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Pawl
Дата 16.6.2012, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(Karadul @  13.6.2012,  10:52 Найти цитируемый пост)
Толсто.Через год, может быть, добавят лямбды, еще через 5 - ФП.

Тонко. smile 
Вот сколько планируется изменений и многие из ни уже будут в восьмерке не лет через 5 а уже скоро! Интересно, как они думают с такими темпами обеспечивать обратную совместимость?


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.