[comp.sys.next] NextStep and NeWS...

ali@polya.Stanford.EDU (Ali T. Ozer) (04/18/89)

In article <1041@nixctc.DE> pete@relay.nixctc.de (Pete Delaney) writes:
> ...  I just scan thru the NeXt news
>group and expected a bit more postscript programs being exchanged
>as in the comp.windows.news news-group.  

One of the goals of NextStep is to make sure the programmer does not have
to write any more PostScript than is necessary to do the his/her custom
drawing. All user interface objects exist in Objective C and are 
created/manipulated/destroyed using Objective C as opposed to PostScript.
The Application Kit routines do all the drawing necessary to render the
UI objects (buttons, switches, menu items, text items, etc). You even get
a set of C functions (NXDrawRidge, NXDrawWhiteBezel...) to let you
easily draw boxes and various other constructs without using PostScript.
Typically you will write most of your program in ObjC or C and drop to
PostScript whenever you want to do some custom drawing. (It's possible to
embed PostScript code in C or ObjC files, by the way.)

If you try to bypass the Application Kit and do all programming in 
PostScript, you will lose the user interface support and most of the window
system functionality provided by the Application Kit. (I think in NeWS most
of the user interface support is in PostScript, so it is possible to program
entirely in PostScript... Is that correct? I don't know for sure.)

All this does not mean you cannot execute a stand-alone PostScript
program in the NextStep environment; you can. You can either use a previewer
such as Yap or Preview, or use PostScript operators such as "run" from your
own programs... 

Ali Ozer, NeXT Developer Support
aozer@NeXT.com

peter@ficc.uu.net (Peter da Silva) (04/18/89)

In article <8530@polya.Stanford.EDU>, ali@polya.Stanford.EDU (Ali T. Ozer) writes:
> One of the goals of NextStep is to make sure the programmer does not have
> to write any more PostScript than is necessary to do the his/her custom
> drawing. All user interface objects exist in Objective C...

Is this really so desirable? I thought NeWS' model was a very nice division
of labor. You get a much greater degree of user programmability as well. Why
is it more desirable to hardcode interface decisions into the application?
-- 
Peter da Silva, Xenix Support, Ferranti International Controls Corporation.

Business: uunet.uu.net!ficc!peter, peter@ficc.uu.net, +1 713 274 5180.
Personal: ...!texbell!sugar!peter, peter@sugar.hackercorp.com.

jtn@zodiac.ADS.COM (John Nelson) (04/19/89)

In article <3901@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes:
>In article <8530@polya.Stanford.EDU>, ali@polya.Stanford.EDU (Ali T. Ozer) writes:
>> One of the goals of NextStep is to make sure the programmer does not have
>> to write any more PostScript than is necessary to do the his/her custom
>> drawing. All user interface objects exist in Objective C...
>
>Is this really so desirable? I thought NeWS' model was a very nice division
>of labor. You get a much greater degree of user programmability as well. Why
>is it more desirable to hardcode interface decisions into the application?

This is a very important question I think.  Can anyone at NeXT (or
someplace) please explain why NeXTStep is a better division of labour
than NeWS?  NeWS has some attractive features.  The only problem is
that it isn't a real shell of any kind ... i.e. Sun is still stuck in
this "run a thing on top of the cshell" model.





Sine Visa Ars Nihil Est
- John T. Nelson

avie@wb1.cs.cmu.edu (Avadis Tevanian) (04/19/89)

In article <7605@zodiac.UUCP> jtn@ads.com (John Nelson) writes:
>In article <3901@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes:
>>In article <8530@polya.Stanford.EDU>, ali@polya.Stanford.EDU (Ali T. Ozer) writes:
>>> One of the goals of NextStep is to make sure the programmer does not have
>>> to write any more PostScript than is necessary to do the his/her custom
>>> drawing. All user interface objects exist in Objective C...
>>
>>Is this really so desirable? I thought NeWS' model was a very nice division
>>of labor. You get a much greater degree of user programmability as well. Why
>>is it more desirable to hardcode interface decisions into the application?
>
>This is a very important question I think.

The premise behind the question is wrong.  Nothing is hard coded into an
application, other than the fact that it is using windows/views/menus/etc.
The implementation of these classes, i.e. NextStep, presents a single, uniform
user interface to the user.  Anyone can subclass these classes and get new
behaviour, but at the risk of presenting a different user interface.

The thing to remember about NextStep is that you generally program in C or
Objective-C (or Common Lisp or Objective Fortran).  If you have some
complicated graphics that you wish to use, you can drop into Postscript
whenver you wish, but we generally find that programming in C is much
easier than Postscript.

-- 
Avadis Tevanian, Jr.    (Avie)
Chief Operating System Scientist
NeXT, Inc.
avie@cs.cmu.edu or avie@NeXT.com
-- 

peter@ficc.uu.net (Peter da Silva) (04/20/89)

In article <4779@pt.cs.cmu.edu>, avie@wb1.cs.cmu.edu (Avadis Tevanian) writes:
> NextStep defines a user-interface, DPS/Objective-C/C provide a base
> for an implementation of it.  If you want to write your own user-interface,
> then you can program it in DPS if you wish.  We are just saying that
> programming in DPS (or NeWS) is, in general, a pain.

Mainly I'm talking about whether your UI is bound in with the application or
not. More on this at the end of this article.

> >The second advantage to this is that more of the processing of the user-
> >interface can go on in the display server, freeing the host and communication
> >channel of the burden. [ division of labor ]

> The importance of this is somewhat questionable (I think).

I disagree... it's pretty important. Not because...

> The fact that
> people even think about this these days is because the environment they
> are used to (e.g., UNIX with sockets) just doesn't do message passing
> fast enough.

...not because sockets are too slow, but because the communication channel
may be. I can buy an Acer Xebra 1000 for $1000 and hook it onto an ethernet
or SLIP serial port and run X remotely. It would be more efficient to run
NeWS on the server instead... send menu selection events instead of bitmaps.

The following is a digression...

> When you are doing animations (for example), do you really
> want to write your animation in Postscript, of course not, and we don't.

Hell no. I'd rather do animations in Director's scripting language, or in
forth. Write forth programs to generate videoscape 3-d animation files.
Which takes me back to postscript, now doesn't it?

> What if your animation needs to be synchronized with sound effects?

What if it needs to be driven by MIDI? "What if" is a trademark of HP :->.

> The basic problem with X/NeWS/... environments is that the generally
> run on top of UNIX, and UNIX just doesn't have the [ high speed message
> passing].  We have overcome this problem by using Mach ... about 10 times
> faster than with traditional UNIX facilities.

