======================================================================= 1 ===
Date:    Sat, 1 Oct 1994 22:50:34 GMT
From:    michael@elwing.otago.ac.nz (Michael(tm) Hamel)
Subject: Re: MODULA-3 being used

> > I'm hoping that the lack of bandwidth going through this newsgroup isn't du
e
> > to little or no use, but that there aren't as many obscure problems that ha
ve
> > to be addressed to the net for a solution.

No, its because there are no versions of Modula-3 for PCs or the Mac. Hence the
language is only used by a relatively small group of people who know what a
computer is and how to program it :-).

--
Michael(tm) Hamel                           ADInstruments, Dunedin, New Zealand
michael@otago.ac.nz

( Note: Blanche should go around singing, the way cousin Tina does, but not
always the Japanese national anthem. )


======================================================================= 2 ===
Date:    Sun, 2 Oct 1994 22:31:41 GMT
From:    jvichere@undergrad.math.uwaterloo.ca (Jan Vicherek)
Subject: Help ! (f)lex for Modula-3 needed !

 Hi.

It'd very close to a due date for my assignment in one of my CS courses.
I urgently need (f)lex for Modula-3. The assmt is due in less than 48 
hours. ;-( Flex for M3 would help a lot.
 If U know where 2 get it, please let me know, preferably via e-mail,
but post it here as well (for others).

 Thanx a bucket,

  Jan
(jvicherek@undergrad.math.uwaterloo.ca)



======================================================================= 3 ===
Date:    Mon, 3 Oct 1994 02:04:35 GMT
From:    svuggumu@liblab.library.unt.edu (Srinvaslu Vuggumdi)
Subject: Modula-3 compiler for Free Bsd Unix

I want to install a Modula-3 compiler on a Free Bsd Unix machine. There is
no Modula-3 compiler available for Free Bsd Unix machine at the ftp site
"gatekeeper.dec.com". I do not know which version of Modula-3 I have to
download to install on a Free Bsd Unix machine. Is it possible to port 
Modula-3 compiler to a Free Bsd Unix machine ? 
	Please suggest me which version of Modula-3 is the best to port to
a Free Bsd Unix machine.
                                            .... Srini
                                Email : svuggumu@liblab.library.unt.edu
                                                   OR
                                         srini@gab.unt.edu


======================================================================= 4 ===
Date:    Mon, 3 Oct 1994 13:04:00 GMT
From:    shjauda@descartes.uwaterloo.ca (Samir Jauda)
Subject: Sending output to printer

Hello!
I run Modula-3  3.3 compiler under  Linux. The program I 'm writing needs to se
nd its output
to printer connected to parallel port and to standard out as well. I looked thr
ough libm3
interface files and other libraries trying to find means of communicating with 
printer port, but
could not find anything useful.
I would appreciate any help in this regard. I would not mind doing this portion
 of program in
C or C++ (although I am not  very comfortable with it  yet).

Thanks.

-- 
Samir Jauda			University of Waterloo, Ontario, Canada ///////
////////////////
shjauda@descartes.uwaterloo.ca       //////////////////////////////////////////
////////////////////////////

   
					  
						
						 
						  
						  


======================================================================= 5 ===
Date:    3 Oct 1994 13:47:18 GMT
From:    laszlo@alsenf.ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
Subject: Re: Information on teaching OO and Reuse (redux)


> The following is a rough summary of the responses to my request for informati
on
> on teaching OO and Reuse. The list is undoubtedly not exhaustive, but it's al
l 
> of the relevant responses I received.

Modula-3 is used for teaching OO and Reuse also at the
University Klagenfurt, Austria.

Since 1993, Modula-3 has been used in
the first and second semseters.
I higher semesters it was in use already earlier.

Best regards
Laszlo Boeszoermenyi


*********************************
* Prof. Laszlo Boeszoermenyi	*
* Institut fuer Informatik	*
*                              	*
* Universitaet Klagenfurt	*
* Universitaetsstr. 65-67  	*
* A-9022 Klagenfurt / Austria	*
*                              	*
* e-mail:			*
* laszlo@ifi.uni-klu.ac.at	*
* Tel.: 			*	
* 00-43-463-2700-509 		*
* 00-43-463-2700-506 (secr.)	*
* Fax.:		 		*
* 00-43-463-2700-505 		*
*********************************


======================================================================= 6 ===
Date:    3 Oct 1994 13:53:24 GMT
From:    laszlo@alsenf.ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI)
Subject: Re: MODULA-3 being used


> No, its because there are no versions of Modula-3 for PCs or the Mac. Hence t
he
> language is only used by a relatively small group of people who know what a
> computer is and how to program it :-).

There are versions for PCs.

Laszlo Boszormenyi

*********************************
* Prof. Laszlo Boeszoermenyi	*
* Institut fuer Informatik	*
*                              	*
* Universitaet Klagenfurt	*
* Universitaetsstr. 65-67  	*
* A-9022 Klagenfurt / Austria	*
*                              	*
* e-mail:			*
* laszlo@ifi.uni-klu.ac.at	*
* Tel.: 			*	
* 00-43-463-2700-509 		*
* 00-43-463-2700-506 (secr.)	*
* Fax.:		 		*
* 00-43-463-2700-505 		*
*********************************


======================================================================= 7 ===
Date:    3 Oct 94 09:08:12
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: m3build orientation needed

In article <Cwyox3.385@undergrad.math.uwaterloo.ca> bwbecker@dragon.uwaterloo.c
a (Byron Weber Becker) writes:

   1. Are there non-trivial examples of m3makefiles
      that are easy to access.  The person who installed
      m3 on my machine didn't leave the compiler source as a 
      possible set of examples. 

The full exploded SRC M3 3.3 distribution is in ftp.vlsi.polymtl.ca
directory lude/modula3-3.3/src/orig.

   2. How does m3build/quake interact with:
      a. a source code control system like RCS

You could easily add hooks in the "quake" m3build templates.

      b. building non-M3 parts of the system (compiling
	 lex and yacc, for instance)

Again, quake is a programming language and you can do it. Some existing
packages do have lex and yacc files (m3pp, m3totex...).

   3. I often including targets to test code in the
      same makefile that builds the program.  How do
      the rest of you handle testing?  Do you have
      a separate makefile, or do it with m3build?

Many libraries come with test programs. These are stored in subdirectories
with their own m3makefile. Each library or program normally has its own
m3makefile.

   4. I need coaching on appropriate/recommended directory
      structures.  For instance, I have 2 programs that
      use a common set of modules.  I have set up the
      directories:

One "library" package for the common code and two "program" packages,
You got it right.

   5. How do I use the variable WDROOT to set "conventional
      location of the user's personal package library"?

There is nothing else than the "override" mechanism. You can modify the
m3build quake templates however as you need to add such hooks.
--

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



======================================================================= 8 ===
Date:    3 Oct 1994 22:19:50 GMT
From:    raboczi@c18.s1.elec.uq.oz.au (Simon Raboczi)
Subject: Re: Modula-3 compiler for Free Bsd Unix

svuggumu@liblab.library.unt.edu (Srinvaslu Vuggumdi) writes:

>	Please suggest me which version of Modula-3 is the best to port to
>a Free Bsd Unix machine.

	I remember looking at this myself a few versions ago (both of M3 and
FreeBSD :) ).  The Linux version seemed to be fairly close to workable, the
main incompatibility being the standard I/O.
--
 ,-_|\  Simon Raboczi (raboczi@s1.elec.uq.oz.au)
/     * Department of Electrical & Computer Engineering
\_.--_/ University of Queensland, St Lucia, Brisbane, Australia
     v  [Sebkha says, "We live to serve."]


======================================================================= 9 ===
Date:    Mon, 3 Oct 1994 16:48:18 GMT
From:    tom@smart.ruhr.de (Thomas Neumann)
Subject: Re: Sending output to printer

>I run Modula-3  3.3 compiler under  Linux. The program I 'm writing needs 
>to send its output to printer connected to parallel port and to standard
>out as well.
>I looked through libm3 interface files and other libraries trying to 
>find means of communicating with printer port, but could not find 
>anything useful.
>I would appreciate any help in this regard. I would not mind doing 
>this portion of program in C or C++ (although I am not  
>very comfortable with it  yet).

I think you have somewhat misunderstood the way printing works
in a unix environment. You are not supposed to fiddle with
printers directly (your view of things sounds like you have
prior experience with ms-dos or similar systems).

To send something to a printer, open a pipe to the appropriate
system utility, typically "lpr" on BSD derived systems and "lp"
on SYSV derived systems, and write your data to the pipe
file descriptor.

The details of how to do this in m3 can be found in the Pipe and Process
interface descriptions.

 -t


======================================================================= 10 ===
Date:    4 Oct 1994 02:51:04 GMT
From:    cmingins@grape.fcit.monash.edu.au (Ms. C. Mingins)
Subject: TOOLS Pacific 94 Final Program

                    TOOLS PACIFIC 94

          INTERNATIONAL CONFERENCE AND EXHIBITION
                 Monash Conference Centre
                   Melbourne (Australia) 
              NOVEMBER 28 - DECEMBER 1, 1994

                    Program Chair:
     Christine Mingins (Monash University, Australia)

                   Conference Chair:
         Bertrand Meyer (ISE Inc., Santa Barbara)

                     Local Chair:
      Sita Ramakrishnan (Monash University, Australia)

                   Tutorial Chair: 
        John Potter (Microsoft Institute, Australia)

KEY EVENTS:

  *	16 tutorials.

  *	Paper sessions particularly focused  on the   crucial  issue 
        of seamless development, on the management of O-O projects, 
        on methodologyand modelling, and on business appplications.

  *	Invited talks bringing both "reports from the trenches'" from 
        high-level managers and a reflection on fundamental concepts.

  *	The industry forum on November 30 will bring together experienced 
        leaders of O-O  projects.

  *     The Language Users' Debate on November 30 will  pit against each 
        other users of C++, Eiffel, Ada , Sather  and Smalltalk.

OVERALL STRUCTURE

November 28 and 29 (Monday and Tuesday) are devoted to the tutorials. 

The conference proper - invited and submitted presentations - is 
on November 30 and December 1.

INVITED PRESENTATIONS:

Ivar Jacobson of Objectory AB, co-author of 'Object-Oriented 
Software Engineering': "Business Process Reengineering with 
Object Technology"

Roger Duke, University of Queensland, developer of Object-Z: "Do 
Formal O-O Methods have a Future?"

Roger Osmond, Senior Manager, Software and System Architecture, 
Bytex Corporation:  "Large Project Experience"

Larry Constantine, pioneer of modern software engineering 
practice: "Toward More  Usable Object Technology: Essential Use 
Cases and User Interfaces"

Gordon Hughes, partner, Hunt & Hunt, President of the Victorian 
Society for Computers and the Law: "Potholes in the Information 
Super-Highway"

Bertrand Meyer, author of the best seller 'Object-Oriented 
Software Construction: "Beyond Design by Contract: Putting More Formality
into Object-Oriented Development"


PANELS

Business Forum

Software Reuse

OO Education/Training

DEBATES

The great language users debate - industrial users defend their 
language of choice: Ada, C++, Eiffel, Sather, Smalltalk

Software Patents: promise or disaster?

TUTORIAL ORGANIZATION (MONDAY AND TUESDAY)

_________________________________________________________________ 
                    MONDAY, November 28, MORNING                 |
_________________________________________________________________|
    Analysis    | Languages      |  OO Systems     |  Business   |
________________|________________|_________________|_____________|
    JACOBSON    |      MCKIM     |    RAO          |   MURPHY    |
  OO Software   |     Eiffel     | Agent-Oriented  |   OODB      |
  Engineering   |   Essentials   |  Programming    |             |
      A1        |          L1    |       S1        |     B1      |
________________|________________|_________________|_____________|
                    MONDAY, November 28, AFTERNOON               |
_________________________________________________________________|
  JACOBSON      |     THOMPSON   |     POTTER     |   STEELE     |
 OO Software    |    Advanced    |    OLE/Com     |  Enterprise  |
 Engineering    |      C++       |                | Modelling    |
     A2         |       L2       |     S2         |       B2     |
________________|________________|________________|______________|

6:00-8:00   Social Event

_________________________________________________________________
                 TUESDAY, NOVEMBER  29, MORNING                  |
_________________________________________________________________|
      WALDEN    |        CHO     |   LALIT /LEE   |   DUKE/      |
    The BON     |    Smalltalk   |    SOM/DSOM    |  SWATMAN     |
     Method     |                |                | Issues in    |
                |                |                |Formal Methods|
     A3         |       L3       |     S3         |       B3     |
________________|________________|________________|______________|
                 TUESDAY NOVEMBER 29, AFTERNOON                  |
_________________________________________________________________|
  MCKIM         |SCHMIDT/ SAJEEV | RICHARDSON     | HENDERSON-   |
 Class Interface|     OO         |    CORBA       |   SELLERS    |
  Design        | Concurrency    |                | OO Project   |
                |                |                | Management   |
     A4         |      L4        |     S4         |       B4     |
________________|________________|________________|______________|


_________________________________________________________________
WEDNESDAY,  NOVEMBER 30                                          |
_________________________________________________________________|
8:30 - 9:30  |Keynote: Roger Duke "Do Formal O-O Methods have    |
             |Future?"                                           |
_____________|___________________________________________________|
10:00-12:00  |A1:Knowledge Engineering,| B1: Methods, Metrics,   |
             |   Simulation            |     Models              |
_____________| ________________________|_________________________|
1:00 - 2:15  |Keynote: Roger Osmond  "Large Project Experience"  |
_____________|___________________________________________________|
2:15 - 4:15  |A2: Technology Transfer, |   Business Forum        |
             |     Analysis            |                         |
_____________|_________________________|_________________________|
4:30 - 6:00  | Language User Debate                              |
_____________|___________________________________________________|

_________________________________________________________________
THURSDAY, DECEMBER 1                                             |
_________________________________________________________________|
8:00 - 9:00  |Keynote: Bertrand Meyer  "The Combination of Object|
             |Orientation & Formal Methods"                      |
_____________|___________________________________________________|
9:00 - 10:30 |A3: Formal Methods,      | B3:Reuse, Class Library | 
             |    Concurrency          |    Management, Tools    | 
_____________|_________________________|_________________________|
11:00 - 12:15|Keynote: Ivar Jacobson "Business Process Reengineer|
             | ing with Object Technology"                       |
_____________|___________________________________________________|
1:15 - 2:15  |Keynote:Larry Constantine  "Toward More  Usable    | 
             | Object Technology: Essential Use Cases and User   | 
             | Interfaces"                                       |
_____________|___________________________________________________|
2:15 - 3:30  |Panel: Teaching& Learning |Panel: Software reuse   |
             |        OO                |                        |
 ____________|__________________________|________________________|
4:00 - 5:00  |Keynote: Gordon Hughes: Potholes in the Information| 
             |         Super-highway                             |
_____________|___________________________________________________|
5:00 - 6:00  |Panel: Software Patents: Promise or Disaster?      |
_____________|___________________________________________________|

The complete conference program appears below.

DETAILED TUTORIAL PROGRAM

ANALYSIS TRACK 

A1 & A2 Ivar Jacobson 

   O-O Software Engineering
   Monday, November 28, 8:00 - 12:00
   Monday, November 28, 1:30 - 5:30

This tutorial defines a process concept for object-oriented 
software development which covers the whole life cycle for 
software products (including embedded  system software). The 
objective is furthermore to understand the need for several 
models in system building, how use cases help the development 
process to design the requested system, to find the right 
objects,to work as the glue between different models and to    
structure each model of a large system, and how the real world, 
naive objects found during the analysis activities should be 
implemented by other objects robust against future changes of the 
system. The following topics are covered: the process concept,    
different scenarios for the process, the model concept and the 
use case concept.

Ivar Jacobson is founder and VP of Technology at Objectory AB  in 
Sweden, a software company that develops and markets the object-
oriented development method Objectory. He has over 20 years 
experience in the telecommunications industry. He developed an  
early object-based  design technique a major portion of which has 
evolved into the international standard CCITT/SDL.



A3 Kim Walden

   The BON Method: Analysis and Design for Reusability. 
   Tuesday, November 29, 8:00 - 12:00

Software reuse on a broad scale is generally 	recognized as the 
major potential of object technology. 	Yet current literature on O-
O analysis and design 	has paid very little attention to two 
principles of 	software development which are crucial for attaining 	
this goal: seamless mapping in both directions 	between analysis, 
design, and implementation on the one hand, and ensuring software 
correctness on the other.

The tutorial gives an overview of the BON method, which is 
centered around seamlessness, reversibility, and software 
contracting. It presents a set of guidelines and notations for O-O 	
analysis and design directly targeted at reusability. Rather than 
including traditional techniques such as entity-relationship 
modeling or finite state machines with their inevitable impedance 
mismatches, BON combines O-O abstraction with strong typing and 
elements of formal specification. A small case study is used to 
explain the basic concepts and systematic tasks of the BON 
development process.

Kim Walden has more than twenty years experience with industrial 
software development. His involvement with O-O dates back to the 
early seventies, when he was on the team developing the DEC Simula 
compiler. Since 1987 he has held a position at Enea Data, a major 	
technical software consultancy company in Sweden, aimed at 
introducing O-O technology to Swedish industry. Dr. Walden is the 
author of the book "Seamless Object-Oriented Software 
Architecture" with Jean-Marc Nerson, Prentice Hall 1994.


A4 James C. McKim, Jr.    

   Class Interface Design and Programming by Contract
   Tuesday November 29, 1:30 - 5:30

Programming by contract (PBC) is a form of object oriented   
programming popularized by Bertrand Meyer in his book, "Object   
Oriented Software Construction". In PBC, forms of assertions 
called preconditions, postconditions, and invariants are used to 
help programmers and designers reason about their software 
artifacts.The ideas embodied in PBC are simple, but quite 
powerful, and, when properly applied, result in simpler and 
shorter code than would otherwise be the case. PBC is flexible 
enough to be of great assistance in the specification, 
documentation, and verification of features and classes.

While one can use the ideas embodied in PBC to great effect 
without language or compiler support,it is obviously much more 
pleasant to have such support. Currently, the only commercial 
language that supports PBC is Eiffel. However, there have been 
experimental versions of C++ and   Smalltalk that support it, and 
one C++ compiler vendor provides at least partial support. We can 
expect this trend to continue as PBC becomes more and more 
important in the everyday work of the software professional.In 
addition, many of the leading object oriented development   
methodologists recommend a form of PBC for designing class 
interfaces.

In this Tutorial I will present an in depth study of programming  
by contract. Examples will be given in Eiffel as it is the only   
commercially available language to support any form of 
programming by contract. In fact, some examples will be taken 
from the ISE and TowerEiffel libraries. Others will be taken from 
working Eiffel systems.

Prospective Audience: The ideal audience member should have a 
good grasp of the major features of the object oriented paradigm, 
including encapsulation, inheritance, and polymorphism. Knowledge 
of programming by contract at the level of "Object Oriented 
Software Construction" will be extremely helpful. Since Eiffel 
code reads likes pseudocode, no prior experience with Eiffel is 
necessary or expected.

James McKim is Professor of Computer Science at the Hartford 
Graduate Center and has more than twenty years experience 
teaching mathematics and computer science.He has authored, 
coauthored and reviewed a number of textbooks and articles in 
both areas. His research interests include object oriented 
programming and design in general, and class interface 
specification in particular.


LANGUAGES TRACK

L1 James C. McKim, Jr. 

   Eiffel Essentials
   Monday, November 28, 8:00 - 12:00

All indications are that the Eiffel language and its attendant 
philosophy are about to come into their own. Three companies are 
now actively marketing compilers with more on the immediate 
horizon. At least half a dozen Eiffel books are expected to 
appear in the coming year, ranging in level from the elementary   
(CS 1 level) to the advanced (aimed at the graduate level or at 
the working professional). This Tutorial aims to explain   what 
all the excitement is about. In particular two basic questions   
will be answered:

  *	What is the essence of Eiffel? What are the primary features 
        of the language, without which Eiffel just wouldn't be Eiffel.

  *	What are the secondary features of Eiffel that set it apart  
        from most other object oriented languages?

Note that this is not a language Tutorial in the usual sense.In   
particular, no complete Eiffel system (not even Hello, World) 
will be discussed. Rather the emphasis will be on object oriented 
and software engineering concepts and how they are supported by 
the language.

Prospective Audience: The ideal audience member should have a 
good grasp of the major features of the object oriented paradigm, 
including encapsulation, inheritance, and polymorphism. No prior 
knowledge of Eiffel is expected or required, although even 
seasoned Eiffel programmers may find the Tutorial beneficial.

James McKim is Professor of Computer Science at the Hartford 
Graduate Center and has more than twenty years experience 
teaching mathematics and computer science.He has authored, 
coauthored and reviewed a number of textbooks and articles in 
both areas. His research interests include object oriented 
programming and design in general, and class interface 
specification in particular.


L2 Mike Thompson    

   Advanced C++
   Monday, November 28, 1:30 - 5:30

C++ is a very rich language.  Only knowing the rules of
C++ is like a chess player only knowing how the pieces move.

An excellent C++ programmer must acquire a set of
principles, strategies and design patterns to augment
and supplement their knowledge of syntax and semantics.
This tutorial is for people who have experience with C++ 
and want to increase their skills and expertise.

This tutorial will present advanced features of C++ that 
support the abstract data type and object-oriented 
paradigms are explored in depth.  The tutorial gives 
examples of the use of virtual functions, multiple inheritance, 
and templates, and how to weigh the potential trade-offs 
between the use and cost of particular language features.

It is intended that the participants will already be
familiar with C++.

Mike Thompson has programmed and designed in C++ for five 
years in a variety of commercial sites.  He is currently
a Senior Consultant with Object Oriented Pty Ltd.

L3 Adrian Cho    

   Using Smalltalk for Software Manufacturing
   Tuesday, November 29, 8:00 - 12:00

This tutorial presents Smalltalk as a viable platform for 
manufacturing high quality software in world-beating timeframe.  
A Smalltalk product development environment is presented in the 
context of developing and deploying a product.The entire 
development cycle is covered including design, development, 
testing, deployment, and maintenance.

Issues will include:

- Why most prototypes should be discarded 

- Optimizing for time and space 

- Developing in teams 

- Scaling up without losing the benefits 

- Developing in mainframe and embedded environments

The Smalltalk system used will be IBM Smalltalk although 
references will be made to other Smalltalk implementations 
including Smalltalk/V and Objectworks\Smalltalk.It is assumed 
that the participants will have experience with other programming 
systems but not with Smalltalk.

Adrian Cho works for Object Technology International Pty Ltd 
(OTI) developing Smalltalk development environments for 
deployment in mainframe, workstation, and embedded environments.  
Prior to this he used Smalltalk to develop and deploy programming 
environments for IBM and Fujitsu, and banking and trading 
applications for Westpac, ANZ, and Bankers Trust.


L4 Heinz Schmidt, Sayed Sajeev    

   Object-Oriented Concurrency
   Tuesday, November 29, 1:30 - 5:30
   
