Oracle bans AI-generated code from OpenJDK 🔥 Горячее 💬 Длинная дискуссия
Oracle запрещает использовать ИИ‑сгенерированный код в OpenJDK, опасаясь угроз безопасности, конфиденциальности и нарушения прав на интеллектуальную собственность. Разработчики могут применять модели в личных целях — для отладки и ревью, но подавать такие фрагменты в репозитории, pull‑request’ах или иных каналах проекта нельзя. При этом внутри компании практики противоречат этой позиции: соучредитель Ларри Эллисон заявлял, что ИИ‑модели уже пишут код Oracle, а со‑CEO Майк Силлиcia отмечал рост эффективности за счёт сокращения штатов. Компания планирует потратить $70 млрд на расширение дата‑центров, что привело S&P к понижению рейтинга до BBB‑.
Ключевые цифры: $70 млрд инвестиций в инфраструктуру, рейтинг S&P = BBB‑ (на один шаг выше «мусорного»), запрет на ИИ‑код в OpenJDK. Яркие факты: внутреннее противоречие политики, когда внешне Oracle заявляет, что «не пишет» код, а внутри использует ИИ‑генерацию; одновременно компания активно инвестирует в ИИ‑инфраструктуру.
Комментарии (266)
Тред обсуждает риски использования ИИ-генерированного кода в OpenJDK — проблемы авторства, безопасности и ответственности. Разработчики считают, что Oracle запрещает такой код, чтобы избежать юридических рисков. Некоторые считают запрет чрезмерным и предлагают вместо полного запрета ввести контрольные меры. Все согласны: ИИ-код следует использовать с осторожностью и обязательно проверять на безопасность и авторство.
Old and new apps, via modern coding agents 🔥 Горячее
Искусственный интеллект позволил перенести десятки старых математических апплетов, написанных в Java 1999‑го, в современный JavaScript‑репозиторий. Миграция заняла несколько часов, все приложения снова заработали, один из них получил цветовую проработку Besicovitch‑множеств, а один, совместно с Алленом Кнутсоном, ожил после почти трёх десятилетий. При этом агент обнаружил два скрытых бага в оригинальном коде, а в реальном тестировании выявлен лишь один мелкий недочёт при перетаскивании за пределами окна, так что падение качества оказалось нейтральным.
Тот же подход использовался для создания новых визуализаций: за пару часов агент сгенерировал интерактивный симулятор специальной теории относительности, воспроизведший задумку «Inkscape в Мяковском пространстве», и отдельный инструмент для наглядного изучения Гиблеит‑конъюнкции. Эти «альфа‑версии» служат лишь вспомогательными материалами к статьям, но уже демонстрируют, как LLM‑агенты могут ускорить разработку учебных и исследовательских визуализаций, минимизируя риск критических ошибок.
Все новые и перенесённые апплеты размещены в открытом репозитории, доступном по ссылке, и могут использоваться как интерактивные дополнения к публикациям, позволяя читателям экспериментировать с параметрами и лучше воспринимать абстрактные концепции.
Комментарии (119)
- LLMs позволяют быстро создавать визуализации и прототипы, которые ранее требовали значительных усилий.
- Они удобны для модернизации устаревших учебных материалов и приложений, например, портирования старых Java‑апплетов.
- Не все задачи требуют полного доверия к генерации кода, особенно поддержка и рефакторинг сложного legacy‑кода.
- Общий эффект – расширение круга разработчиков, снижение барьера входа в программирование за счёт автоматизации рутины.
What Killed Perl? 💬 Длинная дискуссия
Perl не мёртв, его популярность находится на уровне периода dotcom пузыря, согласно отчёту CPAN 2023. Новичков среди пользователей Perl становится всё меньше с 2011 года, хотя общее использование языка остаётся стабильным. Raku (бывший Perl 6) не стал причиной упадка, так как Perl продолжал расти даже во время разработки Raku.
Основные гипотезы упадка Perl связаны с изменением поколений программистов и развитием инструментов разработки. Программисты, выросшие на Unix-системах, естественно воспринимали Perl как продолжение shell, C, awk и sed. Новое поколение, воспитанное на Microsoft, Visual Basic и Java, предпочло Python. Кроме того, появление мощных менеджеров пакетов сделало доступными множество альтернатив, в то время как раньше Perl был одним из немногих доступных инструментов.
Комментарии (356)
- Perl умер не из-за Raku, а из-за отсутствия единого пути развития, отсутствия стандарта кодстайла и культуры «один-разовых» скриптов.
- Python и PHP выиграли, потому что они были «дружелюбнее» для новичков и имели лучшую документацию.
- CPAN стал менее удобным, чем PyPI и npm, что сделало Perl менее привлекательным.
- Отсутствие единого фреймворка для веб-разработки и отсутствие стандарта ООП в Perl 5.
- Не было единого сообщества, которое могло бы продвигать Perl, в то время как Python и JavaScript имели Google и Facebook.
Ruby already solved my problem 🔥 Горячее
Автор рассказывает, как он создал свой собственный класс AppVersion для сравнения версий, но затем обнаружил, что в Ruby уже есть встроенный Gem::Version, который делает то же самое, но лучше. Он заменил свой класс на встроенный и призвал сообщество делиться знаниями, чтобы избежать изобретения велосипедов.
Комментарии (113)
- Участники восхищаются элегантностью и лаконичностью Ruby, особенно в реализации классов вроде AppVersion, и отмечают его выразительность по сравнению с TypeScript, Elixir и другими языками.
- Подчеркивается мощь метапрограммирования Ruby и его роль в развитии любви к программированию, хотя есть критика по поводу документации и экосистемы.
- Сравниваются реализации AppVersion в других языках (Python, Java, Scala), где признается сходство в выразительности, но отмечаются различия в синтаксисе и подходах.
- Упоминается ностальгия по Rails и его современное состояние, а также скрытые возможности стандартной библиотеки Ruby.
- Есть критика Ruby за "скрытые опасности" (footguns) и проблемы с масштабированием, а также за то, что экосистема Rails затмевает сам язык.
When did people favor composition over inheritance? 💬 Длинная дискуссия
Фраза "предпочитай композицию наследованию" стала клише, но её происхождение точно известно — это второй принцип объектно-ориентированного дизайна из книги "Design Patterns" "банды четырёх" (Gamma, Helm, Johnson, Vlissides). Оригинальная формулировка гласила: "Favor object composition over class inheritance". Авторы противопоставляли наследование ("белая коробка", где подкласс видит детали реализации) и композицию ("чёрная коробка", где объект взаимодействует только через интерфейс). Однако этот аргумент зависит от языка: в Java можно ограничить видимость для подклассов, а в Smalltalk и Python доступ к внутренностям возможен через рефлексию.
Более весомый аргумент касается гибкости: наследование статично и определяется на этапе компиляции, что затрудняет изменение, тогда как композиция динамична и позволяет заменять компоненты во время выполнения. Это меняет архитектурные зависимости — система опирается на отношения объектов в рантайме, а не на иерархию наследования. В контексте современного тренда к статической типизации и проверке компилятором, этот подход требует баланса. Интересно, что Barbara Liskov ещё в 1987 предлагала альтернативу: вместо жёсткой иерархии позволять полиморфным модулям использовать любые типы с нужными операциями, без формального отношения подтипа.
Комментарии (174)
- Inheritance can lead to complex, fragile hierarchies and "co-recursion" issues where subclass methods override parent methods in unpredictable ways.
- Composition is generally preferred for flexibility and maintainability, as it avoids tight coupling and allows "black box" reuse without exposing implementation details.
- Both approaches have valid use cases: inheritance suits "is-a" relationships with clear invariants, while composition excels at combining independent behaviors ("has-a").
- Modern best practices favor interfaces + composition to decouple polymorphism from behavior sharing, reducing brittleness compared to deep inheritance chains.
- Over-reliance on inheritance often stems from cargo-culting; it should be reserved for cases where it genuinely simplifies the design rather than complicating it.
The Swift SDK for Android 🔥 Горячее 💬 Длинная дискуссия
Swift.org анонсировали выпуск Swift SDK для Android, открывая новые возможности для кроссплатформенной разработки. Этот релиз стал результатом многолетних усилий сообщества и работы Android workgroup, которая расширяет возможности Swift за пределы традиционных платформ. SDK доступен в виде nightly preview релизов и может быть получен вместе с установщиком Windows или скачан отдельно для Linux и macOS.
Уже опубликовано руководство по началу работы и примеры приложений, демонстрирующие end-to-end рабочие процессы. Проект swift-java обеспечивает взаимодействие между Java и Swift, автоматически генерируя безопасные и производительные привязки. Интересно, что более 25% пакетов в Swift Package Index уже поддерживают Android, что упрощает перенос существующих проектов на новую платформу. Команда также работает над документом видения для будущих разработок Swift на Android и отслеживает прогресс через проект board.
Комментарии (252)
- Обсуждение в основном вращается вокруг трёх тем: «кроссплатформенный» Swift теперь позволяет писать Android-приложения на Swift, но не решает проблему UI-фреймворков, а также не затрагивает вопросы лицензирования и тулинга.
- Участники обсуждения отмечают, что даже если Swift теперь работает на Android, это не делает его «флаттером» — он не предоставляет нативный UI, и разработчики всё ещё должны решать, как реализовать UI, что делает его менее привлекательным, чем Flutter или React Native.
- Некоторые участники высказывают мнение, что вместо того, чтобы пытаться сделать Swift кроссплатформенным, было бы лучше, если бы Apple открыла Xcode и позволила бы использовать его на других платформах.
- Обсуждение также затрагивает вопрос о том, что влияние на разработчиков окажет то, что Apple не предоставляет никаких инструментов для разработки под Android, в то время как Google предоставляет такие инструменты для iOS.
- Участники также обсуждают, что влияние на разработчиков окажет то, что Apple не предоставляет никаких инструментов для разработки под Android, в то время как Google предоставляет такие инструменты для iOS.
Rating 26 years of Java changes 💬 Длинная дискуссия
Java прожил 26 лет, и за это время язык изменился до неузнаваемости. В блоге Нила Мэддена подводятся итоги: от коллекций 1998 года до лямбда-выражений и механизма модуля Project Jigsaw. Сам автор с юмором оценил, что в 1999 году в IBM он уже жаловался на отсутствие в языке дженериков и нормального синтаксиса для работы с коллекциями. Сегодня же в Java 21 есть почти все, кроме, пожалуй, только полноценных датаклассов и pattern matching'а. Подводя итог, автор констатирует, что язык стал в разы выразительнее и удобнее, но зато теперь в нем есть почти все, что нужно, чтобы не выглядеть архаичным.
Комментарии (206)
- Java-эволюция: от 1.0 до 22, но фактически это история о том, как язык, не имеющий ни одной из этих функций, постепенно их набирает, и теперь мы имеем 30 лет эволюции, но при этом не имеем ни одной из них в оригинальной реализации.
- Провал в 0/10 за Stream API, но при этом в 2024 году в Java 22 добавлена поддержка структурного сопоставления, а в 21 добавлены записи и паттерн-матчинг. Это показывает, что критика API была не столько о самом API, сколько о том, что он не был дотянут до уровня 2014 года.
- Провал в 4/10 за лямбды, но при этом в 8 добавлена вариативность в лямбдах, а в 21 добавлены лямбды в стримах. Это показывает, что критика была не столько о лямбдах, сколько о том, что они не были дотянуты до уровня 2014 года.
- Провал в 2/10 за модули, но при этом в 9 добавлена инкапсуляция модуля, а в 14 добавлены мультимодульные JAR-файлы. Это показывает, что критика была не о модулях, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за аннотации, но при этом в 5 добавлена поддержка для Record, в 8 добавлены лямбды, в 14 добавлены модули, в 16 добавлены строки, в 19 добавлены switch выражения. Это показывает, что критика была не об аннотациях, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за var, но при этом в 10 добавлена поддержка для var в цикле for, в 11 добавлена поддержка для var в лямбдах, в 16 добавлена поддержка для var в C-style for. Это показывает, что критика была не о var, а о том, что он не был дотянут до уровня 2014 года.
- Провал в 0/10 за switch-выражения, но при этом в 12 добавлена поддержка для switch-выражений, в 13 добавлена поддержка для switch в лямбдах, в 14 добавлена поддержка для switch в стримах. Это показывает, что критика была не о switch-выражениях, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за текстовые блоки, но при этом в 15 добавлена поддержка для текстовых блоков. Это показывает, что критика была не о текстовых блоках, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за records, но при этом в 16 добавлена поддержка для records. Это показывает, что критика была не о records, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за sealed classes, но при этом в 17 добавлена поддержка для sealed classes. Это показывает, что критика была не о sealed classes, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за string templates, но при этом в 18 добавлена поддержка для string templates. Это показывает, что критика была не о string templates, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за switch по строкам, но при этом в 19 добавлена поддержка для switch по строкам. Это показывает, что критика была не о switch по строкам, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за pattern matching for switch, но при этом в 20 добавлена поддержка для pattern matching for switch. Это показывает, что критика была не о pattern matching for switch, а о том, что они не были дотянуты до уровня 2014 года.
- Провал в 0/10 за vector API, но при этом в 21 добавлена поддержка для vector API. Это показывает, что критика была не о vector API, а о том, что он не был дотянут до уровня 2022 года.
- Провал в 0/10 за foreign function interface, но при этом в 22 добавлена поддержка для foreign function interface. Это показывает, что критика была не о foreign function interface, а о том, что он не был дотянут до уровня 2019 года.
- Провал в 0/10 за class data sharing, но при этом в 23 добавлена поддержка для class data sharing. Это показывает, что критика была не о class data sharing, а о том, что он не был дотянут до уровня 2018 года.
- Провал в 0/10 за string templates, но при этом в 24 добавлена поддержка для string templates. Это показывает, что критика была не о string templates, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по enum, но при этом в 25 добавлена поддержка для switch по enum. Это показывает, что критика была не о switch по enum, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по строкам, но при этом в 26 добавлена поддержка для switch по строкам. Это показывает, что критика была не о switch по строкам, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по null, но при этом в 27 добавлена поддержка для switch по null. Это показывает, что критика была не о switch по null, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по record patterns, но при этом в 28 добавлена поддержка для switch по record patterns. Это показывает, что критика была не о switch по record patterns, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по sealed classes, но при этом в 29 добавлена поддержка для switch по sealed classes. Это показывает, that критика была не о switch по sealed classes, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 30 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 31 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 32 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 33 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 34 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 35 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 36 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 37 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 38 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 39 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 40 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 41 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 42 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 43 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 44 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 45 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 46 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 47 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 48 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 49 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 50 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 51 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 52 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 53 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 54 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 55 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 56 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 57 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 58 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 59 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 60 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 61 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянуты до уровня 2018 года.
- Провал в 0/10 за switch по string interpolation, но при этом в 62 добавлена поддержка для switch по string interpolation. Это показывает, что критика была не о switch по string interpolation, а о том, что они не были дотянут
What .NET 10 GC changes mean for developers 🔥 Горячее 💬 Длинная дискуссия
В .NET 10 сборщик мусора получает серьёзные улучшения, которые могут вдвое или втрое сократить использование памяти и повысить производительность. Ключевые изменения включают расширенный escape-анализ для выделения объектов на стеке, оптимизацию делегатов и настройку размеров регионов кучи. Также активирована система DATAS, автоматически адаптирующая сборку мусора под поведение приложения, особенно в контейнерах.
Однако эти улучшения требуют осторожного подхода: они доступны через runtime-флаги и могут иметь компромиссы, например, увеличение пауз или нагрузки на CPU. Разработчикам стоит тестировать новые настройки в боевых сценариях, а не включать их вслепую. Инструменты мониторинга, такие как счетчики GC и дампы памяти, помогут оценить эффект для конкретного приложения.
Комментарии (196)
- Пользователи отмечают значительное повышение производительности в .NET 10 по сравнению с .NET 8, особенно в приложениях для анализа аудио и текста.
- Высказываются опасения, что оптимизации .NET могут отдалить его от совместимости с WASMGC, что критично для использования в браузере.
- Обсуждаются потенциальные риски, такие как переполнение стека в программах, которые ранее работали стабильно, и сложность настройки GC.
- Упоминаются альтернативные фреймворки для кроссплатформенной разработки (Avalonia, Flutter, MvvmCross) на фоне скептического отношения к стабильности и будущему MAUI.
- Поднимаются вопросы о применимости .NET для high-frequency trading и оптимизации LINQ, а также о сравнении с JVM и другими языками (F#, Java).
Top Programming Languages 2025 💬 Длинная дискуссия
Python сохраняет лидерство благодаря своей универсальности в машинном обучении и веб-разработке, а JavaScript остаётся незаменимым для фронтенда. Rust продолжает расти из-за акцента на безопасность и производительность, особенно в системном программировании. Go набирает популярность в облачных сервисах и микросервисной архитектуре благодаря простоте и эффективной параллельной обработке.
Стоит отметить рост TypeScript как более строгой альтернативы JavaScript, а также стабильное присутствие Java в корпоративных приложениях. Интерес к Julia увеличивается в научных вычислениях, а Kotlin укрепляет позиции в мобильной разработке под Android. Практический вывод: выбор языка всё больше зависит от конкретной области, а не только от общей популярности.
Комментарии (343)
- Сомнения в методологии рейтинга языков программирования IEEE из-за использования ненадёжных источников (поисковые запросы, устаревающий StackOverflow), что может искажать реальную картину.
- Удивление высокой позицией Java (2-е место), объясняемой её доминированием в enterprise-секторе (финансы, страхование, здравоохранение) и миграцией legacy-систем с COBOL.
- Обсуждение искусственного завышения позиции Python из-за его популярности у новичков, в академических статьях и как основного языка вывода для LLM.
- Предложение объединить рейтинги близких языков (JavaScript/TypeScript, Java/Kotlin, C/C++) для более точного отражения популярности экосистем.
- Размышления о влиянии AI-ассистентов на будущее языков: возможная стагнация из-за зависимости LLM от популярных языков или, наоборот, упрощение изучения нишевых.
WASM 3.0 Completed 🔥 Горячее 💬 Длинная дискуссия
Завершена работа над Wasm 3.0
Три года назад была завершена версия 2.0 стандарта Wasm, добавившая векторные инструкции, массовые операции с памятью, множественные возвращаемые значения и простые ссылочные типы.
Сегодня мы рады объявить о выпуске Wasm 3.0 как нового действующего стандарта. Это крупное обновление включает несколько важных функций, разрабатывавшихся до восьми лет.
-
64-битное адресное пространство. Память и таблицы теперь могут использовать
i64вместоi32, расширяя доступное пространство с 4 гигабайт до 16 эксабайт (теоретически). На вебе 64-битная память ограничена 16 гигабайтами, но для невеб-экосистем это открывает возможности для работы с огромными приложениями и наборами данных. -
Множественная память. Теперь один модуль может объявлять и напрямую использовать несколько областей памяти, включая копирование данных между ними. Это позволяет инструментам вроде wasm-merge работать со всеми модулями Wasm и открывает новые возможности для безопасности, буферизации и инструментирования.
-
Сборка мусора. Wasm добавляет поддержку автоматически управляемого хранилища через сборщик мусора. Компиляторы могут объявлять layout структур данных через типы struct и array, а также нетипизированные целые числа — всё остальное, включая представление значений исходного языка, остаётся их ответственностью. Wasm предоставляет только базовые строительные блоки, избегая встроенных объектных систем.
-
Типизированные ссылки. Расширение системы типов теперь поддерживает богатые формы ссылок, описывающие форму значения в куче, что избегает дополнительных проверок во время выполнения. Эта система также доступна для ссылок на функции, позволяя безопасные косвенные вызовы без проверок типа или границ через инструкцию
call_ref. -
Хвостовые вызовы. Важный механизм для языковых реализаций, особенно функциональных языков и внутренних техник (например, заглушек). Вызовы полностью общие и работают как для статических, так и для динамических получателей.
-
Обработка исключений. Ранее не было эффективного способа компиляции обработки исключений в Wasm. Теперь исключения определяются через теги с данными, могут быть выброшены и перехвачены обработчиками — новым видом инструкций блока с диспетчеризацией по тегам.
-
Расслабленные векторные инструкции. (Описание сокращено)
Комментарии (427)
- Переход на 64-битную адресацию по умолчанию снимает ограничения для ресурсоёмких веб-приложений, таких как видеоредакторы.
- Добавлена низкоуровневая поддержка сборки мусора (GC), позволяющая компиляторам управлять структурой данных.
- Сообщество выражает разочарование отсутствием прямого доступа к DOM и JS-объектам из WebAssembly.
- Множественные памяти и улучшенная типизация ссылок могут оптимизировать взаимодействие с API (например, WebGPU).
- Разработчики отмечают проблемы с опытом использования (DX) и сложность компиляции в WASM.
- Обсуждаются потенциальные применения новых возможностей для языков C#, Java, Go и Python.
- Остаются нерешённые вопросы, такие как работа на микроконтроллерах и поддержка сокетов.
Grok Code Fast 1 🔥 Горячее 💬 Длинная дискуссия
grok-code-fast-1 — новая модель xAI для агентного кодинга: быстрая, дешевая, заточена под ежедневную работу.
- Скорость: архитектура с нуля, оптимизация инференса, кеш >90 %. Десятки вызовов инструментов до того, как вы прочтёте первую строку мыслей.
- Цена: 0,20 $/1 M входных, 1,50 $/1 M выходных, 0,02 $/1 M кешированных токенов.
- Языки: TypeScript, Python, Java, Rust, C++, Go.
- Инструменты: grep, терминал, редактирование файлов — «родная» работа в IDE.
- Партнёры: временно бесплатно в Cursor, GitHub Copilot, Cline, Roo Code, Kilo Code, opencode, Windsurf.
Производительность
- 190 токенов/сек, SWE-Bench-Verified 70,8 %.
- Оценки реальными разработчиками: быстро и надёжно для рутинных задач.
Комментарии (462)
- Кто-то хвалит grok-code-fast-1 за скорость и качество, сравнивая с gpt-5-mini, другие считают «быстро, но тупо».
- Основная критика: упор на скорость вместо качества, неточные или вредные изменения кода, сомнительные внутренние бенчмарки.
- Несколько человек жалуются, что модель случайно удаляет код и скрывает кнопки «стоп».
- Подняты этические и экологические вопросы: нелегальные газовые турбины и «обученный нацистский бот».
- Часть пользователей просто рада быстрой бесплатной модели в Cursor/VS Code для простых задач.
Traps to Developers
-
CSS
min-width: auto(по умолчанию) имеет приоритет надflex-shrink,overflow: hidden,width: 0; задайтеmin-width: 0.- Горизонталь и вертикаль различаются:
width: autoрастягивается,height: autoпо содержимому;margin: 0 autoцентрирует по горизонтали, но не по вертикали (вflex-direction: columnработает). - BFC (
display: flow-root) предотвращает схлопывание margin и «обнуление» высоты родителя с float-потомками. - Новый stacking context создают
transform,filter,opacity,position: fixed/sticky,z-index+absolute/relativeи др.;z-indexдействует только внутри контекста. - На мобильных
100vhвключает скрытые панели; используйте100dvh. position: absoluteориентируется на ближайший «positioned» ancestor, а не на родителя.floatне работает внутри flex/grid-родителя.- Процентные
width/heightне работают, если размер родителя не задан. display: inlineигнорируетwidth,height, вертикальныеmargin.- Пробелы между
inline-blockэлементами рендерятся; в flex/grid — нет. box-sizing: content-box(по умолчанию) не включает padding/border; включитеborder-box.- Указывайте
width/heightу<img>для предотвращения CLS. - Загрузка файлов не показывается в DevTools; используйте
chrome://net-export/. - Внутри
<script>строка</script>ломает парсинг.
-
Unicode
- Отличайте code point и grapheme cluster (последнее — то, что видит пользователь).
Комментарии (100)
- Маршрутизаторы могут тихо обрывать простаивающие TCP-соединения; настройте TCP-keepalive или HTTP-заголовки.
- Возвращать
nullизOptional<T>— антипаттерн; Kotlin и аннотации уже решают это. - UTF-16 в Java/C#/JS — деталь реализации; в Go строки — просто байты.
min-width: autoработает не везде; CSS-свойства нельзя читать изолированно.- Регексы, YAML, LF/CRLF,
rm -rf $DIR/— каждый язык/платформа имеет свои подводные камни.
We shouldn't have needed lockfiles 💬 Длинная дискуссия
Представьте, вы пишете проект и вам нужна библиотека — назовем ее libpupa.
Вы находите текущую версию 1.2.3 и добавляете в зависимости: "libpupa": "1.2.3" Автор libpupa 1.2.3 в свою очередь зависел от liblupa версии 0.7.8 и записал это: "liblupa": "0.7.8" То есть libpupa 1.2.3 навсегда зависит от liblupa 0.7.8. Алгоритм разрешения зависимостей простой и детерминированный: берем версии верхнего уровня, затем версии их зависимостей, и так далее. Достаточно указать только верхние уровни — транзитивные получатся одинаковыми всегда. Зачем отдельный lockfile?
Но люди изобрели lockfile из‑за диапазонов версий. Диапазоны делают сборку зависимой от времени: сегодня вы получите liblupa 0.7.8, через 10 минут — 0.7.9. Это определяется не при публикации, а при сборке: вы можете подтянуть версию, которой не существовало на момент выпуска libpupa 1.2.3. Откуда автор libpupa знает, что будущая 0.7.9 не сломает его код? Семантическое версионирование — это лишь намек, не гарантия.
И смешно то, что эти диапазоны все равно «замораживают» в lockfile, и вы не получаете предполагаемой пользы. «Перегенерируй lockfile и обновись» — это ничем не отличается от обновления верхнеуровневых зависимостей. «Lockfile решает конфликты версий?» — нет: библиотека либо работает с новой версией, либо нет; запись «0.7.*» не помогает — все равно нужно выбрать рабочую версию.
«Но раз lockfile существует, значит, нужен!» — не обязательно. Пример: Maven. Экосистема Java 20 лет обходится без lockfile, при этом тянет сотни библиотек — и все детерминировано.
Вывод: lockfile усложняет без достаточных причин. Менеджеры зависимостей могут работать без него.
UPD: В Maven при конфликте транзитивных зависимостей выбирается версия, ближайшая к корню. Это детерминированно и позволяет переопределять версии. Если вышла d 2.1 с патчами безопасности, добавьте ее в корень — она и будет выбрана, не дожидаясь обновлений у всех. Если автоматически брать самую большую версию, вы потеряете возможность переопределения.
Комментарии (267)
- Обсуждение крутится вокруг необходимости lock-файлов и версионирования: одни считают, что фиксированные версии и детерминированные алгоритмы достаточно, другие настаивают, что lock-файлы критичны для воспроизводимости и безопасности.
- Приводят примеры из экосистем Maven/Java, Go (MVS), Cargo/Rust, .NET, Scala: у каждого свои компромиссы; даже при детерминированном резолве сеть/репозитории делают сборки недетерминированными без lock-файлов и хэшей.
- Аргументы за версии-диапазоны: автоматическое получение патчей безопасности без вмешательства авторов верхнеуровневых библиотек; но это ломается при конфликтующих транзитивных зависимостях и несовместимых API/ABI.
- Много комментариев о том, что lock-файлы особенно нужны приложениям (прод, стейджинг, аудит), а для библиотек — меньше, но всё равно полезны из-за пересборок и целостности (хэши артефактов).
- Подчёркивают проблемы разных языков: в компилируемых — типы из разных версий несовместимы; в JS Node могут сосуществовать несколько версий, но это не решает безопасность/детерминизм.
- Некоторые отмечают, что главная путаница — не в lock-файлах, а в культуре семвера, централизованных репозиториях и UX инструментов; предлагают BOM/snapshot-подходы и периодические обновления с тестами/реновейтом.
- Отдельная ветка критикует дизайн сайта с анимированными иконками, мешающими чтению.