Hacker News Digest

Тег: #type-systems

Постов: 5

Software essays that shaped me (refactoringenglish.com)

Автор делится программными эссе, которые повлияли на его мышление за 20 лет карьеры. Среди них — «Тест Джоэла» Джоэла Спольски, который предлагает 12 вопросов для оценки качества работы команды, подчеркивая уважение к разработчикам и их времени. Эссе Алексис Кинг «Парси, а не валидируй» показывает, как использование типов данных повышает безопасность, превращая сырые строки в проверенные структуры. Фред Брукс в «No Silver Bullet» утверждает, что не существует волшебного решения сложности ПО, поскольку её корни — в сущностных, а не случайных проблемах.

Практические выводы включают выбор работодателей, ценящих разработчиков, применение строгих типов для данных и принятие неизбежной сложности инженерии. Эти идеи формируют подход к надёжности, безопасности и человеческому фактору в разработке.

by mtlynch • 30 сентября 2025 г. в 14:01 • 210 points

ОригиналHN

#software-engineering#testing#software-design#type-systems#software-complexity#therac-25#security#brooks-law#software-development#llm

Комментарии (31)

  • Обсуждаются влиятельные эссе и статьи о разработке ПО, включая "Parse, don't validate", "Choose Boring Technology" и анализ инцидентов с Therac-25.
  • Поднимаются вопросы о качестве тестового кода: спор о допустимости логики в тестах и важности их простоты для избежания ложных срабатываний.
  • Обсуждается влияние ИИ на классическую теорию Brooks'а об отсутствии "серебряной пули" и его способность снижать essential complexity.
  • Упоминаются ключевые работы, повлиявшие на мышление разработчиков, такие как "Grug Brained Developer", "Code Complete" и "Don't Call Yourself A Programmer".
  • Затрагивается проблема цифровой идентификации и доступа к аккаунтам в сравнении с аналоговым миром, где проще доказать свою личность.

Evolving the OCaml Programming Language (2025) [pdf] (kcsrk.info)

  • Эволюция OCaml – Ashoka Univ, сент 2025 [pdf][key]
  • Авто-проверка реплиц. типов – NUS, авг 2025 [pdf][key]
  • AI-инструменты для исследований – IIT Madras, июль 2025 [pdf][key]
  • Параллельный рантайм OCaml – Chalmers, май 2025 [pdf][key]
  • Авто-проверка реплиц. типов – WG 2.8, май 2025 [pdf][key]
  • Параллельный OCaml 5 – Bloomberg, мар 2025 [pdf][key]
  • Параллельный OCaml 5 – IIT Gandhinagar, мар 2025 [pdf][key]
  • Параллельный OCaml 5 (ч.1) – PACE Lab, фев 2025 [pdf][key]
  • Безопасность памяти и ЯП – Schaeffler @ IITM, фев 2025 [pdf][key]
  • Мини-ОС через Unikernels – Daekin–IITM, янв 2025 [pdf][key]
  • Безопасные Unikernels с аппаратной поддержкой – CAIR DRDO, ноя 2024 [pdf][key]
  • Параллельный OCaml 5 – Meta London, сен 2024 [pdf][key]
  • Зачем OCaml? – Rezilyens, авг 2024 [pdf][key]
  • Эффекты и конкурентность – Chalmers, май 2024 [pdf][key]
  • Безопасность функциональных программ – WG 2.8, апр 2024 [pdf][key]
  • Композиция библиотек конкурентности – EHOP, июл 2023 [pdf][key]
  • Сливаемые реплиц. типы – Collège de France, апр 2023 [pdf][key][видео]
  • OCaml 5.0 – OCaml Workshop, сен 2022 [pdf][key]
  • Ретрофит конкурентности – ICFP keynote, сен 2022 [pdf][key][видео]
  • Сертифицированные сливаемые типы – PLDI, июн 2022 [pdf][key][видео]
  • Сертифицированные сливаемые типы – Nomadic Labs, апр 2022 [pdf][key][видео]
  • Параллелизм в OCaml – Marigold, дек 2021
  • Эффекты в OCaml 5 – Huawei STW, окт 2021 [pdf][key]
  • Эффекты в OCaml – SimCorp, сен 2021 [pdf][key]
  • Параллелизм в OCaml – SimCorp, сен 2021 [pdf][key]
  • ParaFuzz: фаззинг многопоточных программ – Dagstuhl, 2021

by matt_d • 05 сентября 2025 г. в 00:05 • 142 points

ОригиналHN

#ocaml#parallel-computing#functional-programming#type-systems#compiler-development#concurrency#unikernels#memory-safety#jane-street-core-base

Комментарии (30)

  • Доклад — субъективный взгляд на 10-летнюю эволюцию OCaml; цель — убрать мистику вокруг разработки компилятора и заманить новых контрибьюторов.
  • Главный бытовой pain-point: в стандартной библиотеке исключения — часть API, и они не типизированы, что подрывает «безопасность» языка.
  • Выход — использовать Jane Street Core/Base (функции либо возвращают Result, либо помечены _exn), но большинство проектов всё ещё живёт на обычной Stdlib.
  • «Большие» альтернативы Stdlib (Core, Base) существуют, но их значение часто преувеличено; официальная библиотека за последние годы всё-таки подросла полезными функциями.
  • Новичкам в компиляторщине советуют начинать с мелких багов и мини-Pull Request’ов, а не пытаться сразу «съесть слона».

Optimising for maintainability – Gleam in production at Strand (gleam.run)

Задача
Лондонское агентство Strand ведёт сотни маркетинг-проектов в год. Финансовый учёт раньше велся вручную через таблицы. В 2020 г. команда из трёх разработчиков запустила прототип финансовой системы; он быстро стал критически важным, и потребовалось обеспечить надёжность и простоту поддержки при минимальных ресурсах.

Решение
Strand выбрал язык Gleam на платформе BEAM:

  • Безопасность: чистый код не падает; сбои внешних сервисов изолируются лёгкими процессами.
  • Практичность: язык мал, однозначен, осваивается за день; доступны 40 лет библиотек Erlang/Elixir.
  • Опыт разработки: единый пакет с форматтером, автодополнением и понятными ошибками; сборка мгновенная.

Система обрабатывает курсы валют, синхронизирует данные с внешним ПО и продолжает расти без роста технического долга.

by Bogdanp • 28 августа 2025 г. в 15:30 • 78 points

ОригиналHN

#gleam#beam#erlang#elixir#javascript#nodejs#type-systems#functional-programming

Комментарии (20)

  • Вероятно, языки вроде Gleam выиграют у ИИ благодаря строгой типизации и быстрой обратной связи.
  • Некоторые новички застревают в «абстракционном аду» и советуют сначала освоить Erlang/Elixir.
  • Производственные истории успеха Gleam на BEAM вдохновляют.
  • Однофайловые исполняемые файлы можно собрать через компиляцию в JavaScript + Node SEA или Burrito, но полноценный VM-free релиз пока нет.
  • Качество примеров и стабильность языка становятся важнее их количества для LLM.
  • Чистые, референциально прозрачные языки удобны ИИ для параллельного тестирования блоков кода.

Go is still not good (blog.habets.se) 🔥 Горячее 💬 Длинная дискуссия

Go всё ещё плох

Кратко: автор 10+ лет критикует Go за архитектурные ошибки, которые легко было избежать.

1. Ошибки: неверная область видимости

bar, err := foo()
if err != nil { … }
if err = foo2(); err != nil { … }
// err висит до конца функции, хотя нужен только в двух строках

Читателю приходится тратить время, выясняя, где err ещё используется.

2. Два вида nil

var i interface{}
var s *S
fmt.Println(s == nil, i == nil, s == i) // true, true, false
i = s
fmt.Println(s == nil, i == nil, s == i) // true, false, true

Один «billion-dollar mistake» не хватило — сделали два.

3. Непереносимость

Условная компиляция через комментарии в начале файла — «аристотелевский» подход: теория без практики. Реальные проекты страдают.

4. append без чёткого владения

a := []string{"hello", "world", "!"}
foo(a[:1]) // внутри append
fmt.Println(a) // результат зависит от капасити слайса

Поведение неочевидно и требует знания внутренностей.

5. defer вместо RAII

В Java и Python ресурс закрывается автоматически при выходе из блока.
В Go приходится вручную писать defer foo.Close() и гадать, какие ресурсы вообще требуют закрытия.

by ustad • 22 августа 2025 г. в 09:25 • 467 points

ОригиналHN

#go#programming-languages#concurrency#garbage-collection#resource-management#type-systems#compilers

Комментарии (591)

  • Go хвалят за простоту, быструю компиляцию, встроенные инструменты и удобную конкурентность.
  • Критикуют «двойной nil», слабую систему типов, проблемы GC, неинтуитивный defer и скудные абстракции.
  • Многие считают его «достаточно хорошим» для бэкендов и CLI-утилит, особенно при скорости разработки.
  • Крупные проекты жалуются на «смерть тысячей порезов» и трудности отладки из-за строгости компилятора.
  • Часть сообщества видит в Go компромисс между Node/Python и Rust, другие — устаревший язык без современных фич.

Typechecker Zoo (sdiehl.github.io)

Проект «Zoo» — мини-реализации самых влиятельных статических систем типов последних 50 лет. Начнём с простых и дойдём до зависимых типов. Всё пишем на Rust — просто потому что удобно и забавно строить чисто функциональные языки на не-функциональном.

Это не учебник, а выходные развлечение. За теорией и доказательствами смотрите TAPL, ATTAPL, PFPL и оригинальные статьи (ссылки в приложении). Здесь же — грязные детали реализации: структуры данных, AST, логика, всё, что можно осилить за уик-энд.

Код — идиоматичный Rust с полноценным парсером и тестами (lalrpop, logos, ariadne). Примеры урезаны, но понятнее продакшен-реализаций. Парсинг и MLIR считаем решёнными задачами, поэтому не фокусируемся на них.

Четыре «зверька»:

  • Algorithm W (775 строк) — классический Hindley–Milner, полиморфный λ-исчисление.
  • System F (1090 строк) — второе λ-исчисление, параметрический полиморфизм, Mini-OCaml.
  • System F-ω (3196 строк) — высшие рода, паттерн-матчинг, дататипы, Haskell-lite.
  • Calculus of Constructions (6000 строк) — иерархия универсумов, индуктивные типы, крошечный Lean.

MIT-лицензия, хобби-проект. Нашли опечатку — присылайте pull-request.

by todsacerdoti • 15 августа 2025 г. в 19:11 • 161 points

ОригиналHN

#rust#type-systems#haskell#ocaml#lean#functional-programming#lambda-calculus#polymorphism

Комментарии (24)

  • Пользователи хвалят Elaboration Zoo как полезный ресурс для изучения нормализации по вычислению и вывода неявных переменных.
  • Просят аналогичный «зоопарк» для линейных типов и предлагают добавить быстрый вариант Hindley–Milner из OCaml.
  • Автору советуют включить тёмную тему для блоков кода и рассмотреть простой однонаправленный type-checker в духе Featherweight Java.
  • Уточняют, что присутствие индуктивных типов делает реализацию ближе к CIC, но Lean всё же сильнее за счёт аксиомы выбора.
  • Картинки с животными вызывают путаницу; большинство считают их просто AI-орнаментом без смысловой нагрузки.