======================================================================= 1 ===
Date:    Tue, 1 Nov 1994 17:18:57 GMT
From:    "Jurriaan W Kalkman" <S8908575@mail.student.utwente.nl>
Subject: Re: FAQ wanted

On 31 Oct 94 22:37:51 -0800, 
David Papay  <papayd@gtewd.mtv.gtegsc.com> wrote:

>Could someone either email me the FAQ for this group or tell me where I can
>FTP it?  Thanks.
>
>-- 
>                             |         |
>David Papay                  |    o    | 
>papay@acm.org  (preferred)   |  ^/---  | <insert your favorite disclaimer here
>
>dpapay@aol.com (alternate)   |  />     |
>                             |         |
>                             | fleche! |
>
Searched with Gopher yet?

Jurriaan Kalkman                 
                               
S8908575@student.utwente.nl    
tel. 074-437002 (GMT)                               
- I Like Robinia's           


======================================================================= 2 ===
Date:    Tue, 1 Nov 1994 16:06:39 GMT
From:    george@bcstec.ca.boeing.com (Harry G. George)
Subject: Commercialization of Modula-3

-----------------------
DISCLAIMER:
This is not an official Boeing position.  However, I believe this
is in the best interests of the manufacturing sector in general and 
thus Boeing.  (The Boeing Company may of course disagree.)

Manufacturing companies are not in the business of
designing languages, developing compilers, or writing software.
We would like to just buy COTS products, but we know
there are times when we must roll our own software or at 
least interface with COTS products.  So we end up using 
(and being frustrated by) quite a few languages and compilers.
We even find ourselves informally explaining our needs to
potential vendors, in hopes the market will provide the
kinds of tools we really need.

That is the point of this note -- it is NOT an RFI, RFQ, RFP,
or official query of any sort.  Nor should it be used in
marketing literature as "Boeing wants...".  This is just
one analyst's attempt to coax potential vendors to bring a
set of services to market.  No promises, no commitments.
-----------------------

Situation:
US firms have lots of COBOL business code, lots of Fortran
scientific and engineering code, a dash of Ada embedded code,
lots of C UNIX code, and a sprinkling of others.  
The great rush of the 1990's is to convert everything to C++.
But after a few years of trying, we are getting a glimmer of trouble,
so the next rush is to use Smalltalk.

Personally, I don't think any of those languages is maintainable
or supportive of reuse in a mixed language, COTS-dominated, 
megaprogramming context.  Technically,
Modula-3 looks like the best candidate for such a task.  It
has all the key features, yet remains elegantly simple.

Unfortunately, it is just a research tool so far.  To be taken
seriously as a supplement or replacement for COBOL, Fortran, C,
C++, Smalltalk, or Ada, it must have more.

Target:
1. Technical
   Ability to use C as "main", and link in M3 modules.
   Ability to auto-translate C ".h" files to M3 ".i3" files.
     (hand-tweaking may be acceptable, but the bulk must be auto)
   An on-going coordinated effort to make ".i3" files for
     C and C++ packages as they appear. 
   An on-going coordinated effort to port to new UNIX and PC
     boxes as they appear.
   Simple binary installation package for MS Windows 95 and NT
     (available on-line, on CD-ROM, and on 3.5" diskettes)
   Simple installation for most UNIX boxes
     (assume on-line access)
   

2. Social/Commercial
   Second source for compiler and environment
     (even if someone just redistributes DEC's code)
   Second implementation of compiler and environment
     (to assure some protection from DEC redirections)
   Email and phone support for installation
   Training support, on-site
   Email and phone support for helpline
   Contract consulting support for major projects
   Market penetration on MS Windows 95 and NT
     (e.g., 10% of those who currently use C++)
   Awareness in academe
     (e.g., speakers refer to it at OOPSLA '95; reviewed articles
     on language semantics or reuse studies begin to appear)
   

Plan:
1. Penetrate the MS Windows market
   From the sounds of it, M3-Lite will be good product. Need to
   get out press releases to standard PC journals.  For those
   without high-speed net access, need source and binaries
   on 3.5" diskettes (roughly at cost).  Maybe bundled
   with Nelson book, Harbison book (with errata sheet), and
   printed manual.  

   Then organize a systematic effort to write articles for PC
   journals about trendy software which just happens to use M3.
   Device drivers, genetic algorithms, 3D packages, multithreading,
   Lisp-lists, constraint programming, AST manipulation, etc. 
   Most midnight hackers will see how cleanly M3 handles tough
   jobs, even if they start by translating to C and C++.

2. Penetrate academe
   A few hardy souls already use M3 for teaching imperative
   programming.  But for grad students, it probably needs a
   hook to C++ and Smalltalk.  How about an M3-to-C++ translator, 
   which generates idiomatically correct C++ (with comments)?
   The research issue is how to recognize and translate idioms;
   the payoff is that one can use M3 as a high-level code generator,
   and then maintain the output if need be.  [We are not talking
   C-as-portable-assembler here.]

   Similarly, translators to each of the other legacy languages
   could be attempted.  The attempts would of course identify
   M3 language features which could not be handled in the target
   language -- thus demonstrating how crippled they are.
   
   Also, how about M3 for embedded systems?  Investigate hard 
   realtime garbage collection, multithreading, and exceptions.
   ESPECIALLY investigate impact of using a safe language to
   do safety critical systems.  

3. Establish regional consulting  
   Make contact with an established independent consultant in each 
   region.  He/she (hereafter "he") becomes enthused about M3
   as a language, and even more by the market opportunity in 
   training and after support.  He assists installations, 
   provides training seminars, does talks to local computing
   societies, and does constract consulting.  As needed, he
   contacts others on the net who have expressed willingness
   to help for free or for fee.
   
   The purpose is not to destroy the informal contacts and
   help among user groups.  The purpose is instead to provide 
   a commercial contact, so that a hard-boiled, no-nonsense
   non-techie business person (hereafter  "she") can sign 
   a support contract.  She may be vaguely aware that M3 is the 
   greatest thing since sliced bread, but she sure as h### does
   not want to get stuck with an orphan language -- dependent on
   volunteers somewhere in cyberspace.

4. I get to recommend it
   Given all the above, I'll be able to go to my management and
   say, "I think our best bet is to use this Modula-3 code
   generator.  It generates commented C++, but you
   can also get native code compilers for PC's and UNIX boxes.
   Maybe you have seen some of the articles about it in Byte
   and Dr. Dobbs.  It has good second sourcing and there are
   consulting services available.  I suggest we use it for
   the XYZ project.  We can always back out to using C++ if 
   it doesn't pan out." 
   
---------------------

Ok, folks:  Who's in charge here, anyway? Is this already
in the works, and I just didn't hear?

Thanks, 

email to: george@garden.ca.boeing.com
-- 
Disclaimer:  Any opinions expressed herein are my own and
             not those of The Boeing Company.
Contact:     Harry George, BCAG Advanced Software Technology  
Phone:       (206) 237-6915  Org: 6-6541  M-S: 6H-WT


======================================================================= 3 ===
Date:    1 Nov 1994 13:24 EST
From:    w_costa@unhn.unh.edu (Bill Costa - UNH Computing & Information Srvs)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

In article <38tsa5$8p1@porte-de-st-ouen.ics.uci.edu>, 
omalley@porte-de-st-ouen.ics.uci.edu (T. Owen O'Malley) writes...

>There is an emacs mode that automatically upcases the reserved words
>as you type them (and can do completion on them). With emacs and that
>mode, it isn't really a problem to type, just ugly to read.

    Ugly?  You wanna talk ugly?  C has got to be one of the ugliest
    languages ever created.  C programs look like they were transmitted
    over a noisy phone line with all those !=&&|* characters and such. 
    Ugh!  And it's part of the mind set, I swear.  Just a few weeks ago,
    there where a couple of C hacks on some list competing to see who could
    code some math function in the ugliest fashion as possible.  And
    believe me, it got pretty ugly! ;-)

    I have a basic problem with languages and systems which tend to foster
    this kind of culture.  I'm sure you've seen it yourself -- where self
    proclaimed `experts' in some programming language, editor, or scripting
    language, go around showing each other pieces of code saying "Guess
    what this does!".   Making code hard to read and understand is not what
    good software engineering is about.

    Now I happen to like the uppercase keyword style and that's what I use
    when the language gives me a choice.  Having said that, however, I *do*
    object to Modula, or any language for that matter, forcing a certain
    character case convention for keywords or identifiers.  So that applies
    equally to C with its insisting on lowercase `if', `else', etc.   I
    think all of the code, both keywords and identifiers should be case
    neutral.  This would mean that "Foo" and "foo" are *not* different
    variables.  There's a mis-feature if there ever was one!  A feature
    loved only by those who hate to type or are too unimaginative to come
    up with good identifier names.  (Hmmm, what's another variable name for
    "filename".  I know, I'll call it "Filename"!  And I'll call the third
    variable "FileName"!  This is neat! Now I got three vars for the price
    of one!)

    The programmer should be allowed to code in the style s/he sees fit
    (text casing, indenting, etc.). If you don't like the style somebody
    else used on a program you have to work on, pour it through a filter
    that makes it look the way you like, and thus easier to read for *you*.
    Either way, the compiler shouldn't care a bit.

    							Later....BC

    PS:  Sorry, guess you touched a nerve there.

##    ##    ##    ## +----------------------------[ Bill.Costa@UNH.EDU ]---+
##    ###   ##    ## | Bill Costa                                          |
##    ####  ##    ## | Computing & Information Srvs                        |
##    ## ## ######## | Kingsbury Hall               PHONE: +1-603-862-3056 |
##    ##  ####    ## | University of New Hampshire    FAX: +1-603-862-4778 |
##    ##   ###    ## | Durham, NH  03824-3591                              |
 #######    ##    ## +----------------[ No good deed goes un-punished. ]---+


======================================================================= 4 ===
Date:    02 Nov 1994 10:26:47 GMT
From:    bevan@cs.man.ac.uk (Stephen J Bevan)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

In article <1NOV199413240516@unhn.unh.edu> w_costa@unhn.unh.edu (Bill Costa - U
NH Computing & Information Srvs) writes:
       ... I think all of the
       code, both keywords and identifiers should be case 
       neutral.  This would mean that "Foo" and "foo" are *not* different
       variables.  There's a mis-feature if there ever was one!

Just as some people feel that allowing "Foo" and "foo" to be different is
perverse, others think that that anyone declaring a variable as "Foo" and
then using it as "foo" is also being perverse.  That is, both styles
can be abused.


======================================================================= 5 ===
Date:    02 Nov 1994 09:59:54 GMT
From:    bevan@cs.man.ac.uk (Stephen J Bevan)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

In article <CyLv4p.D93@bcsaic.boeing.com> rodney@bcsaic.boeing.com (Rodney M. B
ates) writes:
   ...  (Algol 60's 
   "publication language" bold face keywords were easy to read 
   _and_ looked good as well.)

Some people thought it looked ugly.  Just goes to show you can't
please all the people all the time.


   ... I like the all caps style well enough that I have started using 
   if for keywords in Ada too, ...

Which as you probably know is the opposite convention to some Ada
style guides.  In those the variables are in upper case, the keywords
are in lower case.  The reasoning being that it is the variables/data
that is the important part of the program not the keywords.
[Ledgard:Tauer:pspp:1987] has a good discussion of these topics (not
that I necessarily agree with their views though :-)

@book
{ Ledgard:Tauer:pspp:1987
, author=    "Henry Ledgard and John Tauer"
, title=     "Professional Software -- Programming Practice"
, publisher= "Addison Wesley"
, year=      "1987"
, cost=      "\pounds 20"
, reffrom=   Keller:acm:sigplan:1990
}


======================================================================= 6 ===
Date:    Tue, 1 Nov 1994 20:19:36 GMT
From:    rodney@bcsaic.boeing.com (Rodney M. Bates)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

It may just be personal taste, but, after using Modula-2 
quite a bit and Modula-3 a little, I have come to believe 
that uppercase keywords make code significantly easier to read.
I didn't like them at first, and I still think they are a
bit peculiar looking, esthetically, but they make it a lot
easier to quickly scan code for relevant things.  (Algol 60's 
"publication language" bold face keywords were easy to read 
_and_ looked good as well.)

I like the all caps style well enough that I have started using 
if for keywords in Ada too, where I can choose whatever case
I want. (Ada is case-insensitive, both for keywords and
identifiers.)

One thing I can't imagine ever tolerating is having to
manually type them all that way in the first place.  I convert
them mechanically to uppercase.  There are various ways to
do this.  

Of course to do this, you have to give up using lowercase
keyword homonyms as ordinary indentifiers.  This causes me
no sorrow at all, as I would find such a practice to be a
major readability hit and would consider it bad style.  

How well I remember how it was touted as a feature of PL/1 that
keywords could also be used as indentifiers too (without even
any case difference--syntax was used to disamgibiguate!)  You 
could legally write:

  IF IF THEN THEN; ELSE ELSE; 

I may not have the syntax exactly right.  I can't remember
whether it was the IF or WHILE whose boolean condition had
to be in parentheses. It was one or the other, not both.  
Probably you didn't even have to declare IF, THEN, or ELSE!

The rationale was that you could use a subset of the language
and not even have to know the keywords that weren't in your
subset.

Rodney Bates
bates@salsv3.boeing.com


======================================================================= 7 ===
Date:    Wed, 2 Nov 1994 15:11:22 GMT
From:    n8243274@henson.cc.wwu.edu (S. Lee ODEGARD)
Subject: Re: Commercialization of Modula-3

comment: A well thought out ten-year plan.  If it pans out, I'll return to
the profession (ahead of the loop for once).

To help with the first phase of demonstrating the system, I hope to publish
over the net a set of example programs that systematically illustrate all of
the features of M3.  Please contact me with any proposals or example
programs you may have.  Document your code with ASCII text files -- not
pretty, but the primary objective here is to get as many people as possible
looking at M3.  --SLO n8243274@henson.cc.wwu.edu



======================================================================= 8 ===
Date:    Wed, 2 Nov 1994 08:12:48 -0800
From:    patl@asimov.lashley.slip.netcom.com
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

|>  In article <CyLv4p.D93@bcsaic.boeing.com> rodney@bcsaic.boeing.com (Rodney 
M. Bates) writes:
|>     ...  (Algol 60's 
|>     "publication language" bold face keywords were easy to read 
|>     _and_ looked good as well.)
|>  
|>  Some people thought it looked ugly.  Just goes to show you can't
|>  please all the people all the time.

You also have to remember that Algol 60 was popular when it was
somewhat rare to even find a printer that handled lower-case.  Italic,
bold, and a wide range of font sizes and styles were unheard of outside
of publishing offices; and that equipmentment wasn't computerized.  All
caps was the poor-man's boldface...


Personally, I don't really care for the look of the all-caps keywords;
but that is a minor complaint.  What I really dislike is -typing- 
upper-case keywords.  Yes, I know that emacs and some other editors
have modes that will make it easier; but that not only forces me to
use those editors, but also to use those modes.  I will confess to
being a big emacs fan; but the paradigms chosen by the electric-language
modes don't always match well with the way I prefer to transfer my
thoughts to the computer.  And in emacs I'd much rather have the keywords
in lower case and some distinctive color - just like the keywords in other
languages I'm working with.


Furthermore, over 20 years of systems-level programming in a wide
variety of languages and environments has led me to the belief that
case sensitivity is nearly as evil as not having to declare variables.
Yes, declaring 'Foo' and using 'foo' is bad.  So you make the compiler
generate a 'non-standard capitalization' warning.  Removing case-sensitivity
from keywords then allows a much greater degree of flexibility when
formatting for print or display.  I think that boldface, italic/slant,
and changes in typeface (e.g. sans-serif -vs- serif) are much prettier,
more effective, and easier to balance against representations of other
distinctive syntatic or semantic elements.  (comments, literal strings,
etc.)



-Pat


======================================================================= 9 ===
Date:    2 Nov 94 11:05:34
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Commercialization of Modula-3

In article <CyLJF4.M2C@bcstec.ca.boeing.com> george@bcstec.ca.boeing.com (Harry
 G. George) writes:

Ok, I will bite to this.

   1. Technical
      Ability to use C as "main", and link in M3 modules.

You can already call C and C++ from M3. You simply have to rename
the current main generated by M3 to something else and call it
from your C main. Fairly easy to do.

      Ability to auto-translate C ".h" files to M3 ".i3" files.
	(hand-tweaking may be acceptable, but the bulk must be auto)

Not so easy. Some tools that generate IDL or ADA from .h files could
be modified to do so. In any case, it takes a few minutes per .h file
with a good editor and "global-replace".

      An on-going coordinated effort to make ".i3" files for
	C and C++ packages as they appear. 

No need to do it if no one is using a package. There are already a lot
of useful M3 packages and a few important C packages with .i3 front ends.

      An on-going coordinated effort to port to new UNIX and PC
	boxes as they appear.

Well, a port is relatively simple (given the size and extent of SRC M3).
Volunteers have ported it (or are in the progress of doing so) for almost all
major platforms.

      Simple binary installation package for MS Windows 95 and NT
	(available on-line, on CD-ROM, and on 3.5" diskettes)

M3-lite should do it. I am quite sure someone will put it on one of the
numerous CD-ROMs now available.

      Simple installation for most UNIX boxes
	(assume on-line access)

Pre-compiled binaries are available at my site for many platforms.

   2. Social/Commercial
      Second source for compiler and environment
	(even if someone just redistributes DEC's code)
      Second implementation of compiler and environment
	(to assure some protection from DEC redirections)

Given the liberal DEC copyright, there is little motivation to waste
efforts on a reimplementation. Furthermore, a single compiler
insures portability.

      Email and phone support for installation
      Training support, on-site
      Email and phone support for helpline
      Contract consulting support for major projects

A number of people will certainly be willing to offer such services when
there is demand.

   Plan:
   1. Penetrate the MS Windows market
      From the sounds of it, M3-Lite will be good product. Need to
      get out press releases to standard PC journals.  For those
      without high-speed net access, need source and binaries
      on 3.5" diskettes (roughly at cost).  Maybe bundled
      with Nelson book, Harbison book (with errata sheet), and
      printed manual.  

First M3-lite has to come out and mature.

   2. Penetrate academe
      A few hardy souls already use M3 for teaching imperative
      programming.  But for grad students, it probably needs a
      hook to C++ and Smalltalk.  How about an M3-to-C++ translator, 
      which generates idiomatically correct C++ (with comments)?
      The research issue is how to recognize and translate idioms;
      the payoff is that one can use M3 as a high-level code generator,
      and then maintain the output if need be.  [We are not talking
      C-as-portable-assembler here.]

Converting M3 to C++ could be an interesting non trivial project.
Of course you need all the M3 run time for GC, threads...

   3. Establish regional consulting  
      Make contact with an established independent consultant in each 
      region.  He/she (hereafter "he") becomes enthused about M3
      as a language, and even more by the market opportunity in 
      training and after support.  He assists installations, 
      provides training seminars, does talks to local computing
      societies, and does constract consulting.  As needed, he

Good idea but you need people willing to invest in the medium to long term.

   4. I get to recommend it
      Given all the above, I'll be able to go to my management and
      say, "I think our best bet is to use this Modula-3 code
      generator.  It generates commented C++, but you
      can also get native code compilers for PC's and UNIX boxes.


I agree with most of the points you have made. However, unless you
find a company willing to invest 5M$ into a M3 integrated development
environment, C++ converter and lots of publicity, you have to live with 
the current situation where most of the work is done by researchers and 
volunteers. Of course a large company (e.g. Boeing, ATT...) may save more
than that simply by using a cleaner language than C++.

There is already an excellent language with outstanding libraries 
and tools but there are still things on the TODO list. These must be
sorted by priority and worked out by available resources.

Here is what I believe can be done immediately towards the points you
mentioned. People working on ports should be mentioned in the FAQ such
that others can contact them and help. People willing to offer commercial
training and support should also be mentioned in the FAQ.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 10 ===
Date:    2 Nov 94 08:26:30
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: FAQ wanted


The FAQs are always available on rtfm.mit.edu for FTP. They are also
available on Gopher and in the newsgroup news.answers on most news sites.

The Modula-3 FAQ is available also from ftp.vlsi.polymtl.ca:pub/m3.
Time for sending the November FAQ soon...
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 11 ===
Date:    2 Nov 94 11:18:23
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Info for FAQ requested: Porting M3? Offering training?


We hear from time to time about people willing to work on ports.
I would like to put in the FAQ the name of a contact person for each
port in progress (FreeBSD, OS/2, Macintosh...) such that others who
want to help can contact them. A short status report updated from time
to time would be nice too.

It is sometimes mentioned that there is almost no commercial support for
M3. I would like to include a section on commercial support in the FAQ.
Putting your name there means that you "may" accept M3 training or support
contracts or could contact people who would. It is not a commitment to 
start a company just for that purpose or do it on more than a 
part time basis; it may just be offering these services for a 
while until the demand gets strong enough for other
companies to jump in.

--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 12 ===
Date:    2 Nov 1994 22:38:08 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Re: Problem with Linux and SRI 3-3.3

In article <38s26q$c96@alpha.netusa.net>,
Douglas Warren <dwarren@alpha.netusa.net> wrote:
>"../LINUX/Queue.i3", line 2: unable to find interface (RTHooks)
>
>What am I doing wrong?

Sounds like you might have forgotten 
	import("libm3")
in your m3makefile.

Norman




======================================================================= 13 ===
Date:    03 Nov 1994 08:57:14 GMT
From:    jch@garfield.isode.com (John Haxby)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)


In article <CyLv4p.D93@bcsaic.boeing.com> rodney@bcsaic.boeing.com (Rodney M. B
ates) writes:

   How well I remember how it was touted as a feature of PL/1 that
   keywords could also be used as indentifiers too (without even
   any case difference--syntax was used to disamgibiguate!)  You 
   could legally write:

     IF IF THEN THEN; ELSE ELSE; 

While we're on the subject of other languages, and, perhaps to swing
back around to Modula 3 a bit, Algol68 defines several `stropping'
conventions for its keywords.  One can have upper case stropping, eg

	WHILE random < 10 DO print ((pithy greeting, new line)) OD

or quote-stropping (used, for example, for upper-case only machines):

	'WHILE' RANDOM < 10 'DO' PRINT ((PITHY GREETING, NEW LINE))'OD'

or reservered-word stropping (note that it's case insenstive, I think)

	While random < 10 do print ((Pithy Greeting, New line)) od

and, finally, the preferring option, point stropping:

	.while random < 10 .do print ((pithy greeting, newline)) .od

One side effect of choosing a different alphabet (in the Report's
terms) for keywords is that identifiers can have spaces in them, so
the procedure names that appear in the print collateral have optional
spaces in them; there are probably restrictions on reserved-word
stropping.

Anyway, the upshot of all this is that some form of type-time
stropping can be done by an editor (at least by emacs...) and compile
time stopping can be done by some preprocessor, for example, the CLU
hackers pre-processor that allows lower case keywords and does away
with the need for those nasty semi-colon things.  To my mind, these
two things are a nice way to go; although there may be problems with
distributing source that needs to be pre-processed before it is fed to
the normal compiler.
-- 

--
John Haxby						J.Haxby@isode.com
ISODE Consortium					+44 181 332 9091

These are my opinions and have nothing to do with my employer.


======================================================================= 14 ===
Date:    3 Nov 1994 16:33:35 GMT
From:    cisitm@albert.cad.cea.fr (Pierre Didierjean)
Subject: *** Q: WHAT KIND OF PEOPLE ON THE NET ?

I'd like to know what kind of people i find on the net.

Students, Commercials, Adminitrations, Scientifics or what ??

Is anybody knows that or have statistical results ?


What are YOU doing in life ?

I am a system administrator.


Thanks for the answers and sorry for my english .....



Bye


+-----------------------------------------------------------------------------+
|		Pierre DIDIERJEAN 					      |
|									      |
|		Administrateur Systeme UNIX				      |
|		Cisi, Aix-en-Provence 					      |
|		France							      |
+-----------------------------------------------------------------------------+
|	email : 	cisitm@albert.cad.cea.fr 			      |
+-----------------------------------------------------------------------------+


======================================================================= 15 ===
Date:    Thu, 3 Nov 1994 15:28:08 GMT
From:    olaf@logware.de (Olaf Wagner)
Subject: Re: Info for FAQ requested: Porting M3? Offering training?

Michel Dagenais (dagenais@notung.vlsi.polymtl.ca) wrote:

: We hear from time to time about people willing to work on ports.
: I would like to put in the FAQ the name of a contact person for each
: port in progress (FreeBSD, OS/2, Macintosh...) such that others who
: want to help can contact them. A short status report updated from time
: to time would be nice too.

As for the M3 port to FreeBSD:

  * All the important things (compiler, libm3, m3build, m3ship)
    have been ported and are running fine on FreeBSD 1.1.5

  * I have compiled almost all of the archives without major
    problems.

  * Diffs have been sent to Bill Kalsow, who will integrate them
    into the next distribution.

  * Incremental and generational garbage collection seems to work
    fine at my home site. I hope to complete the work next weekend
    and send the diffs to SRC.

  - I've done nothing to support shared libraries yet.
    Anybody volunteering?

I won't be able to spend much time on actual programming during
the next months. But I am willing to act as a contact person and/or
coordinator for the FreeBSD ports. You can reach me at

   wagner@luthien.in-berlin.de (private site)
   olaf@logware.de (work, directly connected to the internet)

Please do not overwhelm me with requests for binaries etc. I cannot
set up an ftp server here, and at the moment I have no time to put all the
things together into a nice and easy-to-install package.

For really desperate souls I could just tar some things up. But where should
I put them (they're really big)?

I hope this will be of help.

Olaf
-- 
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\ Olaf Wagner              at Logware GmbH       Schwedenstrasse 9     \
\ olaf@logware.de (work)                         13359 Berlin 65       \
\ wagner@luthien.in-berlin.de (private)          Germany / Deutschland \


======================================================================= 16 ===
Date:    Thu, 3 Nov 94 22:14:08 PST
From:    vinall@VNET.IBM.COM (Paige Vinall)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

            <JCH.94Nov3085714@garfield.isode.com>

In <JCH.94Nov3085714@garfield.isode.com> John Haxby writes:
>In article <CyLv4p.D93@bcsaic.boeing.com> rodney@bcsaic.boeing.com (Rodney M. 
Bates) writes:
>
>   How well I remember how it was touted as a feature of PL/1 that
>   keywords could also be used as indentifiers too (without even
>   any case difference--syntax was used to disamgibiguate!)  You
>   could legally write:
>
>     IF IF THEN THEN; ELSE ELSE;

Hmm... The syntax is not quite right.  How about:

  IF IF=THEN THEN
    ELSE=ELSE;
  ELSE
    ELSE=THEN;

That is a weird example.  A more natural example is:

  dcl value fixed bin(15);  /* value is defined as a keyword        */
                            /* but is often also used as a variable */
  if value = 5 then
    display('okay');

There are two real advantages to not having reserved keywords.  The
first is being able to select natural variable names regardly of
keywords.  This is a minor advantage.  The second advantage is being
able to introduce new keywords into the language without breaking
existing code.

Paige Vinall - PL/I Development Manager, IBM
Internet: vinall@vnet.ibm.com,  Phone: (408) 463-2106


======================================================================= 17 ===
Date:    07 Nov 1994 21:36:25 GMT
From:    diwan@cs.umass.edu (Amer Diwan)
Subject: Looking for benchmarks

As part of my thesis research, I am implementing cross-module optimizations
for Modula-3 programs.  For evaluation purposes, I need a large suite of
benchmarks.  If you have written Modula-3 programs that you are willing to
let me use for benchmarking purposes, please drop me a note.
Thanks.
    Amer
--

------------------------------------------------------------------------------
Amer Diwan                                    Department of Computer Science
Object Systems Lab                            University of Massachusetts   
diwan@cs.umass.edu                            Amherst, MA 01003
(413) 545-0256                                
http://www.cs.umass.edu/~diwan/home.html


======================================================================= 18 ===
Date:    Mon, 7 Nov 1994 20:25:09 GMT
From:    mef@cs.washington.edu (Marc Fiuczynski)
Subject: latest FAQ for m3 please.

Just picked up M3 and have a bunch of really low level questions.
Could some kind sole point me to the lastest FAQ.  I've looked at

http://www.research.digital.com/SRC/modula-3/html/faq.html
and 
http://froh.vlsi.polymtl.ca/m3/m3-faq.html

but they don't seem to answer some of my questions.

Thanks,

Marc
mef@cs.washington.edu

-- 
/Marc...
mef@cs.washington.edu


======================================================================= 19 ===
Date:    07 Nov 1994 19:10:24 GMT
From:    connolly@ulua.hal.com (Dan Connolly)
Subject: Progress on m3gdb? M3Lite?


[If ANYONE sees this post, could you please reply? I suspect that my
news software isn't working right, and I'd like to know if my postings
make it outside of HaL]

Platform:
	Linux 1.1.45
	SRC M3 3.3, binaries from 
	  ftp://ftp.vlsi.polymtl.ca/pub/m3/linux/src-m3-3.3l2.strip.tar.gz
	  Oct 24 by Michel Dagenais <dagenais@vlsi.polymtl.ca>

Combined with lemacs and modula-3-mode.el, this is a nifty development
environment. I'm making slow, steady progress developing some WWW
libraries. I've got SGML.c and friends from CERN's libWWW ported and
integrated with the Wr interface, and Guido VanRossum's Para.py
paragraph formatting code ported and working for output to a file. I'm
just starting to work on displaying formatted paragraphs in a VBT.

But I'm experiencing strange runtime behaviour, and even stranger
behaviour from the debugger. My test applications will abort with
"Subscript out of range" or "ASSERT failed". Unfortunately, the core
file produced is worthless -- the stack seems to be unwound or
corrupted before the core is written out. In any case, I can't get
a stack trace from an aborted M3 program.

So I try to reproduce the problem under m3gdb. The first wierdness
is:
	> br Foo.Bar
	No such symbol "Foo"
	breakpoint at Foo.m3 ...

so I get an error message every time I set a breakpoint. The
breakpoints do work, however. And I can single-step through a program.

But sometimes stepping over a RAISE statement causes the program
to abort with "ASSERT failed" or something (sorry, exact details aren't
handy).

And the debugger can't print objects, TEXTs, or anything else except
INTEGERs and simple RECORDs. It gets confused a lot and quits with
SIGSEGV when I print some values.

There are some release notes for m3gdb that say it's not complete.
Has there been any progress since the (4.11--linux) version that I'm
using?

I have been able to find some errors by painfully single-stepping to
the point of the problem, but I'd like to just let the program run
until the checked runtime error occurs, and see the
backtrace. Unfortunately, the M3 runtime and m3gdb don't seem to allow
me to do this. If I let the program run to a checked runtime error
and ask for a stacktrace, I get a useless stacktrace that looks something
like:
	_main()
	_end()


I've looked at the M3 runtime code in libm3, and there's a LOT of
stuff to print exception traces and thread info when problems
occur. I'd like to see this debugging support moved out of the M3
runtime and into the debugger.

By the way... I've seen several references to "M3LITE". What is this?
Is this an attempt to strip down the M3 runtime to the minimum?

Is it just targeted at MSWindows, or will Linux and other Unix flavors
be supported?

I wonder how much stuff in the current M3 executables can be removed,
and how much actually has to stay in there. For example, I think
reading a Pickle can refer to a procedure by name. This would seem to
imply that the names of all procedures are available at runtime.
Is this true?

Dan

-- 
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 20 ===
Date:    Tue, 8 Nov 1994 04:19:20 GMT
From:    mef@cs.washington.edu (Marc Fiuczynski)
Subject: typesafe C -> M3 calls.

Newsgroups: comp.lang.m3
Subject: typesafe C -> M3 calls.
Summary: 
Followup-To: 
Distribution: world
Organization: Computer Science & Engineering, U. of Washington, Seattle
Keywords: 

1) All questions relate to the latest version of SRC M3 on the ALPHA.
2) I'm new to M3. 

I have a need to call functions in a M3 modules from a trusted (read
typesafe) C program.  For example, I have a M3 queue module with push,
pop, and isempty, how can I call these from C?

Looking at the assm code produced by M3 I noticed that it uses some
sort of vtable (M3__I_interfacename) through which calls to a M3
function go.  

How is this vtable initialized?  Is it the order of the exported
function in the .i3 file?

I understand that vtables are necessary for opaque stuff and to
override an object method. But why is this vtable necessary in the
first place? Also, what would be lost if the M3 compiler would make a
module's functions global (still name mangled), thus allowing other M3
modules to access the functions directly instead of going through the
vtable?

Thanks,

Marc
-- 
/Marc...
mef@cs.washington.edu


======================================================================= 21 ===
Date:    8 Nov 1994 15:09:44 GMT
From:    schaub@ponder.csci.unt.edu (Stephen Schaub)
Subject: Re: Progress on m3gdb? M3Lite?

I'd like to echo Dan's request for info on updates to m3gdb.  Also, has
anyone done any work on a shell for m3gdb, similar to what emacs provides
in debugging mode, but separate from emacs?  I'd like to teach some 
beginner-level programming using m3, but want a simple, easy-to-use 
debugging system, which m3gdb by itself doesn't provide, and emacs does
with overkill.  I've been toying with the idea of writing one myself in m3,
using curses (is there a curses module interface for SRC m3?) but don't want
to reinvent the wheel if it's already been done.

Stephen Schaub <schaub@cs.unt.edu>


======================================================================= 22 ===
Date:    Tue, 8 Nov 1994 19:48:40 GMT
From:    shebs@cygnus.com (Stan Shebs)
Subject: Re: Progress on m3gdb? M3Lite?

In article <39o4bo$rqi@hermes.unt.edu> schaub@ponder.csci.unt.edu (Stephen Scha
ub) writes:

   I'd like to echo Dan's request for info on updates to m3gdb.  Also, has
   anyone done any work on a shell for m3gdb, similar to what emacs provides
   in debugging mode, but separate from emacs?  I'd like to teach some 
   beginner-level programming using m3, but want a simple, easy-to-use 
   debugging system, which m3gdb by itself doesn't provide, and emacs does
   with overkill.  I've been toying with the idea of writing one myself in m3,
   using curses (is there a curses module interface for SRC m3?) but don't want
   to reinvent the wheel if it's already been done.

Cygnus is adding a tcl/tk-based graphical interface to GDB, and it will
become available in the next few months (it may or may not be part of the
FSF version, but we *will* ensure its free availability!).  Unfortunately
for m3gdb, the interface requires totally up-to-date GDB sources, so
somebody would have to upgrade the M3 part.  IMHO it would be worthwhile;
you'll be able to click on variables to display them, step through asm
or source displays, have register and stack trace windows auto-update, etc.

							Stan Shebs
							Cygnus Support
							shebs@cygnus.com


======================================================================= 23 ===
Date:    Wed, 9 Nov 1994 00:28:39 GMT
From:    faegri@dcs.glasgow.ac.uk (Tor Erlend Faegri)
Subject: Passing options to m3build(1)

Unable to find any explanation in the FAQ or in the README files, I turn to
the group for help ...

After having installed most of the software supplied with release 3.3 of the
SRC compiler, I came across the following problem when I tried to install the
network object library (netobj). After starting up m3build(1) as usual in the 
../netobj/stubgen directory, it said:

  ...
  ...
  ln -s stubgen stubgenv1
  m3 -w1 -why -g -o stubgen -F/usr/tmp/qkAAAa02272 
   -> linking stubgen
  ld: GLOBAL_OFFSET_TABLE overflown: need to use -PIC

  Fatal Error: program "/bin/cc" failed, exit status = 1024

  *** error code 1 (ignored)
  hawaii:/local/modula3.new/netobj/stubgen>   
  ...
  ...

According to the html-helpfile for m3build(1), adding the line

  m3_option("-X2@-PIC@")

to  ../stubgen/src/m3makefile should do the trick, but I still get the same
error message. Any hints?  (I also tried "-X1@-PIC@" and "-X5@-PIC", where
the first gave the same error, and the latter gave "unrecognized option ...").

The platform I'm building for is Sun SPARC, running SunOS 4.1.3.

---
  Tor E. Faegri           (e-mail: faegri@dcs.gla.ac.uk)



======================================================================= 24 ===
Date:    Wed, 09 Nov 94 16:25:00 GMT
From:    sjk2@ukc.ac.uk (Sair)
Subject: HELP WANTED

Is there anywhere on the net that i can get hold of a copy of a
Modula-3 compiler and linker for linux?????\
I've tried various people and have had no luck..
Any of you lot have any ideas?
If you mail me, mail me at 'heb1@ukc.ac.uk' NOT at the above address

cheers me-dears

Claire the Spicy Chicken Woman....



======================================================================= 25 ===
Date:    Wed, 9 Nov 1994 15:09:04 GMT
From:    mychng@cayley.uwaterloo.ca (Ch'ng Mei Yen)
Subject: Is Modula-3 popular?

I am just wondering if Modula-3 is a popular language. I know that many
people know C and C++ but when you say Modula-3 , the usual response is
"What ?" Or is it not used in commercially, and only used for educational
purposes?>

Please mail me directly. 

-- 
Mei Y., Ch'ng          
Village 1, N2 -316, U of W
Tel: 725-7055
***************************************************************************
Quote For The Day
"When it is working logically, it is probably not working practically."




======================================================================= 26 ===
Date:    09 Nov 1994 19:09:46 GMT
From:    connolly@ulua.hal.com (Dan Connolly)
Subject: Re: Multithreading

In article <CyyHLD.BIo@world.std.com> edwards@world.std.com (Jonathan Edwards) 
writes:

   Is there a Lisp or Smalltalk that does REAL multithreading? Not cooperative 
   multiprocessing, but real OS-kernel pre-emptive threads. This means threads
   can run on multiple processors in an SMP, and taking a virtual memory fault
   in one thread does not block others. How does GC interact with threads?

   I am afraid I am doomed to C++ unless I can find this. Forgive me.


As another poster said, the C++ language has no features to support
multithreaded programming, but as it is one of the more widely supported
languages, vendors of multiprocessing systems are likely to support
some sort of multithreaded runtime for C++. I don't know of any such
runtime systems.

You might contrast this with vendor-supplied re-entrant (i.e.
threadsafe) libc implementations available on AIX, and I think HPUX
and Solaris.

I spent about a year doing DCE software development, and the DCE
programming system includes RPC and threads. The threads API is pretty
close to (based on?) the POSIX pthreads interface. The DCE runtime
also includes a primitive sort of garbage collection where malloc()ed
memory can be associated with a thread so that it is reclaimed when
the thread terminates.

The implementation of the DCE/pthreads interface varies from system to
system: on SunOS, threads are implemented without kernel support,
using the SIGVTALARM to preempt the running thread. The DCE runtime
also had all the system call wrappers to export the normal ANSI/POSIX
libc behaviour for each thread -- they set all the file-descriptors to
non-blocking and handle EINTR from read() system calls under the
covers; they maintain a separate errno for each thread and all that
nastiness.

Even though AIX (and HPUX, I believe) have kernel thread support, the
DCE runtime doesn't use them. Clearly, this VTALARM technique would
not exploit the presence of multiple processors.

On Solaris, kernel threads -- well, "lightweight processes" -- are
used, but they are not mapped 1-1 to pthreads(), as the cost of a LWP
synchronization or context switch is too expensive in typical DCE
applications, which may have 50 or so threads. So a mixture of the
SIGVTALARM and kernel threads is used. Hence I expect DCE apps would
exploit multi-proceossor Solaris systems.

I understand that kernel threads are exploited under OS/2 also, though
I got that info second-hand. I would expect DCE apps to take advantage
of multi-processor Windows-NT systems.


As to lisp or smalltalk implementations, I expect there are several that
implement preemptive threading using the VTALARM technique, for example,
the scheme48 VM supports threads and the other pthreads-style abstractions:
mutexes, condition vars:

	Scheme 48 home page
	http://www-swiss.ai.mit.edu/~jar/s48.html

The scheme48 garbage collector in the the 0.36 release that I looked
at was a simple stop-and-copy colloctor, so the threads interaction
was pretty simple. I understand that
incremental/generational/virtual-memory-synchronized GC for the
scheme48 VB is under active development.

It's also not clear to me how the scheme48 I/O system interacts with
threads.

As I recall, some of the ML implementations support threads using
this same technique.


But for a mature alternative to C++ for multi-threaded applications, I
suggest you investigate Modula-3. It has a well-specified threads
interface designed in cooperation with I/O interfaces. There are also
networking and GUI interfaces designed on top of this thread
interface. Modula-3 also includes garbage collection, runtime typing,
and other handy high-level language features. Plus, the language
definition passes the "50-page test." See:

	Modula-3 home page
	http://www.research.digital.com/SRC/modula-3/html/home.html

Platform support is growing. Threads are preemptive on all platforms
(except for some crippled ports to MS-DOS) using the VTALARM
technique.  The I/O interfaces use non-blocking file descriptors and
select() to support the illusion of kernel thread support.

On SPARC and DEC Alpha (as I recall), the garbage collector is
generational, incremental, and synchronized with the virtual memory
system using mprotect(). On Linux and the other unix platforms, the GC
is stop-and-copy. I'm working on removing this limitation from the
Linux port. It's just tedious, and I expect the other platforms will
be similarly supported before long.

There is also a nifty GUI library -- first, an libX11 interface, then
an interface called Trestle() on top of that, then the VBT toolkit
which provides functionality similar to Interviews, then FormsVBT on
top of that, which allows you to interactively edit S-expression
representations of user interfaces, and use them in applications.

FormsVBT is supported on all the Unix/X platforms, and I understand
a port to Windows95 and NT is underway.

The bottom line is that it is practical to build large,
multi-platform, networked, multi-threaded, graphical applications in
Modula-3 today. The platform support has not really reached
critical-mass yet, but when the M3 ports to Windows95 and NT
stabilize, I think we will witness a tremendous growth in M3 usage.

I seriously believe that C++ fails to support the kind of complexity
management necessary to build modern distributed, multiplatform
applications, and that M3 succeeds. While you may see various C++
libraries to support various multi-processor systems, I doubt you will
see a C++ API that matches the precision and portability of the M3
Thread, Rd, Wr, and VBT interfaces.

Disclaimer: There are other alternatives that I am less familiar
with that might meet your needs:

	* Some SmallTalk implementations were mentioned in other posts

	* I understand that Ada9X has similar language features to M3, and
	there is a GNU Ada9X compiler. I don't know what runtime and libraries
	are supported, nor what platforms.

	* NextStep/OpenStep, Objective-C, and Mach probably support
	multiprocessing applications. If your application can mandate
	the OS and windowing system, this may fit the bill.

	* Eiffel seems to come up in these sorts of discussions. I don't
	know what sort of thread support is available in Eiffle
	implementations.

Dan
-- 
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 27 ===
Date:    Wed, 09 Nov 1994 16:19:28 +0900
From:    fstiffo@unive.it (Francesco Stiffoni)
Subject: Two answers

First answer:

      where can I get version of Modula-3 for NeXTSTEP (Intel version possibly)
?

Second answer:

      where can I get emacs file for Modula-3?

Thank you in advance to every one will respond

-- 
Francesco Stiffoni
University of Venice
Linguistic Department
Laboratory of Computational Linguistic


======================================================================= 28 ===
Date:    Thu, 10 Nov 1994 00:30:29 GMT
From:    edwards@world.std.com (Jonathan Edwards)
Subject: Re: Multithreading

In article <CONNOLLY.94Nov9130946@ulua.hal.com>,
Dan Connolly <connolly@ulua.hal.com> wrote:
>
>But for a mature alternative to C++ for multi-threaded applications, I
>suggest you investigate Modula-3. It has a well-specified threads
>interface designed in cooperation with I/O interfaces. There are also
>networking and GUI interfaces designed on top of this thread
>interface. Modula-3 also includes garbage collection, runtime typing,
>and other handy high-level language features. Plus, the language
>definition passes the "50-page test." See:

Yes, Modula-3 is very nice.
But "mature" is a relative term. Are there any commercial implementations of
Modula-3? Are there even any announced PLANS to deliver commercial
implementations? It seems that languages have to be 15 years
old before they become commercially viable. I can't wait that long.

Thanks anyway.





-- 
Jonathan Edwards				edwards@intranet.com
IntraNet, Inc					617-527-7020
One Gateway Center				FAX: 617-527-6779


======================================================================= 29 ===
Date:    Wed, 9 Nov 1994 08:04:00 -0500
From:    gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS)
Subject: Re: Progress on m3gdb? M3Lite?

> Cygnus is adding a tcl/tk-based graphical interface to GDB, and it will
> become available in the next few months (it may or may not be part of the
> FSF version, but we *will* ensure its free availability!).  Unfortunately
> for m3gdb, the interface requires totally up-to-date GDB sources, so
> somebody would have to upgrade the M3 part.  IMHO it would be worthwhile;
> you'll be able to click on variables to display them, step through asm
> or source displays, have register and stack trace windows auto-update, etc.


Bill - are you planning on moving m3gdb up ? If not, I can do this work.

How close will the gdb that this is based on be to the current gdb-4.13 ? I'm
willing to put in the work to move m3gdb up providing I don't need to do it mul
tiple
times over the next couple of months.

--geoff



======================================================================= 30 ===
Date:    Wed, 09 Nov 1994 21:40:00 -0500
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Two answers

In article <fstiffo-0911941619280001@157.138.55.12>, fstiffo@unive.it wrote:
> 
>       where can I get version of Modula-3 for NeXTSTEP (Intel version 
>       possibly)?

ftp://gatekeeper.dec.com/pub/DEC/Modula-3/release-3.3/build-NEXT.tar.gz

I believe this is the 68k version, but porting to intel NeXT shouldn't be
too hard if you combine this with the other intel ports (SUN386, LINUX,
NT...), but it does take some time to do a new port.

>       where can I get emacs file for Modula-3?

Try:

ftp://ftp.vlsi.polymtl.ca/lude/modula3-3.3/run/poly/sun4.1_sparc/lib/elisp/

which includes expanded version of SRC Modula-3. modula3.el is also
available as a part of standard Modula-3 distribution.

Hope this helps, 

-- Farshad


======================================================================= 31 ===
Date:    10 Nov 1994 14:07:56 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Mod 3 and unix....

In article <10970@gos.ukc.ac.uk> dmc@ukc.ac.uk (Rock Lobster) writes:

   What is the best (easiest:) way of reading a directorys contents from
   a Modula-3 prog? Is it possible to execute 'ls -lR' from within the program
   or should I call a C function? Any examples of code greatly recieved!


The "FS" interface provides persistent storage (files) and naming
(directories). It is pretty straight-forward to use and it is
operating system independent, so it means your code will be portable
outside Unix. See libm3/src/os/Common, or under the index "directory"
from SRC Report 113, "Some Useful Modula-3 Interfaces":

   http://www.research.digital.com/SRC/publications/src-rr-113.html

Hint: /vbtkit/src/lego/FileBrowserVBT.m3 implements a file browser
which uses FS, and other operating system interfaces. If you are
making a GUI-based application, you can also use FormsVBT's Browser
macro, which is based on vbtkit's FileBrowser.

Hope this helps, -- Farshad
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 32 ===
Date:    10 Nov 1994 14:25:43 GMT
From:    pr@cl.cam.ac.uk (Peter Robinson)
Subject: Re: Garbage Collection in Modula-3

Neither of the papers you mention says much about garbage collection.

However, if you are still interested, the proceedings of the Second
International Modula-2 Conference were published by the Centre for Extension
Studies at Loughborough University of Technology, Loughborough,
Leicestershire, England LE11 3TU.  You can 'phone them on +44 1509 222174 or
send a fax to +44 1509 610361.

E-mail addresses at Loughborough end with @lut.ac.uk .

- Peter Robinson.


======================================================================= 33 ===
Date:    Thu, 10 Nov 94 13:14:08 GMT
From:    dmc@ukc.ac.uk (Rock Lobster)
Subject: Mod 3 and unix....

Hi,
  What is the best (easiest:) way of reading a directorys contents from
a Modula-3 prog? Is it possible to execute 'ls -lR' from within the program
or should I call a C function? Any examples of code greatly recieved!

	
Cheers
Rock

--
+----------------------------------------------------------------------------+
| I can get a job, I can pay the phone bill, I can cut the lawn, cut my hair,|
|     cut out my cholesterol. I can work overtime, I can work in a mine,     |
+---           I can do it all for you - but I don't want to.             ---+


======================================================================= 34 ===
Date:    Thu, 10 Nov 1994 02:13:15 GMT
From:    krystof@cs.washington.edu (Krzysztof Zmudzinski)
Subject: Garbage Collection in Modula-3


I am looking for the following papers:
1. Author:	Robinson-P.
   Title:	Modula-3 in an undergraduate computer science course.
   Source:	Published by: Loughborough University of Technology,
		Loughborough, UK, 1991.
   Conference:	Second International Modula-2 Conference.  Modula-2 and 
		Beyond.  Loughborough, UK, pp 154-63 11-13 Sept. 1991.

2. Author:	Nelson-G.
   Title:	From Modula-2 to Modula-3.
   Source:	Published by: Loughborough University of Technology,
		Loughborough, UK, 1991.
   Conference:	Second International Modula-2 Conference.  Modula-2 and 
		Beyond.  Loughborough, UK, pp 132-43 11-13 Sept. 1991.


The libraries in my university don't have them.
I am also interested in any other literature pertaining to the
issues of garbage collection in Modula-3.

Krystof

P.S.  Does anybody know an e-mail address at the computer science 
department at the Loughborough University?  Any address would be
fine; I just need the part after @.



======================================================================= 35 ===
Date:    Thu, 10 Nov 94 08:45:34 -0800
From:    mhb@pa.dec.com ("Marc H. Brown")
Subject: Re: Mod 3 and unix....


    If you are making a GUI-based application, you can also use FormsVBT's 
    Browser macro, which is based on vbtkit's FileBrowser.

Actually, it's the other way around. The FileBrowser uses the Browser
to display a list of files and directories. Both are VBTkit widgets,
FileBrowserVBT and ListVBT, repsectively, and both are components 
in the FormsVBT language.


======================================================================= 36 ===
Date:    10 Nov 1994 14:29:22 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: typesafe C -> M3 calls.


You may want to browse tools/pp/src/Parse.yacc in the standard M3
distribution. It makes calles to the Formatter interface.

As I recall, a procedure P defined in an interface I is available (in
a C program) as I__P. Of course you have to be careful about passing
in the right parameters and so on, though for basic types the mapping
is pretty straight-forward.

-- Farshad
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 37 ===
Date:    10 Nov 1994 17:32:05 -0600
From:    kitana!sysop@caprica.com (JL Gomez)
Subject: M3 compile problem

I'm a M3 newbie.

I'm running the Linux version of Modula-3.

I've entered the first program as written in Harbison's Modula-3 book:

MODULE Hello1 EXPORTS Main;
IMPORT Wr, Stdio;
BEGIN
	Wr.PutText(Stdio.stdout, "Hello, World!\n");
END Hello1.

When I do a m3 -o hello hello1.m3, I get the following error:

Fatal Error: Process.Create("*UNDEFINED*") failed: errno=2

Here's my $PATH:
PATH=/home/sysop/bin:/usr/local/soft/modula3-3.3/bin:
/usr/local/bin:/bin:/usr/bin:.:/usr/X11/bin:/usr/TeX/bin:
/usr/andrew/bin:/usr/openwin/bin:/usr/games

Here's the lib path:
LD_LIBRARY_PATH=/usr/local/soft/modula3-3.3/lib/m3/LINUX

I'm running the 1.1.62 kernel of Linux with Slackware 2.0.1.

Thanks for the help!
--
sysop@kitana.org


======================================================================= 38 ===
Date:    Thu, 10 Nov 1994 21:00:23 GMT
From:    mef@wally.cs.washington.edu (Marc Fiuczynski)
Subject: Re: typesafe C -> M3 calls.

In article <NAYERI.94Nov10092922@bermuda.gte.com> nayeri@gte.com (Farshad Nayer
i) writes:

   As I recall, a procedure P defined in an interface I is available (in
   a C program) as I__P. Of course you have to be careful about passing
   in the right parameters and so on, though for basic types the mapping
   is pretty straight-forward.

In M3 version 3.x a procedure defined in an interface is not
accessible globally (anymore) using the I__P name mangling. Instead, a
procedure P is called indirectly through an interface record
(vtable?).  This makes it just a little harder to call M3 from C.

We considered various ways of calling M3 procedures from C.  Here is a
summary of the ones that came up with. We went with option number 3.

0) Change the M3 compiler to make a module's procedure global
 rather than static symbols and use the M3 mangled names.
 This is necessary for the 3.x version of the M3 compiler.

1) Use one dispatcher that can take a string "MODULE.FUNC"
 and look it up in the symbol table to return a function
 ptr to it.
 REQUIRES: symbol table fiddling.

2) Process the i3 files and generate a .h file with the
 appropriate extern definitions to access a modules
 procedures. E.g., for the Stack module with functions 
 push and pop we would process the i3 file and produce
 a .h containing:
	typedef void (*_PROC)();
	extern _PROC Stack__Push = M3__I_Stack + pushoffset.
	extern _PROC Stack__Pop  = M3__I_Stack + popoffset.
 REQUIRES: special parser for i3 file. 

3) Export the M3 functions explicitly into C global function pointers
from the M3 init function.  Note that each M3 module has a "main"
BEGIN-END block which is executed when the module is initialized. This
is similar to 2 except we don't need to process the i3 files. 

REQUIRES: Simple <*EXTERNAL*> declarations for C globals in i3 and
initializing the globals in the MODULE_BODY.

Using the Stack module example, the m3 and i3 file would read:

Stack.i3

INTERFACE Stack;
(* Using C2M3__xxx to export the M3 function *)
<* EXTERNAL *> VAR C2M3__Pop:PROCEDURE():INTEGER;
<* EXTERNAL *> VAR C2M3__Push:PROCEDURE(x:INTEGER);
PROCEDURE Pop():INTEGER;
PROCEDURE Push(x:INTEGER);
END Stack.

Stack.m3
MODULE Stack;
...

PROCEDURE Pop():INTEGER = 
BEGIN
...
END Pop;

PROCEDURE Push(x:INTEGER) = 
BEGIN
...
END Push;

BEGIN
	(* Export M3 function to C *)
	C2M3__Pop := Pop;
	C2M3__Push:= Push;
END Stack;

Your corresponding C program should have a global variable for
C2M3__Pop and C2M3__Push.

long (*C2M3__Pop )();
void (*C2M3__Push)(long x);

Remember that M3 INTEGERs aren't C ints, but C longs.

Please let me know if you can think of a simpler way of calling M3
from C (i.e., change the M3 compiler to make a module's function
global rather than static).

Marc
--
/Marc...
mef@cs.washington.edu


======================================================================= 39 ===
Date:    Fri, 11 Nov 1994 07:39:05 -0500
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Is it too late to ask for change?

In article <1994Nov10.203918.18577@news.wrc.xerox.com>, bil@burka (Igor
Belchinskiy) wrote:

> Actually not even a change (syntax, of course), just a couple of
> small extensions, independent of each other.
> 
> 1. To permit small-letter keywords and make them reserved.
> 2. To add the keyword PROC (and proc, if possible), which will be
>    used analogically to VAR, but in the procedure declarations
>    and definitions.

 [...]

> 
> I guess, not only I'd be happier but the language would become
> uncomparably more readable and appealing to the hordes of the ex-C addicts.
> --
> Igor Belchinskiy   bil@sdsp.mc.xerox.com         Requiescat in Peace

Others have suggested this in the past. In fact, as I recall,
all-upper-or-lower-case keywords were in the original definition of the
language, but at some later point they were taken out. 

It may be too late for a language change especially for syntactic
purposes. Instead, you may want to consider using Andrew Meyers' filter
which allows for all-lower-case keywords among other little syntactic
differences. See pion.lcs.mit.edu:/pub/m3su. I think it may serve your
needs.

Disclaimer: I have never used m3su myself.

-- Farshad

[Can we add something about the keywords and this filter to the FAQ listing 
 please?]


======================================================================= 40 ===
Date:    Thu, 10 Nov 1994 20:39:18 GMT
From:    bil@burka (Igor Belchinskiy)
Subject: Is it too late to ask for change?

Actually not even a change (syntax, of course), just a couple of
small extensions, independent of each other.

1. To permit small-letter keywords and make them reserved.
2. To add the keyword PROC (and proc, if possible), which will be
   used analogically to VAR, but in the procedure declarations
   and definitions.

e.g.:

VAR
  a: INTEGER;
  b: REAL;

PROC
  foo(arg: INTEGER): REAL;
  bar(arg: REAL) = ...

I guess, not only I'd be happier but the language would become
uncomparably more readable and appealing to the hordes of the ex-C addicts.
--
Igor Belchinskiy   bil@sdsp.mc.xerox.com         Requiescat in Peace



======================================================================= 41 ===
Date:    11 Nov 1994 15:43:12 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: typesafe C -> M3 calls.


On the topic of calling M3 procedures from C, I said: 

  As I recall, a procedure P defined in an interface I is available
  (in a C program) as I__P. Of course you have to be careful about
  passing in the right parameters and so on, though for basic types
  the mapping is pretty straight-forward.

Marc Fiuczynski replied:

   In M3 version 3.x a procedure defined in an interface is not
   accessible globally (anymore) using the I__P name mangling. Instead, a
   procedure P is called indirectly through an interface record
   (vtable?).  This makes it just a little harder to call M3 from C.


I am sorry -- I was wrong as I realized when I took a closer look at
the pp program. For the curious, see the definition and use of the
"initParser" function in tools/pp/src/Parse.{m3,i3,yacc}, which works
around the described problem.

There is definitely a need for a tool that automates this process
without causing grief for either the C or M3 programmer. This way
people can make ordinary Modula-3 libraries readily available to C
programs. This helps legitimize the use of M3 to some extent.

-- Farshad (actively reducing the signal-to-noise ratio in this group!)
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 42 ===
Date:    12 Nov 1994 02:19:12 GMT
From:    schwartz@roke.cse.psu.edu (Scott Schwartz)
Subject: Re: M3 compile problem

dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) writes:
   You must have a m3makefile to describe your program and use m3build
   to get it compiled. You cannot use m3 directly.

Ug.  Why is that?  


======================================================================= 43 ===
Date:    12 Nov 1994 02:56:58 GMT
From:    connolly@hal.com (Dan Connolly)
Subject: Generics to simulate -DDEBUG?


On the whole, I think the C preprocessor is a nasty hack. But
it's pretty useful sometimes.

How many folks out there have used stuff like Fred Fish's dbug
package -- or your own homebrew macros so you can write:

	DBUG_PRINT("sorting", ("i= %d; j=%d", i, j));

this code compiles to a printf statement when -DDEBUG, and compiles
to nothing otherwise.

It comes in handy a lot -- especially in maintenance mode. It's a
lot easier to remember what's going on (or learn what's going on)
if you can see this "animated" version of the algorithm playing
itself out.

I sure like M3's clean, simple syntax (SHOUTING KEYWORDS
notwithstanding) but this is one trick-of-the-trade that I'd
hate to do without.

Some binary-only library distributions (e.g. the Microsoft
Foundation Classes) come in two versions: one with all the debugging
and runtime checks on, and one lean and mean with none of the
fancy stuff.

The only solution I can figure out is to code everything as
GENERIC modules that import a Debug interface, ala:

GENERIC MODULE Work(Debug);

IMPORT Fmt; (* hmmm.. I'd want this conditional on Debug.ON too...*)

PROCEDURE DoSomething(a, b: INTEGER) =
  BEGIN
    IF Debug.ON THEN
       Debug.Print("a= " & Fmt.Int(a) & " b= " & Fmt.Int(b));
    END;
	(* ... *)
  END DoSomething;


Does the M3 compiler do dead-code elimination well enough that
the call to Debug.Print would be eliminated if Debug.i3 contained:

	CONST ON = FALSE;
???

What's the state-of-the-art in <*INLINE*> processing? I scoured
the archive and didn't come up with anything on INLINE in 3.x versions
of the compiler.

By the way... the archive and KWIC nice. Any chance they could be updated?

Dan
--
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 44 ===
Date:    11 Nov 94 13:54:40
From:    dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: M3 compile problem

   When I do a m3 -o hello hello1.m3, I get the following error:

   Fatal Error: Process.Create("*UNDEFINED*") failed: errno=2

You must have a m3makefile to describe your program and use m3build
to get it compiled. You cannot use m3 directly.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 45 ===
Date:    12 Nov 1994 04:56:18 GMT
From:    ykomar@ic.sunysb.edu (Yevgeny Komar)
Subject: Modula3 for DOS.

Hello all!
Could someone please point me to a site that has madula3 compiler
for DOS.
				Thanks a lot!
					Jake Komar
					ykomar@ic.sunysb.edu 
-- 



	   			Up The Universe!


======================================================================= 46 ===
Date:    12 Nov 1994 19:42:27 GMT
From:    rrw1000@cus.cam.ac.uk (Richard Watts)
Subject: Re: Generics to simulate -DDEBUG?

In article <CONNOLLY.94Nov11205658@austin2.hal.com>,
Dan Connolly <connolly@hal.com> wrote:
>
>On the whole, I think the C preprocessor is a nasty hack. But
>it's pretty useful sometimes.
>
>How many folks out there have used stuff like Fred Fish's dbug
>package -- or your own homebrew macros so you can write:
>
>	DBUG_PRINT("sorting", ("i= %d; j=%d", i, j));
>
>this code compiles to a printf statement when -DDEBUG, and compiles
>to nothing otherwise.
>
>It comes in handy a lot -- especially in maintenance mode. It's a
>lot easier to remember what's going on (or learn what's going on)
>if you can see this "animated" version of the algorithm playing
>itself out.
>
>I sure like M3's clean, simple syntax (SHOUTING KEYWORDS
>notwithstanding) but this is one trick-of-the-trade that I'd
>hate to do without.
>
>Some binary-only library distributions (e.g. the Microsoft
>Foundation Classes) come in two versions: one with all the debugging
>and runtime checks on, and one lean and mean with none of the
>fancy stuff.
>
>The only solution I can figure out is to code everything as
>GENERIC modules that import a Debug interface, ala:
>
>GENERIC MODULE Work(Debug);
>
>IMPORT Fmt; (* hmmm.. I'd want this conditional on Debug.ON too...*)
>
>PROCEDURE DoSomething(a, b: INTEGER) =
>  BEGIN
>    IF Debug.ON THEN
>       Debug.Print("a= " & Fmt.Int(a) & " b= " & Fmt.Int(b));
>    END;
>	(* ... *)
>  END DoSomething;

 Why not just run your source code through cpp ? Of course, you'd have
to use a shell script to build - something like

---
#! /bin/bash
for i in *.m3 *.i3
 do
  if [$1 -eq "-debug"]; then
	$DEBUG=-Ddebug;
  else
        $DEBUG=-Udebug;
  fi;
   cat defs.h $i | cpp $DEBUG >../ARCHITECTURE/$i;
 done;
cd ../ARCHITECTURE
m3build -S
---

 Where src/defs.h has your definitions of PRINT_DEBUG etc. in it.
 OK, so it's a horrible nasty hack, but it does ensure that no matter
how brain-damaged a compiler (or indeed what language :-)) you're feeding
it through, it will always strip debugging code if you don't specify
-debug.


Richard.
-- 
`Dangerous/Speak your piece/Good and drunk/Back on the street/What you
see is what you get/No matter what you say/No time for anything/To take
the pain away'
The University of Cambridge can't have these opinions even if it wants them.


======================================================================= 47 ===
Date:    13 Nov 1994 18:17:37 GMT
From:    dorai@cs.rice.edu (Dorai Sitaram)
Subject: Modula3 for OS/2 (was Re: Modula3 for DOS.

In article <3a1hti$2al@adam.cc.sunysb.edu>,
Yevgeny Komar <ykomar@ic.sunysb.edu> wrote:
>Hello all!
>Could someone please point me to a site that has madula3 compiler
>for DOS.

Same question, but for OS/2 (without the medium of a
DOS Window and without 8.3 filename restrictions).
Thanks.

--d



======================================================================= 48 ===
Date:    13 Nov 1994 19:49:42 GMT
From:    bm@shadow.cs.columbia.edu (Blair MacIntyre)
Subject: Re: Passing options to m3build(1)

>>>>> On Wed, 9 Nov 1994 00:28:39 GMT, faegri@dcs.glasgow.ac.uk (Tor
>>>>> Erlend Faegri) said:

Tor> Unable to find any explanation in the FAQ or in the README files,
Tor> I turn to the group for help ...

Well, I just encountered this yesterday.  Here's what I did.

Tor> I tried to install the network object library (netobj). After
Tor> starting up m3build(1) as usual in the ../netobj/stubgen
Tor> directory, it said:

Tor>   ln -s stubgen stubgenv1
Tor>   m3 -w1 -why -g -o stubgen -F/usr/tmp/qkAAAa02272 
Tor>   -> linking stubgen
Tor>   ld: GLOBAL_OFFSET_TABLE overflown: need to use -PIC

Tor> According to the html-helpfile for m3build(1), adding the line
Tor>   m3_option("-X2@-PIC@")

Tor> to ../stubgen/src/m3makefile should do the trick, but I still get
Tor> the same error message. Any hints?  (I also tried "-X1@-PIC@" and
Tor> "-X5@-PIC", where the first gave the same error, and the latter
Tor> gave "unrecognized option ...").

The problem (I think) is that you need to compile all the .c files
that ld is loading with -PIC.  At least, since compiling everything
in the netobj directories with -PIC didn't fix it, I'm assuming that
is the case.

Based on that, I went in to the templates/SPARC file of m3build,
changed all the cc commands to include -PIC:

   "-Y1@/bin/cc@-PIC@",
   "-Y2@/bin/cc@-PIC@",
   "-Y6@" & LIB_USE & "/m3cgc1@-quiet@-fPIC@",
   M3_CONFIG += "-Y2@/bin/cc@-Bstatic@-PIC@"

(not sure the -Y6 line needed it)

Then, I rebuilt everything (the libraries, everything).  Took forever,
but now it works.  

Talk about your huge binaries, though.
--
Blair MacIntyre -- bm@cs.columbia.edu -- Graduate Student (Graphics and UI Lab)

smail: Dept. of Computer Science, 450 Computer Science Building, 500 W 120 St.,
       Columbia University, New York, NY 10027


======================================================================= 49 ===
Date:    Sun, 13 Nov 1994 15:26:19 GMT
From:    spencer@ERA.COM (Spencer Allain)
Subject: FTPable file with language definitions?

I have successfully (at least I think I have) installed SRC Modula-3 release 3.
3
and would like to start examining the power/limitations of the language.
Unfortunately, I don't know the exact syntax of the language and would like to
know where I can find either programming examples or documentation that gives a
brief explanation of what the keywords are, the proper way to declare objects
etc., and what external modules I need to access for simple IO or more complex
tasks.

I am an ex-Modula-2 programmer, so the syntax shouldn't be too hard for me to
follow even though I know there have been some significant changes so that vali
d
Modula-2 programs are not valid in Modula-3.  I'm assuming that it has to do
with the "standard" library interfaces, but without a guide or example code to
browse I may never know.

Thanks for any assistance.

Oh yeah, one more thing.  I have no way to read html files, so I'm looking for
either postscript, ascii, or TeX documention.


                                                 -Spencer Allain
                                                 Engineering Research Associate
s


======================================================================= 50 ===
Date:    14 Nov 1994 13:07:47 GMT
From:    omr1000@cus.cam.ac.uk (O.M. Reynolds)
Subject: Telnet with Modula-3

Can anyone tell me how I can get a Modula-3 program to 
automaticly fetch a page from the web? 
At the moment I can retrieve the HTML script using telnet,
i.e. to get the Cambridge University home page I would;

telnet www.cam.ac.uk 80
GET /

...and out comes a load of HTML. So the question is, how
can I get my M3 program to invoke the telnet program,
pass it the commands as above and capture the resulting text?

Many thanks,   Owen.


======================================================================= 51 ===
Date:    Mon, 14 Nov 94 05:56:55 -0800
From:    mhb@pa.dec.com ("Marc H. Brown")
Subject: Re: Passing options to m3build(1)


    Talk about your huge binaries, though.

You should be able to use shared libraries on SPARCstations.

But, what I like to tell folks when I say that "Hello FormsVBT" is 
13MB or so, is that you should be delighted: there's 13MB or so of 
great stuff there, just waiting to be used! :-) 


======================================================================= 52 ===
Date:    14 Nov 1994 15:54:55 GMT
From:    siva@csgrad.cs.vt.edu (Siva Challa)
Subject: Help: Looking for application libraries

Hi:

I am looking for class libraries written in different object-oriented 
languages to build an integrated application.  I would appreciate it 
if you could let me know of any libraries available on the net. 
I am specifically looking for Modula-3 libraries. Any other languages' 
libaries would also be fine.

Any suggestions on specific applications that are suited for
multi-language environment consisting of object-oriented languages are 
welcome.


Thank you very much.

Siva

----------------------------------------------------------------------------
Siva Challa      				Email: siva@csgrad.cs.vt.edu
Dept. Computer Science       			Phone: (703) 231-7539 (O) 
Virginia Tech 					       (703) 951-9469 (H) 
Blacksburg, VA 24061-0106
----------------------------------------------------------------------------


======================================================================= 53 ===
Date:    14 Nov 94 09:59:23
From:    vixie@gw.home.vix.com (Paul A Vixie)
Subject: Re: Telnet with Modula-3

You wouldn't run Telnet from your Modula 3 program.  Telnet is just a way to
connect a terminal to a remote TCP service (in this case, port 80 which is the
www service).  You don't want your Modula 3 program to have to act like a 
terminal, which is what Telnet would want you to do.  What you want to do is
exactly what Telnet is doing: open a TCP connection to the remote TCP service.
In your case you'll want to bind a Reader to that connection so that you can
treat it as a stream and use the input parsing modules in the Modula 3 library.

It's been two years since I wrote code to do this and the Interface Police
have reportedly made it a lot easier.  Check around in the SRC documentation
and you'll surely find a module that can open a Reader to a remote TCP service.
--
Paul Vixie
La Honda, CA
<paul@vix.com>
decwrl!vixie!paul


======================================================================= 54 ===
Date:    14 Nov 94 08:49:02
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: FTPable file with language definitions?


   Unfortunately, I don't know the exact syntax of the language and would like 
to
   know where I can find either programming examples or documentation that give
s a
   brief explanation of what the keywords are, the proper way to declare object
s
   etc., and what external modules I need to access for simple IO or more compl
ex
   tasks.


   Oh yeah, one more thing.  I have no way to read html files, so I'm looking f
or
   either postscript, ascii, or TeX documention.

For those who cannot access the World Wide Web language definition, the
"html" package in gatekeeper.dec.com:pub/DEC/Modula-3/release-3.3 contains
the html source to the language definition. This is pretty much ascii.
There are ways too to convert from html to tex.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 55 ===
Date:    14 Nov 94 08:27:58
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: M3 compile problem

   References: <m0r5iaT-001NzqC@kitana> <DAGENAIS.94Nov11135440@gutrune.vlsi.po
lymtl.ca>
   NNTP-Posting-Host: roke.cse.psu.edu

   dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) writes:
      You must have a m3makefile to describe your program and use m3build
      to get it compiled. You cannot use m3 directly.

   Ug.  Why is that?  

The arguments passed between m3build and m3 are quite elaborate. M3build
was planned to be called by humans and m3 by programs. Of course you
may proceed otherwise if you wish.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 56 ===
Date:    15 Nov 1994 13:59:26 GMT
From:    bm@shadow.cs.columbia.edu (Blair MacIntyre)
Subject: Re: Telnet with Modula-3

>>>>> On 14 Nov 1994 13:07:47 GMT, omr1000@cus.cam.ac.uk (O.M. Reynolds) said:

Owen> How can I get my M3 program to invoke the telnet program,
Owen> pass it the commands as above and capture the resulting text?

Take a look at the Process module.  The source was installed in
lib/m3/pkg/libm3/src/os/Common/Process.i3 under your installation
directory. 
--
Blair MacIntyre -- bm@cs.columbia.edu -- Graduate Student (Graphics and UI Lab)

smail: Dept. of Computer Science, 450 Computer Science Building, 500 W 120 St.,
       Columbia University, New York, NY 10027


======================================================================= 57 ===
Date:    Tue, 15 Nov 1994 03:42:38 GMT
From:    ckingsto@undergrad.math.uwaterloo.ca (Craig Andrew Kingston)
Subject: Re: Modula3 for OS/2 (was Re: Modula3 for DOS.

  CRAIG KINGSTON
  ckingsto@undergrad.math.uwaterloo.ca



======================================================================= 58 ===
Date:    15 Nov 1994 09:32:42 GMT
From:    pk@i3.informatik.rwth-aachen.de (Peter Klein)
Subject: m3gdb

Since there were some new requests lately, and I don't want to send patches
through the world, I packaged our version of the gdb on
ftp://ftp-i3.informatik.rwth-aachen.de/pub/Modula-3-Contrib/m23gdb-940920.tar.g
z

It is based on gdb 4.13 with enhancements from Cygnus, the Modula-3 support
from the Modula-3 3.3 release, and several patches by Oliver Meyer.  It should
work now with EPC Modula-2 2.0x and SRC Modula-3 3.3, at least on SPARC/SunOS
4.1.3. The Modula-3 support still isn't perfect, but a big improvement over
SRC's distributed version.  See the README.m23gdb file for details.

Peter
---
Peter Klein                        E-Mail: pk@i3.informatik.rwth-aachen.de
Lehrstuhl fuer Informatik III      Tel.: +49/241/80-21311
Ahornstrasse 55                    Fax.: +49/241/8888-218
RWTH Aachen
52074 Aachen
Germany




======================================================================= 59 ===
Date:    Tue, 15 Nov 1994 15:58:30 GMT
From:    jredford@seelebrennt.interzone.lehman.com (John Redford)
Subject: Re: Telnet with Modula-3

In article <VIXIE.94Nov14095923@gw.home.vix.com> vixie@gw.home.vix.com (Paul A 
Vixie) writes:

   You wouldn't run Telnet from your Modula 3 program.  Telnet is just a way to
   connect a terminal to a remote TCP service (in this case, port 80 which is t
he
   www service).  You don't want your Modula 3 program to have to act like a 
   terminal, which is what Telnet would want you to do.  What you want to do is
   exactly what Telnet is doing: open a TCP connection to the remote TCP servic
e.
   In your case you'll want to bind a Reader to that connection so that you can
   treat it as a stream and use the input parsing modules in the Modula 3 libra
ry.

   It's been two years since I wrote code to do this and the Interface Police
   have reportedly made it a lot easier.  Check around in the SRC documentation
   and you'll surely find a module that can open a Reader to a remote TCP servi
ce.

The latest way is along these lines:

IMPORT IP;
IMPORT TCP;
IMPORT Thread;
IMPORT Rd, Wr;
IMPORT ConnRW;

VAR
  c: TCP.T;
  r: Rd.T;
  w: Wr.T;

PROCEDURE Connect(host: TEXT; port: INTEGER)
    RAISES {Wr.Failure,Thread.Alerted,IP.Error} =
  VAR
    a : IP.Address;
  BEGIN
    IF IP.GetHostByName(host, a) THEN
      c := TCP.Connect(IP.Endpoint{ a, port });
      r := ConnRW.NewRd(c);
      w := ConnRW.NewWr(c);
    END;
  END Connect;

PROCEDURE Deconnect()
    RAISES {Wr.Failure,Rd.Failure,Thread.Alerted} =
  BEGIN
    Wr.Close(w);
    Rd.Close(r);
    TCP.Close(c);
  END Deconnect;



Of course, this isnt "great" code, or even "good", but you get the
idea I hope.

--
John Redford (AKA GArrow) | 3,600 hours of tape.
jredford@lehman.com       | 5 cans of Scotchguard.


======================================================================= 60 ===
Date:    15 Nov 1994 21:51:52 GMT
From:    schaub@ponder.csci.unt.edu (Stephen Schaub)
Subject: Unbuffered/raw terminal input

Is there an OS-independent way to do unbuffered or raw terminal input
using Modula-3?  I really like what I see in the v3.3 interfaces that
remove a lot of low-level file stuff from the Unix modules to the FS
and File/Terminal/etc. modules.  But in perusing those interfaces
(in particular Terminal) I can't find what I'm looking for.

Stephen Schaub <schaub@cs.unt.edu>


======================================================================= 61 ===
Date:    Wed, 16 Nov 94 08:23:20 -0800
From:    mcjones@pa.dec.com
Subject: Re: Unbuffered/raw terminal input

Stepen Schaub asks:

    Is there an OS-independent way to do unbuffered or raw terminal 
    input using Modula-3?

The answer is not currently.  When I designed the current portable 
operating system interfaces (FS/File/Terminal, etc.), I tried to 
capture as much useful functionality as I could that could be implemented 
on top of at least Unix and Win32 (and of course it would be nice 
to consider the Macintosh).  I undoubtedly missed some things, although 
I spent a lot of time with my nose in the manuals.  Suggestions are 
welcome for additional function, especially if you supply all the 
implementations! 

If there are very useful OS-dependent functions, then it also seems 
reasonable to add them to interfaces like TerminalPosix, etc.


Paul McJones
Digital Equipment Corp.
Systems Research Center
mcjones@pa.dec.com


======================================================================= 62 ===
Date:    16 Nov 1994 18:20:47 GMT
From:    lhkc100@cus.cam.ac.uk ( # + K ^_^ #)
Subject: Can't run!

I have recently installed modula3-3.3 of the linux version in my computer.  I
have also successfully compiled the programs but when I try to run them, an err
or
message

<program>: Can't find library 'libm3.so.3'

I have written down import("libm3"), what's wrong with my m3?  I guess there
should be some problems about my linker...

Thanks in advance if you can help me!

Hopeless Kelvin



======================================================================= 63 ===
Date:    16 Nov 1994 16:08:46 GMT
From:    Michel Dagenais <dagenais@vlsi.polymtl.ca>
Subject: Modula-3 Frequently Asked Questions (FAQ)

Archive-name: Modula-3-faq


   
   
                                 MODULA-3 FAQ
                                       
   
   
   Michel Dagenais, dagenais@vlsi.polymtl.ca
   
   
   
   v2.2, 30 August 1994
   
   
   
Contents

     * Contents
     * What is new?
     * The language
          + What is Modula-3?
          + Is Modula-3 a superset of Modula-2?
     * The documentation
          + Where can I get a description of Modula-3?
          + Where can I get other information on Modula-3?
     * The implementations
          + Where can I get an implementation?
          + What is SRC Modula-3?
          + What is m3pc?
     * Some specific questions
          + Why is "Hello World" so large?
          + Why objects and interfaces?
          + Comparisons between Modula-3 and other languages?
          + What is the story with Trestle and OpenWindows?
          + Linking with C++ code
          + Flushing writers to see the output immediately
          + Problems with threads and VTALARM
          + What is the purpose of BRANDED and REVEAL
          + Why uppercase keywords
          + M3build versus Make or why m3 does not work
          + Missing RTHooks or similar messages
          + The program receives a SEGV signal under the debugger
          + What is M3-lite, MS-Windows support
     * FTP
          + How To Obtain Pre-Compiled Binaries
          + What if I don't have ftp access?
     * Contributing
          + Can I contribute Modula-3 software?
          + ILU, an object-oriented multi-lingual RPC-capable module
            system
     * Modula-3 for teaching
     * Modula-3 In Industry
     * Work In Progress
          + The SRC Compiler
          + Modula-2 To Modula-3 Converter
          + Integrated Development Environment
          + Windowing And User Interfaces
               o Rotated Text
               o Postscript VBTs
          + Persistent Objects
          + Abstract Syntax Tree Tools (M3 Parser)
          + Computer Assisted Learning Tools (Algorithm Animation)
          + Presentations, Tutorials And Teaching Material
          + Reports And Books
          + Parallel Programming
     * Wish List
          + M3Build
          + Coverage And Performance Analysis
          + More VBTs
          + Distributed Computing (Network Objects)
          + Interfaces To Other Libraries And Programs (Tcl, Dps...)
     * Who's Who
       
  ABSTRACT:
  
   This document contains references to most of the material available
   on the Modula-3 language, compiler, tools and libraries. It should
   answer all the most frequently asked questions about Modula-3. The
   FAQ was originally written by Eric Muller. Send corrections,
   suggestions, additions to the current maintainer, Michel Dagenais
   dagenais@vlsi.polymtl.ca.
   
   The postscript version is available on
   ftp.vlsi.polymtl.ca:pub/m3/m3-faq.ps.
   
   An hypertext WWW version is found on
   http://froh.vlsi.polymtl.ca/m3/m3-faq.html.
   
   
   
   
   
                                 WHAT IS NEW?
                                       
   
   
   The FAQ answers several new questions, lists new binaries available
   and lists the ports under way.
   
                                 THE LANGUAGE
                                       
   
   
What is Modula-3?

   
   
   Modula-3 is a systems programming language that descends from Mesa,
   Modula-2, Cedar, and Modula-2+. It also resembles its cousins Object
   Pascal, Oberon, and Euclid.
   
   The goal of Modula-3 is to be as simple and safe as it can be while
   meeting the needs of modern systems programmers. Instead of exploring
   new features, they studied the features of the Modula family of
   languages that have proven themselves in practice and tried to
   simplify them into a harmonious language. They found that most of the
   successful features were aimed at one of two main goals: greater
   robustness, and a simpler, more systematic type system.
   
   Modula-3 retains one of Modula-2's most successful features, the
   provision for explicit interfaces between modules. It adds objects and
   classes, exception handling, garbage collection, lightweight processes
   (or threads), and the isolation of unsafe features.
   
Is Modula-3 a superset of Modula-2?

   
   
   No; valid Modula-2 programs are not valid Modula-3 programs. However,
   there is a tool to help convert Modula-2 programs to Modula-3.
   
                               THE DOCUMENTATION
                                       
   
   
Where can I get a description of Modula-3?

   
   
   The language definition and most electronically available Modula-3
   information can be accessed on:
   
   Modula-3 Home
   
   The definition of Modula-3 is contained in:
   
     * System Programming with Modula-3 Edited by Greg Nelson Prentice
       Hall Series in Innovative Technology ISBN 0-13-590464-1 L.C.
       QA76.66.S87 1991
       
   
   
   also known as SPwM3. Here is the table of contents:
   
    1. Introduction
    2. Language Definition
    3. Standard Interfaces
    4. An Introduction to Programming with Threads
    5. Thread Synchronization: A Formal Specification
    6. I/O Streams: Abstract Types, Real Programs
    7. Trestle Window System Tutorial
    8. How the Language Got its Spots
       
   
   
   Chapters 2 and 3 have been reprinted in Sigplan Notices, Volume 27,
   Number 8, August 1992, pp 15-42.
   
   Sam Harbison has written a more tutorial book about Modula3:
   
     * Modula-3 Samuel P. Harbison Prentice Hall, 1992 ISBN 0-13-596396-6
       
   
   
   The table of contents is as follows:
   
    1. Introduction
    2. Declarations
    3. Statements
    4. Basic Types
    5. Structured Types
    6. Procedures
    7. Exceptions
    8. Interfaces and Modules
    9. Generics
   10. Dynamic Programming
   11. Objects
   12. Threads
   13. Low-Level Programming
   14. Programming Conventions
   15. SRC Modula-3
   16. Modula-3 Syntax
   17. Answers to Selected Exercises
       
   
   
   The errata sheet is available via anonymous ftp from
   gatekeeper.dec.com in pub/DEC/Modula-3/errata.
   
   Errata
   
   If you cannot find these books at your favorite bookstore, here are
   bookstores connected to the net known to carry them:
   
   UCI carries both books:
   
   UCI Bookstore
   
   While Roswell is known to at least carry the language definition
   (SPwM3):
   
   Roswell Electronic Computer Bookstore (rjames@fox.nstn.ns.ca)
   
   Roswell Bookstore
   
Where can I get other information on Modula-3?

   
   
   There is a Usenet newsgroup, comp.lang.modula3. The archives of that
   group are available via anonymous ftp from gatekeeper.dec.com in
   pub/DEC/Modula-3/comp.lang.modula3. If you do not have access to
   Usenet, there is a relay mailing list; send a message to
   m3-request@src.dec.com to be added to it.
   
   Comp.lang.modula3 archive
   
   There are a couple high-level overview articles available:
   
     * ``Modula-3'', Sam Harbison, Byte, Vol. 15, No. 12, November 1990,
       pp 385+.
     * ``Safe Programming with Modula-3'', Sam Harbison, Dr. Dobb's
       Journal, Vol. 17, No. 10, October 1992, pp 88+.
       
   
   
   A description of the Modula-3 type system is in
   
     * ``The Modula-3 Type System'', Luca Cardelli, Jim Donahue, Mick
       Jordan, Bill Kalsow, Greg Nelson, Conference Record of the
       Sixteenth Annual ACM Symposium on Principles of Programming
       Languages (POPL), Austin Texas, January 11-13 1989, pp 202-212.
       
   
   
   The Modula-3 treatment of floating-point values is described in
   
     * ``The Design of Floating-Point Data Types'', David Goldberg, ACM
       Letters on Programming Languages and Systems (LOPLAS), June 1992,
       Vol 1, no.2, pp 138-151
       
   
   
   The core library interfaces are described and indexed in
   
     * ``Some Useful Modula-3 Interfaces'', Jim Horning, Bill Kalsow,
       Paul McJones, Greg Nelson, SRC Research Report 113. Available via
       anonymous FTP from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-113.ps.Z
       
       Libm3
       
     * ``Pickles: a system for automatic serialization of typed values'',
       Andrew Birrell, Greg Nelson, Susan Owicki, Edward Wobber, Systems
       Research Center, Digital Equipment Corp., in preparation.
       
   
   
   The Trestle window system toolkit, higher-level FormsVBT toolkit, and
   Zeus animation system available with Modula-3, are documented in the
   following reports:
   
     * ``Trestle Reference Manual'', Mark S. Manasse and Greg Nelson, SRC
       Research Report 68, December 1991.
     * ``Trestle Tutorial'', Mark S. Manasse and Greg Nelson, SRC
       Research Report 69, May 1, 1992.
     * ``VBTkit Reference Manual: A toolkit for Trestle'', edited by Marc
       H. Brown and James R. Meehan. (to be a SRC Research Report) A
       draft version is available via anonymous FTP from
       gatekeeper.dec.com in
       pub/DEC/Modula-3/contrib/vbtkit.25Mar93.ps.Z.
       
       VBTKit
       
     * ``The FormsVBT Reference Manual'', Marc H. Brown and James R.
       Meehan, (to be a SRC Research Report). A draft version is
       available via anonymous FTP from gatekeeper.dec.com in
       pub/DEC/Modula-3/contrib/formsvbt.25Mar93.ps.Z and
       pub/DEC/Modula-3/contrib/formsvbt.AppC.26Mar93.ps.Z.
       
       VBTKit library
       
       VBTKit applications
       
     * ``Zeus: A System for Algorithm Animation and Multi-View Editing'',
       Marc H. Brown, SRC Research Report 75, February 28, 1992.
       Available via anonymous FTP from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-075*.ps.Z.
       
       Zeus
       
     * ``Color and Sound in Algorithm Animation'', Marc H. Brown and John
       Hershberger, SRC Research Report 76a, August 30, 1991. Available
       via anonymous FTP from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-076a*.ps.Z.
       
       Color and Sound
       
     * ``The 1992 SRC Algorithm Animation Festival'', Marc H. Brown, SRC
       Research Report 98, March 27, 1993. Available via anonymous ftp
       from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-098*.ps.Z.
       
       Animation Festival
       
   
   
   Network objects are described in the following reports:
   
     * ``Network Objects'', Andrew Birrell, Greg Nelson, Susan Owicki,
       and Edward Wobber, SRC Research Report 115, February 28, 1994.
       Available via anonymous FTP from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-115*.ps.Z.
       
       Network Objects
       
     * ``Distributed garbage collection for Network Objects'', Andrew
       Birrell, David Evers, Greg Nelson, Susan Owicki, and Edward
       Wobber, SRC Research Report 116, December 1993. Available via
       anonymous FTP from gatekeeper.dec.com in
       pub/DEC/SRC/research-reports/SRC-116*.ps.Z.
       
       Distributed GC
       
   
   
   While the Obliq embeddable interpreter is documented in:
   
     * ``Obliq: A lightweight language for network objects'', Luca
       Cardelli, User's Manual, Systems Research Center, Digital
       Equipment Corp., 1994. Available via anonymous FTP from
       gatekeeper.dec.com in pub/DEC/Modula-3/contrib/Obliq.ps.
       
       Obliq
       
   
   
   Hardcopy versions of these reports can be ordered by e-mail; send your
   request including a postal mail address to src-reports@src.dec.com.
   
   SRC research reports
   
   Sedgewick's classic text on computer algorithms is presented in
   Modula-3 in:
   
     * Algorithms in Modula-3 Robert Sedgewick Addison-Wesley, 1993 ISBN
       0-201-53351-0
       
   
   
                              THE IMPLEMENTATIONS
                                       
   
   
Where can I get an implementation?

   
   
   Two implementations are available, SRC Modula-3 and a PC version of it
   (m3pc).
   
   As far as we know, implementations are not available for VMS,
   Macintosh.
   
What is SRC Modula-3?

   
   
   SRC Modula-3 was built by the DEC Systems Research Center and is
   available via anonymous ftp from gatekeeper.dec.com in
   pub/DEC/Modula-3. The most recent version is release 3.3. The previous
   release, 3.1, was a major new release intended mostly for porting to
   architectures other than DEC. A list of known problems and patches is
   available in:
   
   patches
   
   This release is known to work on at least on the DS3100
   (m3-request@src.dec.com), HPPA (laverman@cs.rug.nl), LINUX
   (dagenais@vlsi.polymtl.ca), NeXT 68000 (tom@smart.ruhr.de),
   (nayeri@gte.com) SPARC architectures. Work is under way to port to the
   Macintosh (George Andre dat94gan@ludat.lth.se), OS/2 (Hendrik Boom
   hendrick@CAM.ORG), AIX 3.2.5 for RISC/6000 (Bob Barton
   barton@chopin.eche.ualberta.ca), FreeBSD (Olaf Wagner
   olaf@logware.de). The SPARC release notes may be found on
   ftp.gte.com:pub/m3 while the LINUX ones are available on
   ftp.vlsi.polymtl.ca:pub/m3/linux/README and the HPPA notes are in
   ftp.vlsi.polymtl.ca:pub/m3/hppa/README.
   
   SRC-Modula-3
   
   SPARC release notes
   
   LINUX release notes
   
   HPPA release notes
   
   The compiler implements the language defined in SPwM3. There are
   versions for the architectures listed below. While SRC can test on
   DS3100, ALPHA/OSF and LINUX, it can only rely on what users on other
   platforms tell them to integrate all the platform specific code.
   
   Because of the improved portability of the 3.* release, ports to non
   Unix platforms are easier. A port to Windows NT and/or Windows 3.1 may
   be available in the future. The Windows NT port, in progress, uses
   native threads. This should be a good model for other implementations
   of Thread using native threads.
   
     * AIX386 IBM PC running AIX/PS2,
     * AOSF DEC Alpha AXP running OSF/1
     * AP3000 Apollo DN4500 running Domain/OS
     * ARM Acorn R260 running RISC iX 1.21
     * DS3100 DECstation 3100 and 5000 running Ultrix 4.0 and 4.2
     * HP300 HP 9000/300 running HP-UX 8.0
     * HPPA HP 9000/700, 9000/800 running HP-UX 8.0
     * IBMR2 IBM R6000 running AIX 3.1,
     * IBMRT IBM RT running IBM/4.3,
     * LINUX Intel 386 running LINUX
     * NEXT NeXT running ??
     * NT386 Intel 386 running Windows NT
     * OKI Okidata 7300 (i860) running UNIX SVR4.0
     * SEQUENT Sequent computers running ??
     * SOL2 Sparc running Solaris 2.x
     * SPARC SPARCstation running SunOS 4.1.x
     * SUN3 SUN3 running SunOS
     * SUN386 Sun 386i running SunOS 4.0.1
     * UMAX Encore Multimax running UMAX 4.3 (R4.1.1)
     * VAX VAX running Ultrix 3.1
       
   
   
   The new native compiler is based on GCC and should be fairly easy to
   port. Except for the very lowest levels of the thread implementation,
   the entire system is written in Modula-3.
   
   The DEC SRC Modula-3 release 3.3 contains the following:
   
     * A native code compiler: uses the GCC backend; on
       machines/operating systems that have self-describing stacks, an
       optimized exception handling mechanism is provided, on other
       architectures, setjmp/longjmp is used.
       
       The compilation system provides for minimal recompilation. Only
       those units that depend on the modified interface item will be
       recompiled.
     * m3utils/m3build: tool that performs dependency analysis and builds
       the Modula-3 programs and libraries.
     * A large standard library (libm3) providing
       
          + A multithread, incremental, generational, conservative
            garbage collector
          + Text manipulation.
          + Generic Containers: Lists, Sequences, Tables, SortedLists,
            SortedTables
          + Atoms and Symbolic expressions (Lisp like lists)
          + An extensible stream IO system
          + Typesafe binary object transcription (persistent objects)
          + Operating system interfaces
          + Portable interfaces to the language runtime
   
       
       All standard libraries are thread-friendly. Modula-3 can readily
       link with existing C libraries; many libraries including X11R4 and
       various UNIX libraries are available as part of libm3.
     * m3gdb: a Modula-3 aware version of GDB.
     * trestle: a multi-threaded window system interface that sits on top
       of X windows. It is not unlike InterViews and comes with several
       sample programs.
     * trestle/tcp: a library for simplified access to TCP/IP.
     * vbtkit: a higher level toolkit on top of Trestle. It offers
       buttons, menus, editors, file choosers... and has a Motif-like
       look and feel.
     * formsvbt: an interactive user interface builder. A symbolic
       expression representing the user interface is edited and the
       graphical view is immediately produced.
     * tools/coverage: tool to determine the number of times each
       statement is executed.
     * tools/pp: pretty printer for Modula-3 programs.
     * tools/gnuemacs: emacs lisp files to help editing and debugging
       Modula-3 programs in emacs.
     * tools/m3bundle: tool to bundle data files into an executable to
       produce standalone programs.
     * tools/m3totex: extract TeX documentation from Modula-3 programs
       for a form of literate programming.
     * tools/showheap: tool to graphically see the behavior of the
       garbage collector.
     * tools/shownew: tool to graphically see the allocation behavior of
       a running program.
     * tools/showthread: tool to see the activation of threads in a
       running program.
     * zeus: framework to develop graphical animations of algorithms
       (heapsort, quicksort, LRU cache replacement, network protocols...)
       for visualization and teaching purposes.
     * mentor: a dozen of animations developed using Zeus.
     * netobj: network objects that allow the transparent execution of
       methods across process and machine boundaries. A simple yet very
       effective way to build distributed applications.
     * obliq: simple, interpreted, lexically scoped, object oriented,
       distributed programming language that can be embedded in Modula-3
       programs and call/be-called by Modula-3 procedures. The Obliq
       object model is based on prototypes and delegation.
     * A framework for parsing and analyzing Modula-3 programs. This is a
       complete AST toolkit for Modula-3. This can parse arbitrary
       Modula-3 sources (input isn't required to be a complete unit) and
       produce detailed ASTs representing the input. The ASTs can be used
       to do a variety of semantic analysis tasks, or program generation
       tasks similar to Lisp environments. (m3tk).
     * pkgtools/smalldb: library to store objects on disk with logging
       and recovery capabilities.
     * pkgtools: distribution tool that insures that several copies of a
       package (software, document...) are updated simultaneously.
     * postcard: mail and news reading environment.
     * visualobliq: a graphical user interface builder coupled with a
       simple yet powerful interpreted language, Obliq, for rapid
       development of interactive distributed applications.
     * This is a rather new component and is undergoing a fair amount of
       evolution; however, it is still very useful and exciting. Visual
       Obliq provides an application builder similiar in nature to Visual
       Basic. However, it uses Obliq as its scripting language. This
       makes it easy to build and prototype interesting distributed and
       groupware applications. It can be used for building
       non-distributed applications as well.
     * misc/tcl: interface to access the Tcl language from Modula-3.
     * misc/dps: interface to access Display Postscript from Modula-3.
     * games: more sample Trestle applications.
       
   
   
What is m3pc?

   
   
   A newer version of m3pc, code named EX32 in the README file, is
   available via anonymous ftp from gatekeeper.dec.com in
   pub/DEC/Modula-3/contrib/M3forDOS.
   
   PC Modula-3
   
   From the README, written by Klaus Preschern:
   
   EX32 ("A 32-bit Extension of DOS") is a environment for the
   developement and execution of 32-bit applications with DOS.
   
   EX32 is a collection of DOS programs (drivers + kernel). It provides
   services for applications executed in protected mode. It does process
   management, virtual memory management, interprocess communication via
   pipes and it offers a file system with 32 character filenames.
   
   EX32 runs on MS-DOS 5.00, 6.00 and 6.02. You need a i386/i387
   (coprocessor required) or upward (i486, Pentium). EX32 supports DOS
   XMS memory (but not EMS, VCPI or DPMI). No support for the i286. You
   should have at least 4 MB memory (8 MB or more recommended). The whole
   package occupies unzipped and untared approximately 44 MB of disk
   space.
   
   EX32 comes with GNU C++ (version 2.4.5), SRC Modula-3 (version 3.1,
   including threads), two C libraries, a graphics library for VGA and a
   number of commands (i.e. ls, cp, rm, mkdir, make, ...).
   
   Note: This is a system for experienced programmers! They should be
   familiar with Unix and DOS.
   
                            SOME SPECIFIC QUESTIONS
                                       
   
   
Why is "Hello World" so large?

   
   
   Modula-3 programs are larger than C programs for the following
   reasons:
   
    1. The fixed runtime is substantially larger. It contains a garbage
       collector, a thread runtime, and exception support. Note that
       "Hello World" is virtually all runtime. For larger programs the
       runtime is not an issue.
    2. The generated code includes runtime checks for out-of-bound array
       references and NIL pointer. Many of these checks could be removed
       by a more sophisticated compiler.
       
   
   
Why objects and interfaces?

   
   
   Allan Heydon on comp.lang.modula3, May 4th 1993:
   
   Modula-3 provides two separate mechanisms for data-hiding: one for
   hiding details about how interfaces are implemented, and the other for
   hiding details about how objects are implemented.
   
   The first data-hiding mechanism is realized by the distinction between
   interfaces and modules. Clients can only import interfaces, so the
   names declared in the modules implementing those interfaces are hidden
   from clients. Note that this mechanism has only two levels; a name is
   either declared in an interface, or it isn't. If a name is only
   declared in a module, it can't be used by a client.
   
   The second data-hiding mechanism is realized by opaque types and
   revelations. A Modula-3 interface may declare an object type to be
   opaque, in which case only a subset of the fields and methods of that
   object are revealed to clients importing the interface. Furthermore,
   the Modula-3 revelation mechanism allows a designer to reveal
   successively more fields and methods of an object in a series of
   interfaces. The fields and methods visible to a client then depends on
   which interfaces the client imports.
   
   The latter mechanism is quite flexible. As opposed to the
   interface/module data-hiding mechanism, opaque types allow you to
   define an arbitrary number of levels at which more and more
   information about the implementation of your object is revealed.
   
   See Sections 2.2.10, 2.4.6, and 2.4.7 of ``Systems Programming with
   Modula-3" for more information about opaque types and about partial
   and complete revelations.
   
Comparisons between Modula-3 and other languages?

   
   
   From: laszlo@post.ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
   
   "A Comparison of Modula-3 and Oberon-2" by myself in "Structured
   Programming" 1993, 14:15-22
   
   From: nayeri@gte.com
   
   Robert Henderson, Benjamin Zorn, A Comparison of Object-Oriented
   Programming in Four Modern Languages, Department of Computer Science,
   University of Colorado, Boulder, Colorado, Technical Report
   CU-CS-641-93. Available by anonymous FTP and e-mail from
   ftp.cs.colorado.edu in the file
   pub/cs/techreports/zorn/CU-CS-641-93.ps.Z
   
   The paper evaluates Oberon, Modula-3, Sather, and Self in the context
   of object-oriented programming. While each of these programming
   languages provide support for classes with inheritance, dynamic
   dispatch, code reuse, and information hiding, they do so in very
   different ways and with varying levels of efficiency and simplicity. A
   single application was coded in each language and the experience
   gained forms the foundation on which the subjective critique is based.
   
   
What is the story with Trestle and OpenWindows?

   
   
   Mark Manasse says:
   
   I think that the OpenWindows release should be enough (no need to get
   the MIT X release), although there are a few things in Trestle that
   trigger devastating bugs in OpenWindows. But the only library we
   depend on is Xlib, R4 or later.
   
   The main thing I know that crashes OW 2.0 is the code where we call
   GrabKey specifying AnyKey. You can either loop over all of the keys,
   or you can just comment out the call; programs won't run exactly the
   same, but you probably won't notice the difference.
   
Linking with C++ code

   
   
   Apparently there is no problem to call C++ functions declared as
   extern "C".
   
   From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems
   Labs BOS)
   
   You must use your C++ compiler as the linker, rather than /bin/cc or
   /bin/ld.
   
   You need to call the function '_main'. The easiest way to do this is
   to have the following set of interfaces and implementations:
   

        INTERFACE CXXMain;
          <*EXTERN "_main"*> CxxMain;
        END CXXMain;

        MODULE CXXMain;
        BEGIN
          CxxMain();
        END;

   
   
   and then import CXXMain into your M3 main module. This will ensure
   that the C++ function "_main" gets called.
   
Flushing writers to see the output immediately

   
   
   Modula-3 Writers are buffered. Thus, you need to issue a Wr.Flush when
   the output should appear immediately, for instance to prompt the user
   for some input. Since this can become annoying, libraries in other
   languages sometimes offer the option of unbuffered writes. In
   Modula-3, an equivalent behavior is obtained with AutoFlushWr which
   gets a background thread to flush a writer at a specified interval.
   
Problems with threads and VTALARM

   
   
   The threads are implemented using the virtual timer interrupt.
   Normally, the run time environment will catch the interrupt and
   determine if thread switching is appropriate. However, if a new
   process is created with fork, it will have the virtual timer activated
   and no interrupt handler to receive it, resulting in a core dump. If
   you use the standard procedure Process.Create to fork new processes,
   this will be handled automatically for you. If you insist on using
   fork, you need to disable the timer, fork and then reenable the timer.
   
   
What is the purpose of BRANDED and REVEAL

   
   
   Allan Heydon writes:
   
   These two keywords are necessary because of two quite different
   features of the language. REVEAL is necessary because Modula-3 has
   opaque types and partial revelations. BRANDED is necessary because the
   Modula-3 type system uses structural equivalence instead of name
   equivalence.
   
   In Modula-3, the concrete structure of a type can be hidden from
   clients in an interface. A common idiom is:
   

  INTERFACE I;

  TYPE
    T <: TPublic;
    TPublic = OBJECT
      (* fields *)
    METHODS
      (* methods *)
    END;

  END I.

   
   
   The line "T <: TPublic" introduces the type "I.T" as an opaque subtype
   of the type "I.TPublic". It does not reveal any of the other details
   of the concrete structure of "I.T" to clients. Hence, "I.T" is said to
   be an opaque type. Put another way, the structure of "I.T" is only
   partially revealed to clients.
   
   In addition, it is possible to reveal more of "I.T"'s structure in
   other interfaces, like this:
   

  INTERFACE IRep;

  IMPORT I;

  TYPE
    TPrivate = I.TPublic OBJECT
      (* more fields *)
    METHODS
      (* more methods *)
    END;

  REVEAL
    I.T <: TPrivate;

  END IRep.

   
   
   This interface declares a type "IRep.TPrivate" that is a subtype of
   "I.TPublic". It also asserts that "I.T" is also a subtype of
   "IRep.TPrivate". A client that imports only the interface "I" has
   access only to the fields and methods in "I.TPublic" when accessing an
   object of type "I.T", but a client that imports both "I" and "IRep"
   also has access to the fields and methods in "IRep.TPrivate" when
   accessing an object of type "I.T".
   
   The "REVEAL" statement in this module simply asserts a subtype
   relation. Unlike type declarations, revelations introduce no new
   names. Hence, we could not have used the "TYPE" keyword in this case
   because the type "I.T" has already been declared once (albeit
   opaquely) in interface "I".
   
   Every opaque type must have a complete revelation. A complete
   revelation has the form:
   

  REVEAL
    T = TConcrete;

   
   
   The revelation specifies that "TConcrete" is the concrete type for the
   opaque type "T".
   
   The Modula-3 type system uses structural equivalence instead of name
   equivalence. This means that two types are equal iff they have the
   same structure. One consequence of this rule is that two types you
   might intend to be distinct may actually be equal. This can have
   unintended effects on the run-time behavior of your program. For
   example, if both types that you expect to be distinct are actually
   structurally equivalent and the two types guard two arms of a TYPECASE
   statement, the arm for the second type will never be taken.
   
   If you want to avoid accidental equalities between two types, you can
   brand one (or both) of them with the BRANDED keyword. A branded type
   is equivalent to no other type, even if it is structurally equivalent
   to some other type. In essence, the BRANDED keyword adds a bit of
   virtual structure to the type that guarantees it will be distinct from
   every other type.
   
   The Modula-3 syntax allows you to supply a text constant as a name for
   the brand. If you don't supply an explicit brand, the compiler will
   make one up; however, the implicit brand invented by the compiler is
   not guaranteed to be chosen deterministically. Hence, explicit brands
   are useful if you are communicating types from one process to another
   and if you want to be sure that the branded type written by one
   process matches the branded type read in by the other.
   
   Any two opaque types in a program must be distinct. Otherwise, it
   would be too easy for clients to accidentally trip over type
   collisions like the TYPECASE example mentioned above. To enforce the
   restriction that all opaque types are distinct, the language requires
   that the type "TConcrete" in the complete revelation above must be a
   branded type.
   
Why uppercase keywords

   
   
   Some people prefer uppercase keywords others hate them. Another
   possibility is to accept both forms for keywords. This topic has been
   discussed at length and there is no solution that will completely
   satisfy everyone's tastes. Fortunately this is a very minor issue and
   you can easily have lowercase keywords automatically converted for you
   using a macro package like m3su (pion.lcs.mit.edu:/pub/m3su) for
   emacs.
   
   lowercase keywords macro
   
M3build versus Make or why m3 does not work

   
   
   The Modula-3 compiler m3 does a much finer grained dependency analysis
   than possible with make. For this reason, a very flexible front end,
   m3build, reads the program description files, m3makefile, and
   generates the commands required to compile and link Modula-3 programs
   and libraries. The m3makefile content is documented in the m3build
   documentation. Calling the m3 compiler directly is difficult and thus
   not recommended.
   
Missing RTHooks or similar messages

   
   
   The standard library, libm3, is not included by default. You need in
   your m3makefiles to import(``libm3'') or to import a library which
   imports libm3. Otherwise, messages about run time procedures such as
   RTHooks not being available are produced.
   
   m3build
   
The program receives a SEGV signal under the debugger

   
   
   The garbage collector on some platforms uses the SEGV (segmentation
   violation) signal to detect modified portions of the dynamically
   allocated space. It is possible to disable this feature or to inform
   the debugger to let these signals propagate. See the tips on how to
   use the debugger.
   
   debugging
   
What is M3-lite, MS-Windows support

   
   
   M3-lite is a research project at DEC SRC to see how fast Modula-3
   programs could be compiled and linked. It uses an integrated m3build,
   m3 compiler and code generator (based on Burs) and is targeted at
   Win32 (Windows NT or Windows Chicago). Research projects, by
   definition, do not have release dates. Part of this work, when ready,
   may also serve on other platforms, especially LINUX and FreeBSD since
   they are intel based.
   
                                      FTP
                                       
   
   
How To Obtain Pre-Compiled Binaries

   
   
   The following binaries are available for FTP. If you are willing to
   provide binaries for other architectures, please contact
   dagenais@vlsi.polymtl.ca; they may be put on his FTP server or links
   to your server can be included in the FAQ. The full exploded source
   code tree is available along with the SPARC binaries.
   
     * Release 3.3 SPARC binaries. Contains most of the 3.3 release and
       comes with static and shared libraries. If you have problems
       building the 3.3 release for SPARC, you may want to look at the
       lude/modula3-3.3/src/poly directory as it contains all the locally
       modified files. The original source code is available in
       lude/modula3-3.3/src/orig and may be browsed to see examples of
       m3makefiles amd Modula-3 code. Requesting a directory with .tar.Z
       added to its name will automatically generate the corresponding
       compressed tar file.
       
       It can be retrieved from
       ftp.vlsi.polymtl.ca:lude/modula3-3.3/run/poly.tar.Z and should be
       placed in /usr/local/soft/modula3-3.3/run/poly... Then,
       /usr/local/soft/modula3-3.3/run/poly/sun4.1_sparc/bin must be
       added to your path. Compiled by Michel Dagenais.
       
       SPARC Modula3-3.1
       
     * Release 3.3 LINUX binaries. It can be retrieved from
       ftp.vlsi.polymtl.ca:pub/m3/linux/src-m3-3.3l0.tar.gz and should be
       placed in /usr/local/soft/modula3-3.3... Then,
       /usr/local/soft/modula3-3.3/run/bin must be added to your path.
       Compiled by Michel Dagenais.
       
       LINUX Modula3-3.3
       
     * Release 3.3 HPPA binaries. It can be retrieved from
       ftp.vlsi.polymtl.ca:pub/m3/hppa. Compiled by Bert Laverman.
       
       HPPA Modula3-3.3
       
     * Release 3.3 68000 NeXT binaries. It can be retrieved from
       ftp.vlsi.polymtl.ca:pub/m3/next. Compiled by Thomas Neumann.
       
       NeXT Modula3-3.3
       
   
   
What if I don't have ftp access?

   
   
   Unfortunately, DEC SRC cannot deliver Modula-3 other than by anonymous
   ftp.
   
   Fortunately, Prime Time Freeware (PTF) includes Modula-3. PTF is a set
   of two ISO-9660 CDroms filled with 3GB of freeware, issued
   semi-annually. The latest issue, Volume 1, Number 2, July 1992,
   contains SRC Modula-3 2.07. PTF is distributed via bookstores and
   mail. You can reach PTF using:
   

        Email:  ptf@cfcl.com
        Fax:    [1] (408) 738 2050
        Voice:  [1] (408) 738 4832
        Mail:   Prime Time Freeware
                415-112 N. Mary Ave., Suite 50
                Sunnyvale, CA 94086
                USA

   
   
                                 CONTRIBUTING
                                       
   
   
Can I contribute Modula-3 software?

   
   
   Certainly. Send to m3-request@src.dec.com what you are willing to
   share, be it programs, libraries or other things. They will be put in
   the distribution.
   
   Right now, the pub/DEC/Modula-3/contrib directory contains:
   
   Contrib
   
     * m3rpc a Sun RPC system from Xerox Parc
     * M2toM3 a translator from Modula-2 to Modula-3
     * m3pc an implementation of Modula-3 for PCs.
       
   
   
   You will also find on ftp.vlsi.polymtl.ca in pub/m3:
   
   Modula-3 contributions
   
     * present-src-m3 slides for presenting the Modula-3 tools and
       libraries.
     * cache-anim a zeus graphical animation of the computer memory
       hierarchy.
     * realgeometry a floating point geometry package.
     * sequences sequences allowing insertions in the middle.
       
   
   
ILU, an object-oriented multi-lingual RPC-capable module system

   
   
   The following was recently announced by Xerox PARC:
   
   Version 1.6.4 of the Xerox PARC Inter-Language Unification (ILU)
   system is now available for general use.
   
   WHAT'S ILU?
   
   ILU (pronounced eye'-loo) is a system that promotes software
   interoperability via interfaces. Interfaces between what? Whatever
   units of program structure are desired; we call them by the generic
   term "modules". They could be parts of one process, all written in the
   same language; they could be parts written in different languages,
   sharing runtime support in one memory image; they could be parts
   running in different memory images on different machines (on different
   sides of the planet). A module could even be a distributed system
   implemented by many programs on many machines. Calls across ILU
   interfaces involve only as much mechanism as necessary for the calling
   and called modules to interact. In particular, when the two modules
   are in the same memory image and use the same data representations,
   the calls are direct local procedure calls - no stubs or other RPC
   mechanisms are involved.
   
   ILU modules are known by their interfaces. A module interface is
   specified once in ILU's object-oriented Interface Specification
   Language (called, simply, ISL). For each of the particular programming
   languages supported by ILU (currently Common Lisp, ANSI C, C++, and
   Modula-3; Python, Tcl, and GNU Emacs-Lisp are in the works), a version
   of the interface in that particular programming language can be
   generated. The ILU kernel library provides services which may be used
   by the language-specific interface to overcome intermodule language or
   address space differences.
   
   GETTING THE RELEASE
   
   The release is only available via FTP from the PARC ftp server.
   Perhaps the simplest way is to go through our World Wide Web home
   page,
   
   ILU
   
   CONTRIBUTORS
   
   Antony Courtney, Doug Cutting, Bill Janssen, Denis Severson, Mike
   Spreitzer, Mark Stefik, Farrell Wymore
   
                             MODULA-3 FOR TEACHING
                                       
   
   
   Modula-3 is very well suited for teaching: simple yet powerful, and
   safe. It avoids the complexity of legacy languages. It can be used to
   demonstrate modules and interfaces, object oriented programming,
   multi-threading (concurrency issues), graphical user interfaces
   (Trestle, VBTKit, FormsVBT) and even distributed programming (Network
   Objects, Obliq). Since less time is spent by students and teaching
   assistants chasing dangling pointers and corrupted data, more time is
   available for learning the important concepts.
   
   It is used for teaching in a number of universities. This list is far
   from complete, send corrections and additions to
   dagenais@vlsi.polymtl.ca.
   
   From: Carsten Whimster (bcrwhims@undergrad.math.uwaterloo.ca)
   
   University of Waterloo:
   
   CS246 - Third introductory course in computer science. Software
   engineering and software systems. Medium size projects. Uses Modula-3
   to demonstrate proper OO programming, as well as general programming
   practices.
   
   CS241 - Fourth and final intro course to CS. Focuses mainly on
   compilers and languages. Various assignments has students create most
   of the different parts of a compiler. Also introduces Scheme (lisp).
   
   From: Peter.Robinson@cl.cam.ac.uk
   
   University of Cambridge, England.
   
   The Computer Science course at the University of Cambridge teaches ML
   as an introductory language at the beginning of the freshman year, and
   then uses Modula-3 to develop imperative programming at the end of
   that year. Further lectures on advanced features of the language are
   given early in the second year, together with separate lectures on
   other, specialised languages.
   
   The course has been given to about 70 students each year since 1990,
   and has developed with the language. It ties in with other lectures on
   data structures and algorithms, software engineering and concurrency.
   Modula-3 is used for student group projects in the second year and for
   about a quarter of individual projects in the final year (where,
   interestingly, students using Modula-3 tend to earn higher grades than
   those using C/C++).
   
   Modula-3 is also used in the Computer Laboratory at Cambridge for a
   number of research projects on distributed computing, human-computer
   interaction and electronic CAD.
   
   From: Matthew.Huntbach@dcs.qmw.ac.uk
   
   We have used it for three years here at Queen Mary and Westfield
   College, London. The main problem I find with the language is the slow
   compilation speed on our teaching machines (Macs running A/UX),
   otherwise it's a nice language to teach with.
   
   From: laszlo@ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
   
   University Klagenfurt
   
   Modula-3 is used at the following courses: Undergraduate:
   Softwaretechnology-1 (actually an introduction into programming) (on
   PCs) Softwaretechnology-2 (data structures and algorithms) (on PCs)
   Graduate: Computer Networks (on a network of DECs and SUNs) Parallel
   Programming (on an DEC-Alpha Farm)
   
   Modula-3 has been in use since ca. one year, with very good
   experiences.
   
   From: pk@i3.informatik.rwth-aachen.de (Peter Klein)
   
   Lehrstuhl fuer Informatik III, RWTH Aachen, Germany: Software
   Development Projects, now held for the second time using Modula-3. Aim
   of these projects is to introduce different aspects of software
   development to graduate students. This includes project planning,
   supervision, design, and cooperative implementation of small but
   usable software systems. Central ideas of software design and
   object-oriented implementation are presented and discussed with the
   concepts of Modula-3, which is also the implementation language.
   
   Future plans: Maybe Modula-3 will replace Modula-2 in some
   undergraduate programming lectures in the future.
   
   From: rro@cs.colostate.edu (Rod Oldehoeft)
   
   In the Computer Science Department at Colorado State University, M3 is
   envisioned as a vehicle for several courses.
   
   M3 is introduced in the second course (data structures) to implement
   the ADT concept, including generics. In the sophomore languages
   course, it is an example of an O-O language. In the junior software
   engineering course, additional relevant features are brought in, and
   threads are added in the junior operating systems course.
   
   From: viggo@nada.kth.se
   
   Royal Institute of Technology. Several courses at the computer science
   department use Modula-3. The courses contain programming projects, and
   many students choose to use Trestle. (Dr. Viggo Kann,
   viggo@nada.kth.se)
   
   From: "Dave Snelling" (snelling@cs.man.ac.uk)
   
   Department of Computer Science, University of Manchester, Manchester
   U.K. We have a small, interdisciplinary collection of people using
   Modula-3 for a variety of activities. Our major production code is a
   hardware architecture simulator (about 120 modules). Smaller projects
   include a Lattice Gass model and a Shallow Water model.
   
   At: University of Massachusetts at Amherst
   
   Modula-3 is used as an input language for the Computer Science course
   on Compilation techniques. The professor is Eliot Moss.
   
   From: Michel Dagenais (dagenais@vlsi.polymtl.ca)
   
   Modula-3 is used as the main example in a graduate course on
   ``Algorithmic Aspects of CAD'', which includes a large portion on OO
   programming and databases.
   
   From: pbh@cs.sunysb.edu (Peter Henderson)
   
   Modula-3 is currently used for teaching Computer Science I and
   Computer Science II at SUNY at Stony Brook. We are currently
   developing a sequence of laboratory assignments and case studies
   introducing OO techniques and software reuse in these two courses.
   
   The first course for computer science majors at Stony Brook is
   "Foundations of Computer Science" which emphasizes general problem
   solving, mathematics and the relationships between mathematics and
   computer science. There is an extensive laboratory component using
   theorem provers, Prolog and Standard ML.
   
                             MODULA-3 IN INDUSTRY
                                       
   
   
   A number of programming teams in industry selected Modula-3 for their
   project. It encourages good programming practices and comes with
   excellent libraries for distributed programming and graphical user
   interfaces.
   
   From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems
   Labs BOS)
   
   Sun Microsystems Laboratories, Inc. (East) is using Modula-3 (Network
   Objects, FormsVBT) as the basis for its research in large scale
   distributed object systems.
   
   From: Farshad Nayeri (nayeri@gte.com)
   
   Distributed Object Computing, GTE Labs, Waltham, Massachusetts USA
   Modula-3 (FormsVBT, Sx, Netobj libraries) is used to prototype
   distributed object management. (Farshad Nayeri nayeri@gte.com).
   
   Report
   
                               WORK IN PROGRESS
                                       
   
   
   The purpose of this section is to let everyone know what is being
   worked on. This is not a commitment to a quick release or even to
   completion. However it may enable parties interested in the same
   topics to pool their efforts, avoid duplication or better integrate
   their packages.
   
   To find more information about the names mentioned, see the Who's Who
   section.
   
The SRC Compiler

   
   
   The compiler already implements the full language and runs on several
   platforms. Speed enhancements and support for some popular non-Unix
   platforms may be expected.
   
Modula-2 To Modula-3 Converter

   
   
   A better Modula-2 to Modula-3 converter (99%conversion...) is in the
   works under the supervision of Peter Klein.
   
Integrated Development Environment

   
   
   A number of groups have made experiments in this area. Tools such as
   VBTkit for the user interface, m3tk for syntax and dependency
   analysis, dynamic linking... could be used to produce such an
   environment. It is worth noting that precompiled interfaces are much
   easier to achieve in M3 than in several other popular languages.
   
   Peter Klein is working on a Modula-3 development environment and
   associated user interface. See the paper entitled ``Designing Software
   with Modula-3'', it describes a software architecture description
   language based on Modula-3.
   
   Report
   
   Klaus Preschern, Carsten Weich, Laszlo Boszormenyi have made the port
   of Modula-3 to the PC. The M3-PC environment will be enhanced,
   especially with threads and graphics, including a student-friendly
   environment.
   
   David N. Gray of Lucid Inc. has been experimenting with connecting the
   Modula-3 compiler with the Lucid Energize Programming System
   (currently sold as a development environment for C and C++ on Sun
   SPARCstations). The modified compiler is available as an unsupported
   as-is hack, to accompany the new Energize release that it works with.
   
   Energize Modula-3
   
   Geoff Wyant is experimenting with FormsVBT/VBTKit to build a simple
   friendly development environment.
   
Windowing And User Interfaces

   
   
  ROTATED TEXT
  
   
   
   Currently, there is no VBT to show non horizontal text, because of X
   windows limitations. This would be desirable and can be implemented in
   one of the following ways: a) open a pipe to the ghostscript
   Postscript interpreter and use it as a font renderer, cache and
   display the character bitmaps produced; b) have Bezier curves for the
   most popular Postscript fonts, Trestle handles Bezier curves; c) use
   the new text facilities in X11R6 that remove previous limitations. A
   prototype implementation of a) has been implemented by Alain Dube
   (contact Michel Dagenais); the performance with the cache is good but
   this remains a relatively complex solution. The b) solution would be
   relatively easy to implement but the resulting quality may not be as
   good as a real font renderer. The c) solution may not be available for
   some time since many workstation vendors take a long time before
   integrating the new X windows facilities.
   
  POSTSCRIPT VBTS
  
   
   
   It is often useful to display Postscript files in a VBT, for example
   for an included diagram in a document editor.
   
   This can be achieved by using the ghostscript Postscript interpreter
   as a rasterizer. A prototype has been programmed by Alain Dube
   (contact Michel Dagenais) but the performance is not too good when
   large color bitmaps are handled. An alternative implementation is to
   convert Postscript files into display lists (Bezier curves and text)
   as a preprocessing step. Further displaying and even editing becomes
   very simple. A prototype implementation of this has been done by
   Benoit Poirier (contact Michel Dagenais).
   
Persistent Objects

   
   
   With Pickles to store objects in files, the implementation of
   persistent objects is simplified. Furthermore, with the m3tk library
   it is not too difficult to read a type description and to write the
   needed methods to handle that type. Combined with FormsVBT, network
   objects and Obliq, all the ingredients are there to have a nice
   environment for developing graphical distributed applications with
   persistent state and querying facilities.
   
   Peter Klein has a specialized database for annotated graphs, GRAS,
   that is being re-implemented in Modula-3.
   
   Eliot Moss is working on persistent Modula-3 objects. The main
   features are persistence through reachability, load on demand and a
   very low overhead for using persistent objects. The high performance
   is obtained by modifying the compiler and run-time. Initially a
   modified version of GCC, GNU M3, was being worked on. However, with
   the release of the SRC native compiler, the modifications are being
   moved to the SRC compiler instead.
   
   Persistency
   
Abstract Syntax Tree Tools (M3 Parser)

   
   
   The m3tk library can be used to analyze Modula-3 source code in order
   to find specific constructions (use of OBSOLETE facilities, un-handled
   exceptions), build source code browser and analysis tools, stubs
   generators for network or persistent objects... Mick Jordan is
   preparing the 3.2 release of m3tk and finishing the documentation, in
   his spare time.
   
   From: hudson@yough.ucs.umass.edu (Rick Hudson)
   
   If anyone is interested we have developed a Bison grammar that parses
   the Modula-3 language input. If interested please feel free to contact
   me hudson@cs.umass.edu.
   
