Крадущийся тигр (Что нас ждет в Java 1.5)
От: Ноздреватых Ростислав aka Blazkowicz Россия  
Дата: 09.06.04 03:18
Оценка: 755 (18) -1
Статья:
Крадущийся тигр (Что нас ждет в Java 1.5)
Автор(ы): Ноздреватых Ростислав aka Blazkowicz
Дата: 27.07.2002
Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.


Авторы:
Ноздреватых Ростислав aka Blazkowicz

Аннотация:
Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Denwer Россия  
Дата: 09.06.04 10:29
Оценка:
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:

НРA>Статья:



НРA>Авторы:

НРA> Ноздреватых Ростислав aka Blazkowicz

НРA>Аннотация:

НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будет рассмотрены основные из них.

Собственно здесь все это написано, но на английском правда.
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 09.06.04 12:55
Оценка:
B>... В этой статье будет рассмотрены основные из них.
...мда-а...
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: DemAS http://demas.me
Дата: 10.06.04 05:56
Оценка:
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:

А можно несколько вопросов от человека поверхостно разбирающегося в Java, но старающегося следить, что там происходит ?

1. Автобоксинг

        Кроме этого, числовые операции теперь можно производить, не доставая из обертки значение:        
        
        Integer b = 10;
        b++;


А разве раньше так нельзя было ?

2. Метаданные

Честно говоря так и не понял, в чем здесь смысл
Информацию о методах класса, его парамертрах и типе возвращаемого значения можно было и раньше получить через reflection.
Что нового дают метаданные ?

Спасибо.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 10.06.04 06:50
Оценка: 8 (2)
Здравствуйте, DemAS, Вы писали:

DAS> 1. Автобоксинг


DAS>
DAS>        Кроме этого, числовые операции теперь можно производить, не доставая из обертки значение:        
        
DAS>        Integer b = 10;
DAS>        b++;
DAS>

DAS> А разве раньше так нельзя было ?

Раньше — нельзя. int — базовый тип. Для работы с целочисленными значениями. Integer — класс-обертка над этим базовым типом. В Тигре попытались стереть разницу между ними. Производить операции непосредственно над обертками раньше нельзя было.

DAS> 2. Метаданные


DAS> Честно говоря так и не понял, в чем здесь смысл

DAS> Информацию о методах класса, его парамертрах и типе возвращаемого значения можно было и раньше получить через reflection.
DAS> Что нового дают метаданные ?

Метаданные позволяют добавлять свою собственную информацию. Например хочется написать XML сериализатор. И вместо того чтобы писать дополнительный маппиг. Можно разметить поля класса, какие хочется сериализовать в аттрибуты, какие в элементы и пр.

Или вот часто пример приводят с удаленными вызовами. Раньше как было. Есть класс. Нужно пометить какие методы могут вызываться удаленно. Для этого создавался интерфейс с такими же методами. В 1.5 просто в классе можно пометить эти методы. Хотя мне этот пример до конца не понятен. Все равно ведь на клиенте лучше иметь интерфейс а не такой же класс как на сервере.

Ещё один пример Deprecated это ведь тоже метаданные. Раньше они из java-doc записывались в класс. Можно так же посмотреть стандартные аннотации в JDK. Так на вскидку не вспомню их.
Re[3]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: TK Лес кывт.рф
Дата: 10.06.04 07:28
Оценка: 12 (3)
Hello, "Blazkowicz"
>
> Или вот часто пример приводят с удаленными вызовами. Раньше как было. Есть класс. Нужно пометить какие методы могут вызываться удаленно. Для этого создавался интерфейс с такими же методами. В 1.5 просто в классе можно пометить эти методы. Хотя мне этот пример до конца не понятен. Все равно ведь на клиенте лучше иметь интерфейс а не такой же класс как на сервере.
>

Думаю, имеется в виду то, что для сгенерировать нужный интерфейс для клиента можно будет автоматически, на основании тех-же метаданных. В итоге — уменьшается количество сущностей в коде...
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 10.06.04 08:07
Оценка:
Здравствуйте, TK, Вы писали:

TK>Думаю, имеется в виду то, что для сгенерировать нужный интерфейс для клиента можно будет автоматически, на основании тех-же метаданных. В итоге — уменьшается количество сущностей в коде...


точно
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Oval  
Дата: 10.06.04 14:32
Оценка:
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:

НРA>Статья:



НРA>Авторы:

НРA> Ноздреватых Ростислав aka Blazkowicz

НРA>Аннотация:

НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2.

