Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Why were workspace removed from J7.0

80 views
Skip to first unread message

Scott Pallack

unread,
Jan 13, 1994, 9:05:38 PM1/13/94
to
It seems that ISI removed the workspace concept from J in version 7.0.
Why? IMHO one of the best things about APL was the workspace. I could
fiddle around with functions and data to my heart's content.
At this point, J seems like just another programming language with an
incredibly ugly syntax, atrocious documentation and numerous non-obvious
"gotcha"s.

Scott Pallack
sky...@satelnet.org

Reiter Clifford A

unread,
Jan 15, 1994, 3:03:16 PM1/15/94
to

I am using workspaces under J-Win 7.0 and haven't had any problems.
ISI says that they are still supported, but will not be supported
in later releases. They suggest we move our saved workspaces to scripts
and do new work in scripts. I admit, most of the time I prefer scripts -
but certainly not all the time - for example, so far I keep my grades
in a workspace. I hope ISI doesn't drop support for ws until their
support for scripts is rather complete. I.e., functions and objects
(included boxed) can be saved to a script by the system (I.e., we
don't have to design the functions to do it).

I remember starting with J to be very frustrating for about 4 or 5 days,
now I love it. I suggest you post / mail questions and frustrations.
Best,
Cliff
--
Clifford A. Reiter
Mathematics Department, Lafayette College
Easton, PA 18042 USA, 215-250-5277

Emmett McLean

unread,
Jan 16, 1994, 4:16:16 AM1/16/94
to
Scott Pallack writes:
> It seems that ISI removed the workspace concept from J in version 7.0.
>Why? IMHO one of the best things about APL was the workspace. I could
>fiddle around with functions and data to my heart's content.

I'm not clear on why you can't fiddle around without
workspaces. Can't you click on the interesting
parts of a session and save the result into a file?

Aside from that, my understanding is that now that locales are
implemented there isn't a need for the workspace. Locales
are superior to workspaces in that they keep verbs with the
same name in different scripts from colliding in the same
session. The same idea implemented in C++ implemented via
function overloading and classes is not nearly as elegant.

Locales can also be used to implement a "file within a directory"
implementation of a component file system in such a way that
system overhead is left to the system. Only a simple name
manager is required to make the facility independent of
its hardware environment.

There is also a philosphical explanation. J programmers generally
don't see J as the center of the software development universe. To them
it feels just as natural call J from another application, read
a script and execute some verbs, and then return to the other
application. (If you know the source.)



> At this point, J seems like just another programming language with an
>incredibly ugly syntax, atrocious documentation and numerous non-obvious
>"gotcha"s.
>

You are not the first to complain. For a well written intro to
J I suggest Dr. Smillie's "Some Notes on Introducing J with
Statistical Examples available at ftp.cs.ualberta.ca
in pub/smillie/intj.ps. Programs from the paper are in the file
intj.doc.

There is a modest learning curve to J and the documentation is
terse. But once you know it feels very APL like. Um... only easier.

-e

Raul Deluth Miller

unread,
Jan 16, 1994, 8:20:44 AM1/16/94
to
Clifford Reiter:

. I hope ISI doesn't drop support for ws until their support for
. scripts is rather complete. I.e., functions and objects (included
. boxed) can be saved to a script by the system (I.e., we don't have
. to design the functions to do it).

Well, it isn't hard to design such functions using the current script
and locale features. I started working on this, when I realized that
5!:3 is still supported, and that it might be possible to maintain
backwards compatability with 2!: even after workspace support is
removed.

However, even though the documentation for the ws functions and 5!:3
claims conformance with the WorkSpace Interchange Standard, they use
incompatible formats. And, 5!:0 can't deal with the format saved by
2!:2. This is true of j6.2 [which includes documentation for the 2!:
series functions] as well as of j7 [which leaves out that
documentation].

Does anyone know the full story on WSIS?

Raul D. Miller
<rock...@nova.umd.edu>

Brian Schott

unread,
Jan 16, 1994, 7:38:07 PM1/16/94
to

Emmett McLean wrote:
" Aside from that, my understanding is that now that locales are
implemented there isn't a need for the workspace. Locales
are superior to workspaces in that they keep verbs with the
same name in different scripts from colliding in the same
session. The same idea implemented in C++ implemented via
function overloading and classes is not nearly as elegant."

I recently read in _Gimme Arrays!_ "Locales are a new feature of J. After
a debate that has gone on for several years, ISI finally said 'enough'
[quotes added] and has implemented locales in J."

Is the controversy of locales linked to the dropping of ws? That is, are
the two changes really two aspects of one change?

And what is the "controversy?"


--
Brian Schott/Decision Sciences Dept. qmd...@gsusgi2.gsu.edu
College of Business Administration 404-651-4070
Georgia State University interests: approx. reasoning,
Atlanta, Georgia USA 30303-3083 (B=) decision support systems

Raul Deluth Miller

unread,
Jan 18, 1994, 11:19:48 AM1/18/94
to
Clifford Reiter wrote:
. . I hope ISI doesn't drop support for ws until their support for
. . scripts is rather complete. I.e., functions and objects
. . (included boxed) can be saved to a script by the system (I.e.,
. . we don't have to design the functions to do it).

I responded:
. Well, it isn't hard to design such functions using the current
. script and locale features.

Well, of course design and implementation are not necessarily the same
thing. I'm getting lots of core dumps [running J 7 on a Solaris
machine], and I don't really have a lot of use for load/save
emulation, so I'm just going to post what I've got so far...

It's incomplete, but maybe someone can get it working on some other
kind of machine. Hopefully, what I'm trying to do is clear enough
that any of my coding errors can be isolated.

Cautions: (1) This code may have errors.
(2) J has errors.
(3) the results of some of my analog functions aren't quite
what they should be for true emulation. I wasn't
planning on addressing this until I got the code
working.
(4) the analog functions are only designed to work in the
__ locale.

Good luck,

Raul D. Miller
<rock...@nova.umd.edu>

NB. conjunctions
NB. bind -- f bind y is f@(y&[)@]

NB. adverbs
NB. emptily -- emptily result
NB. ing -- gerund form
NB. in_main -- action will be in locale __
NB. in_t -- action will be in locale _t_
NB. privately -- action will be in emptily locale _t_
NB. savews -- afterwords, save current locale in designated "ws"

NB. verbs
NB. allnames -- the name of every object in the current locale
NB. eraseall -- erase any kind of name
NB. from_t -- copy objects in locale _t_ to locale __
NB. makes -- build a script to define current locale
NB. nc -- name class in current locale
NB. nl -- name list in current locale
NB. prot_main -- remove from name list all names defined in locale __
NB. prot_t -- remove from name list all names defined in locale _t_
NB. sscript -- silent script in current locale
NB. to_t -- copy objects in locale __ to locale _t_
NB. write -- write to file

NB. wsnc -- analog to 2!:0
NB. wsnl -- analog to 2!:1
NB. wssave -- analog to 2!:2
NB. wspsave -- analog to 2!:3
NB. wscopy -- analog to 2!:4
NB. wspcopy -- analog to 2!:5
NB. wserase -- analog to 2!:55
NB. wsconvert -- convert old workspace format to new "script based" format

bind =:[. @ (&[) (@])

emptily =: ].(] (i.0 0)&[)
ing =: '{.x.`[':1
in_main =: f. ing (&('':(0 :4))) (&,) (&<)
$.=.1,(2+#y.),4
t__=:x.\ ([ 4!:55@((<'t')&[)) NB. 1
r=.t__>{.y. NB. 2 monadic fn
r=.(>{.y.)t__>{:y. NB. dyadic fn
r NB. 3 result
)
in_t =: f. ing (&('':(0 :4))) (&,) (&<)
$.=.1,(2+#y.),4
t_t_=:x.\ ([ 4!:55@((<'t')&[)) NB. 1
r=.t_t_>{.y. NB. 2 monadic fn
r=.(>{.y.)t_t_>{:y. NB. dyadic fn
r NB. 3 result
)
privately =: f. ing (&('':(0 :4))) (&,) (&<)
$.=.1 2 3,(4+#y.),1 2 6
t_t_=:(4!:55 +. 4!:56)@(4!:1) NB. 1
t_t_>:i.6 NB. 2 clear locale _t_
t_t_=:x.\ ([ 4!:55@((<'t')&[)) NB. 3
r=.t_t_>{.y. NB. 4 monadic fn
r=.(>{.y.)t_t_>{:y. NB. dyadic fn
r NB. 6 result
)
savews =:(`((makes write ])`])) \

allnames =:nl bind (>:i.6)
eraseall =:4!:55 +. 4!:56
from_t =:[ ".@(, '__=:'"_ , '_t_'"_)@>
makes =:;@:(((10{a.)"_ , ] , '=:'"_ , 5!:5@<)&.>)@allnames
nc =:4!:0
nl =:4!:1
prot_main =:-. (allnames in_main)
prot_t =:-. (allnames in_t)
sscript =:[ 0!:3
to_t =:[ ".@(, '_t_=:'"_ , '__'"_)@>
write =:1!:2

wsnc =:'':(nc@sscript privately)
wsnl =:(allnames@sscript privately) :(nl@sscript privately)
wssave =:((makes write ])in_main) :(to_t@sscript savews privately)
wspsave =:(allnames in_main$:]) :(to_t@prot_t@sscript savews emptily privately)
wscopy =:(0!:3 in_main) :(to_main@sscript emptily privately)
wspcopy =:(allnames in_main$:]) :(to_main@prot_main@sscript emptily privately)
wserase =:'':(eraseall@sscript savews privately)
wsconvert =:2!:4 savews emptily privately

0 new messages