Стандартизация второго уровня. Связь с миром

Первый уровень стандартизации – это уровень алгоритмов, для которых необходимыми ресурсами являются только процессор и оперативная память (стек), то есть то, без чего компьютер не существует. Уже переход к структурам данных требует управления кучей, а значит внешней (по отношению к коду стандартизируемой компоненты) программной поддержки. Это принципиальный переход на следующий уровень стандартизации.

Обычно различия между уровнями игнорируются, а это приводит к отсутствию структуры (устройства), а, следовательно, к хаосу, в котором живет современное программирование. Даже если процент «условно независимых» от окружающего мира стандартных компонент мал, этот уровень необходимо выделить, так как он принципиально отличается от всех остальных. Я пишу «условно независимых», так как связь с внешним миром всегда есть, например, процессор потребляет электричество…

Как только мы делим компоненты на «независимые» и «зависимые», становится явной задача выстраивания связи «зависимых» компонент с внешним миром, будь это управление оперативной памятью (включая или нет сборку мусора), доступ к внешним устройствам: графика, диски, сеть, IoT и т.д.

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

Как ни странно, в нашем мире часто происходит наоборот: программа должна приспосабливаться к тому, что предоставляет ей нижний уровень – ОС, библиотеки, драйверы.

Если еще учесть, что на разных платформах нижний уровень различается, мы приходим к очевидной мысли: связь программы (компонент программы) с внешним миром должна осуществляется через некий переходник (переходный слой).

Как понятно, ничего нового под Луной я не предлагаю. Переходники используются с «незапамятных» времен, достаточно вспомнить такой «древний» переходник, как POSIX. Другое дело, что часто «штуки» типа POSIX не воспринимались, как переходники, хотя и являлись ими.

Для меня является принципиальным выделение переходника, как некой обязательной программной сущности, обязательной составляющей любой мульти-платформенной программы. А другие программы нет смысла рассматривать.

Еще примеры переходников:

  • Win32 – переходник ограниченного применения с несколькими реализациями, включая Wine
  • Pepper API – кросс-платформенный, открытый API для Google Native Client modules (NaCl)
  • S3E – кросс-платформенный API для Marmalade

У меня нет задачи перечислить все переходники, скорее я хочу выделить несколько примеров, чтобы, оттолкнувшись от них, подумать об устройстве «идеального» переходника.

Как обычно, я как прикладник, опираюсь на наши экспериментальные разработки, на переходник, сделанный в рамках проекта Вир-1, и на систему переходников, которая сейчас разрабатывается в рамках проектов «Протоплазма» и Вир-2.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *