vak: (Default)
[personal profile] vak
Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с tagged-типами языка Ада.

1) Описание новых структур как дополнение старых:

   struct foo : bar {
       ...
   };


Поля новой структуры дописываются в хвост к полям старой структуры. Разрешается неявное преобразование указателя на расширенную структуру к указателю на базовую.

2) Описание структур с набором интерфейсных функций:

   struct stream {
       ...
   interface:
      void putch (char c);
      int getch (void);
      int peekch ();
      void flush ();
      int eof ();
   };


В структуре создается скрытое первое поле, указывающее на таблицу указателей на функции:

   struct stream {
      struct {
         void (*putch) ();
         int (*getch) ();
         int (*peekch) ();
         void (*flush) ();
         int (*eof) ();
      } *interface;
      ...
   };


3) При определении интерфейсной функции указывается имя соответствующей структуры. Добавляется скрытый аргумент this:

   void putch (char c) : interface struct stream
   { ... }


превращается в:

   void putch (struct stream *this, char c)
   { ... }


4) Вызов интерфейсной функции:

   stream->putch ('x');

транслируется так:

   stream->interface->putch (stream, 'x');

Дело за малым - нужен энтузиаст, готовый хакнуть GCC. :-)
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org