Computer Assisted Learning Tools (Algorithm Animation)

   
   
   The Zeus Algorithm Animation package may be used to quickly develop
   graphical and animated teaching aids. Most of the algorithms described
   in Robert Sedgewick's Algorithms book have been animated at DEC SRC
   through the work of Marc H. Brown.
   
   Animation of compilation techniques have been produced by students at
   University of Illinois with the help of Marc Najork.
   
   From: "Arnulf Mester" (mester@ls4.informatik.uni-dortmund.de)
   
   As part of a studental project advised by a college of mine and me a
   Mentor-like collection of Zeus-based animations of typical distributed
   algorithms and communication protocols (termed ZADA) has been
   compiled. Hopefully I'll get to include more information and access
   during the next weeks into our ZADA WWW home page
   
   ZADA
   
Presentations, Tutorials And Teaching Material

   
   
   Modula 3 is used for teaching in a number of Universities. Some
   Modula-3 related teaching material may be shared between interested
   parties.
   
   Michel Dagenais has a French presentation about the Modula 3 language
   that could be distributed.
   
   Geoff Wyant is preparing a tutorial on Modula-3 for the upcoming
   OOPSLA conference.
   
Reports And Books

   
   
   Sam Harbison is preparing a revised version of his existing book on
   Modula-3. He may include more material on the new libraries.
   
   Laszlo Boszormenyi, Roland Mittermeir and Carsten Weich are working on
   a book (it will be published in German and in English) with the
   work-title:
   
   "Programming in Style - An Introduction into Programming with
   Modula-3"
   
   The book will be published at Springer (in German in October 1994, in
   English maybe or December, or January 1995). For the book, the M3-PC
   environment will be enhanced, especially with threads and graphics,
   including a student-friendly environment.
   
   A book about writing distributed object oriented applications, using
   Modula-3, m3build, m3gdb, analyze_coverage, FormsVBT, Obliq and
   Network Objects is being planned by Geoff Wyant, Farshad Nayeri and
   Michel Dagenais.
   
   From: BERGINF@PACEVM.DAC.PACE.EDU (Joseph Bergin)
   
   I am also at work on a Modula-3 college level textbook. It will cover
   the data structures course and will stress data abstraction. It will
   be similar to my current book: Data Abstraction: The Object-Oriented
   Approach using C++, published by McGraw Hill. Status: The software has
   been built and I am currently writing the text itself. Joe Bergin,
   berginf@pacevm.dac.pace.edu, Pace University
   
Parallel Programming

   
   
   From: Ernst A. Heinz, University of Karlsruhe, F.R. Germany (email:
   heinze@ira.uka.de)
   
   I would like to inform you about our ongoing Modula-3* project here at
   the University of Karlsruhe. At the moment, we are actively involved
   in adding sophisticated dependence and data flow analysis to DEC's
   Modula-3 compiler (release 3.x!). The Modula-3* compiler will be able
   to generate code for real parallel machines, for networks of
   workstations, and for standard sequential execution. (Our new IPD
   Modula-2* system available by anonymous ftp from ftp.ira.uka.de in
   "pub/programming/modula2star" may give you an initial feeling about
   it!)
   
   For all interested folks I have made my JSPP'93 paper publicly
   available by anonymous ftp. The title of the paper reads as follows:
   
   "Modula-3*: An Efficiently Compilable Extension of Modula-3 for
   Problem-Oriented Explicitly Parallel Programming".
   
   Paper
   
   More recent work includes
   
   E.A. Heinz. Sequential and parallel exception handling in Modula-3*: A
   unifying semantics specification. In P. Schulthess (editor). Advances
   in Modular Languages: Proceedings of the Joint Modular Languages
   Conference, pages 31-49, Ulm, Germany, September 28-30, 1994.
   
   Paper
   
                                   WISH LIST
                                       
   
   
   The Modula-3 development environment now contains a large number of
   very good tools and libraries that work nicely together. The purpose
   of this section is to help contributors determine what additions would
   be helpful to others. It may get you in contact with people that would
   like to use your contribution or with people that may provide some
   items on your wanted list or team with you for their development.
   
M3Build

   
   
   The descriptions of programs and libraries stored in m3makefiles are
   simple and efficient. It would be interesting to be able to specify
   different m3-options for some files (debugging, performance
   analysis...), and to have the dependency analysis take into account
   previously used options when determining modules to recompile (Michel
   Dagenais).
   
   Although makefiles cannot perform the same consistency checks as
   m3build and are more cumbersome to use, it may be useful to be able to
   drive the compiler through makefiles for training purposes (i.e. learn
   Modula-3 and Makefiles at the same time)
   (bwbecker@watdragon.uwaterloo.ca).
   
Coverage And Performance Analysis

   
   
   Tools already exist for coverage analysis, pretty printing,
   performance analysis, viewing the threads and the garbage collected
   heap. It would be nice to have these easily accessible through an
   integrated development environment (Michel Dagenais).
   
More VBTs

   
   
   An editor widget with multiple fonts (fixed and proportional character
   spacing) perhaps even with direct support for HTML (item lists,
   centered headings...) (Geoff Wyant, Farshad Nayeri).
   
   A diagram editor widget (Farshad Nayeri).
   
   A split VBT that positions NxM childs in aligned rows and columns
   (Geoff Wyant).
   
   A Graph VBT that displays arbitrary graphs (such as call trees, cross
   references...). This could be implemented adding a placement module
   (to determine the vertex positions) to work on the existing GraphVBT
   module (Geoff Wyant).
   
   Some of the VBTs implemented in miscellaneous libraries (such as
   GraphVBT in Mentor/Zeus) could be placed in a more visible location
   such as VBTKit (Michel Dagenais).
   
   MIME extensions to Postcard (Farshad Nayeri).
   
   Submit Trestle to a graphical designer (Farshad Nayeri).
   
Distributed Computing (Network Objects)

   
   
   Network objects are an exciting recent addition. The underlying model
   is very simple and effective. Authentication and access control will
   be required in many applications.
   
   A network object daemon that starts specific programs upon need, like
   inetd does using inetd.conf for most network services, would be very
   useful (Michel Dagenais).
   
Interfaces To Other Libraries And Programs (Tcl, Dps...)

   
   
   C functions are easily called from Modula 3. Thus, stubs have been
   produced to access John Ousterhout's Tcl and also Display Postscript
   from Modula 3.
   
   An automatic tool to produce such stubs from .h C files would be very
   useful (Geoff Wyant).
   
   Stubs to access the Motif X Windows library would be useful (Geoff
   Wyant).
   
   Similar stubs would be desirable to access databases such as Postgres
   or Exodus and access/provide World Wide Web information using the
   hypertext transfer protocol libraries (HTTP) (Geoff Wyant).
   
                                   WHO'S WHO
                                       
   
   
   Modula-3 enthusiasts, users or contributors. Please notify me for
   additions, corrections or removals.
   
     * Robert Ayers, Adobe, (ayers@Mv.Us.Adobe.Com), the Display
       Postscript to Modula-3 interface
     * Andrew Birrell, DEC SRC, (birrell@src.dec.com), Network objects.
     * Laszlo Boeszoermenyi, Universitaet Klagenfurt, Austria,
       (laszlo@ifi.uni-klu.ac.at), PC port (m3pc), Programming in style
       book.
     * Marc H. Brown, DEC SRC, (mhb@src.dec.com), VBTKit, FormsVBT, Zeus.
     * Luca Cardelli, DEC SRC, (luca@src.dec.com), Modula-3 definition,
       Obliq.
     * Michel Dagenais, Ecole Polytechnique de Montreal,
       (dagenais@vlsi.polymtl.ca), LINUX and SPARC M3 binaries, M3 FAQ.
     * John D. DeTreville, DEC SRC, (jdd@src.dec.com), Incremental
       garbage collector.
     * David N. Gray, Lucid Inc., Menlo Park, (gray@Lucid.Com), interface
       between the Lucid environment and the M3 compiler.
     * Sam Harbison, Tartan, harbison@tartan.com, Modula-3 book.
     * Ernst A. Heinz, University of Karlsruhe, F.R. Germany
       (heinze@ira.uka.de)
     * Allan Heydon, DEC SRC, (heydon@src.dec.com), IP, Lex, Fmt, PQueue,
       DblBufferVBT modules.
     * Jim Horning, DEC SRC, (horning@src.dec.com), Useful Modula-3
       interfaces.
     * Rick Hudson, University of Massachusetts at Amherst,
       (hudson@cs.umass.edu), GNU Modula-3.
     * Mick Jordan, Sunlabs near Palo Alto, mick.jordan@eng.sun.com,
       Modula-3 definition, M3TK and related tools.
     * Bill Kalsow, DEC SRC, (kalsow@src.dec.com), Modula-3 definition,
       M3 compiler and run-time.
     * Peter Klein, Lehrstuhl fuer Informatik III,
       (pk@i3.informatik.rwth-aachen.de). Modula-2 to Modula-3 converter.
     * Bert Laverman, Groningen University, (laverman@cs.rug.nl), HPPA
       support.
     * Mark S. Manasse, DEC SRC, (msm@src.dec.com), Trestle.
     * Paul McJones, DEC SRC, (mcjones@src.dec.com), Useful Modula-3
       interfaces.
     * James R. Meehan, Adobe (jmeehan@mv.us.adobe.com), VBTKit,
       FormsVBT.
     * Roland Mittermeir, Universitaet Klagenfurt, Austria,
       (mittermeir@ifi.uni-klu.ac.at), Programming in style book.
     * Eliot Moss, University Of Massachusetts At Amherst,
       (moss@Cs.Umass.Edu), GNU Modula-3.
     * Eric Muller, DEC SRC (moved?), (muller@src.dec.com), M3 compiler
       and run-time.
     * Marc Najork, DEC SRC, (najork@src.dec.com), 3D animation.
     * Greg Nelson, DEC SRC, (gnelson@src.dec.com), Modula-3 definition,
       Systems Programming with Modula-3 book editor, Trestle, Network
       objects.
     * Farshad Nayeri, GTE Labs Near Boston, (nayeri@Gte.Com), m3-sparc
       mailing list.
     * Frode Odegard, (frode@Odegard.Com), commercial Modula-3 support.
     * Susan Owicki, Stanford University, (owicki@mojave.stanford.edu),
       Network objects.
     * Klaus Preschern, Universitaet Klagenfurt, Austria,
       (preschern@ifi.uni-klu.ac.at), PC port (m3pc).
     * Robert Sedgewick, Princeton University, Algorithms in Modula-3
       book.
     * Jorge Stolfi, University of Campinas, Brazil,
       (stolfi@dcc.unicamp.br), Computational geometry procedures.
     * Carsten Weich, Universitaet Klagenfurt, Austria,
       (weich@ifi.uni-klu.ac.at), PC port (m3pc), Programming in style
       book.
     * Edward Wobber, DEC SRC, (wobber@src.dec.com), Network objects.
     * Geoff Wyant, Sunlabs Near Boston, (gwyant@East.Sun.COM), SPARC
       port.
       
   
   
   
     _________________________________________________________________
   
   
   
    Michel Dagenais, dagenais@vlsi.polymtl.ca, Mon Nov 14 11:38:58 GMT
    1994
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 64 ===
Date:    16 Nov 1994 20:30:11 -0600
From:    kitana!sysop@caprica.com (JL Gomez)
Subject: newbie compilation how?

I've got the Harbison book on Modula-3 and the Linux
version of Modula-3.  I've been told I need to compile
the first example in the book with m3makefile.

I've looked at the docs at SRC via WWW but I still don't know how
to create a m3makefile to compile the program.  Here is the program:

MODULE Hello1 EXPORTS Main;
IMPORT Wr, Stdio;
BEGIN
	Wr.PutText(Stdio.stdout, "Hello, World!\n");
END Hello1.

Can someone e-mail me a m3makefile to compile this program?
What about m3build?

Thanks for the help!
-- 
sysop@kitana.org


======================================================================= 65 ===
Date:    16 Nov 1994 21:13:38 GMT
From:    schaub@ponder.csci.unt.edu (Stephen Schaub)
Subject: Unbuffered/raw terminal input


> 
> Stepen Schaub asks:
> 
>     Is there an OS-independent way to do unbuffered or raw terminal 
>     input using Modula-3?
> 
> The answer is not currently.

I am disappointed, but not surprised.  When I began looking into the matter,
I found that different flavors of Unix do unbuffered or raw input in different
ways.  I'm no UNIX guru, and the thought of wading into low-level I/O stuff
that isn't portable isn't very appealing.

> If there are very useful OS-dependent functions, then it also seems 
> reasonable to add them to interfaces like TerminalPosix, etc.

Unbuffered terminal input is rather useful for interactive programs, and
I would think almost any OS Modula-3 runs under supports it.  It would seem
that putting it in an OS-dependent section would reduce portability
unnecessarily.  If an implementation for unbuffered input were provided
for the various OS's, could the Terminal interface be neatly extended
to provide for that functionality?

Thanks for the info!

Stephen Schaub <schaub@cs.unt.edu>


======================================================================= 66 ===
Date:    17 Nov 1994 16:26:28 GMT
From:    chase@centerline.com (David Chase)
Subject: Re: typesafe C -> M3 calls.

nayeri@gte.com (Farshad Nayeri) writes:

> Marc Fiuczynski replied:

>    In M3 version 3.x a procedure defined in an interface is not
>    accessible globally (anymore) using the I__P name mangling. Instead, a
>    procedure P is called indirectly through an interface record
>    (vtable?).  This makes it just a little harder to call M3 from C.

> There is definitely a need for a tool that automates this process
> without causing grief for either the C or M3 programmer. This way
> people can make ordinary Modula-3 libraries readily available to C
> programs. This helps legitimize the use of M3 to some extent.

I think there's two approaches to consider.  Back in the
Olivetti Modula-3 days, we needed just such a tool for the
(written-in-C, a mistake) backend when we translated the
front-end from Modula-2+-and-IDL to Modula-3.  I recall that I
used a stylized piece of Modula-3 (I think it may also have been
automatically generated) run through the Modula-3 compiler to
generate C, and then I ran an awk script over the generated C to
create a file full of C macros that performed the relevant
calls.  Ugly, but expedient (I only needed it once).

A much better approach than this would be to add an option to
the compiler (or create some other tool) that would generate a C
interface file for accessing objects.  I'd expect that this
would:

1. generate a "struct foo" for "foo" that was an object type (with
   no elaboration of the contents), prefixed by the module name.

   Thus, "struct Text_T" for Text.T.

2. for each method which could be applied to a "foo", generate the
   appropriate macro, suffixing the type name with the method
   name, as in:

   Thread_Closure_apply(x)
   ^      ^       ^     ^
   |      |       |     object of type Thread.Closure
   |      |       method name
   |      type name
   interface name

   This is pedestrian, but predictable.

3. It might be better, given the current state of market in
   debuggers, to create procedures instead (or perhaps, in
   addition).

4. If it is necessary for the C program to (say) allocate some of
   these, then the macros/procedure names might take the form:

   Thread_Closure_NEW()

   Similarly, if you want to manipulate the types themselves, you
   could use Thread_Closure_TYPE (some type handle), and if you
   wish to access the type of an object (again, a handle)
   REF_TYPE(x).

5. Array types are a problem, especially when you get into the
   more entertaining combinations (passing a conforming open
   array to a fixed array value parameter, for example).

Presumably, there'd be some optional way to prefix all these
generated names to allow some small bit of namespace management
(note that macros are preferred in this case, since their effect
is confined to a single source file, unlike procedures).

And, of course, if you wanted checking, you could generate that
into the macros as well, or generate an alternate form (e.g.,
Thread_Closure_apply_checked(x).

David Chase, speaking for myself
CenterLine Software


======================================================================= 67 ===
Date:    17 Nov 1994 17:18:14 GMT
From:    connolly@ulua.hal.com (Dan Connolly)
Subject: BYTESIZE(CHAR)=1 in FileRd.m3??? WideText interfaces?


[I posted about this a while ago, but I think my news software
ate it.]

I have been in the middle of discussions about character sets,
encodings, Unicode, UTF-8, ad nauseum in the HTML forums, so I
noticed the following code in FileRd.m3:

http://www.research.digital.com/SRC/m3sources/html/rw/src/Common/FileRd.m3

      n := rd.sourceH.read(
             SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0,
                      NUMBER(rd.buff^)), mayBlock := NOT dontBlock)

This code seems to assume that NUMBER(rd.buff^) = BYTESIZE(rd.buff^),
which implies, since rd.buff^ is an ARRAY OF CHAR, that
BYTESIZE(CHAR)=1.

In the language definition, it says:

    CHAR      An enumeration containing at least 256 elements

The first 256 elements of type CHAR represent characters in the
ISO-Latin-1 code, which is an extension of ASCII.


Nowhere (that I can find) does it say that BYTESIZE(CHAR)=1.

Would someone care to characterize the above code as:

	(1) an isolated defect in the libm3 code -- easily fixed.

	(2) a pervasive defect in libm3 -- lots of work to fix it.

	(3) by design -- libm3 is not designed to work on platforms
	where BYTESIZE(CHAR)>1.

	(4) correct -- the language definition guarantees BYTESIZE(CHAR)=1,
	and I just didn't see it.

My guess is (2) or (3).


So... has anybody worked on applications involving multibyte character
encodings or wide characters? Has anyone developed a WideText, WideWr
interface or some such? How about UTF-8 -> Unicode tranlations?

Doesn't Windows-NT use a 16-bit character representation in many of
its data structures? I wonder what type is used for those data structures...

(surf surf surf... ah!)

* UNICODE (Wide Character) types 

TYPE
  WCHAR = Ctypes.unsigned_short;    (* wc,   16-bit UNICODE character *)

which is: [-16_8000 .. 16_7fff]


(by the way... doesn't WinNT.i3 border on copyright infringement,
 or divulging trade secrets or somesuch?)

-- 
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 68 ===
Date:    17 Nov 1994 22:58:13 GMT
From:    connolly@ulua.hal.com (Dan Connolly)
Subject: efficiency of VBT/Tresle on X?


I have written lots of code to display documents on X displays, and
I'm now doing it again, this time in Modula-3.

The first thing I noticed was that VBT.Leaf's are transparent, and I
couldn't figure out how to have the associated X window use a
background pixel or pixmap. Having to explicitly paint the background
is a waste.

Hmm... perhaps it's because several VBT.Leafs may share an X Window. I
haven't delved far enough to find out how X Windows are allocated
among VBTs. I hope it's not like InterViews 3.x, where there's one
great big X window for all the objects to share!

Then I noticed that VBT.PaintText's arguments essentially specify
the state of an X graphics context on every call, and I wonder
how much of the
	allocate GC
	set up GC (color, painting operation,...)
	draw text
	release the GC
work is done on _every_ call to VBT.PaintText. I can't seem to trace
the implementation of VBT.PaintText down do the actual calls to XDrawText.
Hmmm... it seems to be building X protocol packets (or something similar)
and queueing them... wierd.


Lastly, I noticed that the process size of even little teeny FormsVBT
applications is HUGE! The m3 compiler typically has a process size of
4MB or so, but unless there's some bug in ps on my machine, FormsVBT
apps use 100's of megabytes. They take a _long_ time to start up, and
they swap significantly.

I'm having fun designing/developing this application in M3, but I'm
afraid I won't be able to deploy the result!

I guess I'll have to hold my breath and see what M3Lite looks like.
Does anybody know if it will support FormsVBT?

Dan

-- 
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 69 ===
Date:    18 Nov 1994 00:03:15 GMT
From:    connolly@ulua.hal.com (Dan Connolly)
Subject: SRC M3 linking, footprint questions


I once got an error message to the effect that some procedure was
mentioned in an interface and not defined in any module.  It made me
nervous...

Recently, someone posted that M3 procedures aren't normal C entry
points with global symbols, but rather entries in an interface vtable
of some sort.

Many C libraries are organized as a few interfaces (.h files), and one
module (.c) per procedure, so that applications will link in as little
code as possible.

Is breaking up an interface into little modules this way supported in
SRC M3? It doesn't look like it. It looks like if you import an
interface, you link in _all_ the modules that export that interface.
Sadness. Lossage.

M3 binaries are big. The shared libraries are big. OK -- it's a
research project. There's lots of debugging fluff in there. When folks
get serious about deploying apps, they'll tackle these issues.

Reorganizing libm3 into modules so that you can build reasonably small
executables is a big enough job as it is, without the compiler making
it impossible!

Also, something in the Pkl interface suggested to me that all the
names of procedures are available to the application at runtime.  (a
procedure is pickled as its type and name... I think). This seems to
have expensive implications.

One more thing:  when my programs get a checked runtime error, they
print out this pretty but content-free message:

***
***
*** Array index out of range
***
***
***

or something similar. But I can't get a stacktrace out of m3gdb!  (I'm
using SRC M3 3.3 on Linux). I can't tell if the M3 runtime is
corrupting the stack when it gets a signal handler, or if the debugger
just loses its marbles. The debugger _is_ able to give backtraces in
other circumstances (like after breakpoints are hit.)

I would prefer that the M3 runtime just call abort(), and leave
the pretty messages to the application or a debugger.

Dan

-- 
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 70 ===
Date:    18 Nov 1994 04:04:25 GMT
From:    schwartz@roke.cse.psu.edu (Scott Schwartz)
Subject: Re: SRC M3 linking, footprint questions

connolly@ulua.hal.com (Dan Connolly) writes:
   When folks get serious about deploying apps, they'll tackle these issues.

The optimist.


======================================================================= 71 ===
Date:    18 Nov 1994 14:25:40 GMT
From:    kalsow@src.dec.com (Bill Kalsow)
Subject: Re: SRC M3 linking, footprint questions

In article <CONNOLLY.94Nov17180315@ulua.hal.com>, connolly@ulua.hal.com (Dan Co
nnolly) writes:
> 
> Many C libraries are organized as a few interfaces (.h files), and one
> module (.c) per procedure, so that applications will link in as little
> code as possible.
> 
> Is breaking up an interface into little modules this way supported in
> SRC M3?

No.  The prelinker checks that interfaces are fully implemented.
One reason is that indirect calls through uninitialized procedure
slots typically die with PC=0 and the debugger befuddled.

> Also, something in the Pkl interface suggested to me that all the
> names of procedures are available to the application at runtime.  (a
> procedure is pickled as its type and name... I think). This seems to
> have expensive implications.

Yes, all the procedure names and addresses are included in the
runtime image.  The cost is (4-byte address + ~20-byte name) per
procedure.  The "average" procedure generates about 256 bytes of
code => the names are a 10% overhead in the text segment.  But
many programs have a K-MByte text segment, K/5-MByte data segment
and 5*K-MByte heap.  So the final overhead looks more like 2%.

> One more thing:  when my programs get a checked runtime error, they
> print out this pretty but content-free message:
> 
> ***
> *** Array index out of range
> ***

In version 3.4 the source file and line number are included.

> But I can't get a stacktrace out of m3gdb!

Your debugger is broken.  In version 3.4, runtime checks don't
depend on signal handlers so it's even more likely that your
debugger will be able to make sense of the stack.

> I would prefer that the M3 runtime just call abort(), and leave
> the pretty messages to the application or a debugger.

The is no consensus on this issue.  The SRC Modula-3 implementation
has flip-flopped several times.


  - Bill Kalsow


======================================================================= 72 ===
Date:    18 Nov 94 14:08:36
From:    dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Can't run!


   <program>: Can't find library 'libm3.so.3'

Try setting your LD_LIBRARY_PATH environment variable:

setenv LD_LIBRARY_PATH /usr/local/soft/modula3-3.3/lib/m3/LINUX
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 73 ===
Date:    Fri, 18 Nov 1994 09:28:09 -0500
From:    douglm@rpi.edu
Subject: error messages

Danielw W. Connolly wrote (among other things):

>One more thing:  when my programs get a checked runtime error, they
>print out this pretty but content-free message:
>
>***
>***
>*** Array index out of range
>***
>***
>***
>
>...
>I would prefer that the M3 runtime just call abort(), and leave
>the pretty messages to the application or a debugger.
>

My wish would probably be to go in the other direction. Often the only
reason I use a debugging package is to find out where my array index is out
of range.

If the system is calling a routine to print a message, could it pass the
name and line number also?




======================================================================= 74 ===
Date:    18 Nov 1994 14:38:48 GMT
From:    kalsow@src.dec.com (Bill Kalsow)
Subject: Re: BYTESIZE(CHAR)=1 in FileRd.m3??? WideText interfaces?

In article <CONNOLLY.94Nov17111815@ulua.hal.com>, connolly@ulua.hal.com (Dan Co
nnolly) writes:

>       n := rd.sourceH.read(
>              SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0,
>                       NUMBER(rd.buff^)), mayBlock := NOT dontBlock)
> 
> This code seems to assume that NUMBER(rd.buff^) = BYTESIZE(rd.buff^),
> which implies, since rd.buff^ is an ARRAY OF CHAR, that
> BYTESIZE(CHAR)=1.

It also assumes that BYTESIZE(CHAR)=BYTESIZE(File.Byte).

A better version might be

      n := rd.sourceH.read(
             SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0,
                      BITSIZE(rd.buff^) DIV BITSIZE (File.Byte)),
                      mayBlock := NOT dontBlock)

> 
> Would someone care to characterize the above code as:
> 
> 	(1) an isolated defect in the libm3 code -- easily fixed.
> 
> 	(2) a pervasive defect in libm3 -- lots of work to fix it.
> 
> 	(3) by design -- libm3 is not designed to work on platforms
> 	where BYTESIZE(CHAR)>1.
> 
> 	(4) correct -- the language definition guarantees BYTESIZE(CHAR)=1,
> 	and I just didn't see it.

It's (1).  There isn't much unsafe code and there's even less
that must deal with the impedence mismatch between CHAR and File.Byte.

But, my experience is that much of the unsafe code is buggy.
Programmers who grew up with 8-bit characters on byte-addressed machines
(myself included) are quite sloppy with NUMBER, BYTESIZE, and ADRSIZE.

> So... has anybody worked on applications involving multibyte character
> encodings or wide characters? Has anyone developed a WideText, WideWr
> interface or some such? How about UTF-8 -> Unicode tranlations?

I haven't heard of any Unicode based work in Modula-3.

> Doesn't Windows-NT use a 16-bit character representation in many of
> its data structures? I wonder what type is used for those data structures...

Windows-NT offers both 8 and 16-bit versions of most of its interfaces.
The Modula-3 veneer provides access to both versions.  The version 3.4
compiler retains the 8-bit CHAR.

> (by the way... doesn't WinNT.i3 border on copyright infringement,
>  or divulging trade secrets or somesuch?)

I don't believe so.  It's a translation of a public API.  It contains
no trade secrets.

  - Bill Kalsow



======================================================================= 75 ===
Date:    19 Nov 1994 17:20:11 GMT
From:    eric@pandora.Las-Vegas.NV.US (Eric J. Schwertfeger)
Subject: How resource-hungry is Modula-3 Really?

I just installed the src-m3-3.3l2.strip package on my linux machine to learn
m3.  I was expecting some overhead because the FAQ talked about the question
"Why is my hello_world executable so big?"  However, I was quite surprised
when the vbt calculator had a stripped executable size of almost 200K, and
an in-memory resident size of almost 2 Meg.  If most of that overhead is
fixed for any given vbt application, then it is acceptable (barely).

I'm looking for a language/toolkit combination to learn for a rather large
project, that being a WYSI(Damn Close) editor.  Yes, I've gone permenantly
insane.  That's beside the point.  I'm currently considering very structured
C with possibly a Tk interface, C++ with a Fresco interface (I know, not 
stable), or M3 with a Tressle interface.  

Given this, how much will the UI part of this project require in m3?  I'd
like this to at least be usable in an 8 Meg (real) machine, provided nothing
else is running.



