Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
93 lines (70 sloc) 3.49 KB
.meta {
.title{Jivai}
.subtitle{Object-oriented framework}
.author{Tim Nieradzik}
}
.chapter[Introduction] {
Jivai aims to be a modern libc using recent programming techniques. Hence, it does not implement the POSIX specification as it follows a completely different approach.
Although Jivai is written in C, some design decisions had to be made in order to achieve a certain object-orientation as well as consistency.
Another strength of Jivai is in its performance: Many modules can be fine-tuned to gain speed improvements or to act differently in production environments. The fact that Jivai is Linux-only makes it possible to prevent slow workarounds and unnecessary compatibility code. Furthermore, some modules were optimized for Linux unique capabilities, e.g. leading to a reduction of system calls.
Jivai facilitates debugging: There is an advanced exception infrastructure which is being used throughout most modules. Critical errors don't get ignored any more in case you forgot to check some return values. Moreover, it is possible to obtain a call trace whenever an exception occurs.
There are straightforward implementations of data structures like linked lists, strings and arrays. Adding elements will automatically allocate more memory if necessary. You no longer need to scatter routines for memory allocation over your code. However, Jivai still offers the choice to control the memory allocation yourself. This might come in handy if the implemented techniques are too generic for your purposes.
As Jivai uses a special C variant, Clang is the preferred compiler. In the course of producing object-oriented code, the code also makes use of less common features such as closures which are not supported natively by any other compiler.
Unfortunately, currently Jivai still requires a POSIX-compatible libc. Luckily, it only requires a minimal subset, making it possible to use lightweight libc's like the diet libc.
Jivai has been successfully used for the following areas so far:
.list {
.item{Network programming}
.item{Terminal applications}
.item{Event-driven programming}
}
Features include:
.list {
.item{Performance}
.item{Consistency}
.item{Exception support}
.item{Object-oriented code}
.item{Debugging facilities}
.item{Fine-tunable}
.item{Low footprint}
.item{Linux-only}
}
}
.chapter[Requirements] {
.list {
.item{Git}
.item{Clang}
.item{Linux 2.6}
}
}
.chapter[Installation] {
Make sure the mentioned requirements are met. Then checkout the code:
.command {
$ git clone git://github.com/tindzk/Jivai.git
}
Before you can try out the sample programs, you need to install .url[../Depend]{Depend} first.
}
.chapter[Getting Started] {
Now change into .path{Jivai/examples} and run the following command to compile the HTTP server:
.command {
$ ./Build.sh httpd
}
To start the server, just execute:
.command {
$ build/httpd.bin
}
Finally, point you browser to .url[http://localhost:8080/]{localhost:8080}.
}
.chapter[Appendix] {
.section[License] {
Licensed under the EUPL, Version 1.1 only (the .i{"Licence"}); You may not use this work except in compliance with the Licence.
}
.section[See also] {
.list {
.item{.url[http://github.com/tindzk/Jivai]{Browse source}}
.item{.url[http://github.com/tindzk/Jivai/issues]{Bug tracker}}
.item{.url[http://tindzk.github.com/]{Other projects}}
.item{.url[http://flattr.com/thing/69446/Jivai-Object-oriented-framework-for-C-development]{Donate}}
.item{.mail[tim.nieradzik@gmx.de]{Contact}}
}
}
}