But it's still not real-time. How many messages a second could you pass through
a pipeline containing say, a MIDI input port, a couple of filters, to a MIDI
output port and the DSP?

Not entirely relevant, but I do think that *as yet* the advantages of Mach
haven't fully gelled. I believe it will eventually become the final solution
to te real-time-UNIX problem... but it's not there yet.

Anyway, back to the point. Animation really isn't a user-interface process
so it's kind of a straw man... I'm not talking about doing EVERYTHING in
DP or NeWS or VideoLisp or whatever. I'm talking about a division of labor
between the UI and the application.

This division of labor question is still wide open. I certainly haven't seen
anyone claiming they've solved it.

> >Personally, I think a lisp-like language would be better than postscript, but
> >there is a certain historical advantage to sticking with PS.

> Then you'll be happy to use Common Lisp with support for NextStep in our 1.0
> release.

But I can't write Common Lisp code and change the global behaviour of my
desktop. The interface policy decisions are still tied up in compiled code.
What if I want to use pac-man menus? What if I want to use that second mouse
button for something useful? Like having it pop up menus instead of leaving
them around all the time? Pac-man menus? With the DSP going wocka-wocka-
wocka...
-- 
Peter da Silva, Xenix Support, Ferranti International Controls Corporation.

Business: uunet.uu.net!ficc!peter, peter@ficc.uu.net, +1 713 274 5180.
Personal: ...!texbell!sugar!peter, peter@sugar.hackercorp.com.

conrad@cgl.ucsf.edu (Conrad Huang) (04/21/89)

