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
- 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. :)
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
- Asynchronous I/O framework, including file, console, and network
- 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
- 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. :)