Skip to content

Instantly share code, notes, and snippets.

@akuklev
akuklev / BetterYAML.md
Last active June 20, 2023 18:26
Как радикально улучшить YAML

Одна из основных фич и одновременно основная проблема YAML'а сводится к тому, что текст можно писать без кавычек, но только до тех пор пока чисто случайно не оказывается, что его можно интерпретировать как что-то другое. Например, без пробелов пишут двубуквенные коды всех стран, кроме Норвегии, потому что NO интерпретируется как булево значение false.

Чтобы радикально улучшить YAML, нужно всё же чётко маркировать текст, но наряду с тяжеловесными ковычками предоставить метод ненавязчивой маркировки. Для этого я предлагаю использовать обратную кавычку. Обратная кавычка перед словом (без отбития пробелом справа) — слово следует читать verbatim. Обратная кавычка с пробелом справа, и прижатая к предыдущему символу слева — verbatim до конца строки. Обратная ковычка с пробелом справа, слева которой пробел или начало строки — многострочный блок текста, заканчивающийся при падении индентации до уровня кавычки.

name:` Mary Smith
age: 28
summary:
` Mary Smith was born
  in Norway in late
@akuklev
akuklev / triangle.md
Created June 20, 2023 17:00
Поля и методы

В большинстве объектно-ориентированных языков программирования точка используется и для полей (user.name) и для методов (stream.write(s)), что приводит к двусмысленности, поскольку в поле m.sinвообще-то может храниться функция, и её вообще-то может хотеться применить к какому-то аргументу m.sin(x), что выглядит точно как вызов метода, но устроено совершенно по-другому: метод получает в распоряжение объект, относительно которого вызывается, функция вообще говоря нет.

Синтаксически я считаю идеальным использовать для методов треугольничек вправо вместо точки.

То есть point.x, или s.length, или list.size, но file ▸close и

files ▸filter { it.size > 0 } ▸map { it.name }

И особенно

@akuklev
akuklev / objects.md
Last active July 4, 2023 00:24
Деконструкция Объектно-Ориентированного Программирования

Stratified Kotlin — Deconstruction of Concurrent Object-Oriented Programming

§ Объекты и Данные

Когда-то Tony Hoare назвал null pointers “ошибкой на миллиард долларов”. В истории языков программирования есть кое-что обходящееся, вероятно, ещё дороже: игнорирование фундаментальной разницы между данными и объектами.

С рождения мы воспринимаем окружающий мир и процессы в нём через картины и ощущения, и этого достаточно для мышления при помощи эвристик аналогий. Но чтобы сделать возможными чёткие инструкции и строгие рассуждения, необходимо провести условные границы и разложить мир на идеализированные единицы моделирования — объекты. В зависимости от предметной области это могут быть, например, яблоки и груши, ордера и квитанции, поезда и станции или электроны и фотоны. Мы учимся этому, когда учимся говорить и думать слова

Peter, as far as I remember, you were interested in the “Field with one element”, so I suppose, you've read 2015 paper “Absolute algebra and Segal’s Γ-rings” by A. Connes and C. Consani. I want to discuss the connection between Linear Type Theories and generalization of semirings Connes et al. developed in that paper to accomodate the 𝔽₁-like objects.


In ordinary algebraic theories, you have the formation rules like these:

                   a : G
———————unit      —————————inv
 e : G a⁻¹ : G
@akuklev
akuklev / gist:d7b16d04d05a7483636754e2705d09e8
Last active March 31, 2017 01:11
Протоколы ночных Уваринских семинаров по зависимой теории типов

§ Введение в зависимо-типизированные алгебры

§§ Обыкновенные и матричные алгебры

Алгебры описываются в терминах грамматики и отношений взаимозаменяемости. В обыкновенных алгебрах (таких как моноид, группа, решётка, кольцо, поле) мы выделяем ровно один тип грамматических сущностей, но вообще говоря типов может быть много (напр. Существительное, Прилагательное, Глагол).

Чтобы ознакомиться с обозначениями, рассмотрим к примеру определение моноида:

                       a : M    b : M

–———– ——————— ————————————————