Начал разбираться в Котлине.

Проект состоит из двух частей – Kotlin и Kotlin/Native.

По идее мне нужно в Native, но с ним всё печально (хотя казалось бы, куда еще хуже), т.к. я не разбираюсь в LLVM, да и C++ для меня глубоко чужое пока. В очередь на изучение добавляется LLVM, т.к. уже очевидно, что без него жить нельзя.

Чтобы познакомиться, взял для начала джавовую часть. Процедура установки простейшая – пойти на гитхаб, форкнуть и выполнить несколько команд на Apache Ant и Maven. Вначале несколько покоробило использование Анта, но в конце концов, наверное, на это есть причины (начиная с нехватки времени на мимимишные плагины).

Добавим еще печальных известий: комментариев в исходнике практически нет. Код написан довольно ясно, но его объем поражает воображение. Поражает вот в каком смысле: когда ты пишешь очередное веб-приложение, у тебя есть скорей всего стандартная структура типа MVC фреймворка с контроллерами и сервисами, ты сразу идешь в сервисы и читаешь, что происходит. Дальше нужно прошарить, как устроена БД, и начать писать свои сервисы и методы в контроллерах, выставляя их наружу для фронтендщиков. В целом, код неважен, важна бытовая логика, лежащая за манипуляциями с глобальным состоянием. Здесь же код важен. (Наверное, потом его можно будет легко разделить на важное и мусор, но не сейчас).

На всякий случай я связался с Димой и Андреем и получил ту инфу, что никакой дельной документации о дизайне компилятора не существует. Всё что тут остается делать – это читать весь исходник подряд и комментировать. Дельные комментарии можно пул-риквестить.

По-моему, правильным подходом было бы аккуратно документировать всё что видишь, чтобы в результате через несколько месяцев как раз получилось бы что-то типа architecture reference guide

[Археология Java] Контекстно-зависимый инлайнинг трейсов в Java

Инлайнинг методов – одна из наиболее важных оптимизаций в JIT-компиляторах (которые благодаря ей называются «основанными на методах» или «блочными»). Эта оптимизация расширяет область компиляции, позволяя оптимизировать несколько методов как единое целое, что повышает производительность приложений. Однако, если использовать инлайнинг методов слишком часто, время компиляции станет излишне большим, и будет сгенерировано слишком много машинного кода. И вот это скажется на производительность уже негативно. Continue reading “[Археология Java] Контекстно-зависимый инлайнинг трейсов в Java”