======================================================================= 76 ===
Date:    Sat, 19 Nov 1994 21:42:32 GMT
From:    mychng@mobius08.math.uwaterloo.ca (Ch'ng Mei Yen)
Subject: Problem With Scopes 

Hi, I am doing my assignment, and I was just wondering if MODULA-3 is
somewhat like PASCAL, scopewise.

e.g.
	Consider this program.

	MODULE  Something EXPORTS Main;
	IMPORT Whatever;

	PROCEDURE First
		:
		:
	Something:=Second;
	END First;

	PROCEDURE Second() =
		:
		:
	END Second;
	BEGIN 
	END Something.

	Can PROCEDURE First call PROCEDURE Second from within the
	PROCEDURE First itself?
	

Please get back to me. THANKS!

-- 
Mei Y., Ch'ng          
Village 1, N2 -316, U of W
Tel: 725-7055
***************************************************************************





======================================================================= 77 ===
Date:    Sun, 20 Nov 1994 08:48:17 GMT
From:    n8243274@henson.cc.wwu.edu (S. Lee ODEGARD)
Subject: M3 by Example #1


I intend to spend the next year spare time writing example programs for 
the M3 by Example project
I invite others to do the same.  If someone could
provide a ftp site for the developing work, I would be very grateful.

----- ----- Standards for M3 by Examples
Use ASCII, either IO for file-oriented input and output, or Stdio for
interactive input and output.  For maximum portability, document with
ASCII text.

Set as your goal to simply illustrate some of the features of Modula-3
not well illustrated thus far.  Provide real-life problems and solutions,
or interesting explorations or diversions.

----- ----- The problem
The store O_____ is a medium-sized warehouse-type outlet which receives
on average 1000 items per day to disperse and stock throughout the store.
Though the items are marked as to which section of the store they are to
be shelved on, often over 100 shelf spaces per section makes it difficult
to quickly locate on the shelf where the items are to be placed.

----- Proposed solution
An index, keyed on item number, that displays where on the shelf the items
are to be placed.  To save the data entry effort, the index is keyed into a 
text file like this:

614917 1L
614891
640425
640623 1R
640649
640656 2L
...


here, the first three lines describe items to be placed on the first shelf
from the top on the left-hand side of the shelf.  However, before this file
can be sorted by item number, each line must have an shelf location present.
The program following is simply to parse each line of such a file, and
output to a new file, providing all of the locations, like this:

614917 1L
614891 1L
640425 1L
640623 1R
640649 1R
640656 2L
...

----- The program
MODULE ixcat EXPORTS Main ;
(* Index-category:  Input has on each line an item number optionally followed 
|* by other information:
|* Output has other information repeated for all subsequent lines where
|* only an item nubmer appears. *)

IMPORT Stdio, Wr, Rd, IO, Text ;
IMPORT Thread ;
VAR item_loc : TEXT := "" ;

(* Read in text line, and determine if (A) item number is entered or
|* (B) item number and location is entered.  If (B), set global variable
|* item_loc to item location text.
|*
|* Parse text line, and determine if one field or more than one field are 
|* entered. If more than one field, remove all but first field, and copy
|* all but first field to variable item_loc.
|*
|* pre l : input line to parse
|* l post : first field of input line only, or "" if input line is all 
|*   whitespace characters.
|* -
|* pre item_loc : all but first field of previous line that contains more than
|*   one field.
|* item_loc post : no change if zero or one fields in input line;
|*   second thru the last fields if more than one field is present.
|*
|* definitions:
|* field - consecutive group of printing characters surrounded by white-spaces.
*)
PROCEDURE lp( VAR l : TEXT ) = (* line parse *)
VAR p1, q1, p2, el : CARDINAL ;
BEGIN
(* parse _l_, and determine where first field begins; set this to _p1_ *)
  p1 := 0 ;
  WHILE p1 < Text.Length( l ) 
    AND Text.GetChar( l, p1 ) <= ' ' DO INC( p1 ) END ;
  IF p1 = Text.Length( l ) THEN (* abort if all whitespace characters *)
    l := "" ;  RETURN  END ;
  q1 := p1 ; (* determine first space following first field; set this to _q1_ *
)
  WHILE q1 < Text.Length( l )
    AND Text.GetChar( l, q1 ) > ' ' DO INC( q1 ) END ;

(* parse for where second or remaining fields begin; set this to _p2_ *)
  p2 := q1 ;
  WHILE p2 < Text.Length( l )
    AND Text.GetChar( l, p2 ) <= ' ' DO INC( p2 ) END ;

(* determine first whitespace following all printing characters in _l_; 
|* set this to el *)
  el := Text.Length( l ) ;
  WHILE el > p2 AND Text.GetChar( l, el-1 ) <= ' ' DO DEC( el ) END ;

(* set _item_loc_ and reset _l_. *)  
  IF el > p2 THEN item_loc := Text.Sub( l, p2, el-p2 ) END ;
  l := Text.Sub( l, p1, q1-p1 ) ;
END lp ;

VAR ln : TEXT ;
  rd : Rd.T ;  wr : Wr.T ;

<* FATAL Thread.Alerted, Rd.Failure, Wr.Failure, Rd.EndOfFile *> BEGIN
  Wr.PutText( Stdio.stdout, "input >" ) ;  Wr.Flush( Stdio.stdout ) ;  
  ln := Rd.GetLine( Stdio.stdin ) ;  rd := IO.OpenRead( ln ) ;
  
  Wr.PutText( Stdio.stdout, "output >" ) ;  Wr.Flush( Stdio.stdout ) ;  
  ln := Rd.GetLine( Stdio.stdin ) ;  wr := IO.OpenWrite( ln ) ;

  IF rd # NIL AND wr # NIL THEN
  WHILE NOT Rd.EOF( rd ) DO
    ln := Rd.GetLine( rd ) ;  lp( ln ) ;
    IF NOT Text.Equal( ln, "" )  (* ignoring lines of all whitespace char's *)
      THEN Wr.PutText( wr, ln & " " & item_loc & "\n" )  END ;
  END (* OF WHILE *) ;  Wr.Close( wr ) ;
  END (* OF IF rd # NIL *)
END ixcat.


======================================================================= 78 ===
Date:    20 Nov 1994 00:59:00 +0100
From:    kai@khms.westfalen.de (Kai Henningsen)
Subject: Re: error messages

douglm@rpi.edu wrote on 18.11.94 in <aaf2691a00021004fe2c@[128.113.24.157]>:

> My wish would probably be to go in the other direction. Often the only
> reason I use a debugging package is to find out where my array index is out
> of range.
>
> If the system is calling a routine to print a message, could it pass the
> name and line number also?

And *please* also print at least the offending value, preferably also the  
limits it wasn't in! I did a hack to get this in Borland Pascal, and it  
makes finding the error *a lot* easier. Most of the time this info alone  
suffices to guess what went wrong.

Kai
--
Internet: kh@ms.maus.de, kai@khms.westfalen.de
Bang: major_backbone!{ms.maus.de!kh,khms.westfalen.de!kai}

## CrossPoint v3.02 ##


======================================================================= 79 ===
Date:    Sun, 20 Nov 1994 13:30:05 -0500
From:    douglm@rpi.edu
Subject: Re: SortedTable and pickling

>I was hoping to make use of the SortedTable routines but have run across a
>difficulty.
>...
>problem is that the code uses a variable as a terminator rather than NIL.
>
>That variable will be different each time the program is run so that
>SortedTable objects cannot be pickled succesfully.

The answer seems to be to move the variable into the object.





======================================================================= 80 ===
Date:    21 Nov 1994 17:42:05 GMT
From:    kennedy@b0ru01.fnal.gov (Robert Daniel Kennedy)
Subject: m3build doc, newbie question

Hello,

Question 1: While I have plenty of doc on modula3 (Harbison's book),
where is the doc on m3build... whose use appears to be assumed in SRC m3?
I am working from the various other programs' m3makefile as examples....

Question 2: I have seen several "hello world" examples which involve a
module Hello which exports to Main... yet I cannot get one to build
using m3build or m3.  If I write the module as the implementation of Main
itself, then I can get it to build.  What am I missing here which prevents
these "simplest" of examples from building?

Thanks,
Rob Kennedy
Rutgers/CDF/Fermilab


======================================================================= 81 ===
Date:    Sun, 20 Nov 1994 12:16:55 -0500
From:    douglm@rpi.edu
Subject: SortedTable and pickling

I was hoping to make use of the SortedTable routines but have run across a
difficulty.

I got Segmentation violations when trying to access the table after
unpickling it.
I'm having difficulty debugging this stuff with m3gdb but I believe my
problem is that the code uses a variable as a terminator rather than NIL.

That variable will be different each time the program is run so that
SortedTable objects cannot be pickled succesfully.





======================================================================= 82 ===
Date:    21 Nov 1994 10:19:37 -0700
From:    tho@carbon.denver.colorado.edu (Tuan Thanh Ho)
Subject: <>**!! Computer Books 4 Sale !!**<>


I have the following books for sale :

Please note the book condition:

Brand New = (!)
Excellent = (****)
Good      = (***)
Average   = (**)
Poor      = (*)

All books are hard bound unless otherwise noted.

- S. Atre, Data Base: Structured Techniques for Design, Performance, and
  Management, 2nd ed., John Wiley & Sons, 1988, $25 (!).

- K. Kummerle, J. O. Limb, F. A. Tobagi, eds., Advances in Local Area
  Networks, IEEE Press, 1987, $19 (****).

- J. W. L. Ogilvie, Modula-2 Programming, McGraw Hill, 1985, $19 (!).

- W. Stallings, Local and Metropolitan Area Networks, 4th ed., Macmillan,
  1993, $25 (!).

- W. H. Inmon and J. H. Caplan, Information Systems Architecture, John Wiley
  & Sons, 1992, $25 (!).

- D. C. Andrews, and N. S. Leventhal, Fusion: Integrated IE, CASE, and JAD -
  A Handbook for Reengineering The Systems Organization, Yourdon Press
  Computing Series, Yourdon Press, 1993, $25 (!).  

- R. Sedgewick, Algorithms in Modula-3, Addison Wesley, 1993, $25 (!).

- J. T. Arnold, Simplified Digital Automation with Microprocessors,
  Academic Press, 1979, $19 (****).

- V. Milutinovic, ed., Introduction to Microprogramming, Prentice Hall, 
  1992, $25 (!).

- J. Kirkwood, Sybase Architecture and Administration, Ellis Horwood, 1993,
  $25 (!).

- N. Wirth, and J. Gutknecht, Project Oberon: The Design of an Operating
  System and Compiler, Addison Wesley, 1992, $25 (!).

- M. M. Gorman, Enterprise Database in a Client/Server Environment, John
  Wiley & Sons, 1994, $25 (!).

- S. Bapat, Object-Oriented Networks: Models for Architecture, Operations,
  and Management, Prentice Hall, 1994, $25 (!).

- D. E. Thomas and P. Moorby, The Verilog Hardware Description Language,
  Kluwer Academic Publishers, 1991, $25 (!).

- D. E. Comer and D. L. Stevens, Internetworking with TCP/IP: Design,   
  Implementation, and Internals, Vol. II, Prentice Hall, 1991, $25 (!).

- R. C. Camp, T. A. Smay, and C. J. Triska, Microprocessor Systems 
  Engineering, Matrix Publishers, 1979, $19 (***).

- P. Coad and E. Yourdon, Object-Oriented Analysis, Prentice Hall, 1991,
  $25 (!).

- S. Carl-Mitchell and J. S. Quarterman, Practical Internetworking with
  TCP/IP and UNIX, Addison Wesley, 1993, $25 (!).

- F. Hayes-Roth, D. A. Waterman, and D. B. Lenat, eds., Building Expert
  Systems, Addison Wesley, 1983, $19 (****).

- J. A. Aseltine, W. R. Beam, J. D. Palmer, and A. P. Sage, Introduction
  to Computer Systems Analysis, Design, and Applications, John Wiley & Sons,
  1989, $19 (!).

- J. Martin, Telecommunications and the Computer, 3rd ed., Prentice Hall,
  1990, $25 (!).

- J. Martin, K. K. Chapman, and J. Leben, Systems Application Architecture,
  Common Communications Support: Distributed Applications, Prentice Hall,
  1992, $25.

- E. Rich, Artificial Intelligence, McGraw Hill, 1983, $19 (****).

- R. L. Shrader, Electronic Communication, 2nd ed., McGraw Hill, 1967, $15
  (***).

- S. A. Rago, Unix System V Network Programming, Addison Wesley, 1993, $25
  (!).

- K. Sherman, Data Communications: A User's Guide, 3rd ed., Prentice Hall,
  1990, $25 (!).

- P. K. Andleigh and M. R. Gretzinger, Distributed Object-Oriented Data-
  Systems Design, Prentice Hall, 1992, $25 (!).

- G. Salton and M. J. McGill, Introduction to Modern Information Retrieval,
  McGraw Hill, 1983, $25 (!).

- W. J. Collins, Data Structures: An Object-Oriented Approach, Addison 
  Wesley, 1992, $25.

- J. D. Foley, and A. Van Dam, Fundamentals of Interactive Computer Graphics,
  Addison Wesley, 1982, $19 (!).

- E. W. Reed and I. S. Larman, Fluid Power with Microprocessor Control: An
  Introduction, Prentice Hall, 1985, $19 (****).

- T. C. Bartee, Editor-in-Chief, Digital Communications, Howard Sams & Co.,
  1986, $35 (!).

- C. G. Guy, Data Communications for Engineers, McGraw Hill, 1992, $29 (!).

- C. L. Wyatt, Electro-optical System Design for Information Processing,
  McGraw Hill, 1991, $35 (!).

- J. S. Vandergraft, Introduction to Numerical Computations, Academic Press,
  1978, $29 (!). 

- F. Halsall, Data Communications, Computer Networks and Open Systems, 3rd
  ed., Addison Wesley, 1992, $25 (****). 

- D. R. Smith, Digital Transmission Systems, Van Nostrand Reinhold, 1985,
  $20 (****).

- W. S. Meisel, Computer-Oriented Approaches to Pattern Recognition,
  Academic Press, 1972, $25 (***).


If interested, Please e-mail me at: tho@carbon.denver.colorado.edu
               or Phone me at     : (303) 364-4426

Thanks,

Tuan T. Ho




======================================================================= 83 ===
Date:    21 Nov 94 09:12:33
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: efficiency of VBT/Tresle on X?


   Hmm... perhaps it's because several VBT.Leafs may share an X Window. I
   haven't delved far enough to find out how X Windows are allocated
   among VBTs. I hope it's not like InterViews 3.x, where there's one
   great big X window for all the objects to share!

The VBTs manage the allocation of the window real estate among themselves.
Of course you may have several windows if you want but you dont need or
want to have an X window for each VBT, that would be a waste of resources.

   Then I noticed that VBT.PaintText's arguments essentially specify
   the state of an X graphics context on every call, and I wonder
   how much of the
	   allocate GC
	   set up GC (color, painting operation,...)
	   draw text
	   release the GC
   work is done on _every_ call to VBT.PaintText.

There is quite a bit of optimization going on there. Some commands go
almost directly from the leaf windows to the root VBT and graphics contexts
sent to the X windows server are cached and reused, among other things.

I use Zeus/FormsVBT/Trestle to show the operation of virtual/cache memories
for my courses and the animation is zippy on my 16MB 33MHz 486.

   Lastly, I noticed that the process size of even little teeny FormsVBT
   applications is HUGE! The m3 compiler typically has a process size of
   4MB or so, but unless there's some bug in ps on my machine, FormsVBT
   apps use 100's of megabytes. They take a _long_ time to start up, and
   they swap significantly.

They take some time to start up but dont swap much if you have 16MB. I have
no idea why ps reports such silly numbers on my machine too. It may have to
do with the shared libraries or garbage collected heap address range.
Believe me, if my animations were really using 300MB at run time they
would not run as they are in 16MB.

   I guess I'll have to hold my breath and see what M3Lite looks like.
   Does anybody know if it will support FormsVBT?

Well, I would think so. There is already some "Windows NT" code in Trestle.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 84 ===
Date:    21 Nov 1994 23:51:12 GMT
From:    connolly@hal.com (Dan Connolly)
Subject: m3build: packages with multiple binaries


I'm developing a library, and I maintain a set of test programs as
I go along.

If I were using make or Imake, this would all be in one directory,
(or perhaps two) and I could do:

	% make
or
	% make all

and that would build libxxx.a

Then I could do

	% make test-progs

And that would build several clients of the library.

Then I could do:

	% make run-tests

and the test programs would run, diff their output from the expected
results, and report success/failure.

What's the recommended strategy for doing this with m3build? As
far as I can tell, the library and each of the exectuables must
be in separate packages. So I have something like:

./lib
./lib/src
./lib/src/resources
./sgml-test
./sgml-test/src
./html-test
./html-test/src
./html-fmt-test
./html-fmt-test/src
./htmlx-test
./htmlx-test/src
./para-test
./para-test/src
./parax-test
./parax-test/src

With an m3makefile in each directory. This is inconvenient, to
say the least!

Hmmm... how about this:

./src
./src/resources
./TEST
./TEST/html-fmt
./TEST/html-fmt/src
./TEST/html
./TEST/html/src
./TEST/htmlx
./TEST/htmlx/src
./TEST/para
./TEST/para/src
./TEST/parax-test
./TEST/parax-test/src
./TEST/sgml
./TEST/sgml/src
./TEST/data

How do I set it up so that I can go to the top and build all these
packages?

Or at least, how do I set up the m3makefile in TEST/sgml/src so that
it checks to see that my library is up to date before building the
test program? i.e. I want the development cycle to go:

	* write some code in the library
	* write a test program
	* build the test program
		this causes: build the library
	* run the test
	* write/fix library code; repeat

Clues?

Dan
--
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 85 ===
Date:    21 Nov 94 12:13:48
From:    vixie@gw.home.vix.com (Paul A Vixie)
Subject: Re: M3 by Example #1

> If someone could provide a ftp site for the developing work, I would be
> very grateful.

I can do this.  But I will need someone else to champion it, I have machines
but no time.
--
Paul Vixie
La Honda, CA
<paul@vix.com>
decwrl!vixie!paul


======================================================================= 86 ===
Date:    Mon, 21 Nov 94 15:58:10 -0800
From:    mcjones@pa.dec.com
Subject: Re: Unbuffered/raw terminal input

Stephen Schaub <schaub@cs.unt.edu> continues:

    If an implementation for unbuffered input were provided for the 
    various OS's, could the Terminal interface be neatly extended 
    to provide for that functionality?

As I said before, I'm not sure if it's technically possible to come 
up with a neat, portable design.  If someone showed us such a design, 
we'd be happy to add it to Terminal.


Paul McJones
mcjones@pa.dec.com


======================================================================= 87 ===
Date:    22 Nov 1994 00:30:47 -0600
From:    kitana!sysop@caprica.com (JL Gomez)
Subject: Re: m3build doc, newbie question

This is from the DEC SRC M3 WWW server:


A simple example

   
   
   Here's a simple program composed of a main module, an imported
   interface and its implementation.
   
   To begin, create a fresh directory for the package and within that
   directory, a directory for the source files:

    $ mkdir hello
    $ cd hello
    $ mkdir src

   
   
   Create the following source files in the src directory:
   
   In the file src/Main.m3:

    MODULE Main;
    IMPORT A;
    BEGIN
      A.DoIt ();
    END Main.

   
   
   In the file src/A.i3:

    INTERFACE A;
    PROCEDURE DoIt ();
    END A.

   
   
   In the file src/A.m3:

    MODULE A;
    IMPORT Wr, Stdio;

    PROCEDURE DoIt () =
      BEGIN
        Wr.PutText (Stdio.stdout, "Hello world.\n");
        Wr.Close (Stdio.stdout);
      END DoIt;

    BEGIN
    END A.

   
   
   In the file src/m3makefile:

    import ("libm3")
    implementation ("Main")
    module ("A")
    program ("foo")

   
   
   Finally, from the package directory, hello, run m3build. If SRC
   Modula-3 is installed correctly, it will compile the three source
   files and link them with the standard libraries. The derived files
   will be placed in a directory that names the architecture. On an
   Alpha/AXP machine running OSF, the directory is called ALPHA_OSF. The
   executable program will be named foo in the derived directory.
   
   
     _________________________________________________________________
   
   [Modula-3 home page]
   
    m3-request@src.dec.com

Last modified on Thu Apr 21 15:07:33 PDT 1994 by kalsow
     modified on Thu Jan  7 18:40:57 PST 1993 by muller
-- 
sysop@kitana.org


======================================================================= 88 ===
Date:    22 Nov 1994 04:01:44 GMT
From:    connolly@hal.com (Dan Connolly)
Subject: ELF-based M3 release?


The current way of building shared libraries on linux is, well,
inconvenient.

Here's what I'd like to see:

src-m3-3.4-strip.tar.gz:

	* release 3.4 of SRC M3 (smaller footprint? quicker compiles?)
	* compiled for linux 1.1.x, using...
	* ELF-based binaries, shared libraries, with support for building them.
	* m3gdb that doesn't flake out all the time

If that happens, and the linux mprotect() system calls and signal
handling interface stabilize and get documented (perhaps with the
release of linux 1.2?), I'll resume my work on getting the incremental
garbage collector to work under linux.... that is, if somebody else
doesn't beat me to it!

I won't ask for reliable info about _when_, but can I ask _if_ the
above is likely to happen "real soon now"?

I promise... I'll have something to contribute in return... "soon"...

Dan

--
Daniel W. Connolly        "We believe in the interconnectedness of all things"
Software Engineer, Hal Software Systems, OLIAS project   (512) 834-9962 x5010
<connolly@hal.com>                             http://www.hal.com/%7Econnolly


======================================================================= 89 ===
Date:    Tue, 22 Nov 1994 13:07:19 +0000
From:    Chris Shaw <cjds100@cam.ac.uk>
Subject: Re: Modula3 for OS/2 (was Re: Modula3 for DOS.

On Tue, 15 Nov 1994, Craig Andrew Kingston wrote:

>   CRAIG KINGSTON
>   ckingsto@undergrad.math.uwaterloo.ca


Was this posting a mistake or do you actually have an answer to the 
Modula3 for OS/2 query? If the latter, where can I get it?

Thanks,
Chris.



======================================================================= 90 ===
Date:    22 Nov 1994 16:22:09 GMT
From:    steveg@src.dec.com (Steve Glassman)
Subject: Re: Telnet with Modula-3

Here are the sources for a simple program that accessing the
web through a proxy.  It demonstrates the principles of connecting
to a port, transmitting the request and receiving the response.
If you have direct access to the internet you can skip the 
indirecting through the proxy, but you then have to handle
the other protocols (Gopher, FTP, et.al.) yourself.

Note: This code depends on FilePosix and TCPPosix for creating
the TCP reader.

Steve

-----------------------------------------------------------------------

(* Copyright (C) 1994, Digital Equipment Corporation. *)
(* All rights reserved. *)
(* Last modified on Mon Oct 17 22:35:54 PDT 1994 by glassman *)
(* modified on Thu Sep 29 11:56:28 PDT 1994 by mhb *)

(* The "Web" interface retrieve documents from the World Wide Web using an
   http proxy server.  Details about the HTTP protocol are in
   http://info.cern.ch/hypertext/WWW/Protocols/HTTP/HTTP2.html *)

INTERFACE Web;

IMPORT IP, Rd, Thread;

EXCEPTION Error(TEXT);


TYPE T <: ROOT;
(* A "Web.T" identifies an http proxy server.  The routines in this
   interface that take a "Web.T" as a parameter accept the value "NIL",
   which represents the default proxy server obtained by calling
   "Setup(NIL)". *)


PROCEDURE Setup (host: TEXT := NIL): T RAISES {Error};
(* Return a identifier to an http proxy server. *)

(* If "host" is "NIL", it defaults to the value of environment
   variable "http_proxy".  If this variable is
   empty or undefined, it defaults to an implementation-specific value.  
   The exception is raised if "host" is not in a valid format. *)



CONST DefaultRequestFields = ARRAY [0 .. 0] OF TEXT{"Accept: */*"};
TYPE
  MIMEType = {Application, Audio, Image, Message, Multipart,
              Text, Video, Xperimental};

  Date = TEXT;

  Header = RECORD
             httpVersion   : TEXT;
             statusCode    : INTEGER;
             reason        : TEXT;
             contentType   : MIMEType;
             contentSubType: TEXT;
             (* optional fields: *)
             allowed      : TEXT     := NIL;
             public       : TEXT     := NIL;
             contentLength: INTEGER  := 0;
             encoding     : TEXT     := NIL;
             date         : Date     := NIL;
             expires      : Date     := NIL;
             lastModified : Date     := NIL;
             server       : TEXT     := NIL;
             MIMEVersion  : TEXT     := NIL;
             title        : TEXT     := NIL;
           END;

PROCEDURE Get (    url   : TEXT;
               VAR header: Header;
               READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields;
               forceCache: BOOLEAN := FALSE;
               server    : T       := NIL    ): Rd.T
  RAISES {Error, Thread.Alerted, IP.Error};
(* Do a "GET" request, passing in the "requestFields".  By default, the
   proxy server will grab pages from a local cache, if one is available and
   if the "url" is in the cache.  When "forceCache" is "TRUE", the proxy
   server will explicitly not use any cache.  The "Error" exception is
   raised if the header returned by the request is invalid in any way. *)

PROCEDURE GetHead (url: TEXT;
                   READONLY requestFields: ARRAY OF TEXT := DefaultRequestField
s;
                   forceCache: BOOLEAN := FALSE;
                   server: T := NIL): Rd.T
  RAISES {Error, Thread.Alerted, IP.Error};
(* Do a "HEAD" request, passing in the "requestFields".  By default, the
   proxy server will grab pages from a local cache, if one is available and
   if the "url" is in the cache.  When "forceCache" is "TRUE", the proxy
   server will explicitly not use any cache.  Mostly for debugging use *)


PROCEDURE AbsoluteURL (url, base: TEXT): TEXT;
(* Returns an absolute URL constructed from "url" and "base", the
   URL of the document containing "url". *)

END Web.

------------------------------------------------------------------------

(* Copyright (C) 1994, Digital Equipment Corporation. *)
(* All rights reserved. *)
(* Last modified on Mon Oct 17 22:37:44 PDT 1994 by glassman *)
(*      modified on Thu Sep 29 12:05:53 PDT 1994 by mhb      *)

MODULE Web;

IMPORT ConnFD, Env, FilePosix, FileRd, FloatMode, Fmt, IP, Lex,
       OSError, Rd, RdClass, TCP, TCPPosix, Text, TextRd, Thread,
       Wr;

<* FATAL FloatMode.Trap *>

CONST
  EnvironmentVar   = "http_proxy";
  DefaultProxyHost = "http://<local proxy>:<proxy port>/";

REVEAL
  T = ROOT BRANDED OBJECT 
     host: TEXT; 
     port: INTEGER 
  END;

VAR 
  DefaultServer: T := NIL;

TYPE
  TCPRd = FileRd.T OBJECT
            channel: TCP.T;
          OVERRIDES
            close := Close;
          END;


(*--------------TCP stuff -------------------- *)

PROCEDURE ChannelPut (channel: TCP.T; text: TEXT)
  RAISES {ConnFD.TimedOut, IP.Error, Wr.Failure, Thread.Alerted} =
  VAR
    len := Text.Length(text);
    buf: ARRAY [0 .. 2047] OF CHAR;
  BEGIN
    <* ASSERT len < NUMBER(buf) *>
    Text.SetChars(buf, text);
    channel.put(SUBARRAY(buf, 0, len));
  END ChannelPut;

PROCEDURE OpenTCPConnect (server: T): TCP.T
  RAISES {ConnFD.TimedOut, IP.Error, ConnFD.TimedOut, Rd.Failure,
          Wr.Failure, Thread.Alerted, Error} =
  VAR addr: IP.Address; channel: TCP.T;
  BEGIN
    IF IP.GetHostByName(server.host, addr) THEN
      channel := TCP.Connect(IP.Endpoint{addr, server.port});
    ELSE
      RAISE IP.Error(NIL);
    END;
    RETURN channel;
  END OpenTCPConnect;

PROCEDURE Close (self: TCPRd) RAISES {Rd.Failure} =
  BEGIN
    (* Don't need to explicitly do FileRd.Close; TCP.Close and
       FileRd.Close are both just Unix.close *)
    TCP.Close(self.channel);
  END Close;


(* ---------------------- Exported procedures ------------- *)

PROCEDURE Setup (host: TEXT := NIL): T RAISES {Error} =
  VAR server := NEW(T); rd : TextRd.T;
  <* FATAL Rd.Failure, Thread.Alerted *>
  BEGIN
    TRY
      IF host = NIL THEN
        host := Env.Get(EnvironmentVar);
        IF host = NIL THEN host := DefaultProxyHost; END;
      END;
      rd := TextRd.New(host);
      EVAL Lex.Scan(rd, NonColon); (* throw away http:// *)
      Lex.Skip(rd, Seps);
      server.host := Lex.Scan(rd, NonColon);
      EVAL Rd.GetChar(rd);       (* skip ":" *)
      server.port := Lex.Int(rd);
    EXCEPT
      Lex.Error, Rd.EndOfFile =>
        RAISE Error("Lex error scanning proxy host");
    END;
    RETURN server
  END Setup;


PROCEDURE Get (url: TEXT;
               VAR header: Header;
               READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields;
               forceCache: BOOLEAN := FALSE;
               server: T := NIL): Rd.T RAISES {Error, Thread.Alerted, IP.Error}
 =
  VAR
    channel: TCP.T;
    rd     : Rd.T;
  <* FATAL OSError.E, Rd.EndOfFile, Rd.Failure,  Wr.Failure,
     ConnFD.TimedOut *>
  BEGIN
    IF server = NIL THEN
      IF DefaultServer = NIL THEN DefaultServer := Setup() END;
      server := DefaultServer
    END;
    channel := OpenTCPConnect(server);
    ChannelPut(channel, Fmt.F("GET %s HTTP/1.0\n\r", url));
    FOR i := 0 TO LAST(requestFields) DO
      ChannelPut(channel, Fmt.F("%s\n\r", requestFields[i]));
    END;
    IF forceCache THEN
      ChannelPut(channel, "Pragma: no-cache\n\r");
    END;
    ChannelPut(channel, "\n\r");
    rd := NEW(TCPRd, channel := channel).init(
            FilePosix.New(channel.fd, FilePosix.Read));
    header := ParseHead(rd);
    RETURN rd;
  END Get;

PROCEDURE GetHead(url: TEXT;
               READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields;
               forceCache: BOOLEAN := FALSE;
               server: T := NIL): Rd.T RAISES {Error, Thread.Alerted, IP.Error}
 =
  VAR
    channel: TCP.T;
    rd     : Rd.T;
  <* FATAL OSError.E, Rd.EndOfFile, Rd.Failure,  Wr.Failure,
     ConnFD.TimedOut *>
  BEGIN
    IF server = NIL THEN
      IF DefaultServer = NIL THEN DefaultServer := Setup() END;
      server := DefaultServer
    END;
    channel := OpenTCPConnect(server);
    ChannelPut(channel, Fmt.F("HEAD %s HTTP/1.0\n\r", url));
    FOR i := 0 TO LAST(requestFields) DO
      ChannelPut(channel, Fmt.F("%s\n\r", requestFields[i]));
    END;
    IF forceCache THEN
      ChannelPut(channel, "Pragma: no-cache\n\r");
    END;
    ChannelPut(channel, "\n\r");
    rd := NEW(TCPRd, channel := channel).init(
            FilePosix.New(channel.fd, FilePosix.Read));
    RETURN rd;
  END GetHead;

PROCEDURE AbsoluteURL (url: TEXT; base: TEXT): TEXT =
  VAR i: INTEGER;
  BEGIN
    IF url = NIL THEN
      RETURN NIL

    ELSIF Text.GetChar(url, 0) = '/' THEN
      (* Relative to base's host. *)
      i := Text.FindChar(base, ':');
      i := Text.FindChar(base, '/', i + 3);
      url := Text.Sub(base, 0, i) & url;

    ELSIF Text.FindChar(url, ':', 0) # -1 THEN
      (* Absolute form already. *)

    ELSE
      (* Relative to base's host and directory. *)
      i := Text.FindCharR(base, '/');
      url := Text.Sub(base, 0, i) & "/" & url;
    END;

    (* Add trailing slash if need be. *)
    i := Text.FindChar(url, ':', 0);
    IF Text.FindChar(url, '/', i + 3) = -1 THEN
      url := url & "/";
    END;

    RETURN url;
  END AbsoluteURL;

PROCEDURE ParseHead(rd: Rd.T): Header 
  RAISES {Error, Thread.Alerted, IP.Error} =
  BEGIN
    (* ugly header parsing code deleted *)
  END ParseHead;

BEGIN
END Web.


--------------------------------------------------------------------------

(* Copyright (C) 1994, Digital Equipment Corporation. *)
(* All rights reserved. *)
(* Last modified on Mon Oct 17 22:51:33 PDT 1994 by glassman *)
(* modified on Thu Sep 29 12:18:36 PDT 1994 by mhb *)

MODULE Main EXPORTS Main;
IMPORT Fmt, IP, Params, Process, Rd, RdUtils, Text, Thread, Wr, Web, RdCopy;
FROM Stdio IMPORT stderr, stdout;

<* FATAL Thread.Alerted, Wr.Failure, Rd.Failure *>

PROCEDURE ReportError (msg: TEXT := NIL) =
  BEGIN
   IF msg = NIL THEN 
      Wr.PutText(stderr," Usage? webcat [-debug -noCache -proxy XXX] URL\n"); E
LSE
    
    Wr.PutText(stderr, msg & "\n"); END;
    Process.Exit(1);
  END ReportError;

PROCEDURE Get (url        : TEXT;
               debug, forceCache: BOOLEAN := FALSE;
               server: TEXT    := NIL   )
  RAISES {IP.Error, Web.Error} =
  VAR
    rd: Rd.T;
    proxyServer: Web.T := NIL;
    h : Web.Header;
  BEGIN
    IF url = NIL THEN ReportError(NIL); END;
    IF server # NIL THEN
       proxyServer := Web.Setup(server); END;
    IF debug THEN
      rd := Web.GetHead(url, Web.DefaultRequestFields, forceCache, proxyServer)
;
      EVAL RdCopy.ToWriter(Web.GetHead(url), stdout);
    ELSE
      rd := Web.Get(url, h, Web.DefaultRequestFields, forceCache, proxyServer);
      IF h.statusCode >= 400 THEN
        ReportError( Fmt.F("Error '%s' for url %s", h.reason, url));
      ELSE
        EVAL RdCopy.ToWriter(rd, stdout);
      END;
    END;
    Rd.Close(rd);
  END Get;


PROCEDURE main () =
  VAR
    url, arg: TEXT    := NIL;
    i       : INTEGER := 1;
    debug, forceCache   : BOOLEAN := FALSE;
    proxyServer  : TEXT    := NIL;
  BEGIN
    TRY
      WHILE i < Params.Count DO
        arg := Params.Get(i);
        IF Text.Length(arg) = 0 THEN
          ReportError("empty argument #" & Fmt.Int(i))
        END;
        IF Text.GetChar(arg, 0) = '-' THEN
          IF Text.Equal(arg, "-debug") THEN
            debug := TRUE;
          ELSIF Text.Equal(arg, "-noCache") THEN
            forceCache := TRUE;
          ELSIF Text.Equal(arg, "-proxy") THEN
            INC(i);
            proxyServer := Params.Get(i);
          ELSE
            ReportError(NIL);
          END;
        ELSE
          url := Params.Get(i);
        END;
        INC(i);
      END;                       (* while *)
     Get(url, debug, forceCache, proxyServer);
    EXCEPT
      Rd.Failure (ec) =>
        ReportError(Fmt.F("reader failure: %s for URL: %s",
                                 RdUtils.FailureText(ec), url));
    | Wr.Failure =>              (* probably broken pipe through "head";
                                    okay by me *)
    | IP.Error (ec) =>
        ReportError(Fmt.F("IP error: %s for URL: %s",
                                 RdUtils.FailureText(ec), url));
    | Web.Error (t) => ReportError(Fmt.F("Webcat error: %s", t));
    END;
  END main;


BEGIN
  main()
END Main.


======================================================================= 91 ===
Date:    Tue, 22 Nov 1994 22:52:30 GMT
From:    spencer@ERA.COM (Spencer Allain)
Subject: Nested functions?

I have a sinking feeling about this, but I have to ask it anyway.

This will probably not be in correct Modula-3 format, but here goes:


PROCEDURE outerFunction(inputChar : CHAR ;
                        inputCard : CARDINAL) : BOOLEAN

BEGIN

    PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN
    BEGIN
        RETURN(someCard > inputCard) ; (* inputCard is dynamic *)
    END innerFunction ;

    RETURN(innerFunction(3)) ;

END outerFunction ;


I know that this looks pretty strange, but it is like this for a
reason.  If this is possible, or something similar that doesn't
involve changing the number of arguments to innerFunction, then I will
have made an ex-LISP programmer friend of mine very happy.

I have no doubt that this isn't possible, especially since the reason
for the nested function is to pass it as an argument to another
external function that takes as one of its parameters a function with
exactly one CARDINAL parameter that returns a BOOLEAN.


======================================================================= 92 ===
Date:    23 Nov 1994 14:49:08 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Nested functions?


In article <SPENCER.94Nov22175230@spiff.ERA.COM> spencer@ERA.COM
(Spencer Allain) asks if you can have nested functions in Modula-3 to
make an ex-LISP programmer happy.

Yes, you can nest functions in M3, with a slightly different syntax:

PROCEDURE outerFunction(inputChar : CHAR;
                        inputCard : CARDINAL) : BOOLEAN =

  PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN =
    BEGIN
      RETURN someCard > inputCard ; (* inputCard is dynamic *)
    END innerFunction;
    
  BEGIN
    RETURN innerFunction(3); 
  END outerFunction;

>  I have no doubt that this isn't possible, especially since the reason
>  for the nested function is to pass it as an argument to another
>  external function that takes as one of its parameters a function with
>  exactly one CARDINAL parameter that returns a BOOLEAN.

Note that while you can nest procedures, you cannot return or assign a
procedure defined within another procedure as a result. That is,
unlike Scheme, nested procedures in Modula-3 are not "first-class" All
hope is not lost though: the OBJECT construct allows you to to create
"first-class closures" that work a lot like their Scheme equivalents.

>From the language definition [1]: 

"A top-level procedure is a procedure declared in the outermost scope
 of a module. Any other procedure is a local procedure. A local
 procedure can be passed as a parameter but not assigned, since in a
 stack implementation a local procedure becomes invalid when the frame
 for the procedure containing it is popped."

For an example of a closure, see "Thread.Closure" [2].

References:

[1] Modula-3 language definition in SPwM3, also at 
    http://www.research.digital.com/SRC/m3defn/html/procs.html#idx.55

[2] See SPwM3, Section 4.3, page 91, or the Thread interface:
    http://www.research.digital.com/SRC/m3sources/html/thread/src/Common/Thread
.i3

Hope this helps, -- Farshad
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 93 ===
Date:    Wed, 23 Nov 94 11:23:39 -0800
From:    birrell@pa.dec.com
Subject: Re: Pickling: procedures and methods


The comment in Pickle.i3 is wrong.  The current pickle package discards 
procedure values on write, and sets them to NIL on read.  This is 
deliberate.

The rational for this is that you wouldn't really want the ability 
for someone who sends you a pickle to make you invoke an arbitrary 
procedure in you process, just by naming it in the pickle.  It would 
making the task of showing that your program is correct, well-behaved, 
or secure remarkably difficult.

Methods are quite different.  They aren't values at all, even although 
the language syntax makes it look like you assign them sometimes.  
A method is part of a type.  If you subclass an object type you do 
so by creating a type with new methods.  From the point of view of 
pickles, all that's required is to pass the type's fingerprint through 
the pickle.  When the pickle is read, you get the appropriate type 
in the receiving process, complete with its methods.  Unlike procedures, 
you can determine what parts of your process might be called purely 
by inspecting the type of the received pickle.

Andrew



======================================================================= 94 ===
Date:    Wed, 23 Nov 1994 13:54:34 GMT
From:    spencer@ERA.COM (Spencer Allain)
Subject: AI programming language advice?


This is not my question so please respond to Eric Hawthorne.  Also
note that the original post below was placed in the comp.lang.eiffel
group so either see the thread there, or respond directly to him by
mail.

I have decided to repost his article here rather than personally
suggest that he check out Modula-3 because I myself am still an
initiate and know that there are people in this newsgroup who can
better address each of his requirements.

--------------------------------------------------------------------
Below is Eric Hawthorne's original post
--------------------------------------------------------------------

Path: era!uunet!fonorola!news1.mda.ca!egh
From: egh@mda.ca (Eric Hawthorne)
Newsgroups: comp.lang.eiffel
Subject: AI programming language advice?
Date: 21 Nov 1994 17:50:33 GMT
Organization: Macdonald Dettwiler & Associates
Lines: 85
Message-ID: <3aqml9$epm@deneb>
NNTP-Posting-Host: baloo
X-Newsreader: TIN [version 1.2 PL2]


Hi knowledgeable types,

I'm embarking on an AI project and have the following
requirements for a programming language. I wonder if
anyone can help with suggestions or information.

Properties of Language:
(Note: Some of the properties can be of the language
 augmented by a readily available library for the 
 functionality. If so, please let me know the details.)

Must haves:

-High-performance on a midrange 486 pc with 8 meg mem.
-Works in Windows, or perhaps OS/2. 
-Garbage collection
-Co-routine-style concurrency with some way of having
 some global shared memory between the co-routines.
-Good list and string manipulation operations
-No silly memory segment-size limitations.
-Cost no more than about $1000, pref. less.

Almost must haves:

- A way of tieing pattern-matching to invocation, similar
  to the way things work in Prolog or some Lisp extensions.

- Forward & backward chaining inference

- Reasonable support for GUI including typical dialog
  widgets and also some form of line or 2D shape graphics.
  
Bonuses but not essential: 
(Please don't let the lack of these below constrain your 
suggestions to me.)

- a multiple-simultaneous-hypothesis-capable 
  reason maintenance system

- a fairly powerful blackboard with registration of interest
  in categorized postings

Right now, I think I should be considering some PC version of
Prolog, CLOS, or Eiffel. So I'm particularly interested in
hearing details you know about one of those, with regard to 
my requirements. If you know of another language you are sure
meets these requirements better, please mention that though.

I will re-post a summary if I get good information.

Here are some concerns I have about the particular languages
I mentioned. Can anyone show me wrong?

Prolog:

How to do co-routine style concurrency (programmer-controlled
thread interleaving with resumption of contexts) with
shared memory between co-routines?

Performance. Which PC prolog is fastest?

CLOS:

The co-routine with shared-memory thing. 

Performance. Which PC CLOS is fastest?

Awkwardness of expressing multiple return-arg procedures.

Eiffel:

The co-routine with shared-memory thing. 

Is there good GUI support on Windows?

Any libraries for inferencing?

How convenient and powerful are the collection and string 
manipulation operations compared to say Lisp or Prolog.

Thanks for any insight you can give.

Eric Hawthorne (egh@mda.ca)


======================================================================= 95 ===
Date:    Tue, 22 Nov 1994 16:54:18 -0500
From:    douglm@rpi.edu
Subject: Pickling: procedures and methods

I started to re-activate some code that had lain dormant since V2.x and ran
into a problem.

The record I pickled had a procedure variable in it. My recollection is
that the v2 pickling routines restored the procedure reference. With v3 I
get a NIL ref.

The interface for the v3 routines states:

    Pickles preserve the names and signatures of procedures, but the code
for the
    procedures can be different in the program writing the pickle and the
program
    reading the pickle. Object methods are treated the same as procedures.

In the module code I found:

    IF kind = RTTypeMap.Kind.Ref THEN
      writer.write(LOOPHOLE(field, UNTRACED REF REFANY)^);
    ELSE
      (* Other REF fields, including procedures, are discarded on
         write *)
    END;


I'm not sure what that means. Initially I presumed procedure refs would be
restored.
Actually I'm not sure now, how the routines could reliably restore a
procedure ref.

In any case,  I can work round this. The point of my message (eventually)
is what happens to methods?

If I pickle an object with methods in one program then unpickle it later
what has happened to the methods?




======================================================================= 96 ===
Date:    23 Nov 1994 21:57:00 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: m3build question: exporting both a program and a library


Suppose I am writing some code to be used as an executable most of the
time, but on occasion it may be used as a library. Is there a simple
way for doing this using one m3makefile?

FormsEdit is a good example. The documentation for FormsEditVBT states
that it can be used both as a program and a library, but m3build
doesn't seem to follow the documentation in exporting it as a library.
The m3makefile for FormsEdit says something like:

   Module (FormsEditVBT)
   implementation (FormsEdit)   /* exports Main */
   Program (formsedit)

In the context of the above m3makefile, "Module" and "module" will
behave the same, as m3build doesn't end up shipping any interfaces or
a library and its associated interfaces.

I thought of a fix of adding a line "Library (formsedit)" to this
m3makefile. But the fix goes too far to include FormsEdit, the module
that exports Main, as a part of the library.

Is there some way of telling m3build not to include the code in Main
module in the building of a library? It seems to me that each options
is useful in some cases.

Thanks! -- Farshad
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 97 ===
Date:    23 Nov 94 11:15:23
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: m3build: packages with multiple binaries

In article <CONNOLLY.94Nov21175112@austin5.hal.com> connolly@hal.com (Dan Conno
lly) writes:

   What's the recommended strategy for doing this with m3build? As
   far as I can tell, the library and each of the exectuables must
   be in separate packages. So I have something like:

Check in the SRC sources, they usually have

mypkg/src
mypkg/test/test1/src
mypkg/test/test2/src
...
myotherpkg/src
...

   How do I set it up so that I can go to the top and build all these
   packages?

The 3.4 release is supposed to contain a root build file. Perhaps it is
just a makefile or shell script that goes m3build for each subdir.

   Or at least, how do I set up the m3makefile in TEST/sgml/src so that
   it checks to see that my library is up to date before building the
   test program? i.e. I want the development cycle to go:

m3build uses a "push" model instead of a "pull" model as in make.
Fortunately it also checks time stamps coherency which is not done
with make/c unless you are using something like Centerline ObjectCenter.
Thus, it goes faster because it does not check all the dependencies of
all the libraries every time but you must m3build libraries after
modifications.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 98 ===
Date:    23 Nov 94 11:34:34
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: ELF-based M3 release?

In article <CONNOLLY.94Nov21220144@austin5.hal.com> connolly@hal.com (Dan Conno
lly) writes:

   Here's what I'd like to see:

   src-m3-3.4-strip.tar.gz:

   * release 3.4 of SRC M3 (smaller footprint? quicker compiles?)
   * compiled for linux 1.1.x, using...
   * ELF-based binaries, shared libraries, with support for building them.
   * m3gdb that doesn't flake out all the time

You are not asking for too much are'nt you? :-) Let see, release 3.4 is
not out. Alpha releases of ELF binaries started to appear a week or
two ago but are not yet included in any major distribution. New patches
for m3gbd on SPARC appeared a few days ago.

Whenever a major LINUX distribution includes ELF support, i will install
it on my system. When SRC M3 3.4 comes out i will compile it and see how
much effort is required to get M3-lite working on LINUX (help for this
will probably be welcome unless it is a trivial job). By then m3gdb might
be quite usable on LINUX and your list will be pretty much fulfilled.
Christmas looks like a good target :-) or early next year.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 99 ===
Date:    24 Nov 1994 09:27:49 GMT
From:    pr@cl.cam.ac.uk (Peter Robinson)
Subject: Re: m3build question: exporting both a program and a library

In article <NAYERI.94Nov23165700@bermuda.gte.com>, nayeri@gte.com (Farshad Naye
ri) writes:

> Suppose I am writing some code to be used as an executable most of the
> time, but on occasion it may be used as a library. Is there a simple
> way for doing this using one m3makefile?

I had a similar problem when using network objects where I wanted to
describe both the server and the client in the same m3makefile.  Conditional
code in the m3makefile seems to do the trick.  For your example:

   Module (FormsEditVBT)
   if defined ("PROGRAM")
      implementation (FormsEdit)   /* exports Main */
      Program (formsedit)
   else
      Library (formsedit)
   end

(although I would be a little wary of giving the library and the program the
same name even if it does actually work...).  

You then use
   m3build -DPROGRAM
to build the program and straightforward
   m3build
to build the library.

That having been said, for this example I would have thought that you always
wanted to build the library and would have a separate package that was a
simple harness exporting Main to present it as a program.  That way the
program size would be reduced by the size of the shared formsedit library.

-- 
  Peter Robinson                                 Telephone: +44 1223 334637
  University of Cambridge Computer Laboratory    Facsimile: +44 1223 334678
  New Museums Site   Pembroke Street              Telex: via 81240 CAMSPL-G
  Cambridge  CB2 3QG  England                       E-mail: pr@cl.cam.ac.uk


======================================================================= 100 ===
Date:    24 Nov 94 08:14:27
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Nested functions?

In article <SPENCER.94Nov22175230@spiff.ERA.COM> spencer@ERA.COM (Spencer Allai
n) writes:

   PROCEDURE outerFunction(inputChar : CHAR ;
			   inputCard : CARDINAL) : BOOLEAN

   BEGIN

       PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN
       BEGIN
	   RETURN(someCard > inputCard) ; (* inputCard is dynamic *)
       END innerFunction ;

       RETURN(innerFunction(3)) ;

   END outerFunction ;


   I know that this looks pretty strange, but it is like this for a
   reason.  If this is possible, or something similar that doesn't
   involve changing the number of arguments to innerFunction, then I will
   have made an ex-LISP programmer friend of mine very happy.

The above looks OK.

   I have no doubt that this isn't possible, especially since the reason
   for the nested function is to pass it as an argument to another
   external function that takes as one of its parameters a function with
   exactly one CARDINAL parameter that returns a BOOLEAN.

This is another problem. You cannot take the address (store in a procedure
variable) of a nested procedure. Instead, you can build yourself a "closure"
like object (as is done for FormsVBT callbacks) which carries some data 
and a procedure to operate on it. You can do this sort of things
in Obliq though.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 101 ===
Date:    23 Nov 94 13:08:00 
From:    geert@dialis.xs4all.nl (Geert Bosch)
Subject: Modula-3 ported to OS/2?

Hallo All!

Has anyone already ported Modula-3 to the OS/2 platform? If not, is anyone
busy doing so? I remember having seen a query by Craig Kingston, but there
hasn't been any follow-up for the last month or so. Since my e-mail to him
remained unanswered, I'm curious about the state of the project.

Groetjes, Geert 



======================================================================= 102 ===
Date:    Thu, 24 Nov 1994 19:06:28 GMT
From:    ckingsto@undergrad.math.uwaterloo.ca (Craig Andrew Kingston)
Subject: Status and Notes (Re: Modula3 for OS/2 

  Sorry - I must have messed up my post (didn't verify it  either)


  I think someone else was doing a port but do not know who he is
  (someone sent an email message but the email address they gave
  me was bad)

  -- I am doing a port, will welcome any help (any! even if little)
  and I will (will!) post progress reports for interested parties
  to this group --

  Using - Linux Code, with SPARC and WIN32 examples for certain 
  critical code.  GCC, EMX, Unix tool clones, and various tools
  I thought might help.

  Any Questions???  Comments???

  If anyone has some ported 3.3 code and wish to contribute it please
  contact me immediately.

  NOTE **** after friday I shouldn't be at this email address so if
  you can't reply immediately please post to the news groups and I
  should still get it and contact you.

  Thanx Muchly

  CRAIG KINGSTON
  ckingsto@undergrad.math.uwaterloo.ca

  


======================================================================= 103 ===
Date:    Thu, 24 Nov 1994 16:44:54 GMT
From:    spencer@ERA.COM (Spencer Allain)
Subject: What's missing

Obviously something is wrong with my SRC Modula-3.3 installation.
If some kind soul could examine the m3build output (below) and
explain to me what is missing, I'll be very grateful.

I'll bet that it's something trivial like needing some source
files that I don't have.  Currently all that is installed are
the contents of boot-SPARC.tar.gz and m3cc.tar.gz

I had assumed that would be enough for a trivial program, but
I'm starting to wonder if I need the sources for libm3 also.

--------Main.m3----------
MODULE Main;

PROCEDURE DoIt() =
    BEGIN
    END DoIt ;

BEGIN

    DoIt() ;

END Main.


-------m3makefile-------
implementation ("Main")
program ("Hi")


-------m3build output--------
--- building in SPARC ---
m3 -w1 -why -g -o Hi -T.M3IMPTAB ../src/Main.m3 
new source -> compiling ../src/Main.m3
"../src/Main.m3", line 1: unable to find interface (Main)
"../src/Main.m3", line 1: imported object is not an interface (Main)
"../src/Main.m3", line 3: unable to find interface (RTHooks)
"../src/Main.m3", line 3: imported object is not an interface (RTHooks)
4 errors encountered
compilation failed => not building program "Hi"
*** error code 1 (ignored)


Thanks for any assistance.

                                                  -Spencer Allain


======================================================================= 104 ===
Date:    Thu, 24 Nov 1994 23:43:09 +0000
From:    Chris Shaw <cjds100@cam.ac.uk>
Subject: Re: Status and Notes (Re: Modula3 for OS/2

>  -- I am doing a port, will welcome any help (any! even if little) 
>  and I will (will!) post progress reports for interested parties 
>  to this group -- 

Will you port Trestle / FormsVBT to the WPS interface? If so, will it use 
shared libraries since linking libraries into executables makes really 
huge files?
Many thanks and waiting in hopeful anticipation,
Chris Shaw
cjds100@cam.ac.uk



======================================================================= 105 ===
Date:    26 Nov 1994 02:52:42 GMT
From:    tony@citr.uq.oz.au (Tony Ashburner)
Subject: M3 on RS/6000?

I'm trying to install SRC Modula-3 on an IBM RS/6000 (Aix 3.2.5).

The build of boot-IBMR2 and m3cc looks OK, but when I try to build
libm3, the compiler gets a segmentation fault ...

Has anyone had any success with Modula 3 on AIX 3.2.5?

--
Tony Ashburner                                 | email: 
Centre for Distributed Systems Technology      | tony@dstc.edu.au
University of Queensland  QLD  4072  AUSTRALIA | 
PHONE: +61-7-365-4310 FAX: +61-7-365-4311      |


======================================================================= 106 ===
Date:    28 Nov 1994 09:52:05 -0000
From:    John.Lancaster@brunel.ac.uk (John Lancaster)
Subject: Garbage Collection

I am trying to establish the extent to which the Modula-3 garbage
collection feature is used by programmers or by applications
written in the language.  I want to know if the provision of
garbage collection in Modula-3 provided tangible benefits or if
it was a waste of time.

I would be grateful if you would take the time to complete the
following questionnaire and email it to me
(john.lancaster@brunel.ac.uk).  I will post a summary of the
responses to the list.

Thanks in advance
John Lancaster

Modula-3 Garbage Collection Questionnaire
=========================================

1) Compilers used and if garbage collection is implemented:


2) Target hardware platform.


3) Type of applications/programs written.


4) Use of garage collection (select one):

a) Only use traced references, i.e. REF.
b) Never use traced references.
c) Sometimes used traced references.
d) Use a mixture of traced and untraced references in programs.


If your answer to 4) was b please answer 5) & 8), else answer 6),
7) & 8).