А рефлексия-то у нее с 1.4 не совместима похоже ни бинарно ни синтаксически — щас еще 40 Мб выкачивать (
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 10.06.04 14:35
Оценка: +1
Здравствуйте, Oval, Вы писали:

O>А рефлексия-то у нее с 1.4 не совместима похоже ни бинарно ни синтаксически — щас еще 40 Мб выкачивать (


Что ты имел ввиду?

В чем заключается несовместимость рефлексии бинарно?
Рефликсия поменялась не значительно. Основные изменения связаны с генериками и метаданными. Код из 1.4 чудесно компилируется в 1.5. В чем не совместимость?
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: iZEN СССР  
Дата: 10.06.04 15:52
Оценка:
Здравствуйте, Ноздреватых Ростислав aka Blazkowicz, Вы писали:

НРA>Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.


Изврат.
Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 10.06.04 16:21
Оценка: +1
Здравствуйте, iZEN, Вы писали:

ZEN>Изврат.

ZEN>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
Да? Как-то не заметил. А откуда сведения?
Re: Крадущийся тигр (Что нас ждет в Java 1.5)
От: ilya_ny  
Дата: 11.06.04 03:56
Оценка: -3
в SUN решили выпустить C#-killer путем копирования основных возможностей.
Re[3]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: iZEN СССР  
Дата: 13.06.04 10:33
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, iZEN, Вы писали:


ZEN>>Изврат.

ZEN>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
B>Да? Как-то не заметил. А откуда сведения?

Декомпилировать полученный байт-код не пробовали?
Попробуйте, тогда посмотрим.
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: iZEN СССР  
Дата: 13.06.04 10:34
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>в SUN решили выпустить C#-killer путем копирования основных возможностей.

Не. Им суждено слиться в экстазе общей среды.
Re[2]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Аноним  
Дата: 13.06.04 23:44
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>в SUN решили выпустить C#-killer путем копирования основных возможностей.


Изначально все было совсем наоборот
Да прибудет с Джавой сила!
Re[4]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: dshe  
Дата: 14.06.04 06:57
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, iZEN, Вы писали:


ZEN>>>Изврат.

ZEN>>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
B>>Да? Как-то не заметил. А откуда сведения?

ZEN>Декомпилировать полученный байт-код не пробовали?

ZEN>Попробуйте, тогда посмотрим.

Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?
--
Дмитро
Re[4]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 14.06.04 08:38
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>>>Изврат.

ZEN>>>Кончилась эпоха чистого компилятора — введён препроцессор. (я не ошибаюсь?)
B>>Да? Как-то не заметил. А откуда сведения?

ZEN>Декомпилировать полученный байт-код не пробовали?

ZEN>Попробуйте, тогда посмотрим.

Если ты имеешь ввиду, что в результате компиляции данные о типах теряются. И никакой оптимизации кода не происходит. То может ты и прав. Но это можно показать и без декомпиляции. Простым примером.

        List<String> list = new ArrayList<String>();
        Object o = list;
        List<Integer> l = (List<Integer>) o;
        l.add(new Integer(3));
        System.out.println(l.get(0));


Генерики в яве это что-то среднее между шаблонами в плюсах и генриками в шарпе. Вот 2 интересные ссылки по теме.

http://www.artima.com/intv/generics2.html
http://www.zefhemel.com/archives/2003/11/21/the-difference-between-c---templates-and-generics

Да, согласен. Плеваться есть на что. Интересно а в планах Sun есть перенесение генериков в рантайм на уровень байткода?
Re[5]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: iZEN СССР  
Дата: 15.06.04 17:34
Оценка:
Здравствуйте, dshe, Вы писали:

ZEN>>Декомпилировать полученный байт-код не пробовали?

ZEN>>Попробуйте, тогда посмотрим.

D>Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?


Вот, навскидку.
Попробуйте откомпилировать код с новым энумератором (фор-ич, если не ошибаюсь; шаблоны-генерики).
Далее декомпилируйте class-файл.
Что получится? Во что превратится код? Один-в-один, я думаю, вряд ли получится.
(У меня к сожалению нет 1.5, но хочу выяснить некоторые моменты новой версии).
Re[6]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: dshe  
Дата: 16.06.04 06:23
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>Здравствуйте, dshe, Вы писали:


ZEN>>>Декомпилировать полученный байт-код не пробовали?

ZEN>>>Попробуйте, тогда посмотрим.

D>>Интересно, какой именно байт-код наводит мысли о препроцессоре? И что именно в нем тебе не нравится?


ZEN>Вот, навскидку.

ZEN>Попробуйте откомпилировать код с новым энумератором (фор-ич, если не ошибаюсь; шаблоны-генерики).
ZEN>Далее декомпилируйте class-файл.
ZEN>Что получится? Во что превратится код? Один-в-один, я думаю, вряд ли получится.
ZEN>(У меня к сожалению нет 1.5, но хочу выяснить некоторые моменты новой версии).

Я, признаюсь, все равно не понял, что же тебе не понравилось в новом jdk. Но чтобы говорить предментно, приведу пример с циклом for в новом стиле и в старом. Что касается нового синтаксиса, то это не более, чем синтаксический сахар (о чем говирит то, что enumList1 и enumList2 оттранслировались в абсолютно одинаковый байт-код). Тем не менее, я считаю, что for в новом стиле более удобен.

Такой исходник
import java.util.*;

public class Main {
    public static void enumList1(List<String> l) {
        for(String o: l) {
            System.out.println(o);
        }
    }
    public static void enumList2(List<String> l) {
        Iterator<String> i = l.iterator();
        while(i.hasNext()) {
            String o = i.next();
            System.out.println(o);
        }
    }
    public static void enumArray1(String[] l) {
        for(String o: l) {
            System.out.println(o);
        }
    }
    public static void enumArray2(String[] l) {
        for(int i=0, n=l.length; i<n; ++i) {
            String o = l[ i];
            System.out.println(o);
        }
    }
}


компилируется в такой байт-код
Compiled from "Main.java"
public class Main extends java.lang.Object
  SourceFile: "Main.java"
  minor version: 0
  major version: 0
  Constant pool: ...omitted...

{
public Main();
  Code:
   Stack=1, Locals=1, Args_size=1
   0:    aload_0
   1:    invokespecial    #1; //Method java/lang/Object."<init>":()V
   4:    return
  LineNumberTable: 
   line 3: 0

public static void enumList1(java.util.List);
  Code:
   Stack=2, Locals=3, Args_size=1
   0:    aload_0
   1:    invokeinterface    #2,  1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
   6:    astore_1
   7:    aload_1
   8:    invokeinterface    #3,  1; //InterfaceMethod java/util/Iterator.hasNext:()Z
   13:    ifeq    36
   16:    aload_1
   17:    invokeinterface    #4,  1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
   22:    checkcast    #5; //class java/lang/String
   25:    astore_2
   26:    getstatic    #6; //Field java/lang/System.out:Ljava/io/PrintStream;
   29:    aload_2
   30:    invokevirtual    #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   33:    goto    7
   36:    return
  LineNumberTable: 
   line 5: 0
   line 6: 26
   line 7: 33
   line 8: 36
  Signature: length = 0x2
   00 12 

public static void enumList2(java.util.List);
  Code:
   Stack=2, Locals=3, Args_size=1
   0:    aload_0
   1:    invokeinterface    #8,  1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
   6:    astore_1
   7:    aload_1
   8:    invokeinterface    #3,  1; //InterfaceMethod java/util/Iterator.hasNext:()Z
   13:    ifeq    36
   16:    aload_1
   17:    invokeinterface    #4,  1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
   22:    checkcast    #5; //class java/lang/String
   25:    astore_2
   26:    getstatic    #6; //Field java/lang/System.out:Ljava/io/PrintStream;
   29:    aload_2
   30:    invokevirtual    #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   33:    goto    7
   36:    return
  LineNumberTable: 
   line 10: 0
   line 11: 7
   line 12: 16
   line 13: 26
   line 14: 33
   line 15: 36
  Signature: length = 0x2
   00 12 

public static void enumArray1(java.lang.String[]);
  Code:
   Stack=2, Locals=5, Args_size=1
   0:    aload_0
   1:    astore_1
   2:    aload_1
   3:    arraylength
   4:    istore_2
   5:    iconst_0
   6:    istore_3
   7:    iload_3
   8:    iload_2
   9:    if_icmpge    31
   12:    aload_1
   13:    iload_3
   14:    aaload
   15:    astore    4
   17:    getstatic    #6; //Field java/lang/System.out:Ljava/io/PrintStream;
   20:    aload    4
   22:    invokevirtual    #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   25:    iinc    3, 1
   28:    goto    7
   31:    return
  LineNumberTable: 
   line 17: 0
   line 18: 17
   line 17: 25
   line 20: 31

public static void enumArray2(java.lang.String[]);
  Code:
   Stack=2, Locals=4, Args_size=1
   0:    iconst_0
   1:    istore_1
   2:    aload_0
   3:    arraylength
   4:    istore_2
   5:    iload_1
   6:    iload_2
   7:    if_icmpge    27
   10:    aload_0
   11:    iload_1
   12:    aaload
   13:    astore_3
   14:    getstatic    #6; //Field java/lang/System.out:Ljava/io/PrintStream;
   17:    aload_3
   18:    invokevirtual    #7; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   21:    iinc    1, 1
   24:    goto    5
   27:    return
  LineNumberTable: 
   line 22: 0
   line 23: 10
   line 24: 14
   line 22: 21
   line 26: 27

}
--
Дмитро
Re[7]: Крадущийся тигр (Что нас ждет в Java 1.5)
От: Blazkowicz Россия  
Дата: 16.06.04 07:40
Оценка: +1
Здравствуйте, dshe, Вы писали:

D>Я, признаюсь, все равно не понял, что же тебе не понравилось в новом jdk.


Генерики которые ими не являются, так как не имеют никакого отношения к runtime (в отличие от того же шарпа). И автобоксинг, которые опять же лишь скрывает от программера то что происходит на самом деле. Вероятно повсеместное его использование может привести к понижению производительности системы. Тот же новый цикл...
Всё действительно наводит на мысли о прекомпиляции.

Enum-ы вот вроде более или менее реализованы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.