COS - C Object System

Piotr Matuszkiewicz znalazł ostatnio link do dokumentu opisującego bibliotekę COS. Projekt C Object System aktualnie rozwijany jest na SourceForge dzięki Laurentowi Deniau, pracownikowi CERN. Cytując wypowiedź Pawła Laska na kanale #lisp, "this is, IMHO, awesome case of CLOS being translated to C". Opis dokumentu (a zarazem biblioteki) głosi:
The C Object System (Cos) is a small C library which implements high-level concepts available in Clos, Objc and other object-oriented programming languages: uniform object model (class, meta-class and property-metaclass), generic functions, multi-methods, delegation, properties, exceptions, contracts and closures.
Oparta o Common Lisp Object System architektura COS'a pozwala nam więc używać technik obiektowych daleko wykraczających poza te zaimplementowane w C++ czy Javie. Poniżej zamieszczam kodu oparty o jeden z przykładów w bibliotece, deklarujący klasę string z metodami do jej tworzenia i usuwania. Widać wyraźnie wpływy CLOS'u.
defclass(File, Stream)
  FILE *file;
endclass

/* ... */

makclass(String);

defmethod(OBJ, ginitWithStr, String, (STR)str)
  useclass(ExBadAlloc);

  self->str = strdup(str);
  if (!self->str)
    THROW(ExBadAlloc);
  
  retmethod(_1);
endmethod

defmethod(OBJ, gdeinit, String)
  free(self->str);
  retmethod(_1);
endmethod