1.83K subscribers
3.31K photos
132 videos
15 files
3.59K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
AbstractSingletonProxyFactoryBean

Шутка ООП-хейтера? Отнюдь, суровая реальность Spring.

#prog #java
#prog #article

Системы типов #java и #scala являются unsound. Подробности в статье.

TL;DR:
Программа определяет тип class Constrain<A, B extends A> {} и метод upcast:

static class Bind<A> {
<B extends A>
A upcast(Constrain<A,B> constrain, B b) {
return b;
}
}

Этот метод просто апкастит значение типа B в значение типа A, используя значение типа Constrain<A, B> как материальное свидетельство того, что B действительно является подтипом A. К сожалению, ничто не мешает в качестве значения этого типа использовать null, что ломает логику системы типов, которая полагается на этот факт, а использования wildcard capture позволяет при помощи Constrain установить отношение субтипизации между двумя произвольным типами. Результат? Комбинация null-гого Constrain и upcast позволяет перевести значение любого типа в значение любого типа. Фактически — аналог std::mem::transmute, но без каких либо небезопасных фич и с корректно типизированным кодом.

И эта ошибка оставалась незамеченной 12 лет. А кто-то ещё говорит, что null — хорошая идея.
#prog #java #kotlin #scala #article

Well-Typed Programs Can Go Wrong: A Study of Typing-Related Bugs in JVM Compilers

В этой статье авторы отмечают, что усилия в тестировании компиляторов в основном направлены на отлов некорректных оптимизаций, при этом мало кто целенаправленно занимается отловом багов в фронтендах. Авторы выбрали 320 багов, связанных с типами, среди багов компиляторов Java, Scala, Kotlin и Groovy, и разобрались с тем, как они себя проявляют, какие фичи языка используют и как они фиксятся. Вооружившись этим знанием, они написали генератор тестовых программ, который смог найти 28 багов, из них 12 были новыми (то есть для них исправлений не было).

А ещё авторы отличились тем, что нормально выложили материалы по исследованию.
#prog #java #python #article

Ладно бы система типов Java полна по Тьюрингу. Оказывается, к системе типов, задаваемых аннотациями типов Python, это тоже относится!
😱6👎1
😁16🤡3
#prog #rust #java #article

How We Migrated Our Static Analyzer From Java To Rust

Меня, правда, смущает, что правила анализа почему-то написаны на JavaScript.

<...>

We observed that the migration tripled our performance and resulted in a tenfold reduction in memory usage, <...>

To our surprise, we gained a firm grasp of the language and a clear idea of how our codebase would be mapped onto Rust within 10 days. <...> Within a month, the entire code analysis infrastructure was migrated from Java to Rust, and all customers were running on the new Rust analyzer.

<...>

Removing our dependency on the JVM and speeding up the analysis enabled us to embed the analyzer directly into the IDE. The very same lightweight and fast analyzer that runs in your CI/CD pipelines simultaneously reports coding errors and suggests fixes in your IDE in real time, <...>
1👍1🤔1🌚1🤨1
#prog #go #java #article

NilAway: Practical Nil Panic Detection for Go

Инструмент для статического анализа кода на Go для обнаружения потенциальных разыменований nil-указателей. В отличие от прочих решений, решающих эту проблему, NilAway быстр, анализирует код между функциями (и даже между пакетами) и поддерживает инкрементальный анализ. При всём этом он не требует никаких аннотаций в коде.

А ранее Uber сделали аналогичный инструмент для Java, NullAway.
👍31
😁29💯101👎1
#prog #java #article

3,200% CPU Utilization

TL;DR: несинхронизированный доступ к TreeMap привёл к тому, что связи между её внутренними узлами, которые обычно имеют древовидную структуру, образовали цикл, из-за чего треды зависали во время лукапа.

Автору также удалось воспроизвести этот спецэффект в C++ и в Go.
🤯12👍4🤷3🥴1🌚1