home *** CD-ROM | disk | FTP | other *** search
/ Danny Amor's Online Library / Danny Amor's Online Library - Volume 1.iso / html / faqs / faq / objective-c / answers next >
Encoding:
Text File  |  1995-07-25  |  29.1 KB  |  702 lines

  1. Subject: comp.lang.objective-c FAQ, part 1/3: Answers
  2. Newsgroups: comp.lang.objective-c,comp.answers,news.answers
  3. From: tiggr@es.ele.tue.nl (Tiggr)
  4. Date: 17 Nov 1994 17:00:03 GMT
  5.  
  6. Archive-name: Objective-C/answers
  7. Version: $Id: answers,v 2.15 1994/11/06 10:59:54 tiggr Exp $
  8.  
  9.  
  10.                  Answers to
  11.  
  12.              FREQUENTLY ASKED QUESTIONS
  13.  
  14.                concerning Objective-C
  15.  
  16.  
  17. This is the first in a series of three informational postings concerning
  18. comp.lang.objective-c.  This first part answers FAQs; the second part lists
  19. available class libraries and the third part is a simple sample Objective-C
  20. program.
  21.  
  22. This posting answers the following questions:
  23.  
  24.  1   What is Objective-C?
  25.  2   What is the difference between Objective-C and C++?
  26.  3   What exactly is it that makes Objective-C have `classes similar to
  27.      Smalltalk', and what are the resulting capabilities of Objective-C?
  28.  4   What are the `nice features' of Objective-C?
  29.  5   What are some of the common problems of the language and how can I work
  30.      around them?
  31.  6   What object encapsulation does Objective-C provide?
  32.  7   What are Protocols?
  33.  8   How can garbage collection be applied to Objective-C?
  34.  9   What is the difference between the NeXTSTEP, Stepstone and GNU CC
  35.      versions of Objective-C?
  36.  10  What written information concerning Objective-C is available?
  37.  11  What kind of Objective-C support is provided by Stepstone?
  38.  12  What kind of Objective-C support is provided by NeXT?
  39.  13  What kind of Objective-C support is provided by GNU?
  40.  14  What kind of Objective-C support is provided by BPG.
  41.  15  What are the newsgroups to read or mailing lists to subscribe to in order
  42.      to stay up-to-date on developments for GNU Objective-C?
  43.  16  Are there any FTP sites with Objective C code?  Where?
  44.  17  For more information...
  45.  
  46. (To find a question search on the question number starting a line.)
  47.  
  48. 1   What is Objective-C?
  49.  
  50.     Objective-C is an object oriented computer programming language.  It is
  51.     a superset of ANSI C and provides classes and message passing similar to
  52.     Smalltalk.
  53.  
  54.     Objective-C includes, when compared to C, a few more keywords and
  55.     constructs, a short description of which follows.  For a comlete example
  56.     of the application of the constructs, see part 3 of this FAQ.
  57.  
  58.     `@interface' declares a new class.  It indicates the name of the class,
  59.     the name of its superclass, the protocols adhered to (see Q7), the
  60.     layout of the instance variables (similar to the definition of a struct,
  61.     but including encapsulation information (see Q19)) and declares the
  62.     methods implemented by this class.  A class' interface usually resides
  63.     in a file called `<classname>.h'.
  64.  
  65.     `@implementation' defines a class.  The implementation is no more than a
  66.     collection of method definitions.  Without an implementation, a class
  67.     does not exist at run time.  The implementation of a class usually
  68.     resides in a file called `<classname>.m'.
  69.  
  70.     A `@category' is a named collection of method definitions which are
  71.     added to an existing class.  A category is not allowed to redefine a
  72.     class' existing methods.
  73.  
  74.     Objective-C includes the predefined type `id' which stands for a pointer
  75.     to some object.  Thus, `id obj;' declares a pointer to an object.  The
  76.     actual class of the object being pointed to is almost irrelevant, since
  77.     Objective-C does run-time type checking.
  78.  
  79.     `-message;' declares a method called `message'.  The `-' indicates that
  80.     the message can be sent to objects.  A `+' instead indicates the message
  81.     can be sent to class objects.  A method is similar to a function in that
  82.     it has arguments and a return value.  The default return type is `id'.
  83.     If a method has nothing useful to return, it returns `self', which is a
  84.     pointer to the object to which the message was sent (similar to `this'
  85.     in C++).
  86.  
  87.     [obj message], [obj message: arg1] and [obj message: arg1 with: arg2]
  88.     are examples of sending a message to the object OBJ with 0, 1 and 2
  89.     arguments respectively.  The name of the message is called the selector.
  90.     In this example, the selectors are: `message', `message:' and
  91.     `message:with:', respectively.
  92.  
  93. 3   What is the difference between Objective-C and C++?
  94.  
  95.     C++ follows the Simula 67 school of OO programming, where Objective-C
  96.     follows the Smalltalk school.  In C++ the static type of an object
  97.     determine whether you can send it a message, in Objective-C the dynamic
  98.     type determine it.  The Simula 67 school is safer, in that more errors
  99.     are detected at compile time.  The Smalltalk school is more flexible, as
  100.     some valid programs will execute correctly in Smalltalk, where they
  101.     would be rejected by Simula 67.
  102.  
  103.     Stepstone's Objective-C allows you to chose between the dynamic and
  104.     static binding, GNU and NeXT do not.  ANSI C++ allows you to use dynamic
  105.     binding, but discourages you from doing so.
  106.  
  107.     In many ways, the difference between C++ and Objective-C is more a
  108.     question of mindset than technical barriers.  Are you willing to offer
  109.     some flexibility for some safety?  Advocates for the Simula 67 school
  110.     claims that a well designed program doesn't need the extra flexibility
  111.     (a lie), while advocates for the Smalltalk school claims that the errors
  112.     are no problem in practice (another lie).
  113.  
  114.     Pragmatic differences between Objective-C and C++ include:
  115.  
  116.     C++ has operator overloading.  Some consider this to be `syntactic
  117.     sugar', and it is, but it can be a quite handy bit of sugar.
  118.  
  119.     C++ has multiple inheritance.  There are several ways to `get
  120.     around' this in Objective-C (see below).
  121.  
  122.     The added syntax and semantics of C++ is huge, while Objective-C is
  123.     C plus just a small number of new features.
  124.  
  125. 3   What exactly is it that makes Objective-C have `classes similar to
  126.     Smalltalk', and what are the resulting capabilities of Objective-C?
  127.  
  128.     Objective-C is as close to Smalltalk as a compiled language allows.  The
  129.     following is a list of the features `taken' from Smalltalk:
  130.  
  131.       * Objective-C is compiled---Smalltalk is only partially compiled.  The
  132.     current Objective-C implementations are all *much* faster than any
  133.     Smalltalk.  For example ParcPlace Smalltalk-80/4 is at least 3 times
  134.     slower than both the GNU and NeXT Objective-C's.  (This was measured
  135.     using the Self/Smalltalk benchmark suite available by FTP from
  136.     `self.stanford.edu:pub/Self-2.0.1'.)
  137.  
  138.     The big difference of course is that Objective-C does hybrid typing:
  139.     one can choose to represent a string as a `char *' or as an object,
  140.     whereas in Smalltalk, everything is an object.  This is a reason for
  141.     Objective-C being faster.  On the other hand, if every bit of
  142.     information in an Objective-C program would be represented by an
  143.     object, the program would probably run at a speed comparable to
  144.     Smalltalk and it would suffer from not having optimizations
  145.     performed on the basic classes, like Smalltalk can do.
  146.  
  147.       * You may add or delete methods and classes at runtime.  (On GNU and
  148.     NeXT one can load new classes and categories.  On Stepstone, which
  149.     lacks categories, the only way to add methods is to load a subclass
  150.     which then does a `+poseAs:' of the class to have methods added.
  151.     This is less flexible, but it sort-of does the trick of just adding
  152.     methods.)
  153.  
  154.       * Much of the syntax, i.e. Smalltalk uses method names like
  155.     `a:method:name:', as does Objective-C.  In Objective-C, the message
  156.     sending construct is enclosed in square brackets, like this:
  157.     `[anObject aMessage: arg]' whereas Smalltalk uses something like
  158.     `anObject aMessage: arg'.
  159.  
  160.       * The basic class hierarchy, that is, having class `Object' in the very
  161.     top, and letting most other classes inherit from it.
  162.  
  163.       * Most method names in class object is the same.  E.g. `respondsTo:'.
  164.     What is called `doesNotUnderstand:' in Smalltalk is called
  165.     `doesNotRecognize:' in Objective-C.
  166.  
  167.       * Smalltalk normally uses `doesNotUnderstand:' to implement
  168.     forwarding, delegation, proxies etc.  In Objective-C, these tasks
  169.     are different:
  170.  
  171.         forwarding/delegation: `forward::' can be overridden to
  172.         implement forwarding.  On the NeXT, `forward::' is even used
  173.         when passing to super.
  174.  
  175.         proxies: (Next) An instance of the NXProxy class forwards all
  176.         methods and their arguments to the remote object via Mach
  177.         messages.
  178.  
  179.       * Objective-C has meta classes mostly like Smalltalk.
  180.  
  181.       * Objective-C does not have class variables like Smalltalk, but pool
  182.     variables and globals are easily emulated via static variables.
  183.  
  184. 4   What are the `nice features' of Objective-C?
  185.  
  186.     The possibility to load class definitions and method definitions
  187.     (which extend a class) at run time.
  188.  
  189.     Objects are dynamically typed: Full type information (name and type
  190.     information of methods and instance variables and type information
  191.     of method arguments) is available at run time.  A prime example of
  192.     application of this feature is `-loadNibSection:owner:' method of
  193.     NEXTSTEP's Application class.
  194.  
  195.     Persistence [...].
  196.  
  197.     Remote objects [...].
  198.  
  199.     Delegation and target/action protocols [...].
  200.  
  201. 5   What are some of the common problems of the language and how can I work
  202.     around them?
  203.  
  204.     There are some `common problems':
  205.  
  206.     There is no innate multiple inheritance (of course some see this as
  207.     a benefit).
  208.  
  209.         To get around it you can create a compound class, i.e. a class
  210.         with instance variables that are ids of other objects.
  211.         Instances can specifically redirect messages to any combination
  212.         of the objects they are compounded of.  (It isn't *that* much of
  213.         a hassle and you have direct control over the inheritance
  214.         logistics.)  [Of course, this is not `getting around the problem
  215.         of not having multiple inheritance', but just modeling your
  216.         world slightly different in such a way that you don't need
  217.         multiple inheritance.]
  218.  
  219.         Protocols address the absence of multiple inheritance (MI) to
  220.         some extent: Technically, protocols are equivalent to MI for
  221.         purely "abstract" classes (see the answer on `Protocols' below).
  222.  
  223.         [How does Delegation fit in here?  Delegation is extending a
  224.         class' functionality in a way anticipated by the designer of
  225.         that class, without the need for subclassing.  One can, of
  226.         course, be the delegate of several objects of different
  227.         classes.  ]
  228.  
  229.     There are no class variables.
  230.  
  231.         You can get around this by defining a static variable in the
  232.         implementation file, and defining access methods for it.  This
  233.         is actually a more desirable way of designing a class hierarchy,
  234.         because subclasses shouldn't access superclass storage (this
  235.         would cause the subclass to break if the superclass was
  236.         reimplemented), and allows the subclass to override the storage
  237.         (if the classes access all their own variables via methods).
  238.  
  239.         [The question remains what the exact syntax of class variables
  240.         should be: Should a class object A be seen as an instance of its
  241.         meta-class MA, which has a super class MB being the meta-class
  242.         of A's super, B, and, as such, should A have seperate instances
  243.         of class variables defined for B?  Or not?]
  244.  
  245. 6   What object encapsulation does Objective-C provide?
  246.  
  247.     Object encapsulation can be discerned at two levels: encapsulation of
  248.     instance variables and of methods.  In Objective-C, the two are quite
  249.     different.
  250.  
  251.     Instance variables:
  252.  
  253.     The keywords @public, @private and @protected are provided to secure
  254.     instance variables from prying eyes to some extent.
  255.  
  256.         @public        anyone can access any instance variable.
  257.         @protected    only methods belonging to this object's
  258.                 class or a subclass thereof have access to
  259.                 the instance variables.
  260.         @private    only methods of this class may access the
  261.                 instance variables.  This excludes methods
  262.                 of a subclass.
  263.  
  264.     If not explicitly set, all instance variables are @protected.
  265.     Note: Instance variable encapsulation is enforced at compile-time.
  266.     At run-time, full typing information on all instance variables is
  267.     available, which sort-of makes all variables @public again.  This
  268.     information is for instance used to do instance variable lookup by
  269.     NeXTSTEP's `loadNibSection:owner:' method, making it completely
  270.     safe.
  271.  
  272.     Methods:
  273.  
  274.     To the Objective-C runtime, all methods are @public.  The programmer
  275.     can only show his/her intention of making specific methods not
  276.     public by not advertising them in the class' interface.  In
  277.     addition, so-called private methods can be put in a category with a
  278.     special name, like `secret' or `private'.
  279.  
  280.     However, these tricks do not help much if the method is declared
  281.     elsewhere, unless one reverts to indicating the object's type at
  282.     compile time.  And the runtime doesn't care about all this and any
  283.     programmer can easily circumvent the tricks described.  Thus, all
  284.     methods really are always @public.
  285.  
  286. 7   What are Protocols?
  287.  
  288.     Protocols are an addition to Objective-C that allows you to organize
  289.     related methods into groups that form high-level behaviors.  Protocols
  290.     are currently available in NeXTSTEP (since 3.0) and GCC (since 2.4).
  291.  
  292.     Protocols address the MI issue.  When you design an object with multiple
  293.     inheritance, you usually don't want *all* the features of both A and B,
  294.     you want feature set X from A and feature set Y from B.  If those
  295.     features are methods, then encapsulating X and Y in protocols allows you
  296.     to say exactly what you want in your new object.  Furthermore, if
  297.     someone changes objects A or B, that doesn't break your protocols or
  298.     your new object.  This does not address the question of new instance
  299.     variables from A or B, only methods.
  300.  
  301.     Protocols allow you to get type-checking features without sacrificing
  302.     dynamic binding.  You can say "any object which implements the messages
  303.     in Protocol Foo is OK for this use", which is usually what you want -
  304.     you're constraining the functionality, not the implementation or the
  305.     inheritance.
  306.  
  307.     Protocols give library builders a tool to identify sets of standard
  308.     protocols, independent of the class hierarchy.  Protocols provide
  309.     language support for the reuse of design, whereas classes support the
  310.     reuse of code.  Well designed protocols can help users of an application
  311.     framework when learning or designing new classes.  Here is a simple
  312.     protocol definition for archiving objects:
  313.  
  314.     @protocol Archiving
  315.     -read: (Stream *) stream;
  316.     -write: (Stream *) stream;
  317.     @end
  318.  
  319.     Once defined, protocols can be referenced in a class interface as
  320.     follows:
  321.  
  322.     /* MyClass inherits from Object and conforms to the
  323.        Archiving protocol.  */
  324.     @interface MyClass: Object <Archiving>
  325.     @end
  326.  
  327.     Unlike copying methods to/from other class interfaces, any incompatible
  328.     change made to the protocol will immediately be recognized by the
  329.     compiler (the next time the class is compiled).  Protocols also provide
  330.     better type checking without compromising the flexibility of untyped,
  331.     dynamically bound objects.
  332.  
  333.     MyClass *obj1 = [MyClass new];
  334.  
  335.     // OK: obj1 conforms to the Archiving protocol.
  336.     id <Archiving> obj2 = obj1;
  337.  
  338.     // Error: obj1 does not conform to the TargetAction protocol.
  339.     id <TargetAction> obj3 = obj1;
  340.  
  341.     Another use of protocols is that you can declare an ID to conform to
  342.     some protocol in order to help the compiler to resolve method name
  343.     conflicts:
  344.  
  345.     @interface Foo: Object
  346.     -(int) type;
  347.     @end
  348.  
  349.     @protocol Bar
  350.     -(const char *) type;
  351.     @end
  352.  
  353.     -blah1: d
  354.     {
  355.       id t = [d someMethod];
  356.       do_something_with ([t type]);
  357.     }
  358.  
  359.     -blah2: d
  360.     {
  361.       id <Bar> t = [d someMethod];
  362.       do_something_with ([t type]);
  363.     }
  364.  
  365.     In this example, there are two kinds of the `-type' method.  In the
  366.     method `-blah1:', the compiler doesn't know what return type to expect
  367.     from `[t type]', since it has seen both declarations of `-type'.  In
  368.     method `-blah2:', it knows that `t' conforms to the `Bar' protocol and
  369.     thus that `t' implements the `-type' method returning a `const char *'.
  370.  
  371. 8   How can garbage collection be applied to Objective-C?
  372.  
  373.     Currently, there are two implementations of garbage collection which can
  374.     be used in Objective-C programs [that I'm aware of].  Both methods use a
  375.     radically different approach.
  376.  
  377.     Garbage Collection in an Uncooperative Environment
  378.  
  379.         This implements garbage collection of chunks of memory obtained
  380.         through (its replacement of) malloc(3).  It works for C, C++,
  381.         Objective-C, etc.
  382.  
  383.         @article{bw88,
  384.         title="Garbage Collection in an Uncooperative Environment",
  385.         author="Hans J\"urgen Boehm and Mark Weiser",
  386.         journal="Software Practice and Experience",
  387.         pages=807-820,volume=18,number=9,month=sep,year=1988}
  388.  
  389.         It used to be available as `iesd.auc.dk:/pub/ObjC/gc3.0.tar.z'.
  390.         Its current location is unknown.
  391.  
  392.     Garbage Collection through Class Abstraction
  393.  
  394.         This implements garbage collection through class abstraction
  395.         (and hence is Objective-C specific).  Anything to be garbage
  396.         collectible must be an object (instance of a subclass of a
  397.         specific class) or have such an object for a wrapper.
  398.  
  399.         Available as `ftp.es.ele.tue.nl:/pub/tiggr/tobjc.tar.gz'
  400.  
  401.     Apart from the obvious radical difference, another difference currently
  402.     is also noteworthy: The first method automatically protects objects
  403.     pointed to from the stack, bss or data segments; the second doesn't.
  404.  
  405. 9   What is the difference between the NeXTSTEP, Stepstone and GNU CC
  406.     versions of Objective-C?
  407.  
  408.     NeXT extended Stepstone's definition of the language to include new
  409.     constructs, such as protocols, which are touted to deal with some
  410.     aspects of multiple inheritance.
  411.  
  412.     Stepstone supports static _binding_, whereas NeXTSTEP and GNU CC don't.
  413.     All implementations do support static _typing_.
  414.  
  415.     Stepstone has a standard set of Foundation class libraries that work
  416.     across all supported machines, including NeXTSTEP.  NEXTSTEP comes with
  417.     its own set of libraries (called `kits').  GNU libobjc.a currently only
  418.     includes the `Object' class, though people are busy on a Real library
  419.     (see part two of this FAQ (The ClassWare Listing) for details).
  420.  
  421.     The `Object' class of all implementations differ.
  422.  
  423.     NeXTSTEP and GNU CC support Categories, Stepstone doesn't.
  424.  
  425.     NeXT has a native language debugger, Stepstone and GNU don't.  [This is
  426.     not really true, since NeXT's debugger is gdb, the GNU debugger, and
  427.     their extensions are available.  I think I've seen them on the Fall 1992
  428.     Edu CD.  Their extensions haven't appeared in the official FSF
  429.     distribution yet.]
  430.  
  431.     NeXTSTEP (from version 3.0) and GCC (from version 2.4) support protocols
  432.     and forward declarations of classes, Stepstone currently does not.
  433.  
  434. 10  What written information concerning Objective-C is available?
  435.  
  436.     Books:
  437.  
  438.     Brad J. Cox, Andrew J. Novobilski: Object Oriented Programming: An
  439.     Evolutionary Approach.  Addison-Wesley Publishing Company, Reading,
  440.     Massachusetts, 1991.  ISBN: 0-201-54834-8.
  441.  
  442.     abstract:    The first book on Objective-C, which actually is a
  443.                     book on object oriented system development using
  444.                     Objective-C.
  445.                     
  446.  
  447.     Lewis J. Pinson, Richard S. Wiener: Objective-C: Object Oriented
  448.     Programming Techniques.  Addison-Wesley Publishing Company, Reading,
  449.     Massachusetts, 1991. ISBN 0-201-50828-1.
  450.  
  451.     abstract:       Includes many examples, discusses both Stepstone's
  452.                     and NeXT's versions of Objective-C, and the
  453.                     differences between the two.
  454.  
  455.  
  456.     Timothy Budd: An Introduction to Object-Oriented Programming.
  457.     Addison-Wesley Publishing Company, Reading, Massachusetts.
  458.     ISBN 0-201-54709-0.
  459.  
  460.     abstract:       An intro to the topic of OOP, as well as a comparison
  461.                     of C++, Objective-C, Smalltalk, and Object Pascal
  462.  
  463.  
  464.     Simson L. Garfinkel, Michael K. Mahoney: NeXTSTEP Programming Step
  465.     ONE: Object-Oriented Applications.  TELOS/Springer-Verlag, 1993
  466.     (tel: (800)SPR-INGE).
  467.  
  468.     abstract:       It's updated to discuss NeXTSTEP 3.0 features
  469.                     (Project Builder, new development environment)
  470.                     but doesn't discuss 3DKit or DBKit.
  471.  
  472.  
  473.     NeXTSTEP Object Oriented Programming and the Objective C Language.
  474.     Addison-Wesley Publishing Company, Reading, Massachusetts, 1993.
  475.     ISBN 0-201-63251-9.
  476.  
  477.     abstract:     This book describes the Objective-C language as it
  478.             is implemented for NeXTSTEP.  While clearly targeted
  479.             at NeXTSTEP, it is a good first-read to get to learn
  480.             Objective-C.
  481.  
  482.     Articles
  483.  
  484.     `Why I need Objective-C', by Christopher Lozinski.
  485.     Journal of Object-Oriented Programming (JOOP) September 1991.
  486.  
  487.     Abstract:    This article discusses the differences between C++
  488.             and Objective-C in great detail and explains why
  489.             Objective-C is a better object oriented language.
  490.  
  491.     `Concurrent Object-Oriented C (cooC)', by Rajiv Trehan et. al.
  492.     ACM SIGPLAN Notices, Vol. 28, No 2, February 1993.
  493.  
  494.     Abstract:    This article discusses cooC, a language based on the
  495.             premise that an object not only provides an
  496.             encapsulation boundary but should also form a
  497.             process boundary.  cooC is a superset of
  498.             Objective-C.
  499.  
  500.     `Porting NEXTSTEP Applications to Microsoft Windows',
  501.     by Christopher Lozinski.  NEXTWORLD EXPO Conference Proceedings,
  502.     San Francisco, CA, May 25-27, 1993.  Updated version of the article
  503.     available from the author.  Contact lozinski@cup.portal.com
  504.  
  505.     Abstract:    This article describes how to develop Objective-C
  506.             applications for both Microsoft Windows and
  507.             NEXTSTEP.
  508.  
  509.     GNU Documentation
  510.  
  511.     The GNU project needs a free manual describing the Objective-C
  512.     language features.  Because of its cause, GNU cannot include the
  513.     non-free books in the GNU system, but the system needs to come with
  514.     documentation.
  515.  
  516.     Anyone who can write good documentation, please think about giving
  517.     it to the GNU project.  Contact rms@gnu.ai.mit.edu.
  518.  
  519. 11  What kind of Objective-C support is provided by Stepstone?
  520.  
  521.     Compilers and runtime for: Apple Macintosh (running Mac Programmers
  522.     Workshop), DEC Stations (ULTRIX), Data General AViiON (DG/UX),
  523.     HP9000/300,400,700,800 (HP-UX), IBM RISC System/6000 (AIX), MIPS,
  524.     NeXT, PC-AT (MS-DOS), PS/2 (AIX or OS/2), SCO/NCR UNIX SYS V, Sun 3, 4,
  525.     SPARCstations (SunOS or Solaris), Silicon Graphics INDIGO and VAX(VMS).
  526.     Other ports available by market demands or consulting services.
  527.  
  528.     ICpak101 Foundation Class Library is avaliable on all the above.
  529.     ICpak201 GUI Class Library is available on platforms that support
  530.     XWindows, Motif, OpenWindows and SunView.
  531.  
  532.        The Stepstone Corporation
  533.     (203) 426-1875 - (800) BUY-OBJEct voice / (203) 270-0106 fax
  534.     75 Glen Road
  535.     Sandy Hook, CT 06482
  536.  
  537. 12  What kind of Objective-C support is provided by NeXT?
  538.  
  539.     The Objective-C compiler and libraries come bundled with the
  540.     NEXTSTEP Developer CD.  The compiler essentially is GNU CC.  For
  541.     information on the Kits which are part of NEXTSTEP, see the
  542.     ClassWare Listing (part 2 of this FAQ).
  543.  
  544.     Products are:
  545.  
  546.         NEXTSTEP 3.2 for NeXT or Intel Computers
  547.  
  548.         ObjectWare Catalogue (lists available classes, both commercial
  549.         and those freely available).
  550.  
  551.     NeXT Computer, Inc.
  552.     900 Chesapeake Drive
  553.     Redwood City, CA 94063
  554.     tel: 800 848 NEXT
  555.     fax: 415 780 2801
  556.     email: NeXTanswers@NeXT.COM
  557.  
  558.     [Note: The World of NEXTSTEP is moving rapidly: HP-PA NEXTSTEP has
  559.     been demoed (available mid 94), Sparc NEXTSTEP is being worked on
  560.     (available late 94?).  OpenStep has been defined and made available.
  561.     This specification includes Objective-C, DPS, PDO, PB/IB.  OpenStep
  562.     will be available on Solaris (when?).]
  563.  
  564. 13  What kind of Objective-C support is provided by GNU?
  565.  
  566.     GNU CC, since version 2, comes with an Objective-C compiler.  The
  567.     current distribution of GNU CC (version 2.5.8) includes an Objective-C
  568.     compiler and runtime library.  The latter includes the `Object' class.
  569.     Some people are working on GNU libraries, see part two of this FAQ (The
  570.     ClassWare Listing) for details.
  571.  
  572.     If you haven't switched to a GNU CC as recent as 2.4 yet, here's one
  573.     reason to do so: The new runtime (as of 2.4) is more than 3 times as
  574.     fast as the old runtime (pre 2.4) w.r.t. method invocation.
  575.  
  576.     Free Software Foundation
  577.     675 Massachusetts Avenue
  578.     Cambridge, MA  02139
  579.     +1-617-876-3296
  580.  
  581.     General questions about the GNU Project can be asked to
  582.     gnu@prep.ai.mit.edu.
  583.  
  584.     GNU CC comes with an Objective-C compiler and runtime library which
  585.     includes the Object class.
  586.  
  587.     Most GNU software is packed using the new `gzip' compression program.
  588.     Source code is available on most sites distributing GNU software.
  589.  
  590.     For information on how to order GNU software on tape, floppy, or
  591.     cd-rom, check the file etc/ORDERS in the GNU Emacs distribution or in
  592.     GNUinfo/ORDERS on prep, or e-mail a request to: gnu@prep.ai.mit.edu
  593.  
  594.     By ordering your GNU software from the FSF, you help us continue to
  595.     develop more free software.  Media revenues are our primary source of
  596.     support.  Donations to FSF are deductible on US tax returns.
  597.  
  598.     The following sites all carry mirrors of the GNU software at prep.
  599.     Please try them before prep.ai.mit.edu!   thanx -gnu@prep.ai.mit.edu
  600.     ASIA: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:/ftpsync/prep,
  601.         cair.kaist.ac.kr:/pub/gnu, ftp.nectec.or.th:/pub/mirrors/gnu
  602.     AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
  603.     AFRICA: ftp.sun.ac.za:/pub/gnu
  604.     MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
  605.     EUROPE: irisa.irisa.fr:/pub/gnu, ftp.univ-lyon1.fr:pub/gnu,
  606.         ftp.mcc.ac.uk, unix.hensa.ac.uk:/pub/uunet/systems/gnu,
  607.         ftp.denet.dk, src.doc.ic.ac.uk:/gnu, ftp.eunet.ch,
  608.         nic.switch.ch:/mirror/gnu,
  609.         ftp.informatik.rwth-aachen.de:/pub/gnu,
  610.         ftp.informatik.tu-muenchen.de, ftp.win.tue.nl,
  611.         ftp.funet.fi:/pub/gnu, ftp.stacken.kth.se, isy.liu.se,
  612.         ftp.luth.se:/pub/unix/gnu, ftp.sunet.se:/pub/gnu,
  613.         archive.eu.net
  614.     SOUTH AMERICA: ftp.unicamp.br:/pub/gnu
  615.     WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
  616.     USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
  617.         ftp.digex.net:/pub/gnu, ftp.kpc.com:/pub/mirror/gnu,
  618.         f.ms.uky.edu:/pub3/gnu, jaguar.utah.edu:/gnustuff
  619.         ftp.hawaii.edu:/mirrors/gnu, ftp.cs.widener.edu,
  620.         vixen.cso.uiuc.edu:/gnu, mrcnext.cso.uiuc.edu:/pub/gnu,
  621.         ftp.cs.columbia.edu:/archives/gnu/prep,
  622.         col.hp.com:/mirrors/gnu, gatekeeper.dec.com:/pub/GNU,
  623.         ftp.uu.net:/systems/gnu
  624.  
  625. 14  What kind of Objective-C support is provided by BPG.
  626.  
  627.     BPG provides the Borland Extensions to Objective-C which allows the
  628.     Objective-C translator to be used with the Borland Compiler, and makes
  629.     it easy to develop Objective-C application for Microsoft Windows.
  630.  
  631.     BPG provides the Smalltalk Interface to Objective-C which makes
  632.     Objective-C objects look like Smalltalk Objects.  It can be used to
  633.     build Graphical User Interface on portable Objective-C objects, or to
  634.     sell Objective-C libraries to Smalltalk developers.
  635.  
  636.     BPG provides the Objective-C Message Bus which sends Objective-C messages
  637.     across heterogeneous computer platforms.
  638.  
  639.     BPG has a library of objects for modelling Objective-C programs.  A browser
  640.     application has been built on this library.  Other potential applications
  641.     include adding class variables to Objective-C, adding runtime information
  642.     about instance variables, and method argument types, generating object
  643.     versions, and eventually building a browser/translator.
  644.  
  645.     Christopher Lozinski
  646.     BPG
  647.     35032 Maidstone Court
  648.     Newark, CA 94560
  649.     Tel: (510) 795-6086
  650.     fax: (510) 795-8077
  651.     email: lozinski@cup.portal.com
  652.  
  653. 15  What are the newsgroups to read or mailing lists to subscribe to in order
  654.     to stay up-to-date on developments for GNU Objective-C?
  655.  
  656.     Read comp.lang.objective-c, which is bound to discuss current events.
  657.     There is also a mailing list, gnu-objc@gnu.ai.mit.edu, discussing this
  658.     very topic.  To subscribe to this list, send a mail with your request to
  659.     `gnu-objc-request@gnu.ai.mit.edu.'
  660.  
  661.     Furthermore, the various kits that are being developed each come with
  662.     their own mailing list.  See part 2 of this FAQ for more information.
  663.  
  664. 16  Are there any FTP sites with Objective C code?  Where?
  665.  
  666.     ftp.cs.rochester.edu:/pub/objc
  667.     sonata.cc.purdue.edu        (NEXTSTEP)
  668.     cs.orst.edu            (NEXTSTEP)
  669.     ftp.stack.urc.tue.nl        (NEXTSTEP)
  670.     ftp.informatik.uni-muenchen.de
  671.     ccrma-ftp.stanford.edu        (MusicKit)
  672.  
  673.     See also part 2 of this FAQ.
  674.  
  675. 17  For more information...
  676.  
  677.     See part 2 of this FAQ, Objective-C/classes a.k.a. the ClassWare
  678.     Listing, for an overview of available Objective-C classes and libraries.
  679.  
  680.     See part 3 of this FAQ, Objective-C/sample a.k.a. the Simple Sample
  681.     Program, for an example Objective-C program.
  682.  
  683. The early version of this FAQ was compiled by Bill Shirley, with the aid of
  684. many people.  The current version is being maintained by Tiggr, aided by a
  685. lot of people, including: Per Abrahamsen, Paul Burchard, Brad Cox,
  686. Christopher Lozinski, Mike Mahoney, Jon F. Rosen, Paul Sanchez, Lee Sailer,
  687. Bill Shirley, Subrata Sircar, Ted Slupesky, Richard Stallman and Kersten
  688. Krab Thorup,
  689.  
  690. A World Wide Web hypertext version of this FAQ is maintained by Brian Harvey
  691. (theharv@csld.ucr.edu) and can be found at:
  692.     http://csld.ucr.edu/NeXTSTEP/objc_faq.html
  693.  
  694. Any text in between `[' and `]' is a comment.  Comments indicate `problems'
  695. with this FAQ, which should be solved.  Send your suggestions, additions,
  696. bug reports, comments and fixes to `tiggr@es.ele.tue.nl'.
  697.  
  698.     The information in this file comes AS IS, WITHOUT ANY WARRANTY.  You may
  699.     use the information contained in this file or distribute this file, as
  700.     long as you do not modify it, make money out of it or take the credits.
  701.  
  702.