Компания Oracle выпустила (http://blogs.sun.com/mr/entry/jdk7_preview) тестовую версию JDK 7 (http://openjdk.java.net/projects/jdk7/) (Developer Preview), пригодную для предварительного знакомства с возможностями Java 7 и проверки совместимости существующих приложений. Представленная тестовая версия проходит полный набор тестов совместимости со спецификацией для всех поддерживаемых платформ, но еще может иметь проблемы со стабильностью работы.
Финальный релиз JDK 7 ожидается в конце июля или начале августа 2011 года, релиз JDK 8 планируется выпустить в конце 2012 года. Бинарные сборки JDK 7 для Linux, Solairs и Windows можно загрузить на данной странице (http://jdk7.java.net/preview/). Исходные тексты не прилагаются, так как, несмотря на то, что JDK 7 основан на открытой кодовой базе OpenJDK, в представленной сборке по прежнему используются некоторых закрытые библиотеки, над созданием открытых аналогов которых трудится проект IcedTea. Для разработки приложений на базе Java 7 можн...URL: http://blogs.sun.com/mr/entry/jdk7_preview
Новость: https://www.opennet.ru/opennews/art.shtml?num=29703
Годы идут, а java, как язык, всё никак не может стать удобным. В принципе, модным парням этого и не надо, у них есть скала, кложура и груви. Но вывод типов и нормальные лямбды хотелось бы увидеть хотя бы к девятой версии.
> Но вывод типов и нормальные лямбды хотелось бы увидеть хотя бы к девятой версии.А зачем смешивать императивное и функциональное программирование, статическую типизацию с динамической в одном языке? Когнитивный диссонанс не случится?
> А зачем смешивать императивное и функциональное программированиеОт нынешних анонимных классов, java не становится императивнее.
> статическую типизацию с динамической
Ничего не путаешь? Ключевые слова: вывод типов, ocaml, haskell.
>> А зачем смешивать императивное и функциональное программирование
> От нынешних анонимных классов, java не становится императивнее.Зато является более декларативной.
>> статическую типизацию с динамической
> Ничего не путаешь? Ключевые слова: вывод типов, ocaml, haskell.Не распарсил. Что это такое? Практический пример приведёте?
Куда русский язык катится...Императивное и функциональное программирование.
Статическая типизация. Когнитивный диссонанс.
Императивная декларативность. Лексические переменные.Слабо всё это на русский перевести, варианта до 1699 года?
> Куда русский язык катится...
> Императивное и функциональное программирование.
> Статическая типизация. Когнитивный диссонанс.
> Императивная декларативность. Лексические переменные.
> Слабо всё это на русский перевести, варианта до 1699 года?Приказное и отображательное предписание.
Предварительное клеймение. Мыслительная запинка.
Приказное глашатайство. Словесные переменные."Идёт хорошилище по гульбищу на позорище в мокроступах"
> Приказное и отображательное предписание.Предписание - это программа. А тут будет или предписательство, или предписательственное вразумление.
> Предварительное клеймение.
:)
Слава богу, у нас не иврит:)
>Слабо всё это на русский перевести, варианта до 1699 года?Да, сейчас найду книгу "Издание указовъ для машинъ считальныхъ", посмотрю, какие там термины.
> Зато является более декларативной.OMG, с каких это пор куча синтаксического мусора стала более декларативной?
> Не распарсил. Что это такое? Практический пример приведёте?
Тогда повторюсь, какой такой диссонанс может быть в джаве от вывода типов? По мне так вполне логичный этап развития языка со статической типизацией.
>А зачем смешивать императивное и функциональное программирование,Затем же зачем Вы смешиваете язык программирования и P машину.
Если вы не поняли то, поясняю - в спецификации jvm добавлена возможность, позволяющая запускать программы сделанные на других языках программирования (не java).
Нормальные лямбды я видел только в CL. В большинстве остальных языков они если есть, то убогие.С нормальными лямбдами должны быть лексические и динамические переменные, например.
> В большинстве остальных языков они если есть, то убогие.От них требуются только две вещи:
1) Лексическое замыкание
2) Быть first-class valueВсё остальное маргинальщина и нужна только полутора лисперам.
>1) Лексическое замыканиеКакие варианты использования этого?
>2) Быть first-class value
Это что такое и зачем нужно?
>>1) Лексическое замыкание
>Какие варианты использования этого?http://en.wikipedia.org/wiki/Closure_(computer_science)
http://ru.wikipedia.org/wiki/Замыкание_(программирование)>>2) Быть first-class value
>Это что такое и зачем нужно?http://en.wikipedia.org/wiki/First-class_function
http://en.wikipedia.org/wiki/First-class_object
http://ru.wikipedia.org/wiki/Объект_первого_классаЧеловек, на самом деле, прав. Замыкания + функции как члены первого класса = все (или почти все), что нужно от лямбды без больших усилий.
>>>1) Лексическое замыкание
>>Какие варианты использования этого?
> http://ru.wikipedia.org/wiki/Замыкание_(программирование)Всю жизнь пользовался этим в Java, оказывается "этого в ней нет". :))
>>>2) Быть first-class value
>>Это что такое и зачем нужно?
> http://ru.wikipedia.org/wiki/Объект_первого_классаЧего-то там пространно объяснено.
Объект типа Class или типа Field или типа Method в Java это разве не то?
Чего нужно функциональщикам от Явы? Ведь в ней всё давно есть. Только записывается в тексте программ не так, как им нравится.
>Всю жизнь пользовался этим в Java, оказывается "этого в ней нет". :))Что, там есть полноценные замыкания? Имеющие доступ к локальным переменным? Безо всяких дополнительных костылей? Сколько на Жабе не пишу, а не знал.
>Объект типа Class или типа Field или типа Method в Java это разве не то?
Это примерно то же, но:
1.Через отражение, т.е. механизм, который предназначен для отладки или других технических вещей, в отличие от языков с полной поддержкой функций как объектов первого класса, где это используют на каждом шагу.2.Соответственно, доступны только если сначала определить класс, потом сделать к нему метод, а потом через отражение получить объект класса метод. Определить функцию внутри другой (пусть даже если бы она не была бы привязана к контексту, а только к полям объекта, пусть даже если бы и вообще должна была обращаться только к переменным, переданным при создании) не получится.
Конечно, можно создать анонимный класс и его же отразить. Это будет костыль, подпертый другим костылем.
3.Соответственно, синтаксис получается сложный и с типизацией придется колдовать.
Настоящей first-class function было бы нечто такое:
public static void main(String[] args) {
function printstr = new function(String x) {
System.out.println(x);
}
printstr("Hello, world!");
}
>Что, там есть полноценные замыкания? Имеющие доступ к локальным переменным? Безо всяких дополнительных костылей?Какие костыли?
class CalculationWindow extends JFrame {
private JButton btnSave;
...
public final void calculateInSeparateThread(final URI uri) {
// Выражение "new Thread() { ... }" представляет собой пример анонимного класса.
new Thread() {
void run() {
// Имеет доступ к финальным (final) переменным:
calculate(uri);
// Имеет доступ к приватным членам содержащего класса:
btnSave.setEnabled(true);
}
}.start();
}
}>1.Через отражение
А зачем в обычной программе непременно нужна интроспекция объектов? Ведь пятнадцать лет без неё как-то обходились.
>Настоящей first-class function было бы нечто такое: ...
Всё это красиво, но Java — это объектно-ориентированный язык, а не функциональный. В нём функции не являются классами, к ним нельзя применить оператор new, чтобы получить-вызвать "объект" функции с параметрами.
>// Имеет доступ к финальным (final) переменным:
>// Имеет доступ к приватным членам содержащего класса:А замыкание - это когда еще к локальным переменным. Но поскольку в Java одну функцию внутри другой никак не определишь (до Java 7), то одна функция в контексте другой вообще существовать не может.
>А зачем в обычной программе непременно нужна интроспекция объектов? Ведь пятнадцать лет без неё как-то обходились.
Именно! Поэтому в функциональных (и не только) языках first-class functions не требуют никакой интроспекции объектов, а реализуются гораздо проще.
>Всё это красиво, но Java — это объектно-ориентированный язык, а не функциональный. В нём функции не являются классами, к ним нельзя применить оператор new, чтобы получить-вызвать "объект" функции с параметрами.
И тем не менее в Java 7 уже что-то подобное (не знаю, правда, с какими именно ограничениями) будет.
>А замыкание - это когда еще к локальным переменным. Но поскольку в Java одну функцию внутри другой никак не определишь (до Java 7), то одна функция в контексте другой вообще существовать не может.interface Function1<A, B> {
public B apply(A a);
}class Closure {
public static void main(String[] args) {
final Integer x = 10;Function1<Integer, Integer> add = new Function1<Integer, Integer>() {
public Integer apply(Integer y) {
return x + y;
}
};
System.out.println(add.apply(2));
}
}Насколько я знаю, в Java 8 первоклассные функции реализуют как сахар для SAM.
>Чего-то там пространно объяснено.
>Объект типа Class или типа Field или типа Method в Java это разве не то?Имелось в виду, что объектом первого класса должна быть функция. Ссылку вам не ту дали, читать здесь
http://en.wikipedia.org/wiki/First-class_functionКонечно можно и на Джаве многое имитировать, и замыкания и функции первого класса. Но есть нюанс: данные концепты вводились для упрощения написания и понимания кода, а в случае имитации получается все равно громоздко обычно.
По мне так лямбды - это пережиток становления ООП. Все примеры что я натыкался (скажем, в SICP) более грамотно реализуются через объекты. А объекты в свою очередь - можно хоть на С через указатель на контекст передвать - элегантно, лакончино и просто.
Так что не понимаю откуда столько фанбойского визга про эти замыкания. Хотя замечу, что я особо в функциональщину не погружался и в своё время поддался на совращение господином Страуструбом.
>фанбойского визгаТут главное повизжать ("Смотрите, какой я умный"), неважно о чём.
В ООП обычно не получается "элегантно, лаконично и просто" писать код, который работает со различными структурами, но при этом должен выполнятся лениво (в результирующей структуре вычисляться по мере обращения к соответствующему элементу). С помощью функциональных конструкций сделать так, чтобы все с одной стороны выглядело очень просто и код писался, как просто работающий с данными, но вычислялся лениво - проще простого. Простота и ускорение в одном флаконе, причем применимо это практически везде.
Конкретные примеры где это лучше ООП? По мне так можно вызвать метод объекта по необходимости. То что "как просто работающий с данными" мне опять таки не ясно зачем это нужно и почему в SICP на это так дико фапали. По мне так гораздо логичнее и правильнее чётко разделять данные и функции. Вообщем не понимаю я профита от этого всего.
может просто не работать в ООП стиле там где это не нужно?
> По мне так лямбды - это пережиток становления ООПСтудент? Торба ООП уже давно облезла и прохудилась, а вы с ней всё носитесь. Расширяй кругозор, мой тебе совет.
Не, ну не козлы ли? Знай себе выпускают закрытую версию с отмазами "мы используем некоторые закрытые библиотеки, так что..", предлагая трудиться над переписыванием сложных (иначе не пришлось бы использовать сторонные технологии) проекту IcedTea. Т.е. оракл будет просто выпускать то, что ему нравится, а в это время редхату с эпплом предлагается молча вбухивать кучу денег в развитие IcedTea, а кому-то из сторонних разработчиков и нахаляву трудиться, чтобы сделать джаву немного посвободнее?Нормальная такая позиция, "жрите то, что вам сан в свое время открыл, а мы будем выпускать то, что нам требуется под брендом "Java", а вы трудитесь, может когда-нибудь и доползете до нашего уровня со своими открытыми технологиями".
http://open.cnews.ru/news/top/index.shtml?2010/11/09/415237 <-- как в свое время путь развития джавы в оракле разошелся с мнением сообщества, так раскол продолжается глубже и глубже.. На мнение ASF при выпуске Java 7 они уже положили..
Я просто разрываюсь - что же лучше в новом свете - OpenJDK или Mono???
Если ты такой нервный - используй С++
> Если ты такой нервный - используй С++Ну я уже. Но при этом восхищаюсь Java и тем более C#. Для обоих есть православные GPLные реализации, а потому выбрать крайне сложно - за обоими стоят очень серьезные аргументы и области применения.
Чем там восхищаться? Весь этот сонм недоязычков от жавы с шаром до питона не умеет банальную компиляцию в нативный код, следовательно обречены тормозить и жрать память. А так называемый "портабельный байткод" поощряет наплевательски относиться к доступности исходников и сборочным системам, а то и вообще не выкладывать исходники, анонсируя при этом что распространяется "под gpl".
re> Весь этот сонм недоязычков от жавы с шаром до питона не умеет банальную компиляцию в нативный код, следовательно обречены тормозить и жрать память.
Откидывая реплики про "сомнительность" нужно уточнить
1. Большенство JVM имеют JIT так что код более чем найтивный получается
2. У тех, кто не умеет JIT, например встроенная в RDBMS Oracle JVM версии ниже 11.1 встречаются штуки типа Oracle JAccelerator он же Java NCOMP. Данная штука превращает class файлы в .c файлы и собирает из них .so/.dll. .c aайлы можно посмотреть.
re> А так называемый "портабельный байткод" поощряет наплевательски относиться к доступности исходников и сборочным системам, а то и вообще не выкладывать исходники, анонсируя при этом что распространяется "под gpl".
Каким образом?Ну и конечно самый портабельный и надежный код просто обязан содержать что то типа
# ifdef NETWARE
# else
# ifdef FAKE_THREADS
# else
# ifdef WIN32
# else
# ifdef OS2
# else
# ifdef I_MACH_CTHREADS
# if (defined(NeXT) || defined(__NeXT__))
# endif
# else /* Posix threads */
# ifdef I_PTHREAD
# endif
# endif /* I_MACH_CTHREADS */
# endif /* OS2 */
# endif /* WIN32 */
# endif /* FAKE_THREADS */
#endif /* NETWARE */
#endif /* USE_5005THREADS || USE_ITHREADS */
Тут про сборку заботятся обязательно:)
Первая же фраза в заметках по ссылке: "Для запуска Ngen.exe необходимо обладать правами администратора." Это как вообще? Нормально?
Остальной вагон заметок, примечаний и оговорок также говорит о том, что нативным кодом (как его понимают большинство людей) это назвать можно только чисто формально. Обычное кеширование результатов компиляции со всеми вытекающими, и то, что кешируется именно машинный код, а не какой-то другой, ничего, по сути, не меняет.
> Чем там восхищаться? Весь этот сонм недоязычков от жавы с шаром до питона не умеет банальную компиляцию в нативный код, следовательно обречены тормозить и жрать память. А так называемый "портабельный байткод" поощряет наплевательски относиться к доступности исходников и сборочным системам, а то и вообще не выкладывать исходники, анонсируя при этом что распространяется "под gpl".Все вышеперечисленное вызывает улыбку. Начиная от искажения действительности с точностью до наперекосяк, до необоснованных претензий. Ну и конечно же абсолютное отсутствие опыта работы с этими платформами, и полное непонимание причин появления этих платформ и какие восхитительные профиты они дают.
>[оверквотинг удален]
> "мы используем некоторые закрытые библиотеки, так что..", предлагая трудиться над переписыванием
> сложных (иначе не пришлось бы использовать сторонные технологии) проекту IcedTea. Т.е.
> оракл будет просто выпускать то, что ему нравится, а в это
> время редхату с эпплом предлагается молча вбухивать кучу денег в развитие
> IcedTea, а кому-то из сторонних разработчиков и нахаляву трудиться, чтобы сделать
> джаву немного посвободнее?
> Нормальная такая позиция, "жрите то, что вам сан в свое время открыл,
> а мы будем выпускать то, что нам требуется под брендом "Java",
> а вы трудитесь, может когда-нибудь и доползете до нашего уровня со
> своими открытыми технологиями".Apple вкладывается в развитие OpenJDK и вливает туда свой код. А проприетарная сборка java была и у Sun. Ничего пока не поменялось.
Только Sun обещала сделать Java 7 полностью открытой. Oracle такого обещания не давал.
Ахренеть, заплатили 9 с половиной миллиардов и не выдали всё тут же анонимусу нахаляву. Планета в шоке.
чую не будет единого стандарта JDK != OpenJDK и чем дальше тем больше...
и спор ORACLE vs GOOGLE тому подтверждениедиалекты Java
Не паникуйте. Сделайте глубокий вдох и успокойтесь. ТО что разные имплементации ява машины имеют свои особенности никого никогда не смущало. Но есть неизменное и единое ядро которое одинаково работает у всех. У ИБМ есть своя очень сильно отличающаяся ява, но однако она очень интенсивно используется. Сущетсвует более десятков разных неодинаковых ява машин, и что? Сановская ява дефакто стандарт. В OpenJDK весь код будет соответствовать оракловской яве за исключением тех частей на которые патенты принадлежат другим компаниям и которые ораклы не могут открыть так как нарушат патенты третьих фирм. В чем паника? Дышите спокойнее.
и все это только для того, чтобы не развивать компонентный Паскаль.
> и все это только для того, чтобы не развивать компонентный Паскаль.freepascal вполне себе развивается. а вообще ява была разработана под сильным влиянием оберона. Паскаль вообще-то принадлежит Вирту вот он его и развивает.
Я сам люблю кодить нативные форточки в лазарусе, но с явой это даже сравнивать невозможно. Язык вторичен, платфома намного важнее.
> Паскаль вообще-то принадлежит Вирту вот он его и развивает.Насколько я знаю, он давно и прочно забил на Паскаль, обнаружив в нем столько недостатков, что просто создал новые языки - Модулу, Оберон
Component Pascal != Free Pascal. И для него к сожалению есть только BlackBox, полностью заточенный под винду. Это наверное один из немногих языков, о котором читаешь и хочется писать на нем.
> Component Pascal != Free Pascal. И для него к сожалению есть только
> BlackBox, полностью заточенный под винду. Это наверное один из немногих языков,
> о котором читаешь и хочется писать на нем.Согласен оберон2,он же компоненнтный паскаль,великолепный язык, но какая разница от замечательного языка если он никому не нужен?
Инертность.. Даже казалось бы у активной социальной группы, коими по идее должны являться программисты. Реально же как я это вижу.. Нормальный компилятор Оберона и можно будет смело закапывать и Java и .Net
> Инертность.. Даже казалось бы у активной социальной группы, коими по идее должны
> являться программисты. Реально же как я это вижу.. Нормальный компилятор Оберона
> и можно будет смело закапывать и Java и .Netну так вперед закапывайте :) Я буду только вам благодарен.