June 30th, 2012

glider

дьябла

Очень порадовала новая дьябла. Если вкратце, то в сравнении со второй пофиксили все раздражающие моменты, изрядно починили баланс и добавили кучу прикольных скилл комбо. Мясо осталось как было, даже стало еще круче.

Крайне приятно то, что больше нет понятия прокачки скиллов. Просто для каждого скилла есть уровень, на котором он становится доступен. Слотов активных скиллов ограниченное количество, и вот тут-то начинается интерес. Наборы активных скиллов можно менять на раз-два стоимостью в пару кликов и 10-20 секунд кулдауна, что открывает неслабое поле для экспериментов. За время прохождения игры я уже раз пять подбирал более продуктивные комбы и каждый раз это сопровождалось новой порцией фана и монстров, порванных на тряпки.

На втором месте по важности стоит то, что больше нет необходимости фармить дропы нужного шмота, ибо есть аукцион. Буквально каждые пару уровней я ходил туда и затаривал себе обновки, которые сопровождались новой порцией фана, ну, и понятно чем еще. Как я понимаю, идея энд-гейма - искать шмот, который можно продать подороже, и потом за эти деньги покупать все более крутые вещи для себя. В сравнении со второй диблой, где один удачный дроп мог изрядно облегчить следующие левелов 10, а энд-гейм заключался в бесконечном фарме того самого уника, который никак не падает, это удивительно освобождает.

В итоге шестьдесят левелов прошли незаметно и захватывающе, без нудного кача и с непрекращающимися открытиями того, что на самом деле умеет персонаж. Это было самое большое удивление. Рекомендую.
glider

рефлекшн

Последние пару месяцев я подзабросил ЖЖ, поэтому поделюсь статус апдейтом.

Reflection API оказался очень крепким орешком и его пришлось полностью переписать, причем переписывание затронуло гигантский кусок компилятора (около 20к строк кода). Вот документ, частично описывающий результаты работы: https://docs.google.com/document/d/1Z1VhhNPplbUpaZPIYdc0_EUv5RiGQ2X4oqp0i-vz1qw/edit.

Особенно в нашем рефлекшене мне нравится то, что он не прикручен где-то сбоку, а является просто интерфейсом к компилятору. Конечно, мы не запускаем здоровенный компилятор каждый раз когда кто-то хочет посмотреть список мемберов. Все гораздо интереснее, но это описывать долго - если интересно, расскажу в каментах.

Таким образом, рефлекшен можно делать кучу вещей, которые умеет компилятор. Например: 1) посчитать является ли какой-то тип подтипом другого типа, 2) вернуть сигнатуру метода со всем наворотами Скалы (имплиситами, множественными списками параметров), 3) тайпчекнуть динамически сгенерированный сниппет кода и так далее. Более подробно вот тут: http://scalamacros.org/talks/2012-05-19-ScalaReflect.pdf (конкретные детали уже устарели, но общая картина не изменилась).

Еще я крайне горжусь методом typeOf, который мы совсем недавно добавили в Скалу. Теперь можно просто написать typeOf[List[Int]] или что-нибудь навороченное вроде typeOf[{ def foo(x: Int): Int}] - и метод вернет тип, в точности соответствующий типу в квадратных скобках. Под капотом там адовая жесть - реификация, тайп теги, бодяга с класслоадерами, но программисту этого не видно, и все просто работает (ессно, каждый аспект адовой жести можно кастомизировать, но мы сейчас говорим про 95% юзкейсов). Я несказанно рад видеть вопросы на стаковерфлове от челов, которые не в курсе базовых вещей в рефлекшене, но зато бодро рассекают с тайп-офом, и он у них работает. Реально, реификация предполагась самой трудной для понимания в новом API, а вот оно как сложилось.

В целом, все позитивно, кардинальных изменений на горизонте не предвидится, осталось только пофиксить 90+ багов, которые на мне висят :)
glider

расширяемость ЯП

Сегодня нашел следующую серию из сериала про SugarJ. Называется Growing a Language Environment with Editor Libraries: http://www.informatik.uni-marburg.de/~kaestner/gpce11.pdf. Вкупе с недавним аннаунсментом N2 это порождает вопрос, до какой степени имеет смысл разрешать расширять язык.

Кастомизация парсера, макросы, декларативный тайпчекинг, подпиленный под язык редактор - что из этого приносит полезную гибкость, а что интересно только в качестве фантазии? С нетерпением жду первой демки N2 (особенно теперь, когда авторы могут сфокусироваться на языке фуллтайм).