Читаю книгу "Object-oriented programming in Oberon-2" и там есть описание простой оконной системы, которая называется Oberon0 (не путать с простым компилятором Oberon-0, из книги "Compiler construction"). Так вот Frame-ы и Viewer-ы описываются следующим образом:
## Код:
```
TYPE
  Frame* = POINTER TO FrameDesc;
  FrameDesc* = RECORD (OS.ObjectDesc)
    x*, y*: INTEGER; (*left bottom in pixels relative to left bot. of screen*)
    w*, h*: INTEGER (*width, height in pixels*)
  END;
  Viewer* = POINTER TO ViewerDesc;
  ViewerDesc* = RECORD (FrameDesc)
    menu-, cont-: Frame; (*menu frame, contents frame*)
    next-: Viewer;
  END;
```

То есть Viewer-ы организованы в список и у каждого Viewer-а естьуказательна следующий Viewer или на NIL. (Думаю, что и в BlackBox организация данных примерно такая же.)
А что, если бы модуль мог содержать не Viewer, а ViewerDesc и допустим можно было бы их так же организовывать в списки при необходимости. Тогда не нужно было бы вызывать NEW для создания объекта, а объекты создавались бы при загрузке модуля сразу в глобальной памяти. То есть был бы примерно такой код:
## Код:
```
MODULE MainForm;
  IMPORT ...;

  VAR
    mainForm: ViewerDescr;
    someControl: ViewerControlDescr;
    ...

END MainForm.
```

Думаю, что в данном случае, были бы следующие преимущества:
1) Загружалось бы все быстрее, за счет того, что не нужно выделять память при помощи NEW.
2) Снижалась бы нагрузка на GC, и в принципе можно было бы создавать графические программы, которые вообще не обращаются к динамической памяти, а работают только с глобальной памятью и стеком программы.

Какие у данного метода могут быть недостатки?
Может быть данный метод уже где-то был реализован?