====== Предложения по расширению языка Си ====== Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с языком Ада. ===== 1) ===== Описание новых структур как дополнение старых: struct foo : extends 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'); ---- Copyright (C) 2005 Сергей Вакуленко