In article <4779@pt.cs.cmu.edu> avie@wb1.cs.cmu.edu (Avadis Tevanian) writes:
>Well, I think the confusion here is perhaps that making NextStep/NeWS
>comparisons is the wrong comparison.  It would be more appropriate to
>compare NextStep with the Mac user-interface or Open Look...  It would
>also be more appropriate to compare DPS with NeWS.

Perhaps comparing user interface specifications is appropriate, but comparing
DPS with NeWS definitely is not.  DPS provides output capabilities only, while
NeWS is a complete window environment *including input management*.  It is
possible to write a program for NeWS and be guaranteed that it will work on
most NeWS systems (modulo bugs) but there is *absolutely no way* to write a
portable DPS program.

>NextStep defines a user-interface, DPS/Objective-C/C provide a base
>for an implementation of it.  If you want to write your own user-interface,
>then you can program it in DPS if you wish.  We are just saying that
>programming in DPS (or NeWS) is, in general, a pain.

The problem with trying to program in DPS is that there is no way to
communicate with the window server other than through the AppKit.  (I
have read parts of the manual but by no means all, so correct me if I'm
wrong.)  This means you must at least use Objective C to create an
Application class object.

>Let's also not forget that an important part of NextStep is InterfaceBuilder,
>which let's one build NextStep user-interfaces for applications with
>very little to no programming (other than the guts of your application).

If InterfaceBuilder is an integral part of NextStep, I am certainly glad
that "Interface Builder is greatly changed in its appearance" (from the
"0.9/1.0 Release Description").  The version on Release 0.8 is at best a
toy.  Better data flow style editors have been built, even for the Evans
& Sutherland PS300 function networks (my one gratuitous insult in this
posting :-).  [Even further off the subject, the PS300 function networks
are hell, regardless of what they say in comp.graphics.]

>>The second advantage to this is that more of the processing of the user-
>>interface can go on in the display server, freeing the host and communication
>>channel of the burden. [ division of labor ]
>
>The importance of this is somewhat questionable (I think).  The fact that
>people even think about this these days is because the environment they
>are used to (e.g., UNIX with sockets) just doesn't do message passing
>fast enough.  When you are doing animations (for example), do you really
>want to write your animation in Postscript, of course not, and we don't.
>What if your animation needs to be synchronized with sound effects?  Do
>you write that all in Postscript also?  No, of course not.  The basic problem
>with X/NeWS/... environments is that the generally run on top of UNIX, and
>UNIX just doesn't have the right primitives to support them (in terms of
>high speed message passing).  We have overcome this problem by using Mach
>primitives which allow us to synchronize with the window server about 10
>times faster than with traditional UNIX facilities.

Unfortunately, those of us on the same network but not running Mach cannot
"synchronize with the window server" at all.  The advantage of NeWS is that
I can run my application on our Vax and have the graphics appear on our Sun
*using only standard network software*.  With some of the computation that
we would like to do, animating the results requires a supercomputer class
CPU.  Unfortunately, I don't know of many such systems that run Mach or
speak with NeXT window systems.  I certainly agree that the greater
the bandwidth between the application and the window server, the greater the
programming flexibility.  But connectivity should count for something as well.

>>Personally, I think a lisp-like language would be better than postscript, but
>>there is a certain historical advantage to sticking with PS.
>
>Then you'll be happy to use Common Lisp with support for NextStep in our 1.0
>release.

The main gripe I have with NextStep currently is that there is no *simple*
graphics access.  If I am working on an application that will have a user
interface, then NextStep may be helpful.  But I can't simply use the graphics
to help debug a program.  When my translator/compiler runs, I'd like to
show my DAG and make sure it is right.  I'd also like to highlight nodes when
I generate code for them.  To do this, I must create a whole lot of code that
will eventually be discarded (or at least archived) once my program works
properly.  The time investment for this debugging code is greater than I am
willing to spend and I've resorted to the old classic "print statement" method.
With a nice platform like the NeXT, this is somehow distasteful.

>-- 
>Avadis Tevanian, Jr.    (Avie)
>Chief Operating System Scientist
>NeXT, Inc.
>avie@cs.cmu.edu or avie@NeXT.com
>-- 

Eagerly awaiting 0.9,

