Комментарии 93
Поздравляю нас всех с этим событием. Никак не ожидал, что пройдет так мало времени между выпуском релиз-кандидата и релиза!
+22
Все даты выхода висели на сайте openjdk уже несколько месяцев.
+1
Наблюдая за людьми, вогоны снова включили свою трансляцию.
— Не имеет смысла вести себя так, будто вы удивлены. Все чертежи,
планы и распоряжения о сносе висели на доске объявлений в местном отделении
по планированию на Альфе Центавра в течение пятидесяти земных лет.
— Не имеет смысла вести себя так, будто вы удивлены. Все чертежи,
планы и распоряжения о сносе висели на доске объявлений в местном отделении
по планированию на Альфе Центавра в течение пятидесяти земных лет.
+4
Внеочередной праздник! Ура товарищи!
+7
Круто. Качать @ писАть.
+8
А пользователи Mac OS X в пролёте :( Netbeans стоит, бандл подсунуть могу, а сам JDK 7 нету, может кто знает как можно адаптировать? в macports еще нету.
p.s. OS X Lion стоит.
p.s. OS X Lion стоит.
+1
Пойду выпью кофейку.
+8
Можно даже за это выпить. Молодцы!
+5
Наш ответ Чемберлену!
0
Как и обещали. 28 июля.
+5
советую также подписаться на java magazine. мне на почту пришел свежий номер в .pdf :)
+2
Это правда? Как-то не верится прямо…
+2
Я не разрабатываю на java и смотрю на это как конь на новые ворота… я думал они еще года 2 разрабатывать будут.
0
Всё-таки без лямбд. Печаль=\
+6
Лямбды есть в JRuby, Scala, Clojure, Mirah, Jython — выбирайте по вкусу!
+6
Я знаю, но у эти языки либо плохо распространены у нас в стране, либо используются не в том секторе, что мне интересен. Долгое время увлекался Python, сейчас свои собственные проекты пишу на Ruby.
Надежда оставалась до последнего. Теперь буду ждать Java 8.
Надежда оставалась до последнего. Теперь буду ждать Java 8.
+1
Груви забыли
+4
НЛО прилетело и опубликовало эту надпись здесь
Это прекрасно! Так когда выходить Java SE 8 со столь желанными Lambda Expressions? :)
+2
Как приятно видеть, что любимый язык развивается!
+2
Вы читали что входит в этот Project Coin? Один синтаксический сахар.
+1
Да, но тот же multi-catch очень удобная штука, равно как и использование строк в switch.
+3
Может и так, но ничего радикально нового добавлено не было. Не понимаю всеобщего восторга по этому поводу.
Впрочем, мне все равно не скоро пришлось бы вкусить прелестей новой версии — энтрепрайз штука довольно инертная, много очень больших проектов в моей компании до сих пор разрабатываются на платформе 1.4.
Впрочем, мне все равно не скоро пришлось бы вкусить прелестей новой версии — энтрепрайз штука довольно инертная, много очень больших проектов в моей компании до сих пор разрабатываются на платформе 1.4.
+3
А вы читали, для чего этот проект? Для синтаксического сахара!
+2
НЛО прилетело и опубликовало эту надпись здесь
А мне кто-нибудь может про invokedynamic объяснить? Что-то я не понял, что это и зачем нужно.
0
java.sun.com/developer/technicalArticles/DynTypeLang/index.html
With the addition of support for JSR 292 in JDK 7, dynamically typed languages should run faster in the JVM than they do today. A key part of this support is the addition of a new Java bytecode, invokedynamic, for method invocation, and an accompanying linkage mechanism that involves a new construct called a method handle. These features enable implementers of compilers for dynamically typed languages, that is, the people who develop compilers for languages such as JRuby and Jython, to generate bytecode that runs extremely fast in the JVM.
With the addition of support for JSR 292 in JDK 7, dynamically typed languages should run faster in the JVM than they do today. A key part of this support is the addition of a new Java bytecode, invokedynamic, for method invocation, and an accompanying linkage mechanism that involves a new construct called a method handle. These features enable implementers of compilers for dynamically typed languages, that is, the people who develop compilers for languages such as JRuby and Jython, to generate bytecode that runs extremely fast in the JVM.
+1
Есть хорошее видео об, где на пальцах пытаются рассказть что это и зачем в обще оно там.
(см. там «A Renaissance VM: One Platform, Many Languages» John R. Rose, Da Vinci Machine Project Lead)
(см. там «A Renaissance VM: One Platform, Many Languages» John R. Rose, Da Vinci Machine Project Lead)
0
сорри, не туда.
0
А мне кто-нибудь может про invokedynamic объяснить? Что-то я не понял, что это и зачем нужно.
0
Если коротко, то JVM заточена под статически типизированную Java, что создает некоторые проблемы для динамически типизируемых языков. InvokeDynamic помогает лучше подружиться динамически типизируемым языкам с JVM. А вообще подробные разъяснения по теме первые же строчки поисковой выдачи, например здесь
+2
Скажите, а делегаты будут вообще?
-1
Только что проделал так
С:\Users\Timur>java -version
java version «1.7.0»
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)
Я правильно понимаю что это build 147 который был доступен ранее?
С:\Users\Timur>java -version
java version «1.7.0»
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)
Я правильно понимаю что это build 147 который был доступен ранее?
+1
Правда, до возможности использовать новый JRE придется подождать еще 1 или 2 релиза.
0
А когда сделают поддержку JDK 7 в WebLogic?
0
УРА УРА УРА!
Сегодня нужно залиться кофем по полную!
Быстрее б начал поддерживать приятые плюшки JDK 7 Android
Сегодня нужно залиться кофем по полную!
Быстрее б начал поддерживать приятые плюшки JDK 7 Android
+1
О как интересно.
Мне давно хотелось в java использовать string в switch
Исходник:
Компилируем седьмой жабой — компилится, работает!
Смотрим декомпилером Test.class:
Забавно они эту фичу реализовали.
Мне давно хотелось в java использовать string в switch
Исходник:
public class Test {
public static void main(String[] args) {
String test = "string0";
switch(test){
case "string0":
System.out.println("It's works!");
break;
}
}
}
Компилируем седьмой жабой — компилится, работает!
Смотрим декомпилером Test.class:
import java.io.PrintStream;
public class Test
{
public static void main(String[] paramArrayOfString)
{
String str1 = "string0";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case -1881759169:
if (!str2.equals("string0")) break; i = 0; } switch (i) {
case 0:
System.out.println("It's works!");
}
}
}
Забавно они эту фичу реализовали.
+8
Вот жеш ёперный бабай! Я конечно понимаю, что я чего-то не понимаю, но неужеле нельзя было просто switch по str2.hashCode(), или по битам сделать?
0
Просто по hashCode, видимо, стрёмно — а ВДРУГ найдецца еще строка с таким же hashCode?
Но вообще забавно. Надо будет посмотреть, сколько будут «стоить» эти новые синтаксическо-сахарные фичи.
Но вообще забавно. Надо будет посмотреть, сколько будут «стоить» эти новые синтаксическо-сахарные фичи.
+3
Просто по hashCode, видимо, стрёмно — а ВДРУГ найдецца еще строка с таким же hashCode?Что значит «видимо», что значит «вдруг»? Так нельзя делать принципиально алгоритмически, даже странно, что надо о таком говорить. И так не делается никогда. В том числе при реализации любых хеш-таблиц, в том же HashMap ищется сначала по хеш-коду, а потом обязательно делается equals, и почему — должно быть очевидно любому программисту. Тем более, что вероятность коллизий хешкода строки просто огромна.
0
Да это все понятно, своими «видимо» и «ВДРУГ» я пытался сарказм изобразить — не получилось.
Разумеется, возможны коллизии.
Разумеется, возможны коллизии.
+1
Ну да, я просто перепугался что-то слишком :) Не «возможны», а обязательно будут. За полминуты пример подобрал:
System.out.println("6R".hashCode());
System.out.println("5q".hashCode());
Вывод:1756
1756
Вот офигенный бы «свич по хешкоду» получился :)+3
О! Спасибо за пример!
Теперь можно посмотреть на Test2 — малость поинтереснее.
Исходник:
Результат декомпиляции:
Теперь можно посмотреть на Test2 — малость поинтереснее.
Исходник:
public class Test2 {
public static void main(String[] args) {
String test = "6R";
switch(test){
case "6R":
System.out.println("Ok");
break;
case "5q":
System.out.println("Fail");
break;
}
}
}
Результат декомпиляции:
import java.io.PrintStream;
public class Test2
{
public static void main(String[] paramArrayOfString)
{
String str1 = "6R";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
if (str2.equals("5q")) { i = 1; } else { if (!str2.equals("6R")) break; i = 0; } }
switch (i) {
case 0:
System.out.println("Ok");
break;
case 1:
System.out.println("Fail");
}
}
}
+2
Ну так вот, я про что и говорю. По-моему всё логично, я не знаю чего тут такого и чего недоумевают все. Понятно, что содержимое case-блоков второго switch можно было рассовать по этим веткам первого свича, заместо присваивания временной переменной индекса и последующего свича. Но почему-то вот было сделано именно так, возможно, есть какая-то причина и для этого*. В любом случае без первого свича с if-ветками внутри обойтись нельзя, тут уже всё ясно.
*Подумал, что и на это я могу предположить ответ. Всё сделано для сложного свича, типа
*Подумал, что и на это я могу предположить ответ. Всё сделано для сложного свича, типа
switch(test){
case "6R":
case "blabla":
System.out.println("Ok");
break;
case "5q":
...
Ну и попробуйте его реализовать, распихивая это по веткам первого свича. Это невозможно ведь, не правда ли?+2
Ну да, меня больше удивила переменная с временным индексом — я ожидал «рассовывания» по веткам первого свитча.
Хотя действительно — в случае сложного свитча (как у вас в примере) «протестного чувства» практически нет :-)
Хотя действительно — в случае сложного свитча (как у вас в примере) «протестного чувства» практически нет :-)
import java.io.PrintStream;
public class Test3
{
public static void main(String[] paramArrayOfString)
{
String str1 = "6R";
String str2 = str1; int i = -1; switch (str2.hashCode()) { case 1756:
if (str2.equals("5q")) { i = 2; } else { if (!str2.equals("6R")) break; i = 0; } break;
case -1386582880:
if (!str2.equals("blabla")) break; i = 1; } switch (i) {
case 0:
case 1:
System.out.println("Ok");
break;
case 2:
System.out.println("Fail");
}
}
}
+2
Я вот только не пойму, для чего вот это делается:
String str2 = str1;
0
А может декомпилер так неправильно декомпилирует?
Кстати, у вас неправильно написано: It's works
Кстати, у вас неправильно написано: It
0
кстати, да, тоже была мысль, может декомпилер портачит?
0
Может быть, конечно, но вроде бы оснований не доверять ему нет — код вполне осмыслен, и раньше он («он» — в смысле «декомпилер») меня не подводил.
Впрочем, посмотрел для очистки совести и другим, более «низкоуровневым» — и, насколько я понял, там та же «пляска» с хешем и сравнением строки:
С английским — да, грешен :-(
Впрочем, посмотрел для очистки совести и другим, более «низкоуровневым» — и, насколько я понял, там та же «пляска» с хешем и сравнением строки:
С английским — да, грешен :-(
+1
Да, похоже на правду. Грустно.
Ладно я ещё могу понять проверку на идентичность: str2.equals(«string0») — мало ли что могло произойти :)
Но два switch по hashCode и по int выглядит по меньшей мере странно.
Ладно я ещё могу понять проверку на идентичность: str2.equals(«string0») — мало ли что могло произойти :)
Но два switch по hashCode и по int выглядит по меньшей мере странно.
+2
Ура! Наконец-то. Всех поздравляю с релизом и всем наливаю плюсов… На сколько хватило на столько расставил плюсов всем отписавшимся в этой тем ;) Сегодня праздник. Гулять так гулять! :)
+3
Отличная новость!
Мы ждали этого события 4 года, 7 месяцев и 17 дней.
Мы ждали этого события 4 года, 7 месяцев и 17 дней.
+3
Да, вот документация к релизу
+3
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Java SE 7 Released