Статьи

JVM Language Summit 2010

Я только что вернулся из трех дней в Санта-Кларе, проводя время с некоторыми из самых ярких людей в мире Java — языковой саммит JVM — действительно фантастическая коллекция великих людей. И я был там тоже …

Цель языкового саммита JVM состоит в том, чтобы собрать людей, которые работают с языками в JVM, и дать им возможность поделиться своими проектами, своим опытом и своими сетями — и позволить им общаться с людьми, отвечающими за внедрение JVM для различных компаний. В этом году много дискуссий о JSR 292 и проекте лямбда было на тарелке. Присутствие аппаратных средств и людей VM было также более явным Я насчитал как минимум шесть разных виртуальных машин в аудитории или на презентации (Hotspot, JRockit, J9, Azul, Maxine и Monty).

Среди опытных людей, говорящих на платформе и языке, некоторые из знаменитостей включают Крестен Краб Торуп, Джошуа Блох, Боб Ли, Нил Гафтер, Джон Роуз, Брайан Гетц, Алекс Бакли, Рич Хикки, Чарльз Наттер, Клифф Клик, Дуг Ли, Пер Ботнер и многое другое. Отличная коллекция людей.

В качестве примера забавного случая, который может случиться в этой группе людей, я сидел, пересматривая свои реализации Java для Mac OS X — и мне пришлось удалить много ссылок в / usr / bin. Спустя несколько минут человек рядом со мной начал задавать вопросы о моем опыте работы с Java на Mac — и оказалось, что он менеджер команды Apple JVM. Или однажды Рич Хики сообщил о довольно загадочной проблеме, которая вызывает плохую семантику при переборе данных, которые не помещаются в памяти, — и Клифф Клик немедленно открывает свой ноутбук, говорит: «Дайте мне полчаса, и я посмотрю, что Я могу сделать».

Еще один забавный анекдот был, когда Дуг Ли указал, что если вы используете fibonacci для тестирования производительности против себя или других, важно, чтобы реализации действительно согласились с первыми значениями fib. Как ни странно, я видел три разных реализации основного правила в фибе во время саммита — все они разные. (если n <2, верните 1, если n <= 2, верните n, если n <2, верните n).

Было слишком много интересных презентаций и обсуждений, чтобы я мог рассказать обо всех них — вместо этого я просто хотел высказать некоторые основные моменты.

Чарльз Наттер

Чарльз дал краткое представление о JRuby и Mirah, а также о том, какие оптимизации JRuby сейчас делает. Он также рассказал о том, как далеко он продвинулся во встроенных вызовах динамических вызовов внутри JRuby (и он продвинулся очень далеко — это действительно круто).

Фредрик Эрстрем

Фредрик — представитель JRockit в JSR 292, и он слишком умен. Он представил решение о том, как можно использовать дескрипторы методов, интегрированные с типами функций, для решения многих текущих проблем в лямбда-проекте. Очень мощная и интересная презентация.

Дуг Ли

Даг потратил свое основное выступление, пытаясь (довольно успешно) осветить комнату гегемонии форк-соединения как хорошее решение проблем параллелизма. Очень хорошая и продуманная основная идея.

Джош Блох

В прошлом году на языковом саммите JVM Джош рассказал о том, что он назвал «семантическим разрывом». В этом году, будучи избитым некоторыми лингвистами, он изменил название этой концепции на «Беспокойство в исполнении». Основная идея заключается в том, что в нашей текущей инфраструктуре мы обменяли производительность на предсказуемость. Два примера из его выступления о том, когда это происходит на Java, были довольно интересными. У него был один тест, который последовательно показывал примерно одинаковые числа для одного и того же прогона JVM, но различался между прогонами JVM. Не было никакого недетерминизма в самом тесте, но они продолжали колебаться между 0,7 и 0,85 в зависимости от запуска JVM. Клифф Кликс объясняет это тем, что это, вероятно, планировщик компиляции, который является отдельным потоком. В зависимости от того, когда этот поток запускается, стратегия компиляции будет отличаться,и имеет значение во времена. И программисту действительно трудно принять во внимание эту разницу.

Другой пример проще (и не меняйте код из-за этого). В некоторых случаях оказывается, что & быстрее, чем && в Java, потому что && замыкает накоротко, что означает, что оно разветвляется. Одиночный амперсанд всегда будет исполнять обе стороны, что означает, что ЦП может передавать их в обе очереди одновременно.

Все приведенные им примеры сводятся к одному и тому же: мы больше не можем интуитивно рассуждать о производительности наших языковых конструкций. Наши системы стали более сложными, чтобы поддерживать лучшую производительность, и мы отказываемся от предсказуемости, чтобы получить такую ​​производительность. И, в конце концов, даже не имеет значения, переходите ли вы на C или на ассемблер — вы все равно не можете точно контролировать, что делает процессор.

Крестен Краб Торуп

Крестен — технический директор Trifork и один из главных организаторов многих моих любимых конференций (таких как JAOO и QCon). Последние девять месяцев он работал над реализацией Erlang для Java, о которой говорил. Кажется, это очень хорошая реализация, и он получает удивительно хорошую производительность и количество переключений контекста. На самом деле, некоторые идеи в Сефе будут украдены у Эрджанга.

Реми Форакс

Реми продемонстрировал свой проект PHP.reboot, реализованный с использованием JSR 292 и получивший довольно хорошую производительность. Его бэкпорт JSR 292 кажется очень полезным, и я думаю, что я воспользуюсь им, чтобы убедиться, что Seph может работать на машинах, предшествующих Java 7. Хорошая вещь.

Рич Хики

Рич провел некоторое время, собирая комментарии от людей в комнате о том, что было проблематично с JVM в его текущем воплощении. Для начала он показал один кусок веселого / ужасного кода Clojure. Кто-нибудь хочет угадать, что он делает?

static public Object ret1(Object ret, Object nil) {
    return ret;
}

public static int count(Object o){
    if(o instanceof Counted)
        return ((Counted) o).count();
    return countFrom(Util.ret1(o, o = null));
}

Затем мы перешли к нескольким другим вещам (которые вы можете найти в вики на JVM Language Summit). Казалось, консенсус заключается в том, что хвостовые коллы действительно очень важны. В прошлом году это было не так важно, но теперь, когда мы видим, насколько мощными будут методы обработки и лямбда-выражения, хвостовые вызовы оказались очень хорошими. Надеюсь, мы сможем это сделать.

JSR 292

Экспертная группа JSR 292 получила много шансов поработать над идеями и проектами на будущее. Из этих дискуссий вышло много интересных результатов. Некоторые из наиболее заметных — это лыжи о том, как дескрипторы методов и типы функций могут работать вместе, как использовать динамический метод и метод начальной загрузки, чтобы реализовать методы защитника, и несколько других интересных идей.

В целом, это были забавные несколько дней, далеко уходящие от языка и реализации. Я надеюсь вернуться к этому в следующем году.

 

С http://olabini.com/blog/2010/07/the-jvm-language-summit-2010/