Я только что вернулся из трех дней в Санта-Кларе, проводя время с некоторыми из самых ярких людей в мире 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/