TGViewer
extern volatile world extern volatile world @extern_world · 554 subscribers
Post #165 589
Есть в программировании техника, называемая условной компиляцией. Это означает, что какие-то куски кода включаются или не включаются в результирующую программу в зависимости от конфигурации. Особенно распространена эта практика в языках C и C++.

Одно из применений условной компиляции это обход косяков операционной системы, на которой эта программа будет работать.

Но есть и другое применение -- опциональный функционал и опциональные зависимости. Это есть зло! Распростанённое, от того лишь более ужасное зло.

Дело в том, что на практике пользователь не имеет возможности выбирать эти опциональные зависимости и возможности. Если в программе есть опциональная зависимость от libshit, будьте уверены, она будет включена в Debian и Fedora. В Alpine она скорее всего будет выключена, но реальный выбор будет лишь у пользователей Gentoo и, быть может, Nix.

Мораль, разумеется не в том, что Gentoo лучше всех, а в том, что архитектуру приложения нужно делать с умом.

Опциональные возможности должны реализовываться вызовом дочерних процессов или, на худой конец, системой плагинов (dlopen), но никак не условной компиляцией, которая оборачивается монстрами Франкенштейна.

Поучительный пример. Есть просмотрщик документов zathura, поддержка формата DeJaVu в котором реализована в виде плагина, а есть видеопроигрыватель vlc, в котором 150 (!) флагов условной компиляции, т.е количество возможных конфигураций превосходит количество всех, когда либо живущих людей на Земле.
More from @extern_world
  1. Dec 28, 2023https://en.wikipedia.org/wiki/Cyber_Resilience_Act Хотели как лучше, получилось как всегда…
  2. Dec 8, 2023Они пытаются переизобрести списки рассылки и впихнуть git-send-email в этот дурной Discour…
  3. Oct 26, 2023You should regard anything from 2001 or earlier as having been written by a different pers…
  4. Oct 21, 2023У человечества новая игрушка -- machine learning как идея и ChatGPT в частности. И в моей…
  5. Oct 5, 2023Welcome to my world. # select count(*) from information_schema.columns group by table_name…
  6. Sep 14, 2023Перед вами гений инженерной мысли, без иронии. Переходник между всеми мыслимыми форматами…
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 →