======================================================================= 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 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@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@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 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 , 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 ======================================================================= 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@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 ======================================================================= 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 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@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 ======================================================================= 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@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 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 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 { ... 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 { ShiftEscape 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 , Byron Weber Becker 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 ======================================================================= 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 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 ======================================================================= 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 Subject: Re: How to grab invocation params??? > In article > 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 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 , > Byron Weber Becker 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>, 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 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 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>, 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 , > > Byron Weber Becker 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 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 , Michel Dagenais 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 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" 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) | ^/--- | dpapay@aol.com (alternate) | /> | | | | fleche! |