TGViewer
Лаборатория Математики и Программирования Сергея Бобровского Лаборатория Математики и Программирования Сергея Бобровского @lambda_brain · 1.41K subscribers
Post #1712 964
...Более того, понимание теории типов позволяет нам заявить, что не только F# и Java -- совершенно разные языки, что в принципе достаточно понятно со стороны (F# -- это всё же функциональный язык с алгебраическими типами), но и
C# и Java сегодня -- совершенно разные языки.
Мейнстрим тут способен мыслить лишь на школьном уровне "статическая типизация", "ООП-парадигма" ...

Java строго номинативен: все пользовательские типы (классы) сравниваются по ссылкам, даже если поля идентичны, а проверка структурного равенства (когда эквивалентность типов определяется их поведением, а не именем: формальная версия утиной типизации) требует явного переопределения equals().
В C# же не только есть сишные структуры (для которых структурное равенство работает по определению:), но и с 9й версии - records (автоматическая реализация структурного равенства).

Делегаты C# (Func<T>, Action) — это структурно-совместимые типы функций. Два делегата с одинаковой сигнатурой считаются совместимыми, даже если объявлены по-разному.

В Java же наоборот: функциональные интерфейсы (Runnable, Consumer<T>) номинативно зависимы: даже если сигнатуры методов совпадают, интерфейсы несовместимы без явного наследования.

С точки зрения HoTT это критично: в C# функции могут быть "путями" между типами, без явных преобразований, а в Java требуется явное приведение через адаптеры (например, лямбды - к разным интерфейсам). А если же мы хотим в C# неявные преобразования, есть классный implicit operator.

В C# информация о типах при использовании генериков сохраняется в рантайме, что позволяет проверять структурные преобразования динамически. В Java же генерики реализованы через type erasure (на что я уже напоролся в Python при реализации HoTT :), что делает их номинативными и невидимыми во время выполнения.

Гомотопическая теория ближе к идее "типы как объекты", когда преобразования типов можно анализировать на втором логическом уровне.

Короче говоря, в терминах HoTT,
Java навязывает жёсткую иерархию именованных типов,
а C# позволяет работать с типами как пространствами, где изоморфизмы (эквивалентности) могут быть частью самой системы типов!
  • 👍 42
  • ⚡ 8
  • ❤‍🔥 8
  • 🤓 7
  • ❤ 1
More from @lambda_brain
  1. Oct 5, 2026Мнения экспертов по индустрии разработки игр в целом можете при желании найти сами на ютуб…
  2. Oct 5, 2026Просили пояснить за (M)PF геймдев ↑ Сложно сегодня придумать более сложное бизнес-направле…
  3. Oct 5, 2026. Облако драгоценностей за неделю. скоро зима (с) Приватный клуб. В жизни любого проекта н…
  4. Oct 1, 2026Ребята спрашивают, ну ок, моё скромное мнение. у вас где-нибудь можно прочитать ваше мнени…
  5. Sep 30, 2026Ладно, вот вам база, почему так трудно переучиваться с императивного/объектного стиля коди…
  6. Sep 30, 2026Ну, с Днём Рунета! Многие годы Рунет был эталонным примером свободы, а сегодня превратился…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →