======================================================================= 1 === Date: Tue, 1 Nov 1994 17:18:57 GMT From: "Jurriaan W Kalkman" Subject: Re: FAQ wanted On 31 Oct 94 22:37:51 -0800, David Papay wrote: >Could someone either email me the FAQ for this group or tell me where I can >FTP it? Thanks. > >-- > | | >David Papay | o | >papay@acm.org (preferred) | ^/--- | >dpapay@aol.com (alternate) | /> | > | | > | fleche! | > Searched with Gopher yet? Jurriaan Kalkman S8908575@student.utwente.nl tel. 074-437002 (GMT) - I Like Robinia's ======================================================================= 2 === Date: Tue, 1 Nov 1994 16:06:39 GMT From: george@bcstec.ca.boeing.com (Harry G. George) Subject: Commercialization of Modula-3 ----------------------- DISCLAIMER: This is not an official Boeing position. However, I believe this is in the best interests of the manufacturing sector in general and thus Boeing. (The Boeing Company may of course disagree.) Manufacturing companies are not in the business of designing languages, developing compilers, or writing software. We would like to just buy COTS products, but we know there are times when we must roll our own software or at least interface with COTS products. So we end up using (and being frustrated by) quite a few languages and compilers. We even find ourselves informally explaining our needs to potential vendors, in hopes the market will provide the kinds of tools we really need. That is the point of this note -- it is NOT an RFI, RFQ, RFP, or official query of any sort. Nor should it be used in marketing literature as "Boeing wants...". This is just one analyst's attempt to coax potential vendors to bring a set of services to market. No promises, no commitments. ----------------------- Situation: US firms have lots of COBOL business code, lots of Fortran scientific and engineering code, a dash of Ada embedded code, lots of C UNIX code, and a sprinkling of others. The great rush of the 1990's is to convert everything to C++. But after a few years of trying, we are getting a glimmer of trouble, so the next rush is to use Smalltalk. Personally, I don't think any of those languages is maintainable or supportive of reuse in a mixed language, COTS-dominated, megaprogramming context. Technically, Modula-3 looks like the best candidate for such a task. It has all the key features, yet remains elegantly simple. Unfortunately, it is just a research tool so far. To be taken seriously as a supplement or replacement for COBOL, Fortran, C, C++, Smalltalk, or Ada, it must have more. Target: 1. Technical Ability to use C as "main", and link in M3 modules. Ability to auto-translate C ".h" files to M3 ".i3" files. (hand-tweaking may be acceptable, but the bulk must be auto) An on-going coordinated effort to make ".i3" files for C and C++ packages as they appear. An on-going coordinated effort to port to new UNIX and PC boxes as they appear. Simple binary installation package for MS Windows 95 and NT (available on-line, on CD-ROM, and on 3.5" diskettes) Simple installation for most UNIX boxes (assume on-line access) 2. Social/Commercial Second source for compiler and environment (even if someone just redistributes DEC's code) Second implementation of compiler and environment (to assure some protection from DEC redirections) Email and phone support for installation Training support, on-site Email and phone support for helpline Contract consulting support for major projects Market penetration on MS Windows 95 and NT (e.g., 10% of those who currently use C++) Awareness in academe (e.g., speakers refer to it at OOPSLA '95; reviewed articles on language semantics or reuse studies begin to appear) Plan: 1. Penetrate the MS Windows market From the sounds of it, M3-Lite will be good product. Need to get out press releases to standard PC journals. For those without high-speed net access, need source and binaries on 3.5" diskettes (roughly at cost). Maybe bundled with Nelson book, Harbison book (with errata sheet), and printed manual. Then organize a systematic effort to write articles for PC journals about trendy software which just happens to use M3. Device drivers, genetic algorithms, 3D packages, multithreading, Lisp-lists, constraint programming, AST manipulation, etc. Most midnight hackers will see how cleanly M3 handles tough jobs, even if they start by translating to C and C++. 2. Penetrate academe A few hardy souls already use M3 for teaching imperative programming. But for grad students, it probably needs a hook to C++ and Smalltalk. How about an M3-to-C++ translator, which generates idiomatically correct C++ (with comments)? The research issue is how to recognize and translate idioms; the payoff is that one can use M3 as a high-level code generator, and then maintain the output if need be. [We are not talking C-as-portable-assembler here.] Similarly, translators to each of the other legacy languages could be attempted. The attempts would of course identify M3 language features which could not be handled in the target language -- thus demonstrating how crippled they are. Also, how about M3 for embedded systems? Investigate hard realtime garbage collection, multithreading, and exceptions. ESPECIALLY investigate impact of using a safe language to do safety critical systems. 3. Establish regional consulting Make contact with an established independent consultant in each region. He/she (hereafter "he") becomes enthused about M3 as a language, and even more by the market opportunity in training and after support. He assists installations, provides training seminars, does talks to local computing societies, and does constract consulting. As needed, he contacts others on the net who have expressed willingness to help for free or for fee. The purpose is not to destroy the informal contacts and help among user groups. The purpose is instead to provide a commercial contact, so that a hard-boiled, no-nonsense non-techie business person (hereafter "she") can sign a support contract. She may be vaguely aware that M3 is the greatest thing since sliced bread, but she sure as h### does not want to get stuck with an orphan language -- dependent on volunteers somewhere in cyberspace. 4. I get to recommend it Given all the above, I'll be able to go to my management and say, "I think our best bet is to use this Modula-3 code generator. It generates commented C++, but you can also get native code compilers for PC's and UNIX boxes. Maybe you have seen some of the articles about it in Byte and Dr. Dobbs. It has good second sourcing and there are consulting services available. I suggest we use it for the XYZ project. We can always back out to using C++ if it doesn't pan out." --------------------- Ok, folks: Who's in charge here, anyway? Is this already in the works, and I just didn't hear? Thanks, email to: george@garden.ca.boeing.com -- Disclaimer: Any opinions expressed herein are my own and not those of The Boeing Company. Contact: Harry George, BCAG Advanced Software Technology Phone: (206) 237-6915 Org: 6-6541 M-S: 6H-WT ======================================================================= 3 === Date: 1 Nov 1994 13:24 EST From: w_costa@unhn.unh.edu (Bill Costa - UNH Computing & Information Srvs) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) In article <38tsa5$8p1@porte-de-st-ouen.ics.uci.edu>, omalley@porte-de-st-ouen.ics.uci.edu (T. Owen O'Malley) writes... >There is an emacs mode that automatically upcases the reserved words >as you type them (and can do completion on them). With emacs and that >mode, it isn't really a problem to type, just ugly to read. Ugly? You wanna talk ugly? C has got to be one of the ugliest languages ever created. C programs look like they were transmitted over a noisy phone line with all those !=&&|* characters and such. Ugh! And it's part of the mind set, I swear. Just a few weeks ago, there where a couple of C hacks on some list competing to see who could code some math function in the ugliest fashion as possible. And believe me, it got pretty ugly! ;-) I have a basic problem with languages and systems which tend to foster this kind of culture. I'm sure you've seen it yourself -- where self proclaimed `experts' in some programming language, editor, or scripting language, go around showing each other pieces of code saying "Guess what this does!". Making code hard to read and understand is not what good software engineering is about. Now I happen to like the uppercase keyword style and that's what I use when the language gives me a choice. Having said that, however, I *do* object to Modula, or any language for that matter, forcing a certain character case convention for keywords or identifiers. So that applies equally to C with its insisting on lowercase `if', `else', etc. I think all of the code, both keywords and identifiers should be case neutral. This would mean that "Foo" and "foo" are *not* different variables. There's a mis-feature if there ever was one! A feature loved only by those who hate to type or are too unimaginative to come up with good identifier names. (Hmmm, what's another variable name for "filename". I know, I'll call it "Filename"! And I'll call the third variable "FileName"! This is neat! Now I got three vars for the price of one!) The programmer should be allowed to code in the style s/he sees fit (text casing, indenting, etc.). If you don't like the style somebody else used on a program you have to work on, pour it through a filter that makes it look the way you like, and thus easier to read for *you*. Either way, the compiler shouldn't care a bit. Later....BC PS: Sorry, guess you touched a nerve there. ## ## ## ## +----------------------------[ Bill.Costa@UNH.EDU ]---+ ## ### ## ## | Bill Costa | ## #### ## ## | Computing & Information Srvs | ## ## ## ######## | Kingsbury Hall PHONE: +1-603-862-3056 | ## ## #### ## | University of New Hampshire FAX: +1-603-862-4778 | ## ## ### ## | Durham, NH 03824-3591 | ####### ## ## +----------------[ No good deed goes un-punished. ]---+ ======================================================================= 4 === Date: 02 Nov 1994 10:26:47 GMT From: bevan@cs.man.ac.uk (Stephen J Bevan) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) In article <1NOV199413240516@unhn.unh.edu> w_costa@unhn.unh.edu (Bill Costa - U NH Computing & Information Srvs) writes: ... I think all of the code, both keywords and identifiers should be case neutral. This would mean that "Foo" and "foo" are *not* different variables. There's a mis-feature if there ever was one! Just as some people feel that allowing "Foo" and "foo" to be different is perverse, others think that that anyone declaring a variable as "Foo" and then using it as "foo" is also being perverse. That is, both styles can be abused. ======================================================================= 5 === Date: 02 Nov 1994 09:59:54 GMT From: bevan@cs.man.ac.uk (Stephen J Bevan) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) In article rodney@bcsaic.boeing.com (Rodney M. B ates) writes: ... (Algol 60's "publication language" bold face keywords were easy to read _and_ looked good as well.) Some people thought it looked ugly. Just goes to show you can't please all the people all the time. ... I like the all caps style well enough that I have started using if for keywords in Ada too, ... Which as you probably know is the opposite convention to some Ada style guides. In those the variables are in upper case, the keywords are in lower case. The reasoning being that it is the variables/data that is the important part of the program not the keywords. [Ledgard:Tauer:pspp:1987] has a good discussion of these topics (not that I necessarily agree with their views though :-) @book { Ledgard:Tauer:pspp:1987 , author= "Henry Ledgard and John Tauer" , title= "Professional Software -- Programming Practice" , publisher= "Addison Wesley" , year= "1987" , cost= "\pounds 20" , reffrom= Keller:acm:sigplan:1990 } ======================================================================= 6 === Date: Tue, 1 Nov 1994 20:19:36 GMT From: rodney@bcsaic.boeing.com (Rodney M. Bates) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) It may just be personal taste, but, after using Modula-2 quite a bit and Modula-3 a little, I have come to believe that uppercase keywords make code significantly easier to read. I didn't like them at first, and I still think they are a bit peculiar looking, esthetically, but they make it a lot easier to quickly scan code for relevant things. (Algol 60's "publication language" bold face keywords were easy to read _and_ looked good as well.) I like the all caps style well enough that I have started using if for keywords in Ada too, where I can choose whatever case I want. (Ada is case-insensitive, both for keywords and identifiers.) One thing I can't imagine ever tolerating is having to manually type them all that way in the first place. I convert them mechanically to uppercase. There are various ways to do this. Of course to do this, you have to give up using lowercase keyword homonyms as ordinary indentifiers. This causes me no sorrow at all, as I would find such a practice to be a major readability hit and would consider it bad style. How well I remember how it was touted as a feature of PL/1 that keywords could also be used as indentifiers too (without even any case difference--syntax was used to disamgibiguate!) You could legally write: IF IF THEN THEN; ELSE ELSE; I may not have the syntax exactly right. I can't remember whether it was the IF or WHILE whose boolean condition had to be in parentheses. It was one or the other, not both. Probably you didn't even have to declare IF, THEN, or ELSE! The rationale was that you could use a subset of the language and not even have to know the keywords that weren't in your subset. Rodney Bates bates@salsv3.boeing.com ======================================================================= 7 === Date: Wed, 2 Nov 1994 15:11:22 GMT From: n8243274@henson.cc.wwu.edu (S. Lee ODEGARD) Subject: Re: Commercialization of Modula-3 comment: A well thought out ten-year plan. If it pans out, I'll return to the profession (ahead of the loop for once). To help with the first phase of demonstrating the system, I hope to publish over the net a set of example programs that systematically illustrate all of the features of M3. Please contact me with any proposals or example programs you may have. Document your code with ASCII text files -- not pretty, but the primary objective here is to get as many people as possible looking at M3. --SLO n8243274@henson.cc.wwu.edu ======================================================================= 8 === Date: Wed, 2 Nov 1994 08:12:48 -0800 From: patl@asimov.lashley.slip.netcom.com Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) |> In article rodney@bcsaic.boeing.com (Rodney M. Bates) writes: |> ... (Algol 60's |> "publication language" bold face keywords were easy to read |> _and_ looked good as well.) |> |> Some people thought it looked ugly. Just goes to show you can't |> please all the people all the time. You also have to remember that Algol 60 was popular when it was somewhat rare to even find a printer that handled lower-case. Italic, bold, and a wide range of font sizes and styles were unheard of outside of publishing offices; and that equipmentment wasn't computerized. All caps was the poor-man's boldface... Personally, I don't really care for the look of the all-caps keywords; but that is a minor complaint. What I really dislike is -typing- upper-case keywords. Yes, I know that emacs and some other editors have modes that will make it easier; but that not only forces me to use those editors, but also to use those modes. I will confess to being a big emacs fan; but the paradigms chosen by the electric-language modes don't always match well with the way I prefer to transfer my thoughts to the computer. And in emacs I'd much rather have the keywords in lower case and some distinctive color - just like the keywords in other languages I'm working with. Furthermore, over 20 years of systems-level programming in a wide variety of languages and environments has led me to the belief that case sensitivity is nearly as evil as not having to declare variables. Yes, declaring 'Foo' and using 'foo' is bad. So you make the compiler generate a 'non-standard capitalization' warning. Removing case-sensitivity from keywords then allows a much greater degree of flexibility when formatting for print or display. I think that boldface, italic/slant, and changes in typeface (e.g. sans-serif -vs- serif) are much prettier, more effective, and easier to balance against representations of other distinctive syntatic or semantic elements. (comments, literal strings, etc.) -Pat ======================================================================= 9 === Date: 2 Nov 94 11:05:34 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: Commercialization of Modula-3 In article george@bcstec.ca.boeing.com (Harry G. George) writes: Ok, I will bite to this. 1. Technical Ability to use C as "main", and link in M3 modules. You can already call C and C++ from M3. You simply have to rename the current main generated by M3 to something else and call it from your C main. Fairly easy to do. Ability to auto-translate C ".h" files to M3 ".i3" files. (hand-tweaking may be acceptable, but the bulk must be auto) Not so easy. Some tools that generate IDL or ADA from .h files could be modified to do so. In any case, it takes a few minutes per .h file with a good editor and "global-replace". An on-going coordinated effort to make ".i3" files for C and C++ packages as they appear. No need to do it if no one is using a package. There are already a lot of useful M3 packages and a few important C packages with .i3 front ends. An on-going coordinated effort to port to new UNIX and PC boxes as they appear. Well, a port is relatively simple (given the size and extent of SRC M3). Volunteers have ported it (or are in the progress of doing so) for almost all major platforms. Simple binary installation package for MS Windows 95 and NT (available on-line, on CD-ROM, and on 3.5" diskettes) M3-lite should do it. I am quite sure someone will put it on one of the numerous CD-ROMs now available. Simple installation for most UNIX boxes (assume on-line access) Pre-compiled binaries are available at my site for many platforms. 2. Social/Commercial Second source for compiler and environment (even if someone just redistributes DEC's code) Second implementation of compiler and environment (to assure some protection from DEC redirections) Given the liberal DEC copyright, there is little motivation to waste efforts on a reimplementation. Furthermore, a single compiler insures portability. Email and phone support for installation Training support, on-site Email and phone support for helpline Contract consulting support for major projects A number of people will certainly be willing to offer such services when there is demand. Plan: 1. Penetrate the MS Windows market From the sounds of it, M3-Lite will be good product. Need to get out press releases to standard PC journals. For those without high-speed net access, need source and binaries on 3.5" diskettes (roughly at cost). Maybe bundled with Nelson book, Harbison book (with errata sheet), and printed manual. First M3-lite has to come out and mature. 2. Penetrate academe A few hardy souls already use M3 for teaching imperative programming. But for grad students, it probably needs a hook to C++ and Smalltalk. How about an M3-to-C++ translator, which generates idiomatically correct C++ (with comments)? The research issue is how to recognize and translate idioms; the payoff is that one can use M3 as a high-level code generator, and then maintain the output if need be. [We are not talking C-as-portable-assembler here.] Converting M3 to C++ could be an interesting non trivial project. Of course you need all the M3 run time for GC, threads... 3. Establish regional consulting Make contact with an established independent consultant in each region. He/she (hereafter "he") becomes enthused about M3 as a language, and even more by the market opportunity in training and after support. He assists installations, provides training seminars, does talks to local computing societies, and does constract consulting. As needed, he Good idea but you need people willing to invest in the medium to long term. 4. I get to recommend it Given all the above, I'll be able to go to my management and say, "I think our best bet is to use this Modula-3 code generator. It generates commented C++, but you can also get native code compilers for PC's and UNIX boxes. I agree with most of the points you have made. However, unless you find a company willing to invest 5M$ into a M3 integrated development environment, C++ converter and lots of publicity, you have to live with the current situation where most of the work is done by researchers and volunteers. Of course a large company (e.g. Boeing, ATT...) may save more than that simply by using a cleaner language than C++. There is already an excellent language with outstanding libraries and tools but there are still things on the TODO list. These must be sorted by priority and worked out by available resources. Here is what I believe can be done immediately towards the points you mentioned. People working on ports should be mentioned in the FAQ such that others can contact them and help. People willing to offer commercial training and support should also be mentioned in the FAQ. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 10 === Date: 2 Nov 94 08:26:30 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: FAQ wanted The FAQs are always available on rtfm.mit.edu for FTP. They are also available on Gopher and in the newsgroup news.answers on most news sites. The Modula-3 FAQ is available also from ftp.vlsi.polymtl.ca:pub/m3. Time for sending the November FAQ soon... -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 11 === Date: 2 Nov 94 11:18:23 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Info for FAQ requested: Porting M3? Offering training? We hear from time to time about people willing to work on ports. I would like to put in the FAQ the name of a contact person for each port in progress (FreeBSD, OS/2, Macintosh...) such that others who want to help can contact them. A short status report updated from time to time would be nice too. It is sometimes mentioned that there is almost no commercial support for M3. I would like to include a section on commercial support in the FAQ. Putting your name there means that you "may" accept M3 training or support contracts or could contact people who would. It is not a commitment to start a company just for that purpose or do it on more than a part time basis; it may just be offering these services for a while until the demand gets strong enough for other companies to jump in. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 12 === Date: 2 Nov 1994 22:38:08 GMT From: norman@flaubert.bellcore.com (Norman Ramsey) Subject: Re: Problem with Linux and SRI 3-3.3 In article <38s26q$c96@alpha.netusa.net>, Douglas Warren wrote: >"../LINUX/Queue.i3", line 2: unable to find interface (RTHooks) > >What am I doing wrong? Sounds like you might have forgotten import("libm3") in your m3makefile. Norman ======================================================================= 13 === Date: 03 Nov 1994 08:57:14 GMT From: jch@garfield.isode.com (John Haxby) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) In article rodney@bcsaic.boeing.com (Rodney M. B ates) writes: How well I remember how it was touted as a feature of PL/1 that keywords could also be used as indentifiers too (without even any case difference--syntax was used to disamgibiguate!) You could legally write: IF IF THEN THEN; ELSE ELSE; While we're on the subject of other languages, and, perhaps to swing back around to Modula 3 a bit, Algol68 defines several `stropping' conventions for its keywords. One can have upper case stropping, eg WHILE random < 10 DO print ((pithy greeting, new line)) OD or quote-stropping (used, for example, for upper-case only machines): 'WHILE' RANDOM < 10 'DO' PRINT ((PITHY GREETING, NEW LINE))'OD' or reservered-word stropping (note that it's case insenstive, I think) While random < 10 do print ((Pithy Greeting, New line)) od and, finally, the preferring option, point stropping: .while random < 10 .do print ((pithy greeting, newline)) .od One side effect of choosing a different alphabet (in the Report's terms) for keywords is that identifiers can have spaces in them, so the procedure names that appear in the print collateral have optional spaces in them; there are probably restrictions on reserved-word stropping. Anyway, the upshot of all this is that some form of type-time stropping can be done by an editor (at least by emacs...) and compile time stopping can be done by some preprocessor, for example, the CLU hackers pre-processor that allows lower case keywords and does away with the need for those nasty semi-colon things. To my mind, these two things are a nice way to go; although there may be problems with distributing source that needs to be pre-processed before it is fed to the normal compiler. -- -- John Haxby J.Haxby@isode.com ISODE Consortium +44 181 332 9091 These are my opinions and have nothing to do with my employer. ======================================================================= 14 === Date: 3 Nov 1994 16:33:35 GMT From: cisitm@albert.cad.cea.fr (Pierre Didierjean) Subject: *** Q: WHAT KIND OF PEOPLE ON THE NET ? I'd like to know what kind of people i find on the net. Students, Commercials, Adminitrations, Scientifics or what ?? Is anybody knows that or have statistical results ? What are YOU doing in life ? I am a system administrator. Thanks for the answers and sorry for my english ..... Bye +-----------------------------------------------------------------------------+ | Pierre DIDIERJEAN | | | | Administrateur Systeme UNIX | | Cisi, Aix-en-Provence | | France | +-----------------------------------------------------------------------------+ | email : cisitm@albert.cad.cea.fr | +-----------------------------------------------------------------------------+ ======================================================================= 15 === Date: Thu, 3 Nov 1994 15:28:08 GMT From: olaf@logware.de (Olaf Wagner) Subject: Re: Info for FAQ requested: Porting M3? Offering training? Michel Dagenais (dagenais@notung.vlsi.polymtl.ca) wrote: : We hear from time to time about people willing to work on ports. : I would like to put in the FAQ the name of a contact person for each : port in progress (FreeBSD, OS/2, Macintosh...) such that others who : want to help can contact them. A short status report updated from time : to time would be nice too. As for the M3 port to FreeBSD: * All the important things (compiler, libm3, m3build, m3ship) have been ported and are running fine on FreeBSD 1.1.5 * I have compiled almost all of the archives without major problems. * Diffs have been sent to Bill Kalsow, who will integrate them into the next distribution. * Incremental and generational garbage collection seems to work fine at my home site. I hope to complete the work next weekend and send the diffs to SRC. - I've done nothing to support shared libraries yet. Anybody volunteering? I won't be able to spend much time on actual programming during the next months. But I am willing to act as a contact person and/or coordinator for the FreeBSD ports. You can reach me at wagner@luthien.in-berlin.de (private site) olaf@logware.de (work, directly connected to the internet) Please do not overwhelm me with requests for binaries etc. I cannot set up an ftp server here, and at the moment I have no time to put all the things together into a nice and easy-to-install package. For really desperate souls I could just tar some things up. But where should I put them (they're really big)? I hope this will be of help. Olaf -- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ Olaf Wagner at Logware GmbH Schwedenstrasse 9 \ \ olaf@logware.de (work) 13359 Berlin 65 \ \ wagner@luthien.in-berlin.de (private) Germany / Deutschland \ ======================================================================= 16 === Date: Thu, 3 Nov 94 22:14:08 PST From: vinall@VNET.IBM.COM (Paige Vinall) Subject: Re: Uppercase keywords (was: Re: Why C is not my favorite language) In John Haxby writes: >In article rodney@bcsaic.boeing.com (Rodney M. Bates) writes: > > How well I remember how it was touted as a feature of PL/1 that > keywords could also be used as indentifiers too (without even > any case difference--syntax was used to disamgibiguate!) You > could legally write: > > IF IF THEN THEN; ELSE ELSE; Hmm... The syntax is not quite right. How about: IF IF=THEN THEN ELSE=ELSE; ELSE ELSE=THEN; That is a weird example. A more natural example is: dcl value fixed bin(15); /* value is defined as a keyword */ /* but is often also used as a variable */ if value = 5 then display('okay'); There are two real advantages to not having reserved keywords. The first is being able to select natural variable names regardly of keywords. This is a minor advantage. The second advantage is being able to introduce new keywords into the language without breaking existing code. Paige Vinall - PL/I Development Manager, IBM Internet: vinall@vnet.ibm.com, Phone: (408) 463-2106 ======================================================================= 17 === Date: 07 Nov 1994 21:36:25 GMT From: diwan@cs.umass.edu (Amer Diwan) Subject: Looking for benchmarks As part of my thesis research, I am implementing cross-module optimizations for Modula-3 programs. For evaluation purposes, I need a large suite of benchmarks. If you have written Modula-3 programs that you are willing to let me use for benchmarking purposes, please drop me a note. Thanks. Amer -- ------------------------------------------------------------------------------ Amer Diwan Department of Computer Science Object Systems Lab University of Massachusetts diwan@cs.umass.edu Amherst, MA 01003 (413) 545-0256 http://www.cs.umass.edu/~diwan/home.html ======================================================================= 18 === Date: Mon, 7 Nov 1994 20:25:09 GMT From: mef@cs.washington.edu (Marc Fiuczynski) Subject: latest FAQ for m3 please. Just picked up M3 and have a bunch of really low level questions. Could some kind sole point me to the lastest FAQ. I've looked at http://www.research.digital.com/SRC/modula-3/html/faq.html and http://froh.vlsi.polymtl.ca/m3/m3-faq.html but they don't seem to answer some of my questions. Thanks, Marc mef@cs.washington.edu -- /Marc... mef@cs.washington.edu ======================================================================= 19 === Date: 07 Nov 1994 19:10:24 GMT From: connolly@ulua.hal.com (Dan Connolly) Subject: Progress on m3gdb? M3Lite? [If ANYONE sees this post, could you please reply? I suspect that my news software isn't working right, and I'd like to know if my postings make it outside of HaL] Platform: Linux 1.1.45 SRC M3 3.3, binaries from ftp://ftp.vlsi.polymtl.ca/pub/m3/linux/src-m3-3.3l2.strip.tar.gz Oct 24 by Michel Dagenais Combined with lemacs and modula-3-mode.el, this is a nifty development environment. I'm making slow, steady progress developing some WWW libraries. I've got SGML.c and friends from CERN's libWWW ported and integrated with the Wr interface, and Guido VanRossum's Para.py paragraph formatting code ported and working for output to a file. I'm just starting to work on displaying formatted paragraphs in a VBT. But I'm experiencing strange runtime behaviour, and even stranger behaviour from the debugger. My test applications will abort with "Subscript out of range" or "ASSERT failed". Unfortunately, the core file produced is worthless -- the stack seems to be unwound or corrupted before the core is written out. In any case, I can't get a stack trace from an aborted M3 program. So I try to reproduce the problem under m3gdb. The first wierdness is: > br Foo.Bar No such symbol "Foo" breakpoint at Foo.m3 ... so I get an error message every time I set a breakpoint. The breakpoints do work, however. And I can single-step through a program. But sometimes stepping over a RAISE statement causes the program to abort with "ASSERT failed" or something (sorry, exact details aren't handy). And the debugger can't print objects, TEXTs, or anything else except INTEGERs and simple RECORDs. It gets confused a lot and quits with SIGSEGV when I print some values. There are some release notes for m3gdb that say it's not complete. Has there been any progress since the (4.11--linux) version that I'm using? I have been able to find some errors by painfully single-stepping to the point of the problem, but I'd like to just let the program run until the checked runtime error occurs, and see the backtrace. Unfortunately, the M3 runtime and m3gdb don't seem to allow me to do this. If I let the program run to a checked runtime error and ask for a stacktrace, I get a useless stacktrace that looks something like: _main() _end() I've looked at the M3 runtime code in libm3, and there's a LOT of stuff to print exception traces and thread info when problems occur. I'd like to see this debugging support moved out of the M3 runtime and into the debugger. By the way... I've seen several references to "M3LITE". What is this? Is this an attempt to strip down the M3 runtime to the minimum? Is it just targeted at MSWindows, or will Linux and other Unix flavors be supported? I wonder how much stuff in the current M3 executables can be removed, and how much actually has to stay in there. For example, I think reading a Pickle can refer to a procedure by name. This would seem to imply that the names of all procedures are available at runtime. Is this true? Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 20 === Date: Tue, 8 Nov 1994 04:19:20 GMT From: mef@cs.washington.edu (Marc Fiuczynski) Subject: typesafe C -> M3 calls. Newsgroups: comp.lang.m3 Subject: typesafe C -> M3 calls. Summary: Followup-To: Distribution: world Organization: Computer Science & Engineering, U. of Washington, Seattle Keywords: 1) All questions relate to the latest version of SRC M3 on the ALPHA. 2) I'm new to M3. I have a need to call functions in a M3 modules from a trusted (read typesafe) C program. For example, I have a M3 queue module with push, pop, and isempty, how can I call these from C? Looking at the assm code produced by M3 I noticed that it uses some sort of vtable (M3__I_interfacename) through which calls to a M3 function go. How is this vtable initialized? Is it the order of the exported function in the .i3 file? I understand that vtables are necessary for opaque stuff and to override an object method. But why is this vtable necessary in the first place? Also, what would be lost if the M3 compiler would make a module's functions global (still name mangled), thus allowing other M3 modules to access the functions directly instead of going through the vtable? Thanks, Marc -- /Marc... mef@cs.washington.edu ======================================================================= 21 === Date: 8 Nov 1994 15:09:44 GMT From: schaub@ponder.csci.unt.edu (Stephen Schaub) Subject: Re: Progress on m3gdb? M3Lite? I'd like to echo Dan's request for info on updates to m3gdb. Also, has anyone done any work on a shell for m3gdb, similar to what emacs provides in debugging mode, but separate from emacs? I'd like to teach some beginner-level programming using m3, but want a simple, easy-to-use debugging system, which m3gdb by itself doesn't provide, and emacs does with overkill. I've been toying with the idea of writing one myself in m3, using curses (is there a curses module interface for SRC m3?) but don't want to reinvent the wheel if it's already been done. Stephen Schaub ======================================================================= 22 === Date: Tue, 8 Nov 1994 19:48:40 GMT From: shebs@cygnus.com (Stan Shebs) Subject: Re: Progress on m3gdb? M3Lite? In article <39o4bo$rqi@hermes.unt.edu> schaub@ponder.csci.unt.edu (Stephen Scha ub) writes: I'd like to echo Dan's request for info on updates to m3gdb. Also, has anyone done any work on a shell for m3gdb, similar to what emacs provides in debugging mode, but separate from emacs? I'd like to teach some beginner-level programming using m3, but want a simple, easy-to-use debugging system, which m3gdb by itself doesn't provide, and emacs does with overkill. I've been toying with the idea of writing one myself in m3, using curses (is there a curses module interface for SRC m3?) but don't want to reinvent the wheel if it's already been done. Cygnus is adding a tcl/tk-based graphical interface to GDB, and it will become available in the next few months (it may or may not be part of the FSF version, but we *will* ensure its free availability!). Unfortunately for m3gdb, the interface requires totally up-to-date GDB sources, so somebody would have to upgrade the M3 part. IMHO it would be worthwhile; you'll be able to click on variables to display them, step through asm or source displays, have register and stack trace windows auto-update, etc. Stan Shebs Cygnus Support shebs@cygnus.com ======================================================================= 23 === Date: Wed, 9 Nov 1994 00:28:39 GMT From: faegri@dcs.glasgow.ac.uk (Tor Erlend Faegri) Subject: Passing options to m3build(1) Unable to find any explanation in the FAQ or in the README files, I turn to the group for help ... After having installed most of the software supplied with release 3.3 of the SRC compiler, I came across the following problem when I tried to install the network object library (netobj). After starting up m3build(1) as usual in the ../netobj/stubgen directory, it said: ... ... ln -s stubgen stubgenv1 m3 -w1 -why -g -o stubgen -F/usr/tmp/qkAAAa02272 -> linking stubgen ld: GLOBAL_OFFSET_TABLE overflown: need to use -PIC Fatal Error: program "/bin/cc" failed, exit status = 1024 *** error code 1 (ignored) hawaii:/local/modula3.new/netobj/stubgen> ... ... According to the html-helpfile for m3build(1), adding the line m3_option("-X2@-PIC@") to ../stubgen/src/m3makefile should do the trick, but I still get the same error message. Any hints? (I also tried "-X1@-PIC@" and "-X5@-PIC", where the first gave the same error, and the latter gave "unrecognized option ..."). The platform I'm building for is Sun SPARC, running SunOS 4.1.3. --- Tor E. Faegri (e-mail: faegri@dcs.gla.ac.uk) ======================================================================= 24 === Date: Wed, 09 Nov 94 16:25:00 GMT From: sjk2@ukc.ac.uk (Sair) Subject: HELP WANTED Is there anywhere on the net that i can get hold of a copy of a Modula-3 compiler and linker for linux?????\ I've tried various people and have had no luck.. Any of you lot have any ideas? If you mail me, mail me at 'heb1@ukc.ac.uk' NOT at the above address cheers me-dears Claire the Spicy Chicken Woman.... ======================================================================= 25 === Date: Wed, 9 Nov 1994 15:09:04 GMT From: mychng@cayley.uwaterloo.ca (Ch'ng Mei Yen) Subject: Is Modula-3 popular? I am just wondering if Modula-3 is a popular language. I know that many people know C and C++ but when you say Modula-3 , the usual response is "What ?" Or is it not used in commercially, and only used for educational purposes?> Please mail me directly. -- Mei Y., Ch'ng Village 1, N2 -316, U of W Tel: 725-7055 *************************************************************************** Quote For The Day "When it is working logically, it is probably not working practically." ======================================================================= 26 === Date: 09 Nov 1994 19:09:46 GMT From: connolly@ulua.hal.com (Dan Connolly) Subject: Re: Multithreading In article edwards@world.std.com (Jonathan Edwards) writes: Is there a Lisp or Smalltalk that does REAL multithreading? Not cooperative multiprocessing, but real OS-kernel pre-emptive threads. This means threads can run on multiple processors in an SMP, and taking a virtual memory fault in one thread does not block others. How does GC interact with threads? I am afraid I am doomed to C++ unless I can find this. Forgive me. As another poster said, the C++ language has no features to support multithreaded programming, but as it is one of the more widely supported languages, vendors of multiprocessing systems are likely to support some sort of multithreaded runtime for C++. I don't know of any such runtime systems. You might contrast this with vendor-supplied re-entrant (i.e. threadsafe) libc implementations available on AIX, and I think HPUX and Solaris. I spent about a year doing DCE software development, and the DCE programming system includes RPC and threads. The threads API is pretty close to (based on?) the POSIX pthreads interface. The DCE runtime also includes a primitive sort of garbage collection where malloc()ed memory can be associated with a thread so that it is reclaimed when the thread terminates. The implementation of the DCE/pthreads interface varies from system to system: on SunOS, threads are implemented without kernel support, using the SIGVTALARM to preempt the running thread. The DCE runtime also had all the system call wrappers to export the normal ANSI/POSIX libc behaviour for each thread -- they set all the file-descriptors to non-blocking and handle EINTR from read() system calls under the covers; they maintain a separate errno for each thread and all that nastiness. Even though AIX (and HPUX, I believe) have kernel thread support, the DCE runtime doesn't use them. Clearly, this VTALARM technique would not exploit the presence of multiple processors. On Solaris, kernel threads -- well, "lightweight processes" -- are used, but they are not mapped 1-1 to pthreads(), as the cost of a LWP synchronization or context switch is too expensive in typical DCE applications, which may have 50 or so threads. So a mixture of the SIGVTALARM and kernel threads is used. Hence I expect DCE apps would exploit multi-proceossor Solaris systems. I understand that kernel threads are exploited under OS/2 also, though I got that info second-hand. I would expect DCE apps to take advantage of multi-processor Windows-NT systems. As to lisp or smalltalk implementations, I expect there are several that implement preemptive threading using the VTALARM technique, for example, the scheme48 VM supports threads and the other pthreads-style abstractions: mutexes, condition vars: Scheme 48 home page http://www-swiss.ai.mit.edu/~jar/s48.html The scheme48 garbage collector in the the 0.36 release that I looked at was a simple stop-and-copy colloctor, so the threads interaction was pretty simple. I understand that incremental/generational/virtual-memory-synchronized GC for the scheme48 VB is under active development. It's also not clear to me how the scheme48 I/O system interacts with threads. As I recall, some of the ML implementations support threads using this same technique. But for a mature alternative to C++ for multi-threaded applications, I suggest you investigate Modula-3. It has a well-specified threads interface designed in cooperation with I/O interfaces. There are also networking and GUI interfaces designed on top of this thread interface. Modula-3 also includes garbage collection, runtime typing, and other handy high-level language features. Plus, the language definition passes the "50-page test." See: Modula-3 home page http://www.research.digital.com/SRC/modula-3/html/home.html Platform support is growing. Threads are preemptive on all platforms (except for some crippled ports to MS-DOS) using the VTALARM technique. The I/O interfaces use non-blocking file descriptors and select() to support the illusion of kernel thread support. On SPARC and DEC Alpha (as I recall), the garbage collector is generational, incremental, and synchronized with the virtual memory system using mprotect(). On Linux and the other unix platforms, the GC is stop-and-copy. I'm working on removing this limitation from the Linux port. It's just tedious, and I expect the other platforms will be similarly supported before long. There is also a nifty GUI library -- first, an libX11 interface, then an interface called Trestle() on top of that, then the VBT toolkit which provides functionality similar to Interviews, then FormsVBT on top of that, which allows you to interactively edit S-expression representations of user interfaces, and use them in applications. FormsVBT is supported on all the Unix/X platforms, and I understand a port to Windows95 and NT is underway. The bottom line is that it is practical to build large, multi-platform, networked, multi-threaded, graphical applications in Modula-3 today. The platform support has not really reached critical-mass yet, but when the M3 ports to Windows95 and NT stabilize, I think we will witness a tremendous growth in M3 usage. I seriously believe that C++ fails to support the kind of complexity management necessary to build modern distributed, multiplatform applications, and that M3 succeeds. While you may see various C++ libraries to support various multi-processor systems, I doubt you will see a C++ API that matches the precision and portability of the M3 Thread, Rd, Wr, and VBT interfaces. Disclaimer: There are other alternatives that I am less familiar with that might meet your needs: * Some SmallTalk implementations were mentioned in other posts * I understand that Ada9X has similar language features to M3, and there is a GNU Ada9X compiler. I don't know what runtime and libraries are supported, nor what platforms. * NextStep/OpenStep, Objective-C, and Mach probably support multiprocessing applications. If your application can mandate the OS and windowing system, this may fit the bill. * Eiffel seems to come up in these sorts of discussions. I don't know what sort of thread support is available in Eiffle implementations. Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 27 === Date: Wed, 09 Nov 1994 16:19:28 +0900 From: fstiffo@unive.it (Francesco Stiffoni) Subject: Two answers First answer: where can I get version of Modula-3 for NeXTSTEP (Intel version possibly) ? Second answer: where can I get emacs file for Modula-3? Thank you in advance to every one will respond -- Francesco Stiffoni University of Venice Linguistic Department Laboratory of Computational Linguistic ======================================================================= 28 === Date: Thu, 10 Nov 1994 00:30:29 GMT From: edwards@world.std.com (Jonathan Edwards) Subject: Re: Multithreading In article , Dan Connolly wrote: > >But for a mature alternative to C++ for multi-threaded applications, I >suggest you investigate Modula-3. It has a well-specified threads >interface designed in cooperation with I/O interfaces. There are also >networking and GUI interfaces designed on top of this thread >interface. Modula-3 also includes garbage collection, runtime typing, >and other handy high-level language features. Plus, the language >definition passes the "50-page test." See: Yes, Modula-3 is very nice. But "mature" is a relative term. Are there any commercial implementations of Modula-3? Are there even any announced PLANS to deliver commercial implementations? It seems that languages have to be 15 years old before they become commercially viable. I can't wait that long. Thanks anyway. -- Jonathan Edwards edwards@intranet.com IntraNet, Inc 617-527-7020 One Gateway Center FAX: 617-527-6779 ======================================================================= 29 === Date: Wed, 9 Nov 1994 08:04:00 -0500 From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS) Subject: Re: Progress on m3gdb? M3Lite? > Cygnus is adding a tcl/tk-based graphical interface to GDB, and it will > become available in the next few months (it may or may not be part of the > FSF version, but we *will* ensure its free availability!). Unfortunately > for m3gdb, the interface requires totally up-to-date GDB sources, so > somebody would have to upgrade the M3 part. IMHO it would be worthwhile; > you'll be able to click on variables to display them, step through asm > or source displays, have register and stack trace windows auto-update, etc. Bill - are you planning on moving m3gdb up ? If not, I can do this work. How close will the gdb that this is based on be to the current gdb-4.13 ? I'm willing to put in the work to move m3gdb up providing I don't need to do it mul tiple times over the next couple of months. --geoff ======================================================================= 30 === Date: Wed, 09 Nov 1994 21:40:00 -0500 From: nayeri@gte.com (Farshad Nayeri) Subject: Re: Two answers In article , fstiffo@unive.it wrote: > > where can I get version of Modula-3 for NeXTSTEP (Intel version > possibly)? ftp://gatekeeper.dec.com/pub/DEC/Modula-3/release-3.3/build-NEXT.tar.gz I believe this is the 68k version, but porting to intel NeXT shouldn't be too hard if you combine this with the other intel ports (SUN386, LINUX, NT...), but it does take some time to do a new port. > where can I get emacs file for Modula-3? Try: ftp://ftp.vlsi.polymtl.ca/lude/modula3-3.3/run/poly/sun4.1_sparc/lib/elisp/ which includes expanded version of SRC Modula-3. modula3.el is also available as a part of standard Modula-3 distribution. Hope this helps, -- Farshad ======================================================================= 31 === Date: 10 Nov 1994 14:07:56 GMT From: nayeri@gte.com (Farshad Nayeri) Subject: Re: Mod 3 and unix.... In article <10970@gos.ukc.ac.uk> dmc@ukc.ac.uk (Rock Lobster) writes: What is the best (easiest:) way of reading a directorys contents from a Modula-3 prog? Is it possible to execute 'ls -lR' from within the program or should I call a C function? Any examples of code greatly recieved! The "FS" interface provides persistent storage (files) and naming (directories). It is pretty straight-forward to use and it is operating system independent, so it means your code will be portable outside Unix. See libm3/src/os/Common, or under the index "directory" from SRC Report 113, "Some Useful Modula-3 Interfaces": http://www.research.digital.com/SRC/publications/src-rr-113.html Hint: /vbtkit/src/lego/FileBrowserVBT.m3 implements a file browser which uses FS, and other operating system interfaces. If you are making a GUI-based application, you can also use FormsVBT's Browser macro, which is based on vbtkit's FileBrowser. Hope this helps, -- Farshad -- Farshad Nayeri nayeri@gte.com ======================================================================= 32 === Date: 10 Nov 1994 14:25:43 GMT From: pr@cl.cam.ac.uk (Peter Robinson) Subject: Re: Garbage Collection in Modula-3 Neither of the papers you mention says much about garbage collection. However, if you are still interested, the proceedings of the Second International Modula-2 Conference were published by the Centre for Extension Studies at Loughborough University of Technology, Loughborough, Leicestershire, England LE11 3TU. You can 'phone them on +44 1509 222174 or send a fax to +44 1509 610361. E-mail addresses at Loughborough end with @lut.ac.uk . - Peter Robinson. ======================================================================= 33 === Date: Thu, 10 Nov 94 13:14:08 GMT From: dmc@ukc.ac.uk (Rock Lobster) Subject: Mod 3 and unix.... Hi, What is the best (easiest:) way of reading a directorys contents from a Modula-3 prog? Is it possible to execute 'ls -lR' from within the program or should I call a C function? Any examples of code greatly recieved! Cheers Rock -- +----------------------------------------------------------------------------+ | I can get a job, I can pay the phone bill, I can cut the lawn, cut my hair,| | cut out my cholesterol. I can work overtime, I can work in a mine, | +--- I can do it all for you - but I don't want to. ---+ ======================================================================= 34 === Date: Thu, 10 Nov 1994 02:13:15 GMT From: krystof@cs.washington.edu (Krzysztof Zmudzinski) Subject: Garbage Collection in Modula-3 I am looking for the following papers: 1. Author: Robinson-P. Title: Modula-3 in an undergraduate computer science course. Source: Published by: Loughborough University of Technology, Loughborough, UK, 1991. Conference: Second International Modula-2 Conference. Modula-2 and Beyond. Loughborough, UK, pp 154-63 11-13 Sept. 1991. 2. Author: Nelson-G. Title: From Modula-2 to Modula-3. Source: Published by: Loughborough University of Technology, Loughborough, UK, 1991. Conference: Second International Modula-2 Conference. Modula-2 and Beyond. Loughborough, UK, pp 132-43 11-13 Sept. 1991. The libraries in my university don't have them. I am also interested in any other literature pertaining to the issues of garbage collection in Modula-3. Krystof P.S. Does anybody know an e-mail address at the computer science department at the Loughborough University? Any address would be fine; I just need the part after @. ======================================================================= 35 === Date: Thu, 10 Nov 94 08:45:34 -0800 From: mhb@pa.dec.com ("Marc H. Brown") Subject: Re: Mod 3 and unix.... If you are making a GUI-based application, you can also use FormsVBT's Browser macro, which is based on vbtkit's FileBrowser. Actually, it's the other way around. The FileBrowser uses the Browser to display a list of files and directories. Both are VBTkit widgets, FileBrowserVBT and ListVBT, repsectively, and both are components in the FormsVBT language. ======================================================================= 36 === Date: 10 Nov 1994 14:29:22 GMT From: nayeri@gte.com (Farshad Nayeri) Subject: Re: typesafe C -> M3 calls. You may want to browse tools/pp/src/Parse.yacc in the standard M3 distribution. It makes calles to the Formatter interface. As I recall, a procedure P defined in an interface I is available (in a C program) as I__P. Of course you have to be careful about passing in the right parameters and so on, though for basic types the mapping is pretty straight-forward. -- Farshad -- Farshad Nayeri nayeri@gte.com ======================================================================= 37 === Date: 10 Nov 1994 17:32:05 -0600 From: kitana!sysop@caprica.com (JL Gomez) Subject: M3 compile problem I'm a M3 newbie. I'm running the Linux version of Modula-3. I've entered the first program as written in Harbison's Modula-3 book: MODULE Hello1 EXPORTS Main; IMPORT Wr, Stdio; BEGIN Wr.PutText(Stdio.stdout, "Hello, World!\n"); END Hello1. When I do a m3 -o hello hello1.m3, I get the following error: Fatal Error: Process.Create("*UNDEFINED*") failed: errno=2 Here's my $PATH: PATH=/home/sysop/bin:/usr/local/soft/modula3-3.3/bin: /usr/local/bin:/bin:/usr/bin:.:/usr/X11/bin:/usr/TeX/bin: /usr/andrew/bin:/usr/openwin/bin:/usr/games Here's the lib path: LD_LIBRARY_PATH=/usr/local/soft/modula3-3.3/lib/m3/LINUX I'm running the 1.1.62 kernel of Linux with Slackware 2.0.1. Thanks for the help! -- sysop@kitana.org ======================================================================= 38 === Date: Thu, 10 Nov 1994 21:00:23 GMT From: mef@wally.cs.washington.edu (Marc Fiuczynski) Subject: Re: typesafe C -> M3 calls. In article nayeri@gte.com (Farshad Nayer i) writes: As I recall, a procedure P defined in an interface I is available (in a C program) as I__P. Of course you have to be careful about passing in the right parameters and so on, though for basic types the mapping is pretty straight-forward. In M3 version 3.x a procedure defined in an interface is not accessible globally (anymore) using the I__P name mangling. Instead, a procedure P is called indirectly through an interface record (vtable?). This makes it just a little harder to call M3 from C. We considered various ways of calling M3 procedures from C. Here is a summary of the ones that came up with. We went with option number 3. 0) Change the M3 compiler to make a module's procedure global rather than static symbols and use the M3 mangled names. This is necessary for the 3.x version of the M3 compiler. 1) Use one dispatcher that can take a string "MODULE.FUNC" and look it up in the symbol table to return a function ptr to it. REQUIRES: symbol table fiddling. 2) Process the i3 files and generate a .h file with the appropriate extern definitions to access a modules procedures. E.g., for the Stack module with functions push and pop we would process the i3 file and produce a .h containing: typedef void (*_PROC)(); extern _PROC Stack__Push = M3__I_Stack + pushoffset. extern _PROC Stack__Pop = M3__I_Stack + popoffset. REQUIRES: special parser for i3 file. 3) Export the M3 functions explicitly into C global function pointers from the M3 init function. Note that each M3 module has a "main" BEGIN-END block which is executed when the module is initialized. This is similar to 2 except we don't need to process the i3 files. REQUIRES: Simple <*EXTERNAL*> declarations for C globals in i3 and initializing the globals in the MODULE_BODY. Using the Stack module example, the m3 and i3 file would read: Stack.i3 INTERFACE Stack; (* Using C2M3__xxx to export the M3 function *) <* EXTERNAL *> VAR C2M3__Pop:PROCEDURE():INTEGER; <* EXTERNAL *> VAR C2M3__Push:PROCEDURE(x:INTEGER); PROCEDURE Pop():INTEGER; PROCEDURE Push(x:INTEGER); END Stack. Stack.m3 MODULE Stack; ... PROCEDURE Pop():INTEGER = BEGIN ... END Pop; PROCEDURE Push(x:INTEGER) = BEGIN ... END Push; BEGIN (* Export M3 function to C *) C2M3__Pop := Pop; C2M3__Push:= Push; END Stack; Your corresponding C program should have a global variable for C2M3__Pop and C2M3__Push. long (*C2M3__Pop )(); void (*C2M3__Push)(long x); Remember that M3 INTEGERs aren't C ints, but C longs. Please let me know if you can think of a simpler way of calling M3 from C (i.e., change the M3 compiler to make a module's function global rather than static). Marc -- /Marc... mef@cs.washington.edu ======================================================================= 39 === Date: Fri, 11 Nov 1994 07:39:05 -0500 From: nayeri@gte.com (Farshad Nayeri) Subject: Re: Is it too late to ask for change? In article <1994Nov10.203918.18577@news.wrc.xerox.com>, bil@burka (Igor Belchinskiy) wrote: > Actually not even a change (syntax, of course), just a couple of > small extensions, independent of each other. > > 1. To permit small-letter keywords and make them reserved. > 2. To add the keyword PROC (and proc, if possible), which will be > used analogically to VAR, but in the procedure declarations > and definitions. [...] > > I guess, not only I'd be happier but the language would become > uncomparably more readable and appealing to the hordes of the ex-C addicts. > -- > Igor Belchinskiy bil@sdsp.mc.xerox.com Requiescat in Peace Others have suggested this in the past. In fact, as I recall, all-upper-or-lower-case keywords were in the original definition of the language, but at some later point they were taken out. It may be too late for a language change especially for syntactic purposes. Instead, you may want to consider using Andrew Meyers' filter which allows for all-lower-case keywords among other little syntactic differences. See pion.lcs.mit.edu:/pub/m3su. I think it may serve your needs. Disclaimer: I have never used m3su myself. -- Farshad [Can we add something about the keywords and this filter to the FAQ listing please?] ======================================================================= 40 === Date: Thu, 10 Nov 1994 20:39:18 GMT From: bil@burka (Igor Belchinskiy) Subject: Is it too late to ask for change? Actually not even a change (syntax, of course), just a couple of small extensions, independent of each other. 1. To permit small-letter keywords and make them reserved. 2. To add the keyword PROC (and proc, if possible), which will be used analogically to VAR, but in the procedure declarations and definitions. e.g.: VAR a: INTEGER; b: REAL; PROC foo(arg: INTEGER): REAL; bar(arg: REAL) = ... I guess, not only I'd be happier but the language would become uncomparably more readable and appealing to the hordes of the ex-C addicts. -- Igor Belchinskiy bil@sdsp.mc.xerox.com Requiescat in Peace ======================================================================= 41 === Date: 11 Nov 1994 15:43:12 GMT From: nayeri@gte.com (Farshad Nayeri) Subject: Re: typesafe C -> M3 calls. On the topic of calling M3 procedures from C, I said: As I recall, a procedure P defined in an interface I is available (in a C program) as I__P. Of course you have to be careful about passing in the right parameters and so on, though for basic types the mapping is pretty straight-forward. Marc Fiuczynski replied: In M3 version 3.x a procedure defined in an interface is not accessible globally (anymore) using the I__P name mangling. Instead, a procedure P is called indirectly through an interface record (vtable?). This makes it just a little harder to call M3 from C. I am sorry -- I was wrong as I realized when I took a closer look at the pp program. For the curious, see the definition and use of the "initParser" function in tools/pp/src/Parse.{m3,i3,yacc}, which works around the described problem. There is definitely a need for a tool that automates this process without causing grief for either the C or M3 programmer. This way people can make ordinary Modula-3 libraries readily available to C programs. This helps legitimize the use of M3 to some extent. -- Farshad (actively reducing the signal-to-noise ratio in this group!) -- Farshad Nayeri nayeri@gte.com ======================================================================= 42 === Date: 12 Nov 1994 02:19:12 GMT From: schwartz@roke.cse.psu.edu (Scott Schwartz) Subject: Re: M3 compile problem dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) writes: You must have a m3makefile to describe your program and use m3build to get it compiled. You cannot use m3 directly. Ug. Why is that? ======================================================================= 43 === Date: 12 Nov 1994 02:56:58 GMT From: connolly@hal.com (Dan Connolly) Subject: Generics to simulate -DDEBUG? On the whole, I think the C preprocessor is a nasty hack. But it's pretty useful sometimes. How many folks out there have used stuff like Fred Fish's dbug package -- or your own homebrew macros so you can write: DBUG_PRINT("sorting", ("i= %d; j=%d", i, j)); this code compiles to a printf statement when -DDEBUG, and compiles to nothing otherwise. It comes in handy a lot -- especially in maintenance mode. It's a lot easier to remember what's going on (or learn what's going on) if you can see this "animated" version of the algorithm playing itself out. I sure like M3's clean, simple syntax (SHOUTING KEYWORDS notwithstanding) but this is one trick-of-the-trade that I'd hate to do without. Some binary-only library distributions (e.g. the Microsoft Foundation Classes) come in two versions: one with all the debugging and runtime checks on, and one lean and mean with none of the fancy stuff. The only solution I can figure out is to code everything as GENERIC modules that import a Debug interface, ala: GENERIC MODULE Work(Debug); IMPORT Fmt; (* hmmm.. I'd want this conditional on Debug.ON too...*) PROCEDURE DoSomething(a, b: INTEGER) = BEGIN IF Debug.ON THEN Debug.Print("a= " & Fmt.Int(a) & " b= " & Fmt.Int(b)); END; (* ... *) END DoSomething; Does the M3 compiler do dead-code elimination well enough that the call to Debug.Print would be eliminated if Debug.i3 contained: CONST ON = FALSE; ??? What's the state-of-the-art in <*INLINE*> processing? I scoured the archive and didn't come up with anything on INLINE in 3.x versions of the compiler. By the way... the archive and KWIC nice. Any chance they could be updated? Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 44 === Date: 11 Nov 94 13:54:40 From: dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: M3 compile problem When I do a m3 -o hello hello1.m3, I get the following error: Fatal Error: Process.Create("*UNDEFINED*") failed: errno=2 You must have a m3makefile to describe your program and use m3build to get it compiled. You cannot use m3 directly. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 45 === Date: 12 Nov 1994 04:56:18 GMT From: ykomar@ic.sunysb.edu (Yevgeny Komar) Subject: Modula3 for DOS. Hello all! Could someone please point me to a site that has madula3 compiler for DOS. Thanks a lot! Jake Komar ykomar@ic.sunysb.edu -- Up The Universe! ======================================================================= 46 === Date: 12 Nov 1994 19:42:27 GMT From: rrw1000@cus.cam.ac.uk (Richard Watts) Subject: Re: Generics to simulate -DDEBUG? In article , Dan Connolly wrote: > >On the whole, I think the C preprocessor is a nasty hack. But >it's pretty useful sometimes. > >How many folks out there have used stuff like Fred Fish's dbug >package -- or your own homebrew macros so you can write: > > DBUG_PRINT("sorting", ("i= %d; j=%d", i, j)); > >this code compiles to a printf statement when -DDEBUG, and compiles >to nothing otherwise. > >It comes in handy a lot -- especially in maintenance mode. It's a >lot easier to remember what's going on (or learn what's going on) >if you can see this "animated" version of the algorithm playing >itself out. > >I sure like M3's clean, simple syntax (SHOUTING KEYWORDS >notwithstanding) but this is one trick-of-the-trade that I'd >hate to do without. > >Some binary-only library distributions (e.g. the Microsoft >Foundation Classes) come in two versions: one with all the debugging >and runtime checks on, and one lean and mean with none of the >fancy stuff. > >The only solution I can figure out is to code everything as >GENERIC modules that import a Debug interface, ala: > >GENERIC MODULE Work(Debug); > >IMPORT Fmt; (* hmmm.. I'd want this conditional on Debug.ON too...*) > >PROCEDURE DoSomething(a, b: INTEGER) = > BEGIN > IF Debug.ON THEN > Debug.Print("a= " & Fmt.Int(a) & " b= " & Fmt.Int(b)); > END; > (* ... *) > END DoSomething; Why not just run your source code through cpp ? Of course, you'd have to use a shell script to build - something like --- #! /bin/bash for i in *.m3 *.i3 do if [$1 -eq "-debug"]; then $DEBUG=-Ddebug; else $DEBUG=-Udebug; fi; cat defs.h $i | cpp $DEBUG >../ARCHITECTURE/$i; done; cd ../ARCHITECTURE m3build -S --- Where src/defs.h has your definitions of PRINT_DEBUG etc. in it. OK, so it's a horrible nasty hack, but it does ensure that no matter how brain-damaged a compiler (or indeed what language :-)) you're feeding it through, it will always strip debugging code if you don't specify -debug. Richard. -- `Dangerous/Speak your piece/Good and drunk/Back on the street/What you see is what you get/No matter what you say/No time for anything/To take the pain away' The University of Cambridge can't have these opinions even if it wants them. ======================================================================= 47 === Date: 13 Nov 1994 18:17:37 GMT From: dorai@cs.rice.edu (Dorai Sitaram) Subject: Modula3 for OS/2 (was Re: Modula3 for DOS. In article <3a1hti$2al@adam.cc.sunysb.edu>, Yevgeny Komar wrote: >Hello all! >Could someone please point me to a site that has madula3 compiler >for DOS. Same question, but for OS/2 (without the medium of a DOS Window and without 8.3 filename restrictions). Thanks. --d ======================================================================= 48 === Date: 13 Nov 1994 19:49:42 GMT From: bm@shadow.cs.columbia.edu (Blair MacIntyre) Subject: Re: Passing options to m3build(1) >>>>> On Wed, 9 Nov 1994 00:28:39 GMT, faegri@dcs.glasgow.ac.uk (Tor >>>>> Erlend Faegri) said: Tor> Unable to find any explanation in the FAQ or in the README files, Tor> I turn to the group for help ... Well, I just encountered this yesterday. Here's what I did. Tor> I tried to install the network object library (netobj). After Tor> starting up m3build(1) as usual in the ../netobj/stubgen Tor> directory, it said: Tor> ln -s stubgen stubgenv1 Tor> m3 -w1 -why -g -o stubgen -F/usr/tmp/qkAAAa02272 Tor> -> linking stubgen Tor> ld: GLOBAL_OFFSET_TABLE overflown: need to use -PIC Tor> According to the html-helpfile for m3build(1), adding the line Tor> m3_option("-X2@-PIC@") Tor> to ../stubgen/src/m3makefile should do the trick, but I still get Tor> the same error message. Any hints? (I also tried "-X1@-PIC@" and Tor> "-X5@-PIC", where the first gave the same error, and the latter Tor> gave "unrecognized option ..."). The problem (I think) is that you need to compile all the .c files that ld is loading with -PIC. At least, since compiling everything in the netobj directories with -PIC didn't fix it, I'm assuming that is the case. Based on that, I went in to the templates/SPARC file of m3build, changed all the cc commands to include -PIC: "-Y1@/bin/cc@-PIC@", "-Y2@/bin/cc@-PIC@", "-Y6@" & LIB_USE & "/m3cgc1@-quiet@-fPIC@", M3_CONFIG += "-Y2@/bin/cc@-Bstatic@-PIC@" (not sure the -Y6 line needed it) Then, I rebuilt everything (the libraries, everything). Took forever, but now it works. Talk about your huge binaries, though. -- Blair MacIntyre -- bm@cs.columbia.edu -- Graduate Student (Graphics and UI Lab) smail: Dept. of Computer Science, 450 Computer Science Building, 500 W 120 St., Columbia University, New York, NY 10027 ======================================================================= 49 === Date: Sun, 13 Nov 1994 15:26:19 GMT From: spencer@ERA.COM (Spencer Allain) Subject: FTPable file with language definitions? I have successfully (at least I think I have) installed SRC Modula-3 release 3. 3 and would like to start examining the power/limitations of the language. Unfortunately, I don't know the exact syntax of the language and would like to know where I can find either programming examples or documentation that gives a brief explanation of what the keywords are, the proper way to declare objects etc., and what external modules I need to access for simple IO or more complex tasks. I am an ex-Modula-2 programmer, so the syntax shouldn't be too hard for me to follow even though I know there have been some significant changes so that vali d Modula-2 programs are not valid in Modula-3. I'm assuming that it has to do with the "standard" library interfaces, but without a guide or example code to browse I may never know. Thanks for any assistance. Oh yeah, one more thing. I have no way to read html files, so I'm looking for either postscript, ascii, or TeX documention. -Spencer Allain Engineering Research Associate s ======================================================================= 50 === Date: 14 Nov 1994 13:07:47 GMT From: omr1000@cus.cam.ac.uk (O.M. Reynolds) Subject: Telnet with Modula-3 Can anyone tell me how I can get a Modula-3 program to automaticly fetch a page from the web? At the moment I can retrieve the HTML script using telnet, i.e. to get the Cambridge University home page I would; telnet www.cam.ac.uk 80 GET / ...and out comes a load of HTML. So the question is, how can I get my M3 program to invoke the telnet program, pass it the commands as above and capture the resulting text? Many thanks, Owen. ======================================================================= 51 === Date: Mon, 14 Nov 94 05:56:55 -0800 From: mhb@pa.dec.com ("Marc H. Brown") Subject: Re: Passing options to m3build(1) Talk about your huge binaries, though. You should be able to use shared libraries on SPARCstations. But, what I like to tell folks when I say that "Hello FormsVBT" is 13MB or so, is that you should be delighted: there's 13MB or so of great stuff there, just waiting to be used! :-) ======================================================================= 52 === Date: 14 Nov 1994 15:54:55 GMT From: siva@csgrad.cs.vt.edu (Siva Challa) Subject: Help: Looking for application libraries Hi: I am looking for class libraries written in different object-oriented languages to build an integrated application. I would appreciate it if you could let me know of any libraries available on the net. I am specifically looking for Modula-3 libraries. Any other languages' libaries would also be fine. Any suggestions on specific applications that are suited for multi-language environment consisting of object-oriented languages are welcome. Thank you very much. Siva ---------------------------------------------------------------------------- Siva Challa Email: siva@csgrad.cs.vt.edu Dept. Computer Science Phone: (703) 231-7539 (O) Virginia Tech (703) 951-9469 (H) Blacksburg, VA 24061-0106 ---------------------------------------------------------------------------- ======================================================================= 53 === Date: 14 Nov 94 09:59:23 From: vixie@gw.home.vix.com (Paul A Vixie) Subject: Re: Telnet with Modula-3 You wouldn't run Telnet from your Modula 3 program. Telnet is just a way to connect a terminal to a remote TCP service (in this case, port 80 which is the www service). You don't want your Modula 3 program to have to act like a terminal, which is what Telnet would want you to do. What you want to do is exactly what Telnet is doing: open a TCP connection to the remote TCP service. In your case you'll want to bind a Reader to that connection so that you can treat it as a stream and use the input parsing modules in the Modula 3 library. It's been two years since I wrote code to do this and the Interface Police have reportedly made it a lot easier. Check around in the SRC documentation and you'll surely find a module that can open a Reader to a remote TCP service. -- Paul Vixie La Honda, CA decwrl!vixie!paul ======================================================================= 54 === Date: 14 Nov 94 08:49:02 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: FTPable file with language definitions? Unfortunately, I don't know the exact syntax of the language and would like to know where I can find either programming examples or documentation that give s a brief explanation of what the keywords are, the proper way to declare object s etc., and what external modules I need to access for simple IO or more compl ex tasks. Oh yeah, one more thing. I have no way to read html files, so I'm looking f or either postscript, ascii, or TeX documention. For those who cannot access the World Wide Web language definition, the "html" package in gatekeeper.dec.com:pub/DEC/Modula-3/release-3.3 contains the html source to the language definition. This is pretty much ascii. There are ways too to convert from html to tex. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 55 === Date: 14 Nov 94 08:27:58 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: M3 compile problem References: NNTP-Posting-Host: roke.cse.psu.edu dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) writes: You must have a m3makefile to describe your program and use m3build to get it compiled. You cannot use m3 directly. Ug. Why is that? The arguments passed between m3build and m3 are quite elaborate. M3build was planned to be called by humans and m3 by programs. Of course you may proceed otherwise if you wish. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 56 === Date: 15 Nov 1994 13:59:26 GMT From: bm@shadow.cs.columbia.edu (Blair MacIntyre) Subject: Re: Telnet with Modula-3 >>>>> On 14 Nov 1994 13:07:47 GMT, omr1000@cus.cam.ac.uk (O.M. Reynolds) said: Owen> How can I get my M3 program to invoke the telnet program, Owen> pass it the commands as above and capture the resulting text? Take a look at the Process module. The source was installed in lib/m3/pkg/libm3/src/os/Common/Process.i3 under your installation directory. -- Blair MacIntyre -- bm@cs.columbia.edu -- Graduate Student (Graphics and UI Lab) smail: Dept. of Computer Science, 450 Computer Science Building, 500 W 120 St., Columbia University, New York, NY 10027 ======================================================================= 57 === Date: Tue, 15 Nov 1994 03:42:38 GMT From: ckingsto@undergrad.math.uwaterloo.ca (Craig Andrew Kingston) Subject: Re: Modula3 for OS/2 (was Re: Modula3 for DOS. CRAIG KINGSTON ckingsto@undergrad.math.uwaterloo.ca ======================================================================= 58 === Date: 15 Nov 1994 09:32:42 GMT From: pk@i3.informatik.rwth-aachen.de (Peter Klein) Subject: m3gdb Since there were some new requests lately, and I don't want to send patches through the world, I packaged our version of the gdb on ftp://ftp-i3.informatik.rwth-aachen.de/pub/Modula-3-Contrib/m23gdb-940920.tar.g z It is based on gdb 4.13 with enhancements from Cygnus, the Modula-3 support from the Modula-3 3.3 release, and several patches by Oliver Meyer. It should work now with EPC Modula-2 2.0x and SRC Modula-3 3.3, at least on SPARC/SunOS 4.1.3. The Modula-3 support still isn't perfect, but a big improvement over SRC's distributed version. See the README.m23gdb file for details. Peter --- Peter Klein E-Mail: pk@i3.informatik.rwth-aachen.de Lehrstuhl fuer Informatik III Tel.: +49/241/80-21311 Ahornstrasse 55 Fax.: +49/241/8888-218 RWTH Aachen 52074 Aachen Germany ======================================================================= 59 === Date: Tue, 15 Nov 1994 15:58:30 GMT From: jredford@seelebrennt.interzone.lehman.com (John Redford) Subject: Re: Telnet with Modula-3 In article vixie@gw.home.vix.com (Paul A Vixie) writes: You wouldn't run Telnet from your Modula 3 program. Telnet is just a way to connect a terminal to a remote TCP service (in this case, port 80 which is t he www service). You don't want your Modula 3 program to have to act like a terminal, which is what Telnet would want you to do. What you want to do is exactly what Telnet is doing: open a TCP connection to the remote TCP servic e. In your case you'll want to bind a Reader to that connection so that you can treat it as a stream and use the input parsing modules in the Modula 3 libra ry. It's been two years since I wrote code to do this and the Interface Police have reportedly made it a lot easier. Check around in the SRC documentation and you'll surely find a module that can open a Reader to a remote TCP servi ce. The latest way is along these lines: IMPORT IP; IMPORT TCP; IMPORT Thread; IMPORT Rd, Wr; IMPORT ConnRW; VAR c: TCP.T; r: Rd.T; w: Wr.T; PROCEDURE Connect(host: TEXT; port: INTEGER) RAISES {Wr.Failure,Thread.Alerted,IP.Error} = VAR a : IP.Address; BEGIN IF IP.GetHostByName(host, a) THEN c := TCP.Connect(IP.Endpoint{ a, port }); r := ConnRW.NewRd(c); w := ConnRW.NewWr(c); END; END Connect; PROCEDURE Deconnect() RAISES {Wr.Failure,Rd.Failure,Thread.Alerted} = BEGIN Wr.Close(w); Rd.Close(r); TCP.Close(c); END Deconnect; Of course, this isnt "great" code, or even "good", but you get the idea I hope. -- John Redford (AKA GArrow) | 3,600 hours of tape. jredford@lehman.com | 5 cans of Scotchguard. ======================================================================= 60 === Date: 15 Nov 1994 21:51:52 GMT From: schaub@ponder.csci.unt.edu (Stephen Schaub) Subject: Unbuffered/raw terminal input Is there an OS-independent way to do unbuffered or raw terminal input using Modula-3? I really like what I see in the v3.3 interfaces that remove a lot of low-level file stuff from the Unix modules to the FS and File/Terminal/etc. modules. But in perusing those interfaces (in particular Terminal) I can't find what I'm looking for. Stephen Schaub ======================================================================= 61 === Date: Wed, 16 Nov 94 08:23:20 -0800 From: mcjones@pa.dec.com Subject: Re: Unbuffered/raw terminal input Stepen Schaub asks: Is there an OS-independent way to do unbuffered or raw terminal input using Modula-3? The answer is not currently. When I designed the current portable operating system interfaces (FS/File/Terminal, etc.), I tried to capture as much useful functionality as I could that could be implemented on top of at least Unix and Win32 (and of course it would be nice to consider the Macintosh). I undoubtedly missed some things, although I spent a lot of time with my nose in the manuals. Suggestions are welcome for additional function, especially if you supply all the implementations! If there are very useful OS-dependent functions, then it also seems reasonable to add them to interfaces like TerminalPosix, etc. Paul McJones Digital Equipment Corp. Systems Research Center mcjones@pa.dec.com ======================================================================= 62 === Date: 16 Nov 1994 18:20:47 GMT From: lhkc100@cus.cam.ac.uk ( # + K ^_^ #) Subject: Can't run! I have recently installed modula3-3.3 of the linux version in my computer. I have also successfully compiled the programs but when I try to run them, an err or message : Can't find library 'libm3.so.3' I have written down import("libm3"), what's wrong with my m3? I guess there should be some problems about my linker... Thanks in advance if you can help me! Hopeless Kelvin ======================================================================= 63 === Date: 16 Nov 1994 16:08:46 GMT From: Michel Dagenais Subject: Modula-3 Frequently Asked Questions (FAQ) Archive-name: Modula-3-faq MODULA-3 FAQ Michel Dagenais, dagenais@vlsi.polymtl.ca v2.2, 30 August 1994 Contents * Contents * What is new? * The language + What is Modula-3? + Is Modula-3 a superset of Modula-2? * The documentation + Where can I get a description of Modula-3? + Where can I get other information on Modula-3? * The implementations + Where can I get an implementation? + What is SRC Modula-3? + What is m3pc? * Some specific questions + Why is "Hello World" so large? + Why objects and interfaces? + Comparisons between Modula-3 and other languages? + What is the story with Trestle and OpenWindows? + Linking with C++ code + Flushing writers to see the output immediately + Problems with threads and VTALARM + What is the purpose of BRANDED and REVEAL + Why uppercase keywords + M3build versus Make or why m3 does not work + Missing RTHooks or similar messages + The program receives a SEGV signal under the debugger + What is M3-lite, MS-Windows support * FTP + How To Obtain Pre-Compiled Binaries + What if I don't have ftp access? * Contributing + Can I contribute Modula-3 software? + ILU, an object-oriented multi-lingual RPC-capable module system * Modula-3 for teaching * Modula-3 In Industry * Work In Progress + The SRC Compiler + Modula-2 To Modula-3 Converter + Integrated Development Environment + Windowing And User Interfaces o Rotated Text o Postscript VBTs + Persistent Objects + Abstract Syntax Tree Tools (M3 Parser) + Computer Assisted Learning Tools (Algorithm Animation) + Presentations, Tutorials And Teaching Material + Reports And Books + Parallel Programming * Wish List + M3Build + Coverage And Performance Analysis + More VBTs + Distributed Computing (Network Objects) + Interfaces To Other Libraries And Programs (Tcl, Dps...) * Who's Who ABSTRACT: This document contains references to most of the material available on the Modula-3 language, compiler, tools and libraries. It should answer all the most frequently asked questions about Modula-3. The FAQ was originally written by Eric Muller. Send corrections, suggestions, additions to the current maintainer, Michel Dagenais dagenais@vlsi.polymtl.ca. The postscript version is available on ftp.vlsi.polymtl.ca:pub/m3/m3-faq.ps. An hypertext WWW version is found on http://froh.vlsi.polymtl.ca/m3/m3-faq.html. WHAT IS NEW? The FAQ answers several new questions, lists new binaries available and lists the ports under way. THE LANGUAGE What is Modula-3? Modula-3 is a systems programming language that descends from Mesa, Modula-2, Cedar, and Modula-2+. It also resembles its cousins Object Pascal, Oberon, and Euclid. The goal of Modula-3 is to be as simple and safe as it can be while meeting the needs of modern systems programmers. Instead of exploring new features, they studied the features of the Modula family of languages that have proven themselves in practice and tried to simplify them into a harmonious language. They found that most of the successful features were aimed at one of two main goals: greater robustness, and a simpler, more systematic type system. Modula-3 retains one of Modula-2's most successful features, the provision for explicit interfaces between modules. It adds objects and classes, exception handling, garbage collection, lightweight processes (or threads), and the isolation of unsafe features. Is Modula-3 a superset of Modula-2? No; valid Modula-2 programs are not valid Modula-3 programs. However, there is a tool to help convert Modula-2 programs to Modula-3. THE DOCUMENTATION Where can I get a description of Modula-3? The language definition and most electronically available Modula-3 information can be accessed on: Modula-3 Home The definition of Modula-3 is contained in: * System Programming with Modula-3 Edited by Greg Nelson Prentice Hall Series in Innovative Technology ISBN 0-13-590464-1 L.C. QA76.66.S87 1991 also known as SPwM3. Here is the table of contents: 1. Introduction 2. Language Definition 3. Standard Interfaces 4. An Introduction to Programming with Threads 5. Thread Synchronization: A Formal Specification 6. I/O Streams: Abstract Types, Real Programs 7. Trestle Window System Tutorial 8. How the Language Got its Spots Chapters 2 and 3 have been reprinted in Sigplan Notices, Volume 27, Number 8, August 1992, pp 15-42. Sam Harbison has written a more tutorial book about Modula3: * Modula-3 Samuel P. Harbison Prentice Hall, 1992 ISBN 0-13-596396-6 The table of contents is as follows: 1. Introduction 2. Declarations 3. Statements 4. Basic Types 5. Structured Types 6. Procedures 7. Exceptions 8. Interfaces and Modules 9. Generics 10. Dynamic Programming 11. Objects 12. Threads 13. Low-Level Programming 14. Programming Conventions 15. SRC Modula-3 16. Modula-3 Syntax 17. Answers to Selected Exercises The errata sheet is available via anonymous ftp from gatekeeper.dec.com in pub/DEC/Modula-3/errata. Errata If you cannot find these books at your favorite bookstore, here are bookstores connected to the net known to carry them: UCI carries both books: UCI Bookstore While Roswell is known to at least carry the language definition (SPwM3): Roswell Electronic Computer Bookstore (rjames@fox.nstn.ns.ca) Roswell Bookstore Where can I get other information on Modula-3? There is a Usenet newsgroup, comp.lang.modula3. The archives of that group are available via anonymous ftp from gatekeeper.dec.com in pub/DEC/Modula-3/comp.lang.modula3. If you do not have access to Usenet, there is a relay mailing list; send a message to m3-request@src.dec.com to be added to it. Comp.lang.modula3 archive There are a couple high-level overview articles available: * ``Modula-3'', Sam Harbison, Byte, Vol. 15, No. 12, November 1990, pp 385+. * ``Safe Programming with Modula-3'', Sam Harbison, Dr. Dobb's Journal, Vol. 17, No. 10, October 1992, pp 88+. A description of the Modula-3 type system is in * ``The Modula-3 Type System'', Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow, Greg Nelson, Conference Record of the Sixteenth Annual ACM Symposium on Principles of Programming Languages (POPL), Austin Texas, January 11-13 1989, pp 202-212. The Modula-3 treatment of floating-point values is described in * ``The Design of Floating-Point Data Types'', David Goldberg, ACM Letters on Programming Languages and Systems (LOPLAS), June 1992, Vol 1, no.2, pp 138-151 The core library interfaces are described and indexed in * ``Some Useful Modula-3 Interfaces'', Jim Horning, Bill Kalsow, Paul McJones, Greg Nelson, SRC Research Report 113. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-113.ps.Z Libm3 * ``Pickles: a system for automatic serialization of typed values'', Andrew Birrell, Greg Nelson, Susan Owicki, Edward Wobber, Systems Research Center, Digital Equipment Corp., in preparation. The Trestle window system toolkit, higher-level FormsVBT toolkit, and Zeus animation system available with Modula-3, are documented in the following reports: * ``Trestle Reference Manual'', Mark S. Manasse and Greg Nelson, SRC Research Report 68, December 1991. * ``Trestle Tutorial'', Mark S. Manasse and Greg Nelson, SRC Research Report 69, May 1, 1992. * ``VBTkit Reference Manual: A toolkit for Trestle'', edited by Marc H. Brown and James R. Meehan. (to be a SRC Research Report) A draft version is available via anonymous FTP from gatekeeper.dec.com in pub/DEC/Modula-3/contrib/vbtkit.25Mar93.ps.Z. VBTKit * ``The FormsVBT Reference Manual'', Marc H. Brown and James R. Meehan, (to be a SRC Research Report). A draft version is available via anonymous FTP from gatekeeper.dec.com in pub/DEC/Modula-3/contrib/formsvbt.25Mar93.ps.Z and pub/DEC/Modula-3/contrib/formsvbt.AppC.26Mar93.ps.Z. VBTKit library VBTKit applications * ``Zeus: A System for Algorithm Animation and Multi-View Editing'', Marc H. Brown, SRC Research Report 75, February 28, 1992. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-075*.ps.Z. Zeus * ``Color and Sound in Algorithm Animation'', Marc H. Brown and John Hershberger, SRC Research Report 76a, August 30, 1991. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-076a*.ps.Z. Color and Sound * ``The 1992 SRC Algorithm Animation Festival'', Marc H. Brown, SRC Research Report 98, March 27, 1993. Available via anonymous ftp from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-098*.ps.Z. Animation Festival Network objects are described in the following reports: * ``Network Objects'', Andrew Birrell, Greg Nelson, Susan Owicki, and Edward Wobber, SRC Research Report 115, February 28, 1994. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-115*.ps.Z. Network Objects * ``Distributed garbage collection for Network Objects'', Andrew Birrell, David Evers, Greg Nelson, Susan Owicki, and Edward Wobber, SRC Research Report 116, December 1993. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/SRC/research-reports/SRC-116*.ps.Z. Distributed GC While the Obliq embeddable interpreter is documented in: * ``Obliq: A lightweight language for network objects'', Luca Cardelli, User's Manual, Systems Research Center, Digital Equipment Corp., 1994. Available via anonymous FTP from gatekeeper.dec.com in pub/DEC/Modula-3/contrib/Obliq.ps. Obliq Hardcopy versions of these reports can be ordered by e-mail; send your request including a postal mail address to src-reports@src.dec.com. SRC research reports Sedgewick's classic text on computer algorithms is presented in Modula-3 in: * Algorithms in Modula-3 Robert Sedgewick Addison-Wesley, 1993 ISBN 0-201-53351-0 THE IMPLEMENTATIONS Where can I get an implementation? Two implementations are available, SRC Modula-3 and a PC version of it (m3pc). As far as we know, implementations are not available for VMS, Macintosh. What is SRC Modula-3? SRC Modula-3 was built by the DEC Systems Research Center and is available via anonymous ftp from gatekeeper.dec.com in pub/DEC/Modula-3. The most recent version is release 3.3. The previous release, 3.1, was a major new release intended mostly for porting to architectures other than DEC. A list of known problems and patches is available in: patches This release is known to work on at least on the DS3100 (m3-request@src.dec.com), HPPA (laverman@cs.rug.nl), LINUX (dagenais@vlsi.polymtl.ca), NeXT 68000 (tom@smart.ruhr.de), (nayeri@gte.com) SPARC architectures. Work is under way to port to the Macintosh (George Andre dat94gan@ludat.lth.se), OS/2 (Hendrik Boom hendrick@CAM.ORG), AIX 3.2.5 for RISC/6000 (Bob Barton barton@chopin.eche.ualberta.ca), FreeBSD (Olaf Wagner olaf@logware.de). The SPARC release notes may be found on ftp.gte.com:pub/m3 while the LINUX ones are available on ftp.vlsi.polymtl.ca:pub/m3/linux/README and the HPPA notes are in ftp.vlsi.polymtl.ca:pub/m3/hppa/README. SRC-Modula-3 SPARC release notes LINUX release notes HPPA release notes The compiler implements the language defined in SPwM3. There are versions for the architectures listed below. While SRC can test on DS3100, ALPHA/OSF and LINUX, it can only rely on what users on other platforms tell them to integrate all the platform specific code. Because of the improved portability of the 3.* release, ports to non Unix platforms are easier. A port to Windows NT and/or Windows 3.1 may be available in the future. The Windows NT port, in progress, uses native threads. This should be a good model for other implementations of Thread using native threads. * AIX386 IBM PC running AIX/PS2, * AOSF DEC Alpha AXP running OSF/1 * AP3000 Apollo DN4500 running Domain/OS * ARM Acorn R260 running RISC iX 1.21 * DS3100 DECstation 3100 and 5000 running Ultrix 4.0 and 4.2 * HP300 HP 9000/300 running HP-UX 8.0 * HPPA HP 9000/700, 9000/800 running HP-UX 8.0 * IBMR2 IBM R6000 running AIX 3.1, * IBMRT IBM RT running IBM/4.3, * LINUX Intel 386 running LINUX * NEXT NeXT running ?? * NT386 Intel 386 running Windows NT * OKI Okidata 7300 (i860) running UNIX SVR4.0 * SEQUENT Sequent computers running ?? * SOL2 Sparc running Solaris 2.x * SPARC SPARCstation running SunOS 4.1.x * SUN3 SUN3 running SunOS * SUN386 Sun 386i running SunOS 4.0.1 * UMAX Encore Multimax running UMAX 4.3 (R4.1.1) * VAX VAX running Ultrix 3.1 The new native compiler is based on GCC and should be fairly easy to port. Except for the very lowest levels of the thread implementation, the entire system is written in Modula-3. The DEC SRC Modula-3 release 3.3 contains the following: * A native code compiler: uses the GCC backend; on machines/operating systems that have self-describing stacks, an optimized exception handling mechanism is provided, on other architectures, setjmp/longjmp is used. The compilation system provides for minimal recompilation. Only those units that depend on the modified interface item will be recompiled. * m3utils/m3build: tool that performs dependency analysis and builds the Modula-3 programs and libraries. * A large standard library (libm3) providing + A multithread, incremental, generational, conservative garbage collector + Text manipulation. + Generic Containers: Lists, Sequences, Tables, SortedLists, SortedTables + Atoms and Symbolic expressions (Lisp like lists) + An extensible stream IO system + Typesafe binary object transcription (persistent objects) + Operating system interfaces + Portable interfaces to the language runtime All standard libraries are thread-friendly. Modula-3 can readily link with existing C libraries; many libraries including X11R4 and various UNIX libraries are available as part of libm3. * m3gdb: a Modula-3 aware version of GDB. * trestle: a multi-threaded window system interface that sits on top of X windows. It is not unlike InterViews and comes with several sample programs. * trestle/tcp: a library for simplified access to TCP/IP. * vbtkit: a higher level toolkit on top of Trestle. It offers buttons, menus, editors, file choosers... and has a Motif-like look and feel. * formsvbt: an interactive user interface builder. A symbolic expression representing the user interface is edited and the graphical view is immediately produced. * tools/coverage: tool to determine the number of times each statement is executed. * tools/pp: pretty printer for Modula-3 programs. * tools/gnuemacs: emacs lisp files to help editing and debugging Modula-3 programs in emacs. * tools/m3bundle: tool to bundle data files into an executable to produce standalone programs. * tools/m3totex: extract TeX documentation from Modula-3 programs for a form of literate programming. * tools/showheap: tool to graphically see the behavior of the garbage collector. * tools/shownew: tool to graphically see the allocation behavior of a running program. * tools/showthread: tool to see the activation of threads in a running program. * zeus: framework to develop graphical animations of algorithms (heapsort, quicksort, LRU cache replacement, network protocols...) for visualization and teaching purposes. * mentor: a dozen of animations developed using Zeus. * netobj: network objects that allow the transparent execution of methods across process and machine boundaries. A simple yet very effective way to build distributed applications. * obliq: simple, interpreted, lexically scoped, object oriented, distributed programming language that can be embedded in Modula-3 programs and call/be-called by Modula-3 procedures. The Obliq object model is based on prototypes and delegation. * A framework for parsing and analyzing Modula-3 programs. This is a complete AST toolkit for Modula-3. This can parse arbitrary Modula-3 sources (input isn't required to be a complete unit) and produce detailed ASTs representing the input. The ASTs can be used to do a variety of semantic analysis tasks, or program generation tasks similar to Lisp environments. (m3tk). * pkgtools/smalldb: library to store objects on disk with logging and recovery capabilities. * pkgtools: distribution tool that insures that several copies of a package (software, document...) are updated simultaneously. * postcard: mail and news reading environment. * visualobliq: a graphical user interface builder coupled with a simple yet powerful interpreted language, Obliq, for rapid development of interactive distributed applications. * This is a rather new component and is undergoing a fair amount of evolution; however, it is still very useful and exciting. Visual Obliq provides an application builder similiar in nature to Visual Basic. However, it uses Obliq as its scripting language. This makes it easy to build and prototype interesting distributed and groupware applications. It can be used for building non-distributed applications as well. * misc/tcl: interface to access the Tcl language from Modula-3. * misc/dps: interface to access Display Postscript from Modula-3. * games: more sample Trestle applications. What is m3pc? A newer version of m3pc, code named EX32 in the README file, is available via anonymous ftp from gatekeeper.dec.com in pub/DEC/Modula-3/contrib/M3forDOS. PC Modula-3 From the README, written by Klaus Preschern: EX32 ("A 32-bit Extension of DOS") is a environment for the developement and execution of 32-bit applications with DOS. EX32 is a collection of DOS programs (drivers + kernel). It provides services for applications executed in protected mode. It does process management, virtual memory management, interprocess communication via pipes and it offers a file system with 32 character filenames. EX32 runs on MS-DOS 5.00, 6.00 and 6.02. You need a i386/i387 (coprocessor required) or upward (i486, Pentium). EX32 supports DOS XMS memory (but not EMS, VCPI or DPMI). No support for the i286. You should have at least 4 MB memory (8 MB or more recommended). The whole package occupies unzipped and untared approximately 44 MB of disk space. EX32 comes with GNU C++ (version 2.4.5), SRC Modula-3 (version 3.1, including threads), two C libraries, a graphics library for VGA and a number of commands (i.e. ls, cp, rm, mkdir, make, ...). Note: This is a system for experienced programmers! They should be familiar with Unix and DOS. SOME SPECIFIC QUESTIONS Why is "Hello World" so large? Modula-3 programs are larger than C programs for the following reasons: 1. The fixed runtime is substantially larger. It contains a garbage collector, a thread runtime, and exception support. Note that "Hello World" is virtually all runtime. For larger programs the runtime is not an issue. 2. The generated code includes runtime checks for out-of-bound array references and NIL pointer. Many of these checks could be removed by a more sophisticated compiler. Why objects and interfaces? Allan Heydon on comp.lang.modula3, May 4th 1993: Modula-3 provides two separate mechanisms for data-hiding: one for hiding details about how interfaces are implemented, and the other for hiding details about how objects are implemented. The first data-hiding mechanism is realized by the distinction between interfaces and modules. Clients can only import interfaces, so the names declared in the modules implementing those interfaces are hidden from clients. Note that this mechanism has only two levels; a name is either declared in an interface, or it isn't. If a name is only declared in a module, it can't be used by a client. The second data-hiding mechanism is realized by opaque types and revelations. A Modula-3 interface may declare an object type to be opaque, in which case only a subset of the fields and methods of that object are revealed to clients importing the interface. Furthermore, the Modula-3 revelation mechanism allows a designer to reveal successively more fields and methods of an object in a series of interfaces. The fields and methods visible to a client then depends on which interfaces the client imports. The latter mechanism is quite flexible. As opposed to the interface/module data-hiding mechanism, opaque types allow you to define an arbitrary number of levels at which more and more information about the implementation of your object is revealed. See Sections 2.2.10, 2.4.6, and 2.4.7 of ``Systems Programming with Modula-3" for more information about opaque types and about partial and complete revelations. Comparisons between Modula-3 and other languages? From: laszlo@post.ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI) "A Comparison of Modula-3 and Oberon-2" by myself in "Structured Programming" 1993, 14:15-22 From: nayeri@gte.com Robert Henderson, Benjamin Zorn, A Comparison of Object-Oriented Programming in Four Modern Languages, Department of Computer Science, University of Colorado, Boulder, Colorado, Technical Report CU-CS-641-93. Available by anonymous FTP and e-mail from ftp.cs.colorado.edu in the file pub/cs/techreports/zorn/CU-CS-641-93.ps.Z The paper evaluates Oberon, Modula-3, Sather, and Self in the context of object-oriented programming. While each of these programming languages provide support for classes with inheritance, dynamic dispatch, code reuse, and information hiding, they do so in very different ways and with varying levels of efficiency and simplicity. A single application was coded in each language and the experience gained forms the foundation on which the subjective critique is based. What is the story with Trestle and OpenWindows? Mark Manasse says: I think that the OpenWindows release should be enough (no need to get the MIT X release), although there are a few things in Trestle that trigger devastating bugs in OpenWindows. But the only library we depend on is Xlib, R4 or later. The main thing I know that crashes OW 2.0 is the code where we call GrabKey specifying AnyKey. You can either loop over all of the keys, or you can just comment out the call; programs won't run exactly the same, but you probably won't notice the difference. Linking with C++ code Apparently there is no problem to call C++ functions declared as extern "C". From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS) You must use your C++ compiler as the linker, rather than /bin/cc or /bin/ld. You need to call the function '_main'. The easiest way to do this is to have the following set of interfaces and implementations: INTERFACE CXXMain; <*EXTERN "_main"*> CxxMain; END CXXMain; MODULE CXXMain; BEGIN CxxMain(); END; and then import CXXMain into your M3 main module. This will ensure that the C++ function "_main" gets called. Flushing writers to see the output immediately Modula-3 Writers are buffered. Thus, you need to issue a Wr.Flush when the output should appear immediately, for instance to prompt the user for some input. Since this can become annoying, libraries in other languages sometimes offer the option of unbuffered writes. In Modula-3, an equivalent behavior is obtained with AutoFlushWr which gets a background thread to flush a writer at a specified interval. Problems with threads and VTALARM The threads are implemented using the virtual timer interrupt. Normally, the run time environment will catch the interrupt and determine if thread switching is appropriate. However, if a new process is created with fork, it will have the virtual timer activated and no interrupt handler to receive it, resulting in a core dump. If you use the standard procedure Process.Create to fork new processes, this will be handled automatically for you. If you insist on using fork, you need to disable the timer, fork and then reenable the timer. What is the purpose of BRANDED and REVEAL Allan Heydon writes: These two keywords are necessary because of two quite different features of the language. REVEAL is necessary because Modula-3 has opaque types and partial revelations. BRANDED is necessary because the Modula-3 type system uses structural equivalence instead of name equivalence. In Modula-3, the concrete structure of a type can be hidden from clients in an interface. A common idiom is: INTERFACE I; TYPE T <: TPublic; TPublic = OBJECT (* fields *) METHODS (* methods *) END; END I. The line "T <: TPublic" introduces the type "I.T" as an opaque subtype of the type "I.TPublic". It does not reveal any of the other details of the concrete structure of "I.T" to clients. Hence, "I.T" is said to be an opaque type. Put another way, the structure of "I.T" is only partially revealed to clients. In addition, it is possible to reveal more of "I.T"'s structure in other interfaces, like this: INTERFACE IRep; IMPORT I; TYPE TPrivate = I.TPublic OBJECT (* more fields *) METHODS (* more methods *) END; REVEAL I.T <: TPrivate; END IRep. This interface declares a type "IRep.TPrivate" that is a subtype of "I.TPublic". It also asserts that "I.T" is also a subtype of "IRep.TPrivate". A client that imports only the interface "I" has access only to the fields and methods in "I.TPublic" when accessing an object of type "I.T", but a client that imports both "I" and "IRep" also has access to the fields and methods in "IRep.TPrivate" when accessing an object of type "I.T". The "REVEAL" statement in this module simply asserts a subtype relation. Unlike type declarations, revelations introduce no new names. Hence, we could not have used the "TYPE" keyword in this case because the type "I.T" has already been declared once (albeit opaquely) in interface "I". Every opaque type must have a complete revelation. A complete revelation has the form: REVEAL T = TConcrete; The revelation specifies that "TConcrete" is the concrete type for the opaque type "T". The Modula-3 type system uses structural equivalence instead of name equivalence. This means that two types are equal iff they have the same structure. One consequence of this rule is that two types you might intend to be distinct may actually be equal. This can have unintended effects on the run-time behavior of your program. For example, if both types that you expect to be distinct are actually structurally equivalent and the two types guard two arms of a TYPECASE statement, the arm for the second type will never be taken. If you want to avoid accidental equalities between two types, you can brand one (or both) of them with the BRANDED keyword. A branded type is equivalent to no other type, even if it is structurally equivalent to some other type. In essence, the BRANDED keyword adds a bit of virtual structure to the type that guarantees it will be distinct from every other type. The Modula-3 syntax allows you to supply a text constant as a name for the brand. If you don't supply an explicit brand, the compiler will make one up; however, the implicit brand invented by the compiler is not guaranteed to be chosen deterministically. Hence, explicit brands are useful if you are communicating types from one process to another and if you want to be sure that the branded type written by one process matches the branded type read in by the other. Any two opaque types in a program must be distinct. Otherwise, it would be too easy for clients to accidentally trip over type collisions like the TYPECASE example mentioned above. To enforce the restriction that all opaque types are distinct, the language requires that the type "TConcrete" in the complete revelation above must be a branded type. Why uppercase keywords Some people prefer uppercase keywords others hate them. Another possibility is to accept both forms for keywords. This topic has been discussed at length and there is no solution that will completely satisfy everyone's tastes. Fortunately this is a very minor issue and you can easily have lowercase keywords automatically converted for you using a macro package like m3su (pion.lcs.mit.edu:/pub/m3su) for emacs. lowercase keywords macro M3build versus Make or why m3 does not work The Modula-3 compiler m3 does a much finer grained dependency analysis than possible with make. For this reason, a very flexible front end, m3build, reads the program description files, m3makefile, and generates the commands required to compile and link Modula-3 programs and libraries. The m3makefile content is documented in the m3build documentation. Calling the m3 compiler directly is difficult and thus not recommended. Missing RTHooks or similar messages The standard library, libm3, is not included by default. You need in your m3makefiles to import(``libm3'') or to import a library which imports libm3. Otherwise, messages about run time procedures such as RTHooks not being available are produced. m3build The program receives a SEGV signal under the debugger The garbage collector on some platforms uses the SEGV (segmentation violation) signal to detect modified portions of the dynamically allocated space. It is possible to disable this feature or to inform the debugger to let these signals propagate. See the tips on how to use the debugger. debugging What is M3-lite, MS-Windows support M3-lite is a research project at DEC SRC to see how fast Modula-3 programs could be compiled and linked. It uses an integrated m3build, m3 compiler and code generator (based on Burs) and is targeted at Win32 (Windows NT or Windows Chicago). Research projects, by definition, do not have release dates. Part of this work, when ready, may also serve on other platforms, especially LINUX and FreeBSD since they are intel based. FTP How To Obtain Pre-Compiled Binaries The following binaries are available for FTP. If you are willing to provide binaries for other architectures, please contact dagenais@vlsi.polymtl.ca; they may be put on his FTP server or links to your server can be included in the FAQ. The full exploded source code tree is available along with the SPARC binaries. * Release 3.3 SPARC binaries. Contains most of the 3.3 release and comes with static and shared libraries. If you have problems building the 3.3 release for SPARC, you may want to look at the lude/modula3-3.3/src/poly directory as it contains all the locally modified files. The original source code is available in lude/modula3-3.3/src/orig and may be browsed to see examples of m3makefiles amd Modula-3 code. Requesting a directory with .tar.Z added to its name will automatically generate the corresponding compressed tar file. It can be retrieved from ftp.vlsi.polymtl.ca:lude/modula3-3.3/run/poly.tar.Z and should be placed in /usr/local/soft/modula3-3.3/run/poly... Then, /usr/local/soft/modula3-3.3/run/poly/sun4.1_sparc/bin must be added to your path. Compiled by Michel Dagenais. SPARC Modula3-3.1 * Release 3.3 LINUX binaries. It can be retrieved from ftp.vlsi.polymtl.ca:pub/m3/linux/src-m3-3.3l0.tar.gz and should be placed in /usr/local/soft/modula3-3.3... Then, /usr/local/soft/modula3-3.3/run/bin must be added to your path. Compiled by Michel Dagenais. LINUX Modula3-3.3 * Release 3.3 HPPA binaries. It can be retrieved from ftp.vlsi.polymtl.ca:pub/m3/hppa. Compiled by Bert Laverman. HPPA Modula3-3.3 * Release 3.3 68000 NeXT binaries. It can be retrieved from ftp.vlsi.polymtl.ca:pub/m3/next. Compiled by Thomas Neumann. NeXT Modula3-3.3 What if I don't have ftp access? Unfortunately, DEC SRC cannot deliver Modula-3 other than by anonymous ftp. Fortunately, Prime Time Freeware (PTF) includes Modula-3. PTF is a set of two ISO-9660 CDroms filled with 3GB of freeware, issued semi-annually. The latest issue, Volume 1, Number 2, July 1992, contains SRC Modula-3 2.07. PTF is distributed via bookstores and mail. You can reach PTF using: Email: ptf@cfcl.com Fax: [1] (408) 738 2050 Voice: [1] (408) 738 4832 Mail: Prime Time Freeware 415-112 N. Mary Ave., Suite 50 Sunnyvale, CA 94086 USA CONTRIBUTING Can I contribute Modula-3 software? Certainly. Send to m3-request@src.dec.com what you are willing to share, be it programs, libraries or other things. They will be put in the distribution. Right now, the pub/DEC/Modula-3/contrib directory contains: Contrib * m3rpc a Sun RPC system from Xerox Parc * M2toM3 a translator from Modula-2 to Modula-3 * m3pc an implementation of Modula-3 for PCs. You will also find on ftp.vlsi.polymtl.ca in pub/m3: Modula-3 contributions * present-src-m3 slides for presenting the Modula-3 tools and libraries. * cache-anim a zeus graphical animation of the computer memory hierarchy. * realgeometry a floating point geometry package. * sequences sequences allowing insertions in the middle. ILU, an object-oriented multi-lingual RPC-capable module system The following was recently announced by Xerox PARC: Version 1.6.4 of the Xerox PARC Inter-Language Unification (ILU) system is now available for general use. WHAT'S ILU? ILU (pronounced eye'-loo) is a system that promotes software interoperability via interfaces. Interfaces between what? Whatever units of program structure are desired; we call them by the generic term "modules". They could be parts of one process, all written in the same language; they could be parts written in different languages, sharing runtime support in one memory image; they could be parts running in different memory images on different machines (on different sides of the planet). A module could even be a distributed system implemented by many programs on many machines. Calls across ILU interfaces involve only as much mechanism as necessary for the calling and called modules to interact. In particular, when the two modules are in the same memory image and use the same data representations, the calls are direct local procedure calls - no stubs or other RPC mechanisms are involved. ILU modules are known by their interfaces. A module interface is specified once in ILU's object-oriented Interface Specification Language (called, simply, ISL). For each of the particular programming languages supported by ILU (currently Common Lisp, ANSI C, C++, and Modula-3; Python, Tcl, and GNU Emacs-Lisp are in the works), a version of the interface in that particular programming language can be generated. The ILU kernel library provides services which may be used by the language-specific interface to overcome intermodule language or address space differences. GETTING THE RELEASE The release is only available via FTP from the PARC ftp server. Perhaps the simplest way is to go through our World Wide Web home page, ILU CONTRIBUTORS Antony Courtney, Doug Cutting, Bill Janssen, Denis Severson, Mike Spreitzer, Mark Stefik, Farrell Wymore MODULA-3 FOR TEACHING Modula-3 is very well suited for teaching: simple yet powerful, and safe. It avoids the complexity of legacy languages. It can be used to demonstrate modules and interfaces, object oriented programming, multi-threading (concurrency issues), graphical user interfaces (Trestle, VBTKit, FormsVBT) and even distributed programming (Network Objects, Obliq). Since less time is spent by students and teaching assistants chasing dangling pointers and corrupted data, more time is available for learning the important concepts. It is used for teaching in a number of universities. This list is far from complete, send corrections and additions to dagenais@vlsi.polymtl.ca. From: Carsten Whimster (bcrwhims@undergrad.math.uwaterloo.ca) University of Waterloo: CS246 - Third introductory course in computer science. Software engineering and software systems. Medium size projects. Uses Modula-3 to demonstrate proper OO programming, as well as general programming practices. CS241 - Fourth and final intro course to CS. Focuses mainly on compilers and languages. Various assignments has students create most of the different parts of a compiler. Also introduces Scheme (lisp). From: Peter.Robinson@cl.cam.ac.uk University of Cambridge, England. The Computer Science course at the University of Cambridge teaches ML as an introductory language at the beginning of the freshman year, and then uses Modula-3 to develop imperative programming at the end of that year. Further lectures on advanced features of the language are given early in the second year, together with separate lectures on other, specialised languages. The course has been given to about 70 students each year since 1990, and has developed with the language. It ties in with other lectures on data structures and algorithms, software engineering and concurrency. Modula-3 is used for student group projects in the second year and for about a quarter of individual projects in the final year (where, interestingly, students using Modula-3 tend to earn higher grades than those using C/C++). Modula-3 is also used in the Computer Laboratory at Cambridge for a number of research projects on distributed computing, human-computer interaction and electronic CAD. From: Matthew.Huntbach@dcs.qmw.ac.uk We have used it for three years here at Queen Mary and Westfield College, London. The main problem I find with the language is the slow compilation speed on our teaching machines (Macs running A/UX), otherwise it's a nice language to teach with. From: laszlo@ifi.uni-klu.ac.at (Laszlo BOESZOERMENYI) University Klagenfurt Modula-3 is used at the following courses: Undergraduate: Softwaretechnology-1 (actually an introduction into programming) (on PCs) Softwaretechnology-2 (data structures and algorithms) (on PCs) Graduate: Computer Networks (on a network of DECs and SUNs) Parallel Programming (on an DEC-Alpha Farm) Modula-3 has been in use since ca. one year, with very good experiences. From: pk@i3.informatik.rwth-aachen.de (Peter Klein) Lehrstuhl fuer Informatik III, RWTH Aachen, Germany: Software Development Projects, now held for the second time using Modula-3. Aim of these projects is to introduce different aspects of software development to graduate students. This includes project planning, supervision, design, and cooperative implementation of small but usable software systems. Central ideas of software design and object-oriented implementation are presented and discussed with the concepts of Modula-3, which is also the implementation language. Future plans: Maybe Modula-3 will replace Modula-2 in some undergraduate programming lectures in the future. From: rro@cs.colostate.edu (Rod Oldehoeft) In the Computer Science Department at Colorado State University, M3 is envisioned as a vehicle for several courses. M3 is introduced in the second course (data structures) to implement the ADT concept, including generics. In the sophomore languages course, it is an example of an O-O language. In the junior software engineering course, additional relevant features are brought in, and threads are added in the junior operating systems course. From: viggo@nada.kth.se Royal Institute of Technology. Several courses at the computer science department use Modula-3. The courses contain programming projects, and many students choose to use Trestle. (Dr. Viggo Kann, viggo@nada.kth.se) From: "Dave Snelling" (snelling@cs.man.ac.uk) Department of Computer Science, University of Manchester, Manchester U.K. We have a small, interdisciplinary collection of people using Modula-3 for a variety of activities. Our major production code is a hardware architecture simulator (about 120 modules). Smaller projects include a Lattice Gass model and a Shallow Water model. At: University of Massachusetts at Amherst Modula-3 is used as an input language for the Computer Science course on Compilation techniques. The professor is Eliot Moss. From: Michel Dagenais (dagenais@vlsi.polymtl.ca) Modula-3 is used as the main example in a graduate course on ``Algorithmic Aspects of CAD'', which includes a large portion on OO programming and databases. From: pbh@cs.sunysb.edu (Peter Henderson) Modula-3 is currently used for teaching Computer Science I and Computer Science II at SUNY at Stony Brook. We are currently developing a sequence of laboratory assignments and case studies introducing OO techniques and software reuse in these two courses. The first course for computer science majors at Stony Brook is "Foundations of Computer Science" which emphasizes general problem solving, mathematics and the relationships between mathematics and computer science. There is an extensive laboratory component using theorem provers, Prolog and Standard ML. MODULA-3 IN INDUSTRY A number of programming teams in industry selected Modula-3 for their project. It encourages good programming practices and comes with excellent libraries for distributed programming and graphical user interfaces. From: gwyant@cloyd.East.Sun.COM (Geoffrey Wyant - Sun Microsystems Labs BOS) Sun Microsystems Laboratories, Inc. (East) is using Modula-3 (Network Objects, FormsVBT) as the basis for its research in large scale distributed object systems. From: Farshad Nayeri (nayeri@gte.com) Distributed Object Computing, GTE Labs, Waltham, Massachusetts USA Modula-3 (FormsVBT, Sx, Netobj libraries) is used to prototype distributed object management. (Farshad Nayeri nayeri@gte.com). Report WORK IN PROGRESS The purpose of this section is to let everyone know what is being worked on. This is not a commitment to a quick release or even to completion. However it may enable parties interested in the same topics to pool their efforts, avoid duplication or better integrate their packages. To find more information about the names mentioned, see the Who's Who section. The SRC Compiler The compiler already implements the full language and runs on several platforms. Speed enhancements and support for some popular non-Unix platforms may be expected. Modula-2 To Modula-3 Converter A better Modula-2 to Modula-3 converter (99%conversion...) is in the works under the supervision of Peter Klein. Integrated Development Environment A number of groups have made experiments in this area. Tools such as VBTkit for the user interface, m3tk for syntax and dependency analysis, dynamic linking... could be used to produce such an environment. It is worth noting that precompiled interfaces are much easier to achieve in M3 than in several other popular languages. Peter Klein is working on a Modula-3 development environment and associated user interface. See the paper entitled ``Designing Software with Modula-3'', it describes a software architecture description language based on Modula-3. Report Klaus Preschern, Carsten Weich, Laszlo Boszormenyi have made the port of Modula-3 to the PC. The M3-PC environment will be enhanced, especially with threads and graphics, including a student-friendly environment. David N. Gray of Lucid Inc. has been experimenting with connecting the Modula-3 compiler with the Lucid Energize Programming System (currently sold as a development environment for C and C++ on Sun SPARCstations). The modified compiler is available as an unsupported as-is hack, to accompany the new Energize release that it works with. Energize Modula-3 Geoff Wyant is experimenting with FormsVBT/VBTKit to build a simple friendly development environment. Windowing And User Interfaces ROTATED TEXT Currently, there is no VBT to show non horizontal text, because of X windows limitations. This would be desirable and can be implemented in one of the following ways: a) open a pipe to the ghostscript Postscript interpreter and use it as a font renderer, cache and display the character bitmaps produced; b) have Bezier curves for the most popular Postscript fonts, Trestle handles Bezier curves; c) use the new text facilities in X11R6 that remove previous limitations. A prototype implementation of a) has been implemented by Alain Dube (contact Michel Dagenais); the performance with the cache is good but this remains a relatively complex solution. The b) solution would be relatively easy to implement but the resulting quality may not be as good as a real font renderer. The c) solution may not be available for some time since many workstation vendors take a long time before integrating the new X windows facilities. POSTSCRIPT VBTS It is often useful to display Postscript files in a VBT, for example for an included diagram in a document editor. This can be achieved by using the ghostscript Postscript interpreter as a rasterizer. A prototype has been programmed by Alain Dube (contact Michel Dagenais) but the performance is not too good when large color bitmaps are handled. An alternative implementation is to convert Postscript files into display lists (Bezier curves and text) as a preprocessing step. Further displaying and even editing becomes very simple. A prototype implementation of this has been done by Benoit Poirier (contact Michel Dagenais). Persistent Objects With Pickles to store objects in files, the implementation of persistent objects is simplified. Furthermore, with the m3tk library it is not too difficult to read a type description and to write the needed methods to handle that type. Combined with FormsVBT, network objects and Obliq, all the ingredients are there to have a nice environment for developing graphical distributed applications with persistent state and querying facilities. Peter Klein has a specialized database for annotated graphs, GRAS, that is being re-implemented in Modula-3. Eliot Moss is working on persistent Modula-3 objects. The main features are persistence through reachability, load on demand and a very low overhead for using persistent objects. The high performance is obtained by modifying the compiler and run-time. Initially a modified version of GCC, GNU M3, was being worked on. However, with the release of the SRC native compiler, the modifications are being moved to the SRC compiler instead. Persistency Abstract Syntax Tree Tools (M3 Parser) The m3tk library can be used to analyze Modula-3 source code in order to find specific constructions (use of OBSOLETE facilities, un-handled exceptions), build source code browser and analysis tools, stubs generators for network or persistent objects... Mick Jordan is preparing the 3.2 release of m3tk and finishing the documentation, in his spare time. From: hudson@yough.ucs.umass.edu (Rick Hudson) If anyone is interested we have developed a Bison grammar that parses the Modula-3 language input. If interested please feel free to contact me hudson@cs.umass.edu. Computer Assisted Learning Tools (Algorithm Animation) The Zeus Algorithm Animation package may be used to quickly develop graphical and animated teaching aids. Most of the algorithms described in Robert Sedgewick's Algorithms book have been animated at DEC SRC through the work of Marc H. Brown. Animation of compilation techniques have been produced by students at University of Illinois with the help of Marc Najork. From: "Arnulf Mester" (mester@ls4.informatik.uni-dortmund.de) As part of a studental project advised by a college of mine and me a Mentor-like collection of Zeus-based animations of typical distributed algorithms and communication protocols (termed ZADA) has been compiled. Hopefully I'll get to include more information and access during the next weeks into our ZADA WWW home page ZADA Presentations, Tutorials And Teaching Material Modula 3 is used for teaching in a number of Universities. Some Modula-3 related teaching material may be shared between interested parties. Michel Dagenais has a French presentation about the Modula 3 language that could be distributed. Geoff Wyant is preparing a tutorial on Modula-3 for the upcoming OOPSLA conference. Reports And Books Sam Harbison is preparing a revised version of his existing book on Modula-3. He may include more material on the new libraries. Laszlo Boszormenyi, Roland Mittermeir and Carsten Weich are working on a book (it will be published in German and in English) with the work-title: "Programming in Style - An Introduction into Programming with Modula-3" The book will be published at Springer (in German in October 1994, in English maybe or December, or January 1995). For the book, the M3-PC environment will be enhanced, especially with threads and graphics, including a student-friendly environment. A book about writing distributed object oriented applications, using Modula-3, m3build, m3gdb, analyze_coverage, FormsVBT, Obliq and Network Objects is being planned by Geoff Wyant, Farshad Nayeri and Michel Dagenais. From: BERGINF@PACEVM.DAC.PACE.EDU (Joseph Bergin) I am also at work on a Modula-3 college level textbook. It will cover the data structures course and will stress data abstraction. It will be similar to my current book: Data Abstraction: The Object-Oriented Approach using C++, published by McGraw Hill. Status: The software has been built and I am currently writing the text itself. Joe Bergin, berginf@pacevm.dac.pace.edu, Pace University Parallel Programming From: Ernst A. Heinz, University of Karlsruhe, F.R. Germany (email: heinze@ira.uka.de) I would like to inform you about our ongoing Modula-3* project here at the University of Karlsruhe. At the moment, we are actively involved in adding sophisticated dependence and data flow analysis to DEC's Modula-3 compiler (release 3.x!). The Modula-3* compiler will be able to generate code for real parallel machines, for networks of workstations, and for standard sequential execution. (Our new IPD Modula-2* system available by anonymous ftp from ftp.ira.uka.de in "pub/programming/modula2star" may give you an initial feeling about it!) For all interested folks I have made my JSPP'93 paper publicly available by anonymous ftp. The title of the paper reads as follows: "Modula-3*: An Efficiently Compilable Extension of Modula-3 for Problem-Oriented Explicitly Parallel Programming". Paper More recent work includes E.A. Heinz. Sequential and parallel exception handling in Modula-3*: A unifying semantics specification. In P. Schulthess (editor). Advances in Modular Languages: Proceedings of the Joint Modular Languages Conference, pages 31-49, Ulm, Germany, September 28-30, 1994. Paper WISH LIST The Modula-3 development environment now contains a large number of very good tools and libraries that work nicely together. The purpose of this section is to help contributors determine what additions would be helpful to others. It may get you in contact with people that would like to use your contribution or with people that may provide some items on your wanted list or team with you for their development. M3Build The descriptions of programs and libraries stored in m3makefiles are simple and efficient. It would be interesting to be able to specify different m3-options for some files (debugging, performance analysis...), and to have the dependency analysis take into account previously used options when determining modules to recompile (Michel Dagenais). Although makefiles cannot perform the same consistency checks as m3build and are more cumbersome to use, it may be useful to be able to drive the compiler through makefiles for training purposes (i.e. learn Modula-3 and Makefiles at the same time) (bwbecker@watdragon.uwaterloo.ca). Coverage And Performance Analysis Tools already exist for coverage analysis, pretty printing, performance analysis, viewing the threads and the garbage collected heap. It would be nice to have these easily accessible through an integrated development environment (Michel Dagenais). More VBTs An editor widget with multiple fonts (fixed and proportional character spacing) perhaps even with direct support for HTML (item lists, centered headings...) (Geoff Wyant, Farshad Nayeri). A diagram editor widget (Farshad Nayeri). A split VBT that positions NxM childs in aligned rows and columns (Geoff Wyant). A Graph VBT that displays arbitrary graphs (such as call trees, cross references...). This could be implemented adding a placement module (to determine the vertex positions) to work on the existing GraphVBT module (Geoff Wyant). Some of the VBTs implemented in miscellaneous libraries (such as GraphVBT in Mentor/Zeus) could be placed in a more visible location such as VBTKit (Michel Dagenais). MIME extensions to Postcard (Farshad Nayeri). Submit Trestle to a graphical designer (Farshad Nayeri). Distributed Computing (Network Objects) Network objects are an exciting recent addition. The underlying model is very simple and effective. Authentication and access control will be required in many applications. A network object daemon that starts specific programs upon need, like inetd does using inetd.conf for most network services, would be very useful (Michel Dagenais). Interfaces To Other Libraries And Programs (Tcl, Dps...) C functions are easily called from Modula 3. Thus, stubs have been produced to access John Ousterhout's Tcl and also Display Postscript from Modula 3. An automatic tool to produce such stubs from .h C files would be very useful (Geoff Wyant). Stubs to access the Motif X Windows library would be useful (Geoff Wyant). Similar stubs would be desirable to access databases such as Postgres or Exodus and access/provide World Wide Web information using the hypertext transfer protocol libraries (HTTP) (Geoff Wyant). WHO'S WHO Modula-3 enthusiasts, users or contributors. Please notify me for additions, corrections or removals. * Robert Ayers, Adobe, (ayers@Mv.Us.Adobe.Com), the Display Postscript to Modula-3 interface * Andrew Birrell, DEC SRC, (birrell@src.dec.com), Network objects. * Laszlo Boeszoermenyi, Universitaet Klagenfurt, Austria, (laszlo@ifi.uni-klu.ac.at), PC port (m3pc), Programming in style book. * Marc H. Brown, DEC SRC, (mhb@src.dec.com), VBTKit, FormsVBT, Zeus. * Luca Cardelli, DEC SRC, (luca@src.dec.com), Modula-3 definition, Obliq. * Michel Dagenais, Ecole Polytechnique de Montreal, (dagenais@vlsi.polymtl.ca), LINUX and SPARC M3 binaries, M3 FAQ. * John D. DeTreville, DEC SRC, (jdd@src.dec.com), Incremental garbage collector. * David N. Gray, Lucid Inc., Menlo Park, (gray@Lucid.Com), interface between the Lucid environment and the M3 compiler. * Sam Harbison, Tartan, harbison@tartan.com, Modula-3 book. * Ernst A. Heinz, University of Karlsruhe, F.R. Germany (heinze@ira.uka.de) * Allan Heydon, DEC SRC, (heydon@src.dec.com), IP, Lex, Fmt, PQueue, DblBufferVBT modules. * Jim Horning, DEC SRC, (horning@src.dec.com), Useful Modula-3 interfaces. * Rick Hudson, University of Massachusetts at Amherst, (hudson@cs.umass.edu), GNU Modula-3. * Mick Jordan, Sunlabs near Palo Alto, mick.jordan@eng.sun.com, Modula-3 definition, M3TK and related tools. * Bill Kalsow, DEC SRC, (kalsow@src.dec.com), Modula-3 definition, M3 compiler and run-time. * Peter Klein, Lehrstuhl fuer Informatik III, (pk@i3.informatik.rwth-aachen.de). Modula-2 to Modula-3 converter. * Bert Laverman, Groningen University, (laverman@cs.rug.nl), HPPA support. * Mark S. Manasse, DEC SRC, (msm@src.dec.com), Trestle. * Paul McJones, DEC SRC, (mcjones@src.dec.com), Useful Modula-3 interfaces. * James R. Meehan, Adobe (jmeehan@mv.us.adobe.com), VBTKit, FormsVBT. * Roland Mittermeir, Universitaet Klagenfurt, Austria, (mittermeir@ifi.uni-klu.ac.at), Programming in style book. * Eliot Moss, University Of Massachusetts At Amherst, (moss@Cs.Umass.Edu), GNU Modula-3. * Eric Muller, DEC SRC (moved?), (muller@src.dec.com), M3 compiler and run-time. * Marc Najork, DEC SRC, (najork@src.dec.com), 3D animation. * Greg Nelson, DEC SRC, (gnelson@src.dec.com), Modula-3 definition, Systems Programming with Modula-3 book editor, Trestle, Network objects. * Farshad Nayeri, GTE Labs Near Boston, (nayeri@Gte.Com), m3-sparc mailing list. * Frode Odegard, (frode@Odegard.Com), commercial Modula-3 support. * Susan Owicki, Stanford University, (owicki@mojave.stanford.edu), Network objects. * Klaus Preschern, Universitaet Klagenfurt, Austria, (preschern@ifi.uni-klu.ac.at), PC port (m3pc). * Robert Sedgewick, Princeton University, Algorithms in Modula-3 book. * Jorge Stolfi, University of Campinas, Brazil, (stolfi@dcc.unicamp.br), Computational geometry procedures. * Carsten Weich, Universitaet Klagenfurt, Austria, (weich@ifi.uni-klu.ac.at), PC port (m3pc), Programming in style book. * Edward Wobber, DEC SRC, (wobber@src.dec.com), Network objects. * Geoff Wyant, Sunlabs Near Boston, (gwyant@East.Sun.COM), SPARC port. _________________________________________________________________ Michel Dagenais, dagenais@vlsi.polymtl.ca, Mon Nov 14 11:38:58 GMT 1994 -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 64 === Date: 16 Nov 1994 20:30:11 -0600 From: kitana!sysop@caprica.com (JL Gomez) Subject: newbie compilation how? I've got the Harbison book on Modula-3 and the Linux version of Modula-3. I've been told I need to compile the first example in the book with m3makefile. I've looked at the docs at SRC via WWW but I still don't know how to create a m3makefile to compile the program. Here is the program: MODULE Hello1 EXPORTS Main; IMPORT Wr, Stdio; BEGIN Wr.PutText(Stdio.stdout, "Hello, World!\n"); END Hello1. Can someone e-mail me a m3makefile to compile this program? What about m3build? Thanks for the help! -- sysop@kitana.org ======================================================================= 65 === Date: 16 Nov 1994 21:13:38 GMT From: schaub@ponder.csci.unt.edu (Stephen Schaub) Subject: Unbuffered/raw terminal input > > Stepen Schaub asks: > > Is there an OS-independent way to do unbuffered or raw terminal > input using Modula-3? > > The answer is not currently. I am disappointed, but not surprised. When I began looking into the matter, I found that different flavors of Unix do unbuffered or raw input in different ways. I'm no UNIX guru, and the thought of wading into low-level I/O stuff that isn't portable isn't very appealing. > If there are very useful OS-dependent functions, then it also seems > reasonable to add them to interfaces like TerminalPosix, etc. Unbuffered terminal input is rather useful for interactive programs, and I would think almost any OS Modula-3 runs under supports it. It would seem that putting it in an OS-dependent section would reduce portability unnecessarily. If an implementation for unbuffered input were provided for the various OS's, could the Terminal interface be neatly extended to provide for that functionality? Thanks for the info! Stephen Schaub ======================================================================= 66 === Date: 17 Nov 1994 16:26:28 GMT From: chase@centerline.com (David Chase) Subject: Re: typesafe C -> M3 calls. nayeri@gte.com (Farshad Nayeri) writes: > Marc Fiuczynski replied: > In M3 version 3.x a procedure defined in an interface is not > accessible globally (anymore) using the I__P name mangling. Instead, a > procedure P is called indirectly through an interface record > (vtable?). This makes it just a little harder to call M3 from C. > There is definitely a need for a tool that automates this process > without causing grief for either the C or M3 programmer. This way > people can make ordinary Modula-3 libraries readily available to C > programs. This helps legitimize the use of M3 to some extent. I think there's two approaches to consider. Back in the Olivetti Modula-3 days, we needed just such a tool for the (written-in-C, a mistake) backend when we translated the front-end from Modula-2+-and-IDL to Modula-3. I recall that I used a stylized piece of Modula-3 (I think it may also have been automatically generated) run through the Modula-3 compiler to generate C, and then I ran an awk script over the generated C to create a file full of C macros that performed the relevant calls. Ugly, but expedient (I only needed it once). A much better approach than this would be to add an option to the compiler (or create some other tool) that would generate a C interface file for accessing objects. I'd expect that this would: 1. generate a "struct foo" for "foo" that was an object type (with no elaboration of the contents), prefixed by the module name. Thus, "struct Text_T" for Text.T. 2. for each method which could be applied to a "foo", generate the appropriate macro, suffixing the type name with the method name, as in: Thread_Closure_apply(x) ^ ^ ^ ^ | | | object of type Thread.Closure | | method name | type name interface name This is pedestrian, but predictable. 3. It might be better, given the current state of market in debuggers, to create procedures instead (or perhaps, in addition). 4. If it is necessary for the C program to (say) allocate some of these, then the macros/procedure names might take the form: Thread_Closure_NEW() Similarly, if you want to manipulate the types themselves, you could use Thread_Closure_TYPE (some type handle), and if you wish to access the type of an object (again, a handle) REF_TYPE(x). 5. Array types are a problem, especially when you get into the more entertaining combinations (passing a conforming open array to a fixed array value parameter, for example). Presumably, there'd be some optional way to prefix all these generated names to allow some small bit of namespace management (note that macros are preferred in this case, since their effect is confined to a single source file, unlike procedures). And, of course, if you wanted checking, you could generate that into the macros as well, or generate an alternate form (e.g., Thread_Closure_apply_checked(x). David Chase, speaking for myself CenterLine Software ======================================================================= 67 === Date: 17 Nov 1994 17:18:14 GMT From: connolly@ulua.hal.com (Dan Connolly) Subject: BYTESIZE(CHAR)=1 in FileRd.m3??? WideText interfaces? [I posted about this a while ago, but I think my news software ate it.] I have been in the middle of discussions about character sets, encodings, Unicode, UTF-8, ad nauseum in the HTML forums, so I noticed the following code in FileRd.m3: http://www.research.digital.com/SRC/m3sources/html/rw/src/Common/FileRd.m3 n := rd.sourceH.read( SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0, NUMBER(rd.buff^)), mayBlock := NOT dontBlock) This code seems to assume that NUMBER(rd.buff^) = BYTESIZE(rd.buff^), which implies, since rd.buff^ is an ARRAY OF CHAR, that BYTESIZE(CHAR)=1. In the language definition, it says: CHAR An enumeration containing at least 256 elements The first 256 elements of type CHAR represent characters in the ISO-Latin-1 code, which is an extension of ASCII. Nowhere (that I can find) does it say that BYTESIZE(CHAR)=1. Would someone care to characterize the above code as: (1) an isolated defect in the libm3 code -- easily fixed. (2) a pervasive defect in libm3 -- lots of work to fix it. (3) by design -- libm3 is not designed to work on platforms where BYTESIZE(CHAR)>1. (4) correct -- the language definition guarantees BYTESIZE(CHAR)=1, and I just didn't see it. My guess is (2) or (3). So... has anybody worked on applications involving multibyte character encodings or wide characters? Has anyone developed a WideText, WideWr interface or some such? How about UTF-8 -> Unicode tranlations? Doesn't Windows-NT use a 16-bit character representation in many of its data structures? I wonder what type is used for those data structures... (surf surf surf... ah!) * UNICODE (Wide Character) types TYPE WCHAR = Ctypes.unsigned_short; (* wc, 16-bit UNICODE character *) which is: [-16_8000 .. 16_7fff] (by the way... doesn't WinNT.i3 border on copyright infringement, or divulging trade secrets or somesuch?) -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 68 === Date: 17 Nov 1994 22:58:13 GMT From: connolly@ulua.hal.com (Dan Connolly) Subject: efficiency of VBT/Tresle on X? I have written lots of code to display documents on X displays, and I'm now doing it again, this time in Modula-3. The first thing I noticed was that VBT.Leaf's are transparent, and I couldn't figure out how to have the associated X window use a background pixel or pixmap. Having to explicitly paint the background is a waste. Hmm... perhaps it's because several VBT.Leafs may share an X Window. I haven't delved far enough to find out how X Windows are allocated among VBTs. I hope it's not like InterViews 3.x, where there's one great big X window for all the objects to share! Then I noticed that VBT.PaintText's arguments essentially specify the state of an X graphics context on every call, and I wonder how much of the allocate GC set up GC (color, painting operation,...) draw text release the GC work is done on _every_ call to VBT.PaintText. I can't seem to trace the implementation of VBT.PaintText down do the actual calls to XDrawText. Hmmm... it seems to be building X protocol packets (or something similar) and queueing them... wierd. Lastly, I noticed that the process size of even little teeny FormsVBT applications is HUGE! The m3 compiler typically has a process size of 4MB or so, but unless there's some bug in ps on my machine, FormsVBT apps use 100's of megabytes. They take a _long_ time to start up, and they swap significantly. I'm having fun designing/developing this application in M3, but I'm afraid I won't be able to deploy the result! I guess I'll have to hold my breath and see what M3Lite looks like. Does anybody know if it will support FormsVBT? Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 69 === Date: 18 Nov 1994 00:03:15 GMT From: connolly@ulua.hal.com (Dan Connolly) Subject: SRC M3 linking, footprint questions I once got an error message to the effect that some procedure was mentioned in an interface and not defined in any module. It made me nervous... Recently, someone posted that M3 procedures aren't normal C entry points with global symbols, but rather entries in an interface vtable of some sort. Many C libraries are organized as a few interfaces (.h files), and one module (.c) per procedure, so that applications will link in as little code as possible. Is breaking up an interface into little modules this way supported in SRC M3? It doesn't look like it. It looks like if you import an interface, you link in _all_ the modules that export that interface. Sadness. Lossage. M3 binaries are big. The shared libraries are big. OK -- it's a research project. There's lots of debugging fluff in there. When folks get serious about deploying apps, they'll tackle these issues. Reorganizing libm3 into modules so that you can build reasonably small executables is a big enough job as it is, without the compiler making it impossible! Also, something in the Pkl interface suggested to me that all the names of procedures are available to the application at runtime. (a procedure is pickled as its type and name... I think). This seems to have expensive implications. One more thing: when my programs get a checked runtime error, they print out this pretty but content-free message: *** *** *** Array index out of range *** *** *** or something similar. But I can't get a stacktrace out of m3gdb! (I'm using SRC M3 3.3 on Linux). I can't tell if the M3 runtime is corrupting the stack when it gets a signal handler, or if the debugger just loses its marbles. The debugger _is_ able to give backtraces in other circumstances (like after breakpoints are hit.) I would prefer that the M3 runtime just call abort(), and leave the pretty messages to the application or a debugger. Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 70 === Date: 18 Nov 1994 04:04:25 GMT From: schwartz@roke.cse.psu.edu (Scott Schwartz) Subject: Re: SRC M3 linking, footprint questions connolly@ulua.hal.com (Dan Connolly) writes: When folks get serious about deploying apps, they'll tackle these issues. The optimist. ======================================================================= 71 === Date: 18 Nov 1994 14:25:40 GMT From: kalsow@src.dec.com (Bill Kalsow) Subject: Re: SRC M3 linking, footprint questions In article , connolly@ulua.hal.com (Dan Co nnolly) writes: > > Many C libraries are organized as a few interfaces (.h files), and one > module (.c) per procedure, so that applications will link in as little > code as possible. > > Is breaking up an interface into little modules this way supported in > SRC M3? No. The prelinker checks that interfaces are fully implemented. One reason is that indirect calls through uninitialized procedure slots typically die with PC=0 and the debugger befuddled. > Also, something in the Pkl interface suggested to me that all the > names of procedures are available to the application at runtime. (a > procedure is pickled as its type and name... I think). This seems to > have expensive implications. Yes, all the procedure names and addresses are included in the runtime image. The cost is (4-byte address + ~20-byte name) per procedure. The "average" procedure generates about 256 bytes of code => the names are a 10% overhead in the text segment. But many programs have a K-MByte text segment, K/5-MByte data segment and 5*K-MByte heap. So the final overhead looks more like 2%. > One more thing: when my programs get a checked runtime error, they > print out this pretty but content-free message: > > *** > *** Array index out of range > *** In version 3.4 the source file and line number are included. > But I can't get a stacktrace out of m3gdb! Your debugger is broken. In version 3.4, runtime checks don't depend on signal handlers so it's even more likely that your debugger will be able to make sense of the stack. > I would prefer that the M3 runtime just call abort(), and leave > the pretty messages to the application or a debugger. The is no consensus on this issue. The SRC Modula-3 implementation has flip-flopped several times. - Bill Kalsow ======================================================================= 72 === Date: 18 Nov 94 14:08:36 From: dagenais@gutrune.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: Can't run! : Can't find library 'libm3.so.3' Try setting your LD_LIBRARY_PATH environment variable: setenv LD_LIBRARY_PATH /usr/local/soft/modula3-3.3/lib/m3/LINUX -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 73 === Date: Fri, 18 Nov 1994 09:28:09 -0500 From: douglm@rpi.edu Subject: error messages Danielw W. Connolly wrote (among other things): >One more thing: when my programs get a checked runtime error, they >print out this pretty but content-free message: > >*** >*** >*** Array index out of range >*** >*** >*** > >... >I would prefer that the M3 runtime just call abort(), and leave >the pretty messages to the application or a debugger. > My wish would probably be to go in the other direction. Often the only reason I use a debugging package is to find out where my array index is out of range. If the system is calling a routine to print a message, could it pass the name and line number also? ======================================================================= 74 === Date: 18 Nov 1994 14:38:48 GMT From: kalsow@src.dec.com (Bill Kalsow) Subject: Re: BYTESIZE(CHAR)=1 in FileRd.m3??? WideText interfaces? In article , connolly@ulua.hal.com (Dan Co nnolly) writes: > n := rd.sourceH.read( > SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0, > NUMBER(rd.buff^)), mayBlock := NOT dontBlock) > > This code seems to assume that NUMBER(rd.buff^) = BYTESIZE(rd.buff^), > which implies, since rd.buff^ is an ARRAY OF CHAR, that > BYTESIZE(CHAR)=1. It also assumes that BYTESIZE(CHAR)=BYTESIZE(File.Byte). A better version might be n := rd.sourceH.read( SUBARRAY(LOOPHOLE(ADR(rd.buff[0]), ByteArrayPtr)^, 0, BITSIZE(rd.buff^) DIV BITSIZE (File.Byte)), mayBlock := NOT dontBlock) > > Would someone care to characterize the above code as: > > (1) an isolated defect in the libm3 code -- easily fixed. > > (2) a pervasive defect in libm3 -- lots of work to fix it. > > (3) by design -- libm3 is not designed to work on platforms > where BYTESIZE(CHAR)>1. > > (4) correct -- the language definition guarantees BYTESIZE(CHAR)=1, > and I just didn't see it. It's (1). There isn't much unsafe code and there's even less that must deal with the impedence mismatch between CHAR and File.Byte. But, my experience is that much of the unsafe code is buggy. Programmers who grew up with 8-bit characters on byte-addressed machines (myself included) are quite sloppy with NUMBER, BYTESIZE, and ADRSIZE. > So... has anybody worked on applications involving multibyte character > encodings or wide characters? Has anyone developed a WideText, WideWr > interface or some such? How about UTF-8 -> Unicode tranlations? I haven't heard of any Unicode based work in Modula-3. > Doesn't Windows-NT use a 16-bit character representation in many of > its data structures? I wonder what type is used for those data structures... Windows-NT offers both 8 and 16-bit versions of most of its interfaces. The Modula-3 veneer provides access to both versions. The version 3.4 compiler retains the 8-bit CHAR. > (by the way... doesn't WinNT.i3 border on copyright infringement, > or divulging trade secrets or somesuch?) I don't believe so. It's a translation of a public API. It contains no trade secrets. - Bill Kalsow ======================================================================= 75 === Date: 19 Nov 1994 17:20:11 GMT From: eric@pandora.Las-Vegas.NV.US (Eric J. Schwertfeger) Subject: How resource-hungry is Modula-3 Really? I just installed the src-m3-3.3l2.strip package on my linux machine to learn m3. I was expecting some overhead because the FAQ talked about the question "Why is my hello_world executable so big?" However, I was quite surprised when the vbt calculator had a stripped executable size of almost 200K, and an in-memory resident size of almost 2 Meg. If most of that overhead is fixed for any given vbt application, then it is acceptable (barely). I'm looking for a language/toolkit combination to learn for a rather large project, that being a WYSI(Damn Close) editor. Yes, I've gone permenantly insane. That's beside the point. I'm currently considering very structured C with possibly a Tk interface, C++ with a Fresco interface (I know, not stable), or M3 with a Tressle interface. Given this, how much will the UI part of this project require in m3? I'd like this to at least be usable in an 8 Meg (real) machine, provided nothing else is running. ======================================================================= 76 === Date: Sat, 19 Nov 1994 21:42:32 GMT From: mychng@mobius08.math.uwaterloo.ca (Ch'ng Mei Yen) Subject: Problem With Scopes Hi, I am doing my assignment, and I was just wondering if MODULA-3 is somewhat like PASCAL, scopewise. e.g. Consider this program. MODULE Something EXPORTS Main; IMPORT Whatever; PROCEDURE First : : Something:=Second; END First; PROCEDURE Second() = : : END Second; BEGIN END Something. Can PROCEDURE First call PROCEDURE Second from within the PROCEDURE First itself? Please get back to me. THANKS! -- Mei Y., Ch'ng Village 1, N2 -316, U of W Tel: 725-7055 *************************************************************************** ======================================================================= 77 === Date: Sun, 20 Nov 1994 08:48:17 GMT From: n8243274@henson.cc.wwu.edu (S. Lee ODEGARD) Subject: M3 by Example #1 I intend to spend the next year spare time writing example programs for the M3 by Example project I invite others to do the same. If someone could provide a ftp site for the developing work, I would be very grateful. ----- ----- Standards for M3 by Examples Use ASCII, either IO for file-oriented input and output, or Stdio for interactive input and output. For maximum portability, document with ASCII text. Set as your goal to simply illustrate some of the features of Modula-3 not well illustrated thus far. Provide real-life problems and solutions, or interesting explorations or diversions. ----- ----- The problem The store O_____ is a medium-sized warehouse-type outlet which receives on average 1000 items per day to disperse and stock throughout the store. Though the items are marked as to which section of the store they are to be shelved on, often over 100 shelf spaces per section makes it difficult to quickly locate on the shelf where the items are to be placed. ----- Proposed solution An index, keyed on item number, that displays where on the shelf the items are to be placed. To save the data entry effort, the index is keyed into a text file like this: 614917 1L 614891 640425 640623 1R 640649 640656 2L ... here, the first three lines describe items to be placed on the first shelf from the top on the left-hand side of the shelf. However, before this file can be sorted by item number, each line must have an shelf location present. The program following is simply to parse each line of such a file, and output to a new file, providing all of the locations, like this: 614917 1L 614891 1L 640425 1L 640623 1R 640649 1R 640656 2L ... ----- The program MODULE ixcat EXPORTS Main ; (* Index-category: Input has on each line an item number optionally followed |* by other information: |* Output has other information repeated for all subsequent lines where |* only an item nubmer appears. *) IMPORT Stdio, Wr, Rd, IO, Text ; IMPORT Thread ; VAR item_loc : TEXT := "" ; (* Read in text line, and determine if (A) item number is entered or |* (B) item number and location is entered. If (B), set global variable |* item_loc to item location text. |* |* Parse text line, and determine if one field or more than one field are |* entered. If more than one field, remove all but first field, and copy |* all but first field to variable item_loc. |* |* pre l : input line to parse |* l post : first field of input line only, or "" if input line is all |* whitespace characters. |* - |* pre item_loc : all but first field of previous line that contains more than |* one field. |* item_loc post : no change if zero or one fields in input line; |* second thru the last fields if more than one field is present. |* |* definitions: |* field - consecutive group of printing characters surrounded by white-spaces. *) PROCEDURE lp( VAR l : TEXT ) = (* line parse *) VAR p1, q1, p2, el : CARDINAL ; BEGIN (* parse _l_, and determine where first field begins; set this to _p1_ *) p1 := 0 ; WHILE p1 < Text.Length( l ) AND Text.GetChar( l, p1 ) <= ' ' DO INC( p1 ) END ; IF p1 = Text.Length( l ) THEN (* abort if all whitespace characters *) l := "" ; RETURN END ; q1 := p1 ; (* determine first space following first field; set this to _q1_ * ) WHILE q1 < Text.Length( l ) AND Text.GetChar( l, q1 ) > ' ' DO INC( q1 ) END ; (* parse for where second or remaining fields begin; set this to _p2_ *) p2 := q1 ; WHILE p2 < Text.Length( l ) AND Text.GetChar( l, p2 ) <= ' ' DO INC( p2 ) END ; (* determine first whitespace following all printing characters in _l_; |* set this to el *) el := Text.Length( l ) ; WHILE el > p2 AND Text.GetChar( l, el-1 ) <= ' ' DO DEC( el ) END ; (* set _item_loc_ and reset _l_. *) IF el > p2 THEN item_loc := Text.Sub( l, p2, el-p2 ) END ; l := Text.Sub( l, p1, q1-p1 ) ; END lp ; VAR ln : TEXT ; rd : Rd.T ; wr : Wr.T ; <* FATAL Thread.Alerted, Rd.Failure, Wr.Failure, Rd.EndOfFile *> BEGIN Wr.PutText( Stdio.stdout, "input >" ) ; Wr.Flush( Stdio.stdout ) ; ln := Rd.GetLine( Stdio.stdin ) ; rd := IO.OpenRead( ln ) ; Wr.PutText( Stdio.stdout, "output >" ) ; Wr.Flush( Stdio.stdout ) ; ln := Rd.GetLine( Stdio.stdin ) ; wr := IO.OpenWrite( ln ) ; IF rd # NIL AND wr # NIL THEN WHILE NOT Rd.EOF( rd ) DO ln := Rd.GetLine( rd ) ; lp( ln ) ; IF NOT Text.Equal( ln, "" ) (* ignoring lines of all whitespace char's *) THEN Wr.PutText( wr, ln & " " & item_loc & "\n" ) END ; END (* OF WHILE *) ; Wr.Close( wr ) ; END (* OF IF rd # NIL *) END ixcat. ======================================================================= 78 === Date: 20 Nov 1994 00:59:00 +0100 From: kai@khms.westfalen.de (Kai Henningsen) Subject: Re: error messages douglm@rpi.edu wrote on 18.11.94 in : > My wish would probably be to go in the other direction. Often the only > reason I use a debugging package is to find out where my array index is out > of range. > > If the system is calling a routine to print a message, could it pass the > name and line number also? And *please* also print at least the offending value, preferably also the limits it wasn't in! I did a hack to get this in Borland Pascal, and it makes finding the error *a lot* easier. Most of the time this info alone suffices to guess what went wrong. Kai -- Internet: kh@ms.maus.de, kai@khms.westfalen.de Bang: major_backbone!{ms.maus.de!kh,khms.westfalen.de!kai} ## CrossPoint v3.02 ## ======================================================================= 79 === Date: Sun, 20 Nov 1994 13:30:05 -0500 From: douglm@rpi.edu Subject: Re: SortedTable and pickling >I was hoping to make use of the SortedTable routines but have run across a >difficulty. >... >problem is that the code uses a variable as a terminator rather than NIL. > >That variable will be different each time the program is run so that >SortedTable objects cannot be pickled succesfully. The answer seems to be to move the variable into the object. ======================================================================= 80 === Date: 21 Nov 1994 17:42:05 GMT From: kennedy@b0ru01.fnal.gov (Robert Daniel Kennedy) Subject: m3build doc, newbie question Hello, Question 1: While I have plenty of doc on modula3 (Harbison's book), where is the doc on m3build... whose use appears to be assumed in SRC m3? I am working from the various other programs' m3makefile as examples.... Question 2: I have seen several "hello world" examples which involve a module Hello which exports to Main... yet I cannot get one to build using m3build or m3. If I write the module as the implementation of Main itself, then I can get it to build. What am I missing here which prevents these "simplest" of examples from building? Thanks, Rob Kennedy Rutgers/CDF/Fermilab ======================================================================= 81 === Date: Sun, 20 Nov 1994 12:16:55 -0500 From: douglm@rpi.edu Subject: SortedTable and pickling I was hoping to make use of the SortedTable routines but have run across a difficulty. I got Segmentation violations when trying to access the table after unpickling it. I'm having difficulty debugging this stuff with m3gdb but I believe my problem is that the code uses a variable as a terminator rather than NIL. That variable will be different each time the program is run so that SortedTable objects cannot be pickled succesfully. ======================================================================= 82 === Date: 21 Nov 1994 10:19:37 -0700 From: tho@carbon.denver.colorado.edu (Tuan Thanh Ho) Subject: <>**!! Computer Books 4 Sale !!**<> I have the following books for sale : Please note the book condition: Brand New = (!) Excellent = (****) Good = (***) Average = (**) Poor = (*) All books are hard bound unless otherwise noted. - S. Atre, Data Base: Structured Techniques for Design, Performance, and Management, 2nd ed., John Wiley & Sons, 1988, $25 (!). - K. Kummerle, J. O. Limb, F. A. Tobagi, eds., Advances in Local Area Networks, IEEE Press, 1987, $19 (****). - J. W. L. Ogilvie, Modula-2 Programming, McGraw Hill, 1985, $19 (!). - W. Stallings, Local and Metropolitan Area Networks, 4th ed., Macmillan, 1993, $25 (!). - W. H. Inmon and J. H. Caplan, Information Systems Architecture, John Wiley & Sons, 1992, $25 (!). - D. C. Andrews, and N. S. Leventhal, Fusion: Integrated IE, CASE, and JAD - A Handbook for Reengineering The Systems Organization, Yourdon Press Computing Series, Yourdon Press, 1993, $25 (!). - R. Sedgewick, Algorithms in Modula-3, Addison Wesley, 1993, $25 (!). - J. T. Arnold, Simplified Digital Automation with Microprocessors, Academic Press, 1979, $19 (****). - V. Milutinovic, ed., Introduction to Microprogramming, Prentice Hall, 1992, $25 (!). - J. Kirkwood, Sybase Architecture and Administration, Ellis Horwood, 1993, $25 (!). - N. Wirth, and J. Gutknecht, Project Oberon: The Design of an Operating System and Compiler, Addison Wesley, 1992, $25 (!). - M. M. Gorman, Enterprise Database in a Client/Server Environment, John Wiley & Sons, 1994, $25 (!). - S. Bapat, Object-Oriented Networks: Models for Architecture, Operations, and Management, Prentice Hall, 1994, $25 (!). - D. E. Thomas and P. Moorby, The Verilog Hardware Description Language, Kluwer Academic Publishers, 1991, $25 (!). - D. E. Comer and D. L. Stevens, Internetworking with TCP/IP: Design, Implementation, and Internals, Vol. II, Prentice Hall, 1991, $25 (!). - R. C. Camp, T. A. Smay, and C. J. Triska, Microprocessor Systems Engineering, Matrix Publishers, 1979, $19 (***). - P. Coad and E. Yourdon, Object-Oriented Analysis, Prentice Hall, 1991, $25 (!). - S. Carl-Mitchell and J. S. Quarterman, Practical Internetworking with TCP/IP and UNIX, Addison Wesley, 1993, $25 (!). - F. Hayes-Roth, D. A. Waterman, and D. B. Lenat, eds., Building Expert Systems, Addison Wesley, 1983, $19 (****). - J. A. Aseltine, W. R. Beam, J. D. Palmer, and A. P. Sage, Introduction to Computer Systems Analysis, Design, and Applications, John Wiley & Sons, 1989, $19 (!). - J. Martin, Telecommunications and the Computer, 3rd ed., Prentice Hall, 1990, $25 (!). - J. Martin, K. K. Chapman, and J. Leben, Systems Application Architecture, Common Communications Support: Distributed Applications, Prentice Hall, 1992, $25. - E. Rich, Artificial Intelligence, McGraw Hill, 1983, $19 (****). - R. L. Shrader, Electronic Communication, 2nd ed., McGraw Hill, 1967, $15 (***). - S. A. Rago, Unix System V Network Programming, Addison Wesley, 1993, $25 (!). - K. Sherman, Data Communications: A User's Guide, 3rd ed., Prentice Hall, 1990, $25 (!). - P. K. Andleigh and M. R. Gretzinger, Distributed Object-Oriented Data- Systems Design, Prentice Hall, 1992, $25 (!). - G. Salton and M. J. McGill, Introduction to Modern Information Retrieval, McGraw Hill, 1983, $25 (!). - W. J. Collins, Data Structures: An Object-Oriented Approach, Addison Wesley, 1992, $25. - J. D. Foley, and A. Van Dam, Fundamentals of Interactive Computer Graphics, Addison Wesley, 1982, $19 (!). - E. W. Reed and I. S. Larman, Fluid Power with Microprocessor Control: An Introduction, Prentice Hall, 1985, $19 (****). - T. C. Bartee, Editor-in-Chief, Digital Communications, Howard Sams & Co., 1986, $35 (!). - C. G. Guy, Data Communications for Engineers, McGraw Hill, 1992, $29 (!). - C. L. Wyatt, Electro-optical System Design for Information Processing, McGraw Hill, 1991, $35 (!). - J. S. Vandergraft, Introduction to Numerical Computations, Academic Press, 1978, $29 (!). - F. Halsall, Data Communications, Computer Networks and Open Systems, 3rd ed., Addison Wesley, 1992, $25 (****). - D. R. Smith, Digital Transmission Systems, Van Nostrand Reinhold, 1985, $20 (****). - W. S. Meisel, Computer-Oriented Approaches to Pattern Recognition, Academic Press, 1972, $25 (***). If interested, Please e-mail me at: tho@carbon.denver.colorado.edu or Phone me at : (303) 364-4426 Thanks, Tuan T. Ho ======================================================================= 83 === Date: 21 Nov 94 09:12:33 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: efficiency of VBT/Tresle on X? Hmm... perhaps it's because several VBT.Leafs may share an X Window. I haven't delved far enough to find out how X Windows are allocated among VBTs. I hope it's not like InterViews 3.x, where there's one great big X window for all the objects to share! The VBTs manage the allocation of the window real estate among themselves. Of course you may have several windows if you want but you dont need or want to have an X window for each VBT, that would be a waste of resources. Then I noticed that VBT.PaintText's arguments essentially specify the state of an X graphics context on every call, and I wonder how much of the allocate GC set up GC (color, painting operation,...) draw text release the GC work is done on _every_ call to VBT.PaintText. There is quite a bit of optimization going on there. Some commands go almost directly from the leaf windows to the root VBT and graphics contexts sent to the X windows server are cached and reused, among other things. I use Zeus/FormsVBT/Trestle to show the operation of virtual/cache memories for my courses and the animation is zippy on my 16MB 33MHz 486. Lastly, I noticed that the process size of even little teeny FormsVBT applications is HUGE! The m3 compiler typically has a process size of 4MB or so, but unless there's some bug in ps on my machine, FormsVBT apps use 100's of megabytes. They take a _long_ time to start up, and they swap significantly. They take some time to start up but dont swap much if you have 16MB. I have no idea why ps reports such silly numbers on my machine too. It may have to do with the shared libraries or garbage collected heap address range. Believe me, if my animations were really using 300MB at run time they would not run as they are in 16MB. I guess I'll have to hold my breath and see what M3Lite looks like. Does anybody know if it will support FormsVBT? Well, I would think so. There is already some "Windows NT" code in Trestle. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 84 === Date: 21 Nov 1994 23:51:12 GMT From: connolly@hal.com (Dan Connolly) Subject: m3build: packages with multiple binaries I'm developing a library, and I maintain a set of test programs as I go along. If I were using make or Imake, this would all be in one directory, (or perhaps two) and I could do: % make or % make all and that would build libxxx.a Then I could do % make test-progs And that would build several clients of the library. Then I could do: % make run-tests and the test programs would run, diff their output from the expected results, and report success/failure. What's the recommended strategy for doing this with m3build? As far as I can tell, the library and each of the exectuables must be in separate packages. So I have something like: ./lib ./lib/src ./lib/src/resources ./sgml-test ./sgml-test/src ./html-test ./html-test/src ./html-fmt-test ./html-fmt-test/src ./htmlx-test ./htmlx-test/src ./para-test ./para-test/src ./parax-test ./parax-test/src With an m3makefile in each directory. This is inconvenient, to say the least! Hmmm... how about this: ./src ./src/resources ./TEST ./TEST/html-fmt ./TEST/html-fmt/src ./TEST/html ./TEST/html/src ./TEST/htmlx ./TEST/htmlx/src ./TEST/para ./TEST/para/src ./TEST/parax-test ./TEST/parax-test/src ./TEST/sgml ./TEST/sgml/src ./TEST/data How do I set it up so that I can go to the top and build all these packages? Or at least, how do I set up the m3makefile in TEST/sgml/src so that it checks to see that my library is up to date before building the test program? i.e. I want the development cycle to go: * write some code in the library * write a test program * build the test program this causes: build the library * run the test * write/fix library code; repeat Clues? Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 85 === Date: 21 Nov 94 12:13:48 From: vixie@gw.home.vix.com (Paul A Vixie) Subject: Re: M3 by Example #1 > If someone could provide a ftp site for the developing work, I would be > very grateful. I can do this. But I will need someone else to champion it, I have machines but no time. -- Paul Vixie La Honda, CA decwrl!vixie!paul ======================================================================= 86 === Date: Mon, 21 Nov 94 15:58:10 -0800 From: mcjones@pa.dec.com Subject: Re: Unbuffered/raw terminal input Stephen Schaub continues: If an implementation for unbuffered input were provided for the various OS's, could the Terminal interface be neatly extended to provide for that functionality? As I said before, I'm not sure if it's technically possible to come up with a neat, portable design. If someone showed us such a design, we'd be happy to add it to Terminal. Paul McJones mcjones@pa.dec.com ======================================================================= 87 === Date: 22 Nov 1994 00:30:47 -0600 From: kitana!sysop@caprica.com (JL Gomez) Subject: Re: m3build doc, newbie question This is from the DEC SRC M3 WWW server: A simple example Here's a simple program composed of a main module, an imported interface and its implementation. To begin, create a fresh directory for the package and within that directory, a directory for the source files: $ mkdir hello $ cd hello $ mkdir src Create the following source files in the src directory: In the file src/Main.m3: MODULE Main; IMPORT A; BEGIN A.DoIt (); END Main. In the file src/A.i3: INTERFACE A; PROCEDURE DoIt (); END A. In the file src/A.m3: MODULE A; IMPORT Wr, Stdio; PROCEDURE DoIt () = BEGIN Wr.PutText (Stdio.stdout, "Hello world.\n"); Wr.Close (Stdio.stdout); END DoIt; BEGIN END A. In the file src/m3makefile: import ("libm3") implementation ("Main") module ("A") program ("foo") Finally, from the package directory, hello, run m3build. If SRC Modula-3 is installed correctly, it will compile the three source files and link them with the standard libraries. The derived files will be placed in a directory that names the architecture. On an Alpha/AXP machine running OSF, the directory is called ALPHA_OSF. The executable program will be named foo in the derived directory. _________________________________________________________________ [Modula-3 home page] m3-request@src.dec.com Last modified on Thu Apr 21 15:07:33 PDT 1994 by kalsow modified on Thu Jan 7 18:40:57 PST 1993 by muller -- sysop@kitana.org ======================================================================= 88 === Date: 22 Nov 1994 04:01:44 GMT From: connolly@hal.com (Dan Connolly) Subject: ELF-based M3 release? The current way of building shared libraries on linux is, well, inconvenient. Here's what I'd like to see: src-m3-3.4-strip.tar.gz: * release 3.4 of SRC M3 (smaller footprint? quicker compiles?) * compiled for linux 1.1.x, using... * ELF-based binaries, shared libraries, with support for building them. * m3gdb that doesn't flake out all the time If that happens, and the linux mprotect() system calls and signal handling interface stabilize and get documented (perhaps with the release of linux 1.2?), I'll resume my work on getting the incremental garbage collector to work under linux.... that is, if somebody else doesn't beat me to it! I won't ask for reliable info about _when_, but can I ask _if_ the above is likely to happen "real soon now"? I promise... I'll have something to contribute in return... "soon"... Dan -- Daniel W. Connolly "We believe in the interconnectedness of all things" Software Engineer, Hal Software Systems, OLIAS project (512) 834-9962 x5010 http://www.hal.com/%7Econnolly ======================================================================= 89 === Date: Tue, 22 Nov 1994 13:07:19 +0000 From: Chris Shaw Subject: Re: Modula3 for OS/2 (was Re: Modula3 for DOS. On Tue, 15 Nov 1994, Craig Andrew Kingston wrote: > CRAIG KINGSTON > ckingsto@undergrad.math.uwaterloo.ca Was this posting a mistake or do you actually have an answer to the Modula3 for OS/2 query? If the latter, where can I get it? Thanks, Chris. ======================================================================= 90 === Date: 22 Nov 1994 16:22:09 GMT From: steveg@src.dec.com (Steve Glassman) Subject: Re: Telnet with Modula-3 Here are the sources for a simple program that accessing the web through a proxy. It demonstrates the principles of connecting to a port, transmitting the request and receiving the response. If you have direct access to the internet you can skip the indirecting through the proxy, but you then have to handle the other protocols (Gopher, FTP, et.al.) yourself. Note: This code depends on FilePosix and TCPPosix for creating the TCP reader. Steve ----------------------------------------------------------------------- (* Copyright (C) 1994, Digital Equipment Corporation. *) (* All rights reserved. *) (* Last modified on Mon Oct 17 22:35:54 PDT 1994 by glassman *) (* modified on Thu Sep 29 11:56:28 PDT 1994 by mhb *) (* The "Web" interface retrieve documents from the World Wide Web using an http proxy server. Details about the HTTP protocol are in http://info.cern.ch/hypertext/WWW/Protocols/HTTP/HTTP2.html *) INTERFACE Web; IMPORT IP, Rd, Thread; EXCEPTION Error(TEXT); TYPE T <: ROOT; (* A "Web.T" identifies an http proxy server. The routines in this interface that take a "Web.T" as a parameter accept the value "NIL", which represents the default proxy server obtained by calling "Setup(NIL)". *) PROCEDURE Setup (host: TEXT := NIL): T RAISES {Error}; (* Return a identifier to an http proxy server. *) (* If "host" is "NIL", it defaults to the value of environment variable "http_proxy". If this variable is empty or undefined, it defaults to an implementation-specific value. The exception is raised if "host" is not in a valid format. *) CONST DefaultRequestFields = ARRAY [0 .. 0] OF TEXT{"Accept: */*"}; TYPE MIMEType = {Application, Audio, Image, Message, Multipart, Text, Video, Xperimental}; Date = TEXT; Header = RECORD httpVersion : TEXT; statusCode : INTEGER; reason : TEXT; contentType : MIMEType; contentSubType: TEXT; (* optional fields: *) allowed : TEXT := NIL; public : TEXT := NIL; contentLength: INTEGER := 0; encoding : TEXT := NIL; date : Date := NIL; expires : Date := NIL; lastModified : Date := NIL; server : TEXT := NIL; MIMEVersion : TEXT := NIL; title : TEXT := NIL; END; PROCEDURE Get ( url : TEXT; VAR header: Header; READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields; forceCache: BOOLEAN := FALSE; server : T := NIL ): Rd.T RAISES {Error, Thread.Alerted, IP.Error}; (* Do a "GET" request, passing in the "requestFields". By default, the proxy server will grab pages from a local cache, if one is available and if the "url" is in the cache. When "forceCache" is "TRUE", the proxy server will explicitly not use any cache. The "Error" exception is raised if the header returned by the request is invalid in any way. *) PROCEDURE GetHead (url: TEXT; READONLY requestFields: ARRAY OF TEXT := DefaultRequestField s; forceCache: BOOLEAN := FALSE; server: T := NIL): Rd.T RAISES {Error, Thread.Alerted, IP.Error}; (* Do a "HEAD" request, passing in the "requestFields". By default, the proxy server will grab pages from a local cache, if one is available and if the "url" is in the cache. When "forceCache" is "TRUE", the proxy server will explicitly not use any cache. Mostly for debugging use *) PROCEDURE AbsoluteURL (url, base: TEXT): TEXT; (* Returns an absolute URL constructed from "url" and "base", the URL of the document containing "url". *) END Web. ------------------------------------------------------------------------ (* Copyright (C) 1994, Digital Equipment Corporation. *) (* All rights reserved. *) (* Last modified on Mon Oct 17 22:37:44 PDT 1994 by glassman *) (* modified on Thu Sep 29 12:05:53 PDT 1994 by mhb *) MODULE Web; IMPORT ConnFD, Env, FilePosix, FileRd, FloatMode, Fmt, IP, Lex, OSError, Rd, RdClass, TCP, TCPPosix, Text, TextRd, Thread, Wr; <* FATAL FloatMode.Trap *> CONST EnvironmentVar = "http_proxy"; DefaultProxyHost = "http://:/"; REVEAL T = ROOT BRANDED OBJECT host: TEXT; port: INTEGER END; VAR DefaultServer: T := NIL; TYPE TCPRd = FileRd.T OBJECT channel: TCP.T; OVERRIDES close := Close; END; (*--------------TCP stuff -------------------- *) PROCEDURE ChannelPut (channel: TCP.T; text: TEXT) RAISES {ConnFD.TimedOut, IP.Error, Wr.Failure, Thread.Alerted} = VAR len := Text.Length(text); buf: ARRAY [0 .. 2047] OF CHAR; BEGIN <* ASSERT len < NUMBER(buf) *> Text.SetChars(buf, text); channel.put(SUBARRAY(buf, 0, len)); END ChannelPut; PROCEDURE OpenTCPConnect (server: T): TCP.T RAISES {ConnFD.TimedOut, IP.Error, ConnFD.TimedOut, Rd.Failure, Wr.Failure, Thread.Alerted, Error} = VAR addr: IP.Address; channel: TCP.T; BEGIN IF IP.GetHostByName(server.host, addr) THEN channel := TCP.Connect(IP.Endpoint{addr, server.port}); ELSE RAISE IP.Error(NIL); END; RETURN channel; END OpenTCPConnect; PROCEDURE Close (self: TCPRd) RAISES {Rd.Failure} = BEGIN (* Don't need to explicitly do FileRd.Close; TCP.Close and FileRd.Close are both just Unix.close *) TCP.Close(self.channel); END Close; (* ---------------------- Exported procedures ------------- *) PROCEDURE Setup (host: TEXT := NIL): T RAISES {Error} = VAR server := NEW(T); rd : TextRd.T; <* FATAL Rd.Failure, Thread.Alerted *> BEGIN TRY IF host = NIL THEN host := Env.Get(EnvironmentVar); IF host = NIL THEN host := DefaultProxyHost; END; END; rd := TextRd.New(host); EVAL Lex.Scan(rd, NonColon); (* throw away http:// *) Lex.Skip(rd, Seps); server.host := Lex.Scan(rd, NonColon); EVAL Rd.GetChar(rd); (* skip ":" *) server.port := Lex.Int(rd); EXCEPT Lex.Error, Rd.EndOfFile => RAISE Error("Lex error scanning proxy host"); END; RETURN server END Setup; PROCEDURE Get (url: TEXT; VAR header: Header; READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields; forceCache: BOOLEAN := FALSE; server: T := NIL): Rd.T RAISES {Error, Thread.Alerted, IP.Error} = VAR channel: TCP.T; rd : Rd.T; <* FATAL OSError.E, Rd.EndOfFile, Rd.Failure, Wr.Failure, ConnFD.TimedOut *> BEGIN IF server = NIL THEN IF DefaultServer = NIL THEN DefaultServer := Setup() END; server := DefaultServer END; channel := OpenTCPConnect(server); ChannelPut(channel, Fmt.F("GET %s HTTP/1.0\n\r", url)); FOR i := 0 TO LAST(requestFields) DO ChannelPut(channel, Fmt.F("%s\n\r", requestFields[i])); END; IF forceCache THEN ChannelPut(channel, "Pragma: no-cache\n\r"); END; ChannelPut(channel, "\n\r"); rd := NEW(TCPRd, channel := channel).init( FilePosix.New(channel.fd, FilePosix.Read)); header := ParseHead(rd); RETURN rd; END Get; PROCEDURE GetHead(url: TEXT; READONLY requestFields: ARRAY OF TEXT := DefaultRequestFields; forceCache: BOOLEAN := FALSE; server: T := NIL): Rd.T RAISES {Error, Thread.Alerted, IP.Error} = VAR channel: TCP.T; rd : Rd.T; <* FATAL OSError.E, Rd.EndOfFile, Rd.Failure, Wr.Failure, ConnFD.TimedOut *> BEGIN IF server = NIL THEN IF DefaultServer = NIL THEN DefaultServer := Setup() END; server := DefaultServer END; channel := OpenTCPConnect(server); ChannelPut(channel, Fmt.F("HEAD %s HTTP/1.0\n\r", url)); FOR i := 0 TO LAST(requestFields) DO ChannelPut(channel, Fmt.F("%s\n\r", requestFields[i])); END; IF forceCache THEN ChannelPut(channel, "Pragma: no-cache\n\r"); END; ChannelPut(channel, "\n\r"); rd := NEW(TCPRd, channel := channel).init( FilePosix.New(channel.fd, FilePosix.Read)); RETURN rd; END GetHead; PROCEDURE AbsoluteURL (url: TEXT; base: TEXT): TEXT = VAR i: INTEGER; BEGIN IF url = NIL THEN RETURN NIL ELSIF Text.GetChar(url, 0) = '/' THEN (* Relative to base's host. *) i := Text.FindChar(base, ':'); i := Text.FindChar(base, '/', i + 3); url := Text.Sub(base, 0, i) & url; ELSIF Text.FindChar(url, ':', 0) # -1 THEN (* Absolute form already. *) ELSE (* Relative to base's host and directory. *) i := Text.FindCharR(base, '/'); url := Text.Sub(base, 0, i) & "/" & url; END; (* Add trailing slash if need be. *) i := Text.FindChar(url, ':', 0); IF Text.FindChar(url, '/', i + 3) = -1 THEN url := url & "/"; END; RETURN url; END AbsoluteURL; PROCEDURE ParseHead(rd: Rd.T): Header RAISES {Error, Thread.Alerted, IP.Error} = BEGIN (* ugly header parsing code deleted *) END ParseHead; BEGIN END Web. -------------------------------------------------------------------------- (* Copyright (C) 1994, Digital Equipment Corporation. *) (* All rights reserved. *) (* Last modified on Mon Oct 17 22:51:33 PDT 1994 by glassman *) (* modified on Thu Sep 29 12:18:36 PDT 1994 by mhb *) MODULE Main EXPORTS Main; IMPORT Fmt, IP, Params, Process, Rd, RdUtils, Text, Thread, Wr, Web, RdCopy; FROM Stdio IMPORT stderr, stdout; <* FATAL Thread.Alerted, Wr.Failure, Rd.Failure *> PROCEDURE ReportError (msg: TEXT := NIL) = BEGIN IF msg = NIL THEN Wr.PutText(stderr," Usage? webcat [-debug -noCache -proxy XXX] URL\n"); E LSE Wr.PutText(stderr, msg & "\n"); END; Process.Exit(1); END ReportError; PROCEDURE Get (url : TEXT; debug, forceCache: BOOLEAN := FALSE; server: TEXT := NIL ) RAISES {IP.Error, Web.Error} = VAR rd: Rd.T; proxyServer: Web.T := NIL; h : Web.Header; BEGIN IF url = NIL THEN ReportError(NIL); END; IF server # NIL THEN proxyServer := Web.Setup(server); END; IF debug THEN rd := Web.GetHead(url, Web.DefaultRequestFields, forceCache, proxyServer) ; EVAL RdCopy.ToWriter(Web.GetHead(url), stdout); ELSE rd := Web.Get(url, h, Web.DefaultRequestFields, forceCache, proxyServer); IF h.statusCode >= 400 THEN ReportError( Fmt.F("Error '%s' for url %s", h.reason, url)); ELSE EVAL RdCopy.ToWriter(rd, stdout); END; END; Rd.Close(rd); END Get; PROCEDURE main () = VAR url, arg: TEXT := NIL; i : INTEGER := 1; debug, forceCache : BOOLEAN := FALSE; proxyServer : TEXT := NIL; BEGIN TRY WHILE i < Params.Count DO arg := Params.Get(i); IF Text.Length(arg) = 0 THEN ReportError("empty argument #" & Fmt.Int(i)) END; IF Text.GetChar(arg, 0) = '-' THEN IF Text.Equal(arg, "-debug") THEN debug := TRUE; ELSIF Text.Equal(arg, "-noCache") THEN forceCache := TRUE; ELSIF Text.Equal(arg, "-proxy") THEN INC(i); proxyServer := Params.Get(i); ELSE ReportError(NIL); END; ELSE url := Params.Get(i); END; INC(i); END; (* while *) Get(url, debug, forceCache, proxyServer); EXCEPT Rd.Failure (ec) => ReportError(Fmt.F("reader failure: %s for URL: %s", RdUtils.FailureText(ec), url)); | Wr.Failure => (* probably broken pipe through "head"; okay by me *) | IP.Error (ec) => ReportError(Fmt.F("IP error: %s for URL: %s", RdUtils.FailureText(ec), url)); | Web.Error (t) => ReportError(Fmt.F("Webcat error: %s", t)); END; END main; BEGIN main() END Main. ======================================================================= 91 === Date: Tue, 22 Nov 1994 22:52:30 GMT From: spencer@ERA.COM (Spencer Allain) Subject: Nested functions? I have a sinking feeling about this, but I have to ask it anyway. This will probably not be in correct Modula-3 format, but here goes: PROCEDURE outerFunction(inputChar : CHAR ; inputCard : CARDINAL) : BOOLEAN BEGIN PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN BEGIN RETURN(someCard > inputCard) ; (* inputCard is dynamic *) END innerFunction ; RETURN(innerFunction(3)) ; END outerFunction ; I know that this looks pretty strange, but it is like this for a reason. If this is possible, or something similar that doesn't involve changing the number of arguments to innerFunction, then I will have made an ex-LISP programmer friend of mine very happy. I have no doubt that this isn't possible, especially since the reason for the nested function is to pass it as an argument to another external function that takes as one of its parameters a function with exactly one CARDINAL parameter that returns a BOOLEAN. ======================================================================= 92 === Date: 23 Nov 1994 14:49:08 GMT From: nayeri@gte.com (Farshad Nayeri) Subject: Re: Nested functions? In article spencer@ERA.COM (Spencer Allain) asks if you can have nested functions in Modula-3 to make an ex-LISP programmer happy. Yes, you can nest functions in M3, with a slightly different syntax: PROCEDURE outerFunction(inputChar : CHAR; inputCard : CARDINAL) : BOOLEAN = PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN = BEGIN RETURN someCard > inputCard ; (* inputCard is dynamic *) END innerFunction; BEGIN RETURN innerFunction(3); END outerFunction; > I have no doubt that this isn't possible, especially since the reason > for the nested function is to pass it as an argument to another > external function that takes as one of its parameters a function with > exactly one CARDINAL parameter that returns a BOOLEAN. Note that while you can nest procedures, you cannot return or assign a procedure defined within another procedure as a result. That is, unlike Scheme, nested procedures in Modula-3 are not "first-class" All hope is not lost though: the OBJECT construct allows you to to create "first-class closures" that work a lot like their Scheme equivalents. >From the language definition [1]: "A top-level procedure is a procedure declared in the outermost scope of a module. Any other procedure is a local procedure. A local procedure can be passed as a parameter but not assigned, since in a stack implementation a local procedure becomes invalid when the frame for the procedure containing it is popped." For an example of a closure, see "Thread.Closure" [2]. References: [1] Modula-3 language definition in SPwM3, also at http://www.research.digital.com/SRC/m3defn/html/procs.html#idx.55 [2] See SPwM3, Section 4.3, page 91, or the Thread interface: http://www.research.digital.com/SRC/m3sources/html/thread/src/Common/Thread .i3 Hope this helps, -- Farshad -- Farshad Nayeri nayeri@gte.com ======================================================================= 93 === Date: Wed, 23 Nov 94 11:23:39 -0800 From: birrell@pa.dec.com Subject: Re: Pickling: procedures and methods The comment in Pickle.i3 is wrong. The current pickle package discards procedure values on write, and sets them to NIL on read. This is deliberate. The rational for this is that you wouldn't really want the ability for someone who sends you a pickle to make you invoke an arbitrary procedure in you process, just by naming it in the pickle. It would making the task of showing that your program is correct, well-behaved, or secure remarkably difficult. Methods are quite different. They aren't values at all, even although the language syntax makes it look like you assign them sometimes. A method is part of a type. If you subclass an object type you do so by creating a type with new methods. From the point of view of pickles, all that's required is to pass the type's fingerprint through the pickle. When the pickle is read, you get the appropriate type in the receiving process, complete with its methods. Unlike procedures, you can determine what parts of your process might be called purely by inspecting the type of the received pickle. Andrew ======================================================================= 94 === Date: Wed, 23 Nov 1994 13:54:34 GMT From: spencer@ERA.COM (Spencer Allain) Subject: AI programming language advice? This is not my question so please respond to Eric Hawthorne. Also note that the original post below was placed in the comp.lang.eiffel group so either see the thread there, or respond directly to him by mail. I have decided to repost his article here rather than personally suggest that he check out Modula-3 because I myself am still an initiate and know that there are people in this newsgroup who can better address each of his requirements. -------------------------------------------------------------------- Below is Eric Hawthorne's original post -------------------------------------------------------------------- Path: era!uunet!fonorola!news1.mda.ca!egh From: egh@mda.ca (Eric Hawthorne) Newsgroups: comp.lang.eiffel Subject: AI programming language advice? Date: 21 Nov 1994 17:50:33 GMT Organization: Macdonald Dettwiler & Associates Lines: 85 Message-ID: <3aqml9$epm@deneb> NNTP-Posting-Host: baloo X-Newsreader: TIN [version 1.2 PL2] Hi knowledgeable types, I'm embarking on an AI project and have the following requirements for a programming language. I wonder if anyone can help with suggestions or information. Properties of Language: (Note: Some of the properties can be of the language augmented by a readily available library for the functionality. If so, please let me know the details.) Must haves: -High-performance on a midrange 486 pc with 8 meg mem. -Works in Windows, or perhaps OS/2. -Garbage collection -Co-routine-style concurrency with some way of having some global shared memory between the co-routines. -Good list and string manipulation operations -No silly memory segment-size limitations. -Cost no more than about $1000, pref. less. Almost must haves: - A way of tieing pattern-matching to invocation, similar to the way things work in Prolog or some Lisp extensions. - Forward & backward chaining inference - Reasonable support for GUI including typical dialog widgets and also some form of line or 2D shape graphics. Bonuses but not essential: (Please don't let the lack of these below constrain your suggestions to me.) - a multiple-simultaneous-hypothesis-capable reason maintenance system - a fairly powerful blackboard with registration of interest in categorized postings Right now, I think I should be considering some PC version of Prolog, CLOS, or Eiffel. So I'm particularly interested in hearing details you know about one of those, with regard to my requirements. If you know of another language you are sure meets these requirements better, please mention that though. I will re-post a summary if I get good information. Here are some concerns I have about the particular languages I mentioned. Can anyone show me wrong? Prolog: How to do co-routine style concurrency (programmer-controlled thread interleaving with resumption of contexts) with shared memory between co-routines? Performance. Which PC prolog is fastest? CLOS: The co-routine with shared-memory thing. Performance. Which PC CLOS is fastest? Awkwardness of expressing multiple return-arg procedures. Eiffel: The co-routine with shared-memory thing. Is there good GUI support on Windows? Any libraries for inferencing? How convenient and powerful are the collection and string manipulation operations compared to say Lisp or Prolog. Thanks for any insight you can give. Eric Hawthorne (egh@mda.ca) ======================================================================= 95 === Date: Tue, 22 Nov 1994 16:54:18 -0500 From: douglm@rpi.edu Subject: Pickling: procedures and methods I started to re-activate some code that had lain dormant since V2.x and ran into a problem. The record I pickled had a procedure variable in it. My recollection is that the v2 pickling routines restored the procedure reference. With v3 I get a NIL ref. The interface for the v3 routines states: Pickles preserve the names and signatures of procedures, but the code for the procedures can be different in the program writing the pickle and the program reading the pickle. Object methods are treated the same as procedures. In the module code I found: IF kind = RTTypeMap.Kind.Ref THEN writer.write(LOOPHOLE(field, UNTRACED REF REFANY)^); ELSE (* Other REF fields, including procedures, are discarded on write *) END; I'm not sure what that means. Initially I presumed procedure refs would be restored. Actually I'm not sure now, how the routines could reliably restore a procedure ref. In any case, I can work round this. The point of my message (eventually) is what happens to methods? If I pickle an object with methods in one program then unpickle it later what has happened to the methods? ======================================================================= 96 === Date: 23 Nov 1994 21:57:00 GMT From: nayeri@gte.com (Farshad Nayeri) Subject: m3build question: exporting both a program and a library Suppose I am writing some code to be used as an executable most of the time, but on occasion it may be used as a library. Is there a simple way for doing this using one m3makefile? FormsEdit is a good example. The documentation for FormsEditVBT states that it can be used both as a program and a library, but m3build doesn't seem to follow the documentation in exporting it as a library. The m3makefile for FormsEdit says something like: Module (FormsEditVBT) implementation (FormsEdit) /* exports Main */ Program (formsedit) In the context of the above m3makefile, "Module" and "module" will behave the same, as m3build doesn't end up shipping any interfaces or a library and its associated interfaces. I thought of a fix of adding a line "Library (formsedit)" to this m3makefile. But the fix goes too far to include FormsEdit, the module that exports Main, as a part of the library. Is there some way of telling m3build not to include the code in Main module in the building of a library? It seems to me that each options is useful in some cases. Thanks! -- Farshad -- Farshad Nayeri nayeri@gte.com ======================================================================= 97 === Date: 23 Nov 94 11:15:23 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: m3build: packages with multiple binaries In article connolly@hal.com (Dan Conno lly) writes: What's the recommended strategy for doing this with m3build? As far as I can tell, the library and each of the exectuables must be in separate packages. So I have something like: Check in the SRC sources, they usually have mypkg/src mypkg/test/test1/src mypkg/test/test2/src ... myotherpkg/src ... How do I set it up so that I can go to the top and build all these packages? The 3.4 release is supposed to contain a root build file. Perhaps it is just a makefile or shell script that goes m3build for each subdir. Or at least, how do I set up the m3makefile in TEST/sgml/src so that it checks to see that my library is up to date before building the test program? i.e. I want the development cycle to go: m3build uses a "push" model instead of a "pull" model as in make. Fortunately it also checks time stamps coherency which is not done with make/c unless you are using something like Centerline ObjectCenter. Thus, it goes faster because it does not check all the dependencies of all the libraries every time but you must m3build libraries after modifications. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 98 === Date: 23 Nov 94 11:34:34 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: ELF-based M3 release? In article connolly@hal.com (Dan Conno lly) writes: Here's what I'd like to see: src-m3-3.4-strip.tar.gz: * release 3.4 of SRC M3 (smaller footprint? quicker compiles?) * compiled for linux 1.1.x, using... * ELF-based binaries, shared libraries, with support for building them. * m3gdb that doesn't flake out all the time You are not asking for too much are'nt you? :-) Let see, release 3.4 is not out. Alpha releases of ELF binaries started to appear a week or two ago but are not yet included in any major distribution. New patches for m3gbd on SPARC appeared a few days ago. Whenever a major LINUX distribution includes ELF support, i will install it on my system. When SRC M3 3.4 comes out i will compile it and see how much effort is required to get M3-lite working on LINUX (help for this will probably be welcome unless it is a trivial job). By then m3gdb might be quite usable on LINUX and your list will be pretty much fulfilled. Christmas looks like a good target :-) or early next year. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 99 === Date: 24 Nov 1994 09:27:49 GMT From: pr@cl.cam.ac.uk (Peter Robinson) Subject: Re: m3build question: exporting both a program and a library In article , nayeri@gte.com (Farshad Naye ri) writes: > Suppose I am writing some code to be used as an executable most of the > time, but on occasion it may be used as a library. Is there a simple > way for doing this using one m3makefile? I had a similar problem when using network objects where I wanted to describe both the server and the client in the same m3makefile. Conditional code in the m3makefile seems to do the trick. For your example: Module (FormsEditVBT) if defined ("PROGRAM") implementation (FormsEdit) /* exports Main */ Program (formsedit) else Library (formsedit) end (although I would be a little wary of giving the library and the program the same name even if it does actually work...). You then use m3build -DPROGRAM to build the program and straightforward m3build to build the library. That having been said, for this example I would have thought that you always wanted to build the library and would have a separate package that was a simple harness exporting Main to present it as a program. That way the program size would be reduced by the size of the shared formsedit library. -- Peter Robinson Telephone: +44 1223 334637 University of Cambridge Computer Laboratory Facsimile: +44 1223 334678 New Museums Site Pembroke Street Telex: via 81240 CAMSPL-G Cambridge CB2 3QG England E-mail: pr@cl.cam.ac.uk ======================================================================= 100 === Date: 24 Nov 94 08:14:27 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: Nested functions? In article spencer@ERA.COM (Spencer Allai n) writes: PROCEDURE outerFunction(inputChar : CHAR ; inputCard : CARDINAL) : BOOLEAN BEGIN PROCEDURE innerFunction(someCard : CARDINAL) : BOOLEAN BEGIN RETURN(someCard > inputCard) ; (* inputCard is dynamic *) END innerFunction ; RETURN(innerFunction(3)) ; END outerFunction ; I know that this looks pretty strange, but it is like this for a reason. If this is possible, or something similar that doesn't involve changing the number of arguments to innerFunction, then I will have made an ex-LISP programmer friend of mine very happy. The above looks OK. I have no doubt that this isn't possible, especially since the reason for the nested function is to pass it as an argument to another external function that takes as one of its parameters a function with exactly one CARDINAL parameter that returns a BOOLEAN. This is another problem. You cannot take the address (store in a procedure variable) of a nested procedure. Instead, you can build yourself a "closure" like object (as is done for FormsVBT callbacks) which carries some data and a procedure to operate on it. You can do this sort of things in Obliq though. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 101 === Date: 23 Nov 94 13:08:00 From: geert@dialis.xs4all.nl (Geert Bosch) Subject: Modula-3 ported to OS/2? Hallo All! Has anyone already ported Modula-3 to the OS/2 platform? If not, is anyone busy doing so? I remember having seen a query by Craig Kingston, but there hasn't been any follow-up for the last month or so. Since my e-mail to him remained unanswered, I'm curious about the state of the project. Groetjes, Geert ======================================================================= 102 === Date: Thu, 24 Nov 1994 19:06:28 GMT From: ckingsto@undergrad.math.uwaterloo.ca (Craig Andrew Kingston) Subject: Status and Notes (Re: Modula3 for OS/2 Sorry - I must have messed up my post (didn't verify it either) I think someone else was doing a port but do not know who he is (someone sent an email message but the email address they gave me was bad) -- I am doing a port, will welcome any help (any! even if little) and I will (will!) post progress reports for interested parties to this group -- Using - Linux Code, with SPARC and WIN32 examples for certain critical code. GCC, EMX, Unix tool clones, and various tools I thought might help. Any Questions??? Comments??? If anyone has some ported 3.3 code and wish to contribute it please contact me immediately. NOTE **** after friday I shouldn't be at this email address so if you can't reply immediately please post to the news groups and I should still get it and contact you. Thanx Muchly CRAIG KINGSTON ckingsto@undergrad.math.uwaterloo.ca ======================================================================= 103 === Date: Thu, 24 Nov 1994 16:44:54 GMT From: spencer@ERA.COM (Spencer Allain) Subject: What's missing Obviously something is wrong with my SRC Modula-3.3 installation. If some kind soul could examine the m3build output (below) and explain to me what is missing, I'll be very grateful. I'll bet that it's something trivial like needing some source files that I don't have. Currently all that is installed are the contents of boot-SPARC.tar.gz and m3cc.tar.gz I had assumed that would be enough for a trivial program, but I'm starting to wonder if I need the sources for libm3 also. --------Main.m3---------- MODULE Main; PROCEDURE DoIt() = BEGIN END DoIt ; BEGIN DoIt() ; END Main. -------m3makefile------- implementation ("Main") program ("Hi") -------m3build output-------- --- building in SPARC --- m3 -w1 -why -g -o Hi -T.M3IMPTAB ../src/Main.m3 new source -> compiling ../src/Main.m3 "../src/Main.m3", line 1: unable to find interface (Main) "../src/Main.m3", line 1: imported object is not an interface (Main) "../src/Main.m3", line 3: unable to find interface (RTHooks) "../src/Main.m3", line 3: imported object is not an interface (RTHooks) 4 errors encountered compilation failed => not building program "Hi" *** error code 1 (ignored) Thanks for any assistance. -Spencer Allain ======================================================================= 104 === Date: Thu, 24 Nov 1994 23:43:09 +0000 From: Chris Shaw Subject: Re: Status and Notes (Re: Modula3 for OS/2 > -- I am doing a port, will welcome any help (any! even if little) > and I will (will!) post progress reports for interested parties > to this group -- Will you port Trestle / FormsVBT to the WPS interface? If so, will it use shared libraries since linking libraries into executables makes really huge files? Many thanks and waiting in hopeful anticipation, Chris Shaw cjds100@cam.ac.uk ======================================================================= 105 === Date: 26 Nov 1994 02:52:42 GMT From: tony@citr.uq.oz.au (Tony Ashburner) Subject: M3 on RS/6000? I'm trying to install SRC Modula-3 on an IBM RS/6000 (Aix 3.2.5). The build of boot-IBMR2 and m3cc looks OK, but when I try to build libm3, the compiler gets a segmentation fault ... Has anyone had any success with Modula 3 on AIX 3.2.5? -- Tony Ashburner | email: Centre for Distributed Systems Technology | tony@dstc.edu.au University of Queensland QLD 4072 AUSTRALIA | PHONE: +61-7-365-4310 FAX: +61-7-365-4311 | ======================================================================= 106 === Date: 28 Nov 1994 09:52:05 -0000 From: John.Lancaster@brunel.ac.uk (John Lancaster) Subject: Garbage Collection I am trying to establish the extent to which the Modula-3 garbage collection feature is used by programmers or by applications written in the language. I want to know if the provision of garbage collection in Modula-3 provided tangible benefits or if it was a waste of time. I would be grateful if you would take the time to complete the following questionnaire and email it to me (john.lancaster@brunel.ac.uk). I will post a summary of the responses to the list. Thanks in advance John Lancaster Modula-3 Garbage Collection Questionnaire ========================================= 1) Compilers used and if garbage collection is implemented: 2) Target hardware platform. 3) Type of applications/programs written. 4) Use of garage collection (select one): a) Only use traced references, i.e. REF. b) Never use traced references. c) Sometimes used traced references. d) Use a mixture of traced and untraced references in programs. If your answer to 4) was b please answer 5) & 8), else answer 6), 7) & 8). 5) If you never use traced references, please give reasons. If a reason is performance please state if poor performance has been measured or is perceived to be a problem. 6) If you use traced references: 6.1) Please give main reasons for use. 6.2) Do they degrade program performance in anyway? 6.3) Is program debugging easier or harder? 6.4) What change in functionality would you like to see? 7) If you use a mixture of traced and untraced references please indicate where you use each type. 8) Please give any other information you think may help me. ==End questionnaire== ======================================================================= 107 === Date: 28 Nov 1994 09:53:29 -0000 From: John.Lancaster@brunel.ac.uk (John Lancaster) Subject: Unsafe Code I am trying to establish the extent to which the Modula-3 Unsafe code feature is used by programmers. I would be grateful if you would take the time to complete the following questionnaire and email it to me (john.lancaster@brunel.ac.uk). I will post a summary of the responses to the list. Thanks in advance John Lancaster Modula-3 Unsafe Code Questionnaire ================================== 1) Type of applications/programs written. 2) Do your programs (select one): a) Only have safe modules b) Only have unsafe modules. c) Have a mixture of safe and unsafe modules. 3) Do you think that the concept of safe modules is a good and useful one? 8) Please give any other information you think may help me. ==End questionnaire== ======================================================================= 108 === Date: 29 Nov 1994 09:06:17 GMT From: eskianis@ic.sunysb.edu (Evangelos N Skianis) Subject: How can I read from a file? I am doing a program in Modula-3 and I have to read a lot of data from a file. Can someone give me some help how to read how to open and read a file and how I can then close it. And when I do that guys do I read the file as a standard input or are there specific commands to read the file. The file consists of characters and integers by the way. I would really appreciate some help. E.Skianis(eskianis@ic.sunysb.edu) ======================================================================= 109 === Date: 29 Nov 1994 17:14:04 GMT From: tuckey@nacto.lkg.dec.com (Jeff Tuckey) Subject: problem with m3gdb (release 3.3 from gatekeeper) Hi everyone, I'm just starting with m3gdb and getting nowhere. I've built and run the 'hello world' program from http://www.research.digital.com/SRC/modula-3/html/example.html successfully. Now I want to put a breakpoint on the procedure call A.DoIt in the debugger and see the source line... something is very wrong however. I'm running on an Alpha AXP system. The following represents my best (and most concise) attack on this problem so far. It is a screen dump of my session. Any help is appreciated. (note, the output indicates that the breakpoint was hit, but the system hanged for about 5 seconds, and the session core dumped without every giving a (gdb) prompt...) /Jeff (replies copied to my e-mail appreciated) ---start screen dump--- solus:/users/tuckey/m3/helloworld % m3gdb ALPHA_OSF/foo GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.11 (alpha-dec-osf), Copyright 1993 Free Software Foundation, Inc... (gdb) set lang m3 (gdb) info fun All defined functions: File ../../../../../../src/usr/ccs/lib/crt/alpha/crt0.s: __eprol; __start; _mcount; File _m3main.c: main; File Main.m3: static Main.m3.MAIN; File A.m3: static A.DoIt; static A.m3.MAIN; File ../../../../../../src/usr/ccs/lib/libexc/call.c: _call_add_gp_range; _call_add_pc_range_table; _call_remove_gp_range; _call_remove_pc_range_table; Non-debugging symbols: 120004cf0 etext (gdb) break A.DoIt Cannot resolve type with uid 7b78c34f Function "A" not defined. (gdb) info address A.DoIt Symbol "A__DoIt" is a function at address 16_1200049b0. (gdb) break * 16_1200049b0 Breakpoint 1 at 16_1200049b0: file A.m3, line 5. (gdb) show lang The current source language is "m3". (gdb) threads can't find identifier: self (gdb) run Starting program: /users/tuckey/m3/helloworld/ALPHA_OSF/foo Breakpoint 1, A.DoIt () at A.m3:5 Segmentation fault (core dumped) solus:/users/tuckey/m3/helloworld % dbx `which m3gdb` core dbx version 3.11.4 Type 'help' for help. Core file created by program "gdb" signal Segmentation fault at warning: PC value 0x0 not valid, trying RA warning: RA value 0x0 not valid, trying text start warning: text start 0x120000000 not valid, trying data start warning: Using data start as a text address -- traceback will not work > [_call_remove_gp_range, 0x140000000] call_pal cflush (dbx) where 0 (noname)() [0x11ffffffc] (dbx) quit ======================================================================= 110 === Date: 29 Nov 1994 19:37:01 GMT From: Peter Kropf Subject: Problem compiling formsvbt I'm trying to build the formsvbt subsystem on a Linux box. When I run m3build in the jvideo directory, the following errors are produced: spot:/usr/src/Modula-3/formsvbt/jvideo# m3build mkdir LINUX --- building in LINUX --- m3 -w1 -why -g -a libjvideo.a -F/tmp/qk11998aaa new source -> compiling ../src/JVBuffer.i3 ... new source -> compiling ../src/generic/JVBuffer.m3 "../src/generic/JVBuffer.m3", line 9: warning: not used (OSErrorPosix) "../src/generic/JVBuffer.m3", line 9: warning: not used (Uipc) 2 warnings encountered new source -> compiling ../src/JVSink.m3 "../src/JVSink.m3", line 575: warning: variable has type NULL (vec) "../src/JVSink.m3", line 575: unknown qualification '.' (struct_sigvec) "../src/JVSink.m3", line 575: constructor type must be array, record, or set type "../src/JVSink.m3", line 576: undefined (Usignal.struct_sigvec) "../src/JVSink.m3", line 346: warning: potentially unhandled exceptions: Wr. Failure, Thread.Alerted "../src/JVSink.m3", line 579: unknown qualification '.' (sigvec) "../src/JVSink.m3", line 579: expression doesn't have a value "../src/JVSink.m3", line 580: unknown qualification '.' (sv_handler) "../src/JVSink.m3", line 581: unknown qualification '.' (sv_handler) "../src/JVSink.m3", line 582: unknown qualification '.' (sigvec) "../src/JVSink.m3", line 582: expression doesn't have a value "../src/JVSink.m3", line 14: warning: not used (Fmt) "../src/JVSink.m3", line 344: warning: not used (Bpt) 9 errors and 4 warnings encountered new source -> compiling ../src/JVDecomp.m3 ... Can anyone point me in the right direction to get this resolved? Thanks! Peter K Internet: peterk@mcs.com ======================================================================= 111 === Date: 30 Nov 1994 16:03:05 GMT From: pk@i3.informatik.rwth-aachen.de (Peter Klein) Subject: ANNOUNCE: m2tom3 2.00 available ---------------------------------------------------------------------- m2tom3 Version 2.00 Release Announcement ---------------------------------------------------------------------- After a complete redesign, we are now able to release version 2.00 of our Modula-2 to Modula-3 translator. >From the README: m2tom3 is a system to port Modula-2 programs to Modula-3. It consists of two parts: - A conversion program which tries to create a Modula-3 source text with the same semantics as the Modula-2 input while retaining the original look and feel as good as possible. - A base library which tries to emulate the Modula-2 standard library using the Modula-3 standard library. m2tom3 is available under the terms of the GNU Library General Public License from ftp://ftp-i3.informatik.rwth-aachen.de/pub/Modula-3-Contrib/m2tom3/m2tom3-2.00. tar.gz For more information, refer to the enclosed README file or write e-mail to pk@i3.informatik.rwth-aachen.de. --- Peter Klein E-Mail: pk@i3.informatik.rwth-aachen.de Lehrstuhl fuer Informatik III Tel.: +49/241/80-21311 Ahornstrasse 55 Fax.: +49/241/8888-218 RWTH Aachen 52074 Aachen Germany ======================================================================= 112 === Date: 30 Nov 94 10:50:15 From: dagenais@notung.vlsi.polymtl.ca (Michel Dagenais) Subject: Re: Problem compiling formsvbt I'm trying to build the formsvbt subsystem on a Linux box. When I run m3build in the jvideo directory, the following errors are produced: Check the file diff-m3-3.3l2.tar.gz on ftp.vlsi.polymtl.ca:pub/m3/linux. It contains a few modifications required to compile everything on LINUX. -- Prof. Michel Dagenais dagenais@vlsi.polymtl.ca Dept of Electrical and Computer Eng. Ecole Polytechnique de Montreal tel: (514) 340-4029 ======================================================================= 143 === Date: Tue, 29 Nov 94 12:40:31 GMT From: dmc@ukc.ac.uk (Rock Lobster) Subject: How do I use Ctypes.char??? Hi, I have a program that uses the Udir interface to call the opendir and readdir functions. I can open the directory ok, but readdir returns (amongst other things) an ARRAY [0..MAXNAMLEN] OF Ctypes.char How do I use this? I don`t seem to be able to convert it into anything that my mod3 program can use. I assume it must be possible (why would it be there otherwise). Any help?? Cheers Rock -- +----------------------------------------------------------------------------+ | I can get a job, I can pay the phone bill, I can cut the lawn, cut my hair,| | cut out my cholesterol. I can work overtime, I can work in a mine, | +--- I can do it all for you - but I don't want to. ---+