5) If you never use traced references, please give reasons.  If
a reason is performance please state if poor performance has been
measured or is perceived to be a problem.


6) If you use traced references:

6.1) Please give main reasons for use.


6.2) Do they degrade program performance in anyway?


6.3) Is program debugging easier or harder?


6.4) What change in functionality would you like to see?


7) If you use a mixture of traced and untraced references please
indicate where you use each type. 


8) Please give any other information you think may help me.


==End questionnaire==



======================================================================= 107 ===
Date:    28 Nov 1994 09:53:29 -0000
From:    John.Lancaster@brunel.ac.uk (John Lancaster)
Subject: Unsafe Code

I am trying to establish the extent to which the Modula-3 Unsafe
code feature is used by programmers.

I would be grateful if you would take the time to complete the
following questionnaire and email it to me
(john.lancaster@brunel.ac.uk).  I will post a summary of the
responses to the list.

Thanks in advance
John Lancaster


Modula-3 Unsafe Code Questionnaire
==================================

1) Type of applications/programs written.


2) Do your programs (select one):

a) Only have safe modules
b) Only have unsafe modules.
c) Have a mixture of safe and unsafe modules.


3) Do you think that the concept of safe modules is a good and
useful one?


8) Please give any other information you think may help me.


==End questionnaire==



======================================================================= 108 ===
Date:    29 Nov 1994 09:06:17 GMT
From:    eskianis@ic.sunysb.edu (Evangelos N Skianis)
Subject: How can I read from a file?


	I am doing a program in Modula-3 and I have to read a lot
of data from a file.  Can someone give me some help how to read
how to open and read a file and how I can then close it.  And when
I do that guys do I read the file as a standard input or are there
specific commands to read the file.  The file consists of characters
and integers by the way.  I would really appreciate some help.

E.Skianis(eskianis@ic.sunysb.edu)


======================================================================= 109 ===
Date:    29 Nov 1994 17:14:04 GMT
From:    tuckey@nacto.lkg.dec.com (Jeff Tuckey)
Subject: problem with m3gdb (release 3.3 from gatekeeper)


Hi everyone,

I'm just starting with m3gdb and getting nowhere.  I've built and
run the 'hello world' program from 

http://www.research.digital.com/SRC/modula-3/html/example.html

successfully. Now I want to put a breakpoint on the procedure call
A.DoIt in the debugger and see the source line... something is
very wrong however.  I'm running on an Alpha AXP system.  The 
following represents my best (and most concise) attack on this
problem so far.  It is a screen dump of my session.  Any help is
appreciated.

(note, the output indicates that the breakpoint was hit, but the
system hanged for about 5 seconds, and the session core dumped without
every giving a (gdb) prompt...)

/Jeff  (replies copied to my e-mail appreciated)

---start screen dump---

solus:/users/tuckey/m3/helloworld % m3gdb ALPHA_OSF/foo
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.11 (alpha-dec-osf), Copyright 1993 Free Software Foundation, Inc...
(gdb) set lang m3
(gdb) info fun
All defined functions:

File ../../../../../../src/usr/ccs/lib/crt/alpha/crt0.s:
<typeid=(null)> __eprol;
<typeid=(null)> __start;
<typeid=(null)> _mcount;

File _m3main.c:
<typeid=(null)> main;

File Main.m3:
static <typeid=(null)> Main.m3.MAIN;
                                   
File A.m3:
static <typeid=(null)> A.DoIt;
static <typeid=(null)> A.m3.MAIN;

File ../../../../../../src/usr/ccs/lib/libexc/call.c:
<typeid=(null)> _call_add_gp_range;
<typeid=(null)> _call_add_pc_range_table;
<typeid=(null)> _call_remove_gp_range;
<typeid=(null)> _call_remove_pc_range_table;

Non-debugging symbols:
        120004cf0  etext
(gdb) break A.DoIt
Cannot resolve type with uid 7b78c34f
Function "A" not defined.
(gdb) info address A.DoIt
Symbol "A__DoIt" is a function at address 16_1200049b0.
(gdb) break * 16_1200049b0
Breakpoint 1 at 16_1200049b0: file A.m3, line 5.
(gdb) show lang
The current source language is "m3".
(gdb) threads
can't find identifier: self
(gdb) run
Starting program: /users/tuckey/m3/helloworld/ALPHA_OSF/foo

Breakpoint 1, A.DoIt () at A.m3:5
Segmentation fault (core dumped)
solus:/users/tuckey/m3/helloworld % dbx `which m3gdb` core
dbx version 3.11.4
Type 'help' for help.
Core file created by program "gdb"

signal Segmentation fault at
warning: PC value 0x0 not valid, trying RA

warning: RA value 0x0 not valid, trying text start

warning: text start 0x120000000 not valid, trying data start

warning: Using data start as a text address -- traceback will not work
> [_call_remove_gp_range, 0x140000000]  call_pal        cflush
(dbx) where
   0 (noname)() [0x11ffffffc]
(dbx) quit


======================================================================= 110 ===
Date:    29 Nov 1994 19:37:01 GMT
From:    Peter Kropf <peterk@mcs.com>
Subject: Problem compiling formsvbt


I'm trying to build the formsvbt subsystem on a Linux box.  When I run
m3build in the jvideo directory, the following errors are produced:

   spot:/usr/src/Modula-3/formsvbt/jvideo# m3build
   mkdir LINUX
   --- building in LINUX ---
   m3 -w1 -why -g -a libjvideo.a -F/tmp/qk11998aaa
   new source -> compiling ../src/JVBuffer.i3

   ...

   new source -> compiling ../src/generic/JVBuffer.m3
   "../src/generic/JVBuffer.m3", line 9: warning: not used (OSErrorPosix)
   "../src/generic/JVBuffer.m3", line 9: warning: not used (Uipc)
   2 warnings encountered
   new source -> compiling ../src/JVSink.m3
   "../src/JVSink.m3", line 575: warning: variable has type NULL (vec)
   "../src/JVSink.m3", line 575: unknown qualification '.' (struct_sigvec)
   "../src/JVSink.m3", line 575: constructor type must be array, record, or set
 type
   "../src/JVSink.m3", line 576: undefined (Usignal.struct_sigvec)
   "../src/JVSink.m3", line 346: warning: potentially unhandled exceptions: Wr.
Failure, Thread.Alerted
   "../src/JVSink.m3", line 579: unknown qualification '.' (sigvec)
   "../src/JVSink.m3", line 579: expression doesn't have a value
   "../src/JVSink.m3", line 580: unknown qualification '.' (sv_handler)
   "../src/JVSink.m3", line 581: unknown qualification '.' (sv_handler)
   "../src/JVSink.m3", line 582: unknown qualification '.' (sigvec)
   "../src/JVSink.m3", line 582: expression doesn't have a value
   "../src/JVSink.m3", line 14: warning: not used (Fmt)
   "../src/JVSink.m3", line 344: warning: not used (Bpt)
   9 errors and 4 warnings encountered
   new source -> compiling ../src/JVDecomp.m3

   ...

Can anyone point me in the right direction to get this resolved?

Thanks!

Peter K

Internet: peterk@mcs.com



======================================================================= 111 ===
Date:    30 Nov 1994 16:03:05 GMT
From:    pk@i3.informatik.rwth-aachen.de (Peter Klein)
Subject: ANNOUNCE: m2tom3 2.00 available

----------------------------------------------------------------------

               m2tom3 Version 2.00 Release Announcement

----------------------------------------------------------------------

After a complete redesign, we are now able to release version 2.00
of our Modula-2 to Modula-3 translator.

>From the README:

m2tom3 is a system to port Modula-2 programs to Modula-3. It consists
of two parts:

 - A conversion program which tries to create a Modula-3 source text
   with the same semantics as the Modula-2 input while retaining the
   original look and feel as good as possible.

 - A base library which tries to emulate the Modula-2 standard library
   using the Modula-3 standard library.

m2tom3 is available under the terms of the GNU Library General Public
License from

ftp://ftp-i3.informatik.rwth-aachen.de/pub/Modula-3-Contrib/m2tom3/m2tom3-2.00.
tar.gz

For more information, refer to the enclosed README file or write
e-mail to pk@i3.informatik.rwth-aachen.de.


---
Peter Klein                        E-Mail: pk@i3.informatik.rwth-aachen.de
Lehrstuhl fuer Informatik III      Tel.: +49/241/80-21311
Ahornstrasse 55                    Fax.: +49/241/8888-218
RWTH Aachen
52074 Aachen
Germany




======================================================================= 112 ===
Date:    30 Nov 94 10:50:15
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Problem compiling formsvbt


   I'm trying to build the formsvbt subsystem on a Linux box.  When I run
   m3build in the jvideo directory, the following errors are produced:

Check the file diff-m3-3.3l2.tar.gz on ftp.vlsi.polymtl.ca:pub/m3/linux.
It contains a few modifications required to compile everything on LINUX.
--

Prof. Michel Dagenais			    dagenais@vlsi.polymtl.ca
Dept of Electrical and Computer Eng.
Ecole Polytechnique de Montreal		    tel: (514) 340-4029



======================================================================= 143 ===
Date:    Tue, 29 Nov 94 12:40:31 GMT
From:    dmc@ukc.ac.uk (Rock Lobster)
Subject: How do I use Ctypes.char???

Hi, 
  I have a program that uses the Udir interface to call the opendir
and readdir functions. I can open the directory ok, but readdir
returns (amongst other things) an ARRAY [0..MAXNAMLEN] OF Ctypes.char
How do I use this? I don`t seem to be able to convert it into anything
that my mod3 program can use. I assume it must be possible (why would
it be there otherwise).

Any help??

Cheers

Rock


--
+----------------------------------------------------------------------------+
| I can get a job, I can pay the phone bill, I can cut the lawn, cut my hair,|
|     cut out my cholesterol. I can work overtime, I can work in a mine,     |
+---           I can do it all for you - but I don't want to.             ---+