Parallelism looks at ways to improve performance by executing multiple
activities simultaneously. It enables modeling and simulations of
complex real life systems in engineering, science or commerce. These
include distribution and utility networks, public transport and
traffic simulation, automotive crash simulation and many more.

Concurrency occurs naturally in many of the above systems, 
particularly in networks of spatially and geographically distributed
computer systems. Software infrastructure or applications relating to
such systems are inherently concurrent or parallel.

This tutorial is a survey of several paradigms used in integrating 
concurrency and object-orientation.  We define the terminology, look
at different paradigms (e.g. concurrency using annotations, 
concurrent classes, active objects etc.), and look at problems in 
integrating concurrency and OO in programming languages (e.g. the 
inheritance anomaly).  Programming examples come from Meyer's 
extension to Eiffel, cEiffel, pSather, Concurrent C, Eiffel//, 
CC++ and many others.


Professor Heinz Schmidt is the Head of the Department of Software 
Development, Monash University.  He has research and teaching 
interests in Concurrency and Object-Orientation. Professor Schmidt
was a co-designer of the Sather environment and language and the 
principal designer of the initial ICSIM massively parallel neural 
network simulator.  He holds a Ph D in Computer Science from 
Bremmen University.  He has been with the German National Research 
Center for Computer Science (GMD), the International Computer
Science Institute, associated with the Computer Science 
Division ot the UC Berkeley, California, Division of Information 
Technology of CSIRO, Canberra, and Dept. of CS of the ANU, Canberra.

Dr A. Sayed Muhammed Sajeev is a Senior Lecturer in the Department of
Software Development, Monash University. He has research and teaching
interests in concurrency and object-orientation. Dr Sajeev's Ph D in 
Computer Science is from Monash University. He has lectured in Massey 
University, New Zealand and James Cook University.


OBJECT SYSTEMS TRACK

S1 Anand Rao    

   Agent-Oriented Programming: An Approach to Developing 
   Distributed Real-Time Systems
   Monday, November 28, 8:00 - 12:00

This tutorial will introduce participants to the emerging 
paradigm of agent-oriented programming, discuss its foundations, 
describe systems designed using this paradigm, and examine 
industrial applications built using such agent-oriented systems.

Modern societies depend upon large distributed systems in 
applications as diverse as telecommunications, power 
distribution, transport, air traffic control, and medical 
services.  All these systems require careful management and 
control if they are to provide an acceptable level of service to 
the community.  Similarly, complex systems such as aircraft, 
railways, power stations, oil refineries and large natural gas 
facilities require sophisticated and flexible management and 
control.  Despite significant automation in these areas, the 
resulting growth of these systems has meant that they have become 
highly complex and thus increasingly difficult for human 
operators to manage and control efficiently.

Conventional design and software techniques have been found to be 
inadequate to handle the complexity and flexibility required for 
automating such complex systems. Object-oriented design and 
object-oriented programming are increasingly being seen as tools 
to overcome this complexity. In the object-oriented paradigm a 
system is composed of objects that encapsulate both the data and 
the methods or procedures which operate on this data. Objects 
communicate with each other using messages. The paradigm provides 
data and program abstraction and hides the implementation details 
of an object from other objects.

This tutorial will introduce participants to a new paradigm, 
which goes beyond the exisiting object-oriented paradigm, namely 
the agent-oriented paradigm. In this paradigm, a system is viewed 
as a collection of autonomous agents embedded in an environment, 
continuously receiving perceptual input from the environment, and 
reacting to it by taking certain actions. The actions taken by 
the agent are dependent on its internal mental state, which is 
composed of the beliefs, desires or goals, plans, and intentions. 
In addition to data abstraction offered by the object-oriented 
paradigm, the agent-oriented paradigm offers a powerful form of 
task abstraction.

Anand S. Rao is a Senior Research Scientist at the Australian 
Artificial Intelligence Institute. He received his PhD from 
University of Sydney in 1988 on the topic of Dynamics of Belief 
Systems.  As a research student he spent a year at the IBM T. J. 
Watson Research Center. On completing his doctorate he joined the 
Australian Artificial Intelligence Institute and has since been 
actively involved in the theoretical and practical development of 
agent-oriented systems. His contributions range from the 
theoretical investigations of the mental state of an agent to the 
development of agent-oriented applications such as the 
Interactive Real-Time Network Management System for Telecom 
Australia, Air-Combat Modelling System for DSTO-ARL, an Air-
Traffic Management System for the Civil Aviation Authority, and a 
Business Process Management System. 


S2 John Potter    

   Software Components: The Component Object Model
   Monday, November 28, 1:30 - 5:30

This tutorial will describe the details of the Component Object 
Model. It will describe the structure of the model, and some of 
its underlying design principles.

COM is at the centre of Microsoft's object strategy. The aim is 
to provide an architecture which supports the construction of 
software components which are customisable and extensible. The 
tutorial will indicate how this is achieved, and compare the 
reusability of COM components with that achieved through the use 
of class libraries.

Extensions for COM will be outlined: 

  *	distributed COM --- with provision for the support of 
        distributed objects. 

  *	OLE --- the compound document architecture for the 
        construction of "document-centric" applications. 

  *	OLE automation --- dynamic access to an object's   methods 
        gives application programmability.

John Potter (BSc ME PhD) is head of the Distributed Computing 
Research Unit at the Microsoft Institute in Sydney, Australia. 
Prior to this, he was a University Reader at University of 
Technology, Sydney, where he was responsible for the introduction 
of object technology into the curriculum. His research interests 
include concurrency, distribution and programming models. He has 
been program chairman of TOOLS Pacific, and has been a frequent 
tutorial presenter on object-oriented design and programming. 

S3 Lalit Yagnik, Chor-Hock Lee   

   An Introduction to the System Object Model
   Tuesday, November 29, 8:00 - 12:00

IBM's System Object Model expands object technology beyond the 
limits and boundaries of today's language-bound facilities, to a 
fully open, fully distributed, heterogeneous, multi-platform 
environment.

Objects and object definitions can NOW be accessed and 
manipulated irrespective of the programming language. SOM's 
objective is to allow applications written in different 
programming languages to use a common class library which can be 
modified or extended WITHOUT having to recompile existing 
applications. Through CORBA-compliant extension, DSOM, it also 
provides transparent access to remote objects in a distributed 
environment.SOM/DSOM technology is gaining wide acceptance in the 
component-based software industry. SOM and its frameworks are 
open and extensible.

This tutorial introduces the features of SOM/DSOM and its basic 
frameworks. Participant will gain an overview of when and how to 
develop SOM/DSOM applications using programming languages. In 
addition, the speaker will cover SOM's:

  . CORBA-compliant Interface Definition Language (IDL)   
  . Interface Repository Framework   
  . Persistence Framework   
  . Replication Framework   
  . Emitter Framework

Lalit Yagnik is a Senior Systems Engineer with IBM Australia. He 
has over 18 years experience in systems development and delivery 
spanning programming, systems analysis, relational database 
design, consulting and project management in business areas 
including finance, government, telecommunications and insurance.  
More recently, Lalit has  been involved in providing consulting 
and support in the area of Application Technologies including OO.

Chor-Hock Lee is an application technology specialist with IBM  
Australia.  He joined IBM in 1984 and has been working in the  
applications and database area since. Chor-Hock provides 
technology  consulting & support for all IBM object technology 
products including  SOM/DSOM.


S4 Peter Richardson    

   Distributed Object Computing
   Tuesday, November 29, 1:30 - 5:30

The Object Oriented (OO) approach to software development is 
becoming established as the preferred approach for building 
complex systems in a wide variety of application domains.  There 
is now a great deal of effort being devoted to applying the OO 
approach beyond software, to networks and distributed systems in 
general. The ultimate effect will be to remove the distinction 
between a network and a computer, combining both into a unified 
platform of distributed objects.

This tutorial will introduce the notion of middleware as an 
integral part of this platform, designed to reduce the complexity 
of composing objects into distributed applications. A number of 
industry groups are making advances in the promulgation and 
standardisation of such middleware. Such efforts include OSF's 
DCE, OMG's CORBA, ISO's ODP, and the TINA Consortium. 
Interestingly, there is a convergence of views on an overall 
architecture for distributed object computing, and each of these 
efforts will be described within the context of this overall 
architecture.

Distributed object computing platforms, as typified by the new 
generation of CORBA products, will have a profound affect on the 
construction of business systems using so-called client/server 
tools. Some simple architectural guidelines will be described 
that allow the design of client/server systems able to gradually 
harness the power of CORBA, as the technology becomes widespread.

This talk is intended for technical and management people 
interested in evaluating how CORBA and related technologies may 
impact their current work. A basic knowledge of OO concepts is 
assumed.

Peter Richardson is a Principal Consultant with Object Oriented 
Pty. Ltd., a company specialising in consulting and training for 
object oriented technology, and a member of the Object Management 
Group. Peter also works at Telecom Research Laboratories, where 
he leads the TINA Group and represents Telstra on the TINA 
Consortium Technical Committee.



BUSINESS TRACK


B1 Jim Murphy

   Object-Oriented Databases: Concepts and Commercial Offerings     
   Monday, November 28, 8:00 - 12:00

O-O Databases are here! They are fully functioned, robust and set 
to become the tool of choice in business systems development.It 
is estimated that up to 95 percent of business information 
systems cannot be stored on conventional relational databases. O-
O databases can store complex information and can achieve 
performance up to 100 times their relational counterparts. The 
tutorial will address what makes a database Object-Oriented, and 
when and why this is desirable. It will look at real application 
code developed for databases with discussion centred around the 
different approaches that have been adopted. Attendees should 
come away with a broad understanding of how some of the major O-O 
databases are structured. The emphasis will be on practical 
applications of these databases to solve real problems in a 
business environment.

Jim Murphy is a senior consultant at Simsion and Bowles and 
Associates. He is experienced in applying Object-Oriented 
principles at both the business and the technical level, and has 
specialised in Object-Oriented databases and CASE tools. Jim was 
involved very early in the application of O-O techniques to 
enterprise analysis and design. He has designed and written 
applications using both ONTOS and ObjectStore. 


B2 Ray Steele  

   Enterprise Modelling
   Monday, November 28, 1:30 - 5:30

An Enterprise Model is an integrating view of an organisation 
which supports its planning, its organisation structure design 
and its systems development. It is based upon business plans and 
culture. It provides a high level information model which 
describes the organisation in terms of the things that it 
manages, the activities it performs and the rules by which its 
activities are regulated.

This tutorial covers the implications of Enterprise Modelling    
within the organisation and how it affects IT planning.

Ray Steele has been involved with object technology for over    
eight years. His major experience has been in project management, 
requirements analysis, mehodology, systems analysis and design,   
underpinned by practical knowledge of major tools and languages   
including Smalltalk and Eiffel. He has applied enterprise 
business modelling to corporate application domains, and 
understands the need for a business to have a consistent 
conceptual view of itself.   


B3 Roger Duke, Paul Swatman    

   Adopting Formal Object-Oriented Methods in Industry
   Tuesday, November 29, 8:00 - 12:00

This tutorial addresses the issues which face an organisation  
wishing to improve its systems development performance by the  
adoption of formal methods.  We begin by describing formal 
methods  and their potential benefits in the context of object 
orientation, then explain the problems which they are designed to 
solve and the  limitations of this technique.

An organisation considering adoption of formal methods must  
consider:  

  *	which formal method to choose:  we shall present and analyse   
        a range of mature methods  
  *	how to incorporate formal methods within the process of       
        systems development 
  *	how to set up and measure the success of a pilot project       
        *    choosing an appropriate project                        
        *    structuring the development team                       
        *    obtaining specific expertise                           
        *    training existing staff  
  *	how to move on from the (successful) pilot project

The tutorial will focus on the object-oriented formal  
specification language Object-Z and will be supported by  
reference to the actual experiences of organisations which have  
introduced and used formal methods.

Roger Duke is Senior Lecturer in the Department of Computer  
Science at the University of Queensland. For the past 8 years he  
has worked on formal methods with particular emphasis on object-
oriented methods. He was one of the developers of the Object-Z  
formal specification language.

Paul Swatman is Associate Professor of Information Systems at 
Swinburne University.  Since 1989, he has been undertaking 
research into the commercial application of formal specification 
techniques within the Information Systems domain.


B4 Brian Henderson-Sellers    

   Some issues in OO project management
   Tuesday, November 29, 1:30 - 5:30

Project management of a software systems development is an 
essential component of developing a competitive advantage based 
on quality products. In this tutorial, the role of project 
management, reuse strategies, library management techniques, 
metrics collection and analysis, and migration paths will be 
discussed. Organizational roles need to be re-evaluated within an 
OO team and a solid reuse strategy developed for the 
organization. The need for both process and product metrics will 
also be explored at all phases in the lifecycle, including an 
overview of both traditional and new metrics. Finally, migration 
paths, supplemented by successful industry case studies, will be 
evaluated.

Specifically, the tutorial will cover the following topics:
  *	Lifecycle model o A framework for project management 
  *	Deliverables 
  *	Team structure and organizational roles 
  *	Developing a reuse strategy 
  *	Library management 
  *	Tool support 
  *	The role of metrics within the lifecycle model 
  *	Traditional and new metrics  for object systems 
  *	Evaluation of reuse benefits (ROI model) 
  *	Migration paths and Industry case study examples

Brian Henderson-Sellers is Professor of Information Systems and 
Director of the Centre for Object Technology Applications and 
Research (COTAR) in the School of Computing Sciences at the 
University of Technology, Sydney (UTS). His current research 
interests include object-oriented systems development 
methodologies and notation; and implementations of the object-
oriented paradigm in the commercial environment (metrics, project 
management and migration paths). He is author of two books on 
object technology, Convenor of the Object-Oriented Special 
Interest Group of the Australian Computer Society (NSW Branch) 
and Chairman of the Computerworld Object Developers' Awards 
committee for ObjectWorld 94 (Sydney). Brian is also Regional 
Editor of the international journal Object-Oriented Systems and 
on the editorial board of Object Magazine.


NOVEMBER 30 & DECEMBER 1

TECHNICAL SESSIONS                                	                  

A1: OO KNOWLEDGE ENGINEERING, SIMULATION

    Objects and Constraints: a Constraint based Approach to
    Plan Drawing 
    J. Hosking, W. Mugridge, S. Blackmore, University of
    Auckland (New Zealand)

    Representing Knowledge in the Object-Oriented Life-cycle 
    Jean Bezivin, Jerome Lanneluc, Richard Lemesle, ERTO,
    University of Nantes, (France)

    ROO: Rules and Object-Orientation     
    Liping Zhao, Central Queensland University (Australia);
    Edward Foster, Class Software Construction (UK)

    Eunice Adaptive Components: Modeling External Objects in
    Control Systems     
    Kawata, Kobayashi, Yabu, Onogawa, Kawase, Kozuka, Maekawa,
    University of Electro-Communications, Tokyo (Japan)  

    A Kernel Mechanism for Simulating an Object-Oriented Process
    Sensitive Software Engineering Environment
    Min Kang, Douglas Grant, Swinburne University of Technology
    (Australia)

B1: OO METHODS, METRICS, MODELS

    Incorporating Roles into Moses 
    Derek Renouf, Class Technology (Australia); Brian Henderson-
    Sellers, University of Technology, Sydney (Australia)

    The Methodology of Methodologies     
    Tim Menzies, University of NSW (Australia); Philip Haynes,
    State Bank of NSW (Australia)

    A Vizualization System for Object-Oriented Programs 
    Stephen Fenwick, Australian National University; John
    Hosking, Warwick Mugridge, University of Auckland (New
    Zealand)

    Modeling Activities in Eiffel and C++ 
    Bent Bruun Kristensen, Aalborg University (Denmark); Daniel
    Chien-Meng May Monash University (Australia)

    The Effect of Class Coupling on Class Size in
    Smalltalk Systems     
    Philip Haynes State Bank of NSW (Australia); Tim Menzies
    University of NSW (Australia)

A2: OO TECHNOLOGY TRANSFER, LEARNING, ANALYSIS

    Experiences with Eiffel and C++ in Teaching Object-Oriented 
    Programming     
    Richard Thomas, Queensland University of Technology
    (Australia)

    Object-Orientation for an Expert System: a Case of
    Analysis     
    Jocelyn Armarego, Curtin University of Technology (Australia)
    
    A Comparison of Practitioner and Educator Experience in
    Object-Oriented Training     
    Martin Dick, Anne Rouse, Monash University (Australia)

    The Object-Oriented Paradigm  
    Peter McKenzie, Monash University (Australia)

A3: OO FORMAL METHODS, CONCURRENCY

    Introducing Priorities into a C++ based Actor Language for
    Multithread Machines     
    Gilles Fouquier, Francois Terrier, French Atomic Energy
    Agency (France)

    Object VDM     
    Wei Ming Yan,University of Queensland (Australia); Douglas
    Grant, Swinburne University of Technology (Australia) 

    Class Types as Sets of Classes in Object-Oriented Formal
    Specification Languages     
    Chen Jian, Monash University (Australia)

    Modelling Reactive Objects in Conceptual Graphs 
    Steve Callaghan, James Ricketts, Gerard Ellis, Royal
    Melbourne Institute of Technology (Australia)

B3: REUSE, CLASS LIBRARY MANAGEMENT, TOOLS

    ODBMS Considerations in the  Granularity of a Reusable OO
    Design     
    Bhuvan Unhelkar, Dow Jones Telerate (Australia); Brian
    Henderson-Sellers, University of Technology (Australia)

    Parameterization vs Inheritance     
    Thomas Kuehne, Technical University of Darmstadt (Germany)

    An Object-Oriented Specification Tool in Computer
    Networks     
    Maria  Almeida, Carlos Heuser, Liane Tarouco, Federal
    University of Rio Grande (Brazil)

    Melmoth - A Class Library Management System     
    Michael Hitchens, Paul English, Farhad Maroufi, University of
    Western Sydney, Nepean (Australia)

PANELS
Business Forum
Software Reuse
OO Education & Training

DEBATES
The Language users debate - industrial users defend their 
language of choice: Ada, C++, Eiffel, Sather, Smalltalk

Software Patents: promise or disaster?

SOCIAL PROGRAM
Monday     6:00 pm - 8:00 pm  Reception (venue to be announced)
Wednesday  8:00 pm - 10:00 pm  Conference dinner 

REGISTRATION

FEES
                            Before Nov 4       Nov 4 or later
Tutorials   
Regular Registration        $690               $790      
Full Time Academic          $450               $500      
Full Time Student           $200               $250  
  
Conference only (two days)    
Regular Registration        $360               $420  
Full Time Academic          $250               $300      
Full Time Student           $120               $150 
  
Tutorials and conference (Four day package)    
Regular Registration        $980               $1120     
Full Time Academic          $690               $790      
Full Time Student           $300               $350      
(Student fees do not cover the cost of conference lunches and 
 the conference dinner)

Prices marked "before November 4" apply only if payment is  
received before that date.

Prices include  a copy of the tutorial notes for each tutorial 
attended, a copy of the conference proceedings (if registered for 
the conference part) breaks, lunches, special event on November 
28 and the conference dinner as well as free access to the 
Exhibition. Attention: special rate for Full Time Students does 
not include lunches and the conference dinner.

Payment should be made in Australian Dollars by cheque (check) or 
international money order to MONASH UNIVERSITY and accompany the 
registration form. Substitutions will be accepted at any time.   
Written cancellations received by November 10 will be liable to a 
50% service fee. After this date there will be no refund.

VENUE (Tutorials and Conference)

Monash Conference Centre  30 Collins St, Melbourne, Australia


----------------------------------------------------------------- 
SEND PAYMENT (MADE OUT TO MONASH UNIVERSITY) AND THIS 
REGISTRATION FORM TO: 

MONASH UNIVERSITY 
Department of Software Development   
PO Box 197
Caulfield East 
VIC   3145
Australia

Phone:  +61 3 903 2787
FAX:    +61 3 903 2745
email:  mriseley@monash.edu.au


Last Name _________________________________ 
First Name______________________ 
Company Name _______________ 
Company Address_________________________________
City ___________________________ Post/Zip Code ____________ 
Country_______________
Phone ______________________ Fax __________________ 
email____________________

I wish to attend (Please tick):
[ ]  Conference only          ____________ A$  
[ ]  Tutorials                ____________ A$ 
[ ]  Four day pack            ____________ A$ 
[ ]  Extra Dinners ($50)      ____________ A$
[ ]  Extra Social event ($20) ____________ A$
     TOTAL AMOUNT             ____________ A$

Tutorial choice (please circle the tutorials you wish to attend):

NOVEMBER 28, 1994
  Morning:  
   A1-Jacobson  L1-Mckim       S1-Rao        B1-Murphy

  Aftermoon:
   A2-Jacobson  L2-Thompson    S2-Potter     B2-Steele
 
