GUF is NOT currently usable in any large-scale software project! Many people have e-mailed me asking how to do things with GUF that can't be done yet. I am sorry if this page has misled people, but the fact is that GUF is nowhere near complete, and is just not capable of supporting any kind of useful application at this time. This will, of course, change in the future. :)

Regardless, here is some of what GUF has already:

  • Reference counting smart pointers, which automatically delete an object once there are no longer any pointers pointing at it. These use atomic operations for counting, so they are fully thread-safe and plenty fast.
  • Event handling framework, in which events are sent to their owners when fired. Everything a GUF program does is in response to an event; the program itself runs completely within the event loop. Still, it is possible to integrate the GUF event loop with an external framework if necessary.
  • Support for multithreading, although it is rarely necessary and generally discouraged.
  • Light-weight XML parser which uses object-oriented context-free parsing (an idea which, as far as I know, I invented :) ).
  • Build utility which completely replaces make. Using GufBuild, you can easily declare packages and modules to be built in a language similar to C++. Best of all, though, it handles platform-specific issues (like building shared libraries) for you, so you can keep your build files portable.
  • Parts of GUF have already been ported to Win32, Linux, and Mac OSX. These three core platforms are guarenteed to be supported in all releases of GUF in the near future, as I use all three platforms personally. Other platforms will be added if volunteers contribute ports. I hope to eventually have GUF running on every platform that has protected memory, preemptive multitasking, and GCC. :)

Future features

Here are some things which we plan to implement in the future. There is way too much for me to list everything here, but these are some key features.

  • Asynchronous I/O framework, including file, console, and network I/O.
  • Plugin system for searching and loading libraries dynamically.
  • Interfaces for many common types of functionality, like sound and image encoders and decoders, compressed archive formats, etc.
  • GUF standard plugins supporting many common file formats. These will be separate modules, not part of the GUF core library, but available to any program upon request. Support for formats like MP3, OGG, JPEG, PNG, ZIP, TAR, GZ, and others should be expected. (Code from other open source libraries will be used to support these, of course.)
  • A GUI library -- I don't expect we'll get into this anytime soon, however. GUF eventually will need its own GUI library which will be integrated with its event framework. However, such a library will be much too large a project for us until GUF gains some popularity.
  • Libraries to support more obscure platform-specific operations. These libraries will provide those features in a cross-platform way. For example, a library for manipulating CD audio might be nice. These are a fairly low priority, however, and again will not be tackled at all unless GUF becomes popular enough that we have volunteers to spare. :)