amarao (amarao_san) wrote,
amarao
amarao_san

Categories:

abstraction build-up

Есть два подхода к построению абстракции высшего порядка: борьба с нижележащими слоями и логическое обобщение.

Логическое обобщение - это то, что любят делать математики. Взяли операции над матрицами, операциями по модулю и комплексными числами, посмотрели, что между ними общего, ррраз, и у нас группы, кольца, поля и т.д. Это такой святой грааль любой компьютерной технологии, когда из объектов нижележащего характера берётся всё общее и из них делается объект вышестоящего характера. Так задуман, например, tcp, который из любого ненадёжного пакетного протокола нижележащего уровня может изготовить что-то, что похоже на конфетку "ГОСТ-1921-ТИПА-СОЙДЁТ-ЗА-КОНФЕТКУ".

Но на практике, часто, вместо абстракции как обобщения, мы получаем "абстракцию, как подавление". Для реализации идеи "foo" (которая существует до обнаружения реализации) ищутся реализации, которые хотя бы отдалённо напоминают нужное. Дальше реализуется слой, который с помощью хаков, баша и какой-то матери (то самое "говно, палки и  intellectual property") слепливается что-то, похожее по свойствам на то, что нужно нашей новой абстракции.

Которая, на самом деле не абстракция, а чужеродное явление, едва прилепившееся сбоку (в онотологическом смысле). Одиночное изнасилование онтологическое дерево может выдержать. Проблемы начинаются тогда, когда получившееся снова становится жертвой "приделать под нужду", т.е. у нас получается "прилепившееся сбоку от прилепившегося сбоку". Чем больше таких слоёв незвучных абстракций образуется, тем больше нижележащие слои "сопротивляются", по факту обнажая неожиданные свойства, протекающие абстракции, неожиданные (по модели) ограничения и, чаще всего, кошмарный оверхед в производительности.

Можно было бы сказать, что "делайте хорошие абстракции и не лепите шути что из шути чего", но бывает так, что получающаяся абстракция (как обобщение свойств) никому не нужна, а нужно совсем другое. Желательно в разумное время, иначе ничего не заработает.
Tags: философия программирования
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments