mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-27 10:40:50 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1473 72102866-910b-0410-8b05-ffd578937521
808 lines
33 KiB
Text
808 lines
33 KiB
Text
@c A FAQ for Gnustep
|
|
@c
|
|
@c This file uses the special commands @url{} and @email{}. They are
|
|
@c handled by the doc/Makefile.
|
|
|
|
@setfilename Gnustep-FAQ.info
|
|
@settitle Gnustep Frequently Asked Questions with Answers
|
|
|
|
@iftex
|
|
@global@let@email=@i
|
|
@global@let@url=@samp
|
|
@end iftex
|
|
|
|
@c @ifinfo
|
|
@c @definfoenclose email, <, >
|
|
@c @definfoenclose url `, '
|
|
@c @end ifinfo
|
|
|
|
@iftex
|
|
@chapter Gnustep Frequently Asked Questions with Answers
|
|
@end iftex
|
|
|
|
Maintained by Andrew McCallum @email{mccallum@@gnu.ai.mit.edu}, with
|
|
contributions by Pascal Forget @email{pascal@@wsc.com}, Scott Christley
|
|
@email{scottc@@net-community.com}, and Randy Chapman
|
|
@email{chapman@@u.washington.edu}.
|
|
|
|
Last updated 26 March 1996.
|
|
The most up-to-date version of this FAQ is
|
|
available at @url{ftp://ftp.cs.rochester.edu/pub/u/mccallum/gnustep-base}.
|
|
Please send corrections to @email{mccallum@@gnu.ai.mit.edu}.
|
|
|
|
The intended audience of this FAQ is future and present code developers
|
|
for Gnustep. This FAQ serves a purpose complementary to the Gnustep WWW
|
|
pages---since it is written and maintained directly by those writing
|
|
code for Gnustep, it emphasizes (although not exclusively): (1)
|
|
technical details and organization, (2) the functionality is coded and
|
|
working now. This FAQ is intended to provide a succinct document in
|
|
which to find Gnustep information without hype.
|
|
|
|
@section Gnustep General Information
|
|
|
|
@enumerate
|
|
|
|
|
|
@item @b{What is Gnustep?}
|
|
|
|
Gnustep is the Free Software Foundation's effort to implement NeXT
|
|
Software Inc.'s OpenStep Standard. The project is not finished, however
|
|
some components are useable now.
|
|
|
|
The Gnustep project consists of the following sub-projects:
|
|
|
|
@itemize @bullet
|
|
|
|
@item GNU Objective C Compiler and Objective C Runtime Library -
|
|
Although not actually a sub-project the Gnustep, GCC and the GNU
|
|
Objective C Runtime Library are integral to Gnustep, since they are used
|
|
to make every GNU Objective C program.
|
|
|
|
@item Gnustep Base Library - Code for non-graphical objects, such as
|
|
strings, collections, archiving support and distributed objects
|
|
messaging. (Including functionality similar to OpenStep's
|
|
@samp{FoundationKit}.)
|
|
|
|
@item Gnustep GUI Library - Code for graphical objects used in making a
|
|
Graphical User Interface (GUI). This includes buttons, sliders, text
|
|
fields, windows, menus, etc. (Including functionality similar to
|
|
OpenStep's @samp{AppKit}.)
|
|
|
|
@item Gnustep DisplayGhostScript Server - A server that draws PostScript
|
|
graphics to the screen, and receives events from the keyboard and
|
|
mouse. It is based on GhostScript.
|
|
|
|
@item Gnustep Interface Modeller Application - An application for
|
|
graphically assembling application interfaces.
|
|
|
|
@end itemize
|
|
|
|
More detailed information about each of these sub-projects can be found
|
|
in their own sections below.
|
|
|
|
There are several projects related to Gnustep that are not officially
|
|
part of the GNU project and Gnustep, but may become so in the future.
|
|
These include: the @samp{G3DKit} project, (contact Thomas Engle
|
|
@email{tsengel@@cip.informatik.uni-erlangen.de}); an application library
|
|
based on OpenGL, (contact Georg Tuparev
|
|
@email{Tuparev@@EMBL-Heidelberg.de}); and @samp{ProjectCenter}, a source
|
|
code management and development environment, (contact unknown). If you
|
|
know of others, please contact the FAQ maintainer.
|
|
|
|
The initial target platforms for Gnustep are Linux and other UN*X's.
|
|
There has been some OS/2 WARP work, but I have not seen any ongoing work
|
|
on this platform yet, (contact McCallum if you are interested).
|
|
|
|
|
|
@item @b{What is the OpenStep standard?}
|
|
|
|
OpenStep is an Application Programming Interface (API) for creating
|
|
applications using the Objective C language. It was published by NeXT
|
|
Computer Inc. in 1994.
|
|
|
|
OpenStep consists of three parts: the @samp{FoundationKit}, a library of
|
|
non-graphical objects; the @samp{AppKit}, a library of objects usful in
|
|
creating graphical applications; and @samp{DisplayPostscript}, an
|
|
interface for drawing to the screen using the PostScript graphics
|
|
language.
|
|
|
|
You can obtain a copy of the OpenStep standard in
|
|
|
|
@itemize @bullet
|
|
@item texinfo at @url{http://www.dartmouth.edu/~ajones/Projects}.
|
|
@item HTML at @url{http://www.nmr.embl-heidelberg.de/Gnustep/GNUOpenStep}.
|
|
@item PostScript and RTF at @url{ftp://ftp.next.com/pub/OpenStepSpec/}.
|
|
@end itemize
|
|
|
|
|
|
@item @b{Who is currently involved in writing Gnustep code?}
|
|
|
|
For the sake of being social and getting to know each other, here is a
|
|
list of the folks who are currently, actively contributing Gnustep code.
|
|
The list includes a brief descriptions of each person's background and
|
|
involvement in the Gnustep coding efforts.
|
|
|
|
@itemize @bullet
|
|
|
|
@item Adam Fedor @email{fedor@@mode.colorado.edu} continues his
|
|
excellent, long service as user, tester, and code contributor to both
|
|
the Base Library and the GUI Library.
|
|
|
|
@item Andrew McCallum @email{mccallum@@gnu.ai.mit.edu} was appointed chief
|
|
maintainer of the Gnustep project by Richard Stallman in January 1996.
|
|
He has been involved and hacking in the NeXT community since NeXTSTEP
|
|
version 0.8; he has been working on GNU Objective C and the Base Library
|
|
since 1993.
|
|
|
|
@item Pascal Forget @email{pascal@@wsc.com} is working on the GUI
|
|
Library in conjunction with Scott Christley. He has worked with Randy
|
|
Chapman's DisplayGhostScript and X Windows as a Gnustep GUI backend.
|
|
|
|
@item Randy Chapman @email{chapman@@u.washington.edu} has been working
|
|
on the Gnustep DisplayGhostScript Server, adding DPS extensions to
|
|
GhostScript, including pswrap work.
|
|
|
|
@item Scott Christley @email{scottc@@net-community.com} is in charge of
|
|
the InterfaceModeler project, which is currently in the design stages.
|
|
He is working on the GUI Library in conjunction with Pascal Forget. He
|
|
has already written much of the GUI Library frontend.
|
|
|
|
@end itemize
|
|
|
|
There are many others who have made significant contributions to
|
|
Gnustep, but who are not currently contributing code, (such as Kresten
|
|
Thorup @email{krab@@next.com} and Paul Kunz
|
|
@email{paul_kunz@@slac.stanford.edu}). For more information about
|
|
Gnustep history, see the Gnustep WWW pages.
|
|
|
|
There are also several others who have contributed individual classes to
|
|
Gnustep, but who are not actively contributing to general Gnustep work.
|
|
This list is not intended to be a complete list of Gnustep code
|
|
contributors; that information is available in each of the Gnustep code
|
|
packages.
|
|
|
|
There are also other code developers who are writing Objective C code
|
|
related to Gnustep, but for projects that are not officially part of the
|
|
GNU project and Gnustep. We hope that some of these projects will join
|
|
the GNU project and Gnustep in the future.
|
|
|
|
Please send corrections to the FAQ maintainer.
|
|
|
|
|
|
@item @b{Is there a WWW site for Gnustep? Are there mailing lists for Gnustep?}
|
|
|
|
There is a WWW site at @url{http://www.Gnustep.org}, (and its mirror
|
|
@url{http://www.NMR.EMBL-Heidelberg.DE/Gnustep}, that contains many
|
|
useful pointers. The technical information in this FAQ may be more up
|
|
to date than the WWW pages since this FAQ is maintained directly by the
|
|
people who are developing Gnustep code.
|
|
|
|
There are several mailing lists:
|
|
|
|
@itemize @bullet
|
|
|
|
@item @email{discussion@@Gnustep.org} is a mailing list for general
|
|
discussion of Gnustep developments. Announcements about Gnustep
|
|
progress are also made there. The list is maintained by Georg Tuparev
|
|
@email{Tuparev@@EMBL-Heidelberg.de}.
|
|
|
|
To join, send mail to @email{discussion-request@@Gnustep.org}.
|
|
|
|
@item @email{webmasters@@Gnustep.org} is a mailing list for discussion of
|
|
the Gnustep WWW site.
|
|
|
|
To join, send mail to @email{webmasters-request@@Gnustep.org}.
|
|
|
|
@item @email{g3dkit@@Gnustep.org} is a mailing list for discussion of a
|
|
library for drawing 3D graphics; it is based on OpenGL and RenderMan.
|
|
The Free Software Foundation is hoping that this work can become an
|
|
official part of the GNU project and the Gnustep project.
|
|
|
|
To join, send mail to @email{g3dkit@@Gnustep.org}.
|
|
|
|
@item There is also a private mailing list for the core active
|
|
developers of Gnustep. Those people who contribute large sections of
|
|
code and who are interested in making and planning further contributions
|
|
may be invited to join. We apologize in advance, but, for the sake of
|
|
efficient communication, the list is not open to people who are not
|
|
actively contributing significant coding work to the project; don't
|
|
bother asking to be added unless you have already been in contact with
|
|
Andrew McCallum about source code contributions. If you would like to
|
|
make code contributions, by all means, contact McCallum. This list is
|
|
maintained by McCallum @email{mccallum@@gnu.ai.mit.edu}.
|
|
|
|
@end itemize
|
|
|
|
|
|
@item @b{What is the current state of the project? When can I expect it to be completed?}
|
|
|
|
The Base Library is about 85 percent done. Significant useful work can
|
|
already be done using the library. The GUI library is about 25
|
|
percent done. It is going through a major transition at the moment
|
|
to coordinate work from multiple developers, DisplayPostscript, and
|
|
the non-OpenStep objcX library into a single package that will be made
|
|
available to the public. The DisplayPostscript and drawing support
|
|
is also in transition.
|
|
|
|
More detailed information about the state of each of the sub-projects
|
|
can be found below.
|
|
|
|
With free software, you should never, ever, believe promises about when
|
|
a project will be finished. ...However, that said: there are certain
|
|
Gnustep developers that are counting on having useful Base and GUI
|
|
libraries working by the end of Summer 1996.
|
|
|
|
@item @b{How can I help?}
|
|
|
|
If you have a specific piece of functionality that you would like to
|
|
contribute, or if you would like to ask for suggestions about what
|
|
coding work you can do to help, contact the Gnustep Chief Maintainer,
|
|
Andrew McCallum @email{mccallum@@gnu.ai.mit.edu}.
|
|
|
|
@end enumerate
|
|
@c Gnustep General
|
|
|
|
More detailed inforation about each of the Gnustep sub-projects can be
|
|
found below.
|
|
|
|
@section GNU Objective C Compiler and Objective C Runtime Library
|
|
|
|
@enumerate
|
|
|
|
|
|
@item @b{What is the Objective C Runtime Library?}
|
|
|
|
The Objective C Runtime Library provides C functions and data structures
|
|
required to execute an Objective C program. An introduction to the
|
|
Objective C Language is provided at
|
|
@url{http://www.next.com/Pubs/Documents/OPENSTEP/ObjectiveC/objctoc.htm}.
|
|
The Frequently Asked Questions list for
|
|
@url{news://comp.lang.objective-c} can be found at @url{??}.
|
|
|
|
The GNU Objective C Runtime Library offers everything NeXT's runtime
|
|
does, including Categories, Protocols, @samp{+poseAs:}, thread-safety,
|
|
class initialization on demand, delayed loading of classes, and
|
|
initialization of static instances (such as @@""-style string objects).
|
|
|
|
It also has several improvements over NeXT's implementation:
|
|
|
|
@itemize @bullet
|
|
|
|
@item NeXT's runtime requires an extra function call (objc_msgSend) for
|
|
each message that is sent; (the function looks up the receiving
|
|
instance's implementation of the method). GNU's implementation is
|
|
faster because it does not use an extra function call. Instead, it
|
|
inlines a short piece of code that makes two pointer hops into a method
|
|
dispatch table; because the code is inlined, it does not incur the
|
|
overhead of a function call.
|
|
|
|
@item When running in thread-safe mode, NeXT's runtime must aquire a
|
|
global mutual exclusion lock every time a message is sent; this is
|
|
extremely slow. GNU's runtime, amazingly, sends messages just as fast
|
|
in thread-safe mode as it does in single-thread mode---the code path
|
|
does not contain even a single extra instruction! The GNU runtime only
|
|
needs locks when certainly structures are written, not read; the
|
|
structures are written relatively infrequently: only at class
|
|
initialization and when @samp{+poseAs:} is called.
|
|
|
|
@item GNU's runtime provides ``selector-types'' along with each
|
|
selector; NeXT's does not. A selector-type is a string that describes
|
|
the C variable types for the method's return and argument values. Among
|
|
other uses, selector-types is extrememly helpful for fast distributed
|
|
objects implementations, (see Gnustep Base Library Section, below).
|
|
|
|
@item Many of the GNU functions have different names than their
|
|
corresponding NeXT functions; the GNU names conform to the GNU coding
|
|
standards.
|
|
|
|
@item GNU's runtime library has a new class heirarchy manipulating
|
|
method called @samp{-transmuteClassTo:}. It can change the class of an
|
|
instance to a cousin class of the same instance-size.
|
|
|
|
@item NeXT's compiler, @samp{cc}, is based on an old version of
|
|
@samp{gcc}. GNU's compiler is, of course, the latest version of
|
|
@samp{gcc}, and therefore contains all the latest enhancements.
|
|
|
|
@end itemize
|
|
|
|
|
|
@item @b{What is its current state of development?}
|
|
|
|
GNU's Objective C Runtime library has been stable and useable since
|
|
1993. Enhancements continue to be made.
|
|
|
|
GCC contains the source for the GNU Objective C compiler and runtime
|
|
library. It can be obtained from @url{ftp://prep.ai.mit.edu/pub/gnu},
|
|
or any other mirror of the GNU archives. As far as I know, the GNU
|
|
Objective C Runtime runs on all, platforms on which GCC runs.
|
|
|
|
GCC version 2.7.2 does not contain the thread-safe features, but the
|
|
next version of GCC will. A patch for thread-safe features is provided
|
|
with the latest developer snaphots of the Gnustep Base Library. There
|
|
are currently thread-safe backends for DEC OSF/1, Solaris, IRIX, and
|
|
WindowsNT. Volunteers are solicited for writing additional back-ends,
|
|
especially one for Linux.
|
|
|
|
@end enumerate
|
|
@c GNU Compiler and Objective C Runtime Library
|
|
|
|
|
|
@section Gnustep Base Library
|
|
|
|
@enumerate
|
|
|
|
@item @b{What is the Gnustep Base Library?}
|
|
|
|
The Gnustep Base Library is a library of general-purpose, non-graphical
|
|
Objective C objects. For example, it includes classes for strings,
|
|
collections, byte streams, typed coders, invocations, notifications,
|
|
notification dispatchers, times, network ports, remote object messaging
|
|
support, event loops and random number generators.
|
|
|
|
It provides functionality that aims to implement the
|
|
@samp{FoundationKit} portion of the OpenStep standard. In many cases,
|
|
the @samp{NS*} classes are implemented as wrappers around more
|
|
featureful GNU classes.
|
|
|
|
There is more (although perhaps out-of-date) information available at
|
|
the Gnustep Base Library homepage at
|
|
@url{http://www.cs.rochester.edu/u/mccallum/gnustep-base}.
|
|
|
|
|
|
@item @b{What is its current state of development?}
|
|
|
|
It is about 85 percent of the way to having all the OpenStep classes.
|
|
Significant useful work can already be done using the library since the
|
|
missing 15 percent are the less-often-used classes, such as NSByteStore.
|
|
Over 60,000 lines of code have already been written.
|
|
|
|
The following OpenStep classes and class clusters are pretty much done
|
|
and usable: NSArchiver, NSArray, NSAssertionHandler, NSAutoreleasePool,
|
|
NSBitmapCharSet, NSBundle, NSCharacterSet, NSCoder, NSCountedSet,
|
|
NSData, NSDate, NSDictionary, NSEnumerator, NSException, NSInvocation,
|
|
NSLock, NSMethodSignature, NSNotification, NSNotificationCenter,
|
|
NSNumber, NSObject, NSProcessInfo, NSRunLoop, NSSet, NSString, NSThread,
|
|
NSTimeZone, NSTimer, NSValue.
|
|
|
|
Most of the C functions are also implemented, including NSHashTable and
|
|
NSMaptable.
|
|
|
|
A GNU implementation of Distributed Object works. However, the wrappers
|
|
for creating the NSConnection, NSDistantObject, NSProxy wrappers have
|
|
not yet been made.
|
|
|
|
The following classes are unstarted or unusable: NSBTreeBlock,
|
|
NSBTreeCursor, NSByteStore, NSByteStoreFile, NSCalendarDate,
|
|
NSDeserializer, NSScanner, NSSerializer, NSUserDefaults.
|
|
|
|
|
|
@item @b{In what ways is the Base Library different from OpenStep's FoundationKit?}
|
|
|
|
It contains several enhancements:
|
|
|
|
@enumerate
|
|
|
|
@item OpenStep has a single NSInvocation class, which is based on
|
|
sending a message to an object. The Gnustep Base Library has a
|
|
heirarchy of Invocation classes with various capabilities. Two of the
|
|
Invocation subclasses can cause C functions to be called, instead of
|
|
sending messages to objects; these subclasses are useful when one would
|
|
otherwise have to write a new class and method to implement some simple,
|
|
stateless functionality. Other subclasses of Invocation could hold
|
|
GUILE or TCL code to be run, or could record their invocation
|
|
information to a file.
|
|
|
|
All of them respond to a new method called @samp{-invokeWithObject:}
|
|
that is useful for enumerations.
|
|
|
|
@item I have been told that OpenStep's NSNotificationCenter is slow.
|
|
Gnustep's NotificationDispatcher class is based on interesting use of
|
|
linked lists and hash tables in such a way that it should be
|
|
comparatively very fast.
|
|
|
|
OpenStep notifications must be method selectors sent to objects.
|
|
Gnustep notifications can invoke an Invocation instead, thus taking
|
|
advantage of the flexbility and context-holding capability of Invocation
|
|
objects.
|
|
|
|
@item OpenStep takes a disconnected ``class forest'' approach to
|
|
collection classes. Gnustep has all the OpenStep collection classes,
|
|
however they are build from underlying GNU collection classes that are
|
|
organized as a deep class heirarchy. Because of the deep heirarchy,
|
|
there is a built-in uniformity of method names, and there are common
|
|
abstract superclasses in which to add new common functionality.
|
|
|
|
Unlike OpenStep, the Base Library also has additional collection classes
|
|
for heaps, stacks, queues, trees and linked lists. There is also a rich
|
|
variety of enumeration methods based on invocations.
|
|
|
|
@item OpenStep's archiving mechanism provides only one choice of backend
|
|
format. By backend format, I mean a format for writing C types, such as
|
|
ints, floats and C strings. The Gnustep archiving mechanism has a clear
|
|
separation between frontend and backend. Different backends are
|
|
provided. One backend writes in human-readable and human-editable ASCII
|
|
text, (including programmer-provided text name labels for each of the
|
|
items.) Another writes in a compact, stream machine-independent bits.
|
|
A third writes in an even more compact stream of machine-dependent bits;
|
|
this is useful for distributed objects connections on machines of the
|
|
same architecture.
|
|
|
|
I'm not sure how OpenStep's archiving system implements forward
|
|
references, (that is, calls to @samp{encodeConditionalObject:} for which
|
|
the object argument has not yet been encoded, but will be encoded
|
|
later.) According to its restricted interface, NeXT's implementation
|
|
must either (1) make two passes through all the -encodeWithCoder:
|
|
methods of the objects to be encoded, or (2) not handle forward
|
|
references with @samp{-encodeConditionalObject:}, only backward
|
|
references. GNU's archiving system, on the other hand, implements
|
|
forward references efficiently, without making two passes. It does this
|
|
by using an object decoding method (@samp{-decodeObjectAt:..}) that
|
|
back-patches @code{id}-pointers when the conditionally encoded objects
|
|
are found in the coded stream.
|
|
|
|
@item OpenStep's distributed objects mechanism requires four network
|
|
``hops'' when sending and responding to each new method---one to send
|
|
the request, one for the server to request the method type from the
|
|
client, one for the client to respond with the method type, and one to
|
|
respond with the return value of the method call. Gnustep distributed
|
|
objects takes advantage of the superior GNU Objective C runtime, which
|
|
includes the method type locally with the selector. Since the method
|
|
type can already be found on the server, there is no need to ask the
|
|
client for the type, and GNU distributed objects takes two less network
|
|
hops.
|
|
|
|
@item NeXT's Objective C runtime becomes very slow when thread-safety is
|
|
turned on since the runtime must acquire a global mutual-exclusion lock
|
|
each time an Objective C message is sent. Gnustep takes advantage of
|
|
the superior GNU Objective C runtime, which is requires zero extra time
|
|
to send a message when thread safe---not even one instruction more is
|
|
required for a thread-safe message send. Mutual exclusion locks are
|
|
only necessary in the relatively infrequent times in which classes are
|
|
initialized or @samp{+poseAs:} is called. Galen Hunt implemented the
|
|
patches to make the runtime thread-safe.
|
|
|
|
@end enumerate
|
|
|
|
|
|
@item @b{What are the features of GNU Distributed Objects?}
|
|
|
|
GNU Distributed Objects has many of the features of other distributed
|
|
objects implementations, but, since it is free software, it can be
|
|
ported to platforms for which other distributed objects implementations
|
|
are not available.
|
|
|
|
If you are interested in having it ported to a new platform, or if you
|
|
have any questions about it, please contact Andrew McCallum,
|
|
@email{mccallum@@gnu.ai.mit.edu}.
|
|
|
|
The distributed object support classes are @b{Connection}, @b{Proxy},
|
|
@b{ConnectedCoder}, @b{Port}, @b{TcpPort}, @b{UdpPort}, and
|
|
@b{MachPort}. Of the various Port backend's, currently only the the
|
|
TcpPort is in working order.
|
|
|
|
|
|
[NOTE: The GNU distributed object facilities have the same ease-of-use
|
|
as NeXT's; be warned, however, that they are not compatible with each
|
|
other. They have different class heirarchies, different instance
|
|
variables, different method names, different implementation strategies
|
|
and different network message formats. You cannot communicate with a
|
|
NeXT NXConnection using a GNU Connection.
|
|
|
|
Here are some differences between GNU distributed objects and NeXT's
|
|
distributed objects: NXConnection creates NXProxy objects for local
|
|
objects as well as remote objects; GNU Connection doesn't need and
|
|
doesn't create proxies for local objects. NXProxy asks it's remote
|
|
target for the method encoding types and caches the results; GNU Proxy
|
|
gets the types directly from the local GNU "typed selector" mechanism
|
|
and has no need for querying the remote target or caching encoding
|
|
types. The NXProxy for the remote root object always has name 0 and,
|
|
once set, you cannot change the root object of a NXConnection; the GNU
|
|
Proxy for the remote root object has a target address value just like
|
|
all other Proxy's, and you can change the root object as many times as
|
|
you like. See the "lacking-capabilities" list below for a partial
|
|
list of things that NXConnection can do that GNU Connection cannot.]
|
|
|
|
|
|
Here is a partial list of what the current distributed objects system
|
|
can do:
|
|
|
|
@itemize @bullet
|
|
|
|
@item It can pass and return all simple C types, including char*, float
|
|
and double, both by value and by reference.
|
|
|
|
@item It can pass structures by value and by reference, return
|
|
structures by reference. The structures can contain arrays.
|
|
|
|
@item It obeys all the type qualifiers: oneway, in, out, inout, const.
|
|
|
|
@item It can pass and return objects, either bycopy or with proxies. An
|
|
object encoded multiple times in a single message is properly decoded on
|
|
the other side.
|
|
|
|
@item Proxies to remote objects are automatically created as they are
|
|
returned. Proxies passed back where they came from are decoded as the
|
|
correct local object.
|
|
|
|
@item It can wait for an incoming message and timeout after a specified
|
|
period.
|
|
|
|
@item A server can handle multiple clients.
|
|
|
|
@item The server will ask its delegate before making new connections.
|
|
|
|
@item The server can make call-back requests of the client, and keep it
|
|
all straight even when the server has multiple clients.
|
|
|
|
@item A client will automatically form a connection to another client if
|
|
an object from the other client is vended to it. (i.e. Always make a
|
|
direct connection rather than forwarding messages twice, once into the
|
|
server, from there out to the other client.)
|
|
|
|
@item Servers and clients can detect port deaths (due to remote
|
|
application crash, for example) and close down gracefully, announcing
|
|
the closed connection to other objects who have requested notifications.
|
|
|
|
@item Exceptions that occur in the server (during the course of
|
|
servicing a request) are sent back to the client, and the exception is
|
|
then properly raised in the client's process.
|
|
|
|
@item Servers and clients can be on different machines of different
|
|
architectures; byte-order and all other architecture-dependent nits are
|
|
taken care of for you. You can have SPARC, i386, m68k, and
|
|
MIPS---Linux, SunOS, Solaris, IRIX, AIX and HPUX machines all
|
|
distributed-object'ing away together in one big web of client-server
|
|
connections! The library can be ported to other architectures and
|
|
operating systems also. Please contact Andrew McCallum,
|
|
@email{mccallum@@gnu.ai.mit.edu}, if you are interested in having a new
|
|
port of GNU Distributed Objects.
|
|
|
|
@end itemize
|
|
|
|
Here is a partial list of what the current distributed objects system
|
|
does @b{not} yet do:
|
|
|
|
@itemize @bullet
|
|
|
|
@item Run multi-threaded.
|
|
|
|
@item Return structures by value.
|
|
|
|
@item Use Mach ports, pass Mach ports, pass Mach virtual memory.
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
@item @b{What is the general organization of the non-OpenStep, GNU classes?}
|
|
|
|
(This FAQ does not describe the OpenStep standard classes, because a
|
|
detailed description of those can be found in the OpenStep
|
|
documentation.)
|
|
|
|
Here are some of the public GNU classes. See the source header files
|
|
for more information.
|
|
|
|
@format
|
|
The collection class heirarchy:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Collection Root all the collection classes (abstract)
|
|
Set Unordered collection, no duplicates
|
|
Bag Unordered collection, may have duplicates
|
|
KeyedCollection Contents accessible by object key (abstract)
|
|
Dictionary Concrete implementation
|
|
MappedCollection One collection maps into another
|
|
IndexedCollection Contents accessible by integer (abstract)
|
|
BinaryTree Basic, sorted binary tree
|
|
RBTree Red-Black tree, sorted, more balanced
|
|
SplayTree Splay operation keeps tree balanced
|
|
OrderedCollection Can insert at arbitrary index (abstract)
|
|
Array Basic array
|
|
Queue First in, first out
|
|
Stack First in, last out
|
|
GapArray Efficient handle middle insert and delete
|
|
LinkedList More efficient than arrays for some ops
|
|
|
|
Strings (as in Smalltalk, part of the collection class heirarchy):
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
ConstantString Root of string classes, chars not changable
|
|
String contents can be changed
|
|
*CString Strings based on 1-byte characters
|
|
|
|
Writing/reading bytes, C-type variables, and connected groups of objects:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Stream Source and Destination for stream of bytes
|
|
StdioStream Stream based on FILE* (files, pipes, etc)
|
|
MemoryStream Stream based on memory buffer
|
|
CStream Write/Read C-type variables on stream
|
|
TextCStream use human-readable format
|
|
BinaryCStream use compact machine independent format
|
|
RawCStream use even more compact machine depedent format
|
|
Coder Write/Read groups of objects on CStream
|
|
Encoder Writing
|
|
Archiver for files
|
|
ConnectedEncoder for distributed objects
|
|
Decoder Reading
|
|
Unarchiver for files
|
|
ConnectedDecoder for distributed objects
|
|
|
|
Holding code to be run on request:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Invocation Contains code that can be run
|
|
ArgframeInvocation based on gcc __builtin_apply()
|
|
MethodInvocation invokes a method on an object
|
|
ObjectMethodInvocation the method takes at least one object arg
|
|
ObjectFunctionInvocation calls a function with type (id(*)(id))
|
|
VoidFunctionInvocation calls a functions with type (void(*)())
|
|
|
|
Posting information about happenings:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Notification for posting information others may want
|
|
NotificationRequest a record of an observers request
|
|
NotificationInvocation will be posted by invoking an Invocation
|
|
NotificationPerformer will be posted by -perform:withObject
|
|
NotificationDispatcher distributes Notification's among requestors
|
|
|
|
Distributed Objects Support:
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Connection between two machines on which messages sent
|
|
Proxy Representative of a remote object
|
|
Port A mailbox for packets
|
|
InPort for receiving packets
|
|
OutPort for sending packets
|
|
Tcp*Port based on TCP/IP
|
|
Udp*Port based on UDP/IP
|
|
Mach*Port based on Mach ports
|
|
Packet holds data and reply port
|
|
@end format
|
|
|
|
|
|
@item @b{Where can I get a copy?}
|
|
|
|
The most recently released ``official'' version can be obtained from
|
|
@url{ftp://prep.ai.mit.edu}.
|
|
|
|
The most recently released alpha version can be obtained from
|
|
@url{ftp://alpha.gnu.ai.mit.edu}.
|
|
|
|
The most recent developer's snapshot can be obtained from
|
|
@url{ftp://ftp.cs.rochester.edu/pub/u/mccallum/gnustep-base}. These
|
|
releases are there for exchange between active Gnustep coders, and for
|
|
curious code-readers, not for naive users; read the README.first file in
|
|
the FTP directory.
|
|
|
|
|
|
@end enumerate
|
|
@c Gnustep Base Library
|
|
|
|
|
|
|
|
@section Gnustep GUI Library
|
|
|
|
@enumerate
|
|
|
|
|
|
@item @b{What is the GUI Library?}
|
|
|
|
The Gnustep GUI Library is a library of objects useful for writing
|
|
graphical applications. For example, it includes classes for drawing
|
|
and manipulating graphics objects on the screen: windows, menus,
|
|
buttons, sliders, text fields, and events. There are also many
|
|
peripheral classes that offer operating-system-independent interfaces to
|
|
images, cursors, colors, fonts, pasteboards, printing. There are also
|
|
workspace support classes such as data links, open/save panels,
|
|
context-dependent help, spell checking.
|
|
|
|
It provides functionality that aims to implement the @samp{AppKit}
|
|
portion of the OpenStep standard. However the implementation has
|
|
been written to take advantage of Gnustep enhancements wherever possible.
|
|
|
|
|
|
@item @b{Explain the organization of the front- and back-ends.}
|
|
|
|
The Gnustep GUI Library is divided into a front- and back-end. The
|
|
front-end contains the majority of implementation, but leaves out the
|
|
low-level drawing and event code. A back-end can override whatever
|
|
methods necessary in order to implement low-level drawing event
|
|
receiving. Different back-ends will make Gnustep available on various
|
|
platforms. The default GNU back-end will run on top of X Windows and
|
|
the DisplayGhostScript Server. Other back-ends could allow Gnustep to
|
|
run on OpenGL, OS/2, and WIN32 graphics/event platforms. Much work
|
|
will be saved by this clean separation between front- and back-end,
|
|
because it allows different platforms to share the large amount of
|
|
front-end code.
|
|
|
|
The front-end does not specify what mechanism to use in order to "plug
|
|
in" the back-end---that is the back-end implementor's choice. At least
|
|
two backends will use @samp{+poseAs:} method, for example, running
|
|
@samp{[XDPSWindow poseAs: [NSWindow class]]}. Using @samp{+poseAs:} is
|
|
more flexible than using Categories because it allows the the back-end
|
|
implementor to choose what to override in the front-end, instead of
|
|
having the interface between front- and back-end fixed by the front-end.
|
|
|
|
|
|
@item @b{What is the current state of development of the front-end?}
|
|
|
|
A number of classes in the front-end are complete or almost complete;
|
|
these include: NSActionCell, NSButtonCell, NSButton, NSCell, NSControl,
|
|
NSEvent, NSFont, NSResponder, and NSSlider.
|
|
|
|
Other classes are complete enough to use, but still require some major
|
|
additions before being considered almost complete: NSApplication, NSBox,
|
|
NSColor, NSFontManager, NSMenu, NSMenuCell, NSPopUpButton, NSSliderCell,
|
|
NSText, NSTextField, NSTextFieldCell, NSView, and NSWindow.
|
|
|
|
All remaining classes have stub implementations.
|
|
|
|
|
|
@item @b{What is the current state of development of the X/DPS back-end?}
|
|
|
|
|
|
@item @b{Where can I get a copy?}
|
|
|
|
It is not yet publically available. When it is available you will be
|
|
able to find it in @url{ftp://alpha.gnu.ai.mit.edu/gnu}.
|
|
|
|
@end enumerate
|
|
@c Gnustep GUI Library
|
|
|
|
|
|
|
|
@section Gnustep DisplayGhostScript Server
|
|
|
|
@enumerate
|
|
|
|
@item @b{What is the DisplayGhostScript Server?}
|
|
|
|
|
|
@item @b{What is its current state of development?}
|
|
|
|
|
|
@item @b{What is the relationship between the DisplayGhostScript Server and X Windows?}
|
|
|
|
|
|
@end enumerate
|
|
@c Gnustep DisplayGhostScript Server
|
|
|
|
|
|
|
|
@section Gnustep Interface Modeller Application
|
|
|
|
@enumerate
|
|
|
|
@item @b{What is the Interface Modeller?}
|
|
|
|
Interface Modeller, in its simplest form, is an application for visually
|
|
constructing and prototyping graphical user interfaces. At a more
|
|
abstract level, it is a tool for connecting instances of Objective C
|
|
classes to create a graph of objects; this graph is a model of an
|
|
executable program that Interface Modeller can save to a file to be
|
|
loaded and executed later outside of Interface Modeller.
|
|
|
|
|
|
@item @b{What is its current state of development?}
|
|
|
|
It is in the specification stage; no code has been written yet. The
|
|
current specifications are available through the Gnustep WWW pages.
|
|
|
|
@end enumerate
|
|
@c Gnustep IM
|
|
|
|
|
|
@ignore
|
|
[Notes to FAQ contributors: Be succinct. Stick to the facts. Emphasize
|
|
technical features that are already implemented; avoid writing about
|
|
vague features without concrete ideas about their implementation. Your
|
|
audience is future and present code contributors to Gnustep, not
|
|
managers or publicity people.]
|
|
@end ignore
|
|
|
|
@format
|
|
|
|
|
|
All trademarks mentioned on in this FAQ belong to their owners.
|
|
@end format
|
|
|
|
@c Local variables:
|
|
@c page-delimiter: "^\n\n"
|
|
@c end:
|