Go Concurrency Distilled 🔥 Горячее 💬 Длинная дискуссия
Go предоставляет лёгкие горутины, запускаемые ключевым словом go, которые планируются рантаймом на системные потоки. Для синхронизации используются sync.WaitGroup, увеличивающий счётчик при Add и уменьшающий при Done, а Wait блокирует до нуля. Каналы обеспечивают синхронный обмен данными: отправка блокирует до получения, а select позволяет ждать нескольких каналов одновременно, включая time.After для таймаутов. Контекст (context.Context) передаёт сигналы отмены и таймауты через WithCancel и WithTimeout, проверяемые через Done(). Для защиты共享 данных применяются мьютексы (sync.Mutex), а атомарные операции (sync/atomic) работают без блокировок. Семафоры ограничивают доступ к ресурсам через буферизованные каналы, а sync.Once гарантирует однократную инициализацию. Профилирование выполняется через net/http/pprof или вручную: pprof.StartCPUProfile для CPU, runtime.MemStats для памяти, trace.Start для трассировки, включая flight recording с ограничением по размеру и времени. Все инструменты направлены на безопасную и эффективную конкурентность без гонок данных.
Комментарии (180)
Go-конкурентность проста для старта, но сложна для безопасной эксплуатации в проде: утечки горутин, отсутствие встроенной отмены и трудности с отладкой — частые проблемы. Опытные разработчики обходят их через context, WaitGroup и избегают каналов там, где они не нужны. Не используйте каналы повсеместно — многие профессионалы Go редко применяют их, предпочитая последовательный код и вводя конкуренцию только при превышении SLO. Перед запуском горутины обязательно определите, как она будет остановлена — утечки горутин в проде трудно отлаживать и требуют перезапуска процесса. Используйте context для отмены, но помните: отмена требует сотрудничества горутины — Go не поддерживает прерывание, так как не имеет исключений. Простые шаблоны go+chan из учебников часто небезопасны — реальные приложения требуют хаков для управления жизненным циклом горутин. Избегайте сложных графов операций в Go — без generics и completable futures это сложно; альтернативы вроде goyek помогают, но не решают фундаментальные ограничения. Go-каналы не эквивалентны Haskell's STM — отсутствие транзакционной памяти снижает абстрактную мощность, а поведение при закрытии канала дважды — произвольное и непредсказуемое. Java с виртуальными потоками и структурированной конкурентностью предлагает более надёжный и безопасный подход, чем Go, особенно с учётом отсутствия memory safety в Go. Erlang/BEAM и Elixir имеют более зрелую модель акторов с распределённой обработкой, устойчивостью к сбоям и поддержкой межмашинной коммуникации, чего Go не имеет. Kotlin coroutines и структурированная конкурентность решают проблему отмены и управления жизненным циклом более элегантно, чем Go-контекст. Haskell позволяет писать асинхронный код как синхронный — без прыжков между сообщениями, что делает логику проще для понимания, чем в Go-каналах. Julia предлагает более продвинутую систему потоков: M:N, структурированная конкурентность, распределённые вычисления и безопасные атомарные операции в стандартной библиотеке. Опытные разработчики Go часто избегают mutex и каналов в PR — любое использование этих механизмов воспринимается как признак ошибки. Для сложных задач с очередями и диспетчеризацией лучше выносить конкурентность в отдельные менеджеры — логика остаётся линейной, что упрощает аудит и отладку. Go-конкурентность — это магия для старта, но требует глубокого понимания для продакшена: утечки, отмена и отладка — главные боли, которые не решаются синтаксисом. Каналы в Go — это просто буферизованные очереди; небуферизованные каналы создают rendezvous-синхронизацию, что отличает их от mvar и требует осознанного применения.
AI Isn't Outthinking Mathematicians. It's Out-Remembering Them 🔥 Горячее 💬 Длинная дискуссия
Искусственный интеллект не «умнее» математика — он просто помнит в разы больше. В отличие от человека, чья рабочая память удерживает лишь несколько абстрактных элементов одновременно, нейросети могут удерживать в контексте тысячи формул, промежуточных выводов, определений и даже отброшенных подходов. Это позволяет решать сложные задачи, не перегружая биологические ограничения.
Ключевой факт: человеку трудно умножить в уме два трёхзначных числа — не из-за сложности операций, а из-за необходимости одновременно хранить промежуточный результат и текущую цель. Бумага или цифровой контекст устраняют эту «узкую горлышко» интеллекта. Математики используют нотацию, схемы и «чанкинг» (группировку знакомых конструкций), чтобы компенсировать лимит памяти, но не преодолевают его. AI же работает с внешним «бесконечным блокнотом», где каждый шаг фиксируется. Это делает его похожим на машину-умножитель Вон Неймана: не гениальный в философском смысле, но способный обрабатывать масштабы, недоступные мозгу.
Запомните: рабочая память — главный барьер для человеческого математического мышления. Её объём напрямую коррелирует с успехом в математике, независимо от общего ИК. Но у AI нет «глубины» Вон Неймана — он лишь использует его скорость и объём памяти как инструмент. Следующий прорыв наступит, когда ИИ поймёт, что задача сформулирована неверно, и переосмыслит её фундаментально.
Пример: Чтобы доказать теорему о сходимости ряда, математик может одновременно удерживать в голове 5 определений, 3 предыдущих леммы и текущую цель. AI же хранит все эти элементы в контексте и перебирает варианты, не уставая.
Комментарии (249)
ИИ превосходит математиков не только в запоминании, но и в применении знаний к новым задачам — например, решении сложных математических проблем и генерации доказательств, обходя биологические ограничения рабочей памяти. Некоторые считают, что это проявление мышления, другие — что ИИ лишь эффективно использует рабочую память. В любом случае, он полезен в областях, требующих большого объёма знаний и памяти, таких как математика и программирование.
Claude Memory 🔥 Горячее 💬 Длинная дискуссия
Anthropic представила функцию памяти для Claude, которая позволяет ИИ запоминать контекст проектов, предпочтения команды и рабочие паттерны. Функцией уже пользуются Team и Enterprise-планы, а теперь она доступна и для Pro и Max. Память полностью опциональна с детальным контролем пользователя, а для конфиденциальных разговоров добавлен режим "Инкогнито", который не сохраняется в истории.
Каждый проект имеет отдельную память, что предотвращает смешивание информации между разными инициативами. Пользователи могут просматривать и редактировать то, что запомнил Claude, через сводку памяти. Функция прошла тщательное тестирование безопасности, включая проверку на возможность воспроизведения вредных паттернов. Как отмечено в статье: "Memory helps you and your teams manage complex, concurrent initiatives without mixing unrelated details, serving as a safety guardrail that keeps sensitive conversations contained".
Комментарии (302)
- Пользователи обсуждают, что новая функция памяти в Claude не работает как RAG-система, а скорее как «контекст-окно плюс» — она не запоминает документы, а лишь «контекст» внутри одной сессии.
- Участники отмечают, что Anthropic не раскрывает, как именно реализована память: нет никакого доступа к «памяти» или возможности её редактировать, что вызывает вопросы о контроле и прозрачности.
- Ряд участников подчеркивает, что модель не может отличить, какие именно воспоминания будут использованы в будущем, и это вызывает опасения по поводу приватности и безопасности.
- Некоторые участники высказывают, что не ясно, как именно память влияет на стоимость и токены, и нет ли у неё каких-то ограничений по объёму.
- Также обсуждается, что Anthropic не предоставляет никакого способа переноса памяти между различными проектами или даже между Claude и ChatGPT.