25 |
@menu |
@menu |
26 |
* Is it easy to port OPENSTEP programs to GNUstep?:: |
* Is it easy to port OPENSTEP programs to GNUstep?:: |
27 |
* How about porting between Cocoa and GNUstep?:: |
* How about porting between Cocoa and GNUstep?:: |
28 |
|
* Tools for porting:: |
29 |
* Can I transfer archived data from GNUstep to Cocoa?:: |
* Can I transfer archived data from GNUstep to Cocoa?:: |
30 |
* Does distributed objects work between GNUstep and Cocoa?:: |
* Does distributed objects work between GNUstep and Cocoa?:: |
31 |
* Is there an Interface Builder for GNUstep?:: |
* Is there an Interface Builder for GNUstep?:: |
46 |
(if there are any) to GNUstep model files using the nib2gmodel program |
(if there are any) to GNUstep model files using the nib2gmodel program |
47 |
(from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}). |
(from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}). |
48 |
|
|
49 |
@node How about porting between Cocoa and GNUstep?, Can I transfer archived data from GNUstep to Cocoa?, Is it easy to port OPENSTEP programs to GNUstep?, Compatibility |
@node How about porting between Cocoa and GNUstep?, Tools for porting, Is it easy to port OPENSTEP programs to GNUstep?, Compatibility |
50 |
@subsection How about porting between Cocoa and GNUstep? |
@subsection How about porting between Cocoa and GNUstep? |
51 |
|
|
52 |
It's easier from GNUstep to Cocoa than Cocoa to GNUstep. Cocoa is |
It's easier from GNUstep to Cocoa than Cocoa to GNUstep. Cocoa is |
56 |
Cocoa: |
Cocoa: |
57 |
|
|
58 |
@itemize @bullet |
@itemize @bullet |
59 |
@item Be careful with Cocoa.h includes |
@item Be careful with Cocoa.h includes (Use #ifndef GNUSTEP, for instance) |
60 |
@item Do not use CoreFoundation |
@item Do not use CoreFoundation |
61 |
@item Do not use C++ |
@item Do not use Objective-C++ |
62 |
@item Do not use Quicktime or other propriatory extention |
@item Do not use Quicktime or other proprietary extension |
63 |
@item You need to convert .nib (IB if you use it) to .gmodel or .gorm |
@item You need to convert .nib files (see next question @pxref(Tools for porting)) |
64 |
and Gorm is good enough for most of the work |
@item Some unfinished classes include NSToolBar and Drawers. |
|
@item Do not use NSToolBar (not finished in GNUstep) |
|
|
@item Do not use Drawer (not implmented in GNUstep) |
|
65 |
@end itemize |
@end itemize |
66 |
|
|
67 |
@node Can I transfer archived data from GNUstep to Cocoa?, Does distributed objects work between GNUstep and Cocoa?, How about porting between Cocoa and GNUstep?, Compatibility |
@node Tools for porting, Can I transfer archived data from GNUstep to Cocoa?, How about porting between Cocoa and GNUstep?, Compatibility |
68 |
|
@subsection Tools for porting |
69 |
|
|
70 |
|
While the programming interface should be almost transparent between |
71 |
|
systems (expect for the unimplemented parts, of course), there are a |
72 |
|
variety of other files and tools that are necessary for porting |
73 |
|
programs. |
74 |
|
|
75 |
|
@table @samp |
76 |
|
@item ni2gmodel |
77 |
|
This program coverts nib files from any system, such as Cocoa or OPENSTEP to |
78 |
|
a gmodel format file. Gmodel can be read directly by GNUstep or you can |
79 |
|
convert this to a more GNUstep-native gorm format (using the Gorm interface |
80 |
|
modeller). |
81 |
|
|
82 |
|
@item Renaissance |
83 |
|
GNUstep Renaissance allows you to describe your user |
84 |
|
interfaces (that is, the windows in your application, and the buttons, |
85 |
|
boxes, textfields, etc in the windows) in simple and intuitive XML |
86 |
|
files, using an open, standard format describing the logic of the |
87 |
|
interface. It has a number of advantages over the proprietary nib format: |
88 |
|
portability, open standard, easy localization, themeability, and |
89 |
|
intelligent autolayout. |
90 |
|
|
91 |
|
@item OpenStep2GNUConverter and nfmake |
92 |
|
Two programs that allow you to convert PB files to GNUstep makefiles or |
93 |
|
compile a program on GNUstep directly from PB files. They probably work |
94 |
|
only for OPENSTEP systems and are a little out-of-date. |
95 |
|
|
96 |
|
@item StepTalk |
97 |
|
A portable scripting environment that lets your do scripting in almost |
98 |
|
any language you like. |
99 |
|
|
100 |
|
@end table |
101 |
|
|
102 |
|
@node Can I transfer archived data from GNUstep to Cocoa?, Does distributed objects work between GNUstep and Cocoa?, Tools for porting, Compatibility |
103 |
@subsection Can I transfer archived data from GNUstep to Cocoa? |
@subsection Can I transfer archived data from GNUstep to Cocoa? |
104 |
|
|
105 |
Apple's archiving format is proprietary and not documented, so this |
Apple's archiving format is proprietary and not documented, so this |
113 |
have this problem. |
have this problem. |
114 |
|
|
115 |
Your best bet is to implement your own archiving format that would work |
Your best bet is to implement your own archiving format that would work |
116 |
both with GNUstep and Cocoa. Fortuneatly, you don't have to start from |
both with GNUstep and Cocoa. Fortunately, you don't have to start from |
117 |
scratch, since this has been essentially done for you in the nib2gmodel |
scratch, since this has been essentially done for you in the nib2gmodel |
118 |
tool, which has an archiver that works both on GNUstep and Cocoa. It |
tool, which has an archiver that works both on GNUstep and Cocoa. It |
119 |
might be nice to split this off into a separate project to make it |
might be nice to split this off into a separate project to make it |
141 |
(property-lists) and can therefore be edited 'by hand') and binary |
(property-lists) and can therefore be edited 'by hand') and binary |
142 |
archive format (which can be edited by Gorm). There IS a conversion |
archive format (which can be edited by Gorm). There IS a conversion |
143 |
tool called nib2gmodel that can be compiled under OPENSTEP to convert |
tool called nib2gmodel that can be compiled under OPENSTEP to convert |
144 |
OPENSTEP nib files to GNUstep gmodel files. |
nib files to GNUstep gmodel files. |
145 |
|
|
146 |
@node Can one use the hybrid "Objective-C++", Is there a plan to support Java/YellowBox Bindings?, Can I use my original NIB files?, Compatibility |
@node Can one use the hybrid "Objective-C++", Is there a plan to support Java/YellowBox Bindings?, Can I use my original NIB files?, Compatibility |
147 |
@subsection Can one use the hybrid "Objective-C++" |
@subsection Can one use the hybrid "Objective-C++" |
148 |
|
|
149 |
No. at present the GNU compiler (gcc) does not support |
No. at present the GNU compiler (gcc) does not support |
150 |
"Objective-C++". Apple has submitted patches for this, but it is up to |
"Objective-C++". Apple is interested in adding back their implementation |
151 |
the GCC steering commitee to decide if they want to add them. If you |
to gcc and is slowly adding parts of it to the mainline gcc implementation. |
|
would like to see this, please politely and respectfully lobby them at |
|
|
@email{gcc@@gnu.org}. |
|
152 |
|
|
153 |
@node Is there a plan to support Java/YellowBox Bindings?, What if I compile GNUstep under OPENSTEP/MacOS X?, Can one use the hybrid "Objective-C++", Compatibility |
@node Is there a plan to support Java/YellowBox Bindings?, What if I compile GNUstep under OPENSTEP/MacOS X?, Can one use the hybrid "Objective-C++", Compatibility |
154 |
@subsection Is there a plan to support the Java/YellowBox Bindings? |
@subsection Is there a plan to support the Java/YellowBox Bindings? |
172 |
backend library to provide the interface, nobody has bothered to |
backend library to provide the interface, nobody has bothered to |
173 |
date. |
date. |
174 |
|
|
175 |
Also, the GNUstep base library is still being ported to Darwin. |
You should, however, be able to use a GNUstep program with an X11 server |
176 |
|
running on MacOSX. |
177 |
|
|
178 |
@node Is the Objective C API for GTK related?, How about implementing parts of the Application Kit with GTK?, What if I compile GNUstep under OPENSTEP/MacOS X?, Compatibility |
@node Is the Objective C API for GTK related?, How about implementing parts of the Application Kit with GTK?, What if I compile GNUstep under OPENSTEP/MacOS X?, Compatibility |
179 |
@subsection Is the Objective C API for GTK related? |
@subsection Is the Objective C API for GTK related? |
202 |
is a relatively thin layer and the advantages of GTK over direct |
is a relatively thin layer and the advantages of GTK over direct |
203 |
xlib or win32 calls is likely to be minimal. If/when GTK is ported |
xlib or win32 calls is likely to be minimal. If/when GTK is ported |
204 |
to more systems, a backend written using it could be a valuable |
to more systems, a backend written using it could be a valuable |
205 |
asset - volunteers are, as always, wecome. |
asset - volunteers are, as always, welcome. |
206 |
|
|
207 |
|
|
208 |
@c **************************************************************** |
@c **************************************************************** |
227 |
|
|
228 |
Good question. Read the tutorials at the GNUstep web site. Also look at |
Good question. Read the tutorials at the GNUstep web site. Also look at |
229 |
Apple's documentation (pointers in the Resources section on the GNUstep web |
Apple's documentation (pointers in the Resources section on the GNUstep web |
230 |
site. |
site.) |
231 |
|
|
232 |
@node How can I help with GNUstep?, Helping develop GNUstep, How can I get started programming?, Compiling and Developing |
@node How can I help with GNUstep?, Helping develop GNUstep, How can I get started programming?, Compiling and Developing |
233 |
@subsection How can I help with GNUstep? |
@subsection How can I help with GNUstep? |
249 |
project. Get in touch with the maintainer of the library you are |
project. Get in touch with the maintainer of the library you are |
250 |
working on about this. |
working on about this. |
251 |
|
|
252 |
Don't start with large-scale reorganisation of anything - instead, |
Don't start with large-scale reorganization of anything - instead, |
253 |
get a general idea in mind of what you want to do, and proceed as |
get a general idea in mind of what you want to do, and proceed as |
254 |
much as possible with incremental changes that don't break anything |
much as possible with incremental changes that don't break anything |
255 |
- that way you can make those incremental changes available to the |
- that way you can make those incremental changes available to the |
361 |
@node How can I help with the GNUstep website?, Why doesn't GDB support Objective-C?, How do I start writing applications?, Compiling and Developing |
@node How can I help with the GNUstep website?, Why doesn't GDB support Objective-C?, How do I start writing applications?, Compiling and Developing |
362 |
@subsection How can I help with the GNUstep website? |
@subsection How can I help with the GNUstep website? |
363 |
|
|
364 |
Talk to Adam Fedor @email{fedor@@gnu.org}, the maintainer. |
Talk to Adam Fedor @email{fedor@@gnu.org}, the maintainer. |
365 |
|
|
366 |
The GNUstep website is kept as a CVS module, but the largest portions |
The GNUstep website is kept as a CVS module, but the largest portions |
367 |
of it (the FAQ and the Documentation) are actually |
of it (the FAQ and the Documentation) are actually |
383 |
@node Why doesn't GDB support Objective-C?, , How can I help with the GNUstep website?, Compiling and Developing |
@node Why doesn't GDB support Objective-C?, , How can I help with the GNUstep website?, Compiling and Developing |
384 |
@subsection Why doesn't GDB support Objective-C? |
@subsection Why doesn't GDB support Objective-C? |
385 |
|
|
386 |
Apple has submitted their patches to make GDB work with Objective-C |
Update: GDB 6.0, which should come out sometime in September 2003 |
387 |
programs, and the GDB maintainer has said that he is interested in |
supports debugging of Objective-C code. |
|
integrating them. Now it appears that that there is just a lack of |
|
|
time and priority to get this done. You can ask about or lobby for this - |
|
|
see @url{http://sources.redhat.com/gdb/}. |
|
388 |
|
|
389 |
There are patches available on the gnustep web site if you want |
There are patches available on the gnustep web site for earlier versions |
390 |
to compile your own gdb (see @url{ftp://ftp.gnustep.org/pub/gnustep/patches}). |
of gdb (see @url{ftp://ftp.gnustep.org/pub/gnustep/patches}). |
391 |
|
|
392 |
|
|
393 |
@c ------------------------------------------------------------------- |
@c ------------------------------------------------------------------- |
412 |
class initialization on demand, delayed loading of classes, and |
class initialization on demand, delayed loading of classes, and |
413 |
initialization of static instances (such as @@""-style string objects). |
initialization of static instances (such as @@""-style string objects). |
414 |
|
|
415 |
It also has several improvements over NeXT's implementation: |
It also has several differences over NeXT's implementation: |
416 |
|
|
417 |
@itemize @bullet |
@itemize @bullet |
418 |
|
|
|
@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. |
|
|
|
|
419 |
@item GNU's runtime provides ``selector-types'' along with each |
@item GNU's runtime provides ``selector-types'' along with each |
420 |
selector; NeXT's does not. A selector-type is a string that describes |
selector; NeXT's does not. A selector-type is a string that describes |
421 |
the C variable types for the method's return and argument values. Among |
the C variable types for the method's return and argument values. Among |
422 |
other uses, selector-types is extrememly helpful for fast distributed |
other uses, selector-types is extremely helpful for fast distributed |
423 |
objects implementations, (see GNUstep Base Library Section, below). |
objects implementations, (see GNUstep Base Library Section, below). |
424 |
|
|
425 |
@item Many of the GNU functions have different names than their |
@item Many of the GNU functions have different names than their |
426 |
corresponding NeXT functions; the GNU names conform to the GNU coding |
corresponding NeXT functions; the GNU names conform to the GNU coding |
427 |
standards. |
standards. The GNUstep base library contains a compatibility header that |
428 |
|
works with both runtimes. You should use functions there or use OpenStep |
429 |
|
Foundation methods/functions instead of the basic |
430 |
|
runtime functions so that you code can run with either system. |
431 |
|
|
432 |
@end itemize |
@end itemize |
433 |
|
|
470 |
@node What is base's current state of development?, What are the features of GNU Distributed Objects?, What is the GNUstep Base Library?, GNUstep Base Library |
@node What is base's current state of development?, What are the features of GNU Distributed Objects?, What is the GNUstep Base Library?, GNUstep Base Library |
471 |
@subsection What is its current state of development? |
@subsection What is its current state of development? |
472 |
|
|
473 |
GNUstep base is currently stable and implements probably 99% of the |
GNUstep base is currently stable and, to the best of our knowledge, |
474 |
functionality of the OpenStep classes and most all of the new Cocoa |
implements all of the OpenStep functionality (except for a few classes |
475 |
classes. |
that we feel are not useful). It also implements most all of the new |
476 |
Normal work can already be done using the library since the |
Cocoa classes. However we do some things, like scripting, differently, |
477 |
missing 1 percent are the least-often-used features or are simply not |
so we don't implement all the Cocoa classes. |
|
up to date with the latest Carbon spec. |
|
478 |
|
|
479 |
@node What are the features of GNU Distributed Objects?, , What is base's current state of development?, GNUstep Base Library |
@node What are the features of GNU Distributed Objects?, , What is base's current state of development?, GNUstep Base Library |
480 |
@subsection What are the features of GNU Distributed Objects? |
@subsection What are the features of GNU Distributed Objects? |
486 |
|
|
487 |
[NOTE: The GNU distributed object facilities have the same ease-of-use |
[NOTE: The GNU distributed object facilities have the same ease-of-use |
488 |
as NeXT's; be warned, however, that they are not compatible with each |
as NeXT's; be warned, however, that they are not compatible with each |
489 |
other. They have different class heirarchies, different instance |
other. They have different class hierarchies, different instance |
490 |
variables, different method names, different implementation strategies |
variables, different method names, different implementation strategies |
491 |
and different network message formats. You cannot communicate with a |
and different network message formats. You cannot communicate with a |
492 |
NeXT NSConnection using a GNU NSConnection. |
NeXT NSConnection using a GNU NSConnection. |
512 |
* What is the GUI Library?:: |
* What is the GUI Library?:: |
513 |
* Explain the organization of the front- and back-ends:: |
* Explain the organization of the front- and back-ends:: |
514 |
* What is the current state of development of the front-end?:: |
* What is the current state of development of the front-end?:: |
515 |
* What is the current state of development of the X/DPS back-end?:: |
* What is the current state of development of the back-ends?:: |
516 |
@end menu |
@end menu |
517 |
|
|
518 |
@node What is the GUI Library?, Explain the organization of the front- and back-ends, GNUstep GUI Library, GNUstep GUI Library |
@node What is the GUI Library?, Explain the organization of the front- and back-ends, GNUstep GUI Library, GNUstep GUI Library |
546 |
separation between front- and back-end, because it allows different |
separation between front- and back-end, because it allows different |
547 |
platforms to share the large amount of front-end code. |
platforms to share the large amount of front-end code. |
548 |
|
|
549 |
@node What is the current state of development of the front-end?, What is the current state of development of the X/DPS back-end?, Explain the organization of the front- and back-ends, GNUstep GUI Library |
@node What is the current state of development of the front-end?, What is the current state of development of the back-ends?, Explain the organization of the front- and back-ends, GNUstep GUI Library |
550 |
@subsection What is the current state of development of the front-end? |
@subsection What is the current state of development of the front-end? |
551 |
|
|
552 |
Many of the classes are well implemented, if not thouroughly tested. |
Many of the classes are well implemented, if not thoroughly tested. |
553 |
See the GNUstep web sites and read status information contained in the |
See the GNUstep web sites and read status information contained in the |
554 |
distribution for the most up-to-date information. |
distribution for the most up-to-date information. |
555 |
|
|
556 |
@node What is the current state of development of the X/DPS back-end?, , What is the current state of development of the front-end?, GNUstep GUI Library |
@node What is the current state of development of the back-ends?, , What is the current state of development of the front-end?, GNUstep GUI Library |
557 |
@subsection What is the current state of development of the X/DPS back-end? |
@subsection What is the current state of development of the back-ends? |
558 |
|
|
559 |
|
There are several backends currently available: |
560 |
|
|
561 |
It works, but is slow and buggy. A lot of work could be done. |
@table @samp |
562 |
|
@item xlib |
563 |
|
This is the standard backend that runs on X11 and uses standard xlib |
564 |
|
calls for implementing drawing. It works well, but is limited in many |
565 |
|
areas due to the limitations of xlib drawing. |
566 |
|
@item art |
567 |
|
This is a very good backend that draws using the libart package and |
568 |
|
freetype with near PostScript quality and functionality. At some point |
569 |
|
it will become the standard. |
570 |
|
@item w32 |
571 |
|
This backend works on Windows and is currently very alpha quality. |
572 |
|
@end table |
573 |
|
|
574 |
@c ------------------------- GNUstep GUI Library ----------------------- |
@c ------------------------- GNUstep GUI Library ----------------------- |
575 |
|
|
588 |
It is a free implementation of a Display PostScript server based on the |
It is a free implementation of a Display PostScript server based on the |
589 |
GNU Ghostscript program developed by Aladdin Enterprises and now owned by artofcode LLC. |
GNU Ghostscript program developed by Aladdin Enterprises and now owned by artofcode LLC. |
590 |
|
|
591 |
|
At one point, GNUstep was using this for display purposes. However the |
592 |
|
development of DGS has stopped as it is too difficult to maintain and |
593 |
|
no one wanted to work on it. Now we are using other means of drawing. |
594 |
|
|
595 |
@node What is DGSs current state of development?, What is the relationship between the Display Ghostscript Server and X Windows?, What is the Display Ghostscript Server?, GNUstep DisplayGhostScript Server |
@node What is DGSs current state of development?, What is the relationship between the Display Ghostscript Server and X Windows?, What is the Display Ghostscript Server?, GNUstep DisplayGhostScript Server |
596 |
@subsection What is its current state of development? |
@subsection What is its current state of development? |
597 |
|
|