ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/libFoundation.README

This is the README for libFoundation.0.7.tgz [Download] [Browse] [Up]

libFoundation Library README
============================


History
=======

    This library is derived from an old library we wrote and used for
    developing a commercial application during 1995.

    That time we needed a small library that has some general containers and
    strong support for distributed objects. We needed to write code that runs
    on different machines, not only on NeXT.

    Also we needed to write programs that communicates via general Unix IPC
    channels. We wanted to use this kind of things because often we had
    parent-child processes that discuss over socketpair channels.

    So we designed a library that had support for distributed objects on
    different channels of communication like Internet or Unix domain stream
    sockets or socketpairs.

    We also experimented some ideas, such as calling the exception handlers as
    functions and returning from them, choosing the best communication channel
    when a connection is established and some other interesting ideas.


The current status
==================

    The library is not currently finished. Now it lacks Unicode strings and
    Distributed Objects. We do have a lot of classes specified by the OpenStep
    specification.

    We wanted some things to work very well so we insisted on them. For example
    the NSInvocation and NSMethodSignature classes so now you can work with
    them at the full capacity. You can use the forwardInvocation: method to
    implement forwarding to another objects. This method works with all the
    Objective-C types, even with structures less than 8 bytes on
    m68k-next-nextstep3 and i386-next-nextstep3 either with NeXT or GNU
    runtime. (At least in NeXTStep 3.3, returning of structures less than 8
    bytes was a problem.) The NSMethodSignature class allows you to construct
    method signatures giving only the types of the methods. It will determine
    the correct position of arguments in the arguments frame. This feature will
    allow the Distributed Objects stuff to work with the NeXT runtime.

    For the current status of the library you can take a look to the TODO file.
    This details the things we still have to implement and the current status
    of existing classes.


The design of the library
=========================

    We have followed two important points in designing this library. The first
    is runtime independence. The second is to write the code without using
    extensions to the OpenStep spec, or if we are using such extensions,
    we want to provide a separate library that allows porting of the code
    written for this library to another implementation of Foundation.

    We want to give the people a library that compiles and runs in the both
    worlds of Objective-C: NeXT and GNU. This will allow one to write programs
    that mix together the code that exist for NeXT and the code that runs only
    on the GNU runtime. Our library compiles with both runtimes using
    different compilers. If all the other GNUstep work would be done to allow
    easy porting of programs, then one can move easily from NeXT's OpenStep or
    Sun's OpenStep to GNUstep.

    The library includes a header file that allows you to write the programs
    portable across runtimes. You write the programs using only the GNU API
    without some functions and your program runs without modification on
    both runtimes.

    The actual extensions are the exception handling mechanism and the garbage
    collector. The exception handling mechanism offers a better approach to
    exception handling than that found in the OpenStep specification. It
    provides a better localization of code in handlers and a more intuitive
    syntax. Because the exception handler is called as a function you can see
    in debugger where the exception was generated from.

    The garbage collector works in conjunction with the reference
    counting mechanism and releases you from thinking on how to solve the
    cycles in your program, thus saving time and code to write and maintain.

    For all these extensions we provide a separate library that compiles with
    other implementations of Foundation.


Ports
=====
    This package was compiled and tested on these machines:

    i386-next-nextstep3

	The package was compiled and tested successfully using the 2.6.3 and
	2.7.2 versions of compiler and with both NeXT and GNU runtimes.
	Returning of aggregates of all sizes works well with both runtimes.

    m68k-next-nextstep3

	The package was compiled and tested successfully using the 2.6.3 and
	2.7.2 versions of compiler and with both NeXT and GNU runtimes.
	Returning of aggregates of all sizes works well with both runtimes.

    i386-next-nextstep4

	The package was compiled and tested successfully using the 2.7.2.1
	version of compiler with GNU runtime. The port of GNU compiler on this
	machine does not work with nested functions so parts of exception
	handling facility don't work.

    i586-unknown-linux

	The package was compiled on linux with ELF using the 2.7.2.1 compiler.
	All the tests ran successfully.


    Some preliminary work has been done on Sparc Solaris and HPUX 9, but we
    no longer have access to such machines. If you need support for them please
    contact us.


    Happy hacking,

    Ovidiu Predescu <ovidiu@bx.logicnet.ro>
    Mircea Oancea <mircea@pathcom.com>

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.