NOVEMBER 29, 1994
  Morning:
   A3-Walden    L3-Cho         S3-Lalit/Lee   B3-Duke/Swatman

  Afternoon:
   A4-McKim     L4-Schmidt     S4-Richardson  B4-Henderson-Sellers


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





                    HOTEL RESERVATION FORM 

        (TOOLS Pacific '94 November 28 - December 1, 1994)


LAST NAME _______________________________________________

FIRST NAME ______________________________________________

ADDRESS _________________________________________________

CITY ______________________ (POST/ZIP CODE) ____________

COUNTRY ____________ PHONE ______________________

FAX ________________ E-MAIL _____________________

Date of arrival: _________ Date of departure: ________ 

Number of persons: _______ Number of nights: _________

[ ] Single                 [ ]  Double   
 (1 person)                (2 persons) 

-----------------------------------------------------------------
                 
                 HOTELS AND PRICE CATEGORIES


We have arranged special rates with the following hotels which 
are within walking distance of conference centre 

 **** Hotel Windsor      |  Phone: +61 3 653 06533  | A$155  
      Spring St, City    |  Fax:   +61 3 657 0765   |
 ***  Novotel on Collins |  Phone: +61 3 650 5800   | A$105  
      Collins St, City   |  Fax:   +61 3 650 7100   |     
 ***  Sheraton Hotel     |  Phone: +61 3 650 5000   | A$95 
      Spring St, City    |  Fax:   +61 3 650 9622   |

Please fax the above form as soon as possible to the hotel of 
your choice. You will receive a confirmation of your reservation 
directly from the hotel. Payment instructions will appear on the 
acknowledgment sent back to you.


--------------------------------------------------------------------
_____________________end of program_________________________________ 


======================================================================= 11 ===
Date:    Tue, 4 Oct 1994 10:02:58 GMT
From:    olaf@logware.de (Olaf Wagner)
Subject: Re: Modula-3 compiler for Free Bsd Unix

Srinvaslu Vuggumdi (svuggumu@liblab.library.unt.edu) wrote:
: I want to install a Modula-3 compiler on a Free Bsd Unix machine. There is
: no Modula-3 compiler available for Free Bsd Unix machine at the ftp site
: "gatekeeper.dec.com". I do not know which version of Modula-3 I have to
: download to install on a Free Bsd Unix machine. Is it possible to port 
: Modula-3 compiler to a Free Bsd Unix machine ? 
: 	Please suggest me which version of Modula-3 is the best to port to
: a Free Bsd Unix machine.

Please wait just another few days, if you don't want to do all the work
again I've done in the last two weeks. I've got the compiler running
(and trestle, vbt, formsvbt, tools compiled) on FreeBSD 1.1.5, and 
Bill Kalsow will put the necessary stuff into the next release of
SRC M3. I am still doing some tests and fixing bugs. 


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


======================================================================= 12 ===
Date:    Tue, 4 Oct 1994 12:35:23 GMT
From:    lupper@informatik.uni-ulm.de (Alfred Lupper)
Subject: Proceedings of the Joint Modular Languages Conference available!

Dear Friends of Modular and Object-oriented Programming Languages,

the JMLC conference in Ulm was a great success and showed a very big interest
in Modular and Object-oriented Programming Languages.

For those who were not able to join the conference, it is still possible to get
the conference proceedings separately. The price is 60 DM until 30.11.1994. We
can not give it away cheaper, because we have high cost in printing the
proceedings. The price of 60 DM is also only valid a short time after the
conference, if you directly order from the department.

Later you will have to place an order to the

Univeritaetsverlag Ulm GmbH
Benzstrasse 12
PO Box 4204

D-89032 Ulm, Germany

Advance in Modular Languages
Proceedings of the Joint Modular Languages Conference,
University of Ulm, Germany

The ISBN number is 3-89559-220-X

After 30.11.1994 the proceedings will cost 90 DM.

If you want to have a copy before 30.11.1994, please send a fax to ++49 731
502-4142 or an e-mail to vsoffice@informatik.uni-ulm.de and tell our secretary
your name and address,that you want to buy the conference proceedings and how
you want to pay.
She will handle your order and send you a copy as soon as possible.

Thank you for your interest.


Alfred Lupper


Method of Payment:

Payable to: JMLC Conference 1994, University of Ulm

[ ] Transfer to: ULMV DE 66002 Illertisser Bank
    Sorting Code of Bank (BLZ): 731 915 00
    Account No.:                702 505 005

[ ] Cheque enclosed

[ ] Visa                         [ ] Diners Club
[ ] American Express             [ ] MasterCard/EuroCard

Card Number:                     Expiration Date:


Cardholder Name                  Signature:



---------------------------------------------------------
Alfred Lupper, Computer Science Dept.,
University of Ulm, D-89069 Ulm, Germany
Phone: ++49 731 502 4139 FAX: ++49 731 502 4142
E-Mail: lupper@informatik.uni-ulm.de
-- 
Send compilers articles to compilers@iecc.com or
{ima | spdcc | world}!iecc!compilers. Meta-mail to compilers-request@iecc.com.


======================================================================= 13 ===
Date:    Tue, 4 Oct 1994 14:41:01 GMT
From:    spencer@ERA.COM (Spencer Allain)
Subject: Re: MODULA-3 being used

I would like to thank everyone for their insightful posts and mail messages
concerning the use of (and alternatives to) MODULA-3.

Various individuals were curious as to whether I was thinking of using M3
for commerial or private use.  The answer is both.  Actually, I was going to
use it privately at first so I could learn all of the ins and outs before
considering whether it would be a viable alternative to what we are using
now.  There are a couple of languages that I wish to examine, but MODULA-3
has gained my interest because it has garbage collection and the inter-module
interface (if it is still like MODULA-2) allows for much better sharing of
code.

Unfortunately, I was going to do my testing on my linux box, but that will
have to wait as I don't have the disk space since my SCSI card won't work
under linux, or any other unix-type system :-<, and my IDE drive is tiny.
If anyone can direct me to a DOS based version that I can use, I'll have
something to work with until I can get a better SCSI card.

Again, I thank everyone for their responses and hopefully I'll have some
functionality questions (comparison of how to do X under MODULA-3, as opposed
to the way I do it under C++, etc. for now).

As for commercial use, I am currently working on a project where the customer
has mandated that we use C++.  Although, if there were a clean enough way
to communicate between MODULA-3 and C++, there is a possibility of using it
in the future.

						-Spencer Allain
						Engineering Research Associates


======================================================================= 14 ===
Date:    Tue, 4 Oct 1994 19:05:26 GMT
From:    meighen@badlands.NoDak.edu (Timothy C Meighen)
Subject: Need help installing M3forDOS

Hi, I just downloaded the M3forDOS program (Ex32) yesterday and tried to 
install it on my system.  However I had a lot of problems with the sample 
config.sys and autoexec.bat files provided.  One that I remember from the 
config.sys file was 'Bad or missing DOS\DBLSPACE.SYS'  The autoexec.bat 
file caused even more problems with it's 'codepage' commands.  The 
combined effect of these two files was to mess my keyboard up to the 
point that 'y's came out as 'z's etc.  Can someone please help me with 
this?  If it is covered in the FAQ then I apologize, I haven't been able 
to get a hold of it yet.

Please E-Mail me at:  tcmeighe@undergrad.math.uwaterloo.ca

Thank You
Tim Meighen
V1, N6-307


======================================================================= 15 ===
Date:    4 Oct 94 20:05:28
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: MODULA-3 being used


In article <SPENCER.94Oct4104101@moe.ERA.COM> spencer@ERA.COM (Spencer Allain) 
writes:

   As for commercial use, I am currently working on a project where
   the customer has mandated that we use C++.  Although, if there were
   a clean enough way to communicate between MODULA-3 and C++, there
   is a possibility of using it in the future.

It is nice to know that Modula-3 made a good impression! I think the
FAQ contains some information about connecting between C++ and
Modula-3.  Other than dealing with C++'s static initializers, you
shouldn't have major problems.

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


======================================================================= 16 ===
Date:    Wed, 05 Oct 1994 08:30:36 +0900
From:    fstiffo@unive.it (Francesco Stiffoni)
Subject: Why not Modula-3 for Mac?

Why there isn't an implementation of Modula-3 for Mac? Thread Manager
2.0.1 is good and simple to use and free. Version 7.5 of System includes
it. Other implementations often lacks threads because it's a feature of
the language difficult to implement, not for Macs.

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


======================================================================= 17 ===
Date:    5 Oct 94 11:23:51
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Why not Modula-3 for Mac?


In article <fstiffo-0510940830360001@157.138.55.12> fstiffo@unive.it (Francesco
 Stiffoni) writes:

   Why there isn't an implementation of Modula-3 for Mac? Thread Manager
   2.0.1 is good and simple to use and free. Version 7.5 of System includes
   it. Other implementations often lacks threads because it's a feature of
   the language difficult to implement, not for Macs.

Some partial attempts have taken place in the past, but never
completed (A long time ago, someone from Cambridge posted something
about having the front-end working with MPW, but I don't recall any
follow ups.)  I have been thinking about tackling this problem for
sometime, though I think it'd be simpler to base the Mac
implementation on the "upcoming" Modula-3/Lite.

Regarding the Thread Manager, I read up the following from the
documentation of Thread Manager 2.0:

> The Thread Manager will provide both cooperative and preemptive
> threads. Cooperative threads explicitly indicate when they are
> giving up the CPU. Preemptive threads can be interrupted and gain
> control at (most) any time.  The basis for the difference is that
> there are many parts of the MacOS and Toolbox that can not function
> properly when interrupted and/or executed at arbitrary times. Due to
> this restriction, threads using such services must be cooperative.
> Threads that do not use the Toolbox or OS may be preemptive.

I am not sure how this restricts the use of preemptive threads for a
Modula-3 port. Then again, maybe with a sprinkling of Scheduler.Yield
things may work out. Can the people who ported M3 to DOS comment on
how they dealt with the thread problem? I think though a clever enough
implementation can get around this problem.

Another issue is what to use as the backend for the compiler. Gcc is
an option but it may be too i/o intensive for most Macs. I looked into
using THINK Project Manager as the environment, but got terrible
results from Symantec Tech support.  I think MPW may be a good
platform, though I have not programmed in it enough to know. Does MPW
come with a fast assembler?

Last but not the least is converting the MacOS interfaces into
Modula-3. I suppose that may not be that hard, just a lot of work.

On the positive side, I think Mac programmers could get a lot of use
out of M3.  Considering that Apple dropped its support for Object
Pascal and that there aren't many compilers that allow for a portable
(across 68k and PowerPC archs) coding. The times that I have done some
Mac programming, I've desparately missed garbage collection!

If you are going to be at OOPSLA this year, make sure to come to the
Modula-3 users group; this is one of the topics I'd like to discuss.

-- Farshad (Looking forward to running Obliq on my Powerbook!)
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 18 ===
Date:    Wed, 5 Oct 1994 20:52:45 GMT
From:    michael@elwing.otago.ac.nz (Michael(tm) Hamel)
Subject: Re: MODULA-3 being used

James Kanze US/ESC 60/3/164 #71425 (kanze@us-es.sel.de) wrote:

> It's not just a question of PC or no.  Modula-3 hasn't received all of
> the marketing hype of C++, so only people who are looking for it find
> it and use it.

Well, yes, but my point was that without a single product available for Windows
or the Mac (DOS doesn't qualify as a useful environment IMHO), its very
difficult for a large group of programmers to even try Modula-3. Given the
growing level of dissatisfaction I see with C++ I find its continued absence
from these mass markets a little surprising. The closest thing I know of on the
Mac is p1 Object Modula-2, which I don't know enough about to say how close it
is to Modula-3.


--
Michael(tm) Hamel                           ADInstruments, Dunedin, New Zealand
michael@otago.ac.nz

"Not *another* shrubbery!"


======================================================================= 19 ===
Date:    05 Oct 1994 16:54:44 GMT
From:    kanze@us-es.sel.de (James Kanze US/ESC 60/3/164 #71425)
Subject: Re: MODULA-3 being used

In article <Cx0nGB.DA6@news.otago.ac.nz> michael@elwing.otago.ac.nz
(Michael(tm) Hamel) writes:

|> > > I'm hoping that the lack of bandwidth going through this newsgroup isn't
 due
|> > > to little or no use, but that there aren't as many obscure problems that
 have
|> > > to be addressed to the net for a solution.

|> No, its because there are no versions of Modula-3 for PCs or the Mac. Hence 
the
|> language is only used by a relatively small group of people who know what a
|> computer is and how to program it :-).

It's not just a question of PC or no.  Modula-3 hasn't received all of
the marketing hype of C++, so only people who are looking for it find
it and use it.

Of course, to want to look for it supposes a certain maturity as a
programmer.

(Actually, I shouldn't participate in C++ bashing.  As a consultant, I
generally get called in because things are too complex for the
customer to handle.  Without C++, I would be considerably poorer.)
-- 
James Kanze      Tel.: (+33) 88 14 49 00     email: kanze@lts.sel.alcatel.de
GABI Software, Sarl., 8 rue des Francs-Bourgeois, F-67000 Strasbourg, France
Conseils en informatique industrielle --
                              -- Beratung in industrieller Datenverarbeitung




======================================================================= 20 ===
Date:    Thu, 6 Oct 1994 12:49:25 EDT
From:    jdiaz@sei.cmu.edu (Jorge Luis Diaz-Herrera)
Subject: Re: Information on teaching OO and Reuse (redux)


In article <36ek9s$12kh@news.manassas.ibm.com>, hoodt@postoffice.manassas.ibm.c
om (Thomas Hood 913-4501) writes:
|> -- 
|> 
|> Thomas Hood
|> hoodt@lfs.loral.com
|> -- Ada grunt since 1985
|> -- Member Team Ada since 1994
|> -- Member Team Human since 1965
|> --
|> -- My opinions are not those of my employers, and if they were I'd probably
|> -- reject them out of hand and form new ones.



Please also add the following two courses available from the SEI:



"Software Construction and Reuse with Ada" -- 28 video taped lectures
					   -- develivered Spring 94
					   -- to CMU MSE class and NTU 



"Developing Reusable Software"		   -- 14 video taped lectures
					   -- first delivery in January 95
					   -- to CMU MSE class and NTU 

Both courses re based on Ada (the second one includes Ada9X)

Jorge D-H
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
J.L.Diaz-Herrera, PhD, Senior MTS	: Phone: (412) 268-7636
Academic Education Project		:
Software Engineering Institute		: FAX: 	 (412) 268-5758
Carnegie Mellon University		:
Pittsburgh, PA 15213-3890		: e-mail: JDIAZ@sei.cmu.edu
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-







======================================================================= 21 ===
Date:    7 Oct 1994 00:30:52 -0500
From:    kitana!sysop@caprica.com (JL Gomez)
Subject: binaries of Modula 3 for Linux?

Anyone know where I can FTP binaries of Module 3 for Linux?

I'm interested in the X and BSD sockets package also.

I plan on creating a multi-user game.
-- 
sysop@kitana.org


======================================================================= 22 ===
Date:    Fri, 7 Oct 1994 00:14:34 GMT
From:    wagner@luthien.in-berlin.de (Olaf Wagner)
Subject: Last problem of M3 port to FreeBSD


Hello all,

I am looking for help concerning the last (I hope so ;-) problem of the
SRC M3 port to FreeBSD 1.1.5:

As with most ports, it seems, the problem is in the thread interface.
The threads are running, and I am quite sure I have got the size of 
the jump_buf right, the values in Target.m3 are correct for FreeBSD
and the signal interface is ok. The last vexing problem that I haven't
been able to track down during the last few days is that threads preempted 
by SIGVTALARM will raise floating point exceptions now and then. It seems
as if the delivery of the signal during the execution of a floating point
operation will cause this operation to fail. Here is a simple program that
will invariably fail due to floating point exceptions:


(* Test: threads and floating point operations*)

MODULE Main;

IMPORT Fmt, Wr, Thread, Stdio;
<*FATAL ANY*>

TYPE
  T = Thread.Closure BRANDED "T" OBJECT
        inc: INTEGER; END;

VAR 
  task1, task2, task3, task4, task5, task6: T;
  t1, t2, t3, t4, t5, t6: Thread.T;

PROCEDURE task (self: T) : REFANY RAISES {} =
   VAR n, m : INTEGER;
   VAR a, b, c : REAL;
BEGIN
 n := 0;
 a := 1.001;
 b := 1.002;
 WHILE n < 1000000 DO
    IF ABS(b) < 0.000001 THEN
       b := 2000.0;
    END;
    c := a / b;
    (*
    m := 23400 * 50 + (123 * 40 DIV 8);
    *)
    INC(n);
    a := b;
    b := c;
 END;
 RETURN NIL;
END task;


BEGIN

task1 := NEW (T, apply := task, inc := 1);
task2 := NEW (T, apply := task, inc := 2);
task3 := NEW (T, apply := task, inc := 3);
task4 := NEW (T, apply := task, inc := 4);
task5 := NEW (T, apply := task, inc := 5);
task6 := NEW (T, apply := task, inc := 6);


t1 := Thread.Fork (task1);
t2 := Thread.Fork (task2);
t3 := Thread.Fork (task3);
t4 := Thread.Fork (task4);
t5 := Thread.Fork (task5);
t6 := Thread.Fork (task6);

EVAL Thread.Join (t1);
EVAL Thread.Join (t2);
EVAL Thread.Join (t3);
EVAL Thread.Join (t4);
EVAL Thread.Join (t5);
EVAL Thread.Join (t6);

END Main.

You even don't need six threads, two are enough. Everything will work fine
if you just use integer arithmetic. The program works fine on the Linux
machine I used to crosscompile the M3-compiler, though the implementation of
threads is not very different (stdio took me considerably longer).
I have looked at everything I could think of and am somewhat at a loss:
Can it really be that the floating point status is not saved correctly
by setjmp/longjmp? Is there a subtle problem in ThreadPosix I haven't found?
I had a look at libpthread, but there setjmp/longjmp seem to be used in 
a very similar way. Is my hardware broken (though everything else works
fine (I've got an 486 33 MHz with 16 MB RAM))?

By the way, here is the implementation of setjmp/longjmp in libc of 
FreeBSD 1.1.5:

/*
 * C library -- _setjmp, _longjmp
 *
 *	_longjmp(a,v)
 * will generate a "return(v)" from the last call to
 *	_setjmp(a)
 * by restoring registers from the environment 'a'.
 * The previous signal state is NOT restored.
 */

#include "DEFS.h"

ENTRY(_setjmp)
	movl	4(%esp),%eax
	movl	0(%esp),%edx
	movl	%edx, 0(%eax)		/* rta */
	movl	%ebx, 4(%eax)
	movl	%esp, 8(%eax)
	movl	%ebp,12(%eax)
	movl	%esi,16(%eax)
	movl	%edi,20(%eax)
	fnstcw	28(%eax)
	xorl	%eax,%eax
	ret

ENTRY(_longjmp)
	movl	4(%esp),%edx
	movl	8(%esp),%eax
	movl	0(%edx),%ecx
	movl	4(%edx),%ebx
	movl	8(%edx),%esp
	movl	12(%edx),%ebp
	movl	16(%edx),%esi
	movl	20(%edx),%edi
	fninit
	fldcw	28(%edx)
	testl	%eax,%eax
	jnz	1f
	incl	%eax
1:	movl	%ecx,0(%esp)
	ret

The X applications (Puzzle, Plaid, fisheye, cube) all run fine if I
start them with @M3nopreemption (which disables the SIGVTALARM), but
they invariably crash at some random point with a floating point
exception if they are started without this option.

I would appreciate every hint or opinion you might want to express.

Thanks for your interest

Olaf

/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
|| Olaf Wagner           | wagner@luthien.in-berlin.de (private) | 
|| Hobrechtstrasse 80    | olaf@logware.de (work)                |
|| 12043 Berlin 44       | phone: 49 30  624 99 48               |
|| Germany / Deutschland | please don't call before 9 o'clock    |
\/////////////////////////////////////////////////////////////////

-- 
/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
|| Olaf Wagner           | wagner@luthien.in-berlin.de (private) | 
|| Hobrechtstrasse 80    | olaf@logware.de (work)                |
|| 12043 Berlin 44       | phone: 49 30  624 99 48               |
|| Germany / Deutschland | please don't call before 9 o'clock    |
\/////////////////////////////////////////////////////////////////


======================================================================= 23 ===
Date:    Thu, 06 Oct 94 18:09:16
From:    Michael=Fuerst%FFI%USACERL@leo.cecer.army.mil
Subject: Modula 3 Code available?

I there any Modula 3 code publicly available
to handle most basic data structures?

I am consdering implementing some GA's 
using Modula 3 on my PC, and such would make this 
all easier?

Also, are the current PC implementations which produce
stand alone exe's
considered relatively bug-free (i.e. are any bugs
easily worked around)?

Thanks
Michael Fuerst


======================================================================= 24 ===
Date:    Fri, 7 Oct 1994 13:05:16 GMT
From:    jjm@swlrb9.msd.ray.com (James Murphy {75881})
Subject: Re: Information on teaching OO and Reuse (redux)


In article <1994Oct6.124925.12431@sei.cmu.edu>, jdiaz@sei.cmu.edu (Jorge Luis D
iaz-Herrera) writes:

|>Please also add the following two courses available from the SEI:
|>
|>
|>
|>"Software Construction and Reuse with Ada" -- 28 video taped lectures
|>					   -- develivered Spring 94
|>					   -- to CMU MSE class and NTU 
|>
|>
|>

I took the above course live in 1992.  I highly recommend it.  I would also
encourage anyone interested in reuse to read/capture/listen to *any*
and all information on domain engineering and product-line reuse.

If you can get someone from HP to talk to you, do it.

-- 
The opinion expressed here are mine, not my employers.  In fact,
opinions are probably the one thing developed at work that
employers do _not_ claim ownership of.


======================================================================= 25 ===
Date:    7 Oct 1994 19:06:05 GMT
From:    mjj@Eng.Sun.COM (Mick Jordan)
Subject: Re: Probs with M3 installation for SOLsun

The driver (m3) needs to be altered to use unsigned char instead of char when
generating the type maps. The procedure MxGen.EmitTypecells contains the line:

Out (s, "\nstatic char _maps[", Fmt.Int (n_bytes), "] = {\n");

Change char to unsigned char and rebuild and install the driver.

Mick Jordan





======================================================================= 26 ===
Date:    07 Oct 1994 19:09:42 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: binaries of Modula 3 for Linux?

In article <199410070504.AA24175@kitana.org> kitana!sysop@caprica.com (JL Gomez
) writes:

>   Anyone know where I can FTP binaries of Module 3 for Linux?

Binaries for Linux as well as the new Modula-3 FAQ can be found via
anonymous ftp from: vlsi.polymtl.ca:/pub/m3. 

>   I'm interested in the X and BSD sockets package also.
>   I plan on creating a multi-user game.

Why not use Modula-3 Network Objects? They are perfect for building
something like a multi-user game! This would allow you to concentrate
on building of the game rather than networking details.  There are
also other M3 libraries also provide a lot of support for building
GUIs. 

Another package to consider is (Visual) Obliq, a distributed scripting
language with multi-user application building capabilities.

But if you don't want to bother with all these nice packages, Modula-3
also includes direct support for TCP streams (tcp package within the
ui or netobj archives), and X (X11R4 archive).

I don't know if the archives are included in the LINUX binary
distribution. If not, you can get them from

             gatekeeper.dec.com:/pub/DEC/Modula-3.

Please do let us know how it goes.

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


======================================================================= 27 ===
Date:    7 Oct 1994 17:15:50 GMT
From:    muth@cs.arizona.edu (Robert M. Muth)
Subject: Probs with M3 installation for SOLsun

Hi,

I have installed M3 from DIGITAL for SOLsun on my system.
It works almost perfectly, but when I m3build a program I 
usually get several warnings of the following style:

 -> linking foo
"_m3main.c", line 118: warning: initializer does not fit: 221
"_m3main.c", line 118: warning: initializer does not fit: 217
"_m3main.c", line 118: warning: initializer does not fit: 209
...

How can I get rid of them ?

Robert


======================================================================= 28 ===
Date:    Sat, 08 Oct 94 10:34:09 CET
From:    boud@rempt.xs4all.nl (Boudewijn)
Subject: modula3 for Linux

It has probably been asked here before, but is there a Modula 3 for Linux 
(or failing that for DOS or Windows)? I am afraid I can't run other 
operating systems but I would like to join the fun.
-- 
Boudewijn Rempt
Kloosterstraat 34 1.2, 2021 VN Haarlem.
't Gezichtje eerst, dan de handen,
dan de bibben, en 't laatst de tanden.
                                  Mijnheer Dil, De tuinen van Dorr, Paul 
Biegel.


======================================================================= 29 ===
Date:    Sun, 9 Oct 1994 20:00:43 -0400
From:    gwyant@marvin.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS
)
Subject: modula3 for Linux

You bet there is ! Precompiled binaries *with shared library support)
can be gotten from:

	ftp.vlsi.polymtl.ca:/pub/m3/linux

Good to see another new face anxious to join the fun ! 

--geoff


======================================================================= 30 ===
Date:    Mon, 10 Oct 94 18:16:13 EDT
From:    BERGINF@PACEVM.DAC.PACE.EDU (Joseph Bergin)
Subject: DS3100 build problem

I feel really dumb.  Trying to build M3.3.3 on a DS3100. Following instructions
and everything going well until m3ship:
m3ship: no build directory DS3100
is the error I get.  Well there is such a directory.  Ignoring the problem I
try m3build for my project and I get:--- building in DS3100 ---
  m3 -w1 -why -g -w3 -o tt -F/usr/tmp/aaaa10677
  new source -> compiling ../src/Object.i3
  "../src/Object.i3", line 3: unable to find interface (RT0)
  "../src/Object.i3", line 3: imported object is not an interface (RT0)
  "../src/Object.i3", line 3: unable to find interface (RTHooks)
  "../src/Object.i3", line 3: imported object is not an interface (RTHooks)
  4 errors encountered
Well, my source doesn't mention RT0 or RTHooks. Any suggestions? Thanks. Joe


======================================================================= 31 ===
Date:    Tue, 11 Oct 1994 09:37:28 GMT
From:    allenbach@sicmail (Philippe Allenbach)
Subject: Garbage Collection Question

In Comp.lang.pascal, I wondered why we couldn't introduce Modula 3 features in 
Borland Pascal; among them was garbage collection.
I received different replies objecting to this:
One of these was:

>Let me give an example:

>Suppose you are working with a record on the heap that holds a file 
>variable.  You forget to clean it up properly, and two bad things will 
>happen:  you'll have a memory leak, and a lost file handle.  The memory leak 
>is easy to detect, so you'll be reminded to call your cleanup procedure that 
>closes the file and disposes of the memory.

>On the other hand, if you had garbage collection, the heap manager would 
>notice that no pointer referred to that record any more, and would dispose 
>of it.  You'd still have the lost file handle, but that's a little harder to 
>detect, and you might ship the program with the bug in it.  Only when 
>someone ran it long enough to use up all file handles would the bug be 
>discovered.

>If you don't like the file handle example, substitute any other kind of 
>cleanup operation whose omission is harder to detect than a heap leak.  

>Duncan Murdoch

Can someone tell me if this is a real problem and how it is tackled in Modula 
3.Personnaly I think that garbage collection would be a nice improvement but I
m not very knowledgeable in this field.

Philippe Allenbach
allenbach@di.epfl.ch




======================================================================= 32 ===
Date:    Tue, 11 Oct 1994 07:25:01 -0500
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Garbage Collection Question

In article <allenbach.75.2E9A5CD8@sicmail>, Philippe Allenbach, defending
garbage collection for Pascal, asks how Modula-3 deals with references to
external resources (such as file handles) that may need to be explicitly
cleaned up during the garbage collection process apart from freeing of
memory.

This problem may exist if you use a simple-minded garbage collector.
However, garbage collectors that deal with realistic problems -- such as
the one in SRC Modula-3 -- allow the programmer to declare cleanup
procedures for reference that relate to resources external to the program.
When the space taken up by the reference is about to be collected, a
cleanup procedure for that of reference is called. Note that in Modula-3,
this is not a language feature; it is implemented as a part of the runtime
library.

For more information, see INTERFACE WeakRef in libm3.

INTERFACE WeakRef;

(* Most Modula-3 programs simply let the garbage collector deallocate
   storage automatically, but some programs need more control.
   For example, if a variable allocated in the traced
   heap contains a handle on a resource in the operating system or in
   some other address space, then when the variable is garbage-collected
   it may be important to deallocate the resource.  The "WeakRef"
   interface provides this additional control. [...] *)


-- Farshad


======================================================================= 33 ===
Date:    Mon, 10 Oct 1994 21:05:25 -0500
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: DS3100 build problem

In article <9410102225.AA22088@inet-gw-1.pa.dec.com>,
BERGINF@PACEVM.DAC.PACE.EDU (Joseph Bergin) wrote:
> try m3build for my project and I get:--- building in DS3100 ---
>   m3 -w1 -why -g -w3 -o tt -F/usr/tmp/aaaa10677
>   new source -> compiling ../src/Object.i3
>   "../src/Object.i3", line 3: unable to find interface (RT0)
>   "../src/Object.i3", line 3: imported object is not an interface (RT0)
>   "../src/Object.i3", line 3: unable to find interface (RTHooks)
>   "../src/Object.i3", line 3: imported object is not an interface (RTHooks)
>   4 errors encountered
> Well, my source doesn't mention RT0 or RTHooks. Any suggestions? Thanks. Joe

You probably need a statement:

   import ("libm3")

in your m3makefile. This should do the trick.  This was missing from
examples in the earlier versions of the SRC documentation.


If this fix doesn't work, I suggest you post your steps of installations
and some more detail about the problem.

-- Farshad


======================================================================= 34 ===
Date:    Tue, 11 Oct 94 12:49:33 EDT
From:    BERGINF@PACEVM.DAC.PACE.EDU (Joseph Bergin)
Subject: DS3100 build problems

Yes, I was missing import(libm3) but adding it has not solved my problem.
I grabbed the new stuff (build and backend) from gatekeeper along with
the README file.  I unpacked-untarred as per instructions.

I Followed the instructions in README to the letter
 with no changes made to
        boot-DS3100/m3build/templates/DS3100
        boot-DS3100/m3cc/build
Everything goes well during m3build except that
during the m3build step there were a number of messages
(no .h files in ...
When I run the m3ship command I get the error
        m3ship: no build directory DS3100
and nothing else seems to be done

after adding
import(libm3)
to my makefile I get the following when executing m3build
        --- building in DS3100 ---
        "/usr/users/jabergin/m3lib/src/m3makefile", line 439: file "/usr/local/
l
   ib/m3
        /pkg/libm3/DS3100/.M3EXPORTS" does not exist
        *** call stack ***
        "/usr/users/jabergin/m3lib/src/m3makefile", line 439: call to built-in 
i
   nclude
        "/usr/local/lib/m3/pkg/m3build/templates/COMMON", line 431: call to pro
c
   edure
         import_version
        "/usr/users/jabergin/m3lib/src/m3makefile", line 70: call to procedure 
i
   mport

Help. Joe Bergin


======================================================================= 35 ===
Date:    11 Oct 1994 20:01:18 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: DS3100 build problems


It looks like was wrong in my earlier post about DS3100 installation.
The "import(libm3)" trick works in building executable programs; I
didn't realize that your m3build hadn't built libm3 yet.

Upon successful completion, m3build creates an .M3EXPORTS file if you
have declared some files to be exported in your m3makefile (this is
invariably the case in programs that you get from the archive). m3ship
uses the .M3EXPORTS file to ship the right files to the right
destinations in public directories. It looks like the missing .h files
are probably stopping the build from successfully completing, and
that's why m3ship doesn't work.

Of course, I could be wrong again. :-)

We don't have an Ultrix installation here, unfortunately, but I
believe others have installed the DS3100 release of 3.x without
problems.  Are you sure that the required .h files in the system
include directories are where they are supposed to be?

>  Help. Joe Bergin

Sorry to mislead you before. It is hard to debug installations from
this far away.

-- Farshad

P.S., We should make binary archives for all the popular ports of 3.x
available via ftp. Does anyone want to volunteer for the DS3100?
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 36 ===
Date:    Tue, 11 Oct 1994 16:33:54 -0400
From:    gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS)
Subject: m3 and gdb

douglm@rpi.edu writes:
 > I'm experiencing problems with m3 and gdb on a sparc.
 > 
 > I am try ing to debug a large program which does a lot of space allocation
 > during startup. What I'm getting is a program that starts up succesfully
 > when run normally, but gets a segmentation fault run with gdb. (and m3gdb).
 > 
 > In the example I'm looking at now, I have a procedure which inserts text
 > into a TextRefTbl.T. All of the parameters are NIL even though they are
 > constant TEXT values.
 > 
 > I'm guessing that the garbage collector has moved something and confused gdb
?
 > 
Did you run the program with @M3novm ? If not, gdb/m3gdb can take seg faults
when you try to look at heap allocated data. 

--geoff


======================================================================= 37 ===
Date:    11 Oct 1994 19:09:39 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Modula-3 User Group Meeting at OOPSLA'94, Portland


   Modula-3 User Group Meeting at OOPSLA'94
   =========================================

   You are cordially invited to a meeting of the Modula-3 User Group
   at OOPSLA'94, in Portland, Oregon. This meeting is open to all
   interested parties, especially Modula-3 users and others interested
   in learning more about Modula-3.

   The user group meeting will include presentations on what people
   are doing with Modula-3 in various organizations, including:

      Geoff Wyant -  Modula-3 at Sun Microsystems Laboratories
    Luca Cardelli -  Obliq and Visual Obliq; Modula-3 at SRC
   Farshad Nayeri -  Modula-3 at GTE Laboratories
    Steve Freeman -  Adding video capabilities to Trestle/Modula-3
   Mike Spreitzer -  Inter-Language Unification (ILU) 


   We also hope to cover a variety of topics such as:
                  -  Ports to PC Operating Systems (Win, OS/2, Mac)
                  -  Evangelizing Modula-3
                  -  Commercial use of Modula-3
                  -  Commercialization of Modula-3
                  -  Modula-3 in academic and research environments
                  -  Modula-3 for distributed applications

   Please join us! Send your suggestion or interests to the user 
   group organizers (e-mail address below).


             WHAT -  Modula-3 User Group Meeting
             WHEN -  Monday 24 October  7.30pm
            WHERE -  Red Lion Inn Lloyd Center
          ADDRESS -  1000 NE Multnomah Street, Portland, Oregon, USA

       ORGANIZERS -  Geoff Wyant, geoff.wyant@east.sun.com
                     Farshad Nayeri, nayeri@gte.com


    Modula-3 is a simple, modular programming language. While
    preserving a type-safe model, Modula-3 provides facilities for
    exception handling, concurrency, object-oriented programming,
    automatic garbage collection, and systems programming, making it
    both a practical implementation language for large software
    projects and an excellent teaching language. An implementation of
    Modula-3 is available freely from Digital Equipment Corporation's
    Systems Research Center. For more information, see:

    http://www.research.digital.com/SRC/modula-3/html/home.html
--
Farshad Nayeri
nayeri@gte.com


======================================================================= 38 ===
Date:    Tue, 11 Oct 1994 21:00:19 GMT
From:    stt@spock.camb.inmet.com (Tucker Taft)
Subject: CFP: ICSE-17 Wkshp on SW Eng. and Prog. Langs.


                          Call for Participation

              ICSE-17 Workshop on research issues in the intersection of 
               Software Engineering and Programming Languages

                       Seattle, April 24-25, 1995

Programming languages have a fundamental influence on how we think about
solving software engineering problems; likewise, new design or system
architecture paradigms may pose requirements on new programming language
capabilities. In this two-day workshop, we would like to bring together
researchers and practitioners to exchange ideas and results, compare
approaches, and discuss problems of mutual interest to software engineers
and programming language designers.  The workshop will be a mixture of
lead-in presentations and extended round-table discussions on focused
topics.  Apart from the information exchange, a goal of the workshop will be
to identify a research agenda to cover possible deficits in both areas.

We solicit the submission of five (5) copies of position papers by
November15, 1994, to Erhard Ploedereder, Workshop Chair. Position papers
should be 1000 to 3000 words in length.  Participation in this workshop will
be by invitation only, based on the organizing committee's evaluation of the
position papers. For papers with multiple authors, a primary representative
should be identified. Generally only one of the authors will be invited.

A sampling of topics of interests are:
- new developments in programming languages with particular emphasis on 
  software engineering issues;
- the match between design methods and programming language support
- relevant experience reports from industry and academia
- practitioners' views on deficits in the synergy of software engineering 
  approaches and language capabilities 
- future directions in programming language design
- the role of programming languages in the software management process
- impact of programming languages on reliability and other quality attributes
- specialized environments for programming languages 
- the effect of programming languages on ease of analysis for tasks such as
  reverse engineering
- analogies between programming languages and other software languages (such as
  specification languages and architecure description languages)


Important Dates:
 Deadline for position paper submission:            November 15, 1994
 Notification of acceptance:                        January 15, 1995
 Final version of position papers due:              March, 1995

Workshop  Chair:
     Erhard Ploedereder
     University of Stuttgart
     Institute for Informatics
     Breitwiesenstr. 20-22
     D-70565 Stuttgart
     Germany
     Tel: +49+711-7816322
     Fax: +49+711-7816380
     e-mail: ploedere@informatik.uni-stuttgart.de


Workshop committee:
   Daniel Jackson, Carnegie Mellon University (USA)
   Tucker Taft, Intermetrics (USA)


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

Also, here are some pointers to the official versions of this and other CfPs as
well as to other information about the ICSE-17 conference:
* Up-to-the-minute information about the conference is available on the
  World Wide Web (WWW) at http://www.research.att.com/#calls
* PostScript and ASCII versions of the full calls are available by anonymous
  FTP at ftp.cs.washington.edu, in directory pub/se/icse17
* Questions can be sent by email to icse17@cs.washington.edu


======================================================================= 39 ===
Date:    12 Oct 1994 08:39:06 GMT
From:    pk@i3.informatik.rwth-aachen.de (Peter Klein)
Subject: Re: m3 and gdb


>douglm@rpi.edu writes:
> > I'm experiencing problems with m3 and gdb on a sparc.
> > 
> > I am try ing to debug a large program which does a lot of space allocation
> > during startup. What I'm getting is a program that starts up succesfully
> > when run normally, but gets a segmentation fault run with gdb. (and m3gdb).
> > 
> > In the example I'm looking at now, I have a procedure which inserts text
> > into a TextRefTbl.T. All of the parameters are NIL even though they are
> > constant TEXT values.
> > 
> > I'm guessing that the garbage collector has moved something and confused gd
b?
> > 
>Did you run the program with @M3novm ? If not, gdb/m3gdb can take seg faults
>when you try to look at heap allocated data. 
>

Or just tell (m3)gdb to pass the segmentation violation to the Modula-3
runtime without further notice:
   handle SIGSEGV nostop noprint pass

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




======================================================================= 40 ===
Date:    11 Oct 94 23:02:10 EDT
From:    hathawa2@muvms6.wvnet.edu (Mark S. Hathaway)
Subject: a generic question


Hello all,

My very limited experience with Modula-2 has lead me to believe it would
be really nifty if one could have better generics than M2 has.  I'd like to
use just one write statement instead of writeinteger, writecardinal,
writereal, etc.  It seems there should be something like...

 module hi;
   import console_io;
   var i : integer8 = 42;               (* the answer to everything IS 42 *)
   var r : real32   = 42.0;
   var s : text     = '42';
 begin
   write(i);                             (*  one write statement only *)
   write(r);
   write(s);
 end hi;


 interface console_io;
   type integer8;
   type real32;
   type text;
   procedure write ( x : in : type? );    (*  only one stub for write! *)
 end console_io;


 module console_io;

   type integer8 = (* whatever *)
   type real32   = (* whatever *)
   type text     = (* whatever *)

   procedure write ( x : in : integer8 ) =   (* one write for each relevant *)
     begin                                   (* data type/object *)
     (* details details details *)
   end write;

   procedure write ( x : in : real32 ) =
     begin
     (* details here *)
   end write;

   procedure write ( x : in : text ) =
     begin
     (* details *)
   end write;

 end console_io.

where the program does a write and the compiler figures-out which to use
based on the data-type being used.

Is this sort of generic available in the new M3 ?


Mark S. Hathaway      <hathawa2@muvms6.mu.wvnet.edu>


======================================================================= 41 ===
Date:    Wed, 12 Oct 1994 10:36:36
From:    minerj@cs.colostate.edu (Jacob Miner)
Subject: How to grab invocation params???

  How do you grab command line params in Modula-3?



======================================================================= 42 ===
Date:    12 Oct 94 08:48:22
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: DS3100 build problems

In article <NAYERI.94Oct11160118@tahoe.gte.com> nayeri@gte.com (Farshad Nayeri)
 writes:

   P.S., We should make binary archives for all the popular ports of 3.x
   available via ftp. Does anyone want to volunteer for the DS3100?

I already carry binaries for SPARC, Next, HPPA and LINUX and still have
ftp space available; if someone wants to fill a directory with DS3100
binaries at my site, drop me a note...
--

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



======================================================================= 43 ===
Date:    Wed, 12 Oct 1994 15:41:51 GMT
From:    bwbecker@dragon.uwaterloo.ca (Byron Weber Becker)
Subject: m3build questions (esp. w/ non-M3 progam components)

I'm struggling with m3build to build a program that is mostly
m3, but includes some lex and yacc (flex and bison, really).

I have a number of module() declarations for the M3.  For the
lex, I have:

if stale("AsmLine.scan.o", ["AsmLine.l", "AsmLine.parse.h",
"AsmLine.h"])
  exec("flex " & path_of("AsmLine.l"))
  exec("gcc -c -g -I. lex.yy.c")
  exec("mv lex.yy.o AsmLine.scan.o")
end

Something similar for the yacc.

I also include import_obj() for the lex and yacc object code.

So...  the questions:

1. All the above seems to work except that when I run the program,
   it reports "ld.so:  Undefined symbol: _line".  "line" is a
   variable defined in the yacc code.

   a. Anything obvious that I haven't done?
   
   b. The m3 command executed by m3build uses a -F and a temporary
      file for most of the arguments.  Any way to see the complete
      argument list?

   c. Any way to get m3 to tell me about unresolved symbols at
      compile/link time rather than run time?

2. Some of the example m3makefiles (m3zume in the zeus tree)
   make use of "path_of".  It seems to give a path given just
   a file name.  Can anyone provide a more complete description?
   I can't find it documented anywhere in the WWW pages.  What  
   else isn't documented? :)

3. The above quake fragment always rebuilds AsmLine.scan.o,
   presumably because it's searching for the .o file in the
   src directory.  How can I tell stale() to search in the
   appropriate derived directory?

Thanks in advance...

=====
Byron Weber Becker                               (519) 888-4567 x4661
Computer Science Lecturer/Advisor        bwbecker@dragon.uwaterloo.ca
University of Waterloo


======================================================================= 44 ===
Date:    Wed, 12 Oct 1994 18:36:44 GMT
From:    fugate@plains.NoDak.edu (Cris Fugate)
Subject: Some OO Questions.

I have to give a short presentation for one of my classes comparing
the object-oriented extensions of Oberon-2 and Modula-3.  Oberon-2
I understand, but Modula-3 is difficult especially when there isn't
much material about it online.
   Anyway, I think I understand most of it except for the keywords
REVEAL and BRANDED.  Could somebody briefly tell me what these do?
Thanks.

Cris Fugate
fugate@plains.nodak.edu



======================================================================= 45 ===
Date:    12 Oct 94 18:58:34 EDT
From:    hathawa2@muvms6.wvnet.edu (Mark S. Hathaway)
Subject: more questions: M3, Ada, Eiffel or ?


Hello all,

As some may have surmised by my questions, I'm trying to figure-out
what language I should spend some time trying to learn and use.

I have studied Modula-2 and like it's structures, so I learn to Modula-3,
but I know Ada is decent and is well supported too.  I was reading the
Ada newsgroup and asked a question.  A reader who uses Eiffel replied
and started me thinking about that language.  I know there's a report
comparing M3 and Eiffel/Sather, but it's in PostScript form and I can't
read it.  Could someone tell me where I could get the text in ASCII or
http viewable?

In looking at the Eiffel WWW home page I noticed it's got a well-developed
set of environment tools.  What I've seen on M3 leads me to believe it's
not as well developed yet.  How well does/will M3 compete with Ada, C/C++
and Eiffel and others in the marketplace?

 
Mark S. Hathaway      <hathawa2@muvms6.mu.wvnet.edu>


======================================================================= 46 ===
Date:    13 Oct 1994 17:48:36 GMT
From:    kendall@pot.East.Sun.COM (Sam Kendall - Sun Microsystems Labs BOS)
Subject: Re: m3build questions (esp. w/ non-M3 progam components)

In article <CxKGxr.I1L@undergrad.math.uwaterloo.ca> bwbecker@dragon.uwaterloo.c
a (Byron Weber Becker) writes:

> I'm struggling with m3build to build a program that is mostly
> m3, but includes some lex and yacc (flex and bison, really).
> 
> I have a number of module() declarations for the M3.  For the
> lex, I have:
> 
> if stale("AsmLine.scan.o", ["AsmLine.l", "AsmLine.parse.h",
> "AsmLine.h"])
>   exec("flex " & path_of("AsmLine.l"))
>   exec("gcc -c -g -I. lex.yy.c")
>   exec("mv lex.yy.o AsmLine.scan.o")
> end
> 
> Something similar for the yacc.
> 
> I also include import_obj() for the lex and yacc object code.
> 
> So...  the questions:
> 
> 1. All the above seems to work except that when I run the program,
>    it reports "ld.so:  Undefined symbol: _line".  "line" is a
>    variable defined in the yacc code.

I don't know.

>    a. Anything obvious that I haven't done?

You need to have that first line be

	if stale("AsmLine.scan.o", [path_of("AsmLine.l"), path_of("AsmLine.pars
e.h"),
	path_of("AsmLine.h")])

I wouldn't call that obvious, though.

>    b. The m3 command executed by m3build uses a -F and a temporary
>       file for most of the arguments.  Any way to see the complete
>       argument list?

I suspend (^Z) the m3build at that point and go look at the temporary
file.

>    c. Any way to get m3 to tell me about unresolved symbols at
>       compile/link time rather than run time?

I'm don't know why that doesn't happen by default.  My theories: either
your executable is not finding the same shared libraries at run-time
that the linker found at link-time, or m3 is passing some argument to
ld that says "don't tell me about undefined symbols at link time."  To
further understand this problem I need to know what OS you are on.  Do
you want to follow up by email?

> 2. Some of the example m3makefiles (m3zume in the zeus tree)
>    make use of "path_of".  It seems to give a path given just
>    a file name.  Can anyone provide a more complete description?
>    I can't find it documented anywhere in the WWW pages.  What  
>    else isn't documented? :)

m3build cd's to the target directory (SPARC/ or whatever), so a filename
F by itself refers to a file in the target directory.  `path_of(F)'
yields a pathname for the file F, where F is either in the target
directory or in the same directory as the currently executing m3makefile
(some directory under src/).  Essentially, `path_of(F)' yields the path
of the source file F.

> 3. The above quake fragment always rebuilds AsmLine.scan.o,
>    presumably because it's searching for the .o file in the
>    src directory.  How can I tell stale() to search in the
>    appropriate derived directory?

See above.

----
Sam Kendall
Sun Microsystems Laboratories BOS


======================================================================= 47 ===
Date:    13 Oct 1994 18:02:44 GMT
From:    kendall@pot.East.Sun.COM (Sam Kendall - Sun Microsystems Labs BOS)
Subject: Re: a generic question

In article <1994Oct11.230211.989@muvms6> hathawa2@muvms6.wvnet.edu (Mark S. Hat
haway) writes:

> My very limited experience with Modula-2 has lead me to believe it would
> be really nifty if one could have better generics than M2 has.  I'd like to
> use just one write statement instead of writeinteger, writecardinal,
> writereal, etc.     It seems there should be something like...
> [example elided]
> where the program does a write and the compiler figures-out which to use
> based on the data-type being used.
> 
> Is this sort of generic available in the new M3 ?

No, not in general.  You can do this in Ada and C++, of course; it's
called "overloading" in C++.  I guess my feeling about overloading, both
of functions and of operators, is that although it is convenient,
particularly for numerical programming, it leads to complicated language
definitions and unreadable programs.

The closest you could come in M3 is to make an object type Writable.T,
with a method `write', and then derive all the types you want to output
from Writable.T.  But this approach has problems, and the designers of
the M3 libraries did not take it.

----
Sam Kendall
Sun Microsystems Laboratories BOS


======================================================================= 48 ===
Date:    13 Oct 1994 19:40:53 GMT
From:    dat94gan@ludat.lth.se (George Andre)
Subject: Modula3 for Mac

	I'll be gratefully, George A.





======================================================================= 49 ===
Date:    Thu, 13 Oct 94 21:54:04 -0700
From:    heydon@Pa.dec.com
Subject: Re: Some OO Questions.


> Anyway, I think I understand most of it except for the keywords
> REVEAL and BRANDED.  Could somebody briefly tell me what these do?

0. Executive Summary:

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.

1. Why REVEAL?

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 {\it 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".

2. Why BRANDED?

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.

I hope this helps,

- Allan

--------------------------------------------------------------------
Allan Heydon					heydon@src.dec.com
DEC Systems Research Center			(415) 853-2142
130 Lytton Ave.					(415) 853-2104 (FAX)
Palo Alto, CA 94301


======================================================================= 50 ===
Date:    Thu, 13 Oct 94 21:07:32 -0700
From:    heydon@Pa.dec.com
Subject: Re: How to grab invocation params???

> How do you grab command line params in Modula-3?

See the "Params" module. "Params.Count" is initialized by the runtime
to the number of command-line arguments (including the command
itself). "Params.Get(n)" returns the text of the "n"th parameter
(indexed from 0).

- Allan

--------------------------------------------------------------------
Allan Heydon					heydon@src.dec.com
DEC Systems Research Center			(415) 853-2142
130 Lytton Ave.					(415) 853-2104 (FAX)
Palo Alto, CA 94301


======================================================================= 51 ===
Date:    Fri, 14 Oct 1994 12:37:14 GMT
From:    bwbecker@dragon.uwaterloo.ca (Byron Weber Becker)
Subject: Re: How to grab invocation params???

In article <minerj.39.000A9C79@cs.colostate.edu>
minerj@cs.colostate.edu (Jacob Miner) writes:

>   How do you grab command line params in Modula-3?
> 

In v3.3 there is a module, Params, that will do it
for you.  In v2.11 there was a module, ParseParams,
that was MUCH more sophisticated.  It's beyond me
why it wasn't included in v3.3.

=====
Byron Weber Becker                               (519) 888-4567 x4661
Computer Science Lecturer/Advisor        bwbecker@dragon.uwaterloo.ca
University of Waterloo


======================================================================= 52 ===
Date:    14 Oct 1994 15:33:23 GMT
From:    tfsmith@Access.Mountain.Net (Thomas F Smith)
Subject: Re: Information on teaching OO and Reuse (redux)

The Gordian Institute has a 4 day course titled "Applying Pattern Recognition
Technologies in C++"   at the end of November.  Taught by Dr. Ben A. Hitt.
Call (800) 405-2114



======================================================================= 53 ===
Date:    Fri, 14 Oct 1994 09:09:19 PDT
From:    jmeehan@mv.us.adobe.com (Jim Meehan)
Subject: Is Apple's Thread Manager adequate for Modula-3?


Just wondering...


======================================================================= 54 ===
Date:    14 Oct 1994 18:35:52 GMT
From:    chase@centerline.com (David Chase)
Subject: Proposed MI for M3

I've been thinking about this for an age, and
thought I had a solution for over a year, but
never got around to publishing anything about it.
At the instigation of Bill Janssen, I am posting
it here in an abbreviated form (few implementation
details) to see what people think of it.  This is
a "programmer's point-of-view" description:

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

1. a class can have multiple supertypes (perhaps they
   should also be nameable for ambiguity resolution). 
   Inheritance is (using C++ jargon) non-virtual, or
   "implementation inheritance".  The syntax would
   be something like:

   TYPE D = B,C OBJECT ... END;
   
   or maybe:

   TYPE D = b1:B, b2:B OBJECT ... END;
   
   Because there could be ambiguity among method names,
   they may be prefixed with the approprite supertype
   name.  Thus, you might see

    ... OVERRIDES b1.amethod := thisproc;
                  b2.amethod := thatproc;
        END

   in the declaration of D above.  In the case of
   ambiguity, as in:

   d.amethod(...)

   either we pick the first one, or demand that the
   ambiguity be resolved within the declaration of D.
   Or, references could be made to

   d.b1.amethod(...)

2. the existing NARROW and TYPECASE mechanisms for type
   conversion "respect module boundaries".  Casts from
   super-to-sub must take the same path that was taken to
   get from sub-to-super, given a particular instance of
   super.

   TYPE A = OBJECT ... END;
   TYPE B = A OBJECT ... END;
   TYPE C = A OBJECT ... END;
   TYPE D = B,C OBJECT ... END;

   VAR d:D := ...;
   VAR b:B := d;
   VAR a:A := b;
   VAR c:C := NARROW(a,C); (* THIS WILL FAIL *)

   This fails because the path to "A" did not include "C".
   Note also that in fact, a D object contains two
   different A's.

   BAR bb:B := NARROW(a,B); (* THIS WILL WORK *)

   This works because the path to "A" did include "B", for
   this instance.

3. Pointer comparison is similarly unable to break module
   boundaries:

   (* Types as above. *)

   VAR d:D := ...;
   VAR b:B := d;
   VAR a1:A := b;
   VAR c:C := d;
   VAR a2:A := c;

   At this point, "a1" is not equal to "a2".  These are
   distinct instances of type "A".  If you want to have
   some other equality check under which a1 = a2, then
   that would have to be provided by some other interface.

It would be nice if I had a proper formalization of
"respects module boundaries" but I don't.  Note that
method invocation *may* be able to "leap around" in
the inheritance DAG, but only because someone who saw
how the DAG was constructed (a subtype class, that is)
decided that this would be a good thing (this is not
a violation of information hiding, because at the point
that the decision to do this was made, the information
was not hidden.  This is similar to the way that method
invocation can obtain access to a subtype class without
performing a NARROW).

4. If you want "virtual" or "interface" inheritance
   (e.g., for mix-ins) you get it by using a class that has
   (through some as-yet unspecified syntax) been marked as
   "virtual" or "interface" or maybe "shared".  That is,
   "virtual" is a property of a class, and not of a class's
   inheritance.  The idea here is that I want mix-ins to
   work, but for implementation reasons it is easier to
   attach the virtual to the class rather than to the object
   itself.  I don't think this is a problem for usual uses
   of virtual inheritance.  (That is, in C++, if a class C
   is virtually inherited by one derived type, is also that
   case that it is virtually inherited by all other types
   derived from it?  Failing that, would it cause any harm
   if it were?)

   TYPE A = INTERFACE OBJECT ... END;
   TYPE B = A OBJECT ... END;
   TYPE C = A OBJECT ... END;
   TYPE D = B,C OBJECT ... END;

   The same rules still apply to narrowing.

   "Making mix-ins work" has certain effects on how
   override are applied in the presence of multiple
   inheritance.  Conceivably, one could also introduce
   something like an "implementation object", but I'm not
   sure this is necessary.  The idea is that any overrides
   of "interface" supertype methods are seen by all
   subtypes of that method -- thus, overrides applied
   by B are "seen" in C.

   I don't know if you'd often need finer control over
   sharing -- for instance, it might suit you in some
   case to have B, C, and D sharing one instance of
   an A, and E, F, and G all sharing another instance
   of an A, all wrapped up inside of an H.  Lacking a
   simple way to talk about this, and fearing excess
   complexity, I'd say "don't bother" at this point.

I (think I) can implement all this efficiently, and with
(essentially) no changes to the running time of
single-inheritance-only programs.  (It occurred to me
that I should worry about opaque inheritance a little bit
more.) Run-time code generation is required in certain
instances, but I regard that as a solved problem (it is
necessary for assignments of function values to function
variables, in certain instances, in order to do pointer
arithmetic).  In those cases where RTCG was not considered
to be an option, calling conventions for functions would
need to be changed, or else MI not used, or else certain
function-to-function casts not allowed.

The two underlying implementation tricks are (1) use
pointer arithmetic in the same way that C++
implementations do to perform sub-to-super casts and (2)
for each type, there will be a set of "type positions" in
a single-inheritance tree derived from the MI DAG. 
NARROW reduces to find-nearest-type- position in this
set, and this can be performed in time O(log # positions
of target type).  For single inheritance, this is O(1).

If there are comments, I'd prefer to hear why this is or
is not a useful version of multiple inheritance, what
could be added, or what could be subtracted, how this
interacts with other notions of MI, or perhaps a
discussion of whether M-3 needs MI at all.  Back in
1988-1990, the reasons for not adding it (good ones) were
"what does it mean?" "how often is it useful?" and "does
it interact well with the rest of the language?" I think
that mix-ins are useful (though perhaps there is some way
to get their equivalent using opaque inheritance) and I
think that this interacts well with the rest of the
language.

As far as implementing this goes, I can work on
describing that in a subsequent post, if someone
really wants to know.

David Chase, speaking for myself
CenterLine Software


======================================================================= 55 ===
Date:    Fri, 14 Oct 1994 14:43:15 -0500
From:    fugate@plains.NoDak.edu (Cris Fugate)
Subject: Re: Some OO Questions.

Thanks for the explanation of BRANDED and REVEAL.  It helps a lot, but
now I have another question.  What is this TYPECASE statement, is this
like the WITH statement of Oberon-2?  If so, does Modula-3 also have
a way to test types like the Oberon-2 IS statement?  I would really
appreciate it if you could tell me.  Thanks.

Cris Fugate
fugate@plains.nodak.edu


======================================================================= 56 ===
Date:    Fri, 14 Oct 1994 19:00:47
From:    minerj@cs.colostate.edu (Jacob Miner)
Subject: Thanks -and- another question about formatting

   Thanks for the many replies to invocation params, I got it all running.  
Now I can't figure out how to format my real variable to two decimal precision 
text, i.e.

Fmt.Real(MyVariable,???,2)

It says in the interface that it takes a real then some sorta style then 
precision, so what do I put for style, or how can I do it differently or is 
there a way to pass a third param without passing the second?
Thanks!



======================================================================= 57 ===
Date:    15 Oct 94 01:05:21 EDT
From:    hathawa2@muvms6.wvnet.edu (Mark S. Hathaway)
Subject: Re: class society?

 
 Hello all,
 
 Has anyone seriously considered the idea, now that object-oriented design
 is understood pretty well, of developing one set of classes which would be
 held in public domain and implemented by all the language developers, so
 that software developers won't have the mind-bogglingly difficult task of
 learning 15 different sets of libraries of thousands of classes, types,
 procedures, functions, constants, etc.?
 
 It seems this and the emerging standard for interfaces (ILU for one) would
 make life much easier for all who really work at developing software.
 
 I know some languages still don't have inheritance and some have single-
 inheritance and some have multiple-inheritance.  Could that be overcome in
 the design/selection of the class tree?
 
 No bugs,
 
 
Mark S. Hathaway      <hathawa2@muvms6.mu.wvnet.edu>


======================================================================= 58 ===
Date:    Sun, 16 Oct 1994 03:44:16 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Help wanted with m3build + quake


I'm having trouble learning to think like a quaker, so I thought I'd
appeal for help to this newsgroup.  The SRC documentation for m3build
explains how to *use* the quake templates they've written, but it
doesn't tell me how to create me own.  The quake documentation
explains the language, but it doesn't explain the conventions used.

I have a large application that builds and runs under SRC Modula-3
v2.11, but I want to upgrade it to v3.3.  It is built from the
following parts: 

  a modula-3 program 
     some machine-independent source files in noweb
     some machine-dependent source files in noweb
     a modula-3 library supporting embedded PostScript
        some modula-3 source files in noweb
        some modula-3 source files generated by a preprocessor
           the source that is input to the preprocessor
           the preprocessor
              some icon source files in noweb
     other modula-3 source files generated by a different preprocessor
  some machine-dependent object files
  a machine-dependent object file
     a machine-independent nub
     machine-dependent C and assembly code in noweb files
  a C program
     C source files + differences to be applied to them
  another C program
     C source files + differences to be applied to them
  postscript files in source form
  postscript files generated by the second C program

Now, ideally, I'd like to be able to type m3build and have the entire
system made, or just recompile what's necessary.  I don't, however,
need to get there in one step, and I won't be shocked if quake isn't
up to the job.  I don't really know where to begin, though.
Here are some of the problems I'd like help with:

  Packages:
    - How should I structure the system into packages?  
    - Are the kinds of packages predefined with m3build sufficient, or
      should I create my own?
    - How do I create new kinds of packages?

  I need to write quake code to support
    - the icon translator
    - two different preprocessors
    - application of diffs (tie)
    - generation of postscript files
  I want a general recipe for adding a new tool to the m3build system.
    - what targets (arguments to m3build) do I support?  'all' and
      'clean'?  are there others?
    - How do I support the existing targets?  Is there a way for me to
      tell directly what arguments were passed to m3build, or is there
      some set of functions (e.g., derived()) that I have to call to
      get the right effects?
    - What if a tool itself needs to be build using m3build? How do I
      specify that?
    - Is there a way for me to put together a quake package so that
      others can use, e.g., my Icon code?

  Directories:

    Right now I have a complex directory structure that makes sense to
    me.  
      - Will I have to change it to use m3build?  If not, how can I
        describe it to m3build?
      - Is there a way to distribute my quake code so that I don't
        have to write relative path names more than once, but can
	simply refer to what's in the current directory (e.g., write
	    nwmodule("MipsFollow")
        in the mdep directory instead of having to write
	    nwmodule("mdep/MipsFollow")?

  Literate programming:

    IMHO, the distributed quake code would have been a lot easier to
    understand if its authors had used noweb.  I want to use noweb for
    my own quake code.  Can anyone suggest the ``right'' way to set up
    m3build to extract its m3makefile from a noweb file?

  Last but not least, can people recommend other quake code that's
  worth studying?



Norman
--
Norman Ramsey
norman@bellcore.com


======================================================================= 59 ===
Date:    Sun, 16 Oct 1994 03:09:38 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Trestle vs fvwm


Under X, I use a virtual window manager (fvwm) that uses Control-Arrow
(i.e., control and one of the four arrow keys) to move from one
virtual desktop to another.  This works fine except when the cursor is
over a Trestle application, in which case nothing happens.
Interestingly enough, if I hold down the control key and move into a
virtual window containing a Trestle app, I can move out again as long
as I don't release the control key.  Can anyone explain this behavior,
or better yet, tell me how to stop it?

Norman
--
Norman Ramsey
norman@bellcore.com


======================================================================= 60 ===
Date:    14 Oct 94 19:09 GMT+0300
From:    jmeehan@mv.us.adobe.com
Subject: Is Apple's Thread Manager adequate 

Subject: Is Apple's Thread Manager adequate for Modula-3?


Just wondering...


======================================================================= 61 ===
Date:    14 Oct 94 15:37 GMT+0300
From:    bwbecker@dragon.uwaterloo.ca
Subject: Re: How to grab invocation params???

Subject: Re: How to grab invocation params???

In article <minerj.39.000A9C79@cs.colostate.edu>
minerj@cs.colostate.edu (Jacob Miner) writes:

>   How do you grab command line params in Modula-3?
> 

In v3.3 there is a module, Params, that will do it
for you.  In v2.11 there was a module, ParseParams,
that was MUCH more sophisticated.  It's beyond me
why it wasn't included in v3.3.

=====
Byron Weber Becker                               (519) 888-4567 x4661
Computer Science Lecturer/Advisor        bwbecker@dragon.uwaterloo.ca
University of Waterloo


======================================================================= 62 ===
Date:    14 Oct 94 12:43 GMT+0300
From:    fugate@plains.NoDak.edu
Subject: Re: Some OO Questions.

Thanks for the explanation of BRANDED and REVEAL.  It helps a lot, but
now I have another question.  What is this TYPECASE statement, is this
like the WITH statement of Oberon-2?  If so, does Modula-3 also have
a way to test types like the Oberon-2 IS statement?  I would really
appreciate it if you could tell me.  Thanks.

Cris Fugate
fugate@plains.nodak.edu


======================================================================= 63 ===
Date:    17 Oct 1994 07:33:25 GMT
From:    amarks@nella30.cc.monash.edu.au (Andy Marks)
Subject: Error Message Questionnaire (Re-Post)

Error Message Questionnaire
===========================

Greetings,

--
NOTE: This questionnaire has been previously posted to this
newsgroup this year.  If you have already replied, there is
no need to do so again.  The re-posting is mainly for those
people who missed the first posting and US students who were
on summer holidays during the first posting.
--

Here is your big chance to have a say about the quality of
those nasty little error messages that prevent us from
accomplishing our favorite task - programming! I am using
the results from this questionnaire in my research (for a
Masters by Research degree at Monash University) into error
messages and have posted this message to all Internet
newsgroups dealing with programming languages.

Although this posting might look quite large, relax - there
are only 6 questions in total, and the final one is complet-
ely optional: most of the questions are just picking options
from a list anyway, so it shouldn't take more than 10-15
minutes to complete.

If you would like your response to remain confidential,
please indicate this - otherwise you will be given a
"thanks" somewhere in my thesis (best I can do, sorry!).

Please email replies back to the original sender. If you are
NOT replying to this questionnaire through the news reader,
address your reply to "amarks@nellads.cc.monash.edu.au".

Also, please mark all answers on the original copy of the
questionnaire - as opposed to writing your answers in a
freeform manner, which will make collating the results a lot
more difficult and time-consuming.

When all responses have been collected, a summary of the
results will be posted back to each newsgroup. Then we'll
all be able to sleep safely with the knowledge that we all
make mistakes, and no-one is perfect! :-)

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

Section A: PROGRAMMING LANGUAGE BACKGROUND - these questions
will help me learn a little about the language you're
referring to in your answers. The term "this language"
refers to the one served by the newsgroup this questionnaire
appeared on. For example, if you got this questionnaire from
"comp.lang.apl", then "this language" refers to apl.

1a.Which programming language(s) are you referring to in
   your answers?

   ada              dylan          ml               rexx
   apl              eiffel         modula2          sas
   asm              forth          modula3          sather
   awk              fortran        oberon           scheme
   basic            functional     objective-c      sigplan
   visual-basic     hermes         pascal           smalltalk
   c                icon           perl             tcl
   c++              idl            pop              teco
   cobol            intercal       postscript       verilog
   cfutures         lisp           prograph         vhdl
   clos             logo           prolog           visual
   clu              misc           python

(*)   other: 
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            insert other language here, if applicable

   (please mark ONE or MORE of these languages using a "*")

b. If applicable, please indicate below the particular
   environment(s) of this language you use (for example,
   Borland C++ versus Microsoft C++).

(*)   environment: 
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  insert environment name(s) here

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

Section B: PROGRAMMER BACKGROUND - these questions will give
me some idea of your background and level of experience.
Programmer experience and background is reputedly one of the
most influential factors when dealing with error messages.
The term "this language" refers to the one selected in question
one.

2a.How many years have you been actively programming in this
   language?

       less than one year
       1-2 years
       3-5 years
       5-10 years
       more than ten years

   (please mark ONE of these year ranges with a "*")

NOTE: By "actively programming", I mean consistent use of a particular
language on a regular basis.  For example, usage for at least an hour
each day or a couple of hours each week, say, in the regime of a
course/degree/job of some sort.

b. Using the levels of experience below, how experienced
   would you rate yourself in this language?

       novice programmer
       intermediate programmer
       expert programmer

(*)    other: 
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
             insert other level of experience, if applicable

   (please mark ONE of these levels with a "*")

NOTE: A "novice" programmer is still learning the language,
needs to refer to manuals frequently and is often
inefficient in using the language. An "intermediate"
programmer is comfortable with the language and is familiar
with most of/all of the commands of the language. An
"expert" programmer uses the language in the most efficient
way possible and spends time searching for better ways to
use the language.

3. Which other languages have you used? Please also indicate
   your level of experience in each language you've used by
   marking each one with a number indicating the number of
   years you have been actively using the language.  For 
   example, "3 c" would indicate three years experience in
   the C language.

   ada              dylan          ml               rexx
   apl              eiffel         modula2          sas
   asm              forth          modula3          sather
   awk              fortran        oberon           scheme
   basic            functional     objective-c      sigplan
   visual-basic     hermes         pascal           smalltalk
   c                icon           perl             tcl
   c++              idl            pop              teco
   cobol            intercal       postscript       verilog
   cfutures         lisp           prograph         vhdl
   clos             logo           prolog           visual
   clu              misc           python

(*)   other: 
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            insert other language here, if applicable

   (please mark ONE or MORE of these languages with a number)

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

Section C: ERROR MESSAGES - these questions are the most
important part of the questionnaire; they will tell me how
you rate the quality of the error messages in this language.
By "error messages", I mean the messages generated by the
compiler/interpreter when your code is being compiled or
interpreted (probably due to a syntax violation), or at
run-time.

4. What is your general impression of the quality of error
   messages in this language?

       poor
       below average
       average
       good
       excellent

   (please mark ONE of these levels of quality with a "*")

5. Using the kinds of problems below, how do you see the
   error messages in this language being deficient?

       obscure/vague in content
       misleading in information
       unfriendly in tone
       unhelpful in removing error
       jargonistic in wording
       accusatory in tone

(*)    other:
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
             insert other problem, if applicable

   (please mark NONE/SOME/ALL of these problems with a "*")

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

Section D: OPTIONAL - only answer this question if you wish
to and can remember the wording of some of the error
messages in this language.

6. What are some of the most common error messages you
   encounter in this language? (also indicate whether they are
   satisfactory/unsatisfactory, and how you would improve them)

(>) --- (please put your answer below here)

(<) --- (please put your answer above here)

NOTE: The term "satisfactory/unsatisfactory" in the above
question refers to your opinion as to whether the error
message clearly indicates the source of the error and how to
remove the error.

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

Thank you for the time and effort spent in making your
contribution.


======================================================================= 64 ===
Date:    Mon, 17 Oct 1994 15:16:02 GMT
From:    bwbecker@dragon.uwaterloo.ca (Byron Weber Becker)
Subject: Re: Help wanted with m3build + quake

In article <CxqyDt.7ps@walter.bellcore.com>
norman@flaubert.bellcore.com (Norman Ramsey) writes:

> I'm having trouble learning to think like a quaker, so I thought I'd
> appeal for help to this newsgroup.  The SRC documentation for m3build
> explains how to *use* the quake templates they've written, but it
> doesn't tell me how to create me own.  The quake documentation
> explains the language, but it doesn't explain the conventions used.

I'm having trouble too.  

I get the impression that people reading this group 
do their helping via e-mail.  I'd like to encourage
you to respond publically so that I (and the others
who are presumably having difficulty) can also benefit
from your experience.

>From _my_ experience so far of porting a program similar
to Norman's in that it isn't pure M3, but no where near
as complex, I'm pessimistic.  The cost of learning and
using m3build/quake will be very large.  It will be
very frustrating.  And I'm not sure I see the benefits
of using m3build.

My old makefiles worked quite well, thank you.  I very
much wish that SRC had made the v3.3 compiler useable
with make.  It would certainly ease the transition from
v2.11 for those of use who have made large investments
in code.  In addition, my collegues and I have a mandate
to expose our students to software engineering tools
-- including make -- in the course where M3 is used
as the language of instruction.  The current interface
to m3 makes this very difficult to do in a natural manner.

So, I guess I'm calling for three things:
1. A public discussion (or better documentation) on 
   using m3build/quake.

2. An explanation of the benefits of m3build, especially
   for those of us that are building systems that involve
   non-m3 code or extra processes.

3. A standard interface to the compiler/linker that is
   backwards compatible with m3 v.2.11.

=====
Byron Weber Becker                               (519) 888-4567 x4661
Computer Science Lecturer/Advisor        bwbecker@dragon.uwaterloo.ca
University of Waterloo


======================================================================= 65 ===
Date:    17 Oct 1994 17:12:58 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Trestle vs fvwm


In article <Cxqws2.3JH@walter.bellcore.com> norman@flaubert.bellcore.com (Norma
n Ramsey) writes:

   Under X, I use a virtual window manager (fvwm) that uses
   Control-Arrow (i.e., control and one of the four arrow keys) to
   move from one virtual desktop to another.  This works fine except
   when the cursor is over a Trestle application, in which case
   nothing happens.  Interestingly enough, if I hold down the control
   key and move into a virtual window containing a Trestle app, I can
   move out again as long as I don't release the control key.  Can
   anyone explain this behavior, or better yet, tell me how to stop
   it?

We had a similar "problem" with Trestle a long time ago, where when I
clicked on Trestle apps, they wouldn't bring themselves to the front
under Mwm, whereas for most other applications that did not use
Trestle, this was the case. For that, it turned out that this wasn't a
Trestle "problem". (I can't seem to find the original e-mail
conversation, unfortunately.) It turns out that Trestle is quite
strict in adhering with the window manager standard for X (what is it
called anyway?). So, for mwm, we had to specifically define mouse
bindings yinside windows in the mwm settings file, .mwmrc:

Buttons PointerButtonBindings
{
...
	<Btn1Down>	frame|icon|window	f.focus_key
... other stuff ...
}

Buttons ExplicitButtonBindings 
{
...
...same as above...
...
}

Buttons ExplicitButtonBindings
{
...
...same as above...
...
}

I just noticed that for mwm, there is also a *key binding* settings:

Keys DefaultKeyBindings
{
	Shift<Key>Escape	window|icon		f.post_wmenu

... and so on...
}

Perhaps you need to do something like this for your window manager. As
I recall, it turned out that Trestle was doing the right thing to
listen to the window manager settings, and other applications were
the ones who were ignoring the settings.

Hope this helps. Let us know if you find a cure.

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


======================================================================= 66 ===
Date:    17 Oct 1994 14:24:19 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: class society?


In article <1994Oct15.010521.1173@muvms6> hathawa2@muvms6.wvnet.edu (Mark S. Ha
thaway) writes:

>  Has anyone seriously considered the idea [...] of developing one
>  set of classes which would be held in public domain and implemented
>  by all the language developers. [...] It seems this and the
>  emerging standard for interfaces (ILU for one) would make life much
>  easier for all who really work at developing software.

I think much of what OMG CORBA is supposed to accomplish is just what
you describe: have all the vendors to agree on interfaces for all
sorts of programming tasks. The long-term *technical* success of CORBA
or other such activities for what you are describing is yet to be
determined.  As standards go, CORBA involves a lot of politics as well
as technical discussions.

Mark also writes:

> Now that object-oriented design is understood pretty well [...]

Although each advocate of a particular OOD methodology thinks that
they understand the process pretty well, I don't believe there is
overwhelming agreement across different methodologies.  (Though I
would like to hear otherwise; I don't know much about OOD.)

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


======================================================================= 67 ===
Date:    17 Oct 1994 15:22:45 GMT
From:    nayeri@gte.com (Farshad Nayeri)
Subject: defaulting values in calling procedures and methods (was Re: Thanks -a
nd- another question about formatting)


Jacob Miner asked what he has to supply as the second parameter of
Fmt.Real or how he can get away with not passing a paramater at all.

Looking at the Fmt interface, we have:

INTERFACE Fmt; 

[...]

TYPE Style = {Sci, Fix, Auto};

PROCEDURE Real(
    x: REAL;
    style := Style.Auto;
    prec: CARDINAL := R.MaxSignifDigits - 1;
    literal := FALSE)
  : TEXT;

[...]

Here, the second formal parameter to Fmt.Real, "style", is of type
"Fmt.Style" [*] which is an enumeration which can take values
"Fmt.Style.Sci", "Fmt.Style.Fix", or "Fmt.Style.Auto".

So, you can try:

|  t := Fmt.Real(MyVariable, Fmt.Style.Auto, 2, FALSE);

where "t" is a variable of type TEXT.

Actually, the formal parameter "style", has a default value
"Fmt.Style.Auto", which means that "style" is an optional parameter.
You can omit passing values for trailing optional parameters in a
call, so you if you didn't care about the precision, or the "literal"
parameter, you could've typed:

|  t := Fmt.Real(MyVariable);

hence not passing any optional parameters.

But in your case, you do want to specify precision, but you want to
leave out the style. To do this, you can use keyword binding of
parameters:

|  t := Fmt.Real(MyVariable, prec := 2);

This call is equivalent ot the first call which passes all the default
arguments, as the default value for "style" is "Fmt.Style.Auto". 

If you want to be really verbose, you could actually bind all
arguments of a call by keyword, for example:

|  t :=  Fmt.Real(x := MyVariable,
                  style := Fmt.Style.Auto,
                  prec := 2,
                  literal := TRUE);

It turns out that each one of these uses are useful in cetain
circumstances, as you may imagine. For example, for calls that take
more than a couple of parameters, it is nice to use keyword binding of
arguments because the calling code will read easier without having to
cross-reference the procedure declaration (given that the procedure
has used good names for its formal parameters.)

The reason the declaration of "Fmt.Real" only includes "Style.Auto" as
the default value, is that "Fmt.Real" is defined within the "Fmt"
interface. From outside an interface, you refer to names exported by
an interface, such as "Real" or "Style", by inserting the interface
name and a ".": "Fmt.Real" or "Fmt.Style".

[*] Why is type for "style" "Fmt.Style"? That's the topic for another
    FAQ? Check out Modula-3's ordinal types for the answer.

I am sure this is explained better in the combination of the language
definition and/or Sam Harbison's Modula-3. At any rate, I hope someone
is adding these questions and answers to the FAQ!

-- Farshad

--
Farshad Nayeri
nayeri@gte.com


======================================================================= 68 ===
Date:    17 Oct 1994 20:36:43 GMT
From:    kalsow@src.dec.com (Bill Kalsow)
Subject: Re: Help wanted with m3build + quake

Norman,

I think you'll find that quake is quite capable of handling anything
that make could.  Make provides lists of names (with no operations), a
suffix-based mechanism for abstraction, and a simple rule for deciding
when to build a derived object.  Quake offers lists (with operations
to iterate over and extend them), tables, procedures (real abstraction!)
and a built-in predicate "stale" that subsumes make's time-based building
trigger.

Living with m3build is a bit more difficult.  M3build introduces
several conventions and restrictions that make it easier to build 99%
of the Modula-3 programs in the world.  The primary restriction is
that m3build builds a single list of sources to submit to the Modula-3
compiler, and then invokes the compiler once.  The compiler uses
fine-grained version stamps to avoid many recompilations that make
would perform.

>From your description, it seems that most of your problems are caused
by the various ad hoc preprocessors you're using.  With m3build, a
preprocessor is usually described in a separate package.  That package
defines a function that encapsulates the details of running the
preprocessor.  For example, see the network objects packge, netobj,
or the the Zeus event processor, m3zume.

Finally, let me see if I can answer some of your questions.

>   Packages:
>     - How should I structure the system into packages?  

Put each preprocessor, program and library in its own
package.

>     - Are the kinds of packages predefined with m3build sufficient, or
>       should I create my own?

The kinds "defined" by m3build are

    source  => build nothing
    program => build a single executable program
    library => build a single library

I don't see anything else in your example.

>     - How do I create new kinds of packages?

I don't think you need any new kinds.  Besides there's nothing
formal about a "kind" of package.  It's simply a way to describe
the most common forms of m3makefile.

>   I need to write quake code to support
>     - the icon translator
>     - two different preprocessors
>     - application of diffs (tie)
>     - generation of postscript files

Yep.  Go for it.

>   I want a general recipe for adding a new tool to the m3build system.
>     - what targets (arguments to m3build) do I support?  'all' and
>       'clean'?  are there others?

The current templates support "all" and "clean", nothing more.
As far as I know almost nobody uses "clean".  It's simpler
to blow away the derived directory.

>     - How do I support the existing targets?  Is there a way for me to
>       tell directly what arguments were passed to m3build, or is there
>       some set of functions (e.g., derived()) that I have to call to
>       get the right effects?

For the two current targets:
  all   - use ``if defined ("_all")''
  clean - call derived() with the set of new derived objects
  
>     - What if a tool itself needs to be build using m3build? How do I
>       specify that?

?? Each m3makefile builds one thing.  Are you asking about a
makefile that builds a bunch of goo and then applies it?

>     - Is there a way for me to put together a quake package so that
>       others can use, e.g., my Icon code?

Sure.  But, you'll need to say more about what you want your clients
to type, and what's supposed to happen.

>   Directories:
> 
>     Right now I have a complex directory structure that makes sense to
>     me.  
>       - Will I have to change it to use m3build?  If not, how can I
>         describe it to m3build?

>From your message I can't tell, but I'd guess that you need to
simplify your directory structure.  "m3build" assumes a flat space
of packages, each with a "src" directory and one or more derived
directories (e.g. SPARC, DS3100, ...).

>       - Is there a way to distribute my quake code so that I don't
>         have to write relative path names more than once, but can
> 	simply refer to what's in the current directory (e.g., write
> 	    nwmodule("MipsFollow")
>         in the mdep directory instead of having to write
> 	    nwmodule("mdep/MipsFollow")?

Yes.  I think you want to use the "path_of" function.  "path_of(X)"
returns a path (full or relative to the build directory) that reaches
the file named X in the source directory containing the call.

>     IMHO, the distributed quake code would have been a lot easier to
>     understand if its authors had used noweb.

I suppose.  It would have been a lot easier to understand if it had
10x as many comments, or a 100 page tutorial, or 1-800 support, ...
But, it doesn't.  Many of the internal quake functions that m3build
uses are not documented or advertised.  The entire system is an
experiment.  I want to understand how people use it and what it's
missing.  The current level of obscurity lets the naive get their work
done, and forces the test pilots to file flight plans.

>     I want to use noweb for
>     my own quake code.  Can anyone suggest the ``right'' way to set up
>     m3build to extract its m3makefile from a noweb file?

It sounds like you want a wrapper for m3build, "NormanBuild" ;-),
that runs noweb and feeds the result to m3build.

Another goal of m3build was to produce m3makefiles that are
as declarative and portable as possible.  So far, we haven't
assumed that "noweb" was one of the universally available
tools.  Is that assumption wrong?

>   Last but not least, can people recommend other quake code that's
>   worth studying?

The netobj, m3zume, and pqueue packages contain non-trivial user-written
quake code.

  - Bill Kalsow



======================================================================= 69 ===
Date:    17 Oct 1994 21:22:28 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Re: Help wanted with m3build + quake

In article <Cxtp2q.3z8@undergrad.math.uwaterloo.ca>,
Byron Weber Becker <bwbecker@dragon.uwaterloo.ca> wrote:
>My old makefiles worked quite well, thank you.  I very
>much wish that SRC had made the v3.3 compiler useable
>with make.  It would certainly ease the transition from
>v2.11 for those of use who have made large investments
>in code.

Hear, hear.

>2. An explanation of the benefits of m3build, especially
>   for those of us that are building systems that involve
>   non-m3 code or extra processes.

m3build did eliminate the horrid build process of 2.x, which was based
on imake, and which was painful to look at, never mind maintain or
work with.  I think quake is a definite step up from all that imake
rot.  m3build is also very portable, whereas make gives only the
illusion of portability.  

Putting the derived files 'elsewhere', which m3build seems to make
easy, is a big win, especially for those of us who develop on multiple
architectures. 

There's a sense in which m3build is like latex:  if you want to do
something the designers have foreseen, you have this very clean
declarative model to work with, you declare all the pieces of your
program, and it all just works.  As with latex, however, th emoment
you want to do something different you have to wrestle with a complex,
ill-documented implementation written at a much lower level.  The
quake language itself is pretty well documented, but that's not nearly
enough---you also have to understand all the conventions and
procedures used to turn a quake interpreter into the m3build engine.
And that's also like latex; your only recouse is to read the code.
This is one reason I wished the implementors of m3build had used
noweb.



======================================================================= 70 ===
Date:    18 Oct 1994 08:33:29 GMT
From:    pk@i3.informatik.rwth-aachen.de (Peter Klein)
Subject: Re: Proposed MI for M3

Ah, finally someone is thinking about MI again. After the discussion
we had some time ago, I thought that the topic was dead for good.
First, some general remarks:
I still think MI is useful. More than that, I think it was not a good
idea to design Modula-3 without it. Some reasons:
- On software design level, MI is just as natural as SI to model
  certain situations. The most trivial example which comes into
  my mind: NULL is a subtype of every OBJECT type, and every OBJECT
  type is subtype of ROOT. That's MI, isn't it?
  And the only quality a programming language can possibly have is
  that it supports the efficient, clean, and safe implementation of
  a given design. This requires some sensible way for expressing MI.
- MI is easy to avoid if you don't need it, but hard to emulate if
  you don't have it.
- The bad reputation of MI is not the fault of MI itself, but of
  using it in the wrong situations. Inheritance should not be used
  as an import mechanism, and MI should not be used to model
  aggregates (see below). On the other hand, SI should not be used
  to model situations which are inherently MI-structured.

Now for the details:

>1. a class can have multiple supertypes (perhaps they
>   should also be nameable for ambiguity resolution). 
>   Inheritance is (using C++ jargon) non-virtual, or
>   "implementation inheritance".  The syntax would
>   be something like:
>
>   TYPE D = B,C OBJECT ... END;
>   
>   or maybe:
>
>   TYPE D = b1:B, b2:B OBJECT ... END;
>   
>   Because there could be ambiguity among method names,
>   they may be prefixed with the approprite supertype
>   name.  Thus, you might see
>
>    ... OVERRIDES b1.amethod := thisproc;
>                  b2.amethod := thatproc;
>        END
>
>   in the declaration of D above.  In the case of
>   ambiguity, as in:
>
>   d.amethod(...)
>
>   either we pick the first one, or demand that the
>   ambiguity be resolved within the declaration of D.
>   Or, references could be made to
>
>   d.b1.amethod(...)
>

This comes quite close to what I suggested in the previous discussion.
Though I'm sure that name conflicts should be resolved in the
declaration of the common subtype. This forces the programmer to
give the common subtype an extra thought, and avoids the rest of the
system having to care about its composition. So, you won't see
    ... OVERRIDES b1.amethod := thisproc;
                  b2.amethod := thatproc;
        END
(because this doesn't resolve anything), but
    ... OVERRIDES amethod  := (* whatever is useful here, maybe b1/2.amethod,
                                 but probably a new procedure composing them *)
                  (* and possibly ... *)
                  thisproc := b1.amethod;
                  thatproc := b2.amethod;
                  (* ... to retain the old functionality *)
        END

>2. the existing NARROW and TYPECASE mechanisms for type
>   conversion "respect module boundaries".  Casts from
>   super-to-sub must take the same path that was taken to
>   get from sub-to-super, given a particular instance of
>   super.
>
>   TYPE A = OBJECT ... END;
>   TYPE B = A OBJECT ... END;
>   TYPE C = A OBJECT ... END;
>   TYPE D = B,C OBJECT ... END;
>
>   VAR d:D := ...;
>   VAR b:B := d;
>   VAR a:A := b;
>   VAR c:C := NARROW(a,C); (* THIS WILL FAIL *)
>
>   This fails because the path to "A" did not include "C".
>   Note also that in fact, a D object contains two
>   different A's.
>
>   BAR bb:B := NARROW(a,B); (* THIS WILL WORK *)
>
>   This works because the path to "A" did include "B", for
>   this instance.
>
>3. Pointer comparison is similarly unable to break module
>   boundaries:
>
>   (* Types as above. *)
>
>   VAR d:D := ...;
>   VAR b:B := d;
>   VAR a1:A := b;
>   VAR c:C := d;
>   VAR a2:A := c;
>
>   At this point, "a1" is not equal to "a2".  These are
>   distinct instances of type "A".  If you want to have
>   some other equality check under which a1 = a2, then
>   that would have to be provided by some other interface.
>

I cannot say whether this is a serious constraint for the programmer,
but it seems to be harmless.

>4. If you want "virtual" or "interface" inheritance
>   (e.g., for mix-ins) you get it by using a class that has
>   (through some as-yet unspecified syntax) been marked as
>   "virtual" or "interface" or maybe "shared".  That is,
>   "virtual" is a property of a class, and not of a class's
>   inheritance.  The idea here is that I want mix-ins to
>   work, but for implementation reasons it is easier to
>   attach the virtual to the class rather than to the object
>   itself.  I don't think this is a problem for usual uses
>   of virtual inheritance.  (That is, in C++, if a class C
>   is virtually inherited by one derived type, is also that
>   case that it is virtually inherited by all other types
>   derived from it?  Failing that, would it cause any harm
>   if it were?)
>
>   TYPE A = INTERFACE OBJECT ... END;
>   TYPE B = A OBJECT ... END;
>   TYPE C = A OBJECT ... END;
>   TYPE D = B,C OBJECT ... END;
>
>   The same rules still apply to narrowing.
>
>   "Making mix-ins work" has certain effects on how
>   override are applied in the presence of multiple
>   inheritance.  Conceivably, one could also introduce
>   something like an "implementation object", but I'm not
>   sure this is necessary.  The idea is that any overrides
>   of "interface" supertype methods are seen by all
>   subtypes of that method -- thus, overrides applied
>   by B are "seen" in C.
>
>   I don't know if you'd often need finer control over
>   sharing -- for instance, it might suit you in some
>   case to have B, C, and D sharing one instance of
>   an A, and E, F, and G all sharing another instance
>   of an A, all wrapped up inside of an H.  Lacking a
>   simple way to talk about this, and fearing excess
>   complexity, I'd say "don't bother" at this point.
>

My opinions about this issue are a little bit different. IMO,
the terms "implementation" and "interface" inheritance are just
as wrong as "virtual" or "non-virtual" inheritance. You can
use MI for two purposes:
- B and C are both specializations of A which extend A by new
  properties. D is intended to combine these properties. Of
  course, it is only one A which is extended independently by B
  and C. Call this mix-in MI if you like.
- Every D is composed of a B and a C. It is actually not important
  whether or not they are both subtypes of A, because, if they are,
  the A's in B and C are independent. I call this aggregation.
  Note that we already have RECORDs for this, i.e. this D is actually
  RECORD b: B; c: C; END;. Modeling this with MI saves you defining a
  wrapper for the record which distributes the method calls to its
  components. But I think the designer should be *very* careful here
  not to introduce wrong subtype relationships just to save typing.
  To be honest, I can't think of an example where the aggregate
  can be regarded really as a subtype of all its components, although
  it works well on programming language level. I wouldn't mind if
  this kind of MI is not supported.
Be this as it may, I think that there is only one sensible place
where to decide whether we have mix-in or aggregation MI, namely in the
common subtype. The reasons are simple:
- The basetype doesn't really care how it is used in the inheritance
  structure.
- In some cases, both possibilities of composition are natural and
  sensible (if aggregation MI is natural and sensible at all).
  Take e.g. a (generic) data structure for a Set. We derive
  subtypes for OrderedSets (which allow direct access to the i'th
  element in some order provided by the generic parameter type) and
  SearchableSets (which allow access through search patterns).
  We can now think of using each of these types themselves, of
  an OrderedSearchableSet which allows both access patterns, and
  of some Graph structure using one OrderedSet for the nodes and one
  SearchableSet for its edges. (Note that throwing together two
  Sets doesn't make it a Graph, and a Graph is neither a Searchable-
  nor an OrderedSet).
So, we might have something like
  D = B + C OBJECT ... END; (* for aggregation *)
and
  D = B, C OBJECT ... END;  (* for mix-ins *)
The problem here is to define how these types of MI interact, i.e.
how many A's are there in
  D = b1:B + b2:B, b3:B OBJECT ... END; ?
I'd say three, because b3 can't share any of the A's in b1 and b2.
As I said, it's pretty difficult to consider B + B as a subtype of
B and even more as a subtype of A.
As far as I am concerned, it would be sufficient to have
  D = B, C OBJECT ... END;
where all components inherited from a common supertype are implicitely
shared, and where all ambiguities between the different extensions in
B and C are resolved in D.

Anyway, I'm glad someone is working (and even implementing) MI ideas
in Modula-3. Good luck, and keep on reporting!

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




======================================================================= 71 ===
Date:    17 Oct 94 20:54:07
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Re: Help wanted with m3build + quake


We had to build our own user package here for idlm3, available from
ftp.gte.com:/pub/m3/idlm3. While I wouldn't say that everything was
intuitive in making the quake stuff work, it wasn't that hard either.
However, I _can_ see how it would be frustrating to port from 2.x to
3.x *and* deal with the m3build difficulties at the same time though.

Actually our pre-processor, idlm3, generates netobj code, which is
processed by stubgen. We built it by mimicing stubgen, but we did run
into a problem when we wanted to generate files in the TARGET
directory that should be inputs for stubgen. I seem to recall someone
talking about this a while ago. Can someone refresh my memory how this
can be done? I seem to recall it was asked once somewhere.

I can't say that I completely understand our m3build script, but it
sure seems to be working. (We did have to do a little bit of
exhaustive search to make sure it was working right.)

I think what is lacking is better documentation for the internals of
quake & m3build. But I also think also that we are too spoiled with
all the great documentation for the internals of Modula-3 libraries.
(This, my friends, may be a sign of progress!)

For simple builds, m3build is a wonder.

Let's just be happy that Bill doesn't apply his flight plan argument
to libm3. :-) 

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


======================================================================= 72 ===
Date:    18 Oct 1994 13:58:40 GMT
From:    schaub@ponder.csci.unt.edu (Stephen Schaub)
Subject: Starting out w/ M3 & Linux


I'm a novice Modula-3 user who is looking into the possibility of using
Modula-3 to do a master's project.  I've downloaded the LINUX implementation 
from vlsi.polymtl.ca and with a hint from Dagenais can now build small
M3 programs.  I'm running into difficulty trying out some sample Trestle
and vbtkit apps, though.  The following "Hello, World" program and 
associated m3makefile result in an attempt to dereference a nil pointer
at runtime:

MODULE Hello EXPORTS Main;
IMPORT TextVBT, Trestle;
VAR v := TextVBT.New("Hello Trestle");
BEGIN  Trestle.Install(v);  Trestle.AwaitDelete(v)  END Hello.

---m3makefile---
import (ui)
import (X11R4)
implementation (Hello)
program (Hello)

Since all I have is the RR 68 and 69, which are somewhat outdated, I'm
willing to believe there's a problem with the m3makefile (although the
build succeeds without a problem).  However, I can also successfully
build a couple of the vbtapps from gatekeeper.dec.com, but get the following
runtime error:

***
*** runtime error:
***    Exception "MachineIDPosix.Failure" not in RAISES list
***

Note that I'm running a Linux box with 8 MB RAM and a large swap partition,
so I don't think memory is the problem.  Another symptom I've noticed that
may or may not have any bearing is that M3 programs are unable to find
their dynamic libraries in LD_LIBRARY_PATH unless I'm the superuser
(yes, I checked to make sure it's defined correctly under my regular account)
but I've run into that problem with other Linux software, so I don't think
it's M3 specific.

Thanks for any hints you can give.

Stephen Schaub <schaub@cs.unt.edu>


======================================================================= 73 ===
Date:    Tue, 18 Oct 1994 18:50:31 GMT
From:    crpalmer@undergrad.math.uwaterloo.ca (Chris Palmer)
Subject: Specific m3build/Quake/m3 Problem

I recently was called upon to provide a pre-compiled library for use with
the Linux version of Modula-3.  This is using the SRC3 distribution and
GCC 2.5.8 on an older Linux distribution.  The same problem was reported
using the Slackware 2.0.1 distribution.

Following is a description of the problem.  The library was installed in
.../pkg/libFoo_Bar/LINUX
                  /src
and the package Zed exists in a user's home hierarchy.

The library had two modules/interfaces and was being used by a single
module (exporting Main).  I'm going to name them here as Foo, Bar and Zed
respectively.

Bar uses the set notation a IN b.
Zed uses Foo and Bar but does not make use of any set constructors.

With the library built from an m3makefile
Module ("Foo")
Module ("Bar")
Library ("Foo_Bar")

and then used in an m3makefile:
import ("Foo_Bar")          % or is it import ("libFoo_Bar") ... (1)
implementation ("Zed")
Program ("Zed")

The m3 link phase reports that the function .../Foor_Bar (Bar.m3) has an
undeclared function "set_member".

I was forced to kludge the package Zed by copying a source from the
library (can't remember the name off hand but one of the Csupport sources)
and adding it as part of the package.

(1) As i'm writing this from another system I cannot remember the exact
    format -- either way the m3makefile does correctly build a package
    Zed that does not use Bar.

Alternatively
include_pkg ("Foo_Bar")   % or include_pkg ("libFoo_Bar")
implementation ("Zed")
Program ("Zed")

Correctly builds the module.

-----

For those of you which followed my rather abstract description of this
situation here is my guess at what might have resulted:

The object files are scanned for the modules required
The link information files are scanned for the modula-3 modules required
   by ANY object (including those in the libraries)
libm3 is scanned and the required modules extracted
libFoo_Bar is scanned and the required modules extracted

Since set_member is a C source I theorize that it was not picked up before
the initial scan of the libraries and only after libm3 has been declared
"finished" is it discovered that this object file is required.

----

In summary, i'm asking if anyone has seen a similar problem or if there
is something that I have overlooked in my usage of the m3build system?

Also, if this is the first occurance of such a thing I will have to prepare
a concrete example and send it off to the required bug reporting location.

Chris.


======================================================================= 74 ===
Date:    18 Oct 1994 20:45:07 GMT
From:    kalsow@src.dec.com (Bill Kalsow)
Subject: Re: Help wanted with m3build + quake

In article <3810nn$l78@lowell.bellcore.com>, norman@flaubert.bellcore.com (Norm
an Ramsey) writes:

>   - make and mk have 'suffix rules' which allow me to give a single
>     rule to say, e.g., ``here's how to build a .o from a .c''.  I
>     don't know the proper analog in quake, or even if it makes sense
>     for me to ask that question!

I think the proper analog is to write a procedure.
Here's a quick hack.  What do you think?

    readonly proc CompileC (file) is
      local src = path_of (file & ".c")
      local obj = file & ".o"
      if defined ("_all")
        if stale (obj, src)
          exec ("cc -c", src)
        end
      end
      deriveds (file, c_extensions)
      return obj
    end
  
Then, where you would have listed your objects in make

    OBJ = foo1.o foo2.o foo3.o

You call the procedure in quake

    OBJ = [ CompileC("foo1"), CompileC("foo2"), CompileC("foo3") ]

>   - mk has transitive closure built in, but I haven't figured out the
>     right idioms for getting transivtive closure in quake.

I'm not sure what you mean.  Perhaps the problem is in the different
models.  Make (and mk?) uses a "pull" model.  For example, you tell it
you want foo.o, it looks around and finds the suffix rule that says,
if you had a foo.c you could build foo.o.  Alas, theres no foo.c so it
looks around again and decides that running yacc on foo.y would
produce foo.c.  But, m3build uses a "push" model.  Given a source
file, you describe how to build the required objects.  In this example
you'd probably end up writing something like ComplieC(RunYacc("foo")).

Again, I'm not sure.  I'm making this up as I go... 

> Suppose I need to use the netobj preprocessor to build my Network
> Spam program.   Can I put something in the Spam m3makefile such that
> netobj gets built on demand when I try to build Spam?  or do I have to
> build netobj first?

If netobj is imported into your system, you need to build netobj first.
If netobj is a private tool that you use while building, you could
start your m3makefile with something like

     exec ("cd ../netobj ; m3build")

> *I* don't need to simplify my directory structure.  Maybe m3build
> does.  But that complex directory structure serves me well, and I
> would rather go to extra work in an m3makefile than change it.  Is
> there any hope, or are the paths so hard-wired that I might as well
> give up?

Sorry, I didn't mean there was anything wrong with your files.  I
meant that m3build would be easier to use if you flattened the directory
structure.  There's very little that's hard-wired.  The locations of
the import and export directories are fixed when m3build is installed.
The ./src, ./DERIVED convention is hard-wired into m3build and m3ship.

> That would be dandy, except I *love* having all that derived stuff in
> the derived directory, and I would like not to have to run one thing
> for complicated nowebbed m3mkefiles and another for simple flat ones.
> (I have enough trouble remembering wehter to use mk, make, or
> m3build.)  How hard would it be to write a quake function
> derived_m3makefile("filename") that would treat derived file
> "filename" as if it were part of the m3makefile?

That's not hard.  Your application will still need a little m3makefile
to get started:

  In your application,
      m3makefile:
         import ("nowebbuild")
         noweb_m3makefile ("foo.nw")
      foo.nw:
         the noweb file that contains the m3makefile

  In the nowebbuild package,
      m3makefile:
         template("nowebbuild")
      nowebbuild.tmpl:
         readonly proc noweb_m3makefile (file) is
           noweb(file, "makefile", "m3make.tmp")
           include ("m3make.tmp")
         end

> Well, noweb is probably as widely available as Modula-3, but not in
> the same places :-) On the other hand, some people must be using noweb
> with Modula-3, since I'm sure you didn't write the quake support for
> my benefit.

As it turns out, I built the existing noweb stuff to support Dave Hanson's
work on the BURS-based code generator.  I think you know Dave. :-)

  - Bill


======================================================================= 75 ===
Date:    18 Oct 1994 17:30:31 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Re: Help wanted with m3build + quake

In article <37un8r$bct@src-news.pa.dec.com>,
Bill Kalsow <kalsow@src.dec.com> wrote:
>I think you'll find that quake is quite capable of handling anything
>that make could.

Oh, I don't deny that.  I like the idea of quake, and I think it's a
cool experiment.  But just as using make required learning a whole new
way of *thinking* about building programs, so does quake, and that's
what I'm having trouble with.  I like belaboring points :-), so I'll
give a couple of examples:

  - make and mk have 'suffix rules' which allow me to give a single
    rule to say, e.g., ``here's how to build a .o from a .c''.  I
    don't know the proper analog in quake, or even if it makes sense
    for me to ask that question!
  - mk has transitive closure built in, but I haven't figured out the
    right idioms for getting transivtive closure in quake.

>M3build introduces
>several conventions and restrictions that make it easier to build 99%
>of the Modula-3 programs in the world.

And it does a fine job.  I'm just having an awfully hard time figuring
out those conventions and restrictions so I can build the other 1%.

>>     - What if a tool itself needs to be build using m3build? How do I
>>       specify that?
>
>?? Each m3makefile builds one thing.  Are you asking about a
>makefile that builds a bunch of goo and then applies it?

No.  Suppose I need to use the netobj preprocessor to build my Network
Spam program.   Can I put something in the Spam m3makefile such that
netobj gets built on demand when I try to build Spam?  or do I have to
build netobj first?

>From your message I can't tell, but I'd guess that you need to
>simplify your directory structure.  "m3build" assumes a flat space
>of packages, each with a "src" directory and one or more derived
>directories (e.g. SPARC, DS3100, ...).

*I* don't need to simplify my directory structure.  Maybe m3build
does.  But that complex directory structure serves me well, and I
would rather go to extra work in an m3makefile than change it.  Is
there any hope, or are the paths so hard-wired that I might as well
give up?

>>     I want to use noweb for
>>     my own quake code.  Can anyone suggest the ``right'' way to set up
>>     m3build to extract its m3makefile from a noweb file?
>
>It sounds like you want a wrapper for m3build, "NormanBuild" ;-),
>that runs noweb and feeds the result to m3build.

That would be dandy, except I *love* having all that derived stuff in
the derived directory, and I would like not to have to run one thing
for complicated nowebbed m3mkefiles and another for simple flat ones.
(I have enough trouble remembering wehter to use mk, make, or
m3build.)  How hard would it be to write a quake function
derived_m3makefile("filename") that would treat derived file
"filename" as if it were part of the m3makefile?

>Another goal of m3build was to produce m3makefiles that are
>as declarative and portable as possible.  So far, we haven't
>assumed that "noweb" was one of the universally available
>tools.  Is that assumption wrong?

Well, noweb is probably as widely available as Modula-3, but not in
the same places :-) On the other hand, some people must be using noweb
with Modula-3, since I'm sure you didn't write the quake support for
my benefit.  If you would like to revisit this decision, I'll see
about resurrecting the implementation of notangle written entirely in
C, which you could simply include with whatever other bootstrapping
goo you need on various targets.

Thanks for the pointers to user-written quake code and quake code that
supports preprocessors.  They should be very helpful.

Norman


======================================================================= 76 ===
Date:    Tue, 18 Oct 94 11:42:53 -0700
From:    msm@src.dec.com
Subject: Re: Trestle vs fvwm


In order to support user-interface styles that want to treat keys 
as buttons, Trestle grabs most of the keys on the keyboard inside 
your window.  When you press the control key, the grab triggers, 
and keyboard events are sent directly to the Trestle application 
until the grab is released (when you release the control key).

Most toolkits know what key combinations they consider to be special, 
and grab just those combinations.  The Trestle interface doesn't 
provide support for that, so, when people asked to be able to emulate 
the behavior of other toolkits, I threw in a very general grab.  
It's probably overkill.

Mark


======================================================================= 77 ===
Date:    19 Oct 1994 12:18:51 GMT
From:    schaub@ponder.csci.unt.edu (Stephen Schaub)
Subject: Re: Problem in installing M3 to Linux

Aaron (wfl1001@cus.cam.ac.uk) wrote:
: I have ftp the sources of m3 release 3.3 from gatekeeper.dec.com and try to
: compile it on my linux.

There's an easier way: get the already built version for Linux off of 
ftp.vlsi.polymtl.ca (it's in the /pub/m3 directory).  All these details
have been taken care of for you (although I can't say I'm running 100%
successfully myself yet).

Stephen Schaub <schaub@cs.unt.edu>


======================================================================= 78 ===
Date:    19 Oct 94 10:57:43
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Problem in installing M3 to Linux


   I have ftp the sources of m3 release 3.3 from gatekeeper.dec.com and try to
   compile it on my linux. But got the error message when I run the "m3boot"

   Error: cannot exec "COMMON.BOOT"

You are not providing too many clues... Have you followed all the steps
described in the README in boot-LINUX? You may want to grab the source
modifications i use to compile SRC-M3 on LINUX from ftp.vlsi.polymtl.ca
pub/m3/linux/diff-m3-3.3l1.tar.gz. You may also want to take directly
the compiled binaries from the same location.
--

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



======================================================================= 79 ===
Date:    19 Oct 1994 11:17:39 GMT
From:    wfl1001@cus.cam.ac.uk (Aaron)
Subject: Problem in installing M3 to Linux

I have ftp the sources of m3 release 3.3 from gatekeeper.dec.com and try to
compile it on my linux. But got the error message when I run the "m3boot"

Error: cannot exec "COMMON.BOOT"

Can anyone please tell me how to get round of it or is there any fixes ?
Thanks beforehand

Aaron
 



======================================================================= 80 ===
Date:    19 Oct 94 08:15:12
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: Specific m3build/Quake/m3 Problem


   The m3 link phase reports that the function .../Foor_Bar (Bar.m3) has an
   undeclared function "set_member".

I think you should simply put import("libm3) in either m3makefile to
fix the problem.
--

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



======================================================================= 81 ===
Date:    19 Oct 1994 12:09:29 GMT
From:    Quentin Stafford-Fraser <fraser@europarc.xerox.com>
Subject: Re: How to grab invocation params???

> In article <minerj.39.000A9C79@cs.colostate.edu>
> minerj@cs.colostate.edu (Jacob Miner) writes:
>  In v2.11 there was a module, ParseParams,
> that was MUCH more sophisticated.  It's beyond me
> why it wasn't included in v3.3.

I've often wondered why it was removed, too. It was 
very useful. Luckily, it's easy to build under 3.3, so
most of my apps have an import(parseparams) in the m3makefile...

If I remember rightly, you just need to take ParseParams.m3 
and ParseParams.i3 and replace every occurrence of Scan.BadFormat
with Lex.Error.

Quentin


======================================================================= 82 ===
Date:    Wed, 19 Oct 1994 16:13:16 GMT
From:    dduggan@plg.uwaterloo.ca (Dominic Duggan)
Subject: Re: Proposed MI for M3

Couple of points:

In article <37mj29$fkh@wcap.centerline.com>,
David Chase <chase@centerline.com> wrote:
>
>The two underlying implementation tricks are ....
>
Pugh and Weddell have an implementation scheme for MI
which avoids some of the ad-hoc restrictions of C++
(the C++ implementation of MI shines through in the MI design).
It would require doing record field layout at link time.
Postscript for a technical report describing their work is in:

	ftp://cs-archive.uwaterloo.ca/cs-archive/CS-93-22/CS-93-22.Z

>If there are comments, I'd prefer to hear why this is or
>is not a useful version of multiple inheritance, what
>could be added, or what could be subtracted, how this
>interacts with other notions of MI, or perhaps a
>discussion of whether M-3 needs MI at all.  Back in
>1988-1990, the reasons for not adding it (good ones) were
>"what does it mean?" "how often is it useful?" and "does
>it interact well with the rest of the language?" I think
>that mix-ins are useful (though perhaps there is some way
>to get their equivalent using opaque inheritance) and I
>think that this interacts well with the rest of the
>language.
>

Just to address the comment about mixins: Cook and Bracha had a paper
in OOPSLA/ECOOP 90 on "mixin-based inheritance".  Their proposal was
to add mixins to Modula-3 *without* adding MI.
-- 
Spoken: Dominic Duggan        Internet: dduggan@uwaterloo.ca
Canada: Dept of Computer Science, University of Waterloo, 
        Waterloo, Ontario, Canada N2L 3G1
WWW:    http://nuada.uwaterloo.ca/dduggan.html


======================================================================= 83 ===
Date:    20 Oct 1994 16:08:56 GMT
From:    mjj@Eng.Sun.COM (Mick Jordan)
Subject: Re: Help wanted with m3build + quake

In article fde@lowell.bellcore.com, norman@flaubert.bellcore.com (Norman Ramsey
) writes:
> In article <Cxtp2q.3z8@undergrad.math.uwaterloo.ca>,
> Byron Weber Becker <bwbecker@dragon.uwaterloo.ca> wrote:
> >My old makefiles worked quite well, thank you.  I very
> >much wish that SRC had made the v3.3 compiler useable
> >with make.  It would certainly ease the transition from
> >v2.11 for those of use who have made large investments
> >in code.
> 
> Hear, hear.
> 

As Bill pointed out, because the m3 compiler does its own internal
dependency analysis that is superior to make, there would be very
little benefit from using make. This was the experience with the 2.11
imake system - the generated makefiles exploited almost none of make's
capabilities. However, nothing prevents you using make with 3.3 beyond
an understanding of the arguments taken by m3. But using make
effectively, typically requires that you establish some conventions for
the "form" of the makefile (which is part of what imake does).  Someone
has to do that work and SRC can't do everything. Perhaps you could
provide the make support for those that might prefer it, particularly
if, as I understand things, teaching make is part of the Waterloo course
requirement.  If nothing else, teaching the students how hard it is
to evolve makefiles in the face of changes to the tools (i.e. the lack
of true abstraction), might be a useful service.

I agree that m3build needs better documentation. It also has known limitations
in its ability to describe complex, heterogenous systems. 

Mick Jordan







======================================================================= 84 ===
Date:    20 Oct 1994 18:08:29 GMT
From:    fraser@hare.EuroPARC.Xerox.COM (Quentin Stafford-Fraser)
Subject: Re: Modula3 for Mac


I should try contacting Olly Stephens (olly@zycad.com) who started one
a while back, and I think got quite a way with it.

Quentin

-- 
 ----------------------------------------------------------------------
                       Quentin Stafford-Fraser
           http://pelican.cl.cam.ac.uk/people/qs101/me.html
            
 Cambridge University Computer Lab        Rank Xerox Cambridge EuroPARC
 qs101@cl.cam.ac.uk                           fraser@europarc.xerox.com
 Tel: +44 223 334411                                Tel: +44 223 341521
 Fax: +44 223 334679                                Fax: +44 223 341510
 ----------------------------------------------------------------------



======================================================================= 85 ===
Date:    20 Oct 94 07:30:56
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Announcement: OOPSLA'94 Modula-3 User Group Meeting Mosaic Page


       Announcing - OOPSLA'94 Modula-3 User Group Meeting Mosaic Page
              URL - ftp://ftp.gte.com/pub/m3/m3ug/m3ug.html

   The Modula-3 User Group meeting is open to everyone. Please join Us!
   The meeting will include presentations by:

      Geoff Wyant -  Modula-3 at Sun Microsystems Laboratories
    Luca Cardelli -  Obliq and Visual Obliq; Modula-3 at DEC SRC
       Eliot Moss -  History and status of UMass Modula-3 compiler efforts
   Farshad Nayeri -  Using Modula-3 to build a distributed object system
    Steve Freeman -  Adding video capabilities to Trestle/Modula-3
   Mike Spreitzer -  Xerox PARC's Inter-Language Unification (ILU) 


             WHAT -  Modula-3 User Group Meeting
             WHEN -  Monday 24 October  7.30pm
            WHERE -  Red Lion Inn Lloyd Center
          ADDRESS -  1000 NE Multnomah Street, Portland, Oregon

       ORGANIZERS -  Geoff Wyant, geoff.wyant@east.sun.com
                     Farshad Nayeri, nayeri@gte.com

    For more information, see: ftp://ftp.gte.com/pub/m3/m3ug/m3ug.html

--
Farshad Nayeri
nayeri@gte.com


======================================================================= 86 ===
Date:    20 Oct 1994 23:11:59 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Re: Trestle vs fvwm

In article <9410181842.AA08101@panther.pa.dec.com>,  <msm@src.dec.com> wrote:
>In order to support user-interface styles that want to treat keys 
>as buttons, Trestle grabs most of the keys on the keyboard inside 
>your window.  When you press the control key, the grab triggers, 
>and keyboard events are sent directly to the Trestle application 
>until the grab is released (when you release the control key).

Is there a way to call off the dogs?  I notice, for example, that
Trestle doesn't grab the meta key.  Could I make a call like
  VBT.DontGrab(Mumble.Keysym.Control)
or should I just give up?



======================================================================= 87 ===
Date:    Sat, 22 Oct 1994 20:28:04 GMT
From:    tcmeighe@undergrad.math.uwaterloo.ca (Tim Meighen)
Subject: m3-PC and SIO

I am trying to compile modules on my PC using the SIO library.
I keep getting the error message "bad or malformed input file:  libSIO.a
not rel or arc"  This occurs during the linking a.out stage of compilation
I am compiling using the -lSIO option.  Any help would be appreciated
greatly.

Tim Meighen
tcmeighe@undergrad.math.uwaterloo.ca


======================================================================= 88 ===
Date:    24 Oct 1994 02:03:14 GMT
From:    norman@flaubert.bellcore.com (Norman Ramsey)
Subject: Re: Help wanted with m3build + quake

In article <381c4j$l2h@src-news.pa.dec.com>,
Bill Kalsow <kalsow@src.dec.com> wrote:
>Perhaps the problem is in the different
>models.  Make (and mk?) uses a "pull" model.  For example, you tell it
>you want foo.o, it looks around and finds the suffix rule that says,
>if you had a foo.c you could build foo.o.  Alas, theres no foo.c so it
>looks around again and decides that running yacc on foo.y would
>produce foo.c.  But, m3build uses a "push" model.  Given a source
>file, you describe how to build the required objects.  In this example
>you'd probably end up writing something like ComplieC(RunYacc("foo")).

Oh, interesting.  This is most helpful thing anyone has yet said to me
about quake.  I think I need to chew on it for a while, then go study
some m3makefiles.

Would it be fair to say that as I write functions in an m3makefile, I
build up more an more information (state) about builds that might
happen... then suddenly at the very end I say Program() or Library()
or something like that, and POW! it digests all the accumulated state
and deposits the end product somewhere?

(My apologies to those put off by the alimentary metaphor.)

>> Suppose I need to use the netobj preprocessor 
>
>If netobj is imported into your system, you need to build netobj first.
>If netobj is a private tool that you use while building, you could
>start your m3makefile with something like
>
>     exec ("cd ../netobj ; m3build")

So in the 'pull' model, netobj would be built on demand, but in the
push model, we have to build it first before we can push it?  I'll
have to think about whether I like that :-)

>      m3makefile:
>         import ("nowebbuild")
>         noweb_m3makefile ("foo.nw")
>      foo.nw:
>         the noweb file that contains the m3makefile
>
>  [ nowebbuild package omitted]

This is way cool.  I'm happy.

Norman



======================================================================= 89 ===
Date:    24 Oct 94 01:01:30 EST
From:    hkr@stc10.ctd.ornl.gov
Subject: M3 for OS/2

I read somewhere that there is a modula-3 front-end to gcc available.  Has
this been ported to OS/2?

Ron House, computing specialist
Martin Marietta Energy Systems


======================================================================= 90 ===
Date:    24 Oct 94 09:10:24
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: m3-PC and SIO

As far as I can tell, SIO is not part of the standard distribution. It is
a creation of Waterloo. Perhaps some "simple IO" library for educational
purposes. Thus, I think that you will have to find some help from within
Waterloo.
--

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



======================================================================= 91 ===
Date:    24 Oct 1994 11:31:41 GMT
From:    Quentin Stafford-Fraser <fraser@europarc.xerox.com>
Subject: Re: Help wanted with m3build + quake


> m3build did eliminate the horrid build process of 2.x, which was based
> on imake, and which was painful to look at, never mind maintain or
> work with.  I think quake is a definite step up from all that imake
> rot.  m3build is also very portable, whereas make gives only the
> illusion of portability.  

Agreed - Generally I like m3build very much, though it does have some
limitations which can be challenging to get around.

One problem I had was building a pure C program using m3build. Since
m3build always calls m3, you have to have at least a Main module if
you want to use 'Program(foo)', which is the only way to get m3 to 
produce an executable.  I got around this by using m3 to build a 
library instead, and then relinking that to produce an executable.
The quake bits are included below.
It works, but it could be tidier. 

Any suggestions, anyone?

Quentin

% ----------------------------------------------

% The following procedures allow us to build a program from purely
% C sources. They create a library (and don't therefore m3 doesn't require
% a Main) and then link the program from that.

build_standalone()

readonly proc cprogram(x) is
  M3LIBS{x} = [Location(PACKAGE, BUILD_DIR), HIDDEN, LOCAL]
  gen_m3exports(x)
  local lib  = format ("%s%s%s",  LIB_pre, x, LIB_ext)
  local libx = format ("%s%s.ax", LIB_pre, x)
  m3_option("-nostd")
  m3_option("-Y1@cc@") % We don't want PIC
  if defined("_all")
    DO_M3(["-a", lib])
    if stale(x,lib)
      exec("cc","-Bstatic","-o " & x, lib)
    end
  end
  deriveds("",[x, lib, libx])
end

readonly proc Cprogram(x) is
  cprogram(x)
  BindExport(x)
end

% ----- That's all folks -------


======================================================================= 92 ===
Date:    24 Oct 1994 15:16:09 GMT
From:    kalsow@src.dec.com (Bill Kalsow)
Subject: Re: Help wanted with m3build + quake

In article <38f4l2$d5u@lowell.bellcore.com>, norman@flaubert.bellcore.com (Norm
an Ramsey) writes:

> Would it be fair to say that as I write functions in an m3makefile, I
> build up more an more information (state) about builds that might
> happen... then suddenly at the very end I say Program() or Library()
> or something like that, and POW! it digests all the accumulated state
> and deposits the end product somewhere?

That's close.  Some functions perform their actions immediately
(e.g. import, noweb, table, netobj, ...), but anything that's destined
for the Modula-3 compiler is accumulated until the very end.

> So in the 'pull' model, netobj would be built on demand, but in the
> push model, we have to build it first before we can push it?  I'll
> have to think about whether I like that :-)

You could defer the building of netobj until you needed it.
It just needs to be explicitly built.

  - Bill


======================================================================= 93 ===
Date:    Mon, 24 Oct 1994 13:23:12 GMT
From:    faegri@dcs.glasgow.ac.uk (Tor Erlend Faegri)
Subject: network objects

I'm planning to do some experiments with the network objects and RPC. Reading
through some of the documentation for the network objects library, I noticed
that "m3build" and "m3ship" was required to install it. Unfortunately, currentl
y
only version 2.11 of the SRC Modula-3 release is installed at my site. Should
a newer version of the SRC compiler (e.g. 3.3) be installed to use network 
objects and the RPC library?

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



======================================================================= 94 ===
Date:    Tue, 25 Oct 1994 00:33:04 GMT
From:    ckingsto@undergrad.math.uwaterloo.ca (Craig Andrew Kingston)
Subject: Re: M3 for OS/2

In article <1994Oct24.010130.1@stc10.ctd.ornl.gov>,
 <hkr@stc10.ctd.ornl.gov> wrote:
>I read somewhere that there is a modula-3 front-end to gcc available.  Has
>this been ported to OS/2?
>
>Ron House, computing specialist
>Martin Marietta Energy Systems

Hi Ron - 
   
   At this very second I am transferring the LINUX version of Modula3
and files to prepare for the port.  A few weeks back I called for
people who wished to help or act as resources and I am just doing 
initial prep.  Not sure what is involved yet and how much will need to
be done but soon I will.
   If you wish to have your name available as a resource just drop
me a line and I'll contact you once I've figured out how everything
is going to be organized.
   Don't count on the port too soon but I hope to work really hard on
it now while I have plenty of time on my hands.

   Current intentions are
     1st - a working compiler of some sort
     2nd - online documentation
     3rd - when I get there - I'll decide

  Well - If anyone else has ideas, hints, already ported code, time,
experience, and/or knows others who would make great resources 
please contact me.

  Thanx muchly - 

  CRAIG ANDREW KINGSTON

  (email may change soon so please respond quick so I will have your name)
  email - ckingsto@undergrad.math.uwaterloo.ca
  ---
  post- BOX 215, Harrowsmith, Ontario, Canada, K0H 1V0
  ---
 
           (I


======================================================================= 95 ===
Date:    Tue, 25 Oct 1994 14:55:36 GMT
From:    bwbecker@dragon.uwaterloo.ca (Byron Weber Becker)
Subject: Re: Help wanted with m3build + quake

In article <3864moINNb16@smli.Eng.Sun.COM>
mjj@Eng.Sun.COM (Mick Jordan) writes:

> > In article <Cxtp2q.3z8@undergrad.math.uwaterloo.ca>,
> > Byron Weber Becker <bwbecker@dragon.uwaterloo.ca> wrote:
> > >My old makefiles worked quite well, thank you.  I very
> > >much wish that SRC had made the v3.3 compiler useable
> > >with make.  It would certainly ease the transition from
> > >v2.11 for those of use who have made large investments
> > >in code.
> 
> As Bill pointed out, because the m3 compiler does its own internal
> dependency analysis that is superior to make, there would be very
> little benefit from using make. This was the experience with the 2.11
> imake system - the generated makefiles exploited almost none of make's
> capabilities. However, nothing prevents you using make with 3.3 beyond
> an understanding of the arguments taken by m3.

Maybe.  I have made significant progress on just this approach, 
but got stymied as soon as I needed to import an interface in
another directory.  2.11 allowed search paths to be specified to
the compiler.  3.3 doc says it's allowed, but I haven't been
able to get it to work.  Can someone explain it?

> 
> I agree that m3build needs better documentation. It also has known limitation
s
> in its ability to describe complex, heterogenous systems. 

It is precisely a complex, heterogeneous system that I'm struggling
with and wish that my old makefile still worked.


=====
Byron Weber Becker                               (519) 888-4567 x4661
Computer Science Lecturer/Advisor        bwbecker@dragon.uwaterloo.ca
University of Waterloo


======================================================================= 96 ===
Date:    25 Oct 94 09:04:50
From:    dagenais@notung.vlsi.polymtl.ca (Michel Dagenais)
Subject: Re: network objects

In article <Cy6IIp.5FG@dcs.gla.ac.uk> faegri@dcs.glasgow.ac.uk (Tor Erlend Faeg
ri) writes:

   only version 2.11 of the SRC Modula-3 release is installed at my site. Shoul
d
   a newer version of the SRC compiler (e.g. 3.3) be installed to use network 
   objects and the RPC library?

Network objects are not in 2.11. You need to get the latest release. As usual
a number of binaries are available at ftp.vlsi.polymtl.ca:pub/m3.
--

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



======================================================================= 97 ===
Date:    25 Oct 1994 21:56:49 GMT
From:    rrw1000@cus.cam.ac.uk (Richard Watts)
Subject: Re: Specific m3build/Quake/m3 Problem

In article <DAGENAIS.94Oct19081512@notung.vlsi.polymtl.ca>,
Michel Dagenais <dagenais@notung.vlsi.polymtl.ca> wrote:
>
>   The m3 link phase reports that the function .../Foor_Bar (Bar.m3) has an
>   undeclared function "set_member".
>
>I think you should simply put import("libm3) in either m3makefile to
>fix the problem.

 .. and if that doesn't fix it, the m3 linker may be linking in the
wrong order, in which case you'll have to include

m3_option("-keep")
m3_option("-commands")

 in your m3makefile, copy the link command out, and put the libraries in the
correct order - yours, then libm3.

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

Richard.
-- 
`You can take my ears babe/You can take my eyes/You can take my past and
future/It won't make you wise' 
The University of Cambridge can't have these opinions even if it wants them.


======================================================================= 98 ===
Date:    26 Oct 1994 07:55:00 GMT
From:    pk@i3.informatik.rwth-aachen.de (Peter Klein)
Subject: European Mirror of Modula-3 Distribution

Our ftp site now contains a mirror of the complete distribution
of the Modula-3 system as can be found on gatekeeper.dec.com.
The server is ftp-i3.informatik.rwth-aachen.de, and the
directory is pub/Modula-3.

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




======================================================================= 99 ===
Date:    27 Oct 1994 11:41:45 -0400
From:    pjensen@csi.compuserve.com (Phil Jensen)
Subject: Why C is not my favorite language

I can't resist this shot - a message just came through
comp.os.linux.development providing a bug fix, namely changing
  if (compare[0] = 0)
to
  if (compare[0] == 0)

And the C-oids of the world sneer at "bondage-and-discipline" languages
for having things like Boolean types, and insisting that conditions
evaluate to Boolean...  [Yes, I do know that gcc will warn about the
above error.]


======================================================================= 100 ===
Date:    Fri, 28 Oct 1994 09:03:10 GMT
From:    n8243274@henson.cc.wwu.edu (S. Lee ODEGARD)
Subject: Modula-3 by example, project proposal

I would propose editing submissions into a tutorial, Modula-3 by example.
This project would illustrate all of the features of Modula-3 with simple
(and maybe some not-so-simple) example programs.  Hopefully, a tutorial
of example programs would help evangelize the very fine Modula-3 standard.

Please send suggestions or comments to n8243274@henson.cc.wwu.edu
						--S. Lee Odegard



======================================================================= 101 ===
Date:    28 Oct 1994 15:35:59 GMT
From:    kanze@us-es.sel.de (James Kanze US/ESC 60/3/164 #71425)
Subject: Re: Why C is not my favorite language

In article <38ohnp$t79@mhaai.inhouse.compuserve.com>
pjensen@csi.compuserve.com (Phil Jensen) writes:

|> I can't resist this shot - a message just came through
|> comp.os.linux.development providing a bug fix, namely changing
|>   if (compare[0] = 0)
|> to
|>   if (compare[0] == 0)

|> And the C-oids of the world sneer at "bondage-and-discipline" languages
|> for having things like Boolean types, and insisting that conditions
|> evaluate to Boolean...  [Yes, I do know that gcc will warn about the
|> above error.]

Just for the record, C++ *does* have a boolean type.  But since it
will still implicitly convert int's, etc. to bool, the erroneous
statement is still legal:-(.  (Note that learning C++ well is a
professional necessity, not an act of love.)
-- 
James Kanze      Tel.: (+33) 88 14 49 00     email: kanze@lts.sel.alcatel.de
GABI Software, Sarl., 8 rue des Francs-Bourgeois, F-67000 Strasbourg, France
Conseils en informatique industrielle --
                              -- Beratung in industrieller Datenverarbeitung




======================================================================= 102 ===
Date:    Fri, 28 Oct 1994 20:41:49 GMT
From:    Bob Hathaway <rjh@geodesic.com>
Subject: Comp.Object FAQ Version 1.0.7 (10-27) Announcement

[The comp.object FAQ is now available on:
   zaphod.uchicago.edu:/pub/CompObj7.faq(.Z)
 This announcement, along with the FAQ, will again be posted to comp.object,
 comp.answers, and news.answers in the next few days.  It will also then
 appear on rtfm@mit.edu.]

Archive-name: object-faq/announce
Last-Modified: 10/27/94
Version: 1.0.7

This announces the October version 1.0.7 of the Comp.Object FAQ!  It has
many updates and corrections and has several very up-to-date appendices
on object-oriented methodologies and systems.  While a new section on
miscellaneous commercial systems and libraries is still in the works for
completeness, this document may very well comprise the latest and most
up-to-date collection of object-oriented systems and terms in the world
today!  There is also a potential upcoming merge with the new C++
Libraries FAQ.

I will try to update the FAQ monthly with system entries and information from
the net.  I have a new TQM system in place which should proceed from the
old Level 1 to Level 5 in no time - not hard for a one man job.  *Many*
thanks to the patience of those sending system updates and corrections,
my new system should provide fast acknowledgement, inclusion (within a few
weeks) and tracking, and 6 sigma quality should provide essentially defect
free performance for the FAQ.

Sending comments, suggestions, additions, updates, corrections, and new
systems and site entries is strongly encouraged and should be directed to
the author at rjh@geodesic.com.

The FAQ is posted to the comp.object, comp.answers and news.answers newsgroups
and is available via anonymous ftp from zaphod.uchicago.edu and rtfm.mit.edu,
although new versions may take a short period of time to be installed.

Anonymous FTP Sites and Hypertext Server:
  anonymous@zaphod.uchicago.edu:/pub/CompObj7.faq(.Z)     (128.135.72.61)
  anonymous@rtfm.mit.edu:/pub/usenet/comp.object/*_Part_* (18.181.0.24 Tmp)
  http://iamwww.unibe.ch/~scg/OOinfo/FAQ/index.html       (new IAM location)

Mail Server:  (See also section 1.24)
  mail mail-server@rtfm.mit.edu
  Subject:
  send usenet/comp.object/*

Zaphod is preferred over rtfm for anonymous ftp retrieval, as it provides a
single file.  Rtfm contains the FAQ as posted.

To use the hypertext system, see APPENDIX E, entries 27.

Again, a short period of time may be required to retrieve the latest version
from anonymous ftp, allowing the posted version to propagate and get out as
quickly as possible.

Thank you to the many people who have contributed their time and effort to
help this document spread the word about object-oriented technology and
available systems!  It is hoped it will be most useful in that endeavor.

Best Regards!
bob


======================================================================= 103 ===
Date:    29 Oct 94 00:55:30
From:    nayeri@gte.com (Farshad Nayeri)
Subject: Uppercase keywords (was: Re: Why C is not my favorite language)


In article <1994Oct28.172756.1562@news.wrc.xerox.com> bil@burka (Igor Belchinsk
iy) writes:

   Now, talking about Modula-3, can anyone explain why it uses so many
   so long keywords (PROCEDURE is particularly frequent and
   irritatiing) and why are all of them shouting in capitals?  This is
   not a flame, I really don't understand why a very nice, clean and
   expressive language inherited ugly syntax manners of Fortran and
   PL/I times.

Modula-3 originally allowed keywords in all upper case or all lower
case. For some reason this got erased a bit later, moving to all upper
case keywords.

I think part of the problem has to do with the typeface that you are
using. Faces such as Computer Modern Typewriter (via TeX), Lucida
Typewriter, or Monaco TrueType tend to do better with uppercase
keywords, as they have lower X-heights than Courier.

Andrew Myers (andru@lcs.mit.edu) had a filter that allowed you to skip
semicolons and use lower case types. I suggest you get a copy of his
filter. 

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


======================================================================= 104 ===
Date:    Fri, 28 Oct 1994 17:27:56 GMT
From:    bil@burka (Igor Belchinskiy)
Subject: Re: Why C is not my favorite language

Phil Jensen (pjensen@csi.compuserve.com) wrote:
: I can't resist this shot - a message just came through
: comp.os.linux.development providing a bug fix, namely changing
:   if (compare[0] = 0)
: to
:   if (compare[0] == 0)

I can't resist either.
Of course, any native C programmer wouldn't have hesitated to write

   if (!*compare)


Now, talking about Modula-3, can anyone explain why it uses so
many so long keywords (PROCEDURE is particularly frequent and
irritatiing) and why are all of them shouting in capitals?
This is not a flame, I really don't understand why a very nice,
clean and expressive language inherited ugly syntax manners
of Fortran and PL/I times.

--
Igor Belchinskiy   bil@sdsp.mc.xerox.com         Requiescat in Peace



======================================================================= 105 ===
Date:    Thu, 27 Oct 1994 13:25:07 +0000
From:    kevlin@wslint.demon.co.uk (Kevlin Henney)
Subject: GC and threads

Hi, can anyone tell me what garbage collection strategy is used by the
standard implementation of M3, and in particular how the problems of
GC in the presence of multiple threads are handled w/o stopping the world?

Thanks in advance.

+---------------------------+-------------------------------------------+
| Kevlin A P Henney         | Human vs Machine Intelligence:            |
| kevlin@wslint.demon.co.uk | Humans can wreck a nice beach more easily |
| Westinghouse Systems Ltd  |                                           |
+---------------------------+-------------------------------------------+


======================================================================= 106 ===
Date:    29 Oct 1994 09:12:53 -0700
From:    omalley@porte-de-st-ouen.ics.uci.edu (T. Owen O'Malley)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

>In article <1994Oct28.172756.1562@news.wrc.xerox.com> bil@burka (Igor Belchins
kiy) writes:

>   Now, talking about Modula-3, can anyone explain why it uses so many
>   so long keywords (PROCEDURE is particularly frequent and
>   irritatiing) and why are all of them shouting in capitals?

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.

  Owen

Department of ICS  | omalley@ics.uci.edu                 (ARPA)
UC Irvine          | http://www.ics.uci.edu/~omalley/    (WWW)
Irvine, CA 92717   | ucbvax!ucivax!omalley               (UUCP)



======================================================================= 107 ===
Date:    28 Oct 1994 19:41:14 -0400
From:    dwarren@alpha.netusa.net (Douglas Warren)
Subject: Problem with Linux and SRI 3-3.3

I am having problems installing the linux version of the SRI Modula-3
release.  I untar it and add the variables to my environment as specified,
and I move my files into a directory called LINUX then issue a m3build.
However when  I attempt to run m3build I get the following errors:
m3 -w1 -why -g -o dbase -T.M3IMPTAB ../LINUX/Queue.i3 ../LINUX/Queue.m3 
../LINUX/List.i3 ../LINUX/List.m3 ../LINUX/Order.i3 ../LINUX/Order.m3 
../LINUX/Customer.i3 ../LINUX/Customer.m3 ../LINUX/Dbase.m3
new source -> compiling ../LINUX/Queue.i3
c"../LINUX/Queue.i3", line 2: unable to find interface (RTHooks)
"../LINUX/Queue.i3", line 2: imported object is not an interface (RTHooks)
2 errors encountered
new source -> compiling ../LINUX/List.i3
"../LINUX/List.i3", line 2: unable to find interface (RTHooks)
"../LINUX/List.i3", line 2: imported object is not an interface (RTHooks)
2 errors encountered

What am I doing wrong?


======================================================================= 108 ===
Date:    Sun, 30 Oct 94 08:50:52 PST
From:    vinall@VNET.IBM.COM (Paige Vinall)
Subject: Re: Why C is not my favorite language

In <1994Oct28.172756.1562@news.wrc.xerox.com> Igor Belchinskiy writes:
>Now, talking about Modula-3, can anyone explain why it uses so
>many so long keywords (PROCEDURE is particularly frequent and
>irritatiing) and why are all of them shouting in capitals?
>This is not a flame, I really don't understand why a very nice,
>clean and expressive language inherited ugly syntax manners
>of Fortran and PL/I times.

It wasn't inherited from PL/I.  PL/I has had keyword abbreviations
from the start.  Lower casing of keywords was supported as soon as the
hardware made it practical (c. 1970).


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


======================================================================= 109 ===
Date:    Tue, 25 Oct 1994 09:49:22 GMT
From:    ljp@my21.sm.luth.se (Johan Persson)
Subject: Trouble compiling 'stubgen' (linker overflow)

Before I start working on this problem has anybody else
solved it?

System: Sparc, SunOS 4.1.2

I've built and installed almost the whole m3-system
with one exception, the 'stubgen' program. When I try
to compile it I get the following error

	 -> linking stubgen
	ld: GLOBAL_OFFSET_TABLE overflown: need to use -PIC

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


So I then try to use the larger offset table size by giving
the -PIC option to the compiler with -X1@-PIC@, but it still
want work.

Anybody got an idea ?

/Johan


======================================================================= 110 ===
Date:    Mon, 31 Oct 1994 09:12:05 GMT
From:    "Jurriaan W Kalkman" <S8908575@mail.student.utwente.nl>
Subject: M3PC - error in pipe.i3

So I got the M3 PC-pack, freed enough space to install it, deleted about 
everything from my config.sys & autoexec.bat - and then tried to do 
something. The only documented test is recompilation of the system, so I 
tried that. It did something - first a lot of files were the same, 
according to a routine named cp, then it got compiling. It stopped at 
pipe.i3, with a nasty error: possible dereferencing of NIL0 pointer.
I had gotten the EX32.EXE update & the complete package from 
ftp-i3.informatik.rwth-aachen.de.

Did I do something wrong? Is my configuration incapable of this? (386/40,
387,8 Mb ram, 150+ Mb free on harddisk).

Anyone who knows - please let me know too!

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


======================================================================= 111 ===
Date:    31 Oct 1994 17:09:59 GMT
From:    stephan@xaa.stack.urc.tue.nl (Stephan Eggermont)
Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language)

Farshad Nayeri (nayeri@gte.com) wrote:
: I think part of the problem has to do with the typeface that you are
: using. Faces such as Computer Modern Typewriter (via TeX), Lucida
: Typewriter, or Monaco TrueType tend to do better with uppercase
: keywords, as they have lower X-heights than Courier.

If you are using TeX, you should know better than to use cmtt for program
code. TeX, the program looks okay, and it doesn't use ugly uppercase keywords.
Uppercase keywords are a user interface bug.

Stephan


======================================================================= 112 ===
Date:    31 Oct 94 22:37:51 -0800
From:    papayd@gtewd.mtv.gtegsc.com (David Papay)
Subject: FAQ wanted

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! |


