Тёрка в тагах


Друзья

Его(2) Общие(0) Хотят дружить(0)


  • Atrinax

  • Blackoff

  • login

  • login

  • login

  • login

Враги

Его(0) Общие(0) Обиженные(1)

Большая Тёрка / Мысли / Личная лента olegchir /


olegchir

Coming out

Java

я, к сожалению, не гей, поэтому придумал сделать coming out дргуим способом, а именно — расписаться в безграмотности :3

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

например, мы хотим проверить, что на протяжении всего исполнения произвольного блока кода, должно выполняться условие «x > 0».
А этот x — это shared mutable state, и его может...
Читать далее
... поменять другой поток, поэтому его недостаточно проверять только на входе метода, нужно проверять каждый чекпоинт («каждую строчку»).

Но ведь в джаве нет такой фичи. Можно AOPить целиком методы, но не строчки (а что там генерит компилятор на самом деле вообще не видимо глазу чтобы сказать, что вот на этот минимально неделимый кусок intermediate representation я хочу повесить проверку).

и даже для куска IR у нас может случиться тупо мисалайнмент (direct byte buffers на jdk > 6?), и код превратится в фарш (кстати, кто в теме, прокомментируйте про мисалайнмент в джаве, когда случается?)

Можно навелосипедить это на лямбдах (каждую строчку обернуть в метод) но по понятным причинам это не вариант. Во‑первых, оптимизация (заинлайнит или не заинлайнит? в попу или в рот?). Во‑вторых, ну просто задолбаешься писать всю эту писанину вручную

Можно запустить проверку в отдельном треде — тоже ведь не вариант, там будет происходить черти что. Да и всё равно мы не можем убить тред по своему желанию (если мы не конченые отморози — тогда можем), и нужно будет подпихнуть в целевой тред точки останова.

Ну можно «макросами» переписать сам исходник и реально обернуть каждую строчку в проверки перед сборкой. Или переписать в байткод?

Как это делают правильные, накачаные русские java мужики?