Conrad Huang
conrad@cgl.ucsf.edu

gore@eecs.nwu.edu (Jacob Gore) (04/21/89)

/ comp.sys.next / avie@wb1.cs.cmu.edu (Avadis Tevanian) / Apr 18, 1989 /
>The thing to remember about NextStep is that you generally program in C or
>Objective-C (or Common Lisp or Objective Fortran).

Objective Fortran???

Jacob Gore				Gore@EECS.NWU.Edu
Northwestern Univ., EECS Dept.		{oddjob,chinet,att}!nucsrl!gore

avie@wb1.cs.cmu.edu (Avadis Tevanian) (04/21/89)

In article <3931@ficc.uu.net> peter@ficc.uu.net (Peter da Silva) writes:
>...not because sockets are too slow, but because the communication channel
>may be. I can buy an Acer Xebra 1000 for $1000 and hook it onto an ethernet
>or SLIP serial port and run X remotely. It would be more efficient to run
>NeWS on the server instead... send menu selection events instead of bitmaps.

We don't send bitmaps, we send Postscript.  I make the point about speed of
communication because it is most important when you need to do round-trip
communication between application and window server.  This simple fact
means that if you expect applications to ever need to interact with the
window server is a fast fashion (for sound, more computation, or whatever),
the speed of doing that round-trip communication is key to application
performance.  It doesn't matter if 99.9% of the application is in Postscript,
because if that .1% needs fast interaction with the window server and you
have a slow communication path, you lose.

>
>The following is a digression...
>
>> When you are doing animations (for example), do you really
>> want to write your animation in Postscript, of course not, and we don't.
>
>Hell no. I'd rather do animations in Director's scripting language, or in
>forth. Write forth programs to generate videoscape 3-d animation files.
>Which takes me back to postscript, now doesn't it?
>

Again, only if everything is in postscript.  How about adding sound
effects now?  And music synthesis in the DSP?  And...

>> What if your animation needs to be synchronized with sound effects?
>
>What if it needs to be driven by MIDI? "What if" is a trademark of HP :->.
>

Exactly my point!  You can't write everything in Postscript.  You shouldn't
have to write everything in Postscript.

>But it's still not real-time. How many messages a second could you pass through
>a pipeline containing say, a MIDI input port, a couple of filters, to a MIDI
>output port and the DSP?
>

We have done experiments with the music kit controlling synthesised
instruments running in the DSP using MIDI input and it does work in
real-time.

>Not entirely relevant, but I do think that *as yet* the advantages of Mach
>haven't fully gelled. I believe it will eventually become the final solution
>to te real-time-UNIX problem... but it's not there yet.

Glad to see you have faith in Mach.  I agree with you here, there is much
more work to be done here to fully solve the problems but we are well on
our way.

>
>Anyway, back to the point. Animation really isn't a user-interface process
>so it's kind of a straw man... I'm not talking about doing EVERYTHING in
>DP or NeWS or VideoLisp or whatever. I'm talking about a division of labor
>between the UI and the application.

Yes, and we agree, we have a layer of NextStep known as the "packages" which
is that part of NextStep that runs entirely in the window server.  It does
things like window movement, activation, ...  And as it turns out, you
as a user can load your own packages.  It doesn't allow to reimplement
the entire UI, but then again, if you do that, you don't have NextStep
anymore.  Remember, it makes little sense to reimplement window/menus/...
at the NextStep layer, because you no longer have NextStep.  If you want
to implement a different UI and allow for everything to be rewritten you
can certainly do that in DPS.


So, can we lay this to rest by saying that NextStep is a specific UI for
which it make no significant sense to reimplement features and that if
you want to have a UI in which any feature was user-implementable you
could write it in DPS?
-- 
Avadis Tevanian, Jr.    (Avie)
Chief Operating System Scientist
NeXT, Inc.
avie@cs.cmu.edu or avie@NeXT.com
-- 

avie@wb1.cs.cmu.edu (Avadis Tevanian) (04/21/89)

In article <11532@cgl.ucsf.EDU> conrad@zeno.mmwb.ucsf.edu.UUCP (Conrad Huang) writes:
>The problem with trying to program in DPS is that there is no way to
>communicate with the window server other than through the AppKit.  (I
>have read parts of the manual but by no means all, so correct me if I'm
>wrong.)  This means you must at least use Objective C to create an
>Application class object.

It is possible to communicate directly with the window server in a C
program.  No appkit, no Objective C is necessary.  It's probably buried
somewhere in the documentation, but I am not sure.  (We have added
operators to Postscript to handle events, they are not part of DPS, per se).

>Unfortunately, those of us on the same network but not running Mach cannot
>"synchronize with the window server" at all.  The advantage of NeWS is that
>I can run my application on our Vax and have the graphics appear on our Sun
>*using only standard network software*.  With some of the computation that
>we would like to do, animating the results requires a supercomputer class
>CPU.  Unfortunately, I don't know of many such systems that run Mach or
>speak with NeXT window systems.  I certainly agree that the greater
>the bandwidth between the application and the window server, the greater the
>programming flexibility.  But connectivity should count for something as well.
>

As the song goes, "Don't worry, be happy!"  Our Postscript window server,
in addition to listening to Mach ports, also listens on a TCP socket.  In
0.8, this functionality is built into the window server.  In 0.9, we
moved it out to a special "protocol converter" program which listens
on the TCP socket and converts to Mach IPC.  This means you can connect
to our window server from any machine that supports TCP.  When we make
Mach a standard, this won't be necessary :-).

>The main gripe I have with NextStep currently is that there is no *simple*
>graphics access.  If I am working on an application that will have a user
>interface, then NextStep may be helpful.  But I can't simply use the graphics
>to help debug a program.  When my translator/compiler runs, I'd like to
>show my DAG and make sure it is right.  I'd also like to highlight nodes when
>I generate code for them.  To do this, I must create a whole lot of code that
>will eventually be discarded (or at least archived) once my program works
>properly.  The time investment for this debugging code is greater than I am
>willing to spend and I've resorted to the old classic "print statement" method.
>With a nice platform like the NeXT, this is somehow distasteful.
>

this should be *very* easy to do.  With Interface Builder you can get
an "empty" application with no programming.  Now drop in your graphics
routines, using Postscript to do the graphics of course.  And if you
wish, just ignore the Application Kit and the rest of NextStep.  But
while your in IB, why not add an Info Panel, and a Help Window, they require
no programming and come essentially for free along with your free
menu, resizeable window, close box, ...

And if you want, you can even ignore all of this and just hook up directly
to the window server (I forget the call, but its documented) and draw
your postscript directly.

-- 
Avadis Tevanian, Jr.    (Avie)
Chief Operating System Scientist
NeXT, Inc.
avie@cs.cmu.edu or avie@NeXT.com
-- 

mbkennel@phoenix.Princeton.EDU (Matthew B. Kennel) (04/22/89)

In article <4792@pt.cs.cmu.edu> avie@wb1.cs.cmu.edu (Avadis Tevanian) writes:
>
>Yes, and we agree, we have a layer of NextStep known as the "packages" which
>is that part of NextStep that runs entirely in the window server.  It does
>things like window movement, activation, ...  And as it turns out, you
>as a user can load your own packages.  It doesn't allow to reimplement
>the entire UI, but then again, if you do that, you don't have NextStep
>anymore.  Remember, it makes little sense to reimplement window/menus/...
>at the NextStep layer, because you no longer have NextStep.  If you want
>to implement a different UI and allow for everything to be rewritten you
>can certainly do that in DPS.
>
>
>So, can we lay this to rest by saying that NextStep is a specific UI for
>which it make no significant sense to reimplement features and that if
>you want to have a UI in which any feature was user-implementable you
>could write it in DPS?

Ok, here's the big question.  Is the _user interface as seen by the
user_ separate from the window system?  Is the "toolkit interface" seen by the
programmer separate from the window system?  

Here's what I mean:  I can see that if somebody wanted to do a totally 
different kind of user interface, this programmer would have to create all
the structures &c and write the appropriate code to display them.  That's fine,
you can't expect the given system to be omniscient enough to do everything
for you.

But here's the other question: can you replace the code & 
appearance/superficial features of the user interface, but maintain the
same programmer interface so that existing programs will work in this
new way without change?  For example, taking a Mac analogy, I might want to
make some window type with a "close box" that's greeen & polka-dotted that you
need to hit control-twaddle-double-bucky-left-mouse to activate, but from
the application's point of view, you've still just hit the "close box".
How much do the applications programs assume about the particular
_implementation_ of the user interface?  (not very much I hope)

If you have shared libraries, this might be practical.  A customizable but
still compatible user interface.

>-- 
>Avadis Tevanian, Jr.    (Avie)
>Chief Operating System Scientist
>NeXT, Inc.
>avie@cs.cmu.edu or avie@NeXT.com
>-- 

Matt Kennel
mbkennel@phoenix.princeton.edu

peter@ficc.uu.net (Peter da Silva) (04/24/89)

In article <4792@pt.cs.cmu.edu>, avie@wb1.cs.cmu.edu (Avadis Tevanian) writes:
> Exactly my point!  You can't write everything in Postscript.  You shouldn't
> have to write everything in Postscript.

Who the hell said you should?

> So, can we lay this to rest by saying that NextStep is a specific UI for
> which it make no significant sense to reimplement features and that if
> you want to have a UI in which any feature was user-implementable you
> could write it in DPS?

What if you want to fix perceived flaws in NextStep, or enhance it? How do
I change NextStep to use pac-man menus? Or use the second mouse button
effectively? Or suppose I want to use your applications under my UI?
-- 
Peter da Silva, Xenix Support, Ferranti International Controls Corporation.

Business: uunet.uu.net!ficc!peter, peter@ficc.uu.net, +1 713 274 5180.
Personal: ...!texbell!sugar!peter, peter@sugar.hackercorp.com.

bob@allosaur.cis.ohio-state.edu (Bob Sutterfield) (04/25/89)

In article <4793@pt.cs.cmu.edu> avie@wb1.cs.cmu.edu (Avadis Tevanian) writes:
   This means you can connect to our window server from any machine
   that supports TCP.  When we make Mach a standard, this won't be
   necessary :-).

Will I be able to get source to your toolkit sometime after Mach
becomes the standard?  Because I don't want to go to the trouble of
porting Mach to all the various machines on our network just to find-
that they still can't do anything useful to display on the NeXT box.
It's not that I wouldn't love to have Mach everywhere, but NeXT
compatibility isn't big on my list of reasons to go ahead with the
effort - especially since I wouldn't have NeXT compatibility even
then.

Even if your server listens on a TCP socket, it doesn't do me any good
unless I can write and compile NeXTStep applications on the Butterfly
down the hall (which already does Mach ports anyway) and the Cray
across campus (which likely will never run Mach).

I think you can do more to advance NeXT's cause by releasing sources.

(Does this sound like a broken record, anyone?)

(BTW, I'm really glad to see more NeXT presence here, particularly of
those "in the know"!  Don't let the ferocity of some of the opinions
change your mind about participation - only about policies :-)

rossh@umd5.umd.edu (Hollis "NeXT-Dood" Ross) (04/28/89)

In article <12670022@eecs.nwu.edu> gore@eecs.nwu.edu (Jacob Gore) writes:
>/ comp.sys.next / avie@wb1.cs.cmu.edu (Avadis Tevanian) / Apr 18, 1989 /
>>The thing to remember about NextStep is that you generally program in C or
>>Objective-C (or Common Lisp or Objective Fortran).
>
>Objective Fortran???
>
>Jacob Gore				Gore@EECS.NWU.Edu
>Northwestern Univ., EECS Dept.		{oddjob,chinet,att}!nucsrl!gore

Steve Jobs said that they have plans for Objective-Cobol.  He was 
just joking, but the concept sure does give me the willies.  :-)

================================================================================
"Gozer the Gozarian, as a duly appointed represenative   | rossh@umd5.umd.edu
 of the, State, County and City of New York, I do hereby | Bitnet: rossh@umdd
 command you to cease all paranormal activity and return |---------------------
 forthwit to your place of origin, or the nearest 	 | Bill the cat says
 convient parallel dimension" -  Ghostbusters	 	 | "Just say Ack!"
================================================================================