From mvfranz at gmail.com Fri Jul 1 23:41:17 2011 From: mvfranz at gmail.com (Michael Franz) Date: Fri, 1 Jul 2011 17:41:17 -0400 Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Message-ID: Hi, A co-worker pointed out this benchmark http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php . I use Scala at work, and have used Java for years. I would be interested in the outcome of Modula 3 port. Unfortunately I don't have enough experience with M3 to do it myself (guess it could be a learning experience, but then I can complain about a lack of time). I also follow the development of D and there is a port going on in their community. http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html Michael From dabenavidesd at yahoo.es Sat Jul 2 02:22:57 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 2 Jul 2011 01:22:57 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309566177.28834.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > From dabenavidesd at yahoo.es Mon Jul 4 03:51:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 02:51:24 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Mon Jul 4 15:23:26 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:23:26 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> References: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Message-ID: <20110704132326.GA24268@topoi.pooq.com> On Mon, Jul 04, 2011 at 02:51:24AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > it > would mean to compete in such a way in a super computer an alternative > to run without garbage collection (not unsafe but ESC/Modula-3 RTError > and RTCollector disabled but for safe automatically collected objects, > again if we are strictly speaking of a naive implementation algorithm, > if parallelization is allowed under recursive or nested paradigms we > are set to compete too but not absolutely). > I mean, given the effort > they took to run the compiler and tune it for other languages and would > get same compiler effort plus ESC modelling to subsume the collector > for perhaps dynamic scripting like say e.g Obliq, we don't want to > compete with Obliq, but if we do I guess we can't compile JIT JIT. This is a missing feature in Modula 3 -- it would probably need to be implemented as a library, and it would be a huge implementatino project. It would involve writing -- or finding -- code generators for many maching archtectures, and it would require careful integratio with the garbage collector. Both the data structures built by gennerated code and the generated code itself would have to be garbage-collectible. The JIT coder would have to accept relatively low-level instructions and produce in-memory object code. Ideally, unless you use the UNSAFE JIT, it would have to perform suitable static and run-time checking on and in the code it's generating. People implementing currently interpreted languages would have the option of calling this JIT coder instead. I've been tinkering from time to time with bits of code in this direction, but it's a huge job. And, in my opinion, LLVM doesn't really do this right. C-- comes a lot closer, but it isn't a JIT. Maybe something like it could be? -- hendrik From hendrik at topoi.pooq.com Mon Jul 4 15:39:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:39:17 -0400 Subject: [M3devel] concurrency Message-ID: <20110704133917.GA24338@topoi.pooq.com> There was a lot of discussion on problems with concurrency when we wen to pthreads implementation so that we could make use of multiple CPUs. After a while disuccion sttopped. Have these problems all been resolved yet? If I recall correctly, there was a problem with one program, cvsup, using fork as well as threads. This worked with green threads, but not with pthreads. Has cvsup been rehabilitated in some way? How do pthreads interact with the garbage collector? Or are there several garbage collectors with different interaction modalities? -- hendrik From dabenavidesd at yahoo.es Mon Jul 4 19:08:54 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 18:08:54 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110704132326.GA24268@topoi.pooq.com> Message-ID: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: yes, this sounds very good, there is certainly and ability developed for the Obliq (Abadi Cardelli) obejct calculus (a subset which by itself, called **imp**?): http://lucacardelli.name/Topics/TheoryOfObjects/Software.html http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false In last of the above it is referred in first of both of them Obliq and Modula-3 mention **imp**? Chapter 10 and its typ einference algorithm in [1] The actual approach to compile in an interpreted abstract machine way is through a machien called ZINC (acronym for Zync is not CAML), see: http://www.brics.dk/RS/98/55/ or the its previous version : http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html They show the equivalent correspondence between source and abstract machine using decompilation is small steps. Both of their authors extend the Object calculus to an concurrent one, see [3] in: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 as for I know the C-- FE is written in CAML, which is interesting, and there is a type inference algorithm implementation in Modula-3 of ML (Lazy ML via a Horn-logic and intermediate representation see [2]) for yet another language (graphical called cube, see [2] or a featured article in Dr Dobb's journal, here: http://drdobbs.com/article/print?articleId=184409677&siteSectionName= thesis manuscript here: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf ) So this time I'm happy to be wrong, we can do indeed JIT but we should measure the cost (as for type inference could for **imp**? run O(n^3) and currently run O(n^5), it might be necessary do decompiling plus naturally compiling and forth inc ase of NetObj, etc Thanks in advance [1] T. Zhao, ?Type matching and type inference for object-oriented systems,? Purdue University, 2002. [2] M.-A. Najork, ?Programming in three dimensions,? University of Illinois at Urbana-Champaign, 1994. [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object Calculus: Reduction and Typing,? 1998. --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 08:23 > On Mon, Jul 04, 2011 at 02:51:24AM > +0100, Daniel Alejandro Benavides D. wrote: > > Hi all: > > it > > would mean to compete in such a way in a super > computer an alternative > > to run without garbage collection (not unsafe but > ESC/Modula-3 RTError > > and RTCollector disabled but for safe automatically > collected objects, > > again if we are strictly speaking of a naive > implementation algorithm, > > if parallelization is allowed under recursive or > nested paradigms we > > are set to compete too but not absolutely). > > I mean, given the effort > > they took to run the compiler and tune it for other > languages and would > > get same compiler effort plus ESC modelling to subsume > the collector > > for perhaps dynamic scripting like say e.g Obliq, we > don't want to > > compete with Obliq, but if we do I guess we can't > compile JIT > > JIT. > > This is a missing feature in Modula 3 -- it would probably > need to > be implemented as a library, and it would be a huge > implementatino > project. It would involve writing -- or finding -- > code generators for > many maching archtectures, and it would require careful > integratio with > the garbage collector. Both the data structures built > by gennerated > code and the generated code itself would have to be > garbage-collectible. > > The JIT coder would have to accept relatively low-level > instructions and > produce in-memory object code. Ideally, unless you > use the UNSAFE JIT, > it would have to perform suitable static and run-time > checking on and in the code it's generating. > > People implementing currently interpreted languages would > have the > option of calling this JIT coder instead. > > I've been tinkering from time to time with bits of code in > this > direction, but it's a huge job. And, in my opinion, > LLVM doesn't really > do this right. C-- comes a lot closer, but it isn't a > JIT. Maybe > something like it could be? > > -- hendrik > From dragisha at m3w.org Tue Jul 5 00:34:35 2011 From: dragisha at m3w.org (=?utf-8?Q?Dragi=C5=A1a_Duri=C4=87?=) Date: Tue, 5 Jul 2011 00:34:35 +0200 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <20110628155441.GA3406@topoi.pooq.com> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> Message-ID: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Thank you for a pointer and also for your effort. But, not - thank you :). I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. dd On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > Start with "How To Design Programs" (often called HtDP), which > introduces Scheme, not Modula 3. It's simple, direct, and gets to the > point quite quickly and elegantly. From dabenavidesd at yahoo.es Tue Jul 5 01:47:45 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:47:45 +0100 (BST) Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <1309823265.84459.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I believe you are correct, this things never worked for sure here (after some work here, could never shown that way for other CS tutors). Neither will work at least someone like you put the best points over them, I guess we shall see how about that in terms of ESC/Modula-3 logics, I guess the most important example of them was precisely MIT courseware of Butler Lampson (Turing Award) did most of the material from ground up, but still has influence in the way they teach there. He called its teaching language SPEC (many other ollow this route and called their later SPEC/bla..) As I said I have no proof of this, but given this 1991 to 2006 experience, I believe no other but they know how did that work, at least for them. http://research.microsoft.com/en-us/um/people/blampson/48-POCScourse/48-POCS2006Abstract.html Let me know, what do you think, cpecially I bet this approach is used in rather hi-tech schools, thanks but never knew after many years later we should do that, but who knows, maybe there should be somebody who is ablet to pay the price to understand this better. Thanks in advance --- El lun, 4/7/11, Dragi?a Duri? escribi?: > De: Dragi?a Duri? > Asunto: Re: [M3devel] M3devel Digest, Vol 56, Issue 29 > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 17:34 > Thank you for a pointer and also for > your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we > learned programming (my path was Pascal, BASIC, 6502, > GraFORTH, Z80, C, Modula-2....) without > functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking > their "customers" with ML now. It's like "Ok, we made a big > mistake, but this is so obviously different it' also > obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. > Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper > with lots of dialects too... It maybe works for someone (or > someones) but I know a lot of excellent programers who never > met functional. > > dd > > On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > > > Start with "How To Design Programs" (often called > HtDP), which > > introduces Scheme, not Modula 3. It's simple, > direct, and gets to the > > point quite quickly and elegantly. > > From dabenavidesd at yahoo.es Tue Jul 5 01:58:28 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:58:28 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1309823908.72415.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: later, Dr Xavier Leroy developed a type-theoretical modular module system for "core-ML" and "small-C" or "core-C". He mentions important influence of Cardelli's Quest (a super set of Girard Fw) language machine on it: http://pauillac.inria.fr/~xleroy/modmod/ http://lucacardelli.name/Papers/QuestSem.pdf http://archive.numdam.org/ARCHIVE/ITA/ITA_1994__28_6/ITA_1994__28_6_513_0/ITA_1994__28_6_513_0.pdf This was the case also for an extended version [1] in: http://www.cs.cmu.edu/~rwh/papers/sharing/popl94.ps I kept looking for something like that, perhaps the most related concept is a small-C, for 8080 computers if we are able to match this two subsets something may come of it with C-- approach, again, the most simple of it may come in it: http://en.wikipedia.org/wiki/Small-C I guess a good combination of features of this calculus might give us a good sign of hope here [1] further work came to semidecidable type inference, it could be that some rework could make things smarter: http://www.cs.cmu.edu/~rwh/theses/lillibridge.pdf Thanks in advance [1] R. Harper and M. Lillibridge, ?A Type-Theoretic Approach to Higher-Order Modules with Sharing,? 1994. --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 12:08 > Hi all: > yes, this sounds very good, there is certainly and ability > developed for the Obliq (Abadi Cardelli) obejct calculus (a > subset which by itself, called **imp**?): > http://lucacardelli.name/Topics/TheoryOfObjects/Software.html > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false > > In last of the above it is referred in first of both of > them Obliq and Modula-3 mention **imp**? Chapter 10 and its > typ einference algorithm in [1] > > The actual approach to compile in an interpreted abstract > machine way is through a machien called ZINC (acronym for > Zync is not CAML), see: > > http://www.brics.dk/RS/98/55/ > > or the its previous version : > http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html > > They show the equivalent correspondence between source > and abstract machine using decompilation is small > steps. > > Both of their authors extend the Object calculus to an > concurrent one, see [3] in: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 > > as for I know the C-- FE is written in CAML, which is > interesting, and there is a type inference algorithm > implementation in Modula-3 of ML (Lazy ML via a Horn-logic > and intermediate representation see [2]) for yet another > language (graphical called cube, see [2] or a featured > article in Dr Dobb's journal, here: > > http://drdobbs.com/article/print?articleId=184409677&siteSectionName= > > thesis manuscript here: > http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf > > ) > > So this time I'm happy to be wrong, we can do indeed JIT > but we should measure the cost (as for type inference could > for **imp**? run O(n^3) and currently run O(n^5), it might > be necessary do decompiling plus naturally compiling and > forth inc ase of NetObj, etc > > Thanks in advance > > [1] T. Zhao, ?Type matching and type inference for > object-oriented systems,? Purdue University, 2002. > [2] M.-A. Najork, ?Programming in three dimensions,? > University of Illinois at Urbana-Champaign, 1994. > [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object > Calculus: Reduction and Typing,? 1998. > > > > > > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone > interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 08:23 > > On Mon, Jul 04, 2011 at 02:51:24AM > > +0100, Daniel Alejandro Benavides D. wrote: > > > Hi all: > > > it > > > would mean to compete in such a way in a super > > computer an alternative > > > to run without garbage collection (not unsafe > but > > ESC/Modula-3 RTError > > > and RTCollector disabled but for safe > automatically > > collected objects, > > > again if we are strictly speaking of a naive > > implementation algorithm, > > > if parallelization is allowed under recursive or > > nested paradigms we > > > are set to compete too but not absolutely). > > > I mean, given the effort > > > they took to run the compiler and tune it for > other > > languages and would > > > get same compiler effort plus ESC modelling to > subsume > > the collector > > > for perhaps dynamic scripting like say e.g Obliq, > we > > don't want to > > > compete with Obliq, but if we do I guess we > can't > > compile JIT > > > > JIT. > > > > This is a missing feature in Modula 3 -- it would > probably > > need to > > be implemented as a library, and it would be a huge > > implementatino > > project. It would involve writing -- or finding > -- > > code generators for > > many maching archtectures, and it would require > careful > > integratio with > > the garbage collector. Both the data structures > built > > by gennerated > > code and the generated code itself would have to be > > garbage-collectible. > > > > The JIT coder would have to accept relatively > low-level > > instructions and > > produce in-memory object code. Ideally, unless > you > > use the UNSAFE JIT, > > it would have to perform suitable static and run-time > > > checking on and in the code it's generating. > > > > People implementing currently interpreted languages > would > > have the > > option of calling this JIT coder instead. > > > > I've been tinkering from time to time with bits of > code in > > this > > direction, but it's a huge job. And, in my > opinion, > > LLVM doesn't really > > do this right. C-- comes a lot closer, but it > isn't a > > JIT. Maybe > > something like it could be? > > > > -- hendrik > > > From hendrik at topoi.pooq.com Tue Jul 5 02:06:22 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:06:22 -0400 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <20110705000622.GA31166@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:34:35AM +0200, Dragi?a Duri? wrote: > Thank you for a pointer and also for your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. Scheme is not a functional programming language. It's just a language in which it's easy to use a functional programming style should you so choose. I have very little use for a strictly functional language (in the usual sense of no-side-effects, no time-varying variables, etc.). -- hrndrik From hendrik at topoi.pooq.com Tue Jul 5 02:13:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:13:17 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> References: <20110704132326.GA24268@topoi.pooq.com> <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <20110705001317.GB31166@topoi.pooq.com> On Mon, Jul 04, 2011 at 06:08:54PM +0100, Daniel Alejandro Benavides D. wrote: > > So this time I'm happy to be wrong, we can do indeed JIT but we should > measure the cost (as for type inference could for **imp**? run O(n^3) > and currently run O(n^5), it might be necessary do decompiling plus > naturally compiling and forth inc ase of NetObj, etc O(n^3)? O(n^5)? If that's performance in practical situations, instead of just a class of theoretical examples it's not what we need for everyday use. I'd call it useless. It's defnietely not what I'm thinking of. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 02:16:55 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:16:55 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705001317.GB31166@topoi.pooq.com> Message-ID: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: I think yes, any other full bloated object oriented language has that floor, of course, you can help the compiler by giving some annotations, but for the theoretical results, this is what is proved to be truth. Thanks in advance --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 19:13 > On Mon, Jul 04, 2011 at 06:08:54PM > +0100, Daniel Alejandro Benavides D. wrote: > > > > So this time I'm happy to be wrong, we can do indeed > JIT but we should > > measure the cost (as for type inference could for > **imp**? run O(n^3) > > and currently run O(n^5), it might be necessary do > decompiling plus > > naturally compiling and forth inc ase of NetObj, etc > > O(n^3)? O(n^5)? If that's performance in practical > situations, instead > of just a class of theoretical examples it's not what we > need for > everyday use. I'd call it useless. It's > defnietely not what I'm > thinking of. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 02:31:12 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:31:12 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: In fact there is some reqwork to make things happen faster in Abadi-Cardelli: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. Thanks in advance --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 19:16 > Hi all: > I think yes, any other full bloated object oriented > language has that floor, of course, you can help the > compiler by giving some annotations, but for the theoretical > results, this is what is proved to be truth. > > Thanks in advance > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 19:13 > > On Mon, Jul 04, 2011 at 06:08:54PM > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > So this time I'm happy to be wrong, we can do > indeed > > JIT but we should > > > measure the cost (as for type inference could > for > > **imp**? run O(n^3) > > > and currently run O(n^5), it might be necessary > do > > decompiling plus > > > naturally compiling and forth inc ase of NetObj, > etc > > > > O(n^3)? O(n^5)? If that's performance in practical > > situations, instead > > of just a class of theoretical examples it's not what > we > > need for > > everyday use. I'd call it useless. It's > > defnietely not what I'm > > thinking of. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 15:30:39 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 14:30:39 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309872639.96891.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 16:06:47 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 10:06:47 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <20110705140647.GA9022@topoi.pooq.com> If understand correctly, these results are about figuring out what types the programmer meant if he failed to specify any. My view is that the programmer probably knew full well what he meant, and he might as well say so, in the interest of clarity if nothing else. I find programs with secret types to be incomprehensible, even while I'm writing them. And getting error messages if what I wrote doesn't match what I intended, and getting better run-time, well, those are wonderful consequences. -- hendrik On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > In fact there is some reqwork to make things happen faster in Abadi-Cardelli: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. > I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). > But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. > Thanks in advance > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, "Hendrik Boom" > > Fecha: lunes, 4 de julio, 2011 19:16 > > Hi all: > > I think yes, any other full bloated object oriented > > language has that floor, of course, you can help the > > compiler by giving some annotations, but for the theoretical > > results, this is what is proved to be truth. > > > > Thanks in advance > > > > --- El lun, 4/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > So this time I'm happy to be wrong, we can do > > indeed > > > JIT but we should > > > > measure the cost (as for type inference could > > for > > > **imp**? run O(n^3) > > > > and currently run O(n^5), it might be necessary > > do > > > decompiling plus > > > > naturally compiling and forth inc ase of NetObj, > > etc > > > > > > O(n^3)? O(n^5)? If that's performance in practical > > > situations, instead > > > of just a class of theoretical examples it's not what > > we > > > need for > > > everyday use. I'd call it useless. It's > > > defnietely not what I'm > > > thinking of. > > > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Tue Jul 5 16:44:32 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 15:44:32 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705140647.GA9022@topoi.pooq.com> Message-ID: <1309877072.55341.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: yes, that's the case, some call the natural problem in typing statically annotated languages, static type checking (which is resolved pretty much well, some may argue about this in generics but anyway...), if the problem is to determine what is the best compiler that can type check this language without type annotations but rather dynamically typed program (so, it might be reasonable your statement), nevertheless this problems arise in JIT dynamic typed part of the language, but as said a good compromise could be made for those cases, both in theoretical or transforming the problem to other domains such as constraint inferencing which requires several good heuristics, so it's a good point to investigate them. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 09:06 > If understand correctly, these > results are about figuring out what types > the programmer meant if he failed to specify any. My > view is that the > programmer probably knew full well what he meant, and he > might as well > say so, in the interest of clarity if nothing else. I > find programs > with secret types to be incomprehensible, even while I'm > writing them. > > And getting error messages if what I wrote doesn't match > what I > intended, and getting better run-time, well, those are > wonderful > consequences. > > -- hendrik > > On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro > Benavides D. wrote: > > Hi all: > > In fact there is some reqwork to make things happen > faster in Abadi-Cardelli: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > > > Never looked that paper, if I may say so, the approach > by Tian Zhao omitted it, but as for your worries, this could > make it work faster. > > I guess there should be some Turing awards waiting for > somebody who can run even lower, but this geniuses come > counted by the fingers of one hand, but you can't say this > is the end, that's for sure, but then there's even worse > situations if you add the self-object extension like for JS, > and this is a certainly an open problem (even that I tried > but for a good type theorist could be not that hard, as I > consider myself just a follower of them). > > But Abadi-Cardelli's work was a bit hit, and it's > quite practical in terms of research results I believe. Yet > this is not the last work in this are. > > Thanks in advance > > > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. > > escribi?: > > > > > De: Daniel Alejandro Benavides D. > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > > Fecha: lunes, 4 de julio, 2011 19:16 > > > Hi all: > > > I think yes, any other full bloated object > oriented > > > language has that floor, of course, you can help > the > > > compiler by giving some annotations, but for the > theoretical > > > results, this is what is proved to be truth. > > > > > > Thanks in advance > > > > > > --- El lun, 4/7/11, Hendrik Boom > > > escribi?: > > > > > > > De: Hendrik Boom > > > > Asunto: Re: [M3devel] JIT [WAS: Google > Benchmark - > > > anyone interested in an Modula 3 version?] > > > > Para: m3devel at elegosoft.com > > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > > > So this time I'm happy to be wrong, we > can do > > > indeed > > > > JIT but we should > > > > > measure the cost (as for type inference > could > > > for > > > > **imp**? run O(n^3) > > > > > and currently run O(n^5), it might be > necessary > > > do > > > > decompiling plus > > > > > naturally compiling and forth inc ase > of NetObj, > > > etc > > > > > > > > O(n^3)? O(n^5)? If that's performance in > practical > > > > situations, instead > > > > of just a class of theoretical examples it's > not what > > > we > > > > need for > > > > everyday use. I'd call it > useless. It's > > > > defnietely not what I'm > > > > thinking of. > > > > > > > > -- hendrik > > > > > > > > From dabenavidesd at yahoo.es Tue Jul 5 18:08:30 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:08:30 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309882110.36481.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Tue Jul 5 18:30:31 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:30:31 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309883431.49039.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: what if one don't understand that well, it must conquer first the valley than the high mountain, technically speaking, there are several other issues before coding. Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 11:16 other than stating what's "doable", have you "done" anything lately? On Tue, Jul 5, 2011 at 11:08 AM, Daniel Alejandro Benavides D. wrote: Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 18:50:41 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 12:50:41 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> Message-ID: <20110705165041.GA9653@topoi.pooq.com> On Tue, Jul 05, 2011 at 10:20:34AM -0500, felipe valdez wrote: > why let the computer do the inferencing work, if we can do the typing work! > > don't let the computer work for you! (1) computers aren't that fast yet. They can still use some help. (2) computers might infer the wrong types -- types that fit what we coded, but not what we meant. That said, there are rather simple type inference methods that require a lot less explicit typing than today's conventional strongly typed languages impose on us. Ideally, the computer should do about the same amount of type inferencing that a human reader would easily do when reading the program. Note that I said "reader", not "writer". -- hendrik > > > On Tue, Jul 5, 2011 at 9:06 AM, Hendrik Boom wrote: > > > If understand correctly, these results are about figuring out what types > > the programmer meant if he failed to specify any. My view is that the > > programmer probably knew full well what he meant, and he might as well > > say so, in the interest of clarity if nothing else. I find programs > > with secret types to be incomprehensible, even while I'm writing them. > > > > And getting error messages if what I wrote doesn't match what I > > intended, and getting better run-time, well, those are wonderful > > consequences. > > > > -- hendrik From hendrik at topoi.pooq.com Tue Jul 5 19:34:10 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 13:34:10 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> <20110705165041.GA9653@topoi.pooq.com> Message-ID: <20110705173410.GA12238@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:08:07PM -0500, felipe valdez wrote: > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > Ideally, the computer should do about the same amount of type > > inferencing that a human reader would easily do when reading > > the program. Note that I said "reader", not "writer". > > > > > but how far are we from this Ideal, really? > can these rules be automated? The hard part here is figuring out what human readers can do. It's important to match the human reader and not to go beyond his abilities. Because then the writer (who will probably understand his program bettr than a reader) will get feedback from his type-checker when the code gets too obscure for a reader. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 20:57:00 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 19:57:00 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705173410.GA12238@topoi.pooq.com> Message-ID: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: yes, in that domain yes, but in the many ways of solving a problem, computers have a rather limited extent, therefore you can't expect such facilities, but for things like automating algorithm comprehension, this is a task of algorithmic learning. A way of this ahs been proposed for a constraint language (e.g Juno),: http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA Well that said, the idea behind of this is how to optimize the program, but to define a good type system implementable is important too, is good to have many kernel for doing that. Abadi-Cardelli is a good one, but certainly not the only one, Abadi Baby Modula-3 is yet another one, I can't understand, it should be be in the Modula-3 research reports, or in the bibliography, I will see, how about that. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 12:34 > On Tue, Jul 05, 2011 at 12:08:07PM > -0500, felipe valdez wrote: > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > > > Ideally, the computer should do about the same > amount of type > > > inferencing that a human reader would easily do > when reading > > > the program. Note that I said "reader", not > "writer". > > > > > > > > but how far are we from this Ideal, really? > > can these rules be automated? > > The hard part here is figuring out what human readers can > do. It's > important to match the human reader and not to go beyond > his abilities. > Because then the writer (who will probably understand his > program bettr > than a reader) will get feedback from his type-checker when > the code > gets too obscure for a reader. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 21:10:15 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 20:10:15 +0100 (BST) Subject: [M3devel] general purpose C libraries (C Kernel) Message-ID: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I got this in my inbox, want to share it, sorry if feels like cross-posting, if so, tell me and I wouldn't mind to not share it: http://links.techwebnewsletters.com/servlet/MailView?ms=MzY3ODY2NzES1&r=MjIxNTU4ODA2MQS2&j=MTA1NTY3MDA4S0&mt=1&rt=0 Anyway, limited options is rather mundane word, I mean, Sun NeWS was very open and flexible, yest it was portable to Modula runtime, and certainly the Andrew Message System at CMU was jsut another example a kernel of C plus objects was able to be replaced by Modula-3. C-- comes handy to this limited portability tasks, I wonder why people don't use it. Maybe the same reason about Modula-3 too. Thanks in advance From dabenavidesd at yahoo.es Tue Jul 5 23:38:01 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:38:01 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Message-ID: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Hi all: I see now, the reason was explained by Luca Cardelli on his "recent" interview, they asked to come with something of practical use, yet they had pressure, to retrieve some good quality work of good practical results, that become the Theory of Objects (with Abadi, see [3]) on: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 But the theory on Baby Modula-3 was the idealization they had on Modula-3 typing system, unfortunately more work on that got that direction, towards the final years on the laboratory was somewhat cut, that explains why Larch project wasn't continued there after initial works (fortunately continued though Greg Nelson ESC work, which is by itself more practical). And yes, I believe this is path for a good structured at least terms comprehension of the language (I mean whenever I take foreign language, i.e English class i must study phonetics, semantics and grammar, well at least that's is what I was told by a former German language undergraduate student, specially grammar, which is for us specially hard, maybe be not the case for say you know, almost anyone else), so in this terms this is good to know for our future culprits, similarly we could argue for i.e us Computer scientists, the most valuable experience using Modula-3 was in Cambridge (and I have seen real good Modula-3 seminal work coming from there as well as other ones as well) Abadi and Cardelli and Matthes created a theory to create extensible syntax and use it in a DB realization of Modula-3: http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf I guess this could be the way to go, besides the seminal work in denotational (to express Modula-3 correctness in baby Modula-3) is available for free from its author: http://people.cis.ksu.edu/~schmidt/text/densem.html I believe we could make a point on this results preliminary but very important for us to depart from the rest of approaches, or at least have our own version (Baby Modula-3 is not BTW implemented as for what I know about, I wish could be proved to be correct, but I don't know neither, could be interpreted as it is, so I haven't seen it). That said, there is even more, some people went through the work or recapitulating the Theory of Objects in terms of denotational semantics http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf And a way to unify them based on recursive types, or say a way to treat programming language type back and forth (note I didn't say types if so, this is not the case), one of its authors wrote the most used book on "Types for Programming languages":, the former [2]: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 Perhaps this is the way an actual Baby Modula-3 implementation might become a good vehicle to explain programming language semantics (maybe not programming languages at all, just their semantics). If somebody agrees on that as Cardelli said to be this the next wave in his interview on Modula-3, let's bring it on www-baby.modula3.com for instance Let mew know your thoughts, thanks in advance [1] P. Robinson, ?From ML to C via Modula-3 an approach to teaching programming,? 1994. [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic Framework for Objects,? 1993. [3] M. Abadi and L. Cardelli, ?A Semantics of Object Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, p. 332--341, 1994. --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 13:57 > Hi all: > yes, in that domain yes, but in the many ways of solving a > problem, computers have a rather limited extent, therefore > you can't expect such facilities, but for things like > automating algorithm comprehension, this is a task of > algorithmic learning. > A way of this ahs been proposed for a constraint language > (e.g Juno),: > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > Well that said, the idea behind of this is how to optimize > the program, but to define a good type system implementable > is important too, is good to have many kernel for doing > that. Abadi-Cardelli is a good one, but certainly not the > only one, Abadi Baby Modula-3 is yet another one, I can't > understand, it should be be in the Modula-3 research > reports, or in the bibliography, I will see, how about > that. > > Thanks in advance > > --- El mar, 5/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: martes, 5 de julio, 2011 12:34 > > On Tue, Jul 05, 2011 at 12:08:07PM > > -0500, felipe valdez wrote: > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom > wrote: > > > > > > > Ideally, the computer should do about the > same > > amount of type > > > > inferencing that a human reader would easily > do > > when reading > > > > the program. Note that I said > "reader", not > > "writer". > > > > > > > > > > > but how far are we from this Ideal, really? > > > can these rules be automated? > > > > The hard part here is figuring out what human readers > can > > do. It's > > important to match the human reader and not to go > beyond > > his abilities. > > Because then the writer (who will probably understand > his > > program bettr > > than a reader) will get feedback from his type-checker > when > > the code > > gets too obscure for a reader. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 23:58:21 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:58:21 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Message-ID: <1309903101.50912.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: I mean in terms of Reactor Critical Mass, the core, hopefully safe well enough cool for the nextg wave in Programming (sorry, but I guess this is not a good comparison). Thanks in advance --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 16:38 > Hi all: > I see now, the reason was explained by Luca Cardelli on his > "recent" interview, they asked to come with something of > practical use, yet they had pressure, to retrieve some good > quality work of good practical results, that become the > Theory of Objects (with Abadi, see [3]) on: > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 > > But the theory on Baby Modula-3 was the idealization they > had on Modula-3 typing system, unfortunately more work on > that got that direction, towards the final years on the > laboratory was somewhat cut, that explains why Larch project > wasn't continued there after initial works (fortunately > continued though Greg Nelson ESC work, which is by itself > more practical). > And yes, I believe this is path for a good structured at > least terms comprehension of the language (I mean whenever I > take foreign language, i.e English class i must study > phonetics, semantics and grammar, well at least that's is > what I was told by a former German language undergraduate > student, specially grammar, which is for us specially hard, > maybe be not the case for say you know, almost anyone else), > so in this terms this is good to know for our future > culprits, similarly we could argue for i.e us Computer > scientists, the most valuable experience using Modula-3 was > in Cambridge (and I have seen real good Modula-3 seminal > work coming from there as well as other ones as well) > Abadi and Cardelli and Matthes created a theory to create > extensible syntax and use it in a DB realization of > Modula-3: > > http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf > > I guess this could be the way to go, besides the seminal > work in denotational (to express Modula-3 correctness in > baby Modula-3) is available for free from its author: > http://people.cis.ksu.edu/~schmidt/text/densem.html > > I believe we could make a point on this results preliminary > but very important for us to depart from the rest of > approaches, or at least have our own version (Baby Modula-3 > is not BTW implemented as for what I know about, I wish > could be proved to be correct, but I don't know neither, > could be interpreted as it is, so I haven't seen it). > > That said, there is even more, some people went through the > work or recapitulating the Theory of Objects in terms of > denotational semantics > > http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf > > And a way to unify them based on recursive types, or say a > way to treat programming language type back and forth (note > I didn't say types if so, this is not the case), one of its > authors wrote the most used book on "Types for Programming > languages":, the former [2]: > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 > > Perhaps this is the way an actual Baby Modula-3 > implementation might become a good vehicle to explain > programming language semantics (maybe not programming > languages at all, just their semantics). > If somebody agrees on that as Cardelli said to be this the > next wave in his interview on Modula-3, let's bring it on > www-baby.modula3.com for instance > > Let mew know your thoughts, thanks in advance > > [1] P. Robinson, ?From ML to C via Modula-3 an approach > to teaching programming,? 1994. > > [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic > Framework for Objects,? 1993. > > [3] M. Abadi and L. Cardelli, ?A Semantics of Object > Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, > p. 332--341, 1994. > > > --- El mar, 5/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: martes, 5 de julio, 2011 13:57 > > Hi all: > > yes, in that domain yes, but in the many ways of > solving a > > problem, computers have a rather limited extent, > therefore > > you can't expect such facilities, but for things like > > automating algorithm comprehension, this is a task of > > algorithmic learning. > > A way of this ahs been proposed for a constraint > language > > (e.g Juno),: > > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > > > Well that said, the idea behind of this is how to > optimize > > the program, but to define a good type system > implementable > > is important too, is good to have many kernel for > doing > > that. Abadi-Cardelli is a good one, but certainly not > the > > only one, Abadi Baby Modula-3 is yet another one, I > can't > > understand, it should be be in the Modula-3 research > > reports, or in the bibliography, I will see, how > about > > that. > > > > Thanks in advance > > > > --- El mar, 5/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: martes, 5 de julio, 2011 12:34 > > > On Tue, Jul 05, 2011 at 12:08:07PM > > > -0500, felipe valdez wrote: > > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik > Boom > > wrote: > > > > > > > > > Ideally, the computer should do about > the > > same > > > amount of type > > > > > inferencing that a human reader would > easily > > do > > > when reading > > > > > the program. Note that I said > > "reader", not > > > "writer". > > > > > > > > > > > > > > but how far are we from this Ideal, really? > > > > can these rules be automated? > > > > > > The hard part here is figuring out what human > readers > > can > > > do. It's > > > important to match the human reader and not to > go > > beyond > > > his abilities. > > > Because then the writer (who will probably > understand > > his > > > program bettr > > > than a reader) will get feedback from his > type-checker > > when > > > the code > > > gets too obscure for a reader. > > > > > > -- hendrik > > > > > > From hendrik at topoi.pooq.com Wed Jul 6 03:53:43 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 21:53:43 -0400 Subject: [M3devel] general purpose C libraries (C Kernel) In-Reply-To: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Message-ID: <20110706015343.GA29079@topoi.pooq.com> On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > C-- comes handy to this limited portability tasks, I wonder why people > don't use it. Maybe the same reason about Modula-3 too. Perhaps because as far as I know the only code generator for C-- generates 32-bit Intel code. That doesn't provide much in the way of portability. There's rumours of other code genrators, but I haven't seen them yet. Well, there is a portable byte-code interpreter written in C, but that's very specifically not the point of C--. -- hendrik From hosking at cs.purdue.edu Wed Jul 6 15:47:35 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Wed, 6 Jul 2011 09:47:35 -0400 Subject: [M3devel] concurrency In-Reply-To: <20110704133917.GA24338@topoi.pooq.com> References: <20110704133917.GA24338@topoi.pooq.com> Message-ID: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > There was a lot of discussion on problems with concurrency when we wen > to pthreads implementation so that we could make use of multiple CPUs. > After a while disuccion sttopped. > > Have these problems all been resolved yet? There are issues that have been reported but which I've not had time to explore. Too busy trying to finish my book on GC. I hope to have time to work on things soon. > If I recall correctly, there was a problem with one program, cvsup, > using fork as well as threads. This worked with green threads, but not > with pthreads. Has cvsup been rehabilitated in some way? cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. > How do pthreads interact with the garbage collector? Or are there > several garbage collectors with different interaction modalities? The current garbage collector expects to be able to stop all the threads in order to *initiate* a garbage collection by scanning their stacks. Unfortunately, getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). [This shortcoming is a problem also for the Boehm collector for C/C++.] In CM3 the same garbage collector is used whether for pthreads or user threads. The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. To handle calls to external code not generated by the M3 compiler we would also need to have a thread atomically post the fact that it is in external code on entry and un-post that fact on return (i.e., at calls to <*EXTERNAL*>). To make that synchronization efficient we need to use CAS or LL/SC atomicity primitives (rather than relying on pthread_mutex calls). I still need to fix all the atomics support in CM3 to be able to do that properly. So, my list of TODOs includes: 1) Explore (and perhaps fix) reported issues with the current pthreads implementation [short-term] 2) Commit fixes to CM3 support for atomics [medium-term] 3) Switch CM3 threads over to cooperative explicit suspension rather than signal-based suspension [long-term] From dabenavidesd at yahoo.es Wed Jul 6 17:03:09 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 16:03:09 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: I would go for the lower over head in Modula-3 lite implementations as legacy systems: http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html Currently the only thing replacement of CVSup is not ahead of it, in the server side which is precisely the point of rewriting it (Modula-3 big footprint and complexity), as for that I know, there could be some improvement over it but the needed changes to the server could diminish the advantage. The only thing they don't like of CVSup is the disk usage overhead, but this is something inherent to the application if I may say so, even more, if development were continued perhaps dcvs could a way to address somehow that (given the client replacement doesn't affect the project too much). But current support for them is wacky AFAIK pm3 is broken, so this is a plus over it, and a plus in cm3 against java but not C. http://forums.pcbsd.org/archive/index.php/t-3416.html Anyways, there should be some application to rescue from their repositories so they keep it alive (shouldn't we?): http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics Thanks in advance --- El mi?, 6/7/11, Tony Hosking escribi?: > De: Tony Hosking > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > There was a lot of discussion on problems with > concurrency when we wen > > to pthreads implementation so that we could make use > of multiple CPUs. > > After a while disuccion sttopped. > > > > Have these problems all been resolved yet? > > There are issues that have been reported but which I've not > had time to explore. > Too busy trying to finish my book on GC. I hope to > have time to work on things soon. > > > If I recall correctly, there was a problem with one > program, cvsup, > > using fork as well as threads. This worked with > green threads, but not > > with pthreads. Has cvsup been rehabilitated in > some way? > > cvsup is badly behaved with respect to POSIX semantics for > fork and threads. It still needs to be fixed rather > than making M3 threads support its bad behavior. > > > How do pthreads interact with the garbage > collector? Or are there > > several garbage collectors with different interaction > modalities? > > The current garbage collector expects to be able to stop > all the threads in order to *initiate* a garbage collection > by scanning their stacks. Unfortunately, getting > pthreads to stop reliably is difficult on some operating > systems (BSD derivatives appear to be bad at this, but > Windows, Linux and OSX seem to function well enough). > [This shortcoming is a problem also for the Boehm collector > for C/C++.] In CM3 the same garbage collector is used > whether for pthreads or user threads. > > The best way to get M3 threads to play nicely on all OS > would be to avoid thread stopping mechanisms that expect > cooperation from the OS and simply to use explicit polling > inserted by the compiler at calls and backward branches to > decide if the thread should suspend itself. To handle > calls to external code not generated by the M3 compiler we > would also need to have a thread atomically post the fact > that it is in external code on entry and un-post that fact > on return (i.e., at calls to <*EXTERNAL*>). To > make that synchronization efficient we need to use CAS or > LL/SC atomicity primitives (rather than relying on > pthread_mutex calls). I still need to fix all the > atomics support in CM3 to be able to do that properly. > > So, my list of TODOs includes: > > 1) Explore (and perhaps fix) reported issues with the > current pthreads implementation [short-term] > 2) Commit fixes to CM3 support for atomics [medium-term] > 3) Switch CM3 threads over to cooperative explicit > suspension rather than signal-based suspension [long-term] > > > From dabenavidesd at yahoo.es Wed Jul 6 18:14:59 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 17:14:59 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Message-ID: <1309968899.43958.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: In fact Archlinux use it too: https://bbs.archlinux.org/viewtopic.php?id=655 This a good example of their use, in fact there NPTL server and client, I can run it in my system (ubuntu804 hardy x86): http://www2.cddc.vt.edu/linux/distributions/archlinux/other/cvsup/ Interesting I can't do it ldd, but can run its CLI. Thanks in advance --- El mi?, 6/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" , "Tony Hosking" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 10:03 > Hi all: > I would go for the lower over head in Modula-3 lite > implementations as legacy systems: > http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html > > Currently the only thing replacement of CVSup is not ahead > of it, in the server side which is precisely the point of > rewriting it (Modula-3 big footprint and complexity), as for > that I know, there could be some improvement over it but the > needed changes to the server could diminish the advantage. > > The only thing they don't like of CVSup is the disk usage > overhead, but this is something inherent to the > application if I may say so, even more, if development were > continued perhaps dcvs could a way to address somehow that > (given the client replacement doesn't affect the project too > much). > But current support for them is wacky AFAIK pm3 is broken, > so this is a plus over it, and a plus in cm3 against java > but not C. > > http://forums.pcbsd.org/archive/index.php/t-3416.html > > Anyways, there should be some application to rescue from > their repositories so they keep it alive (shouldn't we?): > http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics > > Thanks in advance > > --- El mi?, 6/7/11, Tony Hosking > escribi?: > > > De: Tony Hosking > > Asunto: Re: [M3devel] concurrency > > Para: "Hendrik Boom" > > CC: m3devel at elegosoft.com > > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > > > There was a lot of discussion on problems with > > concurrency when we wen > > > to pthreads implementation so that we could make > use > > of multiple CPUs. > > > After a while disuccion sttopped. > > > > > > Have these problems all been resolved yet? > > > > There are issues that have been reported but which > I've not > > had time to explore. > > Too busy trying to finish my book on GC. I hope > to > > have time to work on things soon. > > > > > If I recall correctly, there was a problem with > one > > program, cvsup, > > > using fork as well as threads. This worked > with > > green threads, but not > > > with pthreads. Has cvsup been rehabilitated > in > > some way? > > > > cvsup is badly behaved with respect to POSIX semantics > for > > fork and threads. It still needs to be fixed > rather > > than making M3 threads support its bad behavior. > > > > > How do pthreads interact with the garbage > > collector? Or are there > > > several garbage collectors with different > interaction > > modalities? > > > > The current garbage collector expects to be able to > stop > > all the threads in order to *initiate* a garbage > collection > > by scanning their stacks. Unfortunately, > getting > > pthreads to stop reliably is difficult on some > operating > > systems (BSD derivatives appear to be bad at this, > but > > Windows, Linux and OSX seem to function well enough). > > > [This shortcoming is a problem also for the Boehm > collector > > for C/C++.] In CM3 the same garbage collector is > used > > whether for pthreads or user threads. > > > > The best way to get M3 threads to play nicely on all > OS > > would be to avoid thread stopping mechanisms that > expect > > cooperation from the OS and simply to use explicit > polling > > inserted by the compiler at calls and backward > branches to > > decide if the thread should suspend itself. To > handle > > calls to external code not generated by the M3 > compiler we > > would also need to have a thread atomically post the > fact > > that it is in external code on entry and un-post that > fact > > on return (i.e., at calls to > <*EXTERNAL*>). To > > make that synchronization efficient we need to use CAS > or > > LL/SC atomicity primitives (rather than relying on > > pthread_mutex calls). I still need to fix all > the > > atomics support in CM3 to be able to do that > properly. > > > > So, my list of TODOs includes: > > > > 1) Explore (and perhaps fix) reported issues with the > > current pthreads implementation [short-term] > > 2) Commit fixes to CM3 support for atomics > [medium-term] > > 3) Switch CM3 threads over to cooperative explicit > > suspension rather than signal-based suspension > [long-term] > > > > > > > From jay.krell at cornell.edu Wed Jul 6 18:47:26 2011 From: jay.krell at cornell.edu (Jay K) Date: Wed, 6 Jul 2011 16:47:26 +0000 Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> References: <20110704133917.GA24338@topoi.pooq.com>, <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: > cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. For which "threads"? It doesn't use pthreads directly. Where are the Modula-3 threads + fork semantics spelled out? I suspect nowhere. > getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). I'm nervous about SuspendThread + GetThreadContext esp. on Win32-on-Win64. - I don't understand how in general preemtive thread suspension can/does work on any multi-processor system, not just Windows. - This lots of online discussion about GetThreadContext not returning what code expects. > The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and > simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. I like this, as it would remove a fair amount of target-specific code. - Jay -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Wed Jul 6 22:53:31 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Wed, 6 Jul 2011 16:53:31 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706015343.GA29079@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> Message-ID: <20110706205331.GA14289@topoi.pooq.com> On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > C-- comes handy to this limited portability tasks, I wonder why people > > don't use it. Maybe the same reason about Modula-3 too. > > Perhaps because as far as I know the only code generator for C-- > generates 32-bit Intel code. That doesn't provide much in the way of > portability. > > There's rumours of other code genrators, but I haven't seen them yet. Here's some info from the C-- site: Other C-- compilers : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. -- http://www.cminusminus.org/code.html Note that none of these are the rumoured ones I mentioned. But that same web page mentions a system called OCamlBurg, which seems to be a parser generator that parses trees instead of strings. It can be used for instruction selection in a code generator. Maybe it's time I looked into it. -- hendrik > > Well, there is a portable byte-code interpreter written in C, but > that's very specifically not the point of C--. > > -- hendrik From hendrik at topoi.pooq.com Fri Jul 8 22:16:34 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Fri, 8 Jul 2011 16:16:34 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706205331.GA14289@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> <20110706205331.GA14289@topoi.pooq.com> Message-ID: <20110708201634.GB23370@topoi.pooq.com> On Wed, Jul 06, 2011 at 04:53:31PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > > C-- comes handy to this limited portability tasks, I wonder why people > > > don't use it. Maybe the same reason about Modula-3 too. > > > > Perhaps because as far as I know the only code generator for C-- > > generates 32-bit Intel code. That doesn't provide much in the way of > > portability. Looking at the current source code for qc--, there appear to be filenames for code genreators for the alpha, sparc, ia64, mips, x86. How many of these are in working order I don't know. There seem to be subdirecotries of a test2 directory called ppc, sparc, x86. These are recognisable processor names, so maybe there's hope for some of these. I know the x86 works; I'm using it. Maybe I should look into ia64 sometime. Things might possibly not be as dismal as I thought. > > > > There's rumours of other code genrators, but I haven't seen them yet. > > Here's some info from the C-- site: > > Other C-- compilers > > : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. > > : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. > > : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. > > -- http://www.cminusminus.org/code.html > > Note that none of these are the rumoured ones I mentioned. But > that same web page mentions a system called OCamlBurg, which > seems to be a parser generator that parses trees instead of > strings. It can be used for instruction selection in a code > generator. Maybe it's time I looked into it. > > -- hendrik > > > > > Well, there is a portable byte-code interpreter written in C, but > > that's very specifically not the point of C--. > > > > -- hendrik -- hendrik From kcdurocher at gmail.com Sat Jul 9 04:44:24 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 8 Jul 2011 21:44:24 -0500 Subject: [M3devel] Rd.GetText Question Message-ID: The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? The interface for Rd states this for Rd.Length(): "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? Thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Sat Jul 9 18:57:49 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sat, 9 Jul 2011 12:57:49 -0400 Subject: [M3devel] Rd.GetText Question In-Reply-To: References: Message-ID: Hmm. GetText(rd, Rd.Length(rd)) will fail with a run-time error if Length returns -1 because -1 is not a CARDINAL. I don't think this is generally a safe idiom. On Jul 8, 2011, at 10:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? > > Thanks. From rodney_bates at lcwb.coop Sun Jul 10 15:32:52 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sun, 10 Jul 2011 08:32:52 -0500 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] Message-ID: <4E19AA04.1060207@lcwb.coop> On 07/05/2011 09:06 AM, Hendrik Boom wrote: > If understand correctly, these results are about figuring out what types > the programmer meant if he failed to specify any. My view is that the > programmer probably knew full well what he meant, and he might as well > say so, in the interest of clarity if nothing else. I find programs > with secret types to be incomprehensible, even while I'm writing them. > > And getting error messages if what I wrote doesn't match what I > intended, and getting better run-time, well, those are wonderful > consequences. > > -- hendrik > Yes, well said! Here is a section of a draft of an article I have been working on, regarding why I think systematic dynamic typing in programming languages is, for everyday programming, a really bad idea. It's just one of several arguments. ------------------------------------------------------------------------ 1) Dynamic typing is seldom either needed or used. The majority of variables (1) in sensible programs are what I call _algorithmically statically typed_. By this, I mean, informally, that there is a natural type for the variable that can be inferred from its assignments and uses. Moreover, this is a static property, i.e., independent of the program's inputs, and thus can be inferred from the code alone. Slightly more formally, it means that either assignments or uses of values that are not members of this type represent buggy behavior, or at best are pathological coding and irrelevant to correct behavior. In practice, this almost always means such assignments don't belong, and such uses will result in immediate crashes. There are a lot of pathological cases that would belie my claim, but very few that represent either correct and useful program behavior or sensible coding style. For more elaborate discussion of some such cases and even where they might occasionally be useful, see (I). This concept applies to object-oriented programming. The algorithmic static type of a variable is just a common supertype of the types the variable could take on. This needs to be high enough in the class hierarchy to encompass all the useful values, but not so high that it includes anything lacking a method that could be invoked on the variable. Rarely will this be the most-general type in the language. In a statically typed language, the programmer will declare the variable with a type equal to its algorithmic static type. I call this the variable's _linguistic static type_. Otherwise, a compile error will almost always result. In a dynamically typed language, nothing in the code gives the type explicitly, yet it is nevertheless a static property that is vital to a reader's understanding. Often, it will be hard work for a reader to infer. ------------------------------------------------------------------------ Rodney Bates From dabenavidesd at yahoo.es Sun Jul 10 19:27:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sun, 10 Jul 2011 18:27:24 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> Message-ID: <1310318844.47353.YahooMailClassic@web29710.mail.ird.yahoo.com> Hi all: I think you are correct, the semantics model of statically typed languages make them better for production code, but for the development, is up to the developer to be able to specify them clearly succinctly (such as by intention) or write them as a part of the program, in case a machine does infer them automatically it doesn't mean you won't run them untyped, since it has a typed representation, still it's untyped language, clearly the correct semantics are driven as you say algorithmically, which can be a onerous time you wouldn't want to pay for that only. As I said and from the context the problem is time (whether development, algorithm complexity), but for independent style point of view, you want to leave the most complicated parts not for the beginning or the last step in the development, just make it work for any idealization of work (like was Baby Modula-3), still may be interpreted and be too onerous, but in machine terms be a implementable option (i.e teaching programming), thus you can argue the time dependent feature is always something you may leave up also to the programmer. If you why I would pick such a language for teaching I would ask your learner why would he take the time to lead the system towards what you want, instead of what he wants to leave out as a programmer related task, the typing framework you may want to apply to solve a particular problem. In that sense there is obviously a need for the programmer to develop such quick constructs or to renounce them (type checking could be potentially semi definable or semi decidable) which leads to more restrictions than assumptions, which is bad in my ideal again independent point of view but good in legal time. So what to do, good question, towards that, I mean there shouldbe a typeful programming without ill-types burden and without the price of it. Modula-3 is closer to that little performance burden but still some price to pay, that's why Baby Modula-3 idea came from I believe, little burden in compile time, little price to pay. Such an idealization requires good work towards implementing Baby Modula-3+ 0,1,2, etc the type system to evolve from that idea to an actual implementation, many parted from there as departed too, but still the typing frameworks unrelated to them are too provocative for the simple point of view, what it remains to do though is to make the Baby Modula-3 be trustful for the typeful programming but in practical terms and economical terms a reality, again first TODO there would be give equational reasoning semantics for Baby Modula-3 in a subset of it or two growing it in the better fashion to be abstracted of such, to be able to define such sublanguage in terms of the decidable framework. Give some semantics for Modula-3 that define the exact solution to that problem and yet it could be hard to prove your systems is sound or safe and implementable (can't wait for this work to be done, but still how much it takes to be done and to be able to be doable in terms long compile time even harder), thus I can't see what is wrong with the typed or untyped Universe as soon there is such direct relation I don't see anything **wrong** here in doing so. To state this in better working implementation, there are two possibilities to either choose the best you can perform, or choose the best can be done. I prefer the later since it would mean you can type programs even beyond your expectations rapidly, which is to say somehow, your typing universe is infinite, rather than somehow a perspective could say is too restrictive (I'm not saying that of course, if I may say so). In that words, the best of both worlds, the unrealizable and the implementable. This is hard to say, we have Baby Modula-3, we would have such a growing kernel to type better anything else in this and even beyond the language (as SRC-RR-95 is about) If I may say so, the work done by Cardelly in Fsub was to perform the logical deduction of such rules in accordance to such semantics of an implementation of Modula-3, I believe one could say baby Modula-3, see: http://lucacardelli.name/Artifacts/Drawings/FSub/FSubCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/DynamicTypecheck/DynamicCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/Typing/TypingCartoon.pdf If anyone wants to think more absurdly there are no proves that somebody cares that, or just think that's something undone, but not unrealizable, which is the proof we might want to solve: http://books.google.com/books?id=vJBQX7V8O3sC&lpg=RA1-PA158&ots=1ZJvSIsaeR&dq=fsub%20cardelli&pg=RA1-PA157#v=onepage&q&f=false Absurd doesn't mean unrealizable of course, just that it is undone. (I don't know but whose would call that honest programming, perhaps would ask Dr Greg Nelson) which is by itself a gift of God of the computer typing tasks I believe (not that I compared with Juno, but related better). Thanks in advance --- El dom, 10/7/11, Rodney M. Bates escribi?: > De: Rodney M. Bates > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: "m3devel" > Fecha: domingo, 10 de julio, 2011 08:32 > > On 07/05/2011 09:06 AM, Hendrik Boom wrote: > > If understand correctly, these results are about > figuring out what types > > the programmer meant if he failed to specify > any. My view is that the > > programmer probably knew full well what he meant, and > he might as well > > say so, in the interest of clarity if nothing > else. I find programs > > with secret types to be incomprehensible, even while > I'm writing them. > > > > And getting error messages if what I wrote doesn't > match what I > > intended, and getting better run-time, well, those are > wonderful > > consequences. > > > > -- hendrik > > > > Yes, well said! > > Here is a section of a draft of an article I have been > working on, regarding > why I think systematic dynamic typing in programming > languages is, for everyday > programming, a really bad idea. It's just one of > several arguments. > > ------------------------------------------------------------------------ > > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what > I call > _algorithmically statically typed_. By this, I mean, > informally, that > there is a natural type for the variable that can be > inferred from its > assignments and uses. Moreover, this is a static > property, i.e., > independent of the program's inputs, and thus can be > inferred from the > code alone. > > Slightly more formally, it means that either assignments or > uses of > values that are not members of this type represent buggy > behavior, or > at best are pathological coding and irrelevant to correct > behavior. > In practice, this almost always means such assignments > don't belong, > and such uses will result in immediate crashes. > > There are a lot of pathological cases that would belie my > claim, but > very few that represent either correct and useful program > behavior or > sensible coding style. For more elaborate discussion > of some such > cases and even where they might occasionally be useful, see > (I). > > This concept applies to object-oriented programming. > The algorithmic > static type of a variable is just a common supertype of the > types the > variable could take on. This needs to be high enough > in the class > hierarchy to encompass all the useful values, but not so > high that it > includes anything lacking a method that could be invoked on > the > variable. Rarely will this be the most-general type > in the language. > > In a statically typed language, the programmer will declare > the > variable with a type equal to its algorithmic static > type. I call > this the variable's _linguistic static type_. > Otherwise, a compile > error will almost always result. In a dynamically > typed language, > nothing in the code gives the type explicitly, yet it is > nevertheless > a static property that is vital to a reader's > understanding. Often, > it will be hard work for a reader to infer. > > ------------------------------------------------------------------------ > > Rodney Bates > From dabenavidesd at yahoo.es Tue Jul 12 00:13:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 11 Jul 2011 23:13:08 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110708201634.GB23370@topoi.pooq.com> Message-ID: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: perhaps somehow unrelated of the topic but anyway, there is a JIT compiler interpreter for for C, a subset and superset of it. It's based also in lcc front end, using BURS an have apparently good timings (I guess there is one of those C-- based on lcc as well to generate C, is that true?), see: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 There was also in DEC-SRC a ML, and Lisp implementations with Modula-2+ RT, there is one technical report (I can't find the reference anymore, later), and there is some material back from 1980s http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 http://mumble.net/~jar/tproject/ There should be copies of those reports for anyone of us I believe (Paul McJones is very helpful there, last time I wrote him he answered fast): http://www.softwarepreservation.org/projects/LISP/embedded/ In case it matters the probably best thing would be to compile JIT everything in Abadi-Cardelli calculus ZINC based machine, then compile it to M3CG (see first paragraph and previous web pages) to C-- to C and using the mentioned compiler run the code, I suppose M3CG has RT support doesn't it? I have one target of the C generated code, pretty open and compatible: http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML I have seen there at DEC worked hard to have good compiler infrastructure, the Vesta and Vulcan Development Environment bridge are pretty big pieces of work,, from the above the most interesting for a possible Baby Modula-3 compiler/interpreter is: http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz Maybe this is enough to build one of such if there is value (maybe it is with dynamic linker/optimizer mlcc and mld, a Modula-3 linker would help this much too, I'm not aware of one in existence, just http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html Which is a very similar so stack representation, compiler, interpreter, debugger, linker) Thanks in advance --- El vie, 8/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com > Fecha: viernes, 8 de julio, 2011 15:16 > On Wed, Jul 06, 2011 at 04:53:31PM > -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom > wrote: > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel > Alejandro Benavides D. wrote: > > > > C-- comes handy to this limited portability > tasks, I wonder why people > > > > don't use it. Maybe the same reason about > Modula-3 too. > > > > > > Perhaps because as far as I know the only code > generator for C-- > > > generates 32-bit Intel code. That doesn't > provide much in the way of > > > portability. > > Looking at the current source code for qc--, there appear > to be > filenames for code genreators for the alpha, sparc, ia64, > mips, x86. > How many of these are in working order I don't > know. There seem to be > subdirecotries of a test2 directory called ppc, sparc, > x86. These are > recognisable processor names, so maybe there's hope for > some of these. > I know the x86 works; I'm using it. Maybe I should > look into ia64 > sometime. > > Things might possibly not be as dismal as I thought. > > > > > > > There's rumours of other code genrators, but I > haven't seen them yet. > > > > Here's some info from the C-- site: > > > > Other C-- compilers > > > > : Fermin Reig's cmmc is implemented in Standard ML on > top of the MLRISC code generator. It emits assembly code for > the Alpha, Sparc, and X86. It implements an obsolete version > of C-- and is no longer maintained. > > > > : The Trampoline C-- Compiler by Sergei Egorov, which > seems to have disappeared from the Web. The Trampoline C-- > compiler implements the obsolete May, 1999 specification and > compiles to C. The author says: it is slow, requires too > much memory, and generates slow C code. But, from the other > hand, it implements almost all of original C-- specification > (including runtime interface), the generated code is > readable, portable, and hopefully correct. > > > > : The Oregon C-- compiler was the first prototype > implementation of C--, also on top of MLRISC. It has been > honorably retired. > > > > -- http://www.cminusminus.org/code.html > > > > Note that none of these are the rumoured ones I > mentioned. But > > that same web page mentions a system called OCamlBurg, > which > > seems to be a parser generator that parses trees > instead of > > strings. It can be used for instruction > selection in a code > > generator. Maybe it's time I looked into it. > > > > -- hendrik > > > > > > > > Well, there is a portable byte-code interpreter > written in C, but > > > that's very specifically not the point of C--. > > > > > > -- hendrik > > -- hendrik > > From dabenavidesd at yahoo.es Wed Jul 13 16:01:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 15:01:36 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Message-ID: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Actually looking more carefully found an actual Gnu C implementation of Obliq (a calculus for it called 0jeblik/IAM, initials for In A Moment): http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf Also the specialty of the language developed further work: http://www.cs.aau.dk/~kleist/Research/reasoning.pdf Also amazingly we would have besides dead-lock free (ESC/Modula-3) and lock free and race conditions free programs using abstract interpretation: This is serious implemented work and well designed I believe, I think we can create a genealogy of ?-calculus for everything we want in Modula-3 too: An actor dedicated process calculus: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 The abstract interpretation for it: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf And for yet another actor calculus of Aspect-oriented programming: Besides that, there are formalization of ?-calculus in Coq: http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf And Isabelle/HOL (see last link in the current message) And the abstract interpretation of it: http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf And even more, the Abadi-Cardelli abstract machine revisited recently: http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf And aspect Oriented programming: http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf I hope this devise some more hard work in Modula-3 (and Obliq too). Thanks in advance --- El lun, 11/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 11 de julio, 2011 17:13 > Hi all: > perhaps somehow unrelated of the topic but anyway, there is > a JIT compiler interpreter for for C, a subset and superset > of it. It's based also in lcc front end, using BURS an have > apparently good timings (I guess there is one of those C-- > based on lcc as well to generate C, is that true?), see: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > There was also in DEC-SRC a ML, and Lisp implementations > with Modula-2+ RT, there is one technical report (I can't > find the reference anymore, later), and there is some > material back from 1980s > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > http://mumble.net/~jar/tproject/ > > There should be copies of those reports for anyone of us I > believe (Paul McJones is very helpful there, last time I > wrote him he answered fast): > http://www.softwarepreservation.org/projects/LISP/embedded/ > > In case it matters the probably best thing would be to > compile JIT everything in Abadi-Cardelli calculus ZINC based > machine, then compile it to M3CG (see first paragraph and > previous web pages) to C-- to C and using the mentioned > compiler run the code, I suppose M3CG has RT support doesn't > it? I have one target of the C generated code, pretty open > and compatible: > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > I have seen there at DEC worked hard to have good compiler > infrastructure, the Vesta and Vulcan Development Environment > bridge are pretty big pieces of work,, from the above the > most interesting for a possible Baby Modula-3 > compiler/interpreter is: > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > Maybe this is enough to build one of such if there is value > (maybe it is with dynamic linker/optimizer mlcc and mld, a > Modula-3 linker would help this much too, I'm not aware of > one in existence, just > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > Which is a very similar so stack representation, compiler, > interpreter, debugger, linker) > > Thanks in advance > > --- El vie, 8/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com > > Fecha: viernes, 8 de julio, 2011 15:16 > > On Wed, Jul 06, 2011 at 04:53:31PM > > -0400, Hendrik Boom wrote: > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik > Boom > > wrote: > > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, > Daniel > > Alejandro Benavides D. wrote: > > > > > C-- comes handy to this limited > portability > > tasks, I wonder why people > > > > > don't use it. Maybe the same reason > about > > Modula-3 too. > > > > > > > > Perhaps because as far as I know the only > code > > generator for C-- > > > > generates 32-bit Intel code. That > doesn't > > provide much in the way of > > > > portability. > > > > Looking at the current source code for qc--, there > appear > > to be > > filenames for code genreators for the alpha, sparc, > ia64, > > mips, x86. > > How many of these are in working order I don't > > know. There seem to be > > subdirecotries of a test2 directory called ppc, > sparc, > > x86. These are > > recognisable processor names, so maybe there's hope > for > > some of these. > > I know the x86 works; I'm using it. Maybe I > should > > look into ia64 > > sometime. > > > > Things might possibly not be as dismal as I thought. > > > > > > > > > > There's rumours of other code genrators, but > I > > haven't seen them yet. > > > > > > Here's some info from the C-- site: > > > > > > Other C-- compilers > > > > > > : Fermin Reig's cmmc is implemented in Standard > ML on > > top of the MLRISC code generator. It emits assembly > code for > > the Alpha, Sparc, and X86. It implements an obsolete > version > > of C-- and is no longer maintained. > > > > > > : The Trampoline C-- Compiler by Sergei Egorov, > which > > seems to have disappeared from the Web. The Trampoline > C-- > > compiler implements the obsolete May, 1999 > specification and > > compiles to C. The author says: it is slow, requires > too > > much memory, and generates slow C code. But, from the > other > > hand, it implements almost all of original C-- > specification > > (including runtime interface), the generated code is > > readable, portable, and hopefully correct. > > > > > > : The Oregon C-- compiler was the first > prototype > > implementation of C--, also on top of MLRISC. It has > been > > honorably retired. > > > > > > -- http://www.cminusminus.org/code.html > > > > > > Note that none of these are the rumoured ones I > > mentioned. But > > > that same web page mentions a system called > OCamlBurg, > > which > > > seems to be a parser generator that parses trees > > instead of > > > strings. It can be used for instruction > > selection in a code > > > generator. Maybe it's time I looked into > it. > > > > > > -- hendrik > > > > > > > > > > > Well, there is a portable byte-code > interpreter > > written in C, but > > > > that's very specifically not the point of > C--. > > > > > > > > -- hendrik > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Wed Jul 13 17:42:58 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 16:42:58 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Message-ID: <1310571778.12594.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: I apologize because of I forgot the third link of abstract interpretation: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf I suppose this is enough for an ESC in Obliq or network objects wide, somebody recall the network objects RT errors. Can anyone (they also developed the abstract machine for it): http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf And yet another ?-calculus for containment: http://people.cs.kuleuven.be/~dave.clarke/papers/thesis.ps.gz And eventually to som point the same for baby/Modula-3.: http://basics.sjtu.edu.cn/~yuehg/CONCUR/A%20calculus%20for%20concurrent%20objects%2096.pdf And abstract machines for distributed object calculus too: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.96.8767 Besides there are already some effect of Baby Modula-3 in the time has passed with BabyJ, similar but for the JavaScript type inference part. It is a generalization of Baby Modula-3 http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3910 It has an implementation based on Rhino. Thanks in advance --- El mi?, 13/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: mi?rcoles, 13 de julio, 2011 09:01 > Hi all: > Actually looking more carefully found an actual Gnu C > implementation of Obliq (a calculus for it called > 0jeblik/IAM, initials for In A Moment): > http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf > > Also the specialty of the language developed further work: > > http://www.cs.aau.dk/~kleist/Research/reasoning.pdf > > Also amazingly we would have besides dead-lock free > (ESC/Modula-3) and lock free and race conditions free > programs using abstract interpretation: > > This is serious implemented work and well designed I > believe, I think we can create a genealogy of ?-calculus > for everything we want in Modula-3 too: > An actor dedicated process calculus: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 > > The abstract interpretation for it: > http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf > > http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf > > And for yet another actor calculus of Aspect-oriented > programming: > > Besides that, there are formalization of ?-calculus in > Coq: > http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf > > And Isabelle/HOL (see last link in the current message) > > And the abstract interpretation of it: > http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf > > And even more, the Abadi-Cardelli abstract machine > revisited recently: > http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf > > And aspect Oriented programming: > http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf > > I hope this devise some more hard work in Modula-3 (and > Obliq too). > > Thanks in advance > > --- El lun, 11/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: lunes, 11 de julio, 2011 17:13 > > Hi all: > > perhaps somehow unrelated of the topic but anyway, > there is > > a JIT compiler interpreter for for C, a subset and > superset > > of it. It's based also in lcc front end, using BURS an > have > > apparently good timings (I guess there is one of those > C-- > > based on lcc as well to generate C, is that true?), > see: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > > > There was also in DEC-SRC a ML, and Lisp > implementations > > with Modula-2+ RT, there is one technical report (I > can't > > find the reference anymore, later), and there is some > > material back from 1980s > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > > > http://mumble.net/~jar/tproject/ > > > > There should be copies of those reports for anyone of > us I > > believe (Paul McJones is very helpful there, last time > I > > wrote him he answered fast): > > http://www.softwarepreservation.org/projects/LISP/embedded/ > > > > In case it matters the probably best thing would be > to > > compile JIT everything in Abadi-Cardelli calculus ZINC > based > > machine, then compile it to M3CG (see first paragraph > and > > previous web pages) to C-- to C and using the > mentioned > > compiler run the code, I suppose M3CG has RT support > doesn't > > it? I have one target of the C generated code, pretty > open > > and compatible: > > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > > > I have seen there at DEC worked hard to have good > compiler > > infrastructure, the Vesta and Vulcan Development > Environment > > bridge are pretty big pieces of work,, from the above > the > > most interesting for a possible Baby Modula-3 > > compiler/interpreter is: > > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > > > Maybe this is enough to build one of such if there is > value > > (maybe it is with dynamic linker/optimizer mlcc and > mld, a > > Modula-3 linker would help this much too, I'm not > aware of > > one in existence, just > > > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > > > Which is a very similar so stack representation, > compiler, > > interpreter, debugger, linker) > > > > Thanks in advance > > > > --- El vie, 8/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] C-- (was: general > purpose > > C libraries (C Kernel)) > > > Para: m3devel at elegosoft.com > > > Fecha: viernes, 8 de julio, 2011 15:16 > > > On Wed, Jul 06, 2011 at 04:53:31PM > > > -0400, Hendrik Boom wrote: > > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, > Hendrik > > Boom > > > wrote: > > > > > On Tue, Jul 05, 2011 at 08:10:15PM > +0100, > > Daniel > > > Alejandro Benavides D. wrote: > > > > > > C-- comes handy to this limited > > portability > > > tasks, I wonder why people > > > > > > don't use it. Maybe the same > reason > > about > > > Modula-3 too. > > > > > > > > > > Perhaps because as far as I know the > only > > code > > > generator for C-- > > > > > generates 32-bit Intel code. > That > > doesn't > > > provide much in the way of > > > > > portability. > > > > > > Looking at the current source code for qc--, > there > > appear > > > to be > > > filenames for code genreators for the alpha, > sparc, > > ia64, > > > mips, x86. > > > How many of these are in working order I don't > > > know. There seem to be > > > subdirecotries of a test2 directory called ppc, > > sparc, > > > x86. These are > > > recognisable processor names, so maybe there's > hope > > for > > > some of these. > > > I know the x86 works; I'm using it. Maybe > I > > should > > > look into ia64 > > > sometime. > > > > > > Things might possibly not be as dismal as I > thought. > > > > > > > > > > > > > There's rumours of other code > genrators, but > > I > > > haven't seen them yet. > > > > > > > > Here's some info from the C-- site: > > > > > > > > Other C-- compilers > > > > > > > > : Fermin Reig's cmmc is implemented in > Standard > > ML on > > > top of the MLRISC code generator. It emits > assembly > > code for > > > the Alpha, Sparc, and X86. It implements an > obsolete > > version > > > of C-- and is no longer maintained. > > > > > > > > : The Trampoline C-- Compiler by Sergei > Egorov, > > which > > > seems to have disappeared from the Web. The > Trampoline > > C-- > > > compiler implements the obsolete May, 1999 > > specification and > > > compiles to C. The author says: it is slow, > requires > > too > > > much memory, and generates slow C code. But, from > the > > other > > > hand, it implements almost all of original C-- > > specification > > > (including runtime interface), the generated code > is > > > readable, portable, and hopefully correct. > > > > > > > > : The Oregon C-- compiler was the first > > prototype > > > implementation of C--, also on top of MLRISC. It > has > > been > > > honorably retired. > > > > > > > > -- http://www.cminusminus.org/code.html > > > > > > > > Note that none of these are the rumoured > ones I > > > mentioned. But > > > > that same web page mentions a system called > > OCamlBurg, > > > which > > > > seems to be a parser generator that parses > trees > > > instead of > > > > strings. It can be used for > instruction > > > selection in a code > > > > generator. Maybe it's time I looked > into > > it. > > > > > > > > -- hendrik > > > > > > > > > > > > > > Well, there is a portable byte-code > > interpreter > > > written in C, but > > > > > that's very specifically not the point > of > > C--. > > > > > > > > > > -- hendrik > > > > > > -- hendrik > > > > > > > > > From hosking at cs.purdue.edu Thu Jul 14 15:38:21 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Thu, 14 Jul 2011 09:38:21 -0400 Subject: [M3devel] Fwd: Output from "cron" command References: <201107141217.p6ECHMm1017803@niagara.cs.purdue.edu> Message-ID: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Issues with the server? Begin forwarded message: > From: Tony Hosking > Date: July 14, 2011 8:17:22 AM EDT > To: hosking at cs.purdue.edu > Subject: Output from "cron" command > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 18:41:40 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 17:41:40 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Message-ID: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 21:44:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 20:44:36 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Thu Jul 14 21:48:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 14:48:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > This is to say why threads behaved seamengly for so many years in that > fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and > if so how could one implement Unix API without using same NT thread support > or at most would get the same old behaviour if so) but ALPHA_OSF, which > John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. > Anyway, thus the only working-well behaved platform is that only and how > one could run someone else. Perhaps reworking the SPIN threads to target > everything else (if is enough layered we can somehow think that but would of > course need their sources support besides figuring out how to build them) > the other way would be Alphas hardware like for NIC, routers, etc (Jay's > collection might have some data on that). I know for something the virtual > terminals are in another business company, but all net-ware I don't where's > about wherever that is, although I remember something about Gigabit ATM > servers software that they used to run and develop algorithms of Charles > Tacker. > Thanks in advance > > > --- El *jue, 14/7/11, Daniel Alejandro Benavides D. >* escribi?: > > > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" , "Tony Hosking" < > hosking at cs.purdue.edu> > Fecha: jueves, 14 de julio, 2011 11:41 > > Hi all: > I don't know but I haven't tried the cvsup since I was hit by other > problems (such as recompiling DEC-SRC sources like user space threads but > was able before because are broken, meaning I can't afford the loosely > compatibility and don't want apply to lose the system so quickly). > I would like the path to an approach for solving this issues before going > forward. > > test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 > Name lookup failure for "modula3.elegosoft.com": Host name lookup failed > Will retry at 11:40:54 > > > --- El *jue, 14/7/11, Tony Hosking * escribi?: > > > De: Tony Hosking > Asunto: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" > Fecha: jueves, 14 de julio, 2011 08:38 > > Issues with the server? > > Begin forwarded message: > > *From: *Tony Hosking > *Date: *July 14, 2011 8:17:22 AM EDT > *To: *hosking at cs.purdue.edu > *Subject: **Output from "cron" command* > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > > > -- 312-444-2124 Skype: f3l.headhunter Casa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 22:18:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 21:18:52 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310674732.82560.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Thu Jul 14 22:40:35 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 20:40:35 +0000 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com>, <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com>, Message-ID: I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. - Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:00:19 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:00:19 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677219.80729.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I think you are currently correct, still the missing feature would have mirror servers, but how if it doesn't help this (cvsup and dcvs are repository compatible but would need some extra work to install)? test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:51:18 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:10:05 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:44:57 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 14:01:22 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 15:51:52 test at fbd-desktop:~/cm3$ vim cvsup.cm3 test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.org": Host name lookup failed Will retry at 15:54:17 I was going to give you one more Unix platform where CVsup works as expected but who else cares, if you don't I'm fine at every opinion (is not personal, anyway): http://folk.uio.no/griff/kde/cvsup.html There used to be a Unix for a virtual machine customized Unix (called the simos) for AIX, but still the hardware is needed (Jay did you find a lasting home, if so let me know, but anyway what is the status of that ports as today): http://en.wikipedia.org/wiki/SimOS#cite_note-1 --- El jue, 14/7/11, Jay K escribi?: De: Jay K Asunto: RE: [M3devel] Fwd: Output from "cron" command Para: felipevaldez at gmail.com, dabenavidesd at yahoo.es CC: "m3devel" Fecha: jueves, 14 de julio, 2011 15:40 I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. ?- Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:12:50 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:12:50 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Thu Jul 14 23:26:05 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 16:26:05 -0500 Subject: [M3devel] LONGINT problem? Message-ID: I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:58:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:58:08 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Message-ID: <1310680688.21058.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I will call the inspiration against the conspiracy: http://www.softwareconspiracy.com/ http://web.archive.org/web/20081224105205/http://www.cc.gatech.edu/gvu/people/Phd/Krishna/IWHD.html and the video of it is: http://www.ibiblio.org/openvideo/video/chi/chi95_07_m4.mp4 Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "felipe valdez" CC: m3devel at elegosoft.com Fecha: jueves, 14 de julio, 2011 16:12 Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Fri Jul 15 00:15:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 17:15:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: On Thu, Jul 14, 2011 at 3:40 PM, Jay K wrote: > I agree that the relationship is missing or tenuous. But I was going to be > quiet and polite. > > I'm sorry if I was perceived as rude or impolite, this was not my intention. it's just sometimes m3devel discussion goes way over my head (knowledge-wise). I guess it's fair to asume a baseline knowledge for participants, but I feel mostly like an outsider. perhaps I should have posed my statement in the form of a question. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Fri Jul 15 00:17:27 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 22:17:27 +0000 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGINi := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L;UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Fri Jul 15 01:00:11 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 18:00:11 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > > ------------------------------ > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 01:15:53 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Thu, 14 Jul 2011 19:15:53 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven't checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Fri Jul 15 03:30:49 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Fri, 15 Jul 2011 02:30:49 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ?On what platform (OS and CPU) are you building and running your Modula-3 program? ?Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ?I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ?Regards,Randy Coleburn ?From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ?Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ?I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ?#include #include #include ?/* should be 64-bit integers if going over 1 billion */typedef unsigned long xint;#define FMT "%lu"?xint total, prim, max_peri;xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3},??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3},??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}};?void new_tri(xint in[]){??????????? int i;??????????? xint t[3], p = in[0] + in[1] + in[2];???????????? if (p > max_peri) return;???????????? prim ++;???????????? /* for every primitive triangle, its multiples would be right-angled too;??????????? * count them up to the max perimeter */??????????? total += max_peri / p;???????????? /* recursively produce next tier by multiplying the matrices */??????????? for (i = 0; i < 3; i++) {??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2];??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2];??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2];??????????????????????? new_tri(t);??????????? }}?int main(){??????????? xint seed[3] = {3, 4, 5};???????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) {??????????????????????? total = prim = 0;??????????????????????? new_tri(seed);???????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n",??????????????????????????????????? max_peri, total, prim);??????????? }??????????? return 0;} ?The output from that code is: ?Up to 10: 0 triples, 0 primitives.Up to 100: 17 triples, 7 primitives.Up to 1000: 325 triples, 70 primitives.Up to 10000: 4858 triples, 703 primitives.Up to 100000: 64741 triples, 7026 primitives.Up to 1000000: 808950 triples, 70229 primitives.Up to 10000000: 9706567 triples, 702309 primitives.Up to 100000000: 113236940 triples, 7023027 primitives. ?Note this output corresponds with the INTEGER output. ?On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote:Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ?MODULE PyTriples EXPORTS Main; ?IMPORT IO, Fmt; ?VAR tcnt, pcnt, max, i: LONGINT; ?PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) =? VAR perim := a + b + c; ? ? ?? BEGIN? ? IF perim <= max THEN? ? ? pcount := pcount + 1L;? ? ? tcount := tcount + max DIV perim;? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount);? ? END;? END NewTriangle; ?BEGINi := 100L; ?REPEAT? max := i;? tcnt := 0L;? pcnt := 0L;? NewTriangle(3L, 4L, 5L, tcnt, pcnt);? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " &? ? Fmt.LongInt(pcnt) & " Primitives\n");? i := i * 10L;UNTIL i = 10000000L; ?END PyTriples. ?This outputs: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives ?However, if I just use INTEGER on a 64 bit machine, I get the proper output: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives ?Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From wagner at elegosoft.com Fri Jul 15 13:22:41 2011 From: wagner at elegosoft.com (Olaf Wagner) Date: Fri, 15 Jul 2011 13:22:41 +0200 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Quoting Ken Durocher : [...] > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. As only some of the outputs are wrong, I'd guess that one of the output formatting procedures still has a problem with LONGINT. We need to fix that. Olaf -- Olaf Wagner -- elego Software Solutions GmbH Gustav-Meyer-Allee 25 / Geb?ude 12, 13355 Berlin, Germany phone: +49 30 23 45 86 96 mobile: +49 177 2345 869 fax: +49 30 23 45 86 95 http://www.elegosoft.com | Gesch?ftsf?hrer: Olaf Wagner | Sitz: Berlin Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194 From kcdurocher at gmail.com Fri Jul 15 23:53:36 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 16:53:36 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > the problem as I see is that your program isn't typed for any platform in > specific just to give you the best answer, then I would stick to the > original and track down the source of the problem (this is very point of > type checking, and e.g extended static checking if I may say so, the need to > verify your statements, the other approach is too cumbersome, i.e make it > believe it works when it doesn't). IMHO this a symptom of UNSAFE type > checking problem, rather of programming or programmer error. > I hope to be clarified about this, as far as I know LONGINT isn't INTEGER > but a bigger or equal type (a bigger INTEGER) which translates better to be > a super type, since it isn't I wonder why is that needed a different type > checker for that (we can transform INTEGER to be the true super type and > LONGINT to be a subtype), can't we make the same checking and just range > check everything else (so it doesn't bother to rewrite every platform code, > a bad symptom certainly, yet I approve the change in the language SPEC but > not its type checking). > Thanks in advance > > --- El *jue, 14/7/11, Coleburn, Randy * escribi?: > > > De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? > Para: "m3devel" , "Ken Durocher" < > kcdurocher at gmail.com> > Fecha: jueves, 14 de julio, 2011 18:15 > > > Ken: > > > > On what platform (OS and CPU) are you building and running your Modula-3 > program? > > > > Support for LONGINT is a relatively new addition to CM3, so it is possible > that something is broken. Perhaps your program can help us track it down. > > > > I haven?t checked thru your program yet, but the fact that it gives the > right answer using INTEGER, but not when using LONGINT, seems to point to > the LONGINT implementation as a potential problem source we should > investigate. > > > > Regards, > > Randy Coleburn > > > > *From:* Ken Durocher [mailto:kcdurocher at gmail.com] > *Sent:* Thursday, July 14, 2011 7:00 PM > *To:* Jay K > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > > > Sorry, to clarify, the LONGINT code does NOT give the correct output, but > the INTEGER code DOES. > > > > I did not write this C code, but it's output is the same as all the other > examples (there is a Java example too, if you want that): > > > > #include > > #include > > #include > > > > /* should be 64-bit integers if going over 1 billion */ > > typedef unsigned long xint; > > #define FMT "%lu" > > > > xint total, prim, max_peri; > > xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, > > { 1, 2, 2, 2, 1, 2, 2, 2, 3}, > > {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; > > > > void new_tri(xint in[]) > > { > > int i; > > xint t[3], p = in[0] + in[1] + in[2]; > > > > if (p > max_peri) return; > > > > prim ++; > > > > /* for every primitive triangle, its multiples would be > right-angled too; > > * count them up to the max perimeter */ > > total += max_peri / p; > > > > /* recursively produce next tier by multiplying the matrices > */ > > for (i = 0; i < 3; i++) { > > t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] > * in[2]; > > t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] > * in[2]; > > t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] > * in[2]; > > new_tri(t); > > } > > } > > > > int main() > > { > > xint seed[3] = {3, 4, 5}; > > > > for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { > > total = prim = 0; > > new_tri(seed); > > > > printf( "Up to "FMT": "FMT" triples, "FMT" > primitives.\n", > > max_peri, total, prim); > > } > > return 0; > > } > > > > The output from that code is: > > > > Up to 10: 0 triples, 0 primitives. > > Up to 100: 17 triples, 7 primitives. > > Up to 1000: 325 triples, 70 primitives. > > Up to 10000: 4858 triples, 703 primitives. > > Up to 100000: 64741 triples, 7026 primitives. > > Up to 1000000: 808950 triples, 70229 primitives. > > Up to 10000000: 9706567 triples, 702309 primitives. > > Up to 100000000: 113236940 triples, 7023027 primitives. > > > > Note this output corresponds with the INTEGER output. > > > > On Thu, Jul 14, 2011 at 5:17 PM, Jay K > > wrote: > > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > ------------------------------ > > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > > > MODULE PyTriples EXPORTS Main; > > > > IMPORT IO, Fmt; > > > > VAR tcnt, pcnt, max, i: LONGINT; > > > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > > VAR perim := a + b + c; > > BEGIN > > IF perim <= max THEN > > pcount := pcount + 1L; > > tcount := tcount + max DIV perim; > > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > > END; > > END NewTriangle; > > > > BEGIN > > i := 100L; > > > > REPEAT > > max := i; > > tcnt := 0L; > > pcnt := 0L; > > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > > Fmt.LongInt(pcnt) & " Primitives\n"); > > i := i * 10L; > > UNTIL i = 10000000L; > > > > END PyTriples. > > > > This outputs: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 0858 Triples, 703 Primitives > > 100000: 40701 Triples, 7024 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 4858 Triples, 703 Primitives > > 100000: 64741 Triples, 7026 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 23:54:41 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 17:54:41 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, Message-ID: Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Sat Jul 16 00:04:47 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 18:04:47 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, , Message-ID: Ken: More info re the fix checked in by Rodney Bates: CVSROOT: /usr/cvs Changes by: rodney at birch. 11/07/15 21:17:09 Modified files: cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 Convert.m3 Log message: Fix a tiny typo in Convert.DigitsL that was causing digit 6 to display as '4' and 4 to display as '0'. Regards, Randy Coleburn ________________________________ From: Coleburn, Randy Sent: Friday, July 15, 2011 5:54 PM To: Ken Durocher Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Sat Jul 16 01:31:16 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 16 Jul 2011 00:31:16 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310772676.59827.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: I hope sincerely it will, but without knowing that both platforms worked ill I think then the source of the problem yeah is on itself, not in its implicit implications which as far as I can see are not that much proved, but hopefully when we get to the specification of interfaces can make it test it better or plausible. I hope my understanding improves with this discussion going on. Thanks for that. Thanks? in advance. --- El vie, 15/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "Ken Durocher" CC: "m3devel" Fecha: viernes, 15 de julio, 2011 16:54 Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again.? It may solve your problem. Regards, Randy Coleburn ? From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. ?Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ? On what platform (OS and CPU) are you building and running your Modula-3 program? ? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ? I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ? Regards, Randy Coleburn ? From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ? I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ? #include #include #include ? /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" ? xint total, prim, max_peri; xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3}, ??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3}, ??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}}; ? void new_tri(xint in[]) { ??????????? int i; ??????????? xint t[3], p = in[0] + in[1] + in[2]; ? ??????????? if (p > max_peri) return; ? ??????????? prim ++; ? ??????????? /* for every primitive triangle, its multiples would be right-angled too; ??????????? * count them up to the max perimeter */ ??????????? total += max_peri / p; ? ??????????? /* recursively produce next tier by multiplying the matrices */ ??????????? for (i = 0; i < 3; i++) { ??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; ??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; ??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; ??????????????????????? new_tri(t); ??????????? } } ? int main() { ??????????? xint seed[3] = {3, 4, 5}; ? ??????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { ??????????????????????? total = prim = 0; ??????????????????????? new_tri(seed); ? ??????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n", ??????????????????????????????????? max_peri, total, prim); ??????????? } ??????????? return 0; } ? The output from that code is: ? Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. ? Note this output corresponds with the INTEGER output. ? On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ? MODULE PyTriples EXPORTS Main; ? IMPORT IO, Fmt; ? VAR tcnt, pcnt, max, i: LONGINT; ? PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = ? VAR perim := a + b + c; ? ? ? ? BEGIN ? ? IF perim <= max THEN ? ? ? pcount := pcount + 1L; ? ? ? tcount := tcount + max DIV perim; ? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); ? ? END; ? END NewTriangle; ? BEGIN i := 100L; ? REPEAT ? max := i; ? tcnt := 0L; ? pcnt := 0L; ? NewTriangle(3L, 4L, 5L, tcnt, pcnt); ? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & ? ? Fmt.LongInt(pcnt) & " Primitives\n"); ? i := i * 10L; UNTIL i = 10000000L; ? END PyTriples. ? This outputs: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives ? However, if I just use INTEGER on a 64 bit machine, I get the proper output: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives ? Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Fri Jul 15 20:31:29 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Fri, 15 Jul 2011 13:31:29 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> References: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Message-ID: <4E208781.7050406@lcwb.coop> On 07/15/2011 06:22 AM, Olaf Wagner wrote: > Quoting Ken Durocher : > [...] >> This outputs: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 0858 Triples, 703 Primitives >> 100000: 40701 Triples, 7024 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper output: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 4858 Triples, 703 Primitives >> 100000: 64741 Triples, 7026 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. > > As only some of the outputs are wrong, I'd guess that one of the > output formatting procedures still has a problem with LONGINT. It's definitely in formatting. See this debug log: (m3gdb) p Fmt.LongInt(4858,10) $6 = (*16_0000000000a212d8*) "0858" (m3gdb) p Fmt.Int(4858,10) $7 = (*16_0000000000a21300*) "4858" (m3gdb) p Fmt.LongInt(64741,10) $8 = (*16_0000000000a21328*) "40701" (m3gdb) p Fmt.Int(64741,10) $9 = (*16_0000000000a21350*) "64741" (m3gdb) p Fmt.LongInt(7026,10) $10 = (*16_0000000000a21378*) "7024" (m3gdb) p Fmt.Int(7026,10) $11 = (*16_0000000000a213a0*) "7026" (m3gdb) p Fmt.LongInt(325,10) $12 = (*16_0000000000a213c8*) "325" (m3gdb) p Fmt.Int(325,10) $13 = (*16_0000000000a213f0*) "325" > > We need to fix that. > > Olaf From kcdurocher at gmail.com Sat Jul 16 03:02:01 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 20:02:01 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: Indeed, this seems to have been the exact problem. Thanks On Fri, Jul 15, 2011 at 5:04 PM, Coleburn, Randy wrote: > Ken: > > More info re the fix checked in by Rodney Bates: > > CVSROOT: /usr/cvs > Changes by: rodney at birch. 11/07/15 21:17:09 > > Modified files: > cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 > Convert.m3 > > Log message: > Fix a tiny typo in Convert.DigitsL that was causing > digit 6 to display as '4' and 4 to display as '0'. > > Regards, > Randy Coleburn > > ------------------------------ > *From:* Coleburn, Randy > *Sent:* Friday, July 15, 2011 5:54 PM > *To:* Ken Durocher > > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > Ken: > With all due respect, I don't think Daniel is on the right track. > I note that one of our developers checked in a fix that may solve your > problem. > There seems to have been a problem in formatting the output where certain > digits got messed up. > Try updating your system with this new fix and run your program again. It > may solve your problem. > Regards, > Randy Coleburn > > ------------------------------ > *From:* Ken Durocher [kcdurocher at gmail.com] > *Sent:* Friday, July 15, 2011 5:53 PM > *To:* Daniel Alejandro Benavides D. > *Cc:* m3devel; Coleburn, Randy > *Subject:* Re: [M3devel] LONGINT problem? > > I just checekd, and I can confirm that the LONGINT version of the code > produces INCORRECT results on a 32 bit system, as well as a 64 bit system. > Both are running Linux, with cm3 5.8.6 > > On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < > dabenavidesd at yahoo.es> wrote: > >> Hi all: >> the problem as I see is that your program isn't typed for any platform in >> specific just to give you the best answer, then I would stick to the >> original and track down the source of the problem (this is very point of >> type checking, and e.g extended static checking if I may say so, the need to >> verify your statements, the other approach is too cumbersome, i.e make it >> believe it works when it doesn't). IMHO this a symptom of UNSAFE type >> checking problem, rather of programming or programmer error. >> I hope to be clarified about this, as far as I know LONGINT isn't INTEGER >> but a bigger or equal type (a bigger INTEGER) which translates better to be >> a super type, since it isn't I wonder why is that needed a different type >> checker for that (we can transform INTEGER to be the true super type and >> LONGINT to be a subtype), can't we make the same checking and just range >> check everything else (so it doesn't bother to rewrite every platform code, >> a bad symptom certainly, yet I approve the change in the language SPEC but >> not its type checking). >> Thanks in advance >> >> --- El *jue, 14/7/11, Coleburn, Randy * escribi?: >> >> >> De: Coleburn, Randy >> Asunto: Re: [M3devel] LONGINT problem? >> Para: "m3devel" , "Ken Durocher" < >> kcdurocher at gmail.com> >> Fecha: jueves, 14 de julio, 2011 18:15 >> >> >> Ken: >> >> >> >> On what platform (OS and CPU) are you building and running your Modula-3 >> program? >> >> >> >> Support for LONGINT is a relatively new addition to CM3, so it is possible >> that something is broken. Perhaps your program can help us track it down. >> >> >> >> I haven?t checked thru your program yet, but the fact that it gives the >> right answer using INTEGER, but not when using LONGINT, seems to point to >> the LONGINT implementation as a potential problem source we should >> investigate. >> >> >> >> Regards, >> >> Randy Coleburn >> >> >> >> *From:* Ken Durocher [mailto:kcdurocher at gmail.com] >> *Sent:* Thursday, July 14, 2011 7:00 PM >> *To:* Jay K >> *Cc:* m3devel >> *Subject:* Re: [M3devel] LONGINT problem? >> >> >> >> Sorry, to clarify, the LONGINT code does NOT give the correct output, but >> the INTEGER code DOES. >> >> >> >> I did not write this C code, but it's output is the same as all the other >> examples (there is a Java example too, if you want that): >> >> >> >> #include >> >> #include >> >> #include >> >> >> >> /* should be 64-bit integers if going over 1 billion */ >> >> typedef unsigned long xint; >> >> #define FMT "%lu" >> >> >> >> xint total, prim, max_peri; >> >> xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, >> >> { 1, 2, 2, 2, 1, 2, 2, 2, 3}, >> >> {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; >> >> >> >> void new_tri(xint in[]) >> >> { >> >> int i; >> >> xint t[3], p = in[0] + in[1] + in[2]; >> >> >> >> if (p > max_peri) return; >> >> >> >> prim ++; >> >> >> >> /* for every primitive triangle, its multiples would be >> right-angled too; >> >> * count them up to the max perimeter */ >> >> total += max_peri / p; >> >> >> >> /* recursively produce next tier by multiplying the matrices >> */ >> >> for (i = 0; i < 3; i++) { >> >> t[0] = U[i][0] * in[0] + U[i][1] * in[1] + >> U[i][2] * in[2]; >> >> t[1] = U[i][3] * in[0] + U[i][4] * in[1] + >> U[i][5] * in[2]; >> >> t[2] = U[i][6] * in[0] + U[i][7] * in[1] + >> U[i][8] * in[2]; >> >> new_tri(t); >> >> } >> >> } >> >> >> >> int main() >> >> { >> >> xint seed[3] = {3, 4, 5}; >> >> >> >> for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { >> >> total = prim = 0; >> >> new_tri(seed); >> >> >> >> printf( "Up to "FMT": "FMT" triples, "FMT" >> primitives.\n", >> >> max_peri, total, prim); >> >> } >> >> return 0; >> >> } >> >> >> >> The output from that code is: >> >> >> >> Up to 10: 0 triples, 0 primitives. >> >> Up to 100: 17 triples, 7 primitives. >> >> Up to 1000: 325 triples, 70 primitives. >> >> Up to 10000: 4858 triples, 703 primitives. >> >> Up to 100000: 64741 triples, 7026 primitives. >> >> Up to 1000000: 808950 triples, 70229 primitives. >> >> Up to 10000000: 9706567 triples, 702309 primitives. >> >> Up to 100000000: 113236940 triples, 7023027 primitives. >> >> >> >> Note this output corresponds with the INTEGER output. >> >> >> >> On Thu, Jul 14, 2011 at 5:17 PM, Jay K > >> wrote: >> >> Can you isolate if the problem is the formating/printing, or if it is in >> the computation? >> i.e.: >> >> Use "unsafe" and print out a little hex dump of the integer/longint >> variables? >> >> As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, >> it might not. >> Doesn't really matter. Let's focus on non-working 32bit machine with >> LONGINT. >> >> Also, please confirm which is the right, i.e. by writing it in C. >> Also, maybe just try to format as unsigned/hex using the safe interfaces? >> Also, this will be good to add to our automated tests. Assuming it doesn't >> run too slowly. >> Assuming it reproduces for anyone else (sorry, a bit rude of me). >> >> Later, thank you, >> - Jay >> >> ------------------------------ >> >> Date: Thu, 14 Jul 2011 16:26:05 -0500 >> From: kcdurocher at gmail.com >> To: m3devel at elegosoft.com >> Subject: [M3devel] LONGINT problem? >> >> >> >> I was writing a program to calculate "Pythagorean triples" recursively, >> and ran into a problem. Here's the program: >> >> >> >> MODULE PyTriples EXPORTS Main; >> >> >> >> IMPORT IO, Fmt; >> >> >> >> VAR tcnt, pcnt, max, i: LONGINT; >> >> >> >> PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = >> >> VAR perim := a + b + c; >> >> BEGIN >> >> IF perim <= max THEN >> >> pcount := pcount + 1L; >> >> tcount := tcount + max DIV perim; >> >> NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, >> pcount); >> >> END; >> >> END NewTriangle; >> >> >> >> BEGIN >> >> i := 100L; >> >> >> >> REPEAT >> >> max := i; >> >> tcnt := 0L; >> >> pcnt := 0L; >> >> NewTriangle(3L, 4L, 5L, tcnt, pcnt); >> >> IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & >> >> Fmt.LongInt(pcnt) & " Primitives\n"); >> >> i := i * 10L; >> >> UNTIL i = 10000000L; >> >> >> >> END PyTriples. >> >> >> >> This outputs: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 0858 Triples, 703 Primitives >> >> 100000: 40701 Triples, 7024 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper >> output: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 4858 Triples, 703 Primitives >> >> 100000: 64741 Triples, 7026 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. >> >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Sat Jul 16 13:46:28 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sat, 16 Jul 2011 06:46:28 -0500 Subject: [M3devel] Fwd: Re: Rd.GetText Question Message-ID: <4E217A14.6010009@lcwb.coop> Sorry for the delay. I sent this several days ago, but it disappeared into email space with neither a bounce nor showing up in the mailing list. I have had this problem intermittently. On 07/08/2011 09:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? Yes. AFAIK, all implementations of Text use variables of type CARDINAL or INTEGER internally for lengths of TEXT values, so the 2GB length limit exists anyway on a 32-bit machine, in lots of places besides just Rd.GetText. > But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and > then looping until EOF. Which method is best? > For a robust program, not just a quick throwaway, I would say you should always test the result of Rd.Length for -1 before passing it to Rd.GetText, unless you know your reader is non-intermittent and -1 can't happen. Perhaps this is the case in the examples you see that pass it directly to Rd.GetText. Or not. As long as you don't hit the 2GB limit, using LAST(CARDINAL) would always work and be a lot simpler than writing a loop. If you want handle > 2GB on 32-bit machines, the loop will have to handle the pieces some other way than just concatenating them, no doubt a lot more complicated. But LAST(CARDINAL) would still work. > Thanks. Rodney Bates From rodney_bates at lcwb.coop Mon Jul 18 17:42:16 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Mon, 18 Jul 2011 10:42:16 -0500 Subject: [M3devel] LONGINT problem? Message-ID: <4E245458.50308@lcwb.coop> I just checked in a fix to Convert.m3 for this into the release branch. It now gives the expected results for LONGINT. To rebuild, go into the scripts subdirectory and type "./do-cm3-min.sh buildship". This problem has already been fixed in the head in a different and more efficient way. On 07/14/2011 04:26 PM, Ken Durocher wrote: > I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. From hendrik at topoi.pooq.com Tue Jul 19 11:32:51 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 05:32:51 -0400 Subject: [M3devel] calling an overridden method Message-ID: <20110719093251.GA15176@topoi.pooq.com> I have a module containing a parent class, and another containing a child class. The parent class contains a method 'foo', which is to be overridden in the child class. But in implementing 'foo' in the child class I want to call the parent's method. Now with the method 'init' there's a trick where in the child's init, you WIDEN self to the parent's type and then call its init. This works because 'init' isn't overridden in an OVERRIDES clause, but is defined as a new method that happens to have the same name. Is there any way to do this with 'foo', where the whole point is that it be an overridden method and not a new one? Do I have to do something like covertly exporting the PROCEDURE that implements 'foo' in the parent's module so that it can be called directly? That would seem to be a violation of modular design. Or is violating modular design exactly what I'm really trying to do here? -- hendrik From mika at async.caltech.edu Tue Jul 19 16:02:55 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:02:55 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719093251.GA15176@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> Message-ID: <20110719140255.ADC4A1A2079@async.async.caltech.edu> TYPE A = OBJECT METHODS m(xxx) END; TYPE B = A OBJECT METHODS m(xxx) END; b := NEW(B); A.m(b,xxx) Mika Hendrik Boom writes: >I have a module containing a parent class, and another containing a >child class. > >The parent class contains a method 'foo', which is to be overridden in >the child class. > >But in implementing 'foo' in the child class I want to call the parent's >method. > >Now with the method 'init' there's a trick where in the child's init, >you WIDEN self to the parent's type and then call its init. >This works because 'init' isn't overridden in an OVERRIDES clause, >but is defined as a new method that happens to have the same name. > >Is there any way to do this with 'foo', where the whole point is that >it be an overridden method and not a new one? > >Do I have to do something like covertly exporting the PROCEDURE that >implements 'foo' in the parent's module so that it can be called >directly? That would seem to be a violation of modular design. Or is >violating modular design exactly what I'm really trying to do here? > >-- hendrik From mika at async.caltech.edu Tue Jul 19 16:11:05 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:11:05 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719140255.ADC4A1A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> Message-ID: <20110719141105.A69011A2079@async.async.caltech.edu> Sorry I'm being confusing here. The code is right but I think your question is a bit confusing. With your init example I don't think you're talking about an overridden init method but a shadowed method. You can't call an overridden method through the widening trick, but you *can* call a shadowed method like that. Mika Mika Nystrom writes: > >TYPE A = OBJECT METHODS m(xxx) END; > >TYPE B = A OBJECT METHODS m(xxx) END; > >b := NEW(B); > >A.m(b,xxx) > > Mika > >Hendrik Boom writes: >>I have a module containing a parent class, and another containing a >>child class. >> >>The parent class contains a method 'foo', which is to be overridden in >>the child class. >> >>But in implementing 'foo' in the child class I want to call the parent's >>method. >> >>Now with the method 'init' there's a trick where in the child's init, >>you WIDEN self to the parent's type and then call its init. >>This works because 'init' isn't overridden in an OVERRIDES clause, >>but is defined as a new method that happens to have the same name. >> >>Is there any way to do this with 'foo', where the whole point is that >>it be an overridden method and not a new one? >> >>Do I have to do something like covertly exporting the PROCEDURE that >>implements 'foo' in the parent's module so that it can be called >>directly? That would seem to be a violation of modular design. Or is >>violating modular design exactly what I'm really trying to do here? >> >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:26:14 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:26:14 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719141105.A69011A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> Message-ID: <20110719172614.GA23492@topoi.pooq.com> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > Sorry I'm being confusing here. > > The code is right but I think your question is a bit confusing. > > With your init example I don't think you're talking about an overridden > init method but a shadowed method. A 'shadowed' method. Is that what you call what's essentially a new method that happens to have the same name? Just like the way a variable in a nested block that has the same name as one in an outer block would be a new variable (I'm not sure Modula 3 allows this, the way C and the Algols do; I find it leads to confusing code). Init is the one I've seen explained in documentation. It's not what I want, because that trick provides no inheritance. > You can't call an overridden method > through the widening trick, but you *can* call a shadowed method like > that. > > Mika > > Mika Nystrom writes: > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > >TYPE B = A OBJECT METHODS m(xxx) END; This is, if I understand the terminology, a declaratin of m as a shadowd method. It's not what I want, because I intend that under normal circumstances, if an B object is used in a context where its static type is known as A, I still want the normal overriding mechanism to ensure that B's m is the one called. I mean something like TYPE B = A OBJECT OVERRIDES m := ... END; > > > >b := NEW(B); > > > >A.m(b,xxx) So this is a way to specifically get the m that belongs with A? Will this work with the way I want to define B and m? as in TYPE A = OBJECT METHODS m(xxx) := bar END; TYPE B = A OBJECT OVERRIDES m := foo END; PROCEDURE foo(self : B, ....) = BEGIN ... ... A.m(self, ...) (* and this ends up calling bar? *) ... END foo; -- hendrik > > > > Mika > > > >Hendrik Boom writes: > >>I have a module containing a parent class, and another containing a > >>child class. > >> > >>The parent class contains a method 'foo', which is to be overridden in > >>the child class. > >> > >>But in implementing 'foo' in the child class I want to call the parent's > >>method. > >> > >>Now with the method 'init' there's a trick where in the child's init, > >>you WIDEN self to the parent's type and then call its init. > >>This works because 'init' isn't overridden in an OVERRIDES clause, > >>but is defined as a new method that happens to have the same name. > >> > >>Is there any way to do this with 'foo', where the whole point is that > >>it be an overridden method and not a new one? > >> > >>Do I have to do something like covertly exporting the PROCEDURE that > >>implements 'foo' in the parent's module so that it can be called > >>directly? That would seem to be a violation of modular design. Or is > >>violating modular design exactly what I'm really trying to do here? > >> > >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:40:04 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:40:04 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719172614.GA23492@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> Message-ID: <20110719174004.GA23557@topoi.pooq.com> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: > On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > > Sorry I'm being confusing here. > > > > The code is right but I think your question is a bit confusing. > > > > With your init example I don't think you're talking about an overridden > > init method but a shadowed method. > > A 'shadowed' method. Is that what you call what's essentially a new > method that happens to have the same name? Just like the way a variable > in a nested block that has the same name as one in an outer block would > be a new variable (I'm not sure Modula 3 allows this, the way C and the > Algols do; I find it leads to confusing code). > > Init is the one I've seen explained in documentation. It's not what I > want, because that trick provides no inheritance. > > > You can't call an overridden method > > through the widening trick, but you *can* call a shadowed method like > > that. > > > > Mika > > > > Mika Nystrom writes: > > > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > > > >TYPE B = A OBJECT METHODS m(xxx) END; > > This is, if I understand the terminology, a declaratin of m as a shadowd > method. It's not what I want, because I intend that under normal > circumstances, if an B object is used in a context where its static type > is known as A, I still want the normal overriding mechanism to ensure > that B's m is the one called. > > I mean something like > > TYPE B = A OBJECT OVERRIDES m := ... END; > > > > > > >b := NEW(B); > > > > > >A.m(b,xxx) > > So this is a way to specifically get the m that belongs with A? Will > this work with the way I want to define B and m? > > as in > > TYPE A = OBJECT METHODS m(xxx) := bar END; > > TYPE B = A OBJECT OVERRIDES m := foo END; > > PROCEDURE foo(self : B, ....) = > BEGIN > ... > ... > A.m(self, ...) (* and this ends up calling bar? *) > ... > END foo; Well. I tried my version, and it works. Thanks for the advice. -- hendrik > > > > > > > Mika > > > > > >Hendrik Boom writes: > > >>I have a module containing a parent class, and another containing a > > >>child class. > > >> > > >>The parent class contains a method 'foo', which is to be overridden in > > >>the child class. > > >> > > >>But in implementing 'foo' in the child class I want to call the parent's > > >>method. > > >> > > >>Now with the method 'init' there's a trick where in the child's init, > > >>you WIDEN self to the parent's type and then call its init. > > >>This works because 'init' isn't overridden in an OVERRIDES clause, > > >>but is defined as a new method that happens to have the same name. > > >> > > >>Is there any way to do this with 'foo', where the whole point is that > > >>it be an overridden method and not a new one? > > >> > > >>Do I have to do something like covertly exporting the PROCEDURE that > > >>implements 'foo' in the parent's module so that it can be called > > >>directly? That would seem to be a violation of modular design. Or is > > >>violating modular design exactly what I'm really trying to do here? > > >> > > >>-- hendrik From mika at async.caltech.edu Wed Jul 20 09:44:14 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Wed, 20 Jul 2011 00:44:14 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719174004.GA23557@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> Message-ID: <20110720074414.6B8301A2079@async.async.caltech.edu> Right, a shadowed method is a new method of the same name, just like Algol block structure. An overridden method is a different binding for the same method. If you override a method, you can't call the old one without using the special A.T.m(a,...) syntax, since there's no binding for the old one within the type record for your object. The A.T.m(...) syntax works whether the method is shadowed or overridden. The widening only works for shadowed methods. The clever thing is that the method dispatch is based on the known type of the object within the context that the method is called, not where the object type is declared. This distinction between overriding and shadowing I think is one of the most brilliant aspects of Modula-3: it avoids the problem that you create an unwanted method override by adding a new method of the same name (whether in a supertype or a subtype). Mika Hendrik Boom writes: >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >> > Sorry I'm being confusing here. >> > >> > The code is right but I think your question is a bit confusing. >> > >> > With your init example I don't think you're talking about an overridden >> > init method but a shadowed method. >> >> A 'shadowed' method. Is that what you call what's essentially a new >> method that happens to have the same name? Just like the way a variable >> in a nested block that has the same name as one in an outer block would >> be a new variable (I'm not sure Modula 3 allows this, the way C and the >> Algols do; I find it leads to confusing code). >> >> Init is the one I've seen explained in documentation. It's not what I >> want, because that trick provides no inheritance. >> >> > You can't call an overridden method >> > through the widening trick, but you *can* call a shadowed method like >> > that. >> > >> > Mika >> > >> > Mika Nystrom writes: >> > > >> > >TYPE A = OBJECT METHODS m(xxx) END; >> > > >> > >TYPE B = A OBJECT METHODS m(xxx) END; >> >> This is, if I understand the terminology, a declaratin of m as a shadowd >> method. It's not what I want, because I intend that under normal >> circumstances, if an B object is used in a context where its static type >> is known as A, I still want the normal overriding mechanism to ensure >> that B's m is the one called. >> >> I mean something like >> >> TYPE B = A OBJECT OVERRIDES m := ... END; >> >> > > >> > >b := NEW(B); >> > > >> > >A.m(b,xxx) >> >> So this is a way to specifically get the m that belongs with A? Will >> this work with the way I want to define B and m? >> >> as in >> >> TYPE A = OBJECT METHODS m(xxx) := bar END; >> >> TYPE B = A OBJECT OVERRIDES m := foo END; >> >> PROCEDURE foo(self : B, ....) = >> BEGIN >> ... >> ... >> A.m(self, ...) (* and this ends up calling bar? *) >> ... >> END foo; > >Well. I tried my version, and it works. Thanks for the advice. > >-- hendrik > >> >> > > >> > > Mika >> > > >> > >Hendrik Boom writes: >> > >>I have a module containing a parent class, and another containing a >> > >>child class. >> > >> >> > >>The parent class contains a method 'foo', which is to be overridden in >> > >>the child class. >> > >> >> > >>But in implementing 'foo' in the child class I want to call the parent's > >> > >>method. >> > >> >> > >>Now with the method 'init' there's a trick where in the child's init, >> > >>you WIDEN self to the parent's type and then call its init. >> > >>This works because 'init' isn't overridden in an OVERRIDES clause, >> > >>but is defined as a new method that happens to have the same name. >> > >> >> > >>Is there any way to do this with 'foo', where the whole point is that >> > >>it be an overridden method and not a new one? >> > >> >> > >>Do I have to do something like covertly exporting the PROCEDURE that >> > >>implements 'foo' in the parent's module so that it can be called >> > >>directly? That would seem to be a violation of modular design. Or is >> > >>violating modular design exactly what I'm really trying to do here? >> > >> >> > >>-- hendrik From rodney_bates at lcwb.coop Wed Jul 20 18:18:37 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Wed, 20 Jul 2011 11:18:37 -0500 Subject: [M3devel] calling an overridden method In-Reply-To: <20110720074414.6B8301A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> Message-ID: <4E26FFDD.9060009@lcwb.coop> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > Right, a shadowed method is a new method of the same name, just like > Algol block structure. An overridden method is a different binding for > the same method. If you override a method, you can't call the old one > without using the special A.T.m(a,...) syntax, since there's no binding > for the old one within the type record for your object. The A.T.m(...) > syntax works whether the method is shadowed or overridden. The widening > only works for shadowed methods. > > The clever thing is that the method dispatch is based on the known type > of the object within the context that the method is called, not where the > object type is declared. > > This distinction between overriding and shadowing I think is one of the > most brilliant aspects of Modula-3: it avoids the problem that you > create an unwanted method override by adding a new method of the same name > (whether in a supertype or a subtype). This is probably my single favorite example of how C++ is badly designed for practical programming and, more generally, why syntactic explicitness is important. C++ has both overrides and new methods, but it is *very* hard for a programmer to see the difference. Syntactically, they look identical. For a member function declaration to be an override, you need: 1) It has the same simple name as the original. 2) It has an equivalent signature to the original. 3) The original is 'virtual', which in this context means overridable. Equivalence of signatures is complicated, as there are several rules about selected ways they can differ and still be equivalent. For example, int *p and int p[] are equivalent. There can be overloaded (same name, different signatures) original methods, from the same or different superclasses, to be considered. And then this allows what would, I suppose, be called "overloaded overrides", as well as a mix of overloaded new methods and overrides, all with the same name. 'virtual' has at least two very different meanings, one relevant here and one regarding repeated inheritance over multiple paths. The virtual property can come from anywhere in the inheritance hierarchy, and can change between the original method declaration and the subclass we are trying to read. Shadowing can also involve signature equivalence as well as name equality. AFAIK, you can't shadow with the same name and signature, if the relevant inherited method is virtual. But if not, a same-name, signature-equivalent member function is a shadow. Meanwhile, linking up to a precursor to be overridden involves looking at signatures of same-named methods from all superclasses, whereas overload resolution in calls considers only same-named candidates from the same class, before signatures are considered. The interactions with static member functions make things even more complicated. None of this is syntactically explicit. In contrast, Modula-3 says either "METHODS" or "OVERRIDES" explicitly. Moreover, even without these tags, new methods always have signatures, while overrides do not. In my experience, very few C++ programmers, outside of compiler writers and language committee members, understand these semantic rules. And they do predictably get surprised when something turns out to dispatch when they expected it not to or vice versa. When this happens, rather than figure the language out, they just make a note to self to use some coding convention that avoids getting anywhere close, e.g., never using the same name for different methods, only for overrides. (Well, OK, that's probably a good practice anyway, but you see my point, I think.) > > Mika > > > Hendrik Boom writes: >> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> Sorry I'm being confusing here. >>>> >>>> The code is right but I think your question is a bit confusing. >>>> >>>> With your init example I don't think you're talking about an overridden >>>> init method but a shadowed method. >>> >>> A 'shadowed' method. Is that what you call what's essentially a new >>> method that happens to have the same name? Just like the way a variable >>> in a nested block that has the same name as one in an outer block would >>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>> Algols do; I find it leads to confusing code). >>> >>> Init is the one I've seen explained in documentation. It's not what I >>> want, because that trick provides no inheritance. >>> >>>> You can't call an overridden method >>>> through the widening trick, but you *can* call a shadowed method like >>>> that. >>>> >>>> Mika >>>> >>>> Mika Nystrom writes: >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>> >>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>> >>> This is, if I understand the terminology, a declaratin of m as a shadowd >>> method. It's not what I want, because I intend that under normal >>> circumstances, if an B object is used in a context where its static type >>> is known as A, I still want the normal overriding mechanism to ensure >>> that B's m is the one called. >>> >>> I mean something like >>> >>> TYPE B = A OBJECT OVERRIDES m := ... END; >>> >>>>> >>>>> b := NEW(B); >>>>> >>>>> A.m(b,xxx) >>> >>> So this is a way to specifically get the m that belongs with A? Will >>> this work with the way I want to define B and m? >>> >>> as in >>> >>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>> >>> TYPE B = A OBJECT OVERRIDES m := foo END; >>> >>> PROCEDURE foo(self : B, ....) = >>> BEGIN >>> ... >>> ... >>> A.m(self, ...) (* and this ends up calling bar? *) >>> ... >>> END foo; >> >> Well. I tried my version, and it works. Thanks for the advice. >> >> -- hendrik >> >>> >>>>> >>>>> Mika >>>>> >>>>> Hendrik Boom writes: >>>>>> I have a module containing a parent class, and another containing a >>>>>> child class. >>>>>> >>>>>> The parent class contains a method 'foo', which is to be overridden in >>>>>> the child class. >>>>>> >>>>>> But in implementing 'foo' in the child class I want to call the parent's >> >>>>>> method. >>>>>> >>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>> you WIDEN self to the parent's type and then call its init. >>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>> but is defined as a new method that happens to have the same name. >>>>>> >>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>> it be an overridden method and not a new one? >>>>>> >>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>> implements 'foo' in the parent's module so that it can be called >>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>> violating modular design exactly what I'm really trying to do here? >>>>>> >>>>>> -- hendrik > From peter.mckinna at gmail.com Thu Jul 21 08:11:46 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Thu, 21 Jul 2011 16:11:46 +1000 Subject: [M3devel] calling an overridden method In-Reply-To: <4E26FFDD.9060009@lcwb.coop> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: Forgive my ignorance, but where in the report does it allow A.m(b,xxx) where that A is a type I just compiled it and it works fine but its a syntactic subtlety that I have sadly been unaware. Regards Peter On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote: > > > On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> Right, a shadowed method is a new method of the same name, just like >> Algol block structure. An overridden method is a different binding for >> the same method. If you override a method, you can't call the old one >> without using the special A.T.m(a,...) syntax, since there's no binding >> for the old one within the type record for your object. The A.T.m(...) >> syntax works whether the method is shadowed or overridden. The widening >> only works for shadowed methods. >> >> The clever thing is that the method dispatch is based on the known type >> of the object within the context that the method is called, not where the >> object type is declared. >> >> This distinction between overriding and shadowing I think is one of the >> most brilliant aspects of Modula-3: it avoids the problem that you >> create an unwanted method override by adding a new method of the same name >> (whether in a supertype or a subtype). >> > > This is probably my single favorite example of how C++ is badly > designed for practical programming and, more generally, why syntactic > explicitness is important. > > C++ has both overrides and new methods, but it is *very* hard for a > programmer to see the difference. Syntactically, they look identical. > > For a member function declaration to be an override, you need: > 1) It has the same simple name as the original. > 2) It has an equivalent signature to the original. > 3) The original is 'virtual', which in this context means overridable. > > Equivalence of signatures is complicated, as there are several rules > about selected ways they can differ and still be equivalent. For > example, int *p and int p[] are equivalent. There can be overloaded > (same name, different signatures) original methods, from the same or > different superclasses, to be considered. And then this allows what > would, I suppose, be called "overloaded overrides", as well as a mix > of overloaded new methods and overrides, all with the same name. > > 'virtual' has at least two very different meanings, one relevant here > and one regarding repeated inheritance over multiple paths. The > virtual property can come from anywhere in the inheritance hierarchy, > and can change between the original method declaration and the > subclass we are trying to read. > > Shadowing can also involve signature equivalence as well as name > equality. AFAIK, you can't shadow with the same name and signature, > if the relevant inherited method is virtual. But if not, a same-name, > signature-equivalent member function is a shadow. > > Meanwhile, linking up to a precursor to be overridden involves looking > at signatures of same-named methods from all superclasses, whereas > overload resolution in calls considers only same-named candidates from > the same class, before signatures are considered. > > The interactions with static member functions make things even more > complicated. > > None of this is syntactically explicit. In contrast, Modula-3 says > either "METHODS" or "OVERRIDES" explicitly. Moreover, even without > these tags, new methods always have signatures, while overrides do > not. > > In my experience, very few C++ programmers, outside of compiler > writers and language committee members, understand these semantic > rules. And they do predictably get surprised when something turns out > to dispatch when they expected it not to or vice versa. When this > happens, rather than figure the language out, they just make a note to > self to use some coding convention that avoids getting anywhere close, > e.g., never using the same name for different methods, only for > overrides. (Well, OK, that's probably a good practice anyway, but you > see my point, I think.) > > > >> Mika >> >> >> Hendrik Boom writes: >> >>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> >>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> >>>>> Sorry I'm being confusing here. >>>>> >>>>> The code is right but I think your question is a bit confusing. >>>>> >>>>> With your init example I don't think you're talking about an overridden >>>>> init method but a shadowed method. >>>>> >>>> >>>> A 'shadowed' method. Is that what you call what's essentially a new >>>> method that happens to have the same name? Just like the way a variable >>>> in a nested block that has the same name as one in an outer block would >>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>> Algols do; I find it leads to confusing code). >>>> >>>> Init is the one I've seen explained in documentation. It's not what I >>>> want, because that trick provides no inheritance. >>>> >>>> You can't call an overridden method >>>>> through the widening trick, but you *can* call a shadowed method like >>>>> that. >>>>> >>>>> Mika >>>>> >>>>> Mika Nystrom writes: >>>>> >>>>>> >>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>> >>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>> >>>>> >>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>> method. It's not what I want, because I intend that under normal >>>> circumstances, if an B object is used in a context where its static type >>>> is known as A, I still want the normal overriding mechanism to ensure >>>> that B's m is the one called. >>>> >>>> I mean something like >>>> >>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>> >>>> >>>>>> b := NEW(B); >>>>>> >>>>>> A.m(b,xxx) >>>>>> >>>>> >>>> So this is a way to specifically get the m that belongs with A? Will >>>> this work with the way I want to define B and m? >>>> >>>> as in >>>> >>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>> >>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>> >>>> PROCEDURE foo(self : B, ....) = >>>> BEGIN >>>> ... >>>> ... >>>> A.m(self, ...) (* and this ends up calling bar? *) >>>> ... >>>> END foo; >>>> >>> >>> Well. I tried my version, and it works. Thanks for the advice. >>> >>> -- hendrik >>> >>> >>>> >>>>>> Mika >>>>>> >>>>>> Hendrik Boom writes: >>>>>> >>>>>>> I have a module containing a parent class, and another containing a >>>>>>> child class. >>>>>>> >>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>> in >>>>>>> the child class. >>>>>>> >>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>> parent's >>>>>>> >>>>>> >>> method. >>>>>>> >>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>> but is defined as a new method that happens to have the same name. >>>>>>> >>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>> it be an overridden method and not a new one? >>>>>>> >>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>> >>>>>>> -- hendrik >>>>>>> >>>>>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From mika at async.caltech.edu Thu Jul 21 09:27:43 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Thu, 21 Jul 2011 00:27:43 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: <20110721072743.5F5A31A2079@async.async.caltech.edu> Section 6, under "Designators". Mika Peter McKinna writes: >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/plain; charset=ISO-8859-1 > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx) >where that A is a type > >I just compiled it and it works fine but its a syntactic subtlety that I >have sadly been unaware. > >Regards Peter > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote >: > >> >> >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: >> >>> Right, a shadowed method is a new method of the same name, just like >>> Algol block structure. An overridden method is a different binding for >>> the same method. If you override a method, you can't call the old one >>> without using the special A.T.m(a,...) syntax, since there's no binding >>> for the old one within the type record for your object. The A.T.m(...) >>> syntax works whether the method is shadowed or overridden. The widening >>> only works for shadowed methods. >>> >>> The clever thing is that the method dispatch is based on the known type >>> of the object within the context that the method is called, not where the >>> object type is declared. >>> >>> This distinction between overriding and shadowing I think is one of the >>> most brilliant aspects of Modula-3: it avoids the problem that you >>> create an unwanted method override by adding a new method of the same name >>> (whether in a supertype or a subtype). >>> >> >> This is probably my single favorite example of how C++ is badly >> designed for practical programming and, more generally, why syntactic >> explicitness is important. >> >> C++ has both overrides and new methods, but it is *very* hard for a >> programmer to see the difference. Syntactically, they look identical. >> >> For a member function declaration to be an override, you need: >> 1) It has the same simple name as the original. >> 2) It has an equivalent signature to the original. >> 3) The original is 'virtual', which in this context means overridable. >> >> Equivalence of signatures is complicated, as there are several rules >> about selected ways they can differ and still be equivalent. For >> example, int *p and int p[] are equivalent. There can be overloaded >> (same name, different signatures) original methods, from the same or >> different superclasses, to be considered. And then this allows what >> would, I suppose, be called "overloaded overrides", as well as a mix >> of overloaded new methods and overrides, all with the same name. >> >> 'virtual' has at least two very different meanings, one relevant here >> and one regarding repeated inheritance over multiple paths. The >> virtual property can come from anywhere in the inheritance hierarchy, >> and can change between the original method declaration and the >> subclass we are trying to read. >> >> Shadowing can also involve signature equivalence as well as name >> equality. AFAIK, you can't shadow with the same name and signature, >> if the relevant inherited method is virtual. But if not, a same-name, >> signature-equivalent member function is a shadow. >> >> Meanwhile, linking up to a precursor to be overridden involves looking >> at signatures of same-named methods from all superclasses, whereas >> overload resolution in calls considers only same-named candidates from >> the same class, before signatures are considered. >> >> The interactions with static member functions make things even more >> complicated. >> >> None of this is syntactically explicit. In contrast, Modula-3 says >> either "METHODS" or "OVERRIDES" explicitly. Moreover, even without >> these tags, new methods always have signatures, while overrides do >> not. >> >> In my experience, very few C++ programmers, outside of compiler >> writers and language committee members, understand these semantic >> rules. And they do predictably get surprised when something turns out >> to dispatch when they expected it not to or vice versa. When this >> happens, rather than figure the language out, they just make a note to >> self to use some coding convention that avoids getting anywhere close, >> e.g., never using the same name for different methods, only for >> overrides. (Well, OK, that's probably a good practice anyway, but you >> see my point, I think.) >> >> >> >>> Mika >>> >>> >>> Hendrik Boom writes: >>> >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>>> >>>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>>> >>>>>> Sorry I'm being confusing here. >>>>>> >>>>>> The code is right but I think your question is a bit confusing. >>>>>> >>>>>> With your init example I don't think you're talking about an overridden >>>>>> init method but a shadowed method. >>>>>> >>>>> >>>>> A 'shadowed' method. Is that what you call what's essentially a new >>>>> method that happens to have the same name? Just like the way a variable >>>>> in a nested block that has the same name as one in an outer block would >>>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>>> Algols do; I find it leads to confusing code). >>>>> >>>>> Init is the one I've seen explained in documentation. It's not what I >>>>> want, because that trick provides no inheritance. >>>>> >>>>> You can't call an overridden method >>>>>> through the widening trick, but you *can* call a shadowed method like >>>>>> that. >>>>>> >>>>>> Mika >>>>>> >>>>>> Mika Nystrom writes: >>>>>> >>>>>>> >>>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>>> >>>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>>> >>>>>> >>>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>>> method. It's not what I want, because I intend that under normal >>>>> circumstances, if an B object is used in a context where its static type >>>>> is known as A, I still want the normal overriding mechanism to ensure >>>>> that B's m is the one called. >>>>> >>>>> I mean something like >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>>> >>>>> >>>>>>> b := NEW(B); >>>>>>> >>>>>>> A.m(b,xxx) >>>>>>> >>>>>> >>>>> So this is a way to specifically get the m that belongs with A? Will >>>>> this work with the way I want to define B and m? >>>>> >>>>> as in >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>>> >>>>> PROCEDURE foo(self : B, ....) = >>>>> BEGIN >>>>> ... >>>>> ... >>>>> A.m(self, ...) (* and this ends up calling bar? *) >>>>> ... >>>>> END foo; >>>>> >>>> >>>> Well. I tried my version, and it works. Thanks for the advice. >>>> >>>> -- hendrik >>>> >>>> >>>>> >>>>>>> Mika >>>>>>> >>>>>>> Hendrik Boom writes: >>>>>>> >>>>>>>> I have a module containing a parent class, and another containing a >>>>>>>> child class. >>>>>>>> >>>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>>> in >>>>>>>> the child class. >>>>>>>> >>>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>>> parent's >>>>>>>> >>>>>>> >>>> method. >>>>>>>> >>>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>>> but is defined as a new method that happens to have the same name. >>>>>>>> >>>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>>> it be an overridden method and not a new one? >>>>>>>> >>>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>>> >>>>>>>> -- hendrik >>>>>>>> >>>>>>> >>> > >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/html; charset=ISO-8859-1 >Content-Transfer-Encoding: quoted-printable > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx)=A0 w= >here that A is a type

I just compiled it and it works fine but its a= > syntactic subtlety that I have sadly been unaware.

Regards Peter> >
On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. B= >ates <rodney= >_bates at lcwb.coop> wrote:
style=3D"border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.= >8ex; padding-left: 1ex;"> >
>
>On 07/20/2011 02:44 AM, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Right, a shadowed method is a new method of the same name, just like
>Algol block structure. =A0An overridden method is a different binding forr> >the same method. =A0If you override a method, you can't call the old on= >e
>without using the special A.T.m(a,...) syntax, since there's no binding= >
>for the old one within the type record for your object. =A0The A.T.m(...)r> >syntax works whether the method is shadowed or overridden. =A0The widening<= >br> >only works for shadowed methods.
>
>The clever thing is that the method dispatch is based on the known type
>of the object within the context that the method is called, not where ther> >object type is declared.
>
>This distinction between overriding and shadowing I think is one of the
>most brilliant aspects of Modula-3: it avoids the problem that you
>create an unwanted method override by adding a new method of the same name<= >br> >(whether in a supertype or a subtype).
>
>
>This is probably my single favorite example of how C++ is badly
>designed for practical programming and, more generally, why syntactic
>explicitness is important.
>
>C++ has both overrides and new methods, but it is *very* hard for a
>programmer to see the difference. =A0Syntactically, they look identical.> >
>For a member function declaration to be an override, you need:
>1) It has the same simple name as the original.
>2) It has an equivalent signature to the original.
>3) The original is 'virtual', which in this context means overridab= >le.
>
>Equivalence of signatures is complicated, as there are several rules
>about selected ways they can differ and still be equivalent. =A0For
>example, int *p and int p[] are equivalent. =A0There can be overloaded
>(same name, different signatures) original methods, from the same or
>different superclasses, to be considered. =A0And then this allows what
>would, I suppose, be called "overloaded overrides", as well as a = >mix
>of overloaded new methods and overrides, all with the same name.
>
>'virtual' has at least two very different meanings, one relevant he= >re
>and one regarding repeated inheritance over multiple paths. =A0The
>virtual property can come from anywhere in the inheritance hierarchy,
>and can change between the original method declaration and the
>subclass we are trying to read.
>
>Shadowing can also involve signature equivalence as well as name
>equality. =A0AFAIK, you can't shadow with the same name and signature,<= >br> >if the relevant inherited method is virtual. =A0But if not, a same-name,> >signature-equivalent member function is a shadow.
>
>Meanwhile, linking up to a precursor to be overridden involves looking
>at signatures of same-named methods from all superclasses, whereas
>overload resolution in calls considers only same-named candidates from
>the same class, before signatures are considered.
>
>The interactions with static member functions make things even more
>complicated.
>
>None of this is syntactically explicit. =A0In contrast, Modula-3 says
>either "METHODS" or "OVERRIDES" explicitly. =A0Moreover= >, even without
>these tags, new methods always have signatures, while overrides do
>not.
>
>In my experience, very few C++ programmers, outside of compiler
>writers and language committee members, understand these semantic
>rules. =A0And they do predictably get surprised when something turns out> >to dispatch when they expected it not to or vice versa. =A0When this
>happens, rather than figure the language out, they just make a note to
>self to use some coding convention that avoids getting anywhere close,
>e.g., never using the same name for different methods, only for
>overrides. (Well, OK, that's probably a good practice anyway, but your> >see my point, I think.)
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
> =A0 =A0 =A0Mika
>
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Sorry I'm being confusing here.
>
>The code is right but I think your question is a bit confusing.
>
>With your init example I don't think you're talking about an overri= >dden
>init method but a shadowed method.
>
>
>A 'shadowed' method. =A0Is that what you call what's essentiall= >y a new
>method that happens to have the same name? =A0Just like the way a variable<= >br> >in a nested block that has the same name as one in an outer block would
>be a new variable (I'm not sure Modula 3 allows this, the way C and the= >
>Algols do; I find it leads to confusing code).
>
>Init is the one I've seen explained in documentation. =A0It's =A0no= >t what I
>want, because that trick provides no inheritance.
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >You can't call an overridden method
>through the widening trick, but you *can* call a shadowed method like
>that.
>
> =A0 =A0 =A0Mika
>
>Mika Nystrom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>TYPE A =3D OBJECT METHODS m(xxx) END;
>
>TYPE B =3D A OBJECT METHODS m(xxx) END;
>
>
>This is, if I understand the terminology, a declaratin of m as a shadowd> >method. =A0It's not what I want, because I =A0intend that under normal<= >br> >circumstances, if an B object is used in a context where its static type> >is known as A, I still want the normal overriding mechanism to ensure
>that B's m is the one called.
>
>I mean something like
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D ... END;
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
>b :=3D NEW(B);
>
>A.m(b,xxx)
>
>
>So this is a way to specifically get the m that belongs with A? =A0Will
>this work with the way I want to define B and m?
>
>as in
>
>TYPE A =3D OBJECT METHODS m(xxx) :=3D bar END;
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D foo END;
>
>PROCEDURE foo(self : B, ....) =3D
>BEGIN
> =A0 ...
> =A0 ...
> =A0 =A0A.m(self, ...) =A0 (* and this ends up calling bar? *)
> =A0 ...
>END foo;
>
>
>Well. I tried my version, and it works. =A0Thanks for the advice.
>
>-- hendrik
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
> =A0 =A0 =A0Mika
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >I have a module containing a parent class, and another containing a
>child class.
>
>The parent class contains a method 'foo', which is to be overridden= > in
>the child class.
>
>But in implementing 'foo' in the child class I want to call the par= >ent's
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >method.
>
>Now with the method 'init' there's a trick where in the child&#= >39;s init,
>you WIDEN self to the parent's type and then call its init.
>This works because 'init' isn't overridden in an OVERRIDES clau= >se,
>but is defined as a new method that happens to have the same name.
>
>Is there any way to do this with 'foo', where the whole point is th= >at
>it be an overridden method and not a new one?
>
>Do I have to do something like covertly exporting the PROCEDURE that
>implements 'foo' in the parent's module so that it can be calle= >d
>directly? That would seem to be a violation of modular design. =A0Or is
>violating modular design exactly what I'm really trying to do here?
>
>-- hendrik
>
>
>
>

> >--0015174c40fe49b5ad04a88e39c4-- From dabenavidesd at yahoo.es Thu Jul 21 18:14:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 17:14:52 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <20110721072743.5F5A31A2079@async.async.caltech.edu> Message-ID: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: I find this terminology of types and checks and inheritance big convoluted here (but would allow me this to say we need a baby toy to plataform independent Modula-3 language or sort of artifact, but not everything we would want since there seems to be pieces of work which are undecidable, how one can create some application of it, it seems odd to try those for me). Although it is better to start with something to do that and I fact I believe it's already started by a great computologist, Coenraad Bron with work on Pascal, Modular pascal at the University of Twente, The Netherlands and later in Oberon with Modula-3 reusability and typability, at University of Groningen, The Netherlands, after all, Coen Bron, worked hard for that. Indeed people there liked Modula-like languages a lot, which makes sense for yet another local Prof visit there. I don't know many or too much but I believe great computer scientist came from there as well but certainly is a good resource of efforts in tools and so for ourselves Thanks in advance --- El jue, 21/7/11, Mika Nystrom escribi?: > De: Mika Nystrom > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 02:27 > Section 6, under "Designators". > > Mika > > Peter McKinna writes: > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/plain; charset=ISO-8859-1 > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx) > >where that A is a type > > > >I just compiled it and it works fine but its a > syntactic subtlety that I > >have sadly been unaware. > > > >Regards Peter > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote > >: > > > >> > >> > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> > >>> Right, a shadowed method is a new method of > the same name, just like > >>> Algol block structure. An overridden > method is a different binding for > >>> the same method. If you override a > method, you can't call the old one > >>> without using the special A.T.m(a,...) syntax, > since there's no binding > >>> for the old one within the type record for > your object. The A.T.m(...) > >>> syntax works whether the method is shadowed or > overridden. The widening > >>> only works for shadowed methods. > >>> > >>> The clever thing is that the method dispatch > is based on the known type > >>> of the object within the context that the > method is called, not where the > >>> object type is declared. > >>> > >>> This distinction between overriding and > shadowing I think is one of the > >>> most brilliant aspects of Modula-3: it avoids > the problem that you > >>> create an unwanted method override by adding a > new method of the same name > >>> (whether in a supertype or a subtype). > >>> > >> > >> This is probably my single favorite example of how > C++ is badly > >> designed for practical programming and, more > generally, why syntactic > >> explicitness is important. > >> > >> C++ has both overrides and new methods, but it is > *very* hard for a > >> programmer to see the difference. > Syntactically, they look identical. > >> > >> For a member function declaration to be an > override, you need: > >> 1) It has the same simple name as the original. > >> 2) It has an equivalent signature to the > original. > >> 3) The original is 'virtual', which in this > context means overridable. > >> > >> Equivalence of signatures is complicated, as there > are several rules > >> about selected ways they can differ and still be > equivalent. For > >> example, int *p and int p[] are equivalent. > There can be overloaded > >> (same name, different signatures) original > methods, from the same or > >> different superclasses, to be considered. > And then this allows what > >> would, I suppose, be called "overloaded > overrides", as well as a mix > >> of overloaded new methods and overrides, all with > the same name. > >> > >> 'virtual' has at least two very different > meanings, one relevant here > >> and one regarding repeated inheritance over > multiple paths. The > >> virtual property can come from anywhere in the > inheritance hierarchy, > >> and can change between the original method > declaration and the > >> subclass we are trying to read. > >> > >> Shadowing can also involve signature equivalence > as well as name > >> equality. AFAIK, you can't shadow with the > same name and signature, > >> if the relevant inherited method is virtual. > But if not, a same-name, > >> signature-equivalent member function is a shadow. > >> > >> Meanwhile, linking up to a precursor to be > overridden involves looking > >> at signatures of same-named methods from all > superclasses, whereas > >> overload resolution in calls considers only > same-named candidates from > >> the same class, before signatures are considered. > >> > >> The interactions with static member functions make > things even more > >> complicated. > >> > >> None of this is syntactically explicit. In > contrast, Modula-3 says > >> either "METHODS" or "OVERRIDES" explicitly. > Moreover, even without > >> these tags, new methods always have signatures, > while overrides do > >> not. > >> > >> In my experience, very few C++ programmers, > outside of compiler > >> writers and language committee members, understand > these semantic > >> rules. And they do predictably get surprised > when something turns out > >> to dispatch when they expected it not to or vice > versa. When this > >> happens, rather than figure the language out, they > just make a note to > >> self to use some coding convention that avoids > getting anywhere close, > >> e.g., never using the same name for different > methods, only for > >> overrides. (Well, OK, that's probably a good > practice anyway, but you > >> see my point, I think.) > >> > >> > >> > >>> Mika > >>> > >>> > >>> Hendrik Boom writes: > >>> > >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, > Hendrik Boom wrote: > >>>> > >>>>> On Tue, Jul 19, 2011 at 07:11:05AM > -0700, Mika Nystrom wrote: > >>>>> > >>>>>> Sorry I'm being confusing here. > >>>>>> > >>>>>> The code is right but I think your > question is a bit confusing. > >>>>>> > >>>>>> With your init example I don't > think you're talking about an overridden > >>>>>> init method but a shadowed > method. > >>>>>> > >>>>> > >>>>> A 'shadowed' method. Is that > what you call what's essentially a new > >>>>> method that happens to have the same > name? Just like the way a variable > >>>>> in a nested block that has the same > name as one in an outer block would > >>>>> be a new variable (I'm not sure Modula > 3 allows this, the way C and the > >>>>> Algols do; I find it leads to > confusing code). > >>>>> > >>>>> Init is the one I've seen explained in > documentation. It's not what I > >>>>> want, because that trick provides no > inheritance. > >>>>> > >>>>> You can't call an overridden > method > >>>>>> through the widening trick, but > you *can* call a shadowed method like > >>>>>> that. > >>>>>> > >>>>>> Mika > >>>>>> > >>>>>> Mika Nystrom writes: > >>>>>> > >>>>>>> > >>>>>>> TYPE A = OBJECT METHODS m(xxx) > END; > >>>>>>> > >>>>>>> TYPE B = A OBJECT METHODS > m(xxx) END; > >>>>>>> > >>>>>> > >>>>> This is, if I understand the > terminology, a declaratin of m as a shadowd > >>>>> method. It's not what I want, > because I intend that under normal > >>>>> circumstances, if an B object is used > in a context where its static type > >>>>> is known as A, I still want the normal > overriding mechanism to ensure > >>>>> that B's m is the one called. > >>>>> > >>>>> I mean something like > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := ... > END; > >>>>> > >>>>> > >>>>>>> b := NEW(B); > >>>>>>> > >>>>>>> A.m(b,xxx) > >>>>>>> > >>>>>> > >>>>> So this is a way to specifically get > the m that belongs with A? Will > >>>>> this work with the way I want to > define B and m? > >>>>> > >>>>> as in > >>>>> > >>>>> TYPE A = OBJECT METHODS m(xxx) := bar > END; > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := foo > END; > >>>>> > >>>>> PROCEDURE foo(self : B, ....) = > >>>>> BEGIN > >>>>> ... > >>>>> ... > >>>>> A.m(self, > ...) (* and this ends up calling bar? *) > >>>>> ... > >>>>> END foo; > >>>>> > >>>> > >>>> Well. I tried my version, and it > works. Thanks for the advice. > >>>> > >>>> -- hendrik > >>>> > >>>> > >>>>> > >>>>>>> Mika > >>>>>>> > >>>>>>> Hendrik Boom writes: > >>>>>>> > >>>>>>>> I have a module containing > a parent class, and another containing a > >>>>>>>> child class. > >>>>>>>> > >>>>>>>> The parent class contains > a method 'foo', which is to be overridden > >>>>>>>> in > >>>>>>>> the child class. > >>>>>>>> > >>>>>>>> But in implementing 'foo' > in the child class I want to call the > >>>>>>>> parent's > >>>>>>>> > >>>>>>> > >>>> method. > >>>>>>>> > >>>>>>>> Now with the method 'init' > there's a trick where in the child's init, > >>>>>>>> you WIDEN self to the > parent's type and then call its init. > >>>>>>>> This works because 'init' > isn't overridden in an OVERRIDES clause, > >>>>>>>> but is defined as a new > method that happens to have the same name. > >>>>>>>> > >>>>>>>> Is there any way to do > this with 'foo', where the whole point is that > >>>>>>>> it be an overridden method > and not a new one? > >>>>>>>> > >>>>>>>> Do I have to do something > like covertly exporting the PROCEDURE that > >>>>>>>> implements 'foo' in the > parent's module so that it can be called > >>>>>>>> directly? That would seem > to be a violation of modular design. Or is > >>>>>>>> violating modular design > exactly what I'm really trying to do here? > >>>>>>>> > >>>>>>>> -- hendrik > >>>>>>>> > >>>>>>> > >>> > > > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/html; charset=ISO-8859-1 > >Content-Transfer-Encoding: quoted-printable > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx)=A0 w= > >here that A is a type

I just > compiled it and it works fine but its a= > > syntactic subtlety that I have sadly been > unaware.

Regards Peter >> > >
On Thu, Jul > 21, 2011 at 2:18 AM, Rodney M. B= > >ates < href=3D"mailto:rodney_bates at lcwb.coop">rodney= > >_bates at lcwb.coop> > wrote:
> style=3D"border-left: 1px solid rgb(204, 204, 204); > margin: 0pt 0pt 0pt 0.= > >8ex; padding-left: 1ex;"> > >
> >
> >On 07/20/2011 02:44 AM, Mika Nystrom wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Right, a shadowed method is a new method of the same > name, just like
> >Algol block structure. =A0An overridden method is a > different binding for >r> > >the same method. =A0If you override a method, you > can't call the old on= > >e
> >without using the special A.T.m(a,...) syntax, since > there's no binding= > >
> >for the old one within the type record for your object. > =A0The A.T.m(...) >r> > >syntax works whether the method is shadowed or > overridden. =A0The widening<= > >br> > >only works for shadowed methods.
> >
> >The clever thing is that the method dispatch is based > on the known type
> >of the object within the context that the method is > called, not where the >r> > >object type is declared.
> >
> >This distinction between overriding and shadowing I > think is one of the
> >most brilliant aspects of Modula-3: it avoids the > problem that you
> >create an unwanted method override by adding a new > method of the same name<= > >br> > >(whether in a supertype or a subtype).
> >
> >
> >This is probably my single favorite example of how C++ > is badly
> >designed for practical programming and, more generally, > why syntactic
> >explicitness is important.
> >
> >C++ has both overrides and new methods, but it is > *very* hard for a
> >programmer to see the difference. =A0Syntactically, > they look identical. >> > >
> >For a member function declaration to be an override, > you need:
> >1) It has the same simple name as the > original.
> >2) It has an equivalent signature to the > original.
> >3) The original is 'virtual', which in this > context means overridab= > >le.
> >
> >Equivalence of signatures is complicated, as there are > several rules
> >about selected ways they can differ and still be > equivalent. =A0For
> >example, int *p and int p[] are equivalent. =A0There > can be overloaded
> >(same name, different signatures) original methods, > from the same or
> >different superclasses, to be considered. =A0And then > this allows what
> >would, I suppose, be called "overloaded > overrides", as well as a = > >mix
> >of overloaded new methods and overrides, all with the > same name.
> >
> >'virtual' has at least two very different > meanings, one relevant he= > >re
> >and one regarding repeated inheritance over multiple > paths. =A0The
> >virtual property can come from anywhere in the > inheritance hierarchy,
> >and can change between the original method declaration > and the
> >subclass we are trying to read.
> >
> >Shadowing can also involve signature equivalence as > well as name
> >equality. =A0AFAIK, you can't shadow with the same > name and signature,<= > >br> > >if the relevant inherited method is virtual. =A0But if > not, a same-name, >> > >signature-equivalent member function is a > shadow.
> >
> >Meanwhile, linking up to a precursor to be overridden > involves looking
> >at signatures of same-named methods from all > superclasses, whereas
> >overload resolution in calls considers only same-named > candidates from
> >the same class, before signatures are > considered.
> >
> >The interactions with static member functions make > things even more
> >complicated.
> >
> >None of this is syntactically explicit. =A0In contrast, > Modula-3 says
> >either "METHODS" or > "OVERRIDES" explicitly. =A0Moreover= > >, even without
> >these tags, new methods always have signatures, while > overrides do
> >not.
> >
> >In my experience, very few C++ programmers, outside of > compiler
> >writers and language committee members, understand > these semantic
> >rules. =A0And they do predictably get surprised when > something turns out >> > >to dispatch when they expected it not to or vice versa. > =A0When this
> >happens, rather than figure the language out, they just > make a note to
> >self to use some coding convention that avoids getting > anywhere close,
> >e.g., never using the same name for different methods, > only for
> >overrides. (Well, OK, that's probably a good > practice anyway, but you >r> > >see my point, I think.)
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> > =A0 =A0 =A0Mika
> >
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Sorry I'm being confusing here.
> >
> >The code is right but I think your question is a bit > confusing.
> >
> >With your init example I don't think you're > talking about an overri= > >dden
> >init method but a shadowed method.
> >
> >
> >A 'shadowed' method. =A0Is that what you call > what's essentiall= > >y a new
> >method that happens to have the same name? =A0Just like > the way a variable<= > >br> > >in a nested block that has the same name as one in an > outer block would
> >be a new variable (I'm not sure Modula 3 allows > this, the way C and the= > >
> >Algols do; I find it leads to confusing > code).
> >
> >Init is the one I've seen explained in > documentation. =A0It's =A0no= > >t what I
> >want, because that trick provides no > inheritance.
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >You can't call an overridden method
> >through the widening trick, but you *can* call a > shadowed method like
> >that.
> >
> > =A0 =A0 =A0Mika
> >
> >Mika Nystrom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >TYPE A =3D OBJECT METHODS m(xxx) END;
> >
> >TYPE B =3D A OBJECT METHODS m(xxx) END;
> >
> >
> >This is, if I understand the terminology, a declaratin > of m as a shadowd >> > >method. =A0It's not what I want, because I > =A0intend that under normal<= > >br> > >circumstances, if an B object is used in a context > where its static type >> > >is known as A, I still want the normal overriding > mechanism to ensure
> >that B's m is the one called.
> >
> >I mean something like
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > END;
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> >b :=3D NEW(B);
> >
> >A.m(b,xxx)
> >
> >
> >So this is a way to specifically get the m that belongs > with A? =A0Will
> >this work with the way I want to define B and > m?
> >
> >as in
> >
> >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > END;
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > END;
> >
> >PROCEDURE foo(self : B, ....) =3D
> >BEGIN
> > =A0 ...
> > =A0 ...
> > =A0 =A0A.m(self, ...) =A0 (* and this ends up calling > bar? *)
> > =A0 ...
> >END foo;
> >
> >
> >Well. I tried my version, and it works. =A0Thanks for > the advice.
> >
> >-- hendrik
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> > =A0 =A0 =A0Mika
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >I have a module containing a parent class, and another > containing a
> >child class.
> >
> >The parent class contains a method 'foo', which > is to be overridden= > > in
> >the child class.
> >
> >But in implementing 'foo' in the child class I > want to call the par= > >ent's
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >method.
> >
> >Now with the method 'init' there's a trick > where in the child&#= > >39;s init,
> >you WIDEN self to the parent's type and then call > its init.
> >This works because 'init' isn't overridden > in an OVERRIDES clau= > >se,
> >but is defined as a new method that happens to have the > same name.
> >
> >Is there any way to do this with 'foo', where > the whole point is th= > >at
> >it be an overridden method and not a new > one?
> >
> >Do I have to do something like covertly exporting the > PROCEDURE that
> >implements 'foo' in the parent's module so > that it can be calle= > >d
> >directly? That would seem to be a violation of modular > design. =A0Or is
> >violating modular design exactly what I'm really > trying to do here?
> >
> >-- hendrik
> >
> >
> >
> >

> > > >--0015174c40fe49b5ad04a88e39c4-- > From dabenavidesd at yahoo.es Thu Jul 21 20:27:05 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 19:27:05 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Message-ID: <1311272825.36025.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: as I see the fact is there is possibly a lot of people who loved Modula- but this is although unprovable or somehow you need to understand the ecology of this languages, the soundness, the everything to affirm that today as is claimed, there is evidence for that, certainly he might have it in it's time, that would explain the long work on oberon Compiler for Modula-3 re usability and polymorphic types support work: http://www.win.tue.nl/lotgevallen/em/bron1.pdf In fact the thesis on that proposed by himself of Groningen student was done in that route (but it was not like the Cardelli's taste, in typability and usability, perhaps the typing issue went too hard to prove by itself, but, nevertheless the type system is quite admirable as for one would expect from them) This is to say, there is quite hard work on that area for the better of the language, but need more investigation, or consolidation, or just proposal, probably based on: http://dissertations.ub.rug.nl/faculties/science/1995/b.laverman/ And other forms in Abadi-Cardelli plus Lampson-Burstall work, and that's a lot to consolidate in a proposal, still somehow doable...: http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/abstracts/src-rr-001.html Probably the best sources of that kind (theoretical not computable): http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-10.pdf http://portal.acm.org/citation.cfm?id=645683.758050&preflayout=flat http://www.cs.man.ac.uk/~david/categories/book/book.pdf I would suggest some machine learning program to match the same types, with a type system like that of Cardelli, if you can prove the later, then you have a point since it's on the same family of Calculus, yet they are quite computable or at least some correspondence where one can built yet another theory of Modula-3 calculi Thanks in advance --- El jue, 21/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" , "Mika Nystrom" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 11:14 > Hi all: > I find this terminology of types and checks and inheritance > big convoluted here (but would allow me this to say we need > a baby toy to plataform independent Modula-3 language or > sort of artifact, but not everything we would want since > there seems to be pieces of work which are undecidable, how > one can create some application of it, it seems odd to try > those for me). > > Although it is better to start with something to do that > and I fact I believe it's already started by a great > computologist, Coenraad Bron with work on Pascal, Modular > pascal at the University of Twente, The Netherlands and > later in Oberon with Modula-3 reusability and typability, at > University of Groningen, The Netherlands, after all, > Coen Bron, worked hard for that. Indeed people there liked > Modula-like languages a lot, which makes sense for yet > another local Prof visit there. > > I don't know many or too much but I believe great computer > scientist came from there as well but certainly is a good > resource of efforts in tools and so for ourselves > > Thanks in advance > > --- El jue, 21/7/11, Mika Nystrom > escribi?: > > > De: Mika Nystrom > > Asunto: Re: [M3devel] calling an overridden method > > Para: "Peter McKinna" > > CC: m3devel at elegosoft.com > > Fecha: jueves, 21 de julio, 2011 02:27 > > Section 6, under "Designators". > > > > Mika > > > > Peter McKinna writes: > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/plain; charset=ISO-8859-1 > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx) > > >where that A is a type > > > > > >I just compiled it and it works fine but its a > > syntactic subtlety that I > > >have sadly been unaware. > > > > > >Regards Peter > > > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates > wrote > > >: > > > > > >> > > >> > > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > > >> > > >>> Right, a shadowed method is a new method > of > > the same name, just like > > >>> Algol block structure. An > overridden > > method is a different binding for > > >>> the same method. If you override a > > method, you can't call the old one > > >>> without using the special A.T.m(a,...) > syntax, > > since there's no binding > > >>> for the old one within the type record > for > > your object. The A.T.m(...) > > >>> syntax works whether the method is > shadowed or > > overridden. The widening > > >>> only works for shadowed methods. > > >>> > > >>> The clever thing is that the method > dispatch > > is based on the known type > > >>> of the object within the context that > the > > method is called, not where the > > >>> object type is declared. > > >>> > > >>> This distinction between overriding and > > shadowing I think is one of the > > >>> most brilliant aspects of Modula-3: it > avoids > > the problem that you > > >>> create an unwanted method override by > adding a > > new method of the same name > > >>> (whether in a supertype or a subtype). > > >>> > > >> > > >> This is probably my single favorite example > of how > > C++ is badly > > >> designed for practical programming and, more > > generally, why syntactic > > >> explicitness is important. > > >> > > >> C++ has both overrides and new methods, but > it is > > *very* hard for a > > >> programmer to see the difference. > > Syntactically, they look identical. > > >> > > >> For a member function declaration to be an > > override, you need: > > >> 1) It has the same simple name as the > original. > > >> 2) It has an equivalent signature to the > > original. > > >> 3) The original is 'virtual', which in this > > context means overridable. > > >> > > >> Equivalence of signatures is complicated, as > there > > are several rules > > >> about selected ways they can differ and still > be > > equivalent. For > > >> example, int *p and int p[] are equivalent. > > There can be overloaded > > >> (same name, different signatures) original > > methods, from the same or > > >> different superclasses, to be considered. > > And then this allows what > > >> would, I suppose, be called "overloaded > > overrides", as well as a mix > > >> of overloaded new methods and overrides, all > with > > the same name. > > >> > > >> 'virtual' has at least two very different > > meanings, one relevant here > > >> and one regarding repeated inheritance over > > multiple paths. The > > >> virtual property can come from anywhere in > the > > inheritance hierarchy, > > >> and can change between the original method > > declaration and the > > >> subclass we are trying to read. > > >> > > >> Shadowing can also involve signature > equivalence > > as well as name > > >> equality. AFAIK, you can't shadow with > the > > same name and signature, > > >> if the relevant inherited method is virtual. > > > But if not, a same-name, > > >> signature-equivalent member function is a > shadow. > > >> > > >> Meanwhile, linking up to a precursor to be > > overridden involves looking > > >> at signatures of same-named methods from all > > superclasses, whereas > > >> overload resolution in calls considers only > > same-named candidates from > > >> the same class, before signatures are > considered. > > >> > > >> The interactions with static member functions > make > > things even more > > >> complicated. > > >> > > >> None of this is syntactically explicit. > In > > contrast, Modula-3 says > > >> either "METHODS" or "OVERRIDES" explicitly. > > Moreover, even without > > >> these tags, new methods always have > signatures, > > while overrides do > > >> not. > > >> > > >> In my experience, very few C++ programmers, > > outside of compiler > > >> writers and language committee members, > understand > > these semantic > > >> rules. And they do predictably get > surprised > > when something turns out > > >> to dispatch when they expected it not to or > vice > > versa. When this > > >> happens, rather than figure the language out, > they > > just make a note to > > >> self to use some coding convention that > avoids > > getting anywhere close, > > >> e.g., never using the same name for > different > > methods, only for > > >> overrides. (Well, OK, that's probably a good > > practice anyway, but you > > >> see my point, I think.) > > >> > > >> > > >> > > >>> Mika > > >>> > > >>> > > >>> Hendrik Boom writes: > > >>> > > >>>> On Tue, Jul 19, 2011 at 01:26:14PM > -0400, > > Hendrik Boom wrote: > > >>>> > > >>>>> On Tue, Jul 19, 2011 at > 07:11:05AM > > -0700, Mika Nystrom wrote: > > >>>>> > > >>>>>> Sorry I'm being confusing > here. > > >>>>>> > > >>>>>> The code is right but I think > your > > question is a bit confusing. > > >>>>>> > > >>>>>> With your init example I > don't > > think you're talking about an overridden > > >>>>>> init method but a shadowed > > method. > > >>>>>> > > >>>>> > > >>>>> A 'shadowed' method. Is > that > > what you call what's essentially a new > > >>>>> method that happens to have the > same > > name? Just like the way a variable > > >>>>> in a nested block that has the > same > > name as one in an outer block would > > >>>>> be a new variable (I'm not sure > Modula > > 3 allows this, the way C and the > > >>>>> Algols do; I find it leads to > > confusing code). > > >>>>> > > >>>>> Init is the one I've seen > explained in > > documentation. It's not what I > > >>>>> want, because that trick provides > no > > inheritance. > > >>>>> > > >>>>> You can't call an > overridden > > method > > >>>>>> through the widening trick, > but > > you *can* call a shadowed method like > > >>>>>> that. > > >>>>>> > > >>>>>> Mika > > >>>>>> > > >>>>>> Mika Nystrom writes: > > >>>>>> > > >>>>>>> > > >>>>>>> TYPE A = OBJECT METHODS > m(xxx) > > END; > > >>>>>>> > > >>>>>>> TYPE B = A OBJECT > METHODS > > m(xxx) END; > > >>>>>>> > > >>>>>> > > >>>>> This is, if I understand the > > terminology, a declaratin of m as a shadowd > > >>>>> method. It's not what I > want, > > because I intend that under normal > > >>>>> circumstances, if an B object is > used > > in a context where its static type > > >>>>> is known as A, I still want the > normal > > overriding mechanism to ensure > > >>>>> that B's m is the one called. > > >>>>> > > >>>>> I mean something like > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > ... > > END; > > >>>>> > > >>>>> > > >>>>>>> b := NEW(B); > > >>>>>>> > > >>>>>>> A.m(b,xxx) > > >>>>>>> > > >>>>>> > > >>>>> So this is a way to specifically > get > > the m that belongs with A? Will > > >>>>> this work with the way I want to > > define B and m? > > >>>>> > > >>>>> as in > > >>>>> > > >>>>> TYPE A = OBJECT METHODS m(xxx) := > bar > > END; > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > foo > > END; > > >>>>> > > >>>>> PROCEDURE foo(self : B, ....) = > > >>>>> BEGIN > > >>>>> ... > > >>>>> ... > > >>>>> A.m(self, > > ...) (* and this ends up calling bar? > *) > > >>>>> ... > > >>>>> END foo; > > >>>>> > > >>>> > > >>>> Well. I tried my version, and it > > works. Thanks for the advice. > > >>>> > > >>>> -- hendrik > > >>>> > > >>>> > > >>>>> > > >>>>>>> Mika > > >>>>>>> > > >>>>>>> Hendrik Boom writes: > > >>>>>>> > > >>>>>>>> I have a module > containing > > a parent class, and another containing a > > >>>>>>>> child class. > > >>>>>>>> > > >>>>>>>> The parent class > contains > > a method 'foo', which is to be overridden > > >>>>>>>> in > > >>>>>>>> the child class. > > >>>>>>>> > > >>>>>>>> But in implementing > 'foo' > > in the child class I want to call the > > >>>>>>>> parent's > > >>>>>>>> > > >>>>>>> > > >>>> method. > > >>>>>>>> > > >>>>>>>> Now with the method > 'init' > > there's a trick where in the child's init, > > >>>>>>>> you WIDEN self to > the > > parent's type and then call its init. > > >>>>>>>> This works because > 'init' > > isn't overridden in an OVERRIDES clause, > > >>>>>>>> but is defined as a > new > > method that happens to have the same name. > > >>>>>>>> > > >>>>>>>> Is there any way to > do > > this with 'foo', where the whole point is that > > >>>>>>>> it be an overridden > method > > and not a new one? > > >>>>>>>> > > >>>>>>>> Do I have to do > something > > like covertly exporting the PROCEDURE that > > >>>>>>>> implements 'foo' in > the > > parent's module so that it can be called > > >>>>>>>> directly? That would > seem > > to be a violation of modular design. Or is > > >>>>>>>> violating modular > design > > exactly what I'm really trying to do here? > > >>>>>>>> > > >>>>>>>> -- hendrik > > >>>>>>>> > > >>>>>>> > > >>> > > > > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/html; charset=ISO-8859-1 > > >Content-Transfer-Encoding: quoted-printable > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx)=A0 w= > > >here that A is a type

I just > > compiled it and it works fine but its a= > > > syntactic subtlety that I have sadly been > > unaware.

Regards Peter > >> > > >
On Thu, > Jul > > 21, 2011 at 2:18 AM, Rodney M. B= > > >ates < > href=3D"mailto:rodney_bates at lcwb.coop">rodney= > > >_bates at lcwb.coop> > > wrote:
> > style=3D"border-left: 1px solid rgb(204, 204, > 204); > > margin: 0pt 0pt 0pt 0.= > > >8ex; padding-left: 1ex;"> > > >
> > >
> > >On 07/20/2011 02:44 AM, Mika Nystrom > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Right, a shadowed method is a new method of the > same > > name, just like
> > >Algol block structure. =A0An overridden method is > a > > different binding for > >r> > > >the same method. =A0If you override a method, you > > can't call the old on= > > >e
> > >without using the special A.T.m(a,...) syntax, > since > > there's no binding= > > >
> > >for the old one within the type record for your > object. > > =A0The A.T.m(...) > >r> > > >syntax works whether the method is shadowed or > > overridden. =A0The widening<= > > >br> > > >only works for shadowed methods.
> > >
> > >The clever thing is that the method dispatch is > based > > on the known type
> > >of the object within the context that the method > is > > called, not where the > >r> > > >object type is declared.
> > >
> > >This distinction between overriding and shadowing > I > > think is one of the
> > >most brilliant aspects of Modula-3: it avoids the > > problem that you
> > >create an unwanted method override by adding a > new > > method of the same name<= > > >br> > > >(whether in a supertype or a subtype).
> > >
> > >
> > >This is probably my single favorite example of how > C++ > > is badly
> > >designed for practical programming and, more > generally, > > why syntactic
> > >explicitness is important.
> > >
> > >C++ has both overrides and new methods, but it is > > *very* hard for a
> > >programmer to see the difference. > =A0Syntactically, > > they look identical. > >> > > >
> > >For a member function declaration to be an > override, > > you need:
> > >1) It has the same simple name as the > > original.
> > >2) It has an equivalent signature to the > > original.
> > >3) The original is 'virtual', which in this > > context means overridab= > > >le.
> > >
> > >Equivalence of signatures is complicated, as there > are > > several rules
> > >about selected ways they can differ and still be > > equivalent. =A0For
> > >example, int *p and int p[] are equivalent. > =A0There > > can be overloaded
> > >(same name, different signatures) original > methods, > > from the same or
> > >different superclasses, to be considered. =A0And > then > > this allows what
> > >would, I suppose, be called "overloaded > > overrides", as well as a = > > >mix
> > >of overloaded new methods and overrides, all with > the > > same name.
> > >
> > >'virtual' has at least two very different > > meanings, one relevant he= > > >re
> > >and one regarding repeated inheritance over > multiple > > paths. =A0The
> > >virtual property can come from anywhere in the > > inheritance hierarchy,
> > >and can change between the original method > declaration > > and the
> > >subclass we are trying to read.
> > >
> > >Shadowing can also involve signature equivalence > as > > well as name
> > >equality. =A0AFAIK, you can't shadow with the > same > > name and signature,<= > > >br> > > >if the relevant inherited method is virtual. > =A0But if > > not, a same-name, > >> > > >signature-equivalent member function is a > > shadow.
> > >
> > >Meanwhile, linking up to a precursor to be > overridden > > involves looking
> > >at signatures of same-named methods from all > > superclasses, whereas
> > >overload resolution in calls considers only > same-named > > candidates from
> > >the same class, before signatures are > > considered.
> > >
> > >The interactions with static member functions > make > > things even more
> > >complicated.
> > >
> > >None of this is syntactically explicit. =A0In > contrast, > > Modula-3 says
> > >either "METHODS" or > > "OVERRIDES" explicitly. > =A0Moreover= > > >, even without
> > >these tags, new methods always have signatures, > while > > overrides do
> > >not.
> > >
> > >In my experience, very few C++ programmers, > outside of > > compiler
> > >writers and language committee members, > understand > > these semantic
> > >rules. =A0And they do predictably get surprised > when > > something turns out > >> > > >to dispatch when they expected it not to or vice > versa. > > =A0When this
> > >happens, rather than figure the language out, they > just > > make a note to
> > >self to use some coding convention that avoids > getting > > anywhere close,
> > >e.g., never using the same name for different > methods, > > only for
> > >overrides. (Well, OK, that's probably a good > > practice anyway, but you > >r> > > >see my point, I think.)
> > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > > =A0 =A0 =A0Mika
> > >
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik > Boom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika > Nystrom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Sorry I'm being confusing here.
> > >
> > >The code is right but I think your question is a > bit > > confusing.
> > >
> > >With your init example I don't think you're > > talking about an overri= > > >dden
> > >init method but a shadowed method.
> > >
> > >
> > >A 'shadowed' method. =A0Is that what you call > > what's essentiall= > > >y a new
> > >method that happens to have the same name? =A0Just > like > > the way a variable<= > > >br> > > >in a nested block that has the same name as one in > an > > outer block would
> > >be a new variable (I'm not sure Modula 3 allows > > this, the way C and the= > > >
> > >Algols do; I find it leads to confusing > > code).
> > >
> > >Init is the one I've seen explained in > > documentation. =A0It's =A0no= > > >t what I
> > >want, because that trick provides no > > inheritance.
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >You can't call an overridden method
> > >through the widening trick, but you *can* call a > > shadowed method like
> > >that.
> > >
> > > =A0 =A0 =A0Mika
> > >
> > >Mika Nystrom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >TYPE A =3D OBJECT METHODS m(xxx) END;
> > >
> > >TYPE B =3D A OBJECT METHODS m(xxx) END;
> > >
> > >
> > >This is, if I understand the terminology, a > declaratin > > of m as a shadowd > >> > > >method. =A0It's not what I want, because I > > =A0intend that under normal<= > > >br> > > >circumstances, if an B object is used in a > context > > where its static type > >> > > >is known as A, I still want the normal overriding > > mechanism to ensure
> > >that B's m is the one called.
> > >
> > >I mean something like
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > > END;
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > >b :=3D NEW(B);
> > >
> > >A.m(b,xxx)
> > >
> > >
> > >So this is a way to specifically get the m that > belongs > > with A? =A0Will
> > >this work with the way I want to define B and > > m?
> > >
> > >as in
> > >
> > >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > > END;
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > > END;
> > >
> > >PROCEDURE foo(self : B, ....) =3D
> > >BEGIN
> > > =A0 ...
> > > =A0 ...
> > > =A0 =A0A.m(self, ...) =A0 (* and this ends up > calling > > bar? *)
> > > =A0 ...
> > >END foo;
> > >
> > >
> > >Well. I tried my version, and it works. =A0Thanks > for > > the advice.
> > >
> > >-- hendrik
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > > =A0 =A0 =A0Mika
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >I have a module containing a parent class, and > another > > containing a
> > >child class.
> > >
> > >The parent class contains a method 'foo', which > > is to be overridden= > > > in
> > >the child class.
> > >
> > >But in implementing 'foo' in the child class I > > want to call the par= > > >ent's
> > > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >method.
> > >
> > >Now with the method 'init' there's a trick > > where in the child&#= > > >39;s init,
> > >you WIDEN self to the parent's type and then call > > its init.
> > >This works because 'init' isn't overridden > > in an OVERRIDES clau= > > >se,
> > >but is defined as a new method that happens to > have the > > same name.
> > >
> > >Is there any way to do this with 'foo', where > > the whole point is th= > > >at
> > >it be an overridden method and not a new > > one?
> > >
> > >Do I have to do something like covertly exporting > the > > PROCEDURE that
> > >implements 'foo' in the parent's module so > > that it can be calle= > > >d
> > >directly? That would seem to be a violation of > modular > > design. =A0Or is
> > >violating modular design exactly what I'm really > > trying to do here?
> > >
> > >-- hendrik
> > > >
> > >
> > >
> > >

> > > > > >--0015174c40fe49b5ad04a88e39c4-- > > > From schlepptop at henning-thielemann.de Sun Jul 24 20:51:17 2011 From: schlepptop at henning-thielemann.de (Henning Thielemann) Date: Sun, 24 Jul 2011 20:51:17 +0200 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> References: <4E19AA04.1060207@lcwb.coop> Message-ID: <4E2C69A5.9020607@henning-thielemann.de> On 10.07.2011 15:32, Rodney M. Bates wrote: > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what I call > _algorithmically statically typed_. By this, I mean, informally, that > there is a natural type for the variable that can be inferred from its > assignments and uses. Moreover, this is a static property, i.e., > independent of the program's inputs, and thus can be inferred from the > code alone. By the way, I remember the HiSoft Basic compiler on ZX spectrum that allowed you to run BASIC programs in a test mode, where the types of the variables were determined. In a sense (ZX Spectrum) BASIC is statically typed, since names of string variables must end with '$' and all alphanumeric variable names denote floating point numbers. The HiSoft Basic compiler had a richer set of numeric types: signed and unsigned 8-bit and 16-bit numbers and floating point numbers. In the test run the compiler determined for every variable the most restrictive type that covers all numbers seen during the program execution. From peter.mckinna at gmail.com Mon Jul 25 01:30:23 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Mon, 25 Jul 2011 09:30:23 +1000 Subject: [M3devel] Coverage option Message-ID: How do you get the -Z option to work? It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. Regards Peter. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Mon Jul 25 01:42:12 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:42:12 -0400 Subject: [M3devel] Coverage option In-Reply-To: References: Message-ID: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > How do you get the -Z option to work? > > It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. > > Regards Peter. From hosking at cs.purdue.edu Mon Jul 25 01:44:42 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:44:42 -0400 Subject: [M3devel] Coverage option In-Reply-To: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> References: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> Message-ID: <33D960BB-DB9F-42DD-A2C3-7E62A0D682CF@cs.purdue.edu> On second thought, perhaps I mis-spoke. I was thinking of profiling. I'm not sure when coverage instrumentation last worked. On Jul 24, 2011, at 7:42 PM, Tony Hosking wrote: > It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. > > On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > >> How do you get the -Z option to work? >> >> It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. >> >> Regards Peter. > From dabenavidesd at yahoo.es Thu Jul 28 01:50:29 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 28 Jul 2011 00:50:29 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E2C69A5.9020607@henning-thielemann.de> Message-ID: <1311810629.86820.YahooMailClassic@web29704.mail.ird.yahoo.com> Hi all: Thinking about this specific issues, it is somehow related to the idea of REPL (not simple CLI). http://en.wikipedia.org/wiki/REPL http://www.informatik-forum.at/archive/index.php/t-76842.html BTW there I know of a Basic-like interpreter in Modula-3 but not sure what it conditions is (for managing or graphic items in a screen). The most related thing I have heard of is of the way the programmer hint the compiler in Fortran (as M3 old friend told me, sorry buit I refuse to translate just for that in spanish about type inference: "... en fortran se hac?a por la letra inicial. luego declarando explicitamente el tipo. luego de acuerdo a las expresiones en que se usan las variables, considerando los diferentes operadores. otros ? ..."), it basically explains the fortran accepted initial letter variable names and types for it's expressions, e.g records and then accordingly to its operators. though typing in type finite number language is somehow easier (sic), certainly you can write a compiler for a language with dynamic types I believe or at least bootstrap from it (or anyone else). Thus is possible to believe you can write some sort of compiler a.k.a baby Modula-3 sort of evaluator in it self (still functional there should be somehow a way to proceed to be imperative at later stage) or at least express it's type checker in an untyped one, such core could later expressed for the rest of the language, such an imperative one given its denotational semantics is the one of the "Core" language which there are evaluators one of them Athena which is metatheory tool ftp://www.ai.mit.edu/pub/koud/athena.ps for defining such systems and check in terms of its denotational semantics its soundness, and what it makes to modular programming languages, which I believe the most complex part but in terms of functional languages doable at most of it, its type checker and if so compose algebraically it's definitions like a computer symbolic algebra system such as Maple, or that sort). This result is what I would call Modula-3 calculi and derive other calculus such as Abadi-Cardelli "A Theory of Objects", such a system to evolve naturally or artificially the language without putting at risk it's most complex abilities checked, theorems, etc, harder properties of it (for instance construct or compact the valid idiom of ESC/M3, etc). Such a system would allows us to define the type system and its "corresponding" algebraic symbolic system (some work is already done), similar experiences Compuserve had whit a Modula-like algebraic symbolic system called AML for Algebraic Manipulation Language (I wouldn't be surprised if its type system is the one of Modula-3 Module system, given that it's is one of the most important for algebraic symbolic systems, according to Dr. Cardelli Modula-3's one is vastly superior of what it most of them do currently, yet it's hard to type check at compile time like Generics or). Athenas's author argues some of the unsoundness in the Simplify Theorem prover came from the fact the first order logic (predicate calculus) is undecidable, and that may become a certain amount of time to check a given procedure, but with other logics, it might be less undecidable (if you can prove somehow that can switch it's decidable space to be equally or near e.g enough typable for that matters which is hard but AFAIK is not proved but what many somehow try to do manually and do some relatively good work at least of some complexity, but certainly they are not interested in unsound or undecidable cases as most of them are, whatever is worse, as Dr. Greg Nelson said "P-Space" hard to reason about it (certainly not the case for his data abstraction and information hiding valid module idiom), but nevertheless quite advanced work for such a system. Thanks in advance --- El dom, 24/7/11, Henning Thielemann escribi?: > De: Henning Thielemann > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: domingo, 24 de julio, 2011 13:51 > On 10.07.2011 15:32, Rodney M. Bates > wrote: > > > 1) Dynamic typing is seldom either needed or used. > > > > The majority of variables (1) in sensible programs are > what I call > > _algorithmically statically typed_. By this, I mean, > informally, that > > there is a natural type for the variable that can be > inferred from its > > assignments and uses. Moreover, this is a static > property, i.e., > > independent of the program's inputs, and thus can be > inferred from the > > code alone. > > By the way, I remember the HiSoft Basic compiler on ZX > spectrum that allowed you to run BASIC programs in a test > mode, where the types of the variables were determined. In a > sense (ZX Spectrum) BASIC is statically typed, since names > of string variables must end with '$' and all alphanumeric > variable names denote floating point numbers. The HiSoft > Basic compiler had a richer set of numeric types: signed and > unsigned 8-bit and 16-bit numbers and floating point > numbers. In the test run the compiler determined for every > variable the most restrictive type that covers all numbers > seen during the program execution. > From mvfranz at gmail.com Fri Jul 1 23:41:17 2011 From: mvfranz at gmail.com (Michael Franz) Date: Fri, 1 Jul 2011 17:41:17 -0400 Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Message-ID: Hi, A co-worker pointed out this benchmark http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php . I use Scala at work, and have used Java for years. I would be interested in the outcome of Modula 3 port. Unfortunately I don't have enough experience with M3 to do it myself (guess it could be a learning experience, but then I can complain about a lack of time). I also follow the development of D and there is a port going on in their community. http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html Michael From dabenavidesd at yahoo.es Sat Jul 2 02:22:57 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 2 Jul 2011 01:22:57 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309566177.28834.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > From dabenavidesd at yahoo.es Mon Jul 4 03:51:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 02:51:24 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Mon Jul 4 15:23:26 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:23:26 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> References: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Message-ID: <20110704132326.GA24268@topoi.pooq.com> On Mon, Jul 04, 2011 at 02:51:24AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > it > would mean to compete in such a way in a super computer an alternative > to run without garbage collection (not unsafe but ESC/Modula-3 RTError > and RTCollector disabled but for safe automatically collected objects, > again if we are strictly speaking of a naive implementation algorithm, > if parallelization is allowed under recursive or nested paradigms we > are set to compete too but not absolutely). > I mean, given the effort > they took to run the compiler and tune it for other languages and would > get same compiler effort plus ESC modelling to subsume the collector > for perhaps dynamic scripting like say e.g Obliq, we don't want to > compete with Obliq, but if we do I guess we can't compile JIT JIT. This is a missing feature in Modula 3 -- it would probably need to be implemented as a library, and it would be a huge implementatino project. It would involve writing -- or finding -- code generators for many maching archtectures, and it would require careful integratio with the garbage collector. Both the data structures built by gennerated code and the generated code itself would have to be garbage-collectible. The JIT coder would have to accept relatively low-level instructions and produce in-memory object code. Ideally, unless you use the UNSAFE JIT, it would have to perform suitable static and run-time checking on and in the code it's generating. People implementing currently interpreted languages would have the option of calling this JIT coder instead. I've been tinkering from time to time with bits of code in this direction, but it's a huge job. And, in my opinion, LLVM doesn't really do this right. C-- comes a lot closer, but it isn't a JIT. Maybe something like it could be? -- hendrik From hendrik at topoi.pooq.com Mon Jul 4 15:39:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:39:17 -0400 Subject: [M3devel] concurrency Message-ID: <20110704133917.GA24338@topoi.pooq.com> There was a lot of discussion on problems with concurrency when we wen to pthreads implementation so that we could make use of multiple CPUs. After a while disuccion sttopped. Have these problems all been resolved yet? If I recall correctly, there was a problem with one program, cvsup, using fork as well as threads. This worked with green threads, but not with pthreads. Has cvsup been rehabilitated in some way? How do pthreads interact with the garbage collector? Or are there several garbage collectors with different interaction modalities? -- hendrik From dabenavidesd at yahoo.es Mon Jul 4 19:08:54 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 18:08:54 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110704132326.GA24268@topoi.pooq.com> Message-ID: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: yes, this sounds very good, there is certainly and ability developed for the Obliq (Abadi Cardelli) obejct calculus (a subset which by itself, called **imp**?): http://lucacardelli.name/Topics/TheoryOfObjects/Software.html http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false In last of the above it is referred in first of both of them Obliq and Modula-3 mention **imp**? Chapter 10 and its typ einference algorithm in [1] The actual approach to compile in an interpreted abstract machine way is through a machien called ZINC (acronym for Zync is not CAML), see: http://www.brics.dk/RS/98/55/ or the its previous version : http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html They show the equivalent correspondence between source and abstract machine using decompilation is small steps. Both of their authors extend the Object calculus to an concurrent one, see [3] in: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 as for I know the C-- FE is written in CAML, which is interesting, and there is a type inference algorithm implementation in Modula-3 of ML (Lazy ML via a Horn-logic and intermediate representation see [2]) for yet another language (graphical called cube, see [2] or a featured article in Dr Dobb's journal, here: http://drdobbs.com/article/print?articleId=184409677&siteSectionName= thesis manuscript here: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf ) So this time I'm happy to be wrong, we can do indeed JIT but we should measure the cost (as for type inference could for **imp**? run O(n^3) and currently run O(n^5), it might be necessary do decompiling plus naturally compiling and forth inc ase of NetObj, etc Thanks in advance [1] T. Zhao, ?Type matching and type inference for object-oriented systems,? Purdue University, 2002. [2] M.-A. Najork, ?Programming in three dimensions,? University of Illinois at Urbana-Champaign, 1994. [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object Calculus: Reduction and Typing,? 1998. --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 08:23 > On Mon, Jul 04, 2011 at 02:51:24AM > +0100, Daniel Alejandro Benavides D. wrote: > > Hi all: > > it > > would mean to compete in such a way in a super > computer an alternative > > to run without garbage collection (not unsafe but > ESC/Modula-3 RTError > > and RTCollector disabled but for safe automatically > collected objects, > > again if we are strictly speaking of a naive > implementation algorithm, > > if parallelization is allowed under recursive or > nested paradigms we > > are set to compete too but not absolutely). > > I mean, given the effort > > they took to run the compiler and tune it for other > languages and would > > get same compiler effort plus ESC modelling to subsume > the collector > > for perhaps dynamic scripting like say e.g Obliq, we > don't want to > > compete with Obliq, but if we do I guess we can't > compile JIT > > JIT. > > This is a missing feature in Modula 3 -- it would probably > need to > be implemented as a library, and it would be a huge > implementatino > project. It would involve writing -- or finding -- > code generators for > many maching archtectures, and it would require careful > integratio with > the garbage collector. Both the data structures built > by gennerated > code and the generated code itself would have to be > garbage-collectible. > > The JIT coder would have to accept relatively low-level > instructions and > produce in-memory object code. Ideally, unless you > use the UNSAFE JIT, > it would have to perform suitable static and run-time > checking on and in the code it's generating. > > People implementing currently interpreted languages would > have the > option of calling this JIT coder instead. > > I've been tinkering from time to time with bits of code in > this > direction, but it's a huge job. And, in my opinion, > LLVM doesn't really > do this right. C-- comes a lot closer, but it isn't a > JIT. Maybe > something like it could be? > > -- hendrik > From dragisha at m3w.org Tue Jul 5 00:34:35 2011 From: dragisha at m3w.org (=?utf-8?Q?Dragi=C5=A1a_Duri=C4=87?=) Date: Tue, 5 Jul 2011 00:34:35 +0200 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <20110628155441.GA3406@topoi.pooq.com> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> Message-ID: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Thank you for a pointer and also for your effort. But, not - thank you :). I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. dd On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > Start with "How To Design Programs" (often called HtDP), which > introduces Scheme, not Modula 3. It's simple, direct, and gets to the > point quite quickly and elegantly. From dabenavidesd at yahoo.es Tue Jul 5 01:47:45 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:47:45 +0100 (BST) Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <1309823265.84459.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I believe you are correct, this things never worked for sure here (after some work here, could never shown that way for other CS tutors). Neither will work at least someone like you put the best points over them, I guess we shall see how about that in terms of ESC/Modula-3 logics, I guess the most important example of them was precisely MIT courseware of Butler Lampson (Turing Award) did most of the material from ground up, but still has influence in the way they teach there. He called its teaching language SPEC (many other ollow this route and called their later SPEC/bla..) As I said I have no proof of this, but given this 1991 to 2006 experience, I believe no other but they know how did that work, at least for them. http://research.microsoft.com/en-us/um/people/blampson/48-POCScourse/48-POCS2006Abstract.html Let me know, what do you think, cpecially I bet this approach is used in rather hi-tech schools, thanks but never knew after many years later we should do that, but who knows, maybe there should be somebody who is ablet to pay the price to understand this better. Thanks in advance --- El lun, 4/7/11, Dragi?a Duri? escribi?: > De: Dragi?a Duri? > Asunto: Re: [M3devel] M3devel Digest, Vol 56, Issue 29 > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 17:34 > Thank you for a pointer and also for > your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we > learned programming (my path was Pascal, BASIC, 6502, > GraFORTH, Z80, C, Modula-2....) without > functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking > their "customers" with ML now. It's like "Ok, we made a big > mistake, but this is so obviously different it' also > obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. > Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper > with lots of dialects too... It maybe works for someone (or > someones) but I know a lot of excellent programers who never > met functional. > > dd > > On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > > > Start with "How To Design Programs" (often called > HtDP), which > > introduces Scheme, not Modula 3. It's simple, > direct, and gets to the > > point quite quickly and elegantly. > > From dabenavidesd at yahoo.es Tue Jul 5 01:58:28 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:58:28 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1309823908.72415.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: later, Dr Xavier Leroy developed a type-theoretical modular module system for "core-ML" and "small-C" or "core-C". He mentions important influence of Cardelli's Quest (a super set of Girard Fw) language machine on it: http://pauillac.inria.fr/~xleroy/modmod/ http://lucacardelli.name/Papers/QuestSem.pdf http://archive.numdam.org/ARCHIVE/ITA/ITA_1994__28_6/ITA_1994__28_6_513_0/ITA_1994__28_6_513_0.pdf This was the case also for an extended version [1] in: http://www.cs.cmu.edu/~rwh/papers/sharing/popl94.ps I kept looking for something like that, perhaps the most related concept is a small-C, for 8080 computers if we are able to match this two subsets something may come of it with C-- approach, again, the most simple of it may come in it: http://en.wikipedia.org/wiki/Small-C I guess a good combination of features of this calculus might give us a good sign of hope here [1] further work came to semidecidable type inference, it could be that some rework could make things smarter: http://www.cs.cmu.edu/~rwh/theses/lillibridge.pdf Thanks in advance [1] R. Harper and M. Lillibridge, ?A Type-Theoretic Approach to Higher-Order Modules with Sharing,? 1994. --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 12:08 > Hi all: > yes, this sounds very good, there is certainly and ability > developed for the Obliq (Abadi Cardelli) obejct calculus (a > subset which by itself, called **imp**?): > http://lucacardelli.name/Topics/TheoryOfObjects/Software.html > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false > > In last of the above it is referred in first of both of > them Obliq and Modula-3 mention **imp**? Chapter 10 and its > typ einference algorithm in [1] > > The actual approach to compile in an interpreted abstract > machine way is through a machien called ZINC (acronym for > Zync is not CAML), see: > > http://www.brics.dk/RS/98/55/ > > or the its previous version : > http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html > > They show the equivalent correspondence between source > and abstract machine using decompilation is small > steps. > > Both of their authors extend the Object calculus to an > concurrent one, see [3] in: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 > > as for I know the C-- FE is written in CAML, which is > interesting, and there is a type inference algorithm > implementation in Modula-3 of ML (Lazy ML via a Horn-logic > and intermediate representation see [2]) for yet another > language (graphical called cube, see [2] or a featured > article in Dr Dobb's journal, here: > > http://drdobbs.com/article/print?articleId=184409677&siteSectionName= > > thesis manuscript here: > http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf > > ) > > So this time I'm happy to be wrong, we can do indeed JIT > but we should measure the cost (as for type inference could > for **imp**? run O(n^3) and currently run O(n^5), it might > be necessary do decompiling plus naturally compiling and > forth inc ase of NetObj, etc > > Thanks in advance > > [1] T. Zhao, ?Type matching and type inference for > object-oriented systems,? Purdue University, 2002. > [2] M.-A. Najork, ?Programming in three dimensions,? > University of Illinois at Urbana-Champaign, 1994. > [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object > Calculus: Reduction and Typing,? 1998. > > > > > > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone > interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 08:23 > > On Mon, Jul 04, 2011 at 02:51:24AM > > +0100, Daniel Alejandro Benavides D. wrote: > > > Hi all: > > > it > > > would mean to compete in such a way in a super > > computer an alternative > > > to run without garbage collection (not unsafe > but > > ESC/Modula-3 RTError > > > and RTCollector disabled but for safe > automatically > > collected objects, > > > again if we are strictly speaking of a naive > > implementation algorithm, > > > if parallelization is allowed under recursive or > > nested paradigms we > > > are set to compete too but not absolutely). > > > I mean, given the effort > > > they took to run the compiler and tune it for > other > > languages and would > > > get same compiler effort plus ESC modelling to > subsume > > the collector > > > for perhaps dynamic scripting like say e.g Obliq, > we > > don't want to > > > compete with Obliq, but if we do I guess we > can't > > compile JIT > > > > JIT. > > > > This is a missing feature in Modula 3 -- it would > probably > > need to > > be implemented as a library, and it would be a huge > > implementatino > > project. It would involve writing -- or finding > -- > > code generators for > > many maching archtectures, and it would require > careful > > integratio with > > the garbage collector. Both the data structures > built > > by gennerated > > code and the generated code itself would have to be > > garbage-collectible. > > > > The JIT coder would have to accept relatively > low-level > > instructions and > > produce in-memory object code. Ideally, unless > you > > use the UNSAFE JIT, > > it would have to perform suitable static and run-time > > > checking on and in the code it's generating. > > > > People implementing currently interpreted languages > would > > have the > > option of calling this JIT coder instead. > > > > I've been tinkering from time to time with bits of > code in > > this > > direction, but it's a huge job. And, in my > opinion, > > LLVM doesn't really > > do this right. C-- comes a lot closer, but it > isn't a > > JIT. Maybe > > something like it could be? > > > > -- hendrik > > > From hendrik at topoi.pooq.com Tue Jul 5 02:06:22 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:06:22 -0400 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <20110705000622.GA31166@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:34:35AM +0200, Dragi?a Duri? wrote: > Thank you for a pointer and also for your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. Scheme is not a functional programming language. It's just a language in which it's easy to use a functional programming style should you so choose. I have very little use for a strictly functional language (in the usual sense of no-side-effects, no time-varying variables, etc.). -- hrndrik From hendrik at topoi.pooq.com Tue Jul 5 02:13:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:13:17 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> References: <20110704132326.GA24268@topoi.pooq.com> <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <20110705001317.GB31166@topoi.pooq.com> On Mon, Jul 04, 2011 at 06:08:54PM +0100, Daniel Alejandro Benavides D. wrote: > > So this time I'm happy to be wrong, we can do indeed JIT but we should > measure the cost (as for type inference could for **imp**? run O(n^3) > and currently run O(n^5), it might be necessary do decompiling plus > naturally compiling and forth inc ase of NetObj, etc O(n^3)? O(n^5)? If that's performance in practical situations, instead of just a class of theoretical examples it's not what we need for everyday use. I'd call it useless. It's defnietely not what I'm thinking of. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 02:16:55 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:16:55 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705001317.GB31166@topoi.pooq.com> Message-ID: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: I think yes, any other full bloated object oriented language has that floor, of course, you can help the compiler by giving some annotations, but for the theoretical results, this is what is proved to be truth. Thanks in advance --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 19:13 > On Mon, Jul 04, 2011 at 06:08:54PM > +0100, Daniel Alejandro Benavides D. wrote: > > > > So this time I'm happy to be wrong, we can do indeed > JIT but we should > > measure the cost (as for type inference could for > **imp**? run O(n^3) > > and currently run O(n^5), it might be necessary do > decompiling plus > > naturally compiling and forth inc ase of NetObj, etc > > O(n^3)? O(n^5)? If that's performance in practical > situations, instead > of just a class of theoretical examples it's not what we > need for > everyday use. I'd call it useless. It's > defnietely not what I'm > thinking of. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 02:31:12 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:31:12 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: In fact there is some reqwork to make things happen faster in Abadi-Cardelli: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. Thanks in advance --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 19:16 > Hi all: > I think yes, any other full bloated object oriented > language has that floor, of course, you can help the > compiler by giving some annotations, but for the theoretical > results, this is what is proved to be truth. > > Thanks in advance > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 19:13 > > On Mon, Jul 04, 2011 at 06:08:54PM > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > So this time I'm happy to be wrong, we can do > indeed > > JIT but we should > > > measure the cost (as for type inference could > for > > **imp**? run O(n^3) > > > and currently run O(n^5), it might be necessary > do > > decompiling plus > > > naturally compiling and forth inc ase of NetObj, > etc > > > > O(n^3)? O(n^5)? If that's performance in practical > > situations, instead > > of just a class of theoretical examples it's not what > we > > need for > > everyday use. I'd call it useless. It's > > defnietely not what I'm > > thinking of. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 15:30:39 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 14:30:39 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309872639.96891.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 16:06:47 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 10:06:47 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <20110705140647.GA9022@topoi.pooq.com> If understand correctly, these results are about figuring out what types the programmer meant if he failed to specify any. My view is that the programmer probably knew full well what he meant, and he might as well say so, in the interest of clarity if nothing else. I find programs with secret types to be incomprehensible, even while I'm writing them. And getting error messages if what I wrote doesn't match what I intended, and getting better run-time, well, those are wonderful consequences. -- hendrik On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > In fact there is some reqwork to make things happen faster in Abadi-Cardelli: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. > I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). > But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. > Thanks in advance > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, "Hendrik Boom" > > Fecha: lunes, 4 de julio, 2011 19:16 > > Hi all: > > I think yes, any other full bloated object oriented > > language has that floor, of course, you can help the > > compiler by giving some annotations, but for the theoretical > > results, this is what is proved to be truth. > > > > Thanks in advance > > > > --- El lun, 4/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > So this time I'm happy to be wrong, we can do > > indeed > > > JIT but we should > > > > measure the cost (as for type inference could > > for > > > **imp**? run O(n^3) > > > > and currently run O(n^5), it might be necessary > > do > > > decompiling plus > > > > naturally compiling and forth inc ase of NetObj, > > etc > > > > > > O(n^3)? O(n^5)? If that's performance in practical > > > situations, instead > > > of just a class of theoretical examples it's not what > > we > > > need for > > > everyday use. I'd call it useless. It's > > > defnietely not what I'm > > > thinking of. > > > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Tue Jul 5 16:44:32 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 15:44:32 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705140647.GA9022@topoi.pooq.com> Message-ID: <1309877072.55341.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: yes, that's the case, some call the natural problem in typing statically annotated languages, static type checking (which is resolved pretty much well, some may argue about this in generics but anyway...), if the problem is to determine what is the best compiler that can type check this language without type annotations but rather dynamically typed program (so, it might be reasonable your statement), nevertheless this problems arise in JIT dynamic typed part of the language, but as said a good compromise could be made for those cases, both in theoretical or transforming the problem to other domains such as constraint inferencing which requires several good heuristics, so it's a good point to investigate them. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 09:06 > If understand correctly, these > results are about figuring out what types > the programmer meant if he failed to specify any. My > view is that the > programmer probably knew full well what he meant, and he > might as well > say so, in the interest of clarity if nothing else. I > find programs > with secret types to be incomprehensible, even while I'm > writing them. > > And getting error messages if what I wrote doesn't match > what I > intended, and getting better run-time, well, those are > wonderful > consequences. > > -- hendrik > > On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro > Benavides D. wrote: > > Hi all: > > In fact there is some reqwork to make things happen > faster in Abadi-Cardelli: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > > > Never looked that paper, if I may say so, the approach > by Tian Zhao omitted it, but as for your worries, this could > make it work faster. > > I guess there should be some Turing awards waiting for > somebody who can run even lower, but this geniuses come > counted by the fingers of one hand, but you can't say this > is the end, that's for sure, but then there's even worse > situations if you add the self-object extension like for JS, > and this is a certainly an open problem (even that I tried > but for a good type theorist could be not that hard, as I > consider myself just a follower of them). > > But Abadi-Cardelli's work was a bit hit, and it's > quite practical in terms of research results I believe. Yet > this is not the last work in this are. > > Thanks in advance > > > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. > > escribi?: > > > > > De: Daniel Alejandro Benavides D. > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > > Fecha: lunes, 4 de julio, 2011 19:16 > > > Hi all: > > > I think yes, any other full bloated object > oriented > > > language has that floor, of course, you can help > the > > > compiler by giving some annotations, but for the > theoretical > > > results, this is what is proved to be truth. > > > > > > Thanks in advance > > > > > > --- El lun, 4/7/11, Hendrik Boom > > > escribi?: > > > > > > > De: Hendrik Boom > > > > Asunto: Re: [M3devel] JIT [WAS: Google > Benchmark - > > > anyone interested in an Modula 3 version?] > > > > Para: m3devel at elegosoft.com > > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > > > So this time I'm happy to be wrong, we > can do > > > indeed > > > > JIT but we should > > > > > measure the cost (as for type inference > could > > > for > > > > **imp**? run O(n^3) > > > > > and currently run O(n^5), it might be > necessary > > > do > > > > decompiling plus > > > > > naturally compiling and forth inc ase > of NetObj, > > > etc > > > > > > > > O(n^3)? O(n^5)? If that's performance in > practical > > > > situations, instead > > > > of just a class of theoretical examples it's > not what > > > we > > > > need for > > > > everyday use. I'd call it > useless. It's > > > > defnietely not what I'm > > > > thinking of. > > > > > > > > -- hendrik > > > > > > > > From dabenavidesd at yahoo.es Tue Jul 5 18:08:30 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:08:30 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309882110.36481.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Tue Jul 5 18:30:31 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:30:31 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309883431.49039.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: what if one don't understand that well, it must conquer first the valley than the high mountain, technically speaking, there are several other issues before coding. Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 11:16 other than stating what's "doable", have you "done" anything lately? On Tue, Jul 5, 2011 at 11:08 AM, Daniel Alejandro Benavides D. wrote: Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 18:50:41 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 12:50:41 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> Message-ID: <20110705165041.GA9653@topoi.pooq.com> On Tue, Jul 05, 2011 at 10:20:34AM -0500, felipe valdez wrote: > why let the computer do the inferencing work, if we can do the typing work! > > don't let the computer work for you! (1) computers aren't that fast yet. They can still use some help. (2) computers might infer the wrong types -- types that fit what we coded, but not what we meant. That said, there are rather simple type inference methods that require a lot less explicit typing than today's conventional strongly typed languages impose on us. Ideally, the computer should do about the same amount of type inferencing that a human reader would easily do when reading the program. Note that I said "reader", not "writer". -- hendrik > > > On Tue, Jul 5, 2011 at 9:06 AM, Hendrik Boom wrote: > > > If understand correctly, these results are about figuring out what types > > the programmer meant if he failed to specify any. My view is that the > > programmer probably knew full well what he meant, and he might as well > > say so, in the interest of clarity if nothing else. I find programs > > with secret types to be incomprehensible, even while I'm writing them. > > > > And getting error messages if what I wrote doesn't match what I > > intended, and getting better run-time, well, those are wonderful > > consequences. > > > > -- hendrik From hendrik at topoi.pooq.com Tue Jul 5 19:34:10 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 13:34:10 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> <20110705165041.GA9653@topoi.pooq.com> Message-ID: <20110705173410.GA12238@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:08:07PM -0500, felipe valdez wrote: > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > Ideally, the computer should do about the same amount of type > > inferencing that a human reader would easily do when reading > > the program. Note that I said "reader", not "writer". > > > > > but how far are we from this Ideal, really? > can these rules be automated? The hard part here is figuring out what human readers can do. It's important to match the human reader and not to go beyond his abilities. Because then the writer (who will probably understand his program bettr than a reader) will get feedback from his type-checker when the code gets too obscure for a reader. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 20:57:00 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 19:57:00 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705173410.GA12238@topoi.pooq.com> Message-ID: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: yes, in that domain yes, but in the many ways of solving a problem, computers have a rather limited extent, therefore you can't expect such facilities, but for things like automating algorithm comprehension, this is a task of algorithmic learning. A way of this ahs been proposed for a constraint language (e.g Juno),: http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA Well that said, the idea behind of this is how to optimize the program, but to define a good type system implementable is important too, is good to have many kernel for doing that. Abadi-Cardelli is a good one, but certainly not the only one, Abadi Baby Modula-3 is yet another one, I can't understand, it should be be in the Modula-3 research reports, or in the bibliography, I will see, how about that. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 12:34 > On Tue, Jul 05, 2011 at 12:08:07PM > -0500, felipe valdez wrote: > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > > > Ideally, the computer should do about the same > amount of type > > > inferencing that a human reader would easily do > when reading > > > the program. Note that I said "reader", not > "writer". > > > > > > > > but how far are we from this Ideal, really? > > can these rules be automated? > > The hard part here is figuring out what human readers can > do. It's > important to match the human reader and not to go beyond > his abilities. > Because then the writer (who will probably understand his > program bettr > than a reader) will get feedback from his type-checker when > the code > gets too obscure for a reader. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 21:10:15 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 20:10:15 +0100 (BST) Subject: [M3devel] general purpose C libraries (C Kernel) Message-ID: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I got this in my inbox, want to share it, sorry if feels like cross-posting, if so, tell me and I wouldn't mind to not share it: http://links.techwebnewsletters.com/servlet/MailView?ms=MzY3ODY2NzES1&r=MjIxNTU4ODA2MQS2&j=MTA1NTY3MDA4S0&mt=1&rt=0 Anyway, limited options is rather mundane word, I mean, Sun NeWS was very open and flexible, yest it was portable to Modula runtime, and certainly the Andrew Message System at CMU was jsut another example a kernel of C plus objects was able to be replaced by Modula-3. C-- comes handy to this limited portability tasks, I wonder why people don't use it. Maybe the same reason about Modula-3 too. Thanks in advance From dabenavidesd at yahoo.es Tue Jul 5 23:38:01 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:38:01 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Message-ID: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Hi all: I see now, the reason was explained by Luca Cardelli on his "recent" interview, they asked to come with something of practical use, yet they had pressure, to retrieve some good quality work of good practical results, that become the Theory of Objects (with Abadi, see [3]) on: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 But the theory on Baby Modula-3 was the idealization they had on Modula-3 typing system, unfortunately more work on that got that direction, towards the final years on the laboratory was somewhat cut, that explains why Larch project wasn't continued there after initial works (fortunately continued though Greg Nelson ESC work, which is by itself more practical). And yes, I believe this is path for a good structured at least terms comprehension of the language (I mean whenever I take foreign language, i.e English class i must study phonetics, semantics and grammar, well at least that's is what I was told by a former German language undergraduate student, specially grammar, which is for us specially hard, maybe be not the case for say you know, almost anyone else), so in this terms this is good to know for our future culprits, similarly we could argue for i.e us Computer scientists, the most valuable experience using Modula-3 was in Cambridge (and I have seen real good Modula-3 seminal work coming from there as well as other ones as well) Abadi and Cardelli and Matthes created a theory to create extensible syntax and use it in a DB realization of Modula-3: http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf I guess this could be the way to go, besides the seminal work in denotational (to express Modula-3 correctness in baby Modula-3) is available for free from its author: http://people.cis.ksu.edu/~schmidt/text/densem.html I believe we could make a point on this results preliminary but very important for us to depart from the rest of approaches, or at least have our own version (Baby Modula-3 is not BTW implemented as for what I know about, I wish could be proved to be correct, but I don't know neither, could be interpreted as it is, so I haven't seen it). That said, there is even more, some people went through the work or recapitulating the Theory of Objects in terms of denotational semantics http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf And a way to unify them based on recursive types, or say a way to treat programming language type back and forth (note I didn't say types if so, this is not the case), one of its authors wrote the most used book on "Types for Programming languages":, the former [2]: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 Perhaps this is the way an actual Baby Modula-3 implementation might become a good vehicle to explain programming language semantics (maybe not programming languages at all, just their semantics). If somebody agrees on that as Cardelli said to be this the next wave in his interview on Modula-3, let's bring it on www-baby.modula3.com for instance Let mew know your thoughts, thanks in advance [1] P. Robinson, ?From ML to C via Modula-3 an approach to teaching programming,? 1994. [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic Framework for Objects,? 1993. [3] M. Abadi and L. Cardelli, ?A Semantics of Object Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, p. 332--341, 1994. --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 13:57 > Hi all: > yes, in that domain yes, but in the many ways of solving a > problem, computers have a rather limited extent, therefore > you can't expect such facilities, but for things like > automating algorithm comprehension, this is a task of > algorithmic learning. > A way of this ahs been proposed for a constraint language > (e.g Juno),: > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > Well that said, the idea behind of this is how to optimize > the program, but to define a good type system implementable > is important too, is good to have many kernel for doing > that. Abadi-Cardelli is a good one, but certainly not the > only one, Abadi Baby Modula-3 is yet another one, I can't > understand, it should be be in the Modula-3 research > reports, or in the bibliography, I will see, how about > that. > > Thanks in advance > > --- El mar, 5/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: martes, 5 de julio, 2011 12:34 > > On Tue, Jul 05, 2011 at 12:08:07PM > > -0500, felipe valdez wrote: > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom > wrote: > > > > > > > Ideally, the computer should do about the > same > > amount of type > > > > inferencing that a human reader would easily > do > > when reading > > > > the program. Note that I said > "reader", not > > "writer". > > > > > > > > > > > but how far are we from this Ideal, really? > > > can these rules be automated? > > > > The hard part here is figuring out what human readers > can > > do. It's > > important to match the human reader and not to go > beyond > > his abilities. > > Because then the writer (who will probably understand > his > > program bettr > > than a reader) will get feedback from his type-checker > when > > the code > > gets too obscure for a reader. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 23:58:21 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:58:21 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Message-ID: <1309903101.50912.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: I mean in terms of Reactor Critical Mass, the core, hopefully safe well enough cool for the nextg wave in Programming (sorry, but I guess this is not a good comparison). Thanks in advance --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 16:38 > Hi all: > I see now, the reason was explained by Luca Cardelli on his > "recent" interview, they asked to come with something of > practical use, yet they had pressure, to retrieve some good > quality work of good practical results, that become the > Theory of Objects (with Abadi, see [3]) on: > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 > > But the theory on Baby Modula-3 was the idealization they > had on Modula-3 typing system, unfortunately more work on > that got that direction, towards the final years on the > laboratory was somewhat cut, that explains why Larch project > wasn't continued there after initial works (fortunately > continued though Greg Nelson ESC work, which is by itself > more practical). > And yes, I believe this is path for a good structured at > least terms comprehension of the language (I mean whenever I > take foreign language, i.e English class i must study > phonetics, semantics and grammar, well at least that's is > what I was told by a former German language undergraduate > student, specially grammar, which is for us specially hard, > maybe be not the case for say you know, almost anyone else), > so in this terms this is good to know for our future > culprits, similarly we could argue for i.e us Computer > scientists, the most valuable experience using Modula-3 was > in Cambridge (and I have seen real good Modula-3 seminal > work coming from there as well as other ones as well) > Abadi and Cardelli and Matthes created a theory to create > extensible syntax and use it in a DB realization of > Modula-3: > > http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf > > I guess this could be the way to go, besides the seminal > work in denotational (to express Modula-3 correctness in > baby Modula-3) is available for free from its author: > http://people.cis.ksu.edu/~schmidt/text/densem.html > > I believe we could make a point on this results preliminary > but very important for us to depart from the rest of > approaches, or at least have our own version (Baby Modula-3 > is not BTW implemented as for what I know about, I wish > could be proved to be correct, but I don't know neither, > could be interpreted as it is, so I haven't seen it). > > That said, there is even more, some people went through the > work or recapitulating the Theory of Objects in terms of > denotational semantics > > http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf > > And a way to unify them based on recursive types, or say a > way to treat programming language type back and forth (note > I didn't say types if so, this is not the case), one of its > authors wrote the most used book on "Types for Programming > languages":, the former [2]: > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 > > Perhaps this is the way an actual Baby Modula-3 > implementation might become a good vehicle to explain > programming language semantics (maybe not programming > languages at all, just their semantics). > If somebody agrees on that as Cardelli said to be this the > next wave in his interview on Modula-3, let's bring it on > www-baby.modula3.com for instance > > Let mew know your thoughts, thanks in advance > > [1] P. Robinson, ?From ML to C via Modula-3 an approach > to teaching programming,? 1994. > > [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic > Framework for Objects,? 1993. > > [3] M. Abadi and L. Cardelli, ?A Semantics of Object > Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, > p. 332--341, 1994. > > > --- El mar, 5/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: martes, 5 de julio, 2011 13:57 > > Hi all: > > yes, in that domain yes, but in the many ways of > solving a > > problem, computers have a rather limited extent, > therefore > > you can't expect such facilities, but for things like > > automating algorithm comprehension, this is a task of > > algorithmic learning. > > A way of this ahs been proposed for a constraint > language > > (e.g Juno),: > > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > > > Well that said, the idea behind of this is how to > optimize > > the program, but to define a good type system > implementable > > is important too, is good to have many kernel for > doing > > that. Abadi-Cardelli is a good one, but certainly not > the > > only one, Abadi Baby Modula-3 is yet another one, I > can't > > understand, it should be be in the Modula-3 research > > reports, or in the bibliography, I will see, how > about > > that. > > > > Thanks in advance > > > > --- El mar, 5/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: martes, 5 de julio, 2011 12:34 > > > On Tue, Jul 05, 2011 at 12:08:07PM > > > -0500, felipe valdez wrote: > > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik > Boom > > wrote: > > > > > > > > > Ideally, the computer should do about > the > > same > > > amount of type > > > > > inferencing that a human reader would > easily > > do > > > when reading > > > > > the program. Note that I said > > "reader", not > > > "writer". > > > > > > > > > > > > > > but how far are we from this Ideal, really? > > > > can these rules be automated? > > > > > > The hard part here is figuring out what human > readers > > can > > > do. It's > > > important to match the human reader and not to > go > > beyond > > > his abilities. > > > Because then the writer (who will probably > understand > > his > > > program bettr > > > than a reader) will get feedback from his > type-checker > > when > > > the code > > > gets too obscure for a reader. > > > > > > -- hendrik > > > > > > From hendrik at topoi.pooq.com Wed Jul 6 03:53:43 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 21:53:43 -0400 Subject: [M3devel] general purpose C libraries (C Kernel) In-Reply-To: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Message-ID: <20110706015343.GA29079@topoi.pooq.com> On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > C-- comes handy to this limited portability tasks, I wonder why people > don't use it. Maybe the same reason about Modula-3 too. Perhaps because as far as I know the only code generator for C-- generates 32-bit Intel code. That doesn't provide much in the way of portability. There's rumours of other code genrators, but I haven't seen them yet. Well, there is a portable byte-code interpreter written in C, but that's very specifically not the point of C--. -- hendrik From hosking at cs.purdue.edu Wed Jul 6 15:47:35 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Wed, 6 Jul 2011 09:47:35 -0400 Subject: [M3devel] concurrency In-Reply-To: <20110704133917.GA24338@topoi.pooq.com> References: <20110704133917.GA24338@topoi.pooq.com> Message-ID: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > There was a lot of discussion on problems with concurrency when we wen > to pthreads implementation so that we could make use of multiple CPUs. > After a while disuccion sttopped. > > Have these problems all been resolved yet? There are issues that have been reported but which I've not had time to explore. Too busy trying to finish my book on GC. I hope to have time to work on things soon. > If I recall correctly, there was a problem with one program, cvsup, > using fork as well as threads. This worked with green threads, but not > with pthreads. Has cvsup been rehabilitated in some way? cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. > How do pthreads interact with the garbage collector? Or are there > several garbage collectors with different interaction modalities? The current garbage collector expects to be able to stop all the threads in order to *initiate* a garbage collection by scanning their stacks. Unfortunately, getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). [This shortcoming is a problem also for the Boehm collector for C/C++.] In CM3 the same garbage collector is used whether for pthreads or user threads. The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. To handle calls to external code not generated by the M3 compiler we would also need to have a thread atomically post the fact that it is in external code on entry and un-post that fact on return (i.e., at calls to <*EXTERNAL*>). To make that synchronization efficient we need to use CAS or LL/SC atomicity primitives (rather than relying on pthread_mutex calls). I still need to fix all the atomics support in CM3 to be able to do that properly. So, my list of TODOs includes: 1) Explore (and perhaps fix) reported issues with the current pthreads implementation [short-term] 2) Commit fixes to CM3 support for atomics [medium-term] 3) Switch CM3 threads over to cooperative explicit suspension rather than signal-based suspension [long-term] From dabenavidesd at yahoo.es Wed Jul 6 17:03:09 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 16:03:09 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: I would go for the lower over head in Modula-3 lite implementations as legacy systems: http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html Currently the only thing replacement of CVSup is not ahead of it, in the server side which is precisely the point of rewriting it (Modula-3 big footprint and complexity), as for that I know, there could be some improvement over it but the needed changes to the server could diminish the advantage. The only thing they don't like of CVSup is the disk usage overhead, but this is something inherent to the application if I may say so, even more, if development were continued perhaps dcvs could a way to address somehow that (given the client replacement doesn't affect the project too much). But current support for them is wacky AFAIK pm3 is broken, so this is a plus over it, and a plus in cm3 against java but not C. http://forums.pcbsd.org/archive/index.php/t-3416.html Anyways, there should be some application to rescue from their repositories so they keep it alive (shouldn't we?): http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics Thanks in advance --- El mi?, 6/7/11, Tony Hosking escribi?: > De: Tony Hosking > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > There was a lot of discussion on problems with > concurrency when we wen > > to pthreads implementation so that we could make use > of multiple CPUs. > > After a while disuccion sttopped. > > > > Have these problems all been resolved yet? > > There are issues that have been reported but which I've not > had time to explore. > Too busy trying to finish my book on GC. I hope to > have time to work on things soon. > > > If I recall correctly, there was a problem with one > program, cvsup, > > using fork as well as threads. This worked with > green threads, but not > > with pthreads. Has cvsup been rehabilitated in > some way? > > cvsup is badly behaved with respect to POSIX semantics for > fork and threads. It still needs to be fixed rather > than making M3 threads support its bad behavior. > > > How do pthreads interact with the garbage > collector? Or are there > > several garbage collectors with different interaction > modalities? > > The current garbage collector expects to be able to stop > all the threads in order to *initiate* a garbage collection > by scanning their stacks. Unfortunately, getting > pthreads to stop reliably is difficult on some operating > systems (BSD derivatives appear to be bad at this, but > Windows, Linux and OSX seem to function well enough). > [This shortcoming is a problem also for the Boehm collector > for C/C++.] In CM3 the same garbage collector is used > whether for pthreads or user threads. > > The best way to get M3 threads to play nicely on all OS > would be to avoid thread stopping mechanisms that expect > cooperation from the OS and simply to use explicit polling > inserted by the compiler at calls and backward branches to > decide if the thread should suspend itself. To handle > calls to external code not generated by the M3 compiler we > would also need to have a thread atomically post the fact > that it is in external code on entry and un-post that fact > on return (i.e., at calls to <*EXTERNAL*>). To > make that synchronization efficient we need to use CAS or > LL/SC atomicity primitives (rather than relying on > pthread_mutex calls). I still need to fix all the > atomics support in CM3 to be able to do that properly. > > So, my list of TODOs includes: > > 1) Explore (and perhaps fix) reported issues with the > current pthreads implementation [short-term] > 2) Commit fixes to CM3 support for atomics [medium-term] > 3) Switch CM3 threads over to cooperative explicit > suspension rather than signal-based suspension [long-term] > > > From dabenavidesd at yahoo.es Wed Jul 6 18:14:59 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 17:14:59 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Message-ID: <1309968899.43958.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: In fact Archlinux use it too: https://bbs.archlinux.org/viewtopic.php?id=655 This a good example of their use, in fact there NPTL server and client, I can run it in my system (ubuntu804 hardy x86): http://www2.cddc.vt.edu/linux/distributions/archlinux/other/cvsup/ Interesting I can't do it ldd, but can run its CLI. Thanks in advance --- El mi?, 6/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" , "Tony Hosking" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 10:03 > Hi all: > I would go for the lower over head in Modula-3 lite > implementations as legacy systems: > http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html > > Currently the only thing replacement of CVSup is not ahead > of it, in the server side which is precisely the point of > rewriting it (Modula-3 big footprint and complexity), as for > that I know, there could be some improvement over it but the > needed changes to the server could diminish the advantage. > > The only thing they don't like of CVSup is the disk usage > overhead, but this is something inherent to the > application if I may say so, even more, if development were > continued perhaps dcvs could a way to address somehow that > (given the client replacement doesn't affect the project too > much). > But current support for them is wacky AFAIK pm3 is broken, > so this is a plus over it, and a plus in cm3 against java > but not C. > > http://forums.pcbsd.org/archive/index.php/t-3416.html > > Anyways, there should be some application to rescue from > their repositories so they keep it alive (shouldn't we?): > http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics > > Thanks in advance > > --- El mi?, 6/7/11, Tony Hosking > escribi?: > > > De: Tony Hosking > > Asunto: Re: [M3devel] concurrency > > Para: "Hendrik Boom" > > CC: m3devel at elegosoft.com > > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > > > There was a lot of discussion on problems with > > concurrency when we wen > > > to pthreads implementation so that we could make > use > > of multiple CPUs. > > > After a while disuccion sttopped. > > > > > > Have these problems all been resolved yet? > > > > There are issues that have been reported but which > I've not > > had time to explore. > > Too busy trying to finish my book on GC. I hope > to > > have time to work on things soon. > > > > > If I recall correctly, there was a problem with > one > > program, cvsup, > > > using fork as well as threads. This worked > with > > green threads, but not > > > with pthreads. Has cvsup been rehabilitated > in > > some way? > > > > cvsup is badly behaved with respect to POSIX semantics > for > > fork and threads. It still needs to be fixed > rather > > than making M3 threads support its bad behavior. > > > > > How do pthreads interact with the garbage > > collector? Or are there > > > several garbage collectors with different > interaction > > modalities? > > > > The current garbage collector expects to be able to > stop > > all the threads in order to *initiate* a garbage > collection > > by scanning their stacks. Unfortunately, > getting > > pthreads to stop reliably is difficult on some > operating > > systems (BSD derivatives appear to be bad at this, > but > > Windows, Linux and OSX seem to function well enough). > > > [This shortcoming is a problem also for the Boehm > collector > > for C/C++.] In CM3 the same garbage collector is > used > > whether for pthreads or user threads. > > > > The best way to get M3 threads to play nicely on all > OS > > would be to avoid thread stopping mechanisms that > expect > > cooperation from the OS and simply to use explicit > polling > > inserted by the compiler at calls and backward > branches to > > decide if the thread should suspend itself. To > handle > > calls to external code not generated by the M3 > compiler we > > would also need to have a thread atomically post the > fact > > that it is in external code on entry and un-post that > fact > > on return (i.e., at calls to > <*EXTERNAL*>). To > > make that synchronization efficient we need to use CAS > or > > LL/SC atomicity primitives (rather than relying on > > pthread_mutex calls). I still need to fix all > the > > atomics support in CM3 to be able to do that > properly. > > > > So, my list of TODOs includes: > > > > 1) Explore (and perhaps fix) reported issues with the > > current pthreads implementation [short-term] > > 2) Commit fixes to CM3 support for atomics > [medium-term] > > 3) Switch CM3 threads over to cooperative explicit > > suspension rather than signal-based suspension > [long-term] > > > > > > > From jay.krell at cornell.edu Wed Jul 6 18:47:26 2011 From: jay.krell at cornell.edu (Jay K) Date: Wed, 6 Jul 2011 16:47:26 +0000 Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> References: <20110704133917.GA24338@topoi.pooq.com>, <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: > cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. For which "threads"? It doesn't use pthreads directly. Where are the Modula-3 threads + fork semantics spelled out? I suspect nowhere. > getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). I'm nervous about SuspendThread + GetThreadContext esp. on Win32-on-Win64. - I don't understand how in general preemtive thread suspension can/does work on any multi-processor system, not just Windows. - This lots of online discussion about GetThreadContext not returning what code expects. > The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and > simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. I like this, as it would remove a fair amount of target-specific code. - Jay -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Wed Jul 6 22:53:31 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Wed, 6 Jul 2011 16:53:31 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706015343.GA29079@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> Message-ID: <20110706205331.GA14289@topoi.pooq.com> On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > C-- comes handy to this limited portability tasks, I wonder why people > > don't use it. Maybe the same reason about Modula-3 too. > > Perhaps because as far as I know the only code generator for C-- > generates 32-bit Intel code. That doesn't provide much in the way of > portability. > > There's rumours of other code genrators, but I haven't seen them yet. Here's some info from the C-- site: Other C-- compilers : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. -- http://www.cminusminus.org/code.html Note that none of these are the rumoured ones I mentioned. But that same web page mentions a system called OCamlBurg, which seems to be a parser generator that parses trees instead of strings. It can be used for instruction selection in a code generator. Maybe it's time I looked into it. -- hendrik > > Well, there is a portable byte-code interpreter written in C, but > that's very specifically not the point of C--. > > -- hendrik From hendrik at topoi.pooq.com Fri Jul 8 22:16:34 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Fri, 8 Jul 2011 16:16:34 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706205331.GA14289@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> <20110706205331.GA14289@topoi.pooq.com> Message-ID: <20110708201634.GB23370@topoi.pooq.com> On Wed, Jul 06, 2011 at 04:53:31PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > > C-- comes handy to this limited portability tasks, I wonder why people > > > don't use it. Maybe the same reason about Modula-3 too. > > > > Perhaps because as far as I know the only code generator for C-- > > generates 32-bit Intel code. That doesn't provide much in the way of > > portability. Looking at the current source code for qc--, there appear to be filenames for code genreators for the alpha, sparc, ia64, mips, x86. How many of these are in working order I don't know. There seem to be subdirecotries of a test2 directory called ppc, sparc, x86. These are recognisable processor names, so maybe there's hope for some of these. I know the x86 works; I'm using it. Maybe I should look into ia64 sometime. Things might possibly not be as dismal as I thought. > > > > There's rumours of other code genrators, but I haven't seen them yet. > > Here's some info from the C-- site: > > Other C-- compilers > > : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. > > : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. > > : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. > > -- http://www.cminusminus.org/code.html > > Note that none of these are the rumoured ones I mentioned. But > that same web page mentions a system called OCamlBurg, which > seems to be a parser generator that parses trees instead of > strings. It can be used for instruction selection in a code > generator. Maybe it's time I looked into it. > > -- hendrik > > > > > Well, there is a portable byte-code interpreter written in C, but > > that's very specifically not the point of C--. > > > > -- hendrik -- hendrik From kcdurocher at gmail.com Sat Jul 9 04:44:24 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 8 Jul 2011 21:44:24 -0500 Subject: [M3devel] Rd.GetText Question Message-ID: The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? The interface for Rd states this for Rd.Length(): "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? Thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Sat Jul 9 18:57:49 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sat, 9 Jul 2011 12:57:49 -0400 Subject: [M3devel] Rd.GetText Question In-Reply-To: References: Message-ID: Hmm. GetText(rd, Rd.Length(rd)) will fail with a run-time error if Length returns -1 because -1 is not a CARDINAL. I don't think this is generally a safe idiom. On Jul 8, 2011, at 10:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? > > Thanks. From rodney_bates at lcwb.coop Sun Jul 10 15:32:52 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sun, 10 Jul 2011 08:32:52 -0500 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] Message-ID: <4E19AA04.1060207@lcwb.coop> On 07/05/2011 09:06 AM, Hendrik Boom wrote: > If understand correctly, these results are about figuring out what types > the programmer meant if he failed to specify any. My view is that the > programmer probably knew full well what he meant, and he might as well > say so, in the interest of clarity if nothing else. I find programs > with secret types to be incomprehensible, even while I'm writing them. > > And getting error messages if what I wrote doesn't match what I > intended, and getting better run-time, well, those are wonderful > consequences. > > -- hendrik > Yes, well said! Here is a section of a draft of an article I have been working on, regarding why I think systematic dynamic typing in programming languages is, for everyday programming, a really bad idea. It's just one of several arguments. ------------------------------------------------------------------------ 1) Dynamic typing is seldom either needed or used. The majority of variables (1) in sensible programs are what I call _algorithmically statically typed_. By this, I mean, informally, that there is a natural type for the variable that can be inferred from its assignments and uses. Moreover, this is a static property, i.e., independent of the program's inputs, and thus can be inferred from the code alone. Slightly more formally, it means that either assignments or uses of values that are not members of this type represent buggy behavior, or at best are pathological coding and irrelevant to correct behavior. In practice, this almost always means such assignments don't belong, and such uses will result in immediate crashes. There are a lot of pathological cases that would belie my claim, but very few that represent either correct and useful program behavior or sensible coding style. For more elaborate discussion of some such cases and even where they might occasionally be useful, see (I). This concept applies to object-oriented programming. The algorithmic static type of a variable is just a common supertype of the types the variable could take on. This needs to be high enough in the class hierarchy to encompass all the useful values, but not so high that it includes anything lacking a method that could be invoked on the variable. Rarely will this be the most-general type in the language. In a statically typed language, the programmer will declare the variable with a type equal to its algorithmic static type. I call this the variable's _linguistic static type_. Otherwise, a compile error will almost always result. In a dynamically typed language, nothing in the code gives the type explicitly, yet it is nevertheless a static property that is vital to a reader's understanding. Often, it will be hard work for a reader to infer. ------------------------------------------------------------------------ Rodney Bates From dabenavidesd at yahoo.es Sun Jul 10 19:27:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sun, 10 Jul 2011 18:27:24 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> Message-ID: <1310318844.47353.YahooMailClassic@web29710.mail.ird.yahoo.com> Hi all: I think you are correct, the semantics model of statically typed languages make them better for production code, but for the development, is up to the developer to be able to specify them clearly succinctly (such as by intention) or write them as a part of the program, in case a machine does infer them automatically it doesn't mean you won't run them untyped, since it has a typed representation, still it's untyped language, clearly the correct semantics are driven as you say algorithmically, which can be a onerous time you wouldn't want to pay for that only. As I said and from the context the problem is time (whether development, algorithm complexity), but for independent style point of view, you want to leave the most complicated parts not for the beginning or the last step in the development, just make it work for any idealization of work (like was Baby Modula-3), still may be interpreted and be too onerous, but in machine terms be a implementable option (i.e teaching programming), thus you can argue the time dependent feature is always something you may leave up also to the programmer. If you why I would pick such a language for teaching I would ask your learner why would he take the time to lead the system towards what you want, instead of what he wants to leave out as a programmer related task, the typing framework you may want to apply to solve a particular problem. In that sense there is obviously a need for the programmer to develop such quick constructs or to renounce them (type checking could be potentially semi definable or semi decidable) which leads to more restrictions than assumptions, which is bad in my ideal again independent point of view but good in legal time. So what to do, good question, towards that, I mean there shouldbe a typeful programming without ill-types burden and without the price of it. Modula-3 is closer to that little performance burden but still some price to pay, that's why Baby Modula-3 idea came from I believe, little burden in compile time, little price to pay. Such an idealization requires good work towards implementing Baby Modula-3+ 0,1,2, etc the type system to evolve from that idea to an actual implementation, many parted from there as departed too, but still the typing frameworks unrelated to them are too provocative for the simple point of view, what it remains to do though is to make the Baby Modula-3 be trustful for the typeful programming but in practical terms and economical terms a reality, again first TODO there would be give equational reasoning semantics for Baby Modula-3 in a subset of it or two growing it in the better fashion to be abstracted of such, to be able to define such sublanguage in terms of the decidable framework. Give some semantics for Modula-3 that define the exact solution to that problem and yet it could be hard to prove your systems is sound or safe and implementable (can't wait for this work to be done, but still how much it takes to be done and to be able to be doable in terms long compile time even harder), thus I can't see what is wrong with the typed or untyped Universe as soon there is such direct relation I don't see anything **wrong** here in doing so. To state this in better working implementation, there are two possibilities to either choose the best you can perform, or choose the best can be done. I prefer the later since it would mean you can type programs even beyond your expectations rapidly, which is to say somehow, your typing universe is infinite, rather than somehow a perspective could say is too restrictive (I'm not saying that of course, if I may say so). In that words, the best of both worlds, the unrealizable and the implementable. This is hard to say, we have Baby Modula-3, we would have such a growing kernel to type better anything else in this and even beyond the language (as SRC-RR-95 is about) If I may say so, the work done by Cardelly in Fsub was to perform the logical deduction of such rules in accordance to such semantics of an implementation of Modula-3, I believe one could say baby Modula-3, see: http://lucacardelli.name/Artifacts/Drawings/FSub/FSubCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/DynamicTypecheck/DynamicCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/Typing/TypingCartoon.pdf If anyone wants to think more absurdly there are no proves that somebody cares that, or just think that's something undone, but not unrealizable, which is the proof we might want to solve: http://books.google.com/books?id=vJBQX7V8O3sC&lpg=RA1-PA158&ots=1ZJvSIsaeR&dq=fsub%20cardelli&pg=RA1-PA157#v=onepage&q&f=false Absurd doesn't mean unrealizable of course, just that it is undone. (I don't know but whose would call that honest programming, perhaps would ask Dr Greg Nelson) which is by itself a gift of God of the computer typing tasks I believe (not that I compared with Juno, but related better). Thanks in advance --- El dom, 10/7/11, Rodney M. Bates escribi?: > De: Rodney M. Bates > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: "m3devel" > Fecha: domingo, 10 de julio, 2011 08:32 > > On 07/05/2011 09:06 AM, Hendrik Boom wrote: > > If understand correctly, these results are about > figuring out what types > > the programmer meant if he failed to specify > any. My view is that the > > programmer probably knew full well what he meant, and > he might as well > > say so, in the interest of clarity if nothing > else. I find programs > > with secret types to be incomprehensible, even while > I'm writing them. > > > > And getting error messages if what I wrote doesn't > match what I > > intended, and getting better run-time, well, those are > wonderful > > consequences. > > > > -- hendrik > > > > Yes, well said! > > Here is a section of a draft of an article I have been > working on, regarding > why I think systematic dynamic typing in programming > languages is, for everyday > programming, a really bad idea. It's just one of > several arguments. > > ------------------------------------------------------------------------ > > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what > I call > _algorithmically statically typed_. By this, I mean, > informally, that > there is a natural type for the variable that can be > inferred from its > assignments and uses. Moreover, this is a static > property, i.e., > independent of the program's inputs, and thus can be > inferred from the > code alone. > > Slightly more formally, it means that either assignments or > uses of > values that are not members of this type represent buggy > behavior, or > at best are pathological coding and irrelevant to correct > behavior. > In practice, this almost always means such assignments > don't belong, > and such uses will result in immediate crashes. > > There are a lot of pathological cases that would belie my > claim, but > very few that represent either correct and useful program > behavior or > sensible coding style. For more elaborate discussion > of some such > cases and even where they might occasionally be useful, see > (I). > > This concept applies to object-oriented programming. > The algorithmic > static type of a variable is just a common supertype of the > types the > variable could take on. This needs to be high enough > in the class > hierarchy to encompass all the useful values, but not so > high that it > includes anything lacking a method that could be invoked on > the > variable. Rarely will this be the most-general type > in the language. > > In a statically typed language, the programmer will declare > the > variable with a type equal to its algorithmic static > type. I call > this the variable's _linguistic static type_. > Otherwise, a compile > error will almost always result. In a dynamically > typed language, > nothing in the code gives the type explicitly, yet it is > nevertheless > a static property that is vital to a reader's > understanding. Often, > it will be hard work for a reader to infer. > > ------------------------------------------------------------------------ > > Rodney Bates > From dabenavidesd at yahoo.es Tue Jul 12 00:13:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 11 Jul 2011 23:13:08 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110708201634.GB23370@topoi.pooq.com> Message-ID: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: perhaps somehow unrelated of the topic but anyway, there is a JIT compiler interpreter for for C, a subset and superset of it. It's based also in lcc front end, using BURS an have apparently good timings (I guess there is one of those C-- based on lcc as well to generate C, is that true?), see: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 There was also in DEC-SRC a ML, and Lisp implementations with Modula-2+ RT, there is one technical report (I can't find the reference anymore, later), and there is some material back from 1980s http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 http://mumble.net/~jar/tproject/ There should be copies of those reports for anyone of us I believe (Paul McJones is very helpful there, last time I wrote him he answered fast): http://www.softwarepreservation.org/projects/LISP/embedded/ In case it matters the probably best thing would be to compile JIT everything in Abadi-Cardelli calculus ZINC based machine, then compile it to M3CG (see first paragraph and previous web pages) to C-- to C and using the mentioned compiler run the code, I suppose M3CG has RT support doesn't it? I have one target of the C generated code, pretty open and compatible: http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML I have seen there at DEC worked hard to have good compiler infrastructure, the Vesta and Vulcan Development Environment bridge are pretty big pieces of work,, from the above the most interesting for a possible Baby Modula-3 compiler/interpreter is: http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz Maybe this is enough to build one of such if there is value (maybe it is with dynamic linker/optimizer mlcc and mld, a Modula-3 linker would help this much too, I'm not aware of one in existence, just http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html Which is a very similar so stack representation, compiler, interpreter, debugger, linker) Thanks in advance --- El vie, 8/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com > Fecha: viernes, 8 de julio, 2011 15:16 > On Wed, Jul 06, 2011 at 04:53:31PM > -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom > wrote: > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel > Alejandro Benavides D. wrote: > > > > C-- comes handy to this limited portability > tasks, I wonder why people > > > > don't use it. Maybe the same reason about > Modula-3 too. > > > > > > Perhaps because as far as I know the only code > generator for C-- > > > generates 32-bit Intel code. That doesn't > provide much in the way of > > > portability. > > Looking at the current source code for qc--, there appear > to be > filenames for code genreators for the alpha, sparc, ia64, > mips, x86. > How many of these are in working order I don't > know. There seem to be > subdirecotries of a test2 directory called ppc, sparc, > x86. These are > recognisable processor names, so maybe there's hope for > some of these. > I know the x86 works; I'm using it. Maybe I should > look into ia64 > sometime. > > Things might possibly not be as dismal as I thought. > > > > > > > There's rumours of other code genrators, but I > haven't seen them yet. > > > > Here's some info from the C-- site: > > > > Other C-- compilers > > > > : Fermin Reig's cmmc is implemented in Standard ML on > top of the MLRISC code generator. It emits assembly code for > the Alpha, Sparc, and X86. It implements an obsolete version > of C-- and is no longer maintained. > > > > : The Trampoline C-- Compiler by Sergei Egorov, which > seems to have disappeared from the Web. The Trampoline C-- > compiler implements the obsolete May, 1999 specification and > compiles to C. The author says: it is slow, requires too > much memory, and generates slow C code. But, from the other > hand, it implements almost all of original C-- specification > (including runtime interface), the generated code is > readable, portable, and hopefully correct. > > > > : The Oregon C-- compiler was the first prototype > implementation of C--, also on top of MLRISC. It has been > honorably retired. > > > > -- http://www.cminusminus.org/code.html > > > > Note that none of these are the rumoured ones I > mentioned. But > > that same web page mentions a system called OCamlBurg, > which > > seems to be a parser generator that parses trees > instead of > > strings. It can be used for instruction > selection in a code > > generator. Maybe it's time I looked into it. > > > > -- hendrik > > > > > > > > Well, there is a portable byte-code interpreter > written in C, but > > > that's very specifically not the point of C--. > > > > > > -- hendrik > > -- hendrik > > From dabenavidesd at yahoo.es Wed Jul 13 16:01:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 15:01:36 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Message-ID: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Actually looking more carefully found an actual Gnu C implementation of Obliq (a calculus for it called 0jeblik/IAM, initials for In A Moment): http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf Also the specialty of the language developed further work: http://www.cs.aau.dk/~kleist/Research/reasoning.pdf Also amazingly we would have besides dead-lock free (ESC/Modula-3) and lock free and race conditions free programs using abstract interpretation: This is serious implemented work and well designed I believe, I think we can create a genealogy of ?-calculus for everything we want in Modula-3 too: An actor dedicated process calculus: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 The abstract interpretation for it: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf And for yet another actor calculus of Aspect-oriented programming: Besides that, there are formalization of ?-calculus in Coq: http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf And Isabelle/HOL (see last link in the current message) And the abstract interpretation of it: http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf And even more, the Abadi-Cardelli abstract machine revisited recently: http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf And aspect Oriented programming: http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf I hope this devise some more hard work in Modula-3 (and Obliq too). Thanks in advance --- El lun, 11/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 11 de julio, 2011 17:13 > Hi all: > perhaps somehow unrelated of the topic but anyway, there is > a JIT compiler interpreter for for C, a subset and superset > of it. It's based also in lcc front end, using BURS an have > apparently good timings (I guess there is one of those C-- > based on lcc as well to generate C, is that true?), see: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > There was also in DEC-SRC a ML, and Lisp implementations > with Modula-2+ RT, there is one technical report (I can't > find the reference anymore, later), and there is some > material back from 1980s > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > http://mumble.net/~jar/tproject/ > > There should be copies of those reports for anyone of us I > believe (Paul McJones is very helpful there, last time I > wrote him he answered fast): > http://www.softwarepreservation.org/projects/LISP/embedded/ > > In case it matters the probably best thing would be to > compile JIT everything in Abadi-Cardelli calculus ZINC based > machine, then compile it to M3CG (see first paragraph and > previous web pages) to C-- to C and using the mentioned > compiler run the code, I suppose M3CG has RT support doesn't > it? I have one target of the C generated code, pretty open > and compatible: > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > I have seen there at DEC worked hard to have good compiler > infrastructure, the Vesta and Vulcan Development Environment > bridge are pretty big pieces of work,, from the above the > most interesting for a possible Baby Modula-3 > compiler/interpreter is: > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > Maybe this is enough to build one of such if there is value > (maybe it is with dynamic linker/optimizer mlcc and mld, a > Modula-3 linker would help this much too, I'm not aware of > one in existence, just > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > Which is a very similar so stack representation, compiler, > interpreter, debugger, linker) > > Thanks in advance > > --- El vie, 8/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com > > Fecha: viernes, 8 de julio, 2011 15:16 > > On Wed, Jul 06, 2011 at 04:53:31PM > > -0400, Hendrik Boom wrote: > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik > Boom > > wrote: > > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, > Daniel > > Alejandro Benavides D. wrote: > > > > > C-- comes handy to this limited > portability > > tasks, I wonder why people > > > > > don't use it. Maybe the same reason > about > > Modula-3 too. > > > > > > > > Perhaps because as far as I know the only > code > > generator for C-- > > > > generates 32-bit Intel code. That > doesn't > > provide much in the way of > > > > portability. > > > > Looking at the current source code for qc--, there > appear > > to be > > filenames for code genreators for the alpha, sparc, > ia64, > > mips, x86. > > How many of these are in working order I don't > > know. There seem to be > > subdirecotries of a test2 directory called ppc, > sparc, > > x86. These are > > recognisable processor names, so maybe there's hope > for > > some of these. > > I know the x86 works; I'm using it. Maybe I > should > > look into ia64 > > sometime. > > > > Things might possibly not be as dismal as I thought. > > > > > > > > > > There's rumours of other code genrators, but > I > > haven't seen them yet. > > > > > > Here's some info from the C-- site: > > > > > > Other C-- compilers > > > > > > : Fermin Reig's cmmc is implemented in Standard > ML on > > top of the MLRISC code generator. It emits assembly > code for > > the Alpha, Sparc, and X86. It implements an obsolete > version > > of C-- and is no longer maintained. > > > > > > : The Trampoline C-- Compiler by Sergei Egorov, > which > > seems to have disappeared from the Web. The Trampoline > C-- > > compiler implements the obsolete May, 1999 > specification and > > compiles to C. The author says: it is slow, requires > too > > much memory, and generates slow C code. But, from the > other > > hand, it implements almost all of original C-- > specification > > (including runtime interface), the generated code is > > readable, portable, and hopefully correct. > > > > > > : The Oregon C-- compiler was the first > prototype > > implementation of C--, also on top of MLRISC. It has > been > > honorably retired. > > > > > > -- http://www.cminusminus.org/code.html > > > > > > Note that none of these are the rumoured ones I > > mentioned. But > > > that same web page mentions a system called > OCamlBurg, > > which > > > seems to be a parser generator that parses trees > > instead of > > > strings. It can be used for instruction > > selection in a code > > > generator. Maybe it's time I looked into > it. > > > > > > -- hendrik > > > > > > > > > > > Well, there is a portable byte-code > interpreter > > written in C, but > > > > that's very specifically not the point of > C--. > > > > > > > > -- hendrik > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Wed Jul 13 17:42:58 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 16:42:58 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Message-ID: <1310571778.12594.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: I apologize because of I forgot the third link of abstract interpretation: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf I suppose this is enough for an ESC in Obliq or network objects wide, somebody recall the network objects RT errors. Can anyone (they also developed the abstract machine for it): http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf And yet another ?-calculus for containment: http://people.cs.kuleuven.be/~dave.clarke/papers/thesis.ps.gz And eventually to som point the same for baby/Modula-3.: http://basics.sjtu.edu.cn/~yuehg/CONCUR/A%20calculus%20for%20concurrent%20objects%2096.pdf And abstract machines for distributed object calculus too: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.96.8767 Besides there are already some effect of Baby Modula-3 in the time has passed with BabyJ, similar but for the JavaScript type inference part. It is a generalization of Baby Modula-3 http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3910 It has an implementation based on Rhino. Thanks in advance --- El mi?, 13/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: mi?rcoles, 13 de julio, 2011 09:01 > Hi all: > Actually looking more carefully found an actual Gnu C > implementation of Obliq (a calculus for it called > 0jeblik/IAM, initials for In A Moment): > http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf > > Also the specialty of the language developed further work: > > http://www.cs.aau.dk/~kleist/Research/reasoning.pdf > > Also amazingly we would have besides dead-lock free > (ESC/Modula-3) and lock free and race conditions free > programs using abstract interpretation: > > This is serious implemented work and well designed I > believe, I think we can create a genealogy of ?-calculus > for everything we want in Modula-3 too: > An actor dedicated process calculus: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 > > The abstract interpretation for it: > http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf > > http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf > > And for yet another actor calculus of Aspect-oriented > programming: > > Besides that, there are formalization of ?-calculus in > Coq: > http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf > > And Isabelle/HOL (see last link in the current message) > > And the abstract interpretation of it: > http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf > > And even more, the Abadi-Cardelli abstract machine > revisited recently: > http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf > > And aspect Oriented programming: > http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf > > I hope this devise some more hard work in Modula-3 (and > Obliq too). > > Thanks in advance > > --- El lun, 11/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: lunes, 11 de julio, 2011 17:13 > > Hi all: > > perhaps somehow unrelated of the topic but anyway, > there is > > a JIT compiler interpreter for for C, a subset and > superset > > of it. It's based also in lcc front end, using BURS an > have > > apparently good timings (I guess there is one of those > C-- > > based on lcc as well to generate C, is that true?), > see: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > > > There was also in DEC-SRC a ML, and Lisp > implementations > > with Modula-2+ RT, there is one technical report (I > can't > > find the reference anymore, later), and there is some > > material back from 1980s > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > > > http://mumble.net/~jar/tproject/ > > > > There should be copies of those reports for anyone of > us I > > believe (Paul McJones is very helpful there, last time > I > > wrote him he answered fast): > > http://www.softwarepreservation.org/projects/LISP/embedded/ > > > > In case it matters the probably best thing would be > to > > compile JIT everything in Abadi-Cardelli calculus ZINC > based > > machine, then compile it to M3CG (see first paragraph > and > > previous web pages) to C-- to C and using the > mentioned > > compiler run the code, I suppose M3CG has RT support > doesn't > > it? I have one target of the C generated code, pretty > open > > and compatible: > > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > > > I have seen there at DEC worked hard to have good > compiler > > infrastructure, the Vesta and Vulcan Development > Environment > > bridge are pretty big pieces of work,, from the above > the > > most interesting for a possible Baby Modula-3 > > compiler/interpreter is: > > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > > > Maybe this is enough to build one of such if there is > value > > (maybe it is with dynamic linker/optimizer mlcc and > mld, a > > Modula-3 linker would help this much too, I'm not > aware of > > one in existence, just > > > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > > > Which is a very similar so stack representation, > compiler, > > interpreter, debugger, linker) > > > > Thanks in advance > > > > --- El vie, 8/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] C-- (was: general > purpose > > C libraries (C Kernel)) > > > Para: m3devel at elegosoft.com > > > Fecha: viernes, 8 de julio, 2011 15:16 > > > On Wed, Jul 06, 2011 at 04:53:31PM > > > -0400, Hendrik Boom wrote: > > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, > Hendrik > > Boom > > > wrote: > > > > > On Tue, Jul 05, 2011 at 08:10:15PM > +0100, > > Daniel > > > Alejandro Benavides D. wrote: > > > > > > C-- comes handy to this limited > > portability > > > tasks, I wonder why people > > > > > > don't use it. Maybe the same > reason > > about > > > Modula-3 too. > > > > > > > > > > Perhaps because as far as I know the > only > > code > > > generator for C-- > > > > > generates 32-bit Intel code. > That > > doesn't > > > provide much in the way of > > > > > portability. > > > > > > Looking at the current source code for qc--, > there > > appear > > > to be > > > filenames for code genreators for the alpha, > sparc, > > ia64, > > > mips, x86. > > > How many of these are in working order I don't > > > know. There seem to be > > > subdirecotries of a test2 directory called ppc, > > sparc, > > > x86. These are > > > recognisable processor names, so maybe there's > hope > > for > > > some of these. > > > I know the x86 works; I'm using it. Maybe > I > > should > > > look into ia64 > > > sometime. > > > > > > Things might possibly not be as dismal as I > thought. > > > > > > > > > > > > > There's rumours of other code > genrators, but > > I > > > haven't seen them yet. > > > > > > > > Here's some info from the C-- site: > > > > > > > > Other C-- compilers > > > > > > > > : Fermin Reig's cmmc is implemented in > Standard > > ML on > > > top of the MLRISC code generator. It emits > assembly > > code for > > > the Alpha, Sparc, and X86. It implements an > obsolete > > version > > > of C-- and is no longer maintained. > > > > > > > > : The Trampoline C-- Compiler by Sergei > Egorov, > > which > > > seems to have disappeared from the Web. The > Trampoline > > C-- > > > compiler implements the obsolete May, 1999 > > specification and > > > compiles to C. The author says: it is slow, > requires > > too > > > much memory, and generates slow C code. But, from > the > > other > > > hand, it implements almost all of original C-- > > specification > > > (including runtime interface), the generated code > is > > > readable, portable, and hopefully correct. > > > > > > > > : The Oregon C-- compiler was the first > > prototype > > > implementation of C--, also on top of MLRISC. It > has > > been > > > honorably retired. > > > > > > > > -- http://www.cminusminus.org/code.html > > > > > > > > Note that none of these are the rumoured > ones I > > > mentioned. But > > > > that same web page mentions a system called > > OCamlBurg, > > > which > > > > seems to be a parser generator that parses > trees > > > instead of > > > > strings. It can be used for > instruction > > > selection in a code > > > > generator. Maybe it's time I looked > into > > it. > > > > > > > > -- hendrik > > > > > > > > > > > > > > Well, there is a portable byte-code > > interpreter > > > written in C, but > > > > > that's very specifically not the point > of > > C--. > > > > > > > > > > -- hendrik > > > > > > -- hendrik > > > > > > > > > From hosking at cs.purdue.edu Thu Jul 14 15:38:21 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Thu, 14 Jul 2011 09:38:21 -0400 Subject: [M3devel] Fwd: Output from "cron" command References: <201107141217.p6ECHMm1017803@niagara.cs.purdue.edu> Message-ID: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Issues with the server? Begin forwarded message: > From: Tony Hosking > Date: July 14, 2011 8:17:22 AM EDT > To: hosking at cs.purdue.edu > Subject: Output from "cron" command > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 18:41:40 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 17:41:40 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Message-ID: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 21:44:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 20:44:36 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Thu Jul 14 21:48:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 14:48:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > This is to say why threads behaved seamengly for so many years in that > fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and > if so how could one implement Unix API without using same NT thread support > or at most would get the same old behaviour if so) but ALPHA_OSF, which > John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. > Anyway, thus the only working-well behaved platform is that only and how > one could run someone else. Perhaps reworking the SPIN threads to target > everything else (if is enough layered we can somehow think that but would of > course need their sources support besides figuring out how to build them) > the other way would be Alphas hardware like for NIC, routers, etc (Jay's > collection might have some data on that). I know for something the virtual > terminals are in another business company, but all net-ware I don't where's > about wherever that is, although I remember something about Gigabit ATM > servers software that they used to run and develop algorithms of Charles > Tacker. > Thanks in advance > > > --- El *jue, 14/7/11, Daniel Alejandro Benavides D. >* escribi?: > > > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" , "Tony Hosking" < > hosking at cs.purdue.edu> > Fecha: jueves, 14 de julio, 2011 11:41 > > Hi all: > I don't know but I haven't tried the cvsup since I was hit by other > problems (such as recompiling DEC-SRC sources like user space threads but > was able before because are broken, meaning I can't afford the loosely > compatibility and don't want apply to lose the system so quickly). > I would like the path to an approach for solving this issues before going > forward. > > test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 > Name lookup failure for "modula3.elegosoft.com": Host name lookup failed > Will retry at 11:40:54 > > > --- El *jue, 14/7/11, Tony Hosking * escribi?: > > > De: Tony Hosking > Asunto: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" > Fecha: jueves, 14 de julio, 2011 08:38 > > Issues with the server? > > Begin forwarded message: > > *From: *Tony Hosking > *Date: *July 14, 2011 8:17:22 AM EDT > *To: *hosking at cs.purdue.edu > *Subject: **Output from "cron" command* > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > > > -- 312-444-2124 Skype: f3l.headhunter Casa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 22:18:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 21:18:52 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310674732.82560.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Thu Jul 14 22:40:35 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 20:40:35 +0000 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com>, <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com>, Message-ID: I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. - Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:00:19 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:00:19 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677219.80729.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I think you are currently correct, still the missing feature would have mirror servers, but how if it doesn't help this (cvsup and dcvs are repository compatible but would need some extra work to install)? test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:51:18 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:10:05 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:44:57 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 14:01:22 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 15:51:52 test at fbd-desktop:~/cm3$ vim cvsup.cm3 test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.org": Host name lookup failed Will retry at 15:54:17 I was going to give you one more Unix platform where CVsup works as expected but who else cares, if you don't I'm fine at every opinion (is not personal, anyway): http://folk.uio.no/griff/kde/cvsup.html There used to be a Unix for a virtual machine customized Unix (called the simos) for AIX, but still the hardware is needed (Jay did you find a lasting home, if so let me know, but anyway what is the status of that ports as today): http://en.wikipedia.org/wiki/SimOS#cite_note-1 --- El jue, 14/7/11, Jay K escribi?: De: Jay K Asunto: RE: [M3devel] Fwd: Output from "cron" command Para: felipevaldez at gmail.com, dabenavidesd at yahoo.es CC: "m3devel" Fecha: jueves, 14 de julio, 2011 15:40 I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. ?- Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:12:50 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:12:50 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Thu Jul 14 23:26:05 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 16:26:05 -0500 Subject: [M3devel] LONGINT problem? Message-ID: I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:58:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:58:08 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Message-ID: <1310680688.21058.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I will call the inspiration against the conspiracy: http://www.softwareconspiracy.com/ http://web.archive.org/web/20081224105205/http://www.cc.gatech.edu/gvu/people/Phd/Krishna/IWHD.html and the video of it is: http://www.ibiblio.org/openvideo/video/chi/chi95_07_m4.mp4 Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "felipe valdez" CC: m3devel at elegosoft.com Fecha: jueves, 14 de julio, 2011 16:12 Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Fri Jul 15 00:15:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 17:15:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: On Thu, Jul 14, 2011 at 3:40 PM, Jay K wrote: > I agree that the relationship is missing or tenuous. But I was going to be > quiet and polite. > > I'm sorry if I was perceived as rude or impolite, this was not my intention. it's just sometimes m3devel discussion goes way over my head (knowledge-wise). I guess it's fair to asume a baseline knowledge for participants, but I feel mostly like an outsider. perhaps I should have posed my statement in the form of a question. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Fri Jul 15 00:17:27 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 22:17:27 +0000 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGINi := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L;UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Fri Jul 15 01:00:11 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 18:00:11 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > > ------------------------------ > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 01:15:53 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Thu, 14 Jul 2011 19:15:53 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven't checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Fri Jul 15 03:30:49 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Fri, 15 Jul 2011 02:30:49 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ?On what platform (OS and CPU) are you building and running your Modula-3 program? ?Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ?I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ?Regards,Randy Coleburn ?From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ?Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ?I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ?#include #include #include ?/* should be 64-bit integers if going over 1 billion */typedef unsigned long xint;#define FMT "%lu"?xint total, prim, max_peri;xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3},??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3},??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}};?void new_tri(xint in[]){??????????? int i;??????????? xint t[3], p = in[0] + in[1] + in[2];???????????? if (p > max_peri) return;???????????? prim ++;???????????? /* for every primitive triangle, its multiples would be right-angled too;??????????? * count them up to the max perimeter */??????????? total += max_peri / p;???????????? /* recursively produce next tier by multiplying the matrices */??????????? for (i = 0; i < 3; i++) {??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2];??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2];??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2];??????????????????????? new_tri(t);??????????? }}?int main(){??????????? xint seed[3] = {3, 4, 5};???????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) {??????????????????????? total = prim = 0;??????????????????????? new_tri(seed);???????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n",??????????????????????????????????? max_peri, total, prim);??????????? }??????????? return 0;} ?The output from that code is: ?Up to 10: 0 triples, 0 primitives.Up to 100: 17 triples, 7 primitives.Up to 1000: 325 triples, 70 primitives.Up to 10000: 4858 triples, 703 primitives.Up to 100000: 64741 triples, 7026 primitives.Up to 1000000: 808950 triples, 70229 primitives.Up to 10000000: 9706567 triples, 702309 primitives.Up to 100000000: 113236940 triples, 7023027 primitives. ?Note this output corresponds with the INTEGER output. ?On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote:Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ?MODULE PyTriples EXPORTS Main; ?IMPORT IO, Fmt; ?VAR tcnt, pcnt, max, i: LONGINT; ?PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) =? VAR perim := a + b + c; ? ? ?? BEGIN? ? IF perim <= max THEN? ? ? pcount := pcount + 1L;? ? ? tcount := tcount + max DIV perim;? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount);? ? END;? END NewTriangle; ?BEGINi := 100L; ?REPEAT? max := i;? tcnt := 0L;? pcnt := 0L;? NewTriangle(3L, 4L, 5L, tcnt, pcnt);? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " &? ? Fmt.LongInt(pcnt) & " Primitives\n");? i := i * 10L;UNTIL i = 10000000L; ?END PyTriples. ?This outputs: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives ?However, if I just use INTEGER on a 64 bit machine, I get the proper output: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives ?Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From wagner at elegosoft.com Fri Jul 15 13:22:41 2011 From: wagner at elegosoft.com (Olaf Wagner) Date: Fri, 15 Jul 2011 13:22:41 +0200 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Quoting Ken Durocher : [...] > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. As only some of the outputs are wrong, I'd guess that one of the output formatting procedures still has a problem with LONGINT. We need to fix that. Olaf -- Olaf Wagner -- elego Software Solutions GmbH Gustav-Meyer-Allee 25 / Geb?ude 12, 13355 Berlin, Germany phone: +49 30 23 45 86 96 mobile: +49 177 2345 869 fax: +49 30 23 45 86 95 http://www.elegosoft.com | Gesch?ftsf?hrer: Olaf Wagner | Sitz: Berlin Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194 From kcdurocher at gmail.com Fri Jul 15 23:53:36 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 16:53:36 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > the problem as I see is that your program isn't typed for any platform in > specific just to give you the best answer, then I would stick to the > original and track down the source of the problem (this is very point of > type checking, and e.g extended static checking if I may say so, the need to > verify your statements, the other approach is too cumbersome, i.e make it > believe it works when it doesn't). IMHO this a symptom of UNSAFE type > checking problem, rather of programming or programmer error. > I hope to be clarified about this, as far as I know LONGINT isn't INTEGER > but a bigger or equal type (a bigger INTEGER) which translates better to be > a super type, since it isn't I wonder why is that needed a different type > checker for that (we can transform INTEGER to be the true super type and > LONGINT to be a subtype), can't we make the same checking and just range > check everything else (so it doesn't bother to rewrite every platform code, > a bad symptom certainly, yet I approve the change in the language SPEC but > not its type checking). > Thanks in advance > > --- El *jue, 14/7/11, Coleburn, Randy * escribi?: > > > De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? > Para: "m3devel" , "Ken Durocher" < > kcdurocher at gmail.com> > Fecha: jueves, 14 de julio, 2011 18:15 > > > Ken: > > > > On what platform (OS and CPU) are you building and running your Modula-3 > program? > > > > Support for LONGINT is a relatively new addition to CM3, so it is possible > that something is broken. Perhaps your program can help us track it down. > > > > I haven?t checked thru your program yet, but the fact that it gives the > right answer using INTEGER, but not when using LONGINT, seems to point to > the LONGINT implementation as a potential problem source we should > investigate. > > > > Regards, > > Randy Coleburn > > > > *From:* Ken Durocher [mailto:kcdurocher at gmail.com] > *Sent:* Thursday, July 14, 2011 7:00 PM > *To:* Jay K > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > > > Sorry, to clarify, the LONGINT code does NOT give the correct output, but > the INTEGER code DOES. > > > > I did not write this C code, but it's output is the same as all the other > examples (there is a Java example too, if you want that): > > > > #include > > #include > > #include > > > > /* should be 64-bit integers if going over 1 billion */ > > typedef unsigned long xint; > > #define FMT "%lu" > > > > xint total, prim, max_peri; > > xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, > > { 1, 2, 2, 2, 1, 2, 2, 2, 3}, > > {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; > > > > void new_tri(xint in[]) > > { > > int i; > > xint t[3], p = in[0] + in[1] + in[2]; > > > > if (p > max_peri) return; > > > > prim ++; > > > > /* for every primitive triangle, its multiples would be > right-angled too; > > * count them up to the max perimeter */ > > total += max_peri / p; > > > > /* recursively produce next tier by multiplying the matrices > */ > > for (i = 0; i < 3; i++) { > > t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] > * in[2]; > > t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] > * in[2]; > > t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] > * in[2]; > > new_tri(t); > > } > > } > > > > int main() > > { > > xint seed[3] = {3, 4, 5}; > > > > for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { > > total = prim = 0; > > new_tri(seed); > > > > printf( "Up to "FMT": "FMT" triples, "FMT" > primitives.\n", > > max_peri, total, prim); > > } > > return 0; > > } > > > > The output from that code is: > > > > Up to 10: 0 triples, 0 primitives. > > Up to 100: 17 triples, 7 primitives. > > Up to 1000: 325 triples, 70 primitives. > > Up to 10000: 4858 triples, 703 primitives. > > Up to 100000: 64741 triples, 7026 primitives. > > Up to 1000000: 808950 triples, 70229 primitives. > > Up to 10000000: 9706567 triples, 702309 primitives. > > Up to 100000000: 113236940 triples, 7023027 primitives. > > > > Note this output corresponds with the INTEGER output. > > > > On Thu, Jul 14, 2011 at 5:17 PM, Jay K > > wrote: > > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > ------------------------------ > > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > > > MODULE PyTriples EXPORTS Main; > > > > IMPORT IO, Fmt; > > > > VAR tcnt, pcnt, max, i: LONGINT; > > > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > > VAR perim := a + b + c; > > BEGIN > > IF perim <= max THEN > > pcount := pcount + 1L; > > tcount := tcount + max DIV perim; > > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > > END; > > END NewTriangle; > > > > BEGIN > > i := 100L; > > > > REPEAT > > max := i; > > tcnt := 0L; > > pcnt := 0L; > > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > > Fmt.LongInt(pcnt) & " Primitives\n"); > > i := i * 10L; > > UNTIL i = 10000000L; > > > > END PyTriples. > > > > This outputs: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 0858 Triples, 703 Primitives > > 100000: 40701 Triples, 7024 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 4858 Triples, 703 Primitives > > 100000: 64741 Triples, 7026 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 23:54:41 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 17:54:41 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, Message-ID: Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Sat Jul 16 00:04:47 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 18:04:47 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, , Message-ID: Ken: More info re the fix checked in by Rodney Bates: CVSROOT: /usr/cvs Changes by: rodney at birch. 11/07/15 21:17:09 Modified files: cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 Convert.m3 Log message: Fix a tiny typo in Convert.DigitsL that was causing digit 6 to display as '4' and 4 to display as '0'. Regards, Randy Coleburn ________________________________ From: Coleburn, Randy Sent: Friday, July 15, 2011 5:54 PM To: Ken Durocher Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Sat Jul 16 01:31:16 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 16 Jul 2011 00:31:16 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310772676.59827.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: I hope sincerely it will, but without knowing that both platforms worked ill I think then the source of the problem yeah is on itself, not in its implicit implications which as far as I can see are not that much proved, but hopefully when we get to the specification of interfaces can make it test it better or plausible. I hope my understanding improves with this discussion going on. Thanks for that. Thanks? in advance. --- El vie, 15/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "Ken Durocher" CC: "m3devel" Fecha: viernes, 15 de julio, 2011 16:54 Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again.? It may solve your problem. Regards, Randy Coleburn ? From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. ?Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ? On what platform (OS and CPU) are you building and running your Modula-3 program? ? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ? I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ? Regards, Randy Coleburn ? From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ? I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ? #include #include #include ? /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" ? xint total, prim, max_peri; xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3}, ??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3}, ??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}}; ? void new_tri(xint in[]) { ??????????? int i; ??????????? xint t[3], p = in[0] + in[1] + in[2]; ? ??????????? if (p > max_peri) return; ? ??????????? prim ++; ? ??????????? /* for every primitive triangle, its multiples would be right-angled too; ??????????? * count them up to the max perimeter */ ??????????? total += max_peri / p; ? ??????????? /* recursively produce next tier by multiplying the matrices */ ??????????? for (i = 0; i < 3; i++) { ??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; ??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; ??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; ??????????????????????? new_tri(t); ??????????? } } ? int main() { ??????????? xint seed[3] = {3, 4, 5}; ? ??????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { ??????????????????????? total = prim = 0; ??????????????????????? new_tri(seed); ? ??????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n", ??????????????????????????????????? max_peri, total, prim); ??????????? } ??????????? return 0; } ? The output from that code is: ? Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. ? Note this output corresponds with the INTEGER output. ? On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ? MODULE PyTriples EXPORTS Main; ? IMPORT IO, Fmt; ? VAR tcnt, pcnt, max, i: LONGINT; ? PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = ? VAR perim := a + b + c; ? ? ? ? BEGIN ? ? IF perim <= max THEN ? ? ? pcount := pcount + 1L; ? ? ? tcount := tcount + max DIV perim; ? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); ? ? END; ? END NewTriangle; ? BEGIN i := 100L; ? REPEAT ? max := i; ? tcnt := 0L; ? pcnt := 0L; ? NewTriangle(3L, 4L, 5L, tcnt, pcnt); ? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & ? ? Fmt.LongInt(pcnt) & " Primitives\n"); ? i := i * 10L; UNTIL i = 10000000L; ? END PyTriples. ? This outputs: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives ? However, if I just use INTEGER on a 64 bit machine, I get the proper output: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives ? Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Fri Jul 15 20:31:29 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Fri, 15 Jul 2011 13:31:29 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> References: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Message-ID: <4E208781.7050406@lcwb.coop> On 07/15/2011 06:22 AM, Olaf Wagner wrote: > Quoting Ken Durocher : > [...] >> This outputs: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 0858 Triples, 703 Primitives >> 100000: 40701 Triples, 7024 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper output: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 4858 Triples, 703 Primitives >> 100000: 64741 Triples, 7026 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. > > As only some of the outputs are wrong, I'd guess that one of the > output formatting procedures still has a problem with LONGINT. It's definitely in formatting. See this debug log: (m3gdb) p Fmt.LongInt(4858,10) $6 = (*16_0000000000a212d8*) "0858" (m3gdb) p Fmt.Int(4858,10) $7 = (*16_0000000000a21300*) "4858" (m3gdb) p Fmt.LongInt(64741,10) $8 = (*16_0000000000a21328*) "40701" (m3gdb) p Fmt.Int(64741,10) $9 = (*16_0000000000a21350*) "64741" (m3gdb) p Fmt.LongInt(7026,10) $10 = (*16_0000000000a21378*) "7024" (m3gdb) p Fmt.Int(7026,10) $11 = (*16_0000000000a213a0*) "7026" (m3gdb) p Fmt.LongInt(325,10) $12 = (*16_0000000000a213c8*) "325" (m3gdb) p Fmt.Int(325,10) $13 = (*16_0000000000a213f0*) "325" > > We need to fix that. > > Olaf From kcdurocher at gmail.com Sat Jul 16 03:02:01 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 20:02:01 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: Indeed, this seems to have been the exact problem. Thanks On Fri, Jul 15, 2011 at 5:04 PM, Coleburn, Randy wrote: > Ken: > > More info re the fix checked in by Rodney Bates: > > CVSROOT: /usr/cvs > Changes by: rodney at birch. 11/07/15 21:17:09 > > Modified files: > cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 > Convert.m3 > > Log message: > Fix a tiny typo in Convert.DigitsL that was causing > digit 6 to display as '4' and 4 to display as '0'. > > Regards, > Randy Coleburn > > ------------------------------ > *From:* Coleburn, Randy > *Sent:* Friday, July 15, 2011 5:54 PM > *To:* Ken Durocher > > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > Ken: > With all due respect, I don't think Daniel is on the right track. > I note that one of our developers checked in a fix that may solve your > problem. > There seems to have been a problem in formatting the output where certain > digits got messed up. > Try updating your system with this new fix and run your program again. It > may solve your problem. > Regards, > Randy Coleburn > > ------------------------------ > *From:* Ken Durocher [kcdurocher at gmail.com] > *Sent:* Friday, July 15, 2011 5:53 PM > *To:* Daniel Alejandro Benavides D. > *Cc:* m3devel; Coleburn, Randy > *Subject:* Re: [M3devel] LONGINT problem? > > I just checekd, and I can confirm that the LONGINT version of the code > produces INCORRECT results on a 32 bit system, as well as a 64 bit system. > Both are running Linux, with cm3 5.8.6 > > On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < > dabenavidesd at yahoo.es> wrote: > >> Hi all: >> the problem as I see is that your program isn't typed for any platform in >> specific just to give you the best answer, then I would stick to the >> original and track down the source of the problem (this is very point of >> type checking, and e.g extended static checking if I may say so, the need to >> verify your statements, the other approach is too cumbersome, i.e make it >> believe it works when it doesn't). IMHO this a symptom of UNSAFE type >> checking problem, rather of programming or programmer error. >> I hope to be clarified about this, as far as I know LONGINT isn't INTEGER >> but a bigger or equal type (a bigger INTEGER) which translates better to be >> a super type, since it isn't I wonder why is that needed a different type >> checker for that (we can transform INTEGER to be the true super type and >> LONGINT to be a subtype), can't we make the same checking and just range >> check everything else (so it doesn't bother to rewrite every platform code, >> a bad symptom certainly, yet I approve the change in the language SPEC but >> not its type checking). >> Thanks in advance >> >> --- El *jue, 14/7/11, Coleburn, Randy * escribi?: >> >> >> De: Coleburn, Randy >> Asunto: Re: [M3devel] LONGINT problem? >> Para: "m3devel" , "Ken Durocher" < >> kcdurocher at gmail.com> >> Fecha: jueves, 14 de julio, 2011 18:15 >> >> >> Ken: >> >> >> >> On what platform (OS and CPU) are you building and running your Modula-3 >> program? >> >> >> >> Support for LONGINT is a relatively new addition to CM3, so it is possible >> that something is broken. Perhaps your program can help us track it down. >> >> >> >> I haven?t checked thru your program yet, but the fact that it gives the >> right answer using INTEGER, but not when using LONGINT, seems to point to >> the LONGINT implementation as a potential problem source we should >> investigate. >> >> >> >> Regards, >> >> Randy Coleburn >> >> >> >> *From:* Ken Durocher [mailto:kcdurocher at gmail.com] >> *Sent:* Thursday, July 14, 2011 7:00 PM >> *To:* Jay K >> *Cc:* m3devel >> *Subject:* Re: [M3devel] LONGINT problem? >> >> >> >> Sorry, to clarify, the LONGINT code does NOT give the correct output, but >> the INTEGER code DOES. >> >> >> >> I did not write this C code, but it's output is the same as all the other >> examples (there is a Java example too, if you want that): >> >> >> >> #include >> >> #include >> >> #include >> >> >> >> /* should be 64-bit integers if going over 1 billion */ >> >> typedef unsigned long xint; >> >> #define FMT "%lu" >> >> >> >> xint total, prim, max_peri; >> >> xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, >> >> { 1, 2, 2, 2, 1, 2, 2, 2, 3}, >> >> {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; >> >> >> >> void new_tri(xint in[]) >> >> { >> >> int i; >> >> xint t[3], p = in[0] + in[1] + in[2]; >> >> >> >> if (p > max_peri) return; >> >> >> >> prim ++; >> >> >> >> /* for every primitive triangle, its multiples would be >> right-angled too; >> >> * count them up to the max perimeter */ >> >> total += max_peri / p; >> >> >> >> /* recursively produce next tier by multiplying the matrices >> */ >> >> for (i = 0; i < 3; i++) { >> >> t[0] = U[i][0] * in[0] + U[i][1] * in[1] + >> U[i][2] * in[2]; >> >> t[1] = U[i][3] * in[0] + U[i][4] * in[1] + >> U[i][5] * in[2]; >> >> t[2] = U[i][6] * in[0] + U[i][7] * in[1] + >> U[i][8] * in[2]; >> >> new_tri(t); >> >> } >> >> } >> >> >> >> int main() >> >> { >> >> xint seed[3] = {3, 4, 5}; >> >> >> >> for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { >> >> total = prim = 0; >> >> new_tri(seed); >> >> >> >> printf( "Up to "FMT": "FMT" triples, "FMT" >> primitives.\n", >> >> max_peri, total, prim); >> >> } >> >> return 0; >> >> } >> >> >> >> The output from that code is: >> >> >> >> Up to 10: 0 triples, 0 primitives. >> >> Up to 100: 17 triples, 7 primitives. >> >> Up to 1000: 325 triples, 70 primitives. >> >> Up to 10000: 4858 triples, 703 primitives. >> >> Up to 100000: 64741 triples, 7026 primitives. >> >> Up to 1000000: 808950 triples, 70229 primitives. >> >> Up to 10000000: 9706567 triples, 702309 primitives. >> >> Up to 100000000: 113236940 triples, 7023027 primitives. >> >> >> >> Note this output corresponds with the INTEGER output. >> >> >> >> On Thu, Jul 14, 2011 at 5:17 PM, Jay K > >> wrote: >> >> Can you isolate if the problem is the formating/printing, or if it is in >> the computation? >> i.e.: >> >> Use "unsafe" and print out a little hex dump of the integer/longint >> variables? >> >> As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, >> it might not. >> Doesn't really matter. Let's focus on non-working 32bit machine with >> LONGINT. >> >> Also, please confirm which is the right, i.e. by writing it in C. >> Also, maybe just try to format as unsigned/hex using the safe interfaces? >> Also, this will be good to add to our automated tests. Assuming it doesn't >> run too slowly. >> Assuming it reproduces for anyone else (sorry, a bit rude of me). >> >> Later, thank you, >> - Jay >> >> ------------------------------ >> >> Date: Thu, 14 Jul 2011 16:26:05 -0500 >> From: kcdurocher at gmail.com >> To: m3devel at elegosoft.com >> Subject: [M3devel] LONGINT problem? >> >> >> >> I was writing a program to calculate "Pythagorean triples" recursively, >> and ran into a problem. Here's the program: >> >> >> >> MODULE PyTriples EXPORTS Main; >> >> >> >> IMPORT IO, Fmt; >> >> >> >> VAR tcnt, pcnt, max, i: LONGINT; >> >> >> >> PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = >> >> VAR perim := a + b + c; >> >> BEGIN >> >> IF perim <= max THEN >> >> pcount := pcount + 1L; >> >> tcount := tcount + max DIV perim; >> >> NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, >> pcount); >> >> END; >> >> END NewTriangle; >> >> >> >> BEGIN >> >> i := 100L; >> >> >> >> REPEAT >> >> max := i; >> >> tcnt := 0L; >> >> pcnt := 0L; >> >> NewTriangle(3L, 4L, 5L, tcnt, pcnt); >> >> IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & >> >> Fmt.LongInt(pcnt) & " Primitives\n"); >> >> i := i * 10L; >> >> UNTIL i = 10000000L; >> >> >> >> END PyTriples. >> >> >> >> This outputs: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 0858 Triples, 703 Primitives >> >> 100000: 40701 Triples, 7024 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper >> output: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 4858 Triples, 703 Primitives >> >> 100000: 64741 Triples, 7026 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. >> >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Sat Jul 16 13:46:28 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sat, 16 Jul 2011 06:46:28 -0500 Subject: [M3devel] Fwd: Re: Rd.GetText Question Message-ID: <4E217A14.6010009@lcwb.coop> Sorry for the delay. I sent this several days ago, but it disappeared into email space with neither a bounce nor showing up in the mailing list. I have had this problem intermittently. On 07/08/2011 09:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? Yes. AFAIK, all implementations of Text use variables of type CARDINAL or INTEGER internally for lengths of TEXT values, so the 2GB length limit exists anyway on a 32-bit machine, in lots of places besides just Rd.GetText. > But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and > then looping until EOF. Which method is best? > For a robust program, not just a quick throwaway, I would say you should always test the result of Rd.Length for -1 before passing it to Rd.GetText, unless you know your reader is non-intermittent and -1 can't happen. Perhaps this is the case in the examples you see that pass it directly to Rd.GetText. Or not. As long as you don't hit the 2GB limit, using LAST(CARDINAL) would always work and be a lot simpler than writing a loop. If you want handle > 2GB on 32-bit machines, the loop will have to handle the pieces some other way than just concatenating them, no doubt a lot more complicated. But LAST(CARDINAL) would still work. > Thanks. Rodney Bates From rodney_bates at lcwb.coop Mon Jul 18 17:42:16 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Mon, 18 Jul 2011 10:42:16 -0500 Subject: [M3devel] LONGINT problem? Message-ID: <4E245458.50308@lcwb.coop> I just checked in a fix to Convert.m3 for this into the release branch. It now gives the expected results for LONGINT. To rebuild, go into the scripts subdirectory and type "./do-cm3-min.sh buildship". This problem has already been fixed in the head in a different and more efficient way. On 07/14/2011 04:26 PM, Ken Durocher wrote: > I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. From hendrik at topoi.pooq.com Tue Jul 19 11:32:51 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 05:32:51 -0400 Subject: [M3devel] calling an overridden method Message-ID: <20110719093251.GA15176@topoi.pooq.com> I have a module containing a parent class, and another containing a child class. The parent class contains a method 'foo', which is to be overridden in the child class. But in implementing 'foo' in the child class I want to call the parent's method. Now with the method 'init' there's a trick where in the child's init, you WIDEN self to the parent's type and then call its init. This works because 'init' isn't overridden in an OVERRIDES clause, but is defined as a new method that happens to have the same name. Is there any way to do this with 'foo', where the whole point is that it be an overridden method and not a new one? Do I have to do something like covertly exporting the PROCEDURE that implements 'foo' in the parent's module so that it can be called directly? That would seem to be a violation of modular design. Or is violating modular design exactly what I'm really trying to do here? -- hendrik From mika at async.caltech.edu Tue Jul 19 16:02:55 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:02:55 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719093251.GA15176@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> Message-ID: <20110719140255.ADC4A1A2079@async.async.caltech.edu> TYPE A = OBJECT METHODS m(xxx) END; TYPE B = A OBJECT METHODS m(xxx) END; b := NEW(B); A.m(b,xxx) Mika Hendrik Boom writes: >I have a module containing a parent class, and another containing a >child class. > >The parent class contains a method 'foo', which is to be overridden in >the child class. > >But in implementing 'foo' in the child class I want to call the parent's >method. > >Now with the method 'init' there's a trick where in the child's init, >you WIDEN self to the parent's type and then call its init. >This works because 'init' isn't overridden in an OVERRIDES clause, >but is defined as a new method that happens to have the same name. > >Is there any way to do this with 'foo', where the whole point is that >it be an overridden method and not a new one? > >Do I have to do something like covertly exporting the PROCEDURE that >implements 'foo' in the parent's module so that it can be called >directly? That would seem to be a violation of modular design. Or is >violating modular design exactly what I'm really trying to do here? > >-- hendrik From mika at async.caltech.edu Tue Jul 19 16:11:05 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:11:05 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719140255.ADC4A1A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> Message-ID: <20110719141105.A69011A2079@async.async.caltech.edu> Sorry I'm being confusing here. The code is right but I think your question is a bit confusing. With your init example I don't think you're talking about an overridden init method but a shadowed method. You can't call an overridden method through the widening trick, but you *can* call a shadowed method like that. Mika Mika Nystrom writes: > >TYPE A = OBJECT METHODS m(xxx) END; > >TYPE B = A OBJECT METHODS m(xxx) END; > >b := NEW(B); > >A.m(b,xxx) > > Mika > >Hendrik Boom writes: >>I have a module containing a parent class, and another containing a >>child class. >> >>The parent class contains a method 'foo', which is to be overridden in >>the child class. >> >>But in implementing 'foo' in the child class I want to call the parent's >>method. >> >>Now with the method 'init' there's a trick where in the child's init, >>you WIDEN self to the parent's type and then call its init. >>This works because 'init' isn't overridden in an OVERRIDES clause, >>but is defined as a new method that happens to have the same name. >> >>Is there any way to do this with 'foo', where the whole point is that >>it be an overridden method and not a new one? >> >>Do I have to do something like covertly exporting the PROCEDURE that >>implements 'foo' in the parent's module so that it can be called >>directly? That would seem to be a violation of modular design. Or is >>violating modular design exactly what I'm really trying to do here? >> >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:26:14 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:26:14 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719141105.A69011A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> Message-ID: <20110719172614.GA23492@topoi.pooq.com> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > Sorry I'm being confusing here. > > The code is right but I think your question is a bit confusing. > > With your init example I don't think you're talking about an overridden > init method but a shadowed method. A 'shadowed' method. Is that what you call what's essentially a new method that happens to have the same name? Just like the way a variable in a nested block that has the same name as one in an outer block would be a new variable (I'm not sure Modula 3 allows this, the way C and the Algols do; I find it leads to confusing code). Init is the one I've seen explained in documentation. It's not what I want, because that trick provides no inheritance. > You can't call an overridden method > through the widening trick, but you *can* call a shadowed method like > that. > > Mika > > Mika Nystrom writes: > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > >TYPE B = A OBJECT METHODS m(xxx) END; This is, if I understand the terminology, a declaratin of m as a shadowd method. It's not what I want, because I intend that under normal circumstances, if an B object is used in a context where its static type is known as A, I still want the normal overriding mechanism to ensure that B's m is the one called. I mean something like TYPE B = A OBJECT OVERRIDES m := ... END; > > > >b := NEW(B); > > > >A.m(b,xxx) So this is a way to specifically get the m that belongs with A? Will this work with the way I want to define B and m? as in TYPE A = OBJECT METHODS m(xxx) := bar END; TYPE B = A OBJECT OVERRIDES m := foo END; PROCEDURE foo(self : B, ....) = BEGIN ... ... A.m(self, ...) (* and this ends up calling bar? *) ... END foo; -- hendrik > > > > Mika > > > >Hendrik Boom writes: > >>I have a module containing a parent class, and another containing a > >>child class. > >> > >>The parent class contains a method 'foo', which is to be overridden in > >>the child class. > >> > >>But in implementing 'foo' in the child class I want to call the parent's > >>method. > >> > >>Now with the method 'init' there's a trick where in the child's init, > >>you WIDEN self to the parent's type and then call its init. > >>This works because 'init' isn't overridden in an OVERRIDES clause, > >>but is defined as a new method that happens to have the same name. > >> > >>Is there any way to do this with 'foo', where the whole point is that > >>it be an overridden method and not a new one? > >> > >>Do I have to do something like covertly exporting the PROCEDURE that > >>implements 'foo' in the parent's module so that it can be called > >>directly? That would seem to be a violation of modular design. Or is > >>violating modular design exactly what I'm really trying to do here? > >> > >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:40:04 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:40:04 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719172614.GA23492@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> Message-ID: <20110719174004.GA23557@topoi.pooq.com> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: > On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > > Sorry I'm being confusing here. > > > > The code is right but I think your question is a bit confusing. > > > > With your init example I don't think you're talking about an overridden > > init method but a shadowed method. > > A 'shadowed' method. Is that what you call what's essentially a new > method that happens to have the same name? Just like the way a variable > in a nested block that has the same name as one in an outer block would > be a new variable (I'm not sure Modula 3 allows this, the way C and the > Algols do; I find it leads to confusing code). > > Init is the one I've seen explained in documentation. It's not what I > want, because that trick provides no inheritance. > > > You can't call an overridden method > > through the widening trick, but you *can* call a shadowed method like > > that. > > > > Mika > > > > Mika Nystrom writes: > > > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > > > >TYPE B = A OBJECT METHODS m(xxx) END; > > This is, if I understand the terminology, a declaratin of m as a shadowd > method. It's not what I want, because I intend that under normal > circumstances, if an B object is used in a context where its static type > is known as A, I still want the normal overriding mechanism to ensure > that B's m is the one called. > > I mean something like > > TYPE B = A OBJECT OVERRIDES m := ... END; > > > > > > >b := NEW(B); > > > > > >A.m(b,xxx) > > So this is a way to specifically get the m that belongs with A? Will > this work with the way I want to define B and m? > > as in > > TYPE A = OBJECT METHODS m(xxx) := bar END; > > TYPE B = A OBJECT OVERRIDES m := foo END; > > PROCEDURE foo(self : B, ....) = > BEGIN > ... > ... > A.m(self, ...) (* and this ends up calling bar? *) > ... > END foo; Well. I tried my version, and it works. Thanks for the advice. -- hendrik > > > > > > > Mika > > > > > >Hendrik Boom writes: > > >>I have a module containing a parent class, and another containing a > > >>child class. > > >> > > >>The parent class contains a method 'foo', which is to be overridden in > > >>the child class. > > >> > > >>But in implementing 'foo' in the child class I want to call the parent's > > >>method. > > >> > > >>Now with the method 'init' there's a trick where in the child's init, > > >>you WIDEN self to the parent's type and then call its init. > > >>This works because 'init' isn't overridden in an OVERRIDES clause, > > >>but is defined as a new method that happens to have the same name. > > >> > > >>Is there any way to do this with 'foo', where the whole point is that > > >>it be an overridden method and not a new one? > > >> > > >>Do I have to do something like covertly exporting the PROCEDURE that > > >>implements 'foo' in the parent's module so that it can be called > > >>directly? That would seem to be a violation of modular design. Or is > > >>violating modular design exactly what I'm really trying to do here? > > >> > > >>-- hendrik From mika at async.caltech.edu Wed Jul 20 09:44:14 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Wed, 20 Jul 2011 00:44:14 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719174004.GA23557@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> Message-ID: <20110720074414.6B8301A2079@async.async.caltech.edu> Right, a shadowed method is a new method of the same name, just like Algol block structure. An overridden method is a different binding for the same method. If you override a method, you can't call the old one without using the special A.T.m(a,...) syntax, since there's no binding for the old one within the type record for your object. The A.T.m(...) syntax works whether the method is shadowed or overridden. The widening only works for shadowed methods. The clever thing is that the method dispatch is based on the known type of the object within the context that the method is called, not where the object type is declared. This distinction between overriding and shadowing I think is one of the most brilliant aspects of Modula-3: it avoids the problem that you create an unwanted method override by adding a new method of the same name (whether in a supertype or a subtype). Mika Hendrik Boom writes: >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >> > Sorry I'm being confusing here. >> > >> > The code is right but I think your question is a bit confusing. >> > >> > With your init example I don't think you're talking about an overridden >> > init method but a shadowed method. >> >> A 'shadowed' method. Is that what you call what's essentially a new >> method that happens to have the same name? Just like the way a variable >> in a nested block that has the same name as one in an outer block would >> be a new variable (I'm not sure Modula 3 allows this, the way C and the >> Algols do; I find it leads to confusing code). >> >> Init is the one I've seen explained in documentation. It's not what I >> want, because that trick provides no inheritance. >> >> > You can't call an overridden method >> > through the widening trick, but you *can* call a shadowed method like >> > that. >> > >> > Mika >> > >> > Mika Nystrom writes: >> > > >> > >TYPE A = OBJECT METHODS m(xxx) END; >> > > >> > >TYPE B = A OBJECT METHODS m(xxx) END; >> >> This is, if I understand the terminology, a declaratin of m as a shadowd >> method. It's not what I want, because I intend that under normal >> circumstances, if an B object is used in a context where its static type >> is known as A, I still want the normal overriding mechanism to ensure >> that B's m is the one called. >> >> I mean something like >> >> TYPE B = A OBJECT OVERRIDES m := ... END; >> >> > > >> > >b := NEW(B); >> > > >> > >A.m(b,xxx) >> >> So this is a way to specifically get the m that belongs with A? Will >> this work with the way I want to define B and m? >> >> as in >> >> TYPE A = OBJECT METHODS m(xxx) := bar END; >> >> TYPE B = A OBJECT OVERRIDES m := foo END; >> >> PROCEDURE foo(self : B, ....) = >> BEGIN >> ... >> ... >> A.m(self, ...) (* and this ends up calling bar? *) >> ... >> END foo; > >Well. I tried my version, and it works. Thanks for the advice. > >-- hendrik > >> >> > > >> > > Mika >> > > >> > >Hendrik Boom writes: >> > >>I have a module containing a parent class, and another containing a >> > >>child class. >> > >> >> > >>The parent class contains a method 'foo', which is to be overridden in >> > >>the child class. >> > >> >> > >>But in implementing 'foo' in the child class I want to call the parent's > >> > >>method. >> > >> >> > >>Now with the method 'init' there's a trick where in the child's init, >> > >>you WIDEN self to the parent's type and then call its init. >> > >>This works because 'init' isn't overridden in an OVERRIDES clause, >> > >>but is defined as a new method that happens to have the same name. >> > >> >> > >>Is there any way to do this with 'foo', where the whole point is that >> > >>it be an overridden method and not a new one? >> > >> >> > >>Do I have to do something like covertly exporting the PROCEDURE that >> > >>implements 'foo' in the parent's module so that it can be called >> > >>directly? That would seem to be a violation of modular design. Or is >> > >>violating modular design exactly what I'm really trying to do here? >> > >> >> > >>-- hendrik From rodney_bates at lcwb.coop Wed Jul 20 18:18:37 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Wed, 20 Jul 2011 11:18:37 -0500 Subject: [M3devel] calling an overridden method In-Reply-To: <20110720074414.6B8301A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> Message-ID: <4E26FFDD.9060009@lcwb.coop> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > Right, a shadowed method is a new method of the same name, just like > Algol block structure. An overridden method is a different binding for > the same method. If you override a method, you can't call the old one > without using the special A.T.m(a,...) syntax, since there's no binding > for the old one within the type record for your object. The A.T.m(...) > syntax works whether the method is shadowed or overridden. The widening > only works for shadowed methods. > > The clever thing is that the method dispatch is based on the known type > of the object within the context that the method is called, not where the > object type is declared. > > This distinction between overriding and shadowing I think is one of the > most brilliant aspects of Modula-3: it avoids the problem that you > create an unwanted method override by adding a new method of the same name > (whether in a supertype or a subtype). This is probably my single favorite example of how C++ is badly designed for practical programming and, more generally, why syntactic explicitness is important. C++ has both overrides and new methods, but it is *very* hard for a programmer to see the difference. Syntactically, they look identical. For a member function declaration to be an override, you need: 1) It has the same simple name as the original. 2) It has an equivalent signature to the original. 3) The original is 'virtual', which in this context means overridable. Equivalence of signatures is complicated, as there are several rules about selected ways they can differ and still be equivalent. For example, int *p and int p[] are equivalent. There can be overloaded (same name, different signatures) original methods, from the same or different superclasses, to be considered. And then this allows what would, I suppose, be called "overloaded overrides", as well as a mix of overloaded new methods and overrides, all with the same name. 'virtual' has at least two very different meanings, one relevant here and one regarding repeated inheritance over multiple paths. The virtual property can come from anywhere in the inheritance hierarchy, and can change between the original method declaration and the subclass we are trying to read. Shadowing can also involve signature equivalence as well as name equality. AFAIK, you can't shadow with the same name and signature, if the relevant inherited method is virtual. But if not, a same-name, signature-equivalent member function is a shadow. Meanwhile, linking up to a precursor to be overridden involves looking at signatures of same-named methods from all superclasses, whereas overload resolution in calls considers only same-named candidates from the same class, before signatures are considered. The interactions with static member functions make things even more complicated. None of this is syntactically explicit. In contrast, Modula-3 says either "METHODS" or "OVERRIDES" explicitly. Moreover, even without these tags, new methods always have signatures, while overrides do not. In my experience, very few C++ programmers, outside of compiler writers and language committee members, understand these semantic rules. And they do predictably get surprised when something turns out to dispatch when they expected it not to or vice versa. When this happens, rather than figure the language out, they just make a note to self to use some coding convention that avoids getting anywhere close, e.g., never using the same name for different methods, only for overrides. (Well, OK, that's probably a good practice anyway, but you see my point, I think.) > > Mika > > > Hendrik Boom writes: >> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> Sorry I'm being confusing here. >>>> >>>> The code is right but I think your question is a bit confusing. >>>> >>>> With your init example I don't think you're talking about an overridden >>>> init method but a shadowed method. >>> >>> A 'shadowed' method. Is that what you call what's essentially a new >>> method that happens to have the same name? Just like the way a variable >>> in a nested block that has the same name as one in an outer block would >>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>> Algols do; I find it leads to confusing code). >>> >>> Init is the one I've seen explained in documentation. It's not what I >>> want, because that trick provides no inheritance. >>> >>>> You can't call an overridden method >>>> through the widening trick, but you *can* call a shadowed method like >>>> that. >>>> >>>> Mika >>>> >>>> Mika Nystrom writes: >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>> >>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>> >>> This is, if I understand the terminology, a declaratin of m as a shadowd >>> method. It's not what I want, because I intend that under normal >>> circumstances, if an B object is used in a context where its static type >>> is known as A, I still want the normal overriding mechanism to ensure >>> that B's m is the one called. >>> >>> I mean something like >>> >>> TYPE B = A OBJECT OVERRIDES m := ... END; >>> >>>>> >>>>> b := NEW(B); >>>>> >>>>> A.m(b,xxx) >>> >>> So this is a way to specifically get the m that belongs with A? Will >>> this work with the way I want to define B and m? >>> >>> as in >>> >>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>> >>> TYPE B = A OBJECT OVERRIDES m := foo END; >>> >>> PROCEDURE foo(self : B, ....) = >>> BEGIN >>> ... >>> ... >>> A.m(self, ...) (* and this ends up calling bar? *) >>> ... >>> END foo; >> >> Well. I tried my version, and it works. Thanks for the advice. >> >> -- hendrik >> >>> >>>>> >>>>> Mika >>>>> >>>>> Hendrik Boom writes: >>>>>> I have a module containing a parent class, and another containing a >>>>>> child class. >>>>>> >>>>>> The parent class contains a method 'foo', which is to be overridden in >>>>>> the child class. >>>>>> >>>>>> But in implementing 'foo' in the child class I want to call the parent's >> >>>>>> method. >>>>>> >>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>> you WIDEN self to the parent's type and then call its init. >>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>> but is defined as a new method that happens to have the same name. >>>>>> >>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>> it be an overridden method and not a new one? >>>>>> >>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>> implements 'foo' in the parent's module so that it can be called >>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>> violating modular design exactly what I'm really trying to do here? >>>>>> >>>>>> -- hendrik > From peter.mckinna at gmail.com Thu Jul 21 08:11:46 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Thu, 21 Jul 2011 16:11:46 +1000 Subject: [M3devel] calling an overridden method In-Reply-To: <4E26FFDD.9060009@lcwb.coop> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: Forgive my ignorance, but where in the report does it allow A.m(b,xxx) where that A is a type I just compiled it and it works fine but its a syntactic subtlety that I have sadly been unaware. Regards Peter On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote: > > > On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> Right, a shadowed method is a new method of the same name, just like >> Algol block structure. An overridden method is a different binding for >> the same method. If you override a method, you can't call the old one >> without using the special A.T.m(a,...) syntax, since there's no binding >> for the old one within the type record for your object. The A.T.m(...) >> syntax works whether the method is shadowed or overridden. The widening >> only works for shadowed methods. >> >> The clever thing is that the method dispatch is based on the known type >> of the object within the context that the method is called, not where the >> object type is declared. >> >> This distinction between overriding and shadowing I think is one of the >> most brilliant aspects of Modula-3: it avoids the problem that you >> create an unwanted method override by adding a new method of the same name >> (whether in a supertype or a subtype). >> > > This is probably my single favorite example of how C++ is badly > designed for practical programming and, more generally, why syntactic > explicitness is important. > > C++ has both overrides and new methods, but it is *very* hard for a > programmer to see the difference. Syntactically, they look identical. > > For a member function declaration to be an override, you need: > 1) It has the same simple name as the original. > 2) It has an equivalent signature to the original. > 3) The original is 'virtual', which in this context means overridable. > > Equivalence of signatures is complicated, as there are several rules > about selected ways they can differ and still be equivalent. For > example, int *p and int p[] are equivalent. There can be overloaded > (same name, different signatures) original methods, from the same or > different superclasses, to be considered. And then this allows what > would, I suppose, be called "overloaded overrides", as well as a mix > of overloaded new methods and overrides, all with the same name. > > 'virtual' has at least two very different meanings, one relevant here > and one regarding repeated inheritance over multiple paths. The > virtual property can come from anywhere in the inheritance hierarchy, > and can change between the original method declaration and the > subclass we are trying to read. > > Shadowing can also involve signature equivalence as well as name > equality. AFAIK, you can't shadow with the same name and signature, > if the relevant inherited method is virtual. But if not, a same-name, > signature-equivalent member function is a shadow. > > Meanwhile, linking up to a precursor to be overridden involves looking > at signatures of same-named methods from all superclasses, whereas > overload resolution in calls considers only same-named candidates from > the same class, before signatures are considered. > > The interactions with static member functions make things even more > complicated. > > None of this is syntactically explicit. In contrast, Modula-3 says > either "METHODS" or "OVERRIDES" explicitly. Moreover, even without > these tags, new methods always have signatures, while overrides do > not. > > In my experience, very few C++ programmers, outside of compiler > writers and language committee members, understand these semantic > rules. And they do predictably get surprised when something turns out > to dispatch when they expected it not to or vice versa. When this > happens, rather than figure the language out, they just make a note to > self to use some coding convention that avoids getting anywhere close, > e.g., never using the same name for different methods, only for > overrides. (Well, OK, that's probably a good practice anyway, but you > see my point, I think.) > > > >> Mika >> >> >> Hendrik Boom writes: >> >>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> >>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> >>>>> Sorry I'm being confusing here. >>>>> >>>>> The code is right but I think your question is a bit confusing. >>>>> >>>>> With your init example I don't think you're talking about an overridden >>>>> init method but a shadowed method. >>>>> >>>> >>>> A 'shadowed' method. Is that what you call what's essentially a new >>>> method that happens to have the same name? Just like the way a variable >>>> in a nested block that has the same name as one in an outer block would >>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>> Algols do; I find it leads to confusing code). >>>> >>>> Init is the one I've seen explained in documentation. It's not what I >>>> want, because that trick provides no inheritance. >>>> >>>> You can't call an overridden method >>>>> through the widening trick, but you *can* call a shadowed method like >>>>> that. >>>>> >>>>> Mika >>>>> >>>>> Mika Nystrom writes: >>>>> >>>>>> >>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>> >>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>> >>>>> >>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>> method. It's not what I want, because I intend that under normal >>>> circumstances, if an B object is used in a context where its static type >>>> is known as A, I still want the normal overriding mechanism to ensure >>>> that B's m is the one called. >>>> >>>> I mean something like >>>> >>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>> >>>> >>>>>> b := NEW(B); >>>>>> >>>>>> A.m(b,xxx) >>>>>> >>>>> >>>> So this is a way to specifically get the m that belongs with A? Will >>>> this work with the way I want to define B and m? >>>> >>>> as in >>>> >>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>> >>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>> >>>> PROCEDURE foo(self : B, ....) = >>>> BEGIN >>>> ... >>>> ... >>>> A.m(self, ...) (* and this ends up calling bar? *) >>>> ... >>>> END foo; >>>> >>> >>> Well. I tried my version, and it works. Thanks for the advice. >>> >>> -- hendrik >>> >>> >>>> >>>>>> Mika >>>>>> >>>>>> Hendrik Boom writes: >>>>>> >>>>>>> I have a module containing a parent class, and another containing a >>>>>>> child class. >>>>>>> >>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>> in >>>>>>> the child class. >>>>>>> >>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>> parent's >>>>>>> >>>>>> >>> method. >>>>>>> >>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>> but is defined as a new method that happens to have the same name. >>>>>>> >>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>> it be an overridden method and not a new one? >>>>>>> >>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>> >>>>>>> -- hendrik >>>>>>> >>>>>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From mika at async.caltech.edu Thu Jul 21 09:27:43 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Thu, 21 Jul 2011 00:27:43 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: <20110721072743.5F5A31A2079@async.async.caltech.edu> Section 6, under "Designators". Mika Peter McKinna writes: >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/plain; charset=ISO-8859-1 > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx) >where that A is a type > >I just compiled it and it works fine but its a syntactic subtlety that I >have sadly been unaware. > >Regards Peter > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote >: > >> >> >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: >> >>> Right, a shadowed method is a new method of the same name, just like >>> Algol block structure. An overridden method is a different binding for >>> the same method. If you override a method, you can't call the old one >>> without using the special A.T.m(a,...) syntax, since there's no binding >>> for the old one within the type record for your object. The A.T.m(...) >>> syntax works whether the method is shadowed or overridden. The widening >>> only works for shadowed methods. >>> >>> The clever thing is that the method dispatch is based on the known type >>> of the object within the context that the method is called, not where the >>> object type is declared. >>> >>> This distinction between overriding and shadowing I think is one of the >>> most brilliant aspects of Modula-3: it avoids the problem that you >>> create an unwanted method override by adding a new method of the same name >>> (whether in a supertype or a subtype). >>> >> >> This is probably my single favorite example of how C++ is badly >> designed for practical programming and, more generally, why syntactic >> explicitness is important. >> >> C++ has both overrides and new methods, but it is *very* hard for a >> programmer to see the difference. Syntactically, they look identical. >> >> For a member function declaration to be an override, you need: >> 1) It has the same simple name as the original. >> 2) It has an equivalent signature to the original. >> 3) The original is 'virtual', which in this context means overridable. >> >> Equivalence of signatures is complicated, as there are several rules >> about selected ways they can differ and still be equivalent. For >> example, int *p and int p[] are equivalent. There can be overloaded >> (same name, different signatures) original methods, from the same or >> different superclasses, to be considered. And then this allows what >> would, I suppose, be called "overloaded overrides", as well as a mix >> of overloaded new methods and overrides, all with the same name. >> >> 'virtual' has at least two very different meanings, one relevant here >> and one regarding repeated inheritance over multiple paths. The >> virtual property can come from anywhere in the inheritance hierarchy, >> and can change between the original method declaration and the >> subclass we are trying to read. >> >> Shadowing can also involve signature equivalence as well as name >> equality. AFAIK, you can't shadow with the same name and signature, >> if the relevant inherited method is virtual. But if not, a same-name, >> signature-equivalent member function is a shadow. >> >> Meanwhile, linking up to a precursor to be overridden involves looking >> at signatures of same-named methods from all superclasses, whereas >> overload resolution in calls considers only same-named candidates from >> the same class, before signatures are considered. >> >> The interactions with static member functions make things even more >> complicated. >> >> None of this is syntactically explicit. In contrast, Modula-3 says >> either "METHODS" or "OVERRIDES" explicitly. Moreover, even without >> these tags, new methods always have signatures, while overrides do >> not. >> >> In my experience, very few C++ programmers, outside of compiler >> writers and language committee members, understand these semantic >> rules. And they do predictably get surprised when something turns out >> to dispatch when they expected it not to or vice versa. When this >> happens, rather than figure the language out, they just make a note to >> self to use some coding convention that avoids getting anywhere close, >> e.g., never using the same name for different methods, only for >> overrides. (Well, OK, that's probably a good practice anyway, but you >> see my point, I think.) >> >> >> >>> Mika >>> >>> >>> Hendrik Boom writes: >>> >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>>> >>>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>>> >>>>>> Sorry I'm being confusing here. >>>>>> >>>>>> The code is right but I think your question is a bit confusing. >>>>>> >>>>>> With your init example I don't think you're talking about an overridden >>>>>> init method but a shadowed method. >>>>>> >>>>> >>>>> A 'shadowed' method. Is that what you call what's essentially a new >>>>> method that happens to have the same name? Just like the way a variable >>>>> in a nested block that has the same name as one in an outer block would >>>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>>> Algols do; I find it leads to confusing code). >>>>> >>>>> Init is the one I've seen explained in documentation. It's not what I >>>>> want, because that trick provides no inheritance. >>>>> >>>>> You can't call an overridden method >>>>>> through the widening trick, but you *can* call a shadowed method like >>>>>> that. >>>>>> >>>>>> Mika >>>>>> >>>>>> Mika Nystrom writes: >>>>>> >>>>>>> >>>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>>> >>>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>>> >>>>>> >>>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>>> method. It's not what I want, because I intend that under normal >>>>> circumstances, if an B object is used in a context where its static type >>>>> is known as A, I still want the normal overriding mechanism to ensure >>>>> that B's m is the one called. >>>>> >>>>> I mean something like >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>>> >>>>> >>>>>>> b := NEW(B); >>>>>>> >>>>>>> A.m(b,xxx) >>>>>>> >>>>>> >>>>> So this is a way to specifically get the m that belongs with A? Will >>>>> this work with the way I want to define B and m? >>>>> >>>>> as in >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>>> >>>>> PROCEDURE foo(self : B, ....) = >>>>> BEGIN >>>>> ... >>>>> ... >>>>> A.m(self, ...) (* and this ends up calling bar? *) >>>>> ... >>>>> END foo; >>>>> >>>> >>>> Well. I tried my version, and it works. Thanks for the advice. >>>> >>>> -- hendrik >>>> >>>> >>>>> >>>>>>> Mika >>>>>>> >>>>>>> Hendrik Boom writes: >>>>>>> >>>>>>>> I have a module containing a parent class, and another containing a >>>>>>>> child class. >>>>>>>> >>>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>>> in >>>>>>>> the child class. >>>>>>>> >>>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>>> parent's >>>>>>>> >>>>>>> >>>> method. >>>>>>>> >>>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>>> but is defined as a new method that happens to have the same name. >>>>>>>> >>>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>>> it be an overridden method and not a new one? >>>>>>>> >>>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>>> >>>>>>>> -- hendrik >>>>>>>> >>>>>>> >>> > >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/html; charset=ISO-8859-1 >Content-Transfer-Encoding: quoted-printable > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx)=A0 w= >here that A is a type

I just compiled it and it works fine but its a= > syntactic subtlety that I have sadly been unaware.

Regards Peter> >
On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. B= >ates <rodney= >_bates at lcwb.coop> wrote:
style=3D"border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.= >8ex; padding-left: 1ex;"> >
>
>On 07/20/2011 02:44 AM, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Right, a shadowed method is a new method of the same name, just like
>Algol block structure. =A0An overridden method is a different binding forr> >the same method. =A0If you override a method, you can't call the old on= >e
>without using the special A.T.m(a,...) syntax, since there's no binding= >
>for the old one within the type record for your object. =A0The A.T.m(...)r> >syntax works whether the method is shadowed or overridden. =A0The widening<= >br> >only works for shadowed methods.
>
>The clever thing is that the method dispatch is based on the known type
>of the object within the context that the method is called, not where ther> >object type is declared.
>
>This distinction between overriding and shadowing I think is one of the
>most brilliant aspects of Modula-3: it avoids the problem that you
>create an unwanted method override by adding a new method of the same name<= >br> >(whether in a supertype or a subtype).
>
>
>This is probably my single favorite example of how C++ is badly
>designed for practical programming and, more generally, why syntactic
>explicitness is important.
>
>C++ has both overrides and new methods, but it is *very* hard for a
>programmer to see the difference. =A0Syntactically, they look identical.> >
>For a member function declaration to be an override, you need:
>1) It has the same simple name as the original.
>2) It has an equivalent signature to the original.
>3) The original is 'virtual', which in this context means overridab= >le.
>
>Equivalence of signatures is complicated, as there are several rules
>about selected ways they can differ and still be equivalent. =A0For
>example, int *p and int p[] are equivalent. =A0There can be overloaded
>(same name, different signatures) original methods, from the same or
>different superclasses, to be considered. =A0And then this allows what
>would, I suppose, be called "overloaded overrides", as well as a = >mix
>of overloaded new methods and overrides, all with the same name.
>
>'virtual' has at least two very different meanings, one relevant he= >re
>and one regarding repeated inheritance over multiple paths. =A0The
>virtual property can come from anywhere in the inheritance hierarchy,
>and can change between the original method declaration and the
>subclass we are trying to read.
>
>Shadowing can also involve signature equivalence as well as name
>equality. =A0AFAIK, you can't shadow with the same name and signature,<= >br> >if the relevant inherited method is virtual. =A0But if not, a same-name,> >signature-equivalent member function is a shadow.
>
>Meanwhile, linking up to a precursor to be overridden involves looking
>at signatures of same-named methods from all superclasses, whereas
>overload resolution in calls considers only same-named candidates from
>the same class, before signatures are considered.
>
>The interactions with static member functions make things even more
>complicated.
>
>None of this is syntactically explicit. =A0In contrast, Modula-3 says
>either "METHODS" or "OVERRIDES" explicitly. =A0Moreover= >, even without
>these tags, new methods always have signatures, while overrides do
>not.
>
>In my experience, very few C++ programmers, outside of compiler
>writers and language committee members, understand these semantic
>rules. =A0And they do predictably get surprised when something turns out> >to dispatch when they expected it not to or vice versa. =A0When this
>happens, rather than figure the language out, they just make a note to
>self to use some coding convention that avoids getting anywhere close,
>e.g., never using the same name for different methods, only for
>overrides. (Well, OK, that's probably a good practice anyway, but your> >see my point, I think.)
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
> =A0 =A0 =A0Mika
>
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Sorry I'm being confusing here.
>
>The code is right but I think your question is a bit confusing.
>
>With your init example I don't think you're talking about an overri= >dden
>init method but a shadowed method.
>
>
>A 'shadowed' method. =A0Is that what you call what's essentiall= >y a new
>method that happens to have the same name? =A0Just like the way a variable<= >br> >in a nested block that has the same name as one in an outer block would
>be a new variable (I'm not sure Modula 3 allows this, the way C and the= >
>Algols do; I find it leads to confusing code).
>
>Init is the one I've seen explained in documentation. =A0It's =A0no= >t what I
>want, because that trick provides no inheritance.
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >You can't call an overridden method
>through the widening trick, but you *can* call a shadowed method like
>that.
>
> =A0 =A0 =A0Mika
>
>Mika Nystrom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>TYPE A =3D OBJECT METHODS m(xxx) END;
>
>TYPE B =3D A OBJECT METHODS m(xxx) END;
>
>
>This is, if I understand the terminology, a declaratin of m as a shadowd> >method. =A0It's not what I want, because I =A0intend that under normal<= >br> >circumstances, if an B object is used in a context where its static type> >is known as A, I still want the normal overriding mechanism to ensure
>that B's m is the one called.
>
>I mean something like
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D ... END;
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
>b :=3D NEW(B);
>
>A.m(b,xxx)
>
>
>So this is a way to specifically get the m that belongs with A? =A0Will
>this work with the way I want to define B and m?
>
>as in
>
>TYPE A =3D OBJECT METHODS m(xxx) :=3D bar END;
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D foo END;
>
>PROCEDURE foo(self : B, ....) =3D
>BEGIN
> =A0 ...
> =A0 ...
> =A0 =A0A.m(self, ...) =A0 (* and this ends up calling bar? *)
> =A0 ...
>END foo;
>
>
>Well. I tried my version, and it works. =A0Thanks for the advice.
>
>-- hendrik
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
> =A0 =A0 =A0Mika
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >I have a module containing a parent class, and another containing a
>child class.
>
>The parent class contains a method 'foo', which is to be overridden= > in
>the child class.
>
>But in implementing 'foo' in the child class I want to call the par= >ent's
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >method.
>
>Now with the method 'init' there's a trick where in the child&#= >39;s init,
>you WIDEN self to the parent's type and then call its init.
>This works because 'init' isn't overridden in an OVERRIDES clau= >se,
>but is defined as a new method that happens to have the same name.
>
>Is there any way to do this with 'foo', where the whole point is th= >at
>it be an overridden method and not a new one?
>
>Do I have to do something like covertly exporting the PROCEDURE that
>implements 'foo' in the parent's module so that it can be calle= >d
>directly? That would seem to be a violation of modular design. =A0Or is
>violating modular design exactly what I'm really trying to do here?
>
>-- hendrik
>
>
>
>

> >--0015174c40fe49b5ad04a88e39c4-- From dabenavidesd at yahoo.es Thu Jul 21 18:14:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 17:14:52 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <20110721072743.5F5A31A2079@async.async.caltech.edu> Message-ID: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: I find this terminology of types and checks and inheritance big convoluted here (but would allow me this to say we need a baby toy to plataform independent Modula-3 language or sort of artifact, but not everything we would want since there seems to be pieces of work which are undecidable, how one can create some application of it, it seems odd to try those for me). Although it is better to start with something to do that and I fact I believe it's already started by a great computologist, Coenraad Bron with work on Pascal, Modular pascal at the University of Twente, The Netherlands and later in Oberon with Modula-3 reusability and typability, at University of Groningen, The Netherlands, after all, Coen Bron, worked hard for that. Indeed people there liked Modula-like languages a lot, which makes sense for yet another local Prof visit there. I don't know many or too much but I believe great computer scientist came from there as well but certainly is a good resource of efforts in tools and so for ourselves Thanks in advance --- El jue, 21/7/11, Mika Nystrom escribi?: > De: Mika Nystrom > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 02:27 > Section 6, under "Designators". > > Mika > > Peter McKinna writes: > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/plain; charset=ISO-8859-1 > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx) > >where that A is a type > > > >I just compiled it and it works fine but its a > syntactic subtlety that I > >have sadly been unaware. > > > >Regards Peter > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote > >: > > > >> > >> > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> > >>> Right, a shadowed method is a new method of > the same name, just like > >>> Algol block structure. An overridden > method is a different binding for > >>> the same method. If you override a > method, you can't call the old one > >>> without using the special A.T.m(a,...) syntax, > since there's no binding > >>> for the old one within the type record for > your object. The A.T.m(...) > >>> syntax works whether the method is shadowed or > overridden. The widening > >>> only works for shadowed methods. > >>> > >>> The clever thing is that the method dispatch > is based on the known type > >>> of the object within the context that the > method is called, not where the > >>> object type is declared. > >>> > >>> This distinction between overriding and > shadowing I think is one of the > >>> most brilliant aspects of Modula-3: it avoids > the problem that you > >>> create an unwanted method override by adding a > new method of the same name > >>> (whether in a supertype or a subtype). > >>> > >> > >> This is probably my single favorite example of how > C++ is badly > >> designed for practical programming and, more > generally, why syntactic > >> explicitness is important. > >> > >> C++ has both overrides and new methods, but it is > *very* hard for a > >> programmer to see the difference. > Syntactically, they look identical. > >> > >> For a member function declaration to be an > override, you need: > >> 1) It has the same simple name as the original. > >> 2) It has an equivalent signature to the > original. > >> 3) The original is 'virtual', which in this > context means overridable. > >> > >> Equivalence of signatures is complicated, as there > are several rules > >> about selected ways they can differ and still be > equivalent. For > >> example, int *p and int p[] are equivalent. > There can be overloaded > >> (same name, different signatures) original > methods, from the same or > >> different superclasses, to be considered. > And then this allows what > >> would, I suppose, be called "overloaded > overrides", as well as a mix > >> of overloaded new methods and overrides, all with > the same name. > >> > >> 'virtual' has at least two very different > meanings, one relevant here > >> and one regarding repeated inheritance over > multiple paths. The > >> virtual property can come from anywhere in the > inheritance hierarchy, > >> and can change between the original method > declaration and the > >> subclass we are trying to read. > >> > >> Shadowing can also involve signature equivalence > as well as name > >> equality. AFAIK, you can't shadow with the > same name and signature, > >> if the relevant inherited method is virtual. > But if not, a same-name, > >> signature-equivalent member function is a shadow. > >> > >> Meanwhile, linking up to a precursor to be > overridden involves looking > >> at signatures of same-named methods from all > superclasses, whereas > >> overload resolution in calls considers only > same-named candidates from > >> the same class, before signatures are considered. > >> > >> The interactions with static member functions make > things even more > >> complicated. > >> > >> None of this is syntactically explicit. In > contrast, Modula-3 says > >> either "METHODS" or "OVERRIDES" explicitly. > Moreover, even without > >> these tags, new methods always have signatures, > while overrides do > >> not. > >> > >> In my experience, very few C++ programmers, > outside of compiler > >> writers and language committee members, understand > these semantic > >> rules. And they do predictably get surprised > when something turns out > >> to dispatch when they expected it not to or vice > versa. When this > >> happens, rather than figure the language out, they > just make a note to > >> self to use some coding convention that avoids > getting anywhere close, > >> e.g., never using the same name for different > methods, only for > >> overrides. (Well, OK, that's probably a good > practice anyway, but you > >> see my point, I think.) > >> > >> > >> > >>> Mika > >>> > >>> > >>> Hendrik Boom writes: > >>> > >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, > Hendrik Boom wrote: > >>>> > >>>>> On Tue, Jul 19, 2011 at 07:11:05AM > -0700, Mika Nystrom wrote: > >>>>> > >>>>>> Sorry I'm being confusing here. > >>>>>> > >>>>>> The code is right but I think your > question is a bit confusing. > >>>>>> > >>>>>> With your init example I don't > think you're talking about an overridden > >>>>>> init method but a shadowed > method. > >>>>>> > >>>>> > >>>>> A 'shadowed' method. Is that > what you call what's essentially a new > >>>>> method that happens to have the same > name? Just like the way a variable > >>>>> in a nested block that has the same > name as one in an outer block would > >>>>> be a new variable (I'm not sure Modula > 3 allows this, the way C and the > >>>>> Algols do; I find it leads to > confusing code). > >>>>> > >>>>> Init is the one I've seen explained in > documentation. It's not what I > >>>>> want, because that trick provides no > inheritance. > >>>>> > >>>>> You can't call an overridden > method > >>>>>> through the widening trick, but > you *can* call a shadowed method like > >>>>>> that. > >>>>>> > >>>>>> Mika > >>>>>> > >>>>>> Mika Nystrom writes: > >>>>>> > >>>>>>> > >>>>>>> TYPE A = OBJECT METHODS m(xxx) > END; > >>>>>>> > >>>>>>> TYPE B = A OBJECT METHODS > m(xxx) END; > >>>>>>> > >>>>>> > >>>>> This is, if I understand the > terminology, a declaratin of m as a shadowd > >>>>> method. It's not what I want, > because I intend that under normal > >>>>> circumstances, if an B object is used > in a context where its static type > >>>>> is known as A, I still want the normal > overriding mechanism to ensure > >>>>> that B's m is the one called. > >>>>> > >>>>> I mean something like > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := ... > END; > >>>>> > >>>>> > >>>>>>> b := NEW(B); > >>>>>>> > >>>>>>> A.m(b,xxx) > >>>>>>> > >>>>>> > >>>>> So this is a way to specifically get > the m that belongs with A? Will > >>>>> this work with the way I want to > define B and m? > >>>>> > >>>>> as in > >>>>> > >>>>> TYPE A = OBJECT METHODS m(xxx) := bar > END; > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := foo > END; > >>>>> > >>>>> PROCEDURE foo(self : B, ....) = > >>>>> BEGIN > >>>>> ... > >>>>> ... > >>>>> A.m(self, > ...) (* and this ends up calling bar? *) > >>>>> ... > >>>>> END foo; > >>>>> > >>>> > >>>> Well. I tried my version, and it > works. Thanks for the advice. > >>>> > >>>> -- hendrik > >>>> > >>>> > >>>>> > >>>>>>> Mika > >>>>>>> > >>>>>>> Hendrik Boom writes: > >>>>>>> > >>>>>>>> I have a module containing > a parent class, and another containing a > >>>>>>>> child class. > >>>>>>>> > >>>>>>>> The parent class contains > a method 'foo', which is to be overridden > >>>>>>>> in > >>>>>>>> the child class. > >>>>>>>> > >>>>>>>> But in implementing 'foo' > in the child class I want to call the > >>>>>>>> parent's > >>>>>>>> > >>>>>>> > >>>> method. > >>>>>>>> > >>>>>>>> Now with the method 'init' > there's a trick where in the child's init, > >>>>>>>> you WIDEN self to the > parent's type and then call its init. > >>>>>>>> This works because 'init' > isn't overridden in an OVERRIDES clause, > >>>>>>>> but is defined as a new > method that happens to have the same name. > >>>>>>>> > >>>>>>>> Is there any way to do > this with 'foo', where the whole point is that > >>>>>>>> it be an overridden method > and not a new one? > >>>>>>>> > >>>>>>>> Do I have to do something > like covertly exporting the PROCEDURE that > >>>>>>>> implements 'foo' in the > parent's module so that it can be called > >>>>>>>> directly? That would seem > to be a violation of modular design. Or is > >>>>>>>> violating modular design > exactly what I'm really trying to do here? > >>>>>>>> > >>>>>>>> -- hendrik > >>>>>>>> > >>>>>>> > >>> > > > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/html; charset=ISO-8859-1 > >Content-Transfer-Encoding: quoted-printable > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx)=A0 w= > >here that A is a type

I just > compiled it and it works fine but its a= > > syntactic subtlety that I have sadly been > unaware.

Regards Peter >> > >
On Thu, Jul > 21, 2011 at 2:18 AM, Rodney M. B= > >ates < href=3D"mailto:rodney_bates at lcwb.coop">rodney= > >_bates at lcwb.coop> > wrote:
> style=3D"border-left: 1px solid rgb(204, 204, 204); > margin: 0pt 0pt 0pt 0.= > >8ex; padding-left: 1ex;"> > >
> >
> >On 07/20/2011 02:44 AM, Mika Nystrom wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Right, a shadowed method is a new method of the same > name, just like
> >Algol block structure. =A0An overridden method is a > different binding for >r> > >the same method. =A0If you override a method, you > can't call the old on= > >e
> >without using the special A.T.m(a,...) syntax, since > there's no binding= > >
> >for the old one within the type record for your object. > =A0The A.T.m(...) >r> > >syntax works whether the method is shadowed or > overridden. =A0The widening<= > >br> > >only works for shadowed methods.
> >
> >The clever thing is that the method dispatch is based > on the known type
> >of the object within the context that the method is > called, not where the >r> > >object type is declared.
> >
> >This distinction between overriding and shadowing I > think is one of the
> >most brilliant aspects of Modula-3: it avoids the > problem that you
> >create an unwanted method override by adding a new > method of the same name<= > >br> > >(whether in a supertype or a subtype).
> >
> >
> >This is probably my single favorite example of how C++ > is badly
> >designed for practical programming and, more generally, > why syntactic
> >explicitness is important.
> >
> >C++ has both overrides and new methods, but it is > *very* hard for a
> >programmer to see the difference. =A0Syntactically, > they look identical. >> > >
> >For a member function declaration to be an override, > you need:
> >1) It has the same simple name as the > original.
> >2) It has an equivalent signature to the > original.
> >3) The original is 'virtual', which in this > context means overridab= > >le.
> >
> >Equivalence of signatures is complicated, as there are > several rules
> >about selected ways they can differ and still be > equivalent. =A0For
> >example, int *p and int p[] are equivalent. =A0There > can be overloaded
> >(same name, different signatures) original methods, > from the same or
> >different superclasses, to be considered. =A0And then > this allows what
> >would, I suppose, be called "overloaded > overrides", as well as a = > >mix
> >of overloaded new methods and overrides, all with the > same name.
> >
> >'virtual' has at least two very different > meanings, one relevant he= > >re
> >and one regarding repeated inheritance over multiple > paths. =A0The
> >virtual property can come from anywhere in the > inheritance hierarchy,
> >and can change between the original method declaration > and the
> >subclass we are trying to read.
> >
> >Shadowing can also involve signature equivalence as > well as name
> >equality. =A0AFAIK, you can't shadow with the same > name and signature,<= > >br> > >if the relevant inherited method is virtual. =A0But if > not, a same-name, >> > >signature-equivalent member function is a > shadow.
> >
> >Meanwhile, linking up to a precursor to be overridden > involves looking
> >at signatures of same-named methods from all > superclasses, whereas
> >overload resolution in calls considers only same-named > candidates from
> >the same class, before signatures are > considered.
> >
> >The interactions with static member functions make > things even more
> >complicated.
> >
> >None of this is syntactically explicit. =A0In contrast, > Modula-3 says
> >either "METHODS" or > "OVERRIDES" explicitly. =A0Moreover= > >, even without
> >these tags, new methods always have signatures, while > overrides do
> >not.
> >
> >In my experience, very few C++ programmers, outside of > compiler
> >writers and language committee members, understand > these semantic
> >rules. =A0And they do predictably get surprised when > something turns out >> > >to dispatch when they expected it not to or vice versa. > =A0When this
> >happens, rather than figure the language out, they just > make a note to
> >self to use some coding convention that avoids getting > anywhere close,
> >e.g., never using the same name for different methods, > only for
> >overrides. (Well, OK, that's probably a good > practice anyway, but you >r> > >see my point, I think.)
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> > =A0 =A0 =A0Mika
> >
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Sorry I'm being confusing here.
> >
> >The code is right but I think your question is a bit > confusing.
> >
> >With your init example I don't think you're > talking about an overri= > >dden
> >init method but a shadowed method.
> >
> >
> >A 'shadowed' method. =A0Is that what you call > what's essentiall= > >y a new
> >method that happens to have the same name? =A0Just like > the way a variable<= > >br> > >in a nested block that has the same name as one in an > outer block would
> >be a new variable (I'm not sure Modula 3 allows > this, the way C and the= > >
> >Algols do; I find it leads to confusing > code).
> >
> >Init is the one I've seen explained in > documentation. =A0It's =A0no= > >t what I
> >want, because that trick provides no > inheritance.
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >You can't call an overridden method
> >through the widening trick, but you *can* call a > shadowed method like
> >that.
> >
> > =A0 =A0 =A0Mika
> >
> >Mika Nystrom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >TYPE A =3D OBJECT METHODS m(xxx) END;
> >
> >TYPE B =3D A OBJECT METHODS m(xxx) END;
> >
> >
> >This is, if I understand the terminology, a declaratin > of m as a shadowd >> > >method. =A0It's not what I want, because I > =A0intend that under normal<= > >br> > >circumstances, if an B object is used in a context > where its static type >> > >is known as A, I still want the normal overriding > mechanism to ensure
> >that B's m is the one called.
> >
> >I mean something like
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > END;
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> >b :=3D NEW(B);
> >
> >A.m(b,xxx)
> >
> >
> >So this is a way to specifically get the m that belongs > with A? =A0Will
> >this work with the way I want to define B and > m?
> >
> >as in
> >
> >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > END;
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > END;
> >
> >PROCEDURE foo(self : B, ....) =3D
> >BEGIN
> > =A0 ...
> > =A0 ...
> > =A0 =A0A.m(self, ...) =A0 (* and this ends up calling > bar? *)
> > =A0 ...
> >END foo;
> >
> >
> >Well. I tried my version, and it works. =A0Thanks for > the advice.
> >
> >-- hendrik
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> > =A0 =A0 =A0Mika
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >I have a module containing a parent class, and another > containing a
> >child class.
> >
> >The parent class contains a method 'foo', which > is to be overridden= > > in
> >the child class.
> >
> >But in implementing 'foo' in the child class I > want to call the par= > >ent's
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >method.
> >
> >Now with the method 'init' there's a trick > where in the child&#= > >39;s init,
> >you WIDEN self to the parent's type and then call > its init.
> >This works because 'init' isn't overridden > in an OVERRIDES clau= > >se,
> >but is defined as a new method that happens to have the > same name.
> >
> >Is there any way to do this with 'foo', where > the whole point is th= > >at
> >it be an overridden method and not a new > one?
> >
> >Do I have to do something like covertly exporting the > PROCEDURE that
> >implements 'foo' in the parent's module so > that it can be calle= > >d
> >directly? That would seem to be a violation of modular > design. =A0Or is
> >violating modular design exactly what I'm really > trying to do here?
> >
> >-- hendrik
> >
> >
> >
> >

> > > >--0015174c40fe49b5ad04a88e39c4-- > From dabenavidesd at yahoo.es Thu Jul 21 20:27:05 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 19:27:05 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Message-ID: <1311272825.36025.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: as I see the fact is there is possibly a lot of people who loved Modula- but this is although unprovable or somehow you need to understand the ecology of this languages, the soundness, the everything to affirm that today as is claimed, there is evidence for that, certainly he might have it in it's time, that would explain the long work on oberon Compiler for Modula-3 re usability and polymorphic types support work: http://www.win.tue.nl/lotgevallen/em/bron1.pdf In fact the thesis on that proposed by himself of Groningen student was done in that route (but it was not like the Cardelli's taste, in typability and usability, perhaps the typing issue went too hard to prove by itself, but, nevertheless the type system is quite admirable as for one would expect from them) This is to say, there is quite hard work on that area for the better of the language, but need more investigation, or consolidation, or just proposal, probably based on: http://dissertations.ub.rug.nl/faculties/science/1995/b.laverman/ And other forms in Abadi-Cardelli plus Lampson-Burstall work, and that's a lot to consolidate in a proposal, still somehow doable...: http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/abstracts/src-rr-001.html Probably the best sources of that kind (theoretical not computable): http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-10.pdf http://portal.acm.org/citation.cfm?id=645683.758050&preflayout=flat http://www.cs.man.ac.uk/~david/categories/book/book.pdf I would suggest some machine learning program to match the same types, with a type system like that of Cardelli, if you can prove the later, then you have a point since it's on the same family of Calculus, yet they are quite computable or at least some correspondence where one can built yet another theory of Modula-3 calculi Thanks in advance --- El jue, 21/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" , "Mika Nystrom" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 11:14 > Hi all: > I find this terminology of types and checks and inheritance > big convoluted here (but would allow me this to say we need > a baby toy to plataform independent Modula-3 language or > sort of artifact, but not everything we would want since > there seems to be pieces of work which are undecidable, how > one can create some application of it, it seems odd to try > those for me). > > Although it is better to start with something to do that > and I fact I believe it's already started by a great > computologist, Coenraad Bron with work on Pascal, Modular > pascal at the University of Twente, The Netherlands and > later in Oberon with Modula-3 reusability and typability, at > University of Groningen, The Netherlands, after all, > Coen Bron, worked hard for that. Indeed people there liked > Modula-like languages a lot, which makes sense for yet > another local Prof visit there. > > I don't know many or too much but I believe great computer > scientist came from there as well but certainly is a good > resource of efforts in tools and so for ourselves > > Thanks in advance > > --- El jue, 21/7/11, Mika Nystrom > escribi?: > > > De: Mika Nystrom > > Asunto: Re: [M3devel] calling an overridden method > > Para: "Peter McKinna" > > CC: m3devel at elegosoft.com > > Fecha: jueves, 21 de julio, 2011 02:27 > > Section 6, under "Designators". > > > > Mika > > > > Peter McKinna writes: > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/plain; charset=ISO-8859-1 > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx) > > >where that A is a type > > > > > >I just compiled it and it works fine but its a > > syntactic subtlety that I > > >have sadly been unaware. > > > > > >Regards Peter > > > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates > wrote > > >: > > > > > >> > > >> > > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > > >> > > >>> Right, a shadowed method is a new method > of > > the same name, just like > > >>> Algol block structure. An > overridden > > method is a different binding for > > >>> the same method. If you override a > > method, you can't call the old one > > >>> without using the special A.T.m(a,...) > syntax, > > since there's no binding > > >>> for the old one within the type record > for > > your object. The A.T.m(...) > > >>> syntax works whether the method is > shadowed or > > overridden. The widening > > >>> only works for shadowed methods. > > >>> > > >>> The clever thing is that the method > dispatch > > is based on the known type > > >>> of the object within the context that > the > > method is called, not where the > > >>> object type is declared. > > >>> > > >>> This distinction between overriding and > > shadowing I think is one of the > > >>> most brilliant aspects of Modula-3: it > avoids > > the problem that you > > >>> create an unwanted method override by > adding a > > new method of the same name > > >>> (whether in a supertype or a subtype). > > >>> > > >> > > >> This is probably my single favorite example > of how > > C++ is badly > > >> designed for practical programming and, more > > generally, why syntactic > > >> explicitness is important. > > >> > > >> C++ has both overrides and new methods, but > it is > > *very* hard for a > > >> programmer to see the difference. > > Syntactically, they look identical. > > >> > > >> For a member function declaration to be an > > override, you need: > > >> 1) It has the same simple name as the > original. > > >> 2) It has an equivalent signature to the > > original. > > >> 3) The original is 'virtual', which in this > > context means overridable. > > >> > > >> Equivalence of signatures is complicated, as > there > > are several rules > > >> about selected ways they can differ and still > be > > equivalent. For > > >> example, int *p and int p[] are equivalent. > > There can be overloaded > > >> (same name, different signatures) original > > methods, from the same or > > >> different superclasses, to be considered. > > And then this allows what > > >> would, I suppose, be called "overloaded > > overrides", as well as a mix > > >> of overloaded new methods and overrides, all > with > > the same name. > > >> > > >> 'virtual' has at least two very different > > meanings, one relevant here > > >> and one regarding repeated inheritance over > > multiple paths. The > > >> virtual property can come from anywhere in > the > > inheritance hierarchy, > > >> and can change between the original method > > declaration and the > > >> subclass we are trying to read. > > >> > > >> Shadowing can also involve signature > equivalence > > as well as name > > >> equality. AFAIK, you can't shadow with > the > > same name and signature, > > >> if the relevant inherited method is virtual. > > > But if not, a same-name, > > >> signature-equivalent member function is a > shadow. > > >> > > >> Meanwhile, linking up to a precursor to be > > overridden involves looking > > >> at signatures of same-named methods from all > > superclasses, whereas > > >> overload resolution in calls considers only > > same-named candidates from > > >> the same class, before signatures are > considered. > > >> > > >> The interactions with static member functions > make > > things even more > > >> complicated. > > >> > > >> None of this is syntactically explicit. > In > > contrast, Modula-3 says > > >> either "METHODS" or "OVERRIDES" explicitly. > > Moreover, even without > > >> these tags, new methods always have > signatures, > > while overrides do > > >> not. > > >> > > >> In my experience, very few C++ programmers, > > outside of compiler > > >> writers and language committee members, > understand > > these semantic > > >> rules. And they do predictably get > surprised > > when something turns out > > >> to dispatch when they expected it not to or > vice > > versa. When this > > >> happens, rather than figure the language out, > they > > just make a note to > > >> self to use some coding convention that > avoids > > getting anywhere close, > > >> e.g., never using the same name for > different > > methods, only for > > >> overrides. (Well, OK, that's probably a good > > practice anyway, but you > > >> see my point, I think.) > > >> > > >> > > >> > > >>> Mika > > >>> > > >>> > > >>> Hendrik Boom writes: > > >>> > > >>>> On Tue, Jul 19, 2011 at 01:26:14PM > -0400, > > Hendrik Boom wrote: > > >>>> > > >>>>> On Tue, Jul 19, 2011 at > 07:11:05AM > > -0700, Mika Nystrom wrote: > > >>>>> > > >>>>>> Sorry I'm being confusing > here. > > >>>>>> > > >>>>>> The code is right but I think > your > > question is a bit confusing. > > >>>>>> > > >>>>>> With your init example I > don't > > think you're talking about an overridden > > >>>>>> init method but a shadowed > > method. > > >>>>>> > > >>>>> > > >>>>> A 'shadowed' method. Is > that > > what you call what's essentially a new > > >>>>> method that happens to have the > same > > name? Just like the way a variable > > >>>>> in a nested block that has the > same > > name as one in an outer block would > > >>>>> be a new variable (I'm not sure > Modula > > 3 allows this, the way C and the > > >>>>> Algols do; I find it leads to > > confusing code). > > >>>>> > > >>>>> Init is the one I've seen > explained in > > documentation. It's not what I > > >>>>> want, because that trick provides > no > > inheritance. > > >>>>> > > >>>>> You can't call an > overridden > > method > > >>>>>> through the widening trick, > but > > you *can* call a shadowed method like > > >>>>>> that. > > >>>>>> > > >>>>>> Mika > > >>>>>> > > >>>>>> Mika Nystrom writes: > > >>>>>> > > >>>>>>> > > >>>>>>> TYPE A = OBJECT METHODS > m(xxx) > > END; > > >>>>>>> > > >>>>>>> TYPE B = A OBJECT > METHODS > > m(xxx) END; > > >>>>>>> > > >>>>>> > > >>>>> This is, if I understand the > > terminology, a declaratin of m as a shadowd > > >>>>> method. It's not what I > want, > > because I intend that under normal > > >>>>> circumstances, if an B object is > used > > in a context where its static type > > >>>>> is known as A, I still want the > normal > > overriding mechanism to ensure > > >>>>> that B's m is the one called. > > >>>>> > > >>>>> I mean something like > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > ... > > END; > > >>>>> > > >>>>> > > >>>>>>> b := NEW(B); > > >>>>>>> > > >>>>>>> A.m(b,xxx) > > >>>>>>> > > >>>>>> > > >>>>> So this is a way to specifically > get > > the m that belongs with A? Will > > >>>>> this work with the way I want to > > define B and m? > > >>>>> > > >>>>> as in > > >>>>> > > >>>>> TYPE A = OBJECT METHODS m(xxx) := > bar > > END; > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > foo > > END; > > >>>>> > > >>>>> PROCEDURE foo(self : B, ....) = > > >>>>> BEGIN > > >>>>> ... > > >>>>> ... > > >>>>> A.m(self, > > ...) (* and this ends up calling bar? > *) > > >>>>> ... > > >>>>> END foo; > > >>>>> > > >>>> > > >>>> Well. I tried my version, and it > > works. Thanks for the advice. > > >>>> > > >>>> -- hendrik > > >>>> > > >>>> > > >>>>> > > >>>>>>> Mika > > >>>>>>> > > >>>>>>> Hendrik Boom writes: > > >>>>>>> > > >>>>>>>> I have a module > containing > > a parent class, and another containing a > > >>>>>>>> child class. > > >>>>>>>> > > >>>>>>>> The parent class > contains > > a method 'foo', which is to be overridden > > >>>>>>>> in > > >>>>>>>> the child class. > > >>>>>>>> > > >>>>>>>> But in implementing > 'foo' > > in the child class I want to call the > > >>>>>>>> parent's > > >>>>>>>> > > >>>>>>> > > >>>> method. > > >>>>>>>> > > >>>>>>>> Now with the method > 'init' > > there's a trick where in the child's init, > > >>>>>>>> you WIDEN self to > the > > parent's type and then call its init. > > >>>>>>>> This works because > 'init' > > isn't overridden in an OVERRIDES clause, > > >>>>>>>> but is defined as a > new > > method that happens to have the same name. > > >>>>>>>> > > >>>>>>>> Is there any way to > do > > this with 'foo', where the whole point is that > > >>>>>>>> it be an overridden > method > > and not a new one? > > >>>>>>>> > > >>>>>>>> Do I have to do > something > > like covertly exporting the PROCEDURE that > > >>>>>>>> implements 'foo' in > the > > parent's module so that it can be called > > >>>>>>>> directly? That would > seem > > to be a violation of modular design. Or is > > >>>>>>>> violating modular > design > > exactly what I'm really trying to do here? > > >>>>>>>> > > >>>>>>>> -- hendrik > > >>>>>>>> > > >>>>>>> > > >>> > > > > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/html; charset=ISO-8859-1 > > >Content-Transfer-Encoding: quoted-printable > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx)=A0 w= > > >here that A is a type

I just > > compiled it and it works fine but its a= > > > syntactic subtlety that I have sadly been > > unaware.

Regards Peter > >> > > >
On Thu, > Jul > > 21, 2011 at 2:18 AM, Rodney M. B= > > >ates < > href=3D"mailto:rodney_bates at lcwb.coop">rodney= > > >_bates at lcwb.coop> > > wrote:
> > style=3D"border-left: 1px solid rgb(204, 204, > 204); > > margin: 0pt 0pt 0pt 0.= > > >8ex; padding-left: 1ex;"> > > >
> > >
> > >On 07/20/2011 02:44 AM, Mika Nystrom > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Right, a shadowed method is a new method of the > same > > name, just like
> > >Algol block structure. =A0An overridden method is > a > > different binding for > >r> > > >the same method. =A0If you override a method, you > > can't call the old on= > > >e
> > >without using the special A.T.m(a,...) syntax, > since > > there's no binding= > > >
> > >for the old one within the type record for your > object. > > =A0The A.T.m(...) > >r> > > >syntax works whether the method is shadowed or > > overridden. =A0The widening<= > > >br> > > >only works for shadowed methods.
> > >
> > >The clever thing is that the method dispatch is > based > > on the known type
> > >of the object within the context that the method > is > > called, not where the > >r> > > >object type is declared.
> > >
> > >This distinction between overriding and shadowing > I > > think is one of the
> > >most brilliant aspects of Modula-3: it avoids the > > problem that you
> > >create an unwanted method override by adding a > new > > method of the same name<= > > >br> > > >(whether in a supertype or a subtype).
> > >
> > >
> > >This is probably my single favorite example of how > C++ > > is badly
> > >designed for practical programming and, more > generally, > > why syntactic
> > >explicitness is important.
> > >
> > >C++ has both overrides and new methods, but it is > > *very* hard for a
> > >programmer to see the difference. > =A0Syntactically, > > they look identical. > >> > > >
> > >For a member function declaration to be an > override, > > you need:
> > >1) It has the same simple name as the > > original.
> > >2) It has an equivalent signature to the > > original.
> > >3) The original is 'virtual', which in this > > context means overridab= > > >le.
> > >
> > >Equivalence of signatures is complicated, as there > are > > several rules
> > >about selected ways they can differ and still be > > equivalent. =A0For
> > >example, int *p and int p[] are equivalent. > =A0There > > can be overloaded
> > >(same name, different signatures) original > methods, > > from the same or
> > >different superclasses, to be considered. =A0And > then > > this allows what
> > >would, I suppose, be called "overloaded > > overrides", as well as a = > > >mix
> > >of overloaded new methods and overrides, all with > the > > same name.
> > >
> > >'virtual' has at least two very different > > meanings, one relevant he= > > >re
> > >and one regarding repeated inheritance over > multiple > > paths. =A0The
> > >virtual property can come from anywhere in the > > inheritance hierarchy,
> > >and can change between the original method > declaration > > and the
> > >subclass we are trying to read.
> > >
> > >Shadowing can also involve signature equivalence > as > > well as name
> > >equality. =A0AFAIK, you can't shadow with the > same > > name and signature,<= > > >br> > > >if the relevant inherited method is virtual. > =A0But if > > not, a same-name, > >> > > >signature-equivalent member function is a > > shadow.
> > >
> > >Meanwhile, linking up to a precursor to be > overridden > > involves looking
> > >at signatures of same-named methods from all > > superclasses, whereas
> > >overload resolution in calls considers only > same-named > > candidates from
> > >the same class, before signatures are > > considered.
> > >
> > >The interactions with static member functions > make > > things even more
> > >complicated.
> > >
> > >None of this is syntactically explicit. =A0In > contrast, > > Modula-3 says
> > >either "METHODS" or > > "OVERRIDES" explicitly. > =A0Moreover= > > >, even without
> > >these tags, new methods always have signatures, > while > > overrides do
> > >not.
> > >
> > >In my experience, very few C++ programmers, > outside of > > compiler
> > >writers and language committee members, > understand > > these semantic
> > >rules. =A0And they do predictably get surprised > when > > something turns out > >> > > >to dispatch when they expected it not to or vice > versa. > > =A0When this
> > >happens, rather than figure the language out, they > just > > make a note to
> > >self to use some coding convention that avoids > getting > > anywhere close,
> > >e.g., never using the same name for different > methods, > > only for
> > >overrides. (Well, OK, that's probably a good > > practice anyway, but you > >r> > > >see my point, I think.)
> > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > > =A0 =A0 =A0Mika
> > >
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik > Boom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika > Nystrom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Sorry I'm being confusing here.
> > >
> > >The code is right but I think your question is a > bit > > confusing.
> > >
> > >With your init example I don't think you're > > talking about an overri= > > >dden
> > >init method but a shadowed method.
> > >
> > >
> > >A 'shadowed' method. =A0Is that what you call > > what's essentiall= > > >y a new
> > >method that happens to have the same name? =A0Just > like > > the way a variable<= > > >br> > > >in a nested block that has the same name as one in > an > > outer block would
> > >be a new variable (I'm not sure Modula 3 allows > > this, the way C and the= > > >
> > >Algols do; I find it leads to confusing > > code).
> > >
> > >Init is the one I've seen explained in > > documentation. =A0It's =A0no= > > >t what I
> > >want, because that trick provides no > > inheritance.
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >You can't call an overridden method
> > >through the widening trick, but you *can* call a > > shadowed method like
> > >that.
> > >
> > > =A0 =A0 =A0Mika
> > >
> > >Mika Nystrom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >TYPE A =3D OBJECT METHODS m(xxx) END;
> > >
> > >TYPE B =3D A OBJECT METHODS m(xxx) END;
> > >
> > >
> > >This is, if I understand the terminology, a > declaratin > > of m as a shadowd > >> > > >method. =A0It's not what I want, because I > > =A0intend that under normal<= > > >br> > > >circumstances, if an B object is used in a > context > > where its static type > >> > > >is known as A, I still want the normal overriding > > mechanism to ensure
> > >that B's m is the one called.
> > >
> > >I mean something like
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > > END;
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > >b :=3D NEW(B);
> > >
> > >A.m(b,xxx)
> > >
> > >
> > >So this is a way to specifically get the m that > belongs > > with A? =A0Will
> > >this work with the way I want to define B and > > m?
> > >
> > >as in
> > >
> > >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > > END;
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > > END;
> > >
> > >PROCEDURE foo(self : B, ....) =3D
> > >BEGIN
> > > =A0 ...
> > > =A0 ...
> > > =A0 =A0A.m(self, ...) =A0 (* and this ends up > calling > > bar? *)
> > > =A0 ...
> > >END foo;
> > >
> > >
> > >Well. I tried my version, and it works. =A0Thanks > for > > the advice.
> > >
> > >-- hendrik
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > > =A0 =A0 =A0Mika
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >I have a module containing a parent class, and > another > > containing a
> > >child class.
> > >
> > >The parent class contains a method 'foo', which > > is to be overridden= > > > in
> > >the child class.
> > >
> > >But in implementing 'foo' in the child class I > > want to call the par= > > >ent's
> > > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >method.
> > >
> > >Now with the method 'init' there's a trick > > where in the child&#= > > >39;s init,
> > >you WIDEN self to the parent's type and then call > > its init.
> > >This works because 'init' isn't overridden > > in an OVERRIDES clau= > > >se,
> > >but is defined as a new method that happens to > have the > > same name.
> > >
> > >Is there any way to do this with 'foo', where > > the whole point is th= > > >at
> > >it be an overridden method and not a new > > one?
> > >
> > >Do I have to do something like covertly exporting > the > > PROCEDURE that
> > >implements 'foo' in the parent's module so > > that it can be calle= > > >d
> > >directly? That would seem to be a violation of > modular > > design. =A0Or is
> > >violating modular design exactly what I'm really > > trying to do here?
> > >
> > >-- hendrik
> > > >
> > >
> > >
> > >

> > > > > >--0015174c40fe49b5ad04a88e39c4-- > > > From schlepptop at henning-thielemann.de Sun Jul 24 20:51:17 2011 From: schlepptop at henning-thielemann.de (Henning Thielemann) Date: Sun, 24 Jul 2011 20:51:17 +0200 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> References: <4E19AA04.1060207@lcwb.coop> Message-ID: <4E2C69A5.9020607@henning-thielemann.de> On 10.07.2011 15:32, Rodney M. Bates wrote: > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what I call > _algorithmically statically typed_. By this, I mean, informally, that > there is a natural type for the variable that can be inferred from its > assignments and uses. Moreover, this is a static property, i.e., > independent of the program's inputs, and thus can be inferred from the > code alone. By the way, I remember the HiSoft Basic compiler on ZX spectrum that allowed you to run BASIC programs in a test mode, where the types of the variables were determined. In a sense (ZX Spectrum) BASIC is statically typed, since names of string variables must end with '$' and all alphanumeric variable names denote floating point numbers. The HiSoft Basic compiler had a richer set of numeric types: signed and unsigned 8-bit and 16-bit numbers and floating point numbers. In the test run the compiler determined for every variable the most restrictive type that covers all numbers seen during the program execution. From peter.mckinna at gmail.com Mon Jul 25 01:30:23 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Mon, 25 Jul 2011 09:30:23 +1000 Subject: [M3devel] Coverage option Message-ID: How do you get the -Z option to work? It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. Regards Peter. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Mon Jul 25 01:42:12 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:42:12 -0400 Subject: [M3devel] Coverage option In-Reply-To: References: Message-ID: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > How do you get the -Z option to work? > > It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. > > Regards Peter. From hosking at cs.purdue.edu Mon Jul 25 01:44:42 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:44:42 -0400 Subject: [M3devel] Coverage option In-Reply-To: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> References: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> Message-ID: <33D960BB-DB9F-42DD-A2C3-7E62A0D682CF@cs.purdue.edu> On second thought, perhaps I mis-spoke. I was thinking of profiling. I'm not sure when coverage instrumentation last worked. On Jul 24, 2011, at 7:42 PM, Tony Hosking wrote: > It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. > > On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > >> How do you get the -Z option to work? >> >> It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. >> >> Regards Peter. > From dabenavidesd at yahoo.es Thu Jul 28 01:50:29 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 28 Jul 2011 00:50:29 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E2C69A5.9020607@henning-thielemann.de> Message-ID: <1311810629.86820.YahooMailClassic@web29704.mail.ird.yahoo.com> Hi all: Thinking about this specific issues, it is somehow related to the idea of REPL (not simple CLI). http://en.wikipedia.org/wiki/REPL http://www.informatik-forum.at/archive/index.php/t-76842.html BTW there I know of a Basic-like interpreter in Modula-3 but not sure what it conditions is (for managing or graphic items in a screen). The most related thing I have heard of is of the way the programmer hint the compiler in Fortran (as M3 old friend told me, sorry buit I refuse to translate just for that in spanish about type inference: "... en fortran se hac?a por la letra inicial. luego declarando explicitamente el tipo. luego de acuerdo a las expresiones en que se usan las variables, considerando los diferentes operadores. otros ? ..."), it basically explains the fortran accepted initial letter variable names and types for it's expressions, e.g records and then accordingly to its operators. though typing in type finite number language is somehow easier (sic), certainly you can write a compiler for a language with dynamic types I believe or at least bootstrap from it (or anyone else). Thus is possible to believe you can write some sort of compiler a.k.a baby Modula-3 sort of evaluator in it self (still functional there should be somehow a way to proceed to be imperative at later stage) or at least express it's type checker in an untyped one, such core could later expressed for the rest of the language, such an imperative one given its denotational semantics is the one of the "Core" language which there are evaluators one of them Athena which is metatheory tool ftp://www.ai.mit.edu/pub/koud/athena.ps for defining such systems and check in terms of its denotational semantics its soundness, and what it makes to modular programming languages, which I believe the most complex part but in terms of functional languages doable at most of it, its type checker and if so compose algebraically it's definitions like a computer symbolic algebra system such as Maple, or that sort). This result is what I would call Modula-3 calculi and derive other calculus such as Abadi-Cardelli "A Theory of Objects", such a system to evolve naturally or artificially the language without putting at risk it's most complex abilities checked, theorems, etc, harder properties of it (for instance construct or compact the valid idiom of ESC/M3, etc). Such a system would allows us to define the type system and its "corresponding" algebraic symbolic system (some work is already done), similar experiences Compuserve had whit a Modula-like algebraic symbolic system called AML for Algebraic Manipulation Language (I wouldn't be surprised if its type system is the one of Modula-3 Module system, given that it's is one of the most important for algebraic symbolic systems, according to Dr. Cardelli Modula-3's one is vastly superior of what it most of them do currently, yet it's hard to type check at compile time like Generics or). Athenas's author argues some of the unsoundness in the Simplify Theorem prover came from the fact the first order logic (predicate calculus) is undecidable, and that may become a certain amount of time to check a given procedure, but with other logics, it might be less undecidable (if you can prove somehow that can switch it's decidable space to be equally or near e.g enough typable for that matters which is hard but AFAIK is not proved but what many somehow try to do manually and do some relatively good work at least of some complexity, but certainly they are not interested in unsound or undecidable cases as most of them are, whatever is worse, as Dr. Greg Nelson said "P-Space" hard to reason about it (certainly not the case for his data abstraction and information hiding valid module idiom), but nevertheless quite advanced work for such a system. Thanks in advance --- El dom, 24/7/11, Henning Thielemann escribi?: > De: Henning Thielemann > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: domingo, 24 de julio, 2011 13:51 > On 10.07.2011 15:32, Rodney M. Bates > wrote: > > > 1) Dynamic typing is seldom either needed or used. > > > > The majority of variables (1) in sensible programs are > what I call > > _algorithmically statically typed_. By this, I mean, > informally, that > > there is a natural type for the variable that can be > inferred from its > > assignments and uses. Moreover, this is a static > property, i.e., > > independent of the program's inputs, and thus can be > inferred from the > > code alone. > > By the way, I remember the HiSoft Basic compiler on ZX > spectrum that allowed you to run BASIC programs in a test > mode, where the types of the variables were determined. In a > sense (ZX Spectrum) BASIC is statically typed, since names > of string variables must end with '$' and all alphanumeric > variable names denote floating point numbers. The HiSoft > Basic compiler had a richer set of numeric types: signed and > unsigned 8-bit and 16-bit numbers and floating point > numbers. In the test run the compiler determined for every > variable the most restrictive type that covers all numbers > seen during the program execution. > From mvfranz at gmail.com Fri Jul 1 23:41:17 2011 From: mvfranz at gmail.com (Michael Franz) Date: Fri, 1 Jul 2011 17:41:17 -0400 Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Message-ID: Hi, A co-worker pointed out this benchmark http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php . I use Scala at work, and have used Java for years. I would be interested in the outcome of Modula 3 port. Unfortunately I don't have enough experience with M3 to do it myself (guess it could be a learning experience, but then I can complain about a lack of time). I also follow the development of D and there is a port going on in their community. http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html Michael From dabenavidesd at yahoo.es Sat Jul 2 02:22:57 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 2 Jul 2011 01:22:57 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309566177.28834.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > From dabenavidesd at yahoo.es Mon Jul 4 03:51:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 02:51:24 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Mon Jul 4 15:23:26 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:23:26 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> References: <1309744284.24644.YahooMailClassic@web29717.mail.ird.yahoo.com> Message-ID: <20110704132326.GA24268@topoi.pooq.com> On Mon, Jul 04, 2011 at 02:51:24AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > it > would mean to compete in such a way in a super computer an alternative > to run without garbage collection (not unsafe but ESC/Modula-3 RTError > and RTCollector disabled but for safe automatically collected objects, > again if we are strictly speaking of a naive implementation algorithm, > if parallelization is allowed under recursive or nested paradigms we > are set to compete too but not absolutely). > I mean, given the effort > they took to run the compiler and tune it for other languages and would > get same compiler effort plus ESC modelling to subsume the collector > for perhaps dynamic scripting like say e.g Obliq, we don't want to > compete with Obliq, but if we do I guess we can't compile JIT JIT. This is a missing feature in Modula 3 -- it would probably need to be implemented as a library, and it would be a huge implementatino project. It would involve writing -- or finding -- code generators for many maching archtectures, and it would require careful integratio with the garbage collector. Both the data structures built by gennerated code and the generated code itself would have to be garbage-collectible. The JIT coder would have to accept relatively low-level instructions and produce in-memory object code. Ideally, unless you use the UNSAFE JIT, it would have to perform suitable static and run-time checking on and in the code it's generating. People implementing currently interpreted languages would have the option of calling this JIT coder instead. I've been tinkering from time to time with bits of code in this direction, but it's a huge job. And, in my opinion, LLVM doesn't really do this right. C-- comes a lot closer, but it isn't a JIT. Maybe something like it could be? -- hendrik From hendrik at topoi.pooq.com Mon Jul 4 15:39:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 09:39:17 -0400 Subject: [M3devel] concurrency Message-ID: <20110704133917.GA24338@topoi.pooq.com> There was a lot of discussion on problems with concurrency when we wen to pthreads implementation so that we could make use of multiple CPUs. After a while disuccion sttopped. Have these problems all been resolved yet? If I recall correctly, there was a problem with one program, cvsup, using fork as well as threads. This worked with green threads, but not with pthreads. Has cvsup been rehabilitated in some way? How do pthreads interact with the garbage collector? Or are there several garbage collectors with different interaction modalities? -- hendrik From dabenavidesd at yahoo.es Mon Jul 4 19:08:54 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 4 Jul 2011 18:08:54 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110704132326.GA24268@topoi.pooq.com> Message-ID: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: yes, this sounds very good, there is certainly and ability developed for the Obliq (Abadi Cardelli) obejct calculus (a subset which by itself, called **imp**?): http://lucacardelli.name/Topics/TheoryOfObjects/Software.html http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false In last of the above it is referred in first of both of them Obliq and Modula-3 mention **imp**? Chapter 10 and its typ einference algorithm in [1] The actual approach to compile in an interpreted abstract machine way is through a machien called ZINC (acronym for Zync is not CAML), see: http://www.brics.dk/RS/98/55/ or the its previous version : http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html They show the equivalent correspondence between source and abstract machine using decompilation is small steps. Both of their authors extend the Object calculus to an concurrent one, see [3] in: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 as for I know the C-- FE is written in CAML, which is interesting, and there is a type inference algorithm implementation in Modula-3 of ML (Lazy ML via a Horn-logic and intermediate representation see [2]) for yet another language (graphical called cube, see [2] or a featured article in Dr Dobb's journal, here: http://drdobbs.com/article/print?articleId=184409677&siteSectionName= thesis manuscript here: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf ) So this time I'm happy to be wrong, we can do indeed JIT but we should measure the cost (as for type inference could for **imp**? run O(n^3) and currently run O(n^5), it might be necessary do decompiling plus naturally compiling and forth inc ase of NetObj, etc Thanks in advance [1] T. Zhao, ?Type matching and type inference for object-oriented systems,? Purdue University, 2002. [2] M.-A. Najork, ?Programming in three dimensions,? University of Illinois at Urbana-Champaign, 1994. [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object Calculus: Reduction and Typing,? 1998. --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 08:23 > On Mon, Jul 04, 2011 at 02:51:24AM > +0100, Daniel Alejandro Benavides D. wrote: > > Hi all: > > it > > would mean to compete in such a way in a super > computer an alternative > > to run without garbage collection (not unsafe but > ESC/Modula-3 RTError > > and RTCollector disabled but for safe automatically > collected objects, > > again if we are strictly speaking of a naive > implementation algorithm, > > if parallelization is allowed under recursive or > nested paradigms we > > are set to compete too but not absolutely). > > I mean, given the effort > > they took to run the compiler and tune it for other > languages and would > > get same compiler effort plus ESC modelling to subsume > the collector > > for perhaps dynamic scripting like say e.g Obliq, we > don't want to > > compete with Obliq, but if we do I guess we can't > compile JIT > > JIT. > > This is a missing feature in Modula 3 -- it would probably > need to > be implemented as a library, and it would be a huge > implementatino > project. It would involve writing -- or finding -- > code generators for > many maching archtectures, and it would require careful > integratio with > the garbage collector. Both the data structures built > by gennerated > code and the generated code itself would have to be > garbage-collectible. > > The JIT coder would have to accept relatively low-level > instructions and > produce in-memory object code. Ideally, unless you > use the UNSAFE JIT, > it would have to perform suitable static and run-time > checking on and in the code it's generating. > > People implementing currently interpreted languages would > have the > option of calling this JIT coder instead. > > I've been tinkering from time to time with bits of code in > this > direction, but it's a huge job. And, in my opinion, > LLVM doesn't really > do this right. C-- comes a lot closer, but it isn't a > JIT. Maybe > something like it could be? > > -- hendrik > From dragisha at m3w.org Tue Jul 5 00:34:35 2011 From: dragisha at m3w.org (=?utf-8?Q?Dragi=C5=A1a_Duri=C4=87?=) Date: Tue, 5 Jul 2011 00:34:35 +0200 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <20110628155441.GA3406@topoi.pooq.com> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> Message-ID: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Thank you for a pointer and also for your effort. But, not - thank you :). I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. dd On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > Start with "How To Design Programs" (often called HtDP), which > introduces Scheme, not Modula 3. It's simple, direct, and gets to the > point quite quickly and elegantly. From dabenavidesd at yahoo.es Tue Jul 5 01:47:45 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:47:45 +0100 (BST) Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <1309823265.84459.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I believe you are correct, this things never worked for sure here (after some work here, could never shown that way for other CS tutors). Neither will work at least someone like you put the best points over them, I guess we shall see how about that in terms of ESC/Modula-3 logics, I guess the most important example of them was precisely MIT courseware of Butler Lampson (Turing Award) did most of the material from ground up, but still has influence in the way they teach there. He called its teaching language SPEC (many other ollow this route and called their later SPEC/bla..) As I said I have no proof of this, but given this 1991 to 2006 experience, I believe no other but they know how did that work, at least for them. http://research.microsoft.com/en-us/um/people/blampson/48-POCScourse/48-POCS2006Abstract.html Let me know, what do you think, cpecially I bet this approach is used in rather hi-tech schools, thanks but never knew after many years later we should do that, but who knows, maybe there should be somebody who is ablet to pay the price to understand this better. Thanks in advance --- El lun, 4/7/11, Dragi?a Duri? escribi?: > De: Dragi?a Duri? > Asunto: Re: [M3devel] M3devel Digest, Vol 56, Issue 29 > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 17:34 > Thank you for a pointer and also for > your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we > learned programming (my path was Pascal, BASIC, 6502, > GraFORTH, Z80, C, Modula-2....) without > functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking > their "customers" with ML now. It's like "Ok, we made a big > mistake, but this is so obviously different it' also > obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. > Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper > with lots of dialects too... It maybe works for someone (or > someones) but I know a lot of excellent programers who never > met functional. > > dd > > On Jun 28, 2011, at 5:54 PM, Hendrik Boom wrote: > > > Start with "How To Design Programs" (often called > HtDP), which > > introduces Scheme, not Modula 3. It's simple, > direct, and gets to the > > point quite quickly and elegantly. > > From dabenavidesd at yahoo.es Tue Jul 5 01:58:28 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 00:58:28 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1309823908.72415.YahooMailClassic@web29715.mail.ird.yahoo.com> Hi all: later, Dr Xavier Leroy developed a type-theoretical modular module system for "core-ML" and "small-C" or "core-C". He mentions important influence of Cardelli's Quest (a super set of Girard Fw) language machine on it: http://pauillac.inria.fr/~xleroy/modmod/ http://lucacardelli.name/Papers/QuestSem.pdf http://archive.numdam.org/ARCHIVE/ITA/ITA_1994__28_6/ITA_1994__28_6_513_0/ITA_1994__28_6_513_0.pdf This was the case also for an extended version [1] in: http://www.cs.cmu.edu/~rwh/papers/sharing/popl94.ps I kept looking for something like that, perhaps the most related concept is a small-C, for 8080 computers if we are able to match this two subsets something may come of it with C-- approach, again, the most simple of it may come in it: http://en.wikipedia.org/wiki/Small-C I guess a good combination of features of this calculus might give us a good sign of hope here [1] further work came to semidecidable type inference, it could be that some rework could make things smarter: http://www.cs.cmu.edu/~rwh/theses/lillibridge.pdf Thanks in advance [1] R. Harper and M. Lillibridge, ?A Type-Theoretic Approach to Higher-Order Modules with Sharing,? 1994. --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 12:08 > Hi all: > yes, this sounds very good, there is certainly and ability > developed for the Obliq (Abadi Cardelli) obejct calculus (a > subset which by itself, called **imp**?): > http://lucacardelli.name/Topics/TheoryOfObjects/Software.html > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA2#v=onepage&q&f=false > > http://books.google.com/books?id=4xT3LgCPP5UC&lpg=PP1&pg=PA3#v=onepage&q&f=false > > In last of the above it is referred in first of both of > them Obliq and Modula-3 mention **imp**? Chapter 10 and its > typ einference algorithm in [1] > > The actual approach to compile in an interpreted abstract > machine way is through a machien called ZINC (acronym for > Zync is not CAML), see: > > http://www.brics.dk/RS/98/55/ > > or the its previous version : > http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-429.html > > They show the equivalent correspondence between source > and abstract machine using decompilation is small > steps. > > Both of their authors extend the Object calculus to an > concurrent one, see [3] in: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1159 > > as for I know the C-- FE is written in CAML, which is > interesting, and there is a type inference algorithm > implementation in Modula-3 of ML (Lazy ML via a Horn-logic > and intermediate representation see [2]) for yet another > language (graphical called cube, see [2] or a featured > article in Dr Dobb's journal, here: > > http://drdobbs.com/article/print?articleId=184409677&siteSectionName= > > thesis manuscript here: > http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.1619&rep=rep1&type=pdf > > ) > > So this time I'm happy to be wrong, we can do indeed JIT > but we should measure the cost (as for type inference could > for **imp**? run O(n^3) and currently run O(n^5), it might > be necessary do decompiling plus naturally compiling and > forth inc ase of NetObj, etc > > Thanks in advance > > [1] T. Zhao, ?Type matching and type inference for > object-oriented systems,? Purdue University, 2002. > [2] M.-A. Najork, ?Programming in three dimensions,? > University of Illinois at Urbana-Champaign, 1994. > [3] A. D. Gordon and P. D. Hankin, ?A Concurrent Object > Calculus: Reduction and Typing,? 1998. > > > > > > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: [M3devel] JIT [WAS: Google Benchmark - anyone > interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 08:23 > > On Mon, Jul 04, 2011 at 02:51:24AM > > +0100, Daniel Alejandro Benavides D. wrote: > > > Hi all: > > > it > > > would mean to compete in such a way in a super > > computer an alternative > > > to run without garbage collection (not unsafe > but > > ESC/Modula-3 RTError > > > and RTCollector disabled but for safe > automatically > > collected objects, > > > again if we are strictly speaking of a naive > > implementation algorithm, > > > if parallelization is allowed under recursive or > > nested paradigms we > > > are set to compete too but not absolutely). > > > I mean, given the effort > > > they took to run the compiler and tune it for > other > > languages and would > > > get same compiler effort plus ESC modelling to > subsume > > the collector > > > for perhaps dynamic scripting like say e.g Obliq, > we > > don't want to > > > compete with Obliq, but if we do I guess we > can't > > compile JIT > > > > JIT. > > > > This is a missing feature in Modula 3 -- it would > probably > > need to > > be implemented as a library, and it would be a huge > > implementatino > > project. It would involve writing -- or finding > -- > > code generators for > > many maching archtectures, and it would require > careful > > integratio with > > the garbage collector. Both the data structures > built > > by gennerated > > code and the generated code itself would have to be > > garbage-collectible. > > > > The JIT coder would have to accept relatively > low-level > > instructions and > > produce in-memory object code. Ideally, unless > you > > use the UNSAFE JIT, > > it would have to perform suitable static and run-time > > > checking on and in the code it's generating. > > > > People implementing currently interpreted languages > would > > have the > > option of calling this JIT coder instead. > > > > I've been tinkering from time to time with bits of > code in > > this > > direction, but it's a huge job. And, in my > opinion, > > LLVM doesn't really > > do this right. C-- comes a lot closer, but it > isn't a > > JIT. Maybe > > something like it could be? > > > > -- hendrik > > > From hendrik at topoi.pooq.com Tue Jul 5 02:06:22 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:06:22 -0400 Subject: [M3devel] M3devel Digest, Vol 56, Issue 29 In-Reply-To: <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> References: <1309271866.25512.YahooMailClassic@web29719.mail.ird.yahoo.com> <044ED8EA-A876-4804-9394-F3DE51B833A4@m3w.org> <20110628155441.GA3406@topoi.pooq.com> <514C7347-DC15-418D-B931-A5CE0BDB77A4@m3w.org> Message-ID: <20110705000622.GA31166@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:34:35AM +0200, Dragi?a Duri? wrote: > Thank you for a pointer and also for your effort. > > But, not - thank you :). > > I have a difficulty to understand how-in-the-hell we learned programming (my path was Pascal, BASIC, 6502, GraFORTH, Z80, C, Modula-2....) without functional-language-of-big-university-choice? > > CMU messed a lot with Java and they are shell shocking their "customers" with ML now. It's like "Ok, we made a big mistake, but this is so obviously different it' also obviously not a mistake again". > > Thank you big-university, but I am not buying that logic. Neither I am selling it to my kid. > > MIT went there before them with *Scheme, and went deeper with lots of dialects too... It maybe works for someone (or someones) but I know a lot of excellent programers who never met functional. Scheme is not a functional programming language. It's just a language in which it's easy to use a functional programming style should you so choose. I have very little use for a strictly functional language (in the usual sense of no-side-effects, no time-varying variables, etc.). -- hrndrik From hendrik at topoi.pooq.com Tue Jul 5 02:13:17 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Mon, 4 Jul 2011 20:13:17 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> References: <20110704132326.GA24268@topoi.pooq.com> <1309799334.80694.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <20110705001317.GB31166@topoi.pooq.com> On Mon, Jul 04, 2011 at 06:08:54PM +0100, Daniel Alejandro Benavides D. wrote: > > So this time I'm happy to be wrong, we can do indeed JIT but we should > measure the cost (as for type inference could for **imp**? run O(n^3) > and currently run O(n^5), it might be necessary do decompiling plus > naturally compiling and forth inc ase of NetObj, etc O(n^3)? O(n^5)? If that's performance in practical situations, instead of just a class of theoretical examples it's not what we need for everyday use. I'd call it useless. It's defnietely not what I'm thinking of. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 02:16:55 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:16:55 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705001317.GB31166@topoi.pooq.com> Message-ID: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: I think yes, any other full bloated object oriented language has that floor, of course, you can help the compiler by giving some annotations, but for the theoretical results, this is what is proved to be truth. Thanks in advance --- El lun, 4/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: lunes, 4 de julio, 2011 19:13 > On Mon, Jul 04, 2011 at 06:08:54PM > +0100, Daniel Alejandro Benavides D. wrote: > > > > So this time I'm happy to be wrong, we can do indeed > JIT but we should > > measure the cost (as for type inference could for > **imp**? run O(n^3) > > and currently run O(n^5), it might be necessary do > decompiling plus > > naturally compiling and forth inc ase of NetObj, etc > > O(n^3)? O(n^5)? If that's performance in practical > situations, instead > of just a class of theoretical examples it's not what we > need for > everyday use. I'd call it useless. It's > defnietely not what I'm > thinking of. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 02:31:12 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 01:31:12 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Hi all: In fact there is some reqwork to make things happen faster in Abadi-Cardelli: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. Thanks in advance --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 4 de julio, 2011 19:16 > Hi all: > I think yes, any other full bloated object oriented > language has that floor, of course, you can help the > compiler by giving some annotations, but for the theoretical > results, this is what is proved to be truth. > > Thanks in advance > > --- El lun, 4/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: lunes, 4 de julio, 2011 19:13 > > On Mon, Jul 04, 2011 at 06:08:54PM > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > So this time I'm happy to be wrong, we can do > indeed > > JIT but we should > > > measure the cost (as for type inference could > for > > **imp**? run O(n^3) > > > and currently run O(n^5), it might be necessary > do > > decompiling plus > > > naturally compiling and forth inc ase of NetObj, > etc > > > > O(n^3)? O(n^5)? If that's performance in practical > > situations, instead > > of just a class of theoretical examples it's not what > we > > need for > > everyday use. I'd call it useless. It's > > defnietely not what I'm > > thinking of. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 15:30:39 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 14:30:39 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309872639.96891.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 16:06:47 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 10:06:47 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> Message-ID: <20110705140647.GA9022@topoi.pooq.com> If understand correctly, these results are about figuring out what types the programmer meant if he failed to specify any. My view is that the programmer probably knew full well what he meant, and he might as well say so, in the interest of clarity if nothing else. I find programs with secret types to be incomprehensible, even while I'm writing them. And getting error messages if what I wrote doesn't match what I intended, and getting better run-time, well, those are wonderful consequences. -- hendrik On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro Benavides D. wrote: > Hi all: > In fact there is some reqwork to make things happen faster in Abadi-Cardelli: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > Never looked that paper, if I may say so, the approach by Tian Zhao omitted it, but as for your worries, this could make it work faster. > I guess there should be some Turing awards waiting for somebody who can run even lower, but this geniuses come counted by the fingers of one hand, but you can't say this is the end, that's for sure, but then there's even worse situations if you add the self-object extension like for JS, and this is a certainly an open problem (even that I tried but for a good type theorist could be not that hard, as I consider myself just a follower of them). > But Abadi-Cardelli's work was a bit hit, and it's quite practical in terms of research results I believe. Yet this is not the last work in this are. > Thanks in advance > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, "Hendrik Boom" > > Fecha: lunes, 4 de julio, 2011 19:16 > > Hi all: > > I think yes, any other full bloated object oriented > > language has that floor, of course, you can help the > > compiler by giving some annotations, but for the theoretical > > results, this is what is proved to be truth. > > > > Thanks in advance > > > > --- El lun, 4/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > So this time I'm happy to be wrong, we can do > > indeed > > > JIT but we should > > > > measure the cost (as for type inference could > > for > > > **imp**? run O(n^3) > > > > and currently run O(n^5), it might be necessary > > do > > > decompiling plus > > > > naturally compiling and forth inc ase of NetObj, > > etc > > > > > > O(n^3)? O(n^5)? If that's performance in practical > > > situations, instead > > > of just a class of theoretical examples it's not what > > we > > > need for > > > everyday use. I'd call it useless. It's > > > defnietely not what I'm > > > thinking of. > > > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Tue Jul 5 16:44:32 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 15:44:32 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705140647.GA9022@topoi.pooq.com> Message-ID: <1309877072.55341.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: yes, that's the case, some call the natural problem in typing statically annotated languages, static type checking (which is resolved pretty much well, some may argue about this in generics but anyway...), if the problem is to determine what is the best compiler that can type check this language without type annotations but rather dynamically typed program (so, it might be reasonable your statement), nevertheless this problems arise in JIT dynamic typed part of the language, but as said a good compromise could be made for those cases, both in theoretical or transforming the problem to other domains such as constraint inferencing which requires several good heuristics, so it's a good point to investigate them. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 09:06 > If understand correctly, these > results are about figuring out what types > the programmer meant if he failed to specify any. My > view is that the > programmer probably knew full well what he meant, and he > might as well > say so, in the interest of clarity if nothing else. I > find programs > with secret types to be incomprehensible, even while I'm > writing them. > > And getting error messages if what I wrote doesn't match > what I > intended, and getting better run-time, well, those are > wonderful > consequences. > > -- hendrik > > On Tue, Jul 05, 2011 at 01:31:12AM +0100, Daniel Alejandro > Benavides D. wrote: > > Hi all: > > In fact there is some reqwork to make things happen > faster in Abadi-Cardelli: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.110 > > > > Never looked that paper, if I may say so, the approach > by Tian Zhao omitted it, but as for your worries, this could > make it work faster. > > I guess there should be some Turing awards waiting for > somebody who can run even lower, but this geniuses come > counted by the fingers of one hand, but you can't say this > is the end, that's for sure, but then there's even worse > situations if you add the self-object extension like for JS, > and this is a certainly an open problem (even that I tried > but for a good type theorist could be not that hard, as I > consider myself just a follower of them). > > But Abadi-Cardelli's work was a bit hit, and it's > quite practical in terms of research results I believe. Yet > this is not the last work in this are. > > Thanks in advance > > > > --- El lun, 4/7/11, Daniel Alejandro Benavides D. > > escribi?: > > > > > De: Daniel Alejandro Benavides D. > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > > Fecha: lunes, 4 de julio, 2011 19:16 > > > Hi all: > > > I think yes, any other full bloated object > oriented > > > language has that floor, of course, you can help > the > > > compiler by giving some annotations, but for the > theoretical > > > results, this is what is proved to be truth. > > > > > > Thanks in advance > > > > > > --- El lun, 4/7/11, Hendrik Boom > > > escribi?: > > > > > > > De: Hendrik Boom > > > > Asunto: Re: [M3devel] JIT [WAS: Google > Benchmark - > > > anyone interested in an Modula 3 version?] > > > > Para: m3devel at elegosoft.com > > > > Fecha: lunes, 4 de julio, 2011 19:13 > > > > On Mon, Jul 04, 2011 at 06:08:54PM > > > > +0100, Daniel Alejandro Benavides D. wrote: > > > > > > > > > > So this time I'm happy to be wrong, we > can do > > > indeed > > > > JIT but we should > > > > > measure the cost (as for type inference > could > > > for > > > > **imp**? run O(n^3) > > > > > and currently run O(n^5), it might be > necessary > > > do > > > > decompiling plus > > > > > naturally compiling and forth inc ase > of NetObj, > > > etc > > > > > > > > O(n^3)? O(n^5)? If that's performance in > practical > > > > situations, instead > > > > of just a class of theoretical examples it's > not what > > > we > > > > need for > > > > everyday use. I'd call it > useless. It's > > > > defnietely not what I'm > > > > thinking of. > > > > > > > > -- hendrik > > > > > > > > From dabenavidesd at yahoo.es Tue Jul 5 18:08:30 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:08:30 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309882110.36481.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Tue Jul 5 18:30:31 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 17:30:31 +0100 (BST) Subject: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? In-Reply-To: Message-ID: <1309883431.49039.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: what if one don't understand that well, it must conquer first the valley than the high mountain, technically speaking, there are several other issues before coding. Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 11:16 other than stating what's "doable", have you "done" anything lately? On Tue, Jul 5, 2011 at 11:08 AM, Daniel Alejandro Benavides D. wrote: Hi all: furthermore I believe is more challenging to defeat the other languages, but can you create the scenario, nobody will create it instead the own one creates for them. For instance how can you beat C++ in a 64 KB ram machine, I think is doable, this techniques have been applied and are doable in retrospective many years ago (think pdp-11 era) many of this were solved, but this piece of history was to do it once more nearer, unfortunately, this ideas came to nothing in current jobs market, which is under well understood, far more technical issues were solved and applied before, nowadays, this things come in webminars, where what is the idea behind that, to design solutions you don't have to do. It's just to solve the problem of half less memory with less than that, it might become available a superfaster computer substantially cheaper to buy, I think the last is the reality, very crude, this is a free-software lesson, you can co-create your own sector market research if it's well understood, if not go and make them happy shipping cheaper computers (meanwhile your problems aren't solved at all, you just buy it, now what) Thanks in advance --- El mar, 5/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: martes, 5 de julio, 2011 10:28 such as, getting, a job, for instance... On Tue, Jul 5, 2011 at 10:28 AM, felipe valdez wrote: so, if I understand correctly that would solve type inference, compiler speed, jvm code generation, equations in general, and constraint systems? sounds like too much to take try at once. why not just focusing one one particular problem? how would resources be obtain in order to solve this problem (people-wise) ? or do you intend to do so all by yourself, in your spare time? I had the Idea that there were more pressing issues at hand... On Tue, Jul 5, 2011 at 8:30 AM, Daniel Alejandro Benavides D. wrote: Hi all: Additional understanding of seminal work might be some clues of what is about concurrent and distributed compilations, naturally, the case might be solved for those platforms but for the rest of the world, it would mean the execution time is perfect or reasonable in terms of theoretical performance. So the idea behind this is in those cases where the system needs to be expanded but it's also slower the ability to rule out RT penalties, now, when it comes to JIT, it's also true the performance might be overwhelming, but still the most difficult part is to type check, since majority of work has been done in theoretical grounds, there must be the case for the type-theoretical analysis of the system to try to close the gap between the acceptable and what it isn't, e.g we can't afford to have such large compilations on real-time but perhaps a balance between both performance and language capabilities, then it follows than not all the cases are so high degraded performance, but the cases where the idea is to diminish burden between the expected versus the actual implementation such as smaller footprint (traditionally hardware assisted interpretation, etc), but again if such resources are still limited then a shorter route might be the performance profiling with back end optimization, which is the harder to do since the burden could be too high but still the only route that might be taken, as for what I know, here are some cases you can have that, the most advanced perhaps is converting the type inference in a constraint satisfaction problem, which might solve it faster if enough information is given. Similar approaches have been realized for Java systems, using Millner Calculus type system as a bases for an OO system Now, I'm cautious because we then really might need measure and tuning of Constraint solver in the terms needed, which is possible to some extent, still this are very dynamic situations, but could be improve somehow the issue here. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.1739 Such works like this can be applied to other domains, like equational reasoning for instance (see below p 10): http://www.collectionscanada.gc.ca/obj/s4/f2/dsk2/tape16/PQDD_0009/NQ28028.pdf Thanks in advance --- El lun, 4/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: lunes, 4 de julio, 2011 21:53 I don't understand the message. On Sun, Jul 3, 2011 at 8:51 PM, Daniel Alejandro Benavides D. wrote: Hi all: it would mean to compete in such a way in a super computer an alternative to run without garbage collection (not unsafe but ESC/Modula-3 RTError and RTCollector disabled but for safe automatically collected objects, again if we are strictly speaking of a naive implementation algorithm, if parallelization is allowed under recursive or nested paradigms we are set to compete too but not absolutely). I mean, given the effort they took to run the compiler and tune it for other languages and would get same compiler effort plus ESC modelling to subsume the collector for perhaps dynamic scripting like say e.g Obliq, we don't want to compete with Obliq, but if we do I guess we can't compile JIT it since all RT structures are interpreted not plain executed, so perhaps this would be the logic ideal competence (again the type inference could save us some time but dynamic typing is another thing, it must run its structures dynamically even without those checks the code is not just plain executed, if so, then maybe the main and ideal platform would be again super computers anyway). If there is such possibility, also we would potentially execute several tests for running smoothly, such as performance penalty run for the given platform (lets say the debugger is able to give you such tests if so) Let me know if other requirements implications are something of relevance here.. Thanks in advance --- El s?b, 2/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? Para: "Daniel Alejandro Benavides D." Fecha: s?bado, 2 de julio, 2011 13:54 s/doing/making/ this available On Fri, Jul 1, 2011 at 7:22 PM, Daniel Alejandro Benavides D. wrote: Hi all: Indeed there is one besides here: http://www.hackernewsers.com/users/mhd.html http://news.ycombinator.com/item?id=2615096 http://news.ycombinator.com/item?id=2615599 I think there should be something like that, is certainly a good initiative, still I don't know the rules (or other's rules) to apply for a submission, the requirements, and what will give us. For one thing I knew the programming marathon in my undergraduate with and there was one of such interesting (for me I can say) contest system on-line, the obvious problem of that platform was there were just some languages available (one sent code, in my case C to server side and got results relatively quick on screen), but I liked the spirit it was for an Algorithms project and we had some categories (so everybody was working very hard to get the best results which I don't criticize at least in one, I did get a good timing but with a very simple program, I mean in loc). It was Valladolid UVA system. As we have some native and gcc-based backend (in gcc lang, e.g another front end, but low-level, there is another one based on Scale in Java) I guess you would have to have access to that, or us to offer a cm3-ide instance open to you so you can compile it, I would like compile time optimizations (that is not updated in the cm3 source tree), but not so much back-end or linker enabled optimization (just if they are not possible in compile time, but just for that reason), I mean aggressive optimization where code doesn't do what it needs to do is suspicious in my way of thinking (but maybe this is too much burden, even for Modula-3 is a lot of work to configure anyway this). Ok, let me know, the important info, and if a public instance of the compiler is needed I can provide one, but my hardware options are not too open (we could compete with some retro supercomputers, but this could slower things down for us, I mean, if more platforms are needed we can make an arrangement, I'm sure there should be people open to do that, if there is such wide interest to do so in contest organizer, etc end, maybe even gcc hackers as well). Thanks everybody for doing this available and tell us please that for us on how to do that, thanks in advance --- El vie, 1/7/11, Michael Franz escribi?: > De: Michael Franz > Asunto: [M3devel] Google Benchmark - anyone interested in an Modula 3 version? > Para: "m3devel" > Fecha: viernes, 1 de julio, 2011 16:41 > Hi, > > A co-worker pointed out this benchmark > http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php > . I use Scala at work, and have used Java for years. > I would be > interested in the outcome of Modula 3 port. > Unfortunately I don't > have enough experience with M3 to do it myself (guess it > could be a > learning experience, but then I can complain about a lack > of time). > > I also follow the development of D and there is a port > going on in > their community. > http://www.digitalmars.com/d/archives/digitalmars/D/Port_a_benchmark_to_D_137420.html > > > Michael > -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Tue Jul 5 18:50:41 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 12:50:41 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> Message-ID: <20110705165041.GA9653@topoi.pooq.com> On Tue, Jul 05, 2011 at 10:20:34AM -0500, felipe valdez wrote: > why let the computer do the inferencing work, if we can do the typing work! > > don't let the computer work for you! (1) computers aren't that fast yet. They can still use some help. (2) computers might infer the wrong types -- types that fit what we coded, but not what we meant. That said, there are rather simple type inference methods that require a lot less explicit typing than today's conventional strongly typed languages impose on us. Ideally, the computer should do about the same amount of type inferencing that a human reader would easily do when reading the program. Note that I said "reader", not "writer". -- hendrik > > > On Tue, Jul 5, 2011 at 9:06 AM, Hendrik Boom wrote: > > > If understand correctly, these results are about figuring out what types > > the programmer meant if he failed to specify any. My view is that the > > programmer probably knew full well what he meant, and he might as well > > say so, in the interest of clarity if nothing else. I find programs > > with secret types to be incomprehensible, even while I'm writing them. > > > > And getting error messages if what I wrote doesn't match what I > > intended, and getting better run-time, well, those are wonderful > > consequences. > > > > -- hendrik From hendrik at topoi.pooq.com Tue Jul 5 19:34:10 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 13:34:10 -0400 Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: References: <1309825015.25664.YahooMailClassic@web29701.mail.ird.yahoo.com> <1309825872.39204.YahooMailClassic@web29701.mail.ird.yahoo.com> <20110705140647.GA9022@topoi.pooq.com> <20110705165041.GA9653@topoi.pooq.com> Message-ID: <20110705173410.GA12238@topoi.pooq.com> On Tue, Jul 05, 2011 at 12:08:07PM -0500, felipe valdez wrote: > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > Ideally, the computer should do about the same amount of type > > inferencing that a human reader would easily do when reading > > the program. Note that I said "reader", not "writer". > > > > > but how far are we from this Ideal, really? > can these rules be automated? The hard part here is figuring out what human readers can do. It's important to match the human reader and not to go beyond his abilities. Because then the writer (who will probably understand his program bettr than a reader) will get feedback from his type-checker when the code gets too obscure for a reader. -- hendrik From dabenavidesd at yahoo.es Tue Jul 5 20:57:00 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 19:57:00 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <20110705173410.GA12238@topoi.pooq.com> Message-ID: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: yes, in that domain yes, but in the many ways of solving a problem, computers have a rather limited extent, therefore you can't expect such facilities, but for things like automating algorithm comprehension, this is a task of algorithmic learning. A way of this ahs been proposed for a constraint language (e.g Juno),: http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA Well that said, the idea behind of this is how to optimize the program, but to define a good type system implementable is important too, is good to have many kernel for doing that. Abadi-Cardelli is a good one, but certainly not the only one, Abadi Baby Modula-3 is yet another one, I can't understand, it should be be in the Modula-3 research reports, or in the bibliography, I will see, how about that. Thanks in advance --- El mar, 5/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: martes, 5 de julio, 2011 12:34 > On Tue, Jul 05, 2011 at 12:08:07PM > -0500, felipe valdez wrote: > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom wrote: > > > > > Ideally, the computer should do about the same > amount of type > > > inferencing that a human reader would easily do > when reading > > > the program. Note that I said "reader", not > "writer". > > > > > > > > but how far are we from this Ideal, really? > > can these rules be automated? > > The hard part here is figuring out what human readers can > do. It's > important to match the human reader and not to go beyond > his abilities. > Because then the writer (who will probably understand his > program bettr > than a reader) will get feedback from his type-checker when > the code > gets too obscure for a reader. > > -- hendrik > From dabenavidesd at yahoo.es Tue Jul 5 21:10:15 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 20:10:15 +0100 (BST) Subject: [M3devel] general purpose C libraries (C Kernel) Message-ID: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Hi all: I got this in my inbox, want to share it, sorry if feels like cross-posting, if so, tell me and I wouldn't mind to not share it: http://links.techwebnewsletters.com/servlet/MailView?ms=MzY3ODY2NzES1&r=MjIxNTU4ODA2MQS2&j=MTA1NTY3MDA4S0&mt=1&rt=0 Anyway, limited options is rather mundane word, I mean, Sun NeWS was very open and flexible, yest it was portable to Modula runtime, and certainly the Andrew Message System at CMU was jsut another example a kernel of C plus objects was able to be replaced by Modula-3. C-- comes handy to this limited portability tasks, I wonder why people don't use it. Maybe the same reason about Modula-3 too. Thanks in advance From dabenavidesd at yahoo.es Tue Jul 5 23:38:01 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:38:01 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309892220.45351.YahooMailClassic@web29705.mail.ird.yahoo.com> Message-ID: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Hi all: I see now, the reason was explained by Luca Cardelli on his "recent" interview, they asked to come with something of practical use, yet they had pressure, to retrieve some good quality work of good practical results, that become the Theory of Objects (with Abadi, see [3]) on: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 But the theory on Baby Modula-3 was the idealization they had on Modula-3 typing system, unfortunately more work on that got that direction, towards the final years on the laboratory was somewhat cut, that explains why Larch project wasn't continued there after initial works (fortunately continued though Greg Nelson ESC work, which is by itself more practical). And yes, I believe this is path for a good structured at least terms comprehension of the language (I mean whenever I take foreign language, i.e English class i must study phonetics, semantics and grammar, well at least that's is what I was told by a former German language undergraduate student, specially grammar, which is for us specially hard, maybe be not the case for say you know, almost anyone else), so in this terms this is good to know for our future culprits, similarly we could argue for i.e us Computer scientists, the most valuable experience using Modula-3 was in Cambridge (and I have seen real good Modula-3 seminal work coming from there as well as other ones as well) Abadi and Cardelli and Matthes created a theory to create extensible syntax and use it in a DB realization of Modula-3: http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf I guess this could be the way to go, besides the seminal work in denotational (to express Modula-3 correctness in baby Modula-3) is available for free from its author: http://people.cis.ksu.edu/~schmidt/text/densem.html I believe we could make a point on this results preliminary but very important for us to depart from the rest of approaches, or at least have our own version (Baby Modula-3 is not BTW implemented as for what I know about, I wish could be proved to be correct, but I don't know neither, could be interpreted as it is, so I haven't seen it). That said, there is even more, some people went through the work or recapitulating the Theory of Objects in terms of denotational semantics http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf And a way to unify them based on recursive types, or say a way to treat programming language type back and forth (note I didn't say types if so, this is not the case), one of its authors wrote the most used book on "Types for Programming languages":, the former [2]: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 Perhaps this is the way an actual Baby Modula-3 implementation might become a good vehicle to explain programming language semantics (maybe not programming languages at all, just their semantics). If somebody agrees on that as Cardelli said to be this the next wave in his interview on Modula-3, let's bring it on www-baby.modula3.com for instance Let mew know your thoughts, thanks in advance [1] P. Robinson, ?From ML to C via Modula-3 an approach to teaching programming,? 1994. [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic Framework for Objects,? 1993. [3] M. Abadi and L. Cardelli, ?A Semantics of Object Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, p. 332--341, 1994. --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 13:57 > Hi all: > yes, in that domain yes, but in the many ways of solving a > problem, computers have a rather limited extent, therefore > you can't expect such facilities, but for things like > automating algorithm comprehension, this is a task of > algorithmic learning. > A way of this ahs been proposed for a constraint language > (e.g Juno),: > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > Well that said, the idea behind of this is how to optimize > the program, but to define a good type system implementable > is important too, is good to have many kernel for doing > that. Abadi-Cardelli is a good one, but certainly not the > only one, Abadi Baby Modula-3 is yet another one, I can't > understand, it should be be in the Modula-3 research > reports, or in the bibliography, I will see, how about > that. > > Thanks in advance > > --- El mar, 5/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com > > Fecha: martes, 5 de julio, 2011 12:34 > > On Tue, Jul 05, 2011 at 12:08:07PM > > -0500, felipe valdez wrote: > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik Boom > wrote: > > > > > > > Ideally, the computer should do about the > same > > amount of type > > > > inferencing that a human reader would easily > do > > when reading > > > > the program. Note that I said > "reader", not > > "writer". > > > > > > > > > > > but how far are we from this Ideal, really? > > > can these rules be automated? > > > > The hard part here is figuring out what human readers > can > > do. It's > > important to match the human reader and not to go > beyond > > his abilities. > > Because then the writer (who will probably understand > his > > program bettr > > than a reader) will get feedback from his type-checker > when > > the code > > gets too obscure for a reader. > > > > -- hendrik > > > From dabenavidesd at yahoo.es Tue Jul 5 23:58:21 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Tue, 5 Jul 2011 22:58:21 +0100 (BST) Subject: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <1309901881.87292.YahooMailClassic@web29707.mail.ird.yahoo.com> Message-ID: <1309903101.50912.YahooMailClassic@web29705.mail.ird.yahoo.com> Hi all: I mean in terms of Reactor Critical Mass, the core, hopefully safe well enough cool for the nextg wave in Programming (sorry, but I guess this is not a good comparison). Thanks in advance --- El mar, 5/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: martes, 5 de julio, 2011 16:38 > Hi all: > I see now, the reason was explained by Luca Cardelli on his > "recent" interview, they asked to come with something of > practical use, yet they had pressure, to retrieve some good > quality work of good practical results, that become the > Theory of Objects (with Abadi, see [3]) on: > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.4024 > > But the theory on Baby Modula-3 was the idealization they > had on Modula-3 typing system, unfortunately more work on > that got that direction, towards the final years on the > laboratory was somewhat cut, that explains why Larch project > wasn't continued there after initial works (fortunately > continued though Greg Nelson ESC work, which is by itself > more practical). > And yes, I believe this is path for a good structured at > least terms comprehension of the language (I mean whenever I > take foreign language, i.e English class i must study > phonetics, semantics and grammar, well at least that's is > what I was told by a former German language undergraduate > student, specially grammar, which is for us specially hard, > maybe be not the case for say you know, almost anyone else), > so in this terms this is good to know for our future > culprits, similarly we could argue for i.e us Computer > scientists, the most valuable experience using Modula-3 was > in Cambridge (and I have seen real good Modula-3 seminal > work coming from there as well as other ones as well) > Abadi and Cardelli and Matthes created a theory to create > extensible syntax and use it in a DB realization of > Modula-3: > > http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-121.pdf > > I guess this could be the way to go, besides the seminal > work in denotational (to express Modula-3 correctness in > baby Modula-3) is available for free from its author: > http://people.cis.ksu.edu/~schmidt/text/densem.html > > I believe we could make a point on this results preliminary > but very important for us to depart from the rest of > approaches, or at least have our own version (Baby Modula-3 > is not BTW implemented as for what I know about, I wish > could be proved to be correct, but I don't know neither, > could be interpreted as it is, so I haven't seen it). > > That said, there is even more, some people went through the > work or recapitulating the Theory of Objects in terms of > denotational semantics > > http://www.cl.cam.ac.uk/~jg531/mypubl/pre-PhD/direc-WOOD.pdf > > And a way to unify them based on recursive types, or say a > way to treat programming language type back and forth (note > I didn't say types if so, this is not the case), one of its > authors wrote the most used book on "Types for Programming > languages":, the former [2]: > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.5855 > > Perhaps this is the way an actual Baby Modula-3 > implementation might become a good vehicle to explain > programming language semantics (maybe not programming > languages at all, just their semantics). > If somebody agrees on that as Cardelli said to be this the > next wave in his interview on Modula-3, let's bring it on > www-baby.modula3.com for instance > > Let mew know your thoughts, thanks in advance > > [1] P. Robinson, ?From ML to C via Modula-3 an approach > to teaching programming,? 1994. > > [2] M. Hofmann and B. Pierce, ?A Unifying Type-Theoretic > Framework for Objects,? 1993. > > [3] M. Abadi and L. Cardelli, ?A Semantics of Object > Types,? PROC. IEEE SYMPOSIUM ON LOGIC IN COMPUTER SCIENCE, > p. 332--341, 1994. > > > --- El mar, 5/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark - > anyone interested in an Modula 3 version?] > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: martes, 5 de julio, 2011 13:57 > > Hi all: > > yes, in that domain yes, but in the many ways of > solving a > > problem, computers have a rather limited extent, > therefore > > you can't expect such facilities, but for things like > > automating algorithm comprehension, this is a task of > > algorithmic learning. > > A way of this ahs been proposed for a constraint > language > > (e.g Juno),: > > http://books.google.com/books?id=m-BQAAAAMAAJ&q=juno+algorithmic+learning&dq=juno+algorithmic+learning&hl=en&ei=R1oTTqStJ-Tg0QHf0sTHDg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCkQ6AEwAA > > > > Well that said, the idea behind of this is how to > optimize > > the program, but to define a good type system > implementable > > is important too, is good to have many kernel for > doing > > that. Abadi-Cardelli is a good one, but certainly not > the > > only one, Abadi Baby Modula-3 is yet another one, I > can't > > understand, it should be be in the Modula-3 research > > reports, or in the bibliography, I will see, how > about > > that. > > > > Thanks in advance > > > > --- El mar, 5/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] JIT [WAS: Google Benchmark > - > > anyone interested in an Modula 3 version?] > > > Para: m3devel at elegosoft.com > > > Fecha: martes, 5 de julio, 2011 12:34 > > > On Tue, Jul 05, 2011 at 12:08:07PM > > > -0500, felipe valdez wrote: > > > > On Tue, Jul 5, 2011 at 11:50 AM, Hendrik > Boom > > wrote: > > > > > > > > > Ideally, the computer should do about > the > > same > > > amount of type > > > > > inferencing that a human reader would > easily > > do > > > when reading > > > > > the program. Note that I said > > "reader", not > > > "writer". > > > > > > > > > > > > > > but how far are we from this Ideal, really? > > > > can these rules be automated? > > > > > > The hard part here is figuring out what human > readers > > can > > > do. It's > > > important to match the human reader and not to > go > > beyond > > > his abilities. > > > Because then the writer (who will probably > understand > > his > > > program bettr > > > than a reader) will get feedback from his > type-checker > > when > > > the code > > > gets too obscure for a reader. > > > > > > -- hendrik > > > > > > From hendrik at topoi.pooq.com Wed Jul 6 03:53:43 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 5 Jul 2011 21:53:43 -0400 Subject: [M3devel] general purpose C libraries (C Kernel) In-Reply-To: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> Message-ID: <20110706015343.GA29079@topoi.pooq.com> On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > C-- comes handy to this limited portability tasks, I wonder why people > don't use it. Maybe the same reason about Modula-3 too. Perhaps because as far as I know the only code generator for C-- generates 32-bit Intel code. That doesn't provide much in the way of portability. There's rumours of other code genrators, but I haven't seen them yet. Well, there is a portable byte-code interpreter written in C, but that's very specifically not the point of C--. -- hendrik From hosking at cs.purdue.edu Wed Jul 6 15:47:35 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Wed, 6 Jul 2011 09:47:35 -0400 Subject: [M3devel] concurrency In-Reply-To: <20110704133917.GA24338@topoi.pooq.com> References: <20110704133917.GA24338@topoi.pooq.com> Message-ID: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > There was a lot of discussion on problems with concurrency when we wen > to pthreads implementation so that we could make use of multiple CPUs. > After a while disuccion sttopped. > > Have these problems all been resolved yet? There are issues that have been reported but which I've not had time to explore. Too busy trying to finish my book on GC. I hope to have time to work on things soon. > If I recall correctly, there was a problem with one program, cvsup, > using fork as well as threads. This worked with green threads, but not > with pthreads. Has cvsup been rehabilitated in some way? cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. > How do pthreads interact with the garbage collector? Or are there > several garbage collectors with different interaction modalities? The current garbage collector expects to be able to stop all the threads in order to *initiate* a garbage collection by scanning their stacks. Unfortunately, getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). [This shortcoming is a problem also for the Boehm collector for C/C++.] In CM3 the same garbage collector is used whether for pthreads or user threads. The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. To handle calls to external code not generated by the M3 compiler we would also need to have a thread atomically post the fact that it is in external code on entry and un-post that fact on return (i.e., at calls to <*EXTERNAL*>). To make that synchronization efficient we need to use CAS or LL/SC atomicity primitives (rather than relying on pthread_mutex calls). I still need to fix all the atomics support in CM3 to be able to do that properly. So, my list of TODOs includes: 1) Explore (and perhaps fix) reported issues with the current pthreads implementation [short-term] 2) Commit fixes to CM3 support for atomics [medium-term] 3) Switch CM3 threads over to cooperative explicit suspension rather than signal-based suspension [long-term] From dabenavidesd at yahoo.es Wed Jul 6 17:03:09 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 16:03:09 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: I would go for the lower over head in Modula-3 lite implementations as legacy systems: http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html Currently the only thing replacement of CVSup is not ahead of it, in the server side which is precisely the point of rewriting it (Modula-3 big footprint and complexity), as for that I know, there could be some improvement over it but the needed changes to the server could diminish the advantage. The only thing they don't like of CVSup is the disk usage overhead, but this is something inherent to the application if I may say so, even more, if development were continued perhaps dcvs could a way to address somehow that (given the client replacement doesn't affect the project too much). But current support for them is wacky AFAIK pm3 is broken, so this is a plus over it, and a plus in cm3 against java but not C. http://forums.pcbsd.org/archive/index.php/t-3416.html Anyways, there should be some application to rescue from their repositories so they keep it alive (shouldn't we?): http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics Thanks in advance --- El mi?, 6/7/11, Tony Hosking escribi?: > De: Tony Hosking > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > There was a lot of discussion on problems with > concurrency when we wen > > to pthreads implementation so that we could make use > of multiple CPUs. > > After a while disuccion sttopped. > > > > Have these problems all been resolved yet? > > There are issues that have been reported but which I've not > had time to explore. > Too busy trying to finish my book on GC. I hope to > have time to work on things soon. > > > If I recall correctly, there was a problem with one > program, cvsup, > > using fork as well as threads. This worked with > green threads, but not > > with pthreads. Has cvsup been rehabilitated in > some way? > > cvsup is badly behaved with respect to POSIX semantics for > fork and threads. It still needs to be fixed rather > than making M3 threads support its bad behavior. > > > How do pthreads interact with the garbage > collector? Or are there > > several garbage collectors with different interaction > modalities? > > The current garbage collector expects to be able to stop > all the threads in order to *initiate* a garbage collection > by scanning their stacks. Unfortunately, getting > pthreads to stop reliably is difficult on some operating > systems (BSD derivatives appear to be bad at this, but > Windows, Linux and OSX seem to function well enough). > [This shortcoming is a problem also for the Boehm collector > for C/C++.] In CM3 the same garbage collector is used > whether for pthreads or user threads. > > The best way to get M3 threads to play nicely on all OS > would be to avoid thread stopping mechanisms that expect > cooperation from the OS and simply to use explicit polling > inserted by the compiler at calls and backward branches to > decide if the thread should suspend itself. To handle > calls to external code not generated by the M3 compiler we > would also need to have a thread atomically post the fact > that it is in external code on entry and un-post that fact > on return (i.e., at calls to <*EXTERNAL*>). To > make that synchronization efficient we need to use CAS or > LL/SC atomicity primitives (rather than relying on > pthread_mutex calls). I still need to fix all the > atomics support in CM3 to be able to do that properly. > > So, my list of TODOs includes: > > 1) Explore (and perhaps fix) reported issues with the > current pthreads implementation [short-term] > 2) Commit fixes to CM3 support for atomics [medium-term] > 3) Switch CM3 threads over to cooperative explicit > suspension rather than signal-based suspension [long-term] > > > From dabenavidesd at yahoo.es Wed Jul 6 18:14:59 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 6 Jul 2011 17:14:59 +0100 (BST) Subject: [M3devel] concurrency In-Reply-To: <1309964589.87021.YahooMailClassic@web29709.mail.ird.yahoo.com> Message-ID: <1309968899.43958.YahooMailClassic@web29709.mail.ird.yahoo.com> Hi all: In fact Archlinux use it too: https://bbs.archlinux.org/viewtopic.php?id=655 This a good example of their use, in fact there NPTL server and client, I can run it in my system (ubuntu804 hardy x86): http://www2.cddc.vt.edu/linux/distributions/archlinux/other/cvsup/ Interesting I can't do it ldd, but can run its CLI. Thanks in advance --- El mi?, 6/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] concurrency > Para: "Hendrik Boom" , "Tony Hosking" > CC: m3devel at elegosoft.com > Fecha: mi?rcoles, 6 de julio, 2011 10:03 > Hi all: > I would go for the lower over head in Modula-3 lite > implementations as legacy systems: > http://readlist.com/lists/gentoo.org/gentoo-user/12/62906.html > > Currently the only thing replacement of CVSup is not ahead > of it, in the server side which is precisely the point of > rewriting it (Modula-3 big footprint and complexity), as for > that I know, there could be some improvement over it but the > needed changes to the server could diminish the advantage. > > The only thing they don't like of CVSup is the disk usage > overhead, but this is something inherent to the > application if I may say so, even more, if development were > continued perhaps dcvs could a way to address somehow that > (given the client replacement doesn't affect the project too > much). > But current support for them is wacky AFAIK pm3 is broken, > so this is a plus over it, and a plus in cm3 against java > but not C. > > http://forums.pcbsd.org/archive/index.php/t-3416.html > > Anyways, there should be some application to rescue from > their repositories so they keep it alive (shouldn't we?): > http://libresoft.dat.escet.urjc.es/cvsanal/freebsd-cvs/index.php?menu=Statistics > > Thanks in advance > > --- El mi?, 6/7/11, Tony Hosking > escribi?: > > > De: Tony Hosking > > Asunto: Re: [M3devel] concurrency > > Para: "Hendrik Boom" > > CC: m3devel at elegosoft.com > > Fecha: mi?rcoles, 6 de julio, 2011 08:47 > > > > On Jul 4, 2011, at 9:39 AM, Hendrik Boom wrote: > > > > > There was a lot of discussion on problems with > > concurrency when we wen > > > to pthreads implementation so that we could make > use > > of multiple CPUs. > > > After a while disuccion sttopped. > > > > > > Have these problems all been resolved yet? > > > > There are issues that have been reported but which > I've not > > had time to explore. > > Too busy trying to finish my book on GC. I hope > to > > have time to work on things soon. > > > > > If I recall correctly, there was a problem with > one > > program, cvsup, > > > using fork as well as threads. This worked > with > > green threads, but not > > > with pthreads. Has cvsup been rehabilitated > in > > some way? > > > > cvsup is badly behaved with respect to POSIX semantics > for > > fork and threads. It still needs to be fixed > rather > > than making M3 threads support its bad behavior. > > > > > How do pthreads interact with the garbage > > collector? Or are there > > > several garbage collectors with different > interaction > > modalities? > > > > The current garbage collector expects to be able to > stop > > all the threads in order to *initiate* a garbage > collection > > by scanning their stacks. Unfortunately, > getting > > pthreads to stop reliably is difficult on some > operating > > systems (BSD derivatives appear to be bad at this, > but > > Windows, Linux and OSX seem to function well enough). > > > [This shortcoming is a problem also for the Boehm > collector > > for C/C++.] In CM3 the same garbage collector is > used > > whether for pthreads or user threads. > > > > The best way to get M3 threads to play nicely on all > OS > > would be to avoid thread stopping mechanisms that > expect > > cooperation from the OS and simply to use explicit > polling > > inserted by the compiler at calls and backward > branches to > > decide if the thread should suspend itself. To > handle > > calls to external code not generated by the M3 > compiler we > > would also need to have a thread atomically post the > fact > > that it is in external code on entry and un-post that > fact > > on return (i.e., at calls to > <*EXTERNAL*>). To > > make that synchronization efficient we need to use CAS > or > > LL/SC atomicity primitives (rather than relying on > > pthread_mutex calls). I still need to fix all > the > > atomics support in CM3 to be able to do that > properly. > > > > So, my list of TODOs includes: > > > > 1) Explore (and perhaps fix) reported issues with the > > current pthreads implementation [short-term] > > 2) Commit fixes to CM3 support for atomics > [medium-term] > > 3) Switch CM3 threads over to cooperative explicit > > suspension rather than signal-based suspension > [long-term] > > > > > > > From jay.krell at cornell.edu Wed Jul 6 18:47:26 2011 From: jay.krell at cornell.edu (Jay K) Date: Wed, 6 Jul 2011 16:47:26 +0000 Subject: [M3devel] concurrency In-Reply-To: <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> References: <20110704133917.GA24338@topoi.pooq.com>, <536DECD2-4596-4886-8EC4-00786FEF6BD5@cs.purdue.edu> Message-ID: > cvsup is badly behaved with respect to POSIX semantics for fork and threads. It still needs to be fixed rather than making M3 threads support its bad behavior. For which "threads"? It doesn't use pthreads directly. Where are the Modula-3 threads + fork semantics spelled out? I suspect nowhere. > getting pthreads to stop reliably is difficult on some operating systems (BSD derivatives appear to be bad at this, but Windows, Linux and OSX seem to function well enough). I'm nervous about SuspendThread + GetThreadContext esp. on Win32-on-Win64. - I don't understand how in general preemtive thread suspension can/does work on any multi-processor system, not just Windows. - This lots of online discussion about GetThreadContext not returning what code expects. > The best way to get M3 threads to play nicely on all OS would be to avoid thread stopping mechanisms that expect cooperation from the OS and > simply to use explicit polling inserted by the compiler at calls and backward branches to decide if the thread should suspend itself. I like this, as it would remove a fair amount of target-specific code. - Jay -------------- next part -------------- An HTML attachment was scrubbed... URL: From hendrik at topoi.pooq.com Wed Jul 6 22:53:31 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Wed, 6 Jul 2011 16:53:31 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706015343.GA29079@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> Message-ID: <20110706205331.GA14289@topoi.pooq.com> On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > C-- comes handy to this limited portability tasks, I wonder why people > > don't use it. Maybe the same reason about Modula-3 too. > > Perhaps because as far as I know the only code generator for C-- > generates 32-bit Intel code. That doesn't provide much in the way of > portability. > > There's rumours of other code genrators, but I haven't seen them yet. Here's some info from the C-- site: Other C-- compilers : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. -- http://www.cminusminus.org/code.html Note that none of these are the rumoured ones I mentioned. But that same web page mentions a system called OCamlBurg, which seems to be a parser generator that parses trees instead of strings. It can be used for instruction selection in a code generator. Maybe it's time I looked into it. -- hendrik > > Well, there is a portable byte-code interpreter written in C, but > that's very specifically not the point of C--. > > -- hendrik From hendrik at topoi.pooq.com Fri Jul 8 22:16:34 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Fri, 8 Jul 2011 16:16:34 -0400 Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110706205331.GA14289@topoi.pooq.com> References: <1309893015.13255.YahooMailClassic@web29711.mail.ird.yahoo.com> <20110706015343.GA29079@topoi.pooq.com> <20110706205331.GA14289@topoi.pooq.com> Message-ID: <20110708201634.GB23370@topoi.pooq.com> On Wed, Jul 06, 2011 at 04:53:31PM -0400, Hendrik Boom wrote: > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel Alejandro Benavides D. wrote: > > > C-- comes handy to this limited portability tasks, I wonder why people > > > don't use it. Maybe the same reason about Modula-3 too. > > > > Perhaps because as far as I know the only code generator for C-- > > generates 32-bit Intel code. That doesn't provide much in the way of > > portability. Looking at the current source code for qc--, there appear to be filenames for code genreators for the alpha, sparc, ia64, mips, x86. How many of these are in working order I don't know. There seem to be subdirecotries of a test2 directory called ppc, sparc, x86. These are recognisable processor names, so maybe there's hope for some of these. I know the x86 works; I'm using it. Maybe I should look into ia64 sometime. Things might possibly not be as dismal as I thought. > > > > There's rumours of other code genrators, but I haven't seen them yet. > > Here's some info from the C-- site: > > Other C-- compilers > > : Fermin Reig's cmmc is implemented in Standard ML on top of the MLRISC code generator. It emits assembly code for the Alpha, Sparc, and X86. It implements an obsolete version of C-- and is no longer maintained. > > : The Trampoline C-- Compiler by Sergei Egorov, which seems to have disappeared from the Web. The Trampoline C-- compiler implements the obsolete May, 1999 specification and compiles to C. The author says: it is slow, requires too much memory, and generates slow C code. But, from the other hand, it implements almost all of original C-- specification (including runtime interface), the generated code is readable, portable, and hopefully correct. > > : The Oregon C-- compiler was the first prototype implementation of C--, also on top of MLRISC. It has been honorably retired. > > -- http://www.cminusminus.org/code.html > > Note that none of these are the rumoured ones I mentioned. But > that same web page mentions a system called OCamlBurg, which > seems to be a parser generator that parses trees instead of > strings. It can be used for instruction selection in a code > generator. Maybe it's time I looked into it. > > -- hendrik > > > > > Well, there is a portable byte-code interpreter written in C, but > > that's very specifically not the point of C--. > > > > -- hendrik -- hendrik From kcdurocher at gmail.com Sat Jul 9 04:44:24 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 8 Jul 2011 21:44:24 -0500 Subject: [M3devel] Rd.GetText Question Message-ID: The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? The interface for Rd states this for Rd.Length(): "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? Thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Sat Jul 9 18:57:49 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sat, 9 Jul 2011 12:57:49 -0400 Subject: [M3devel] Rd.GetText Question In-Reply-To: References: Message-ID: Hmm. GetText(rd, Rd.Length(rd)) will fail with a run-time error if Length returns -1 because -1 is not a CARDINAL. I don't think this is generally a safe idiom. On Jul 8, 2011, at 10:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and then looping until EOF. Which method is best? > > Thanks. From rodney_bates at lcwb.coop Sun Jul 10 15:32:52 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sun, 10 Jul 2011 08:32:52 -0500 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] Message-ID: <4E19AA04.1060207@lcwb.coop> On 07/05/2011 09:06 AM, Hendrik Boom wrote: > If understand correctly, these results are about figuring out what types > the programmer meant if he failed to specify any. My view is that the > programmer probably knew full well what he meant, and he might as well > say so, in the interest of clarity if nothing else. I find programs > with secret types to be incomprehensible, even while I'm writing them. > > And getting error messages if what I wrote doesn't match what I > intended, and getting better run-time, well, those are wonderful > consequences. > > -- hendrik > Yes, well said! Here is a section of a draft of an article I have been working on, regarding why I think systematic dynamic typing in programming languages is, for everyday programming, a really bad idea. It's just one of several arguments. ------------------------------------------------------------------------ 1) Dynamic typing is seldom either needed or used. The majority of variables (1) in sensible programs are what I call _algorithmically statically typed_. By this, I mean, informally, that there is a natural type for the variable that can be inferred from its assignments and uses. Moreover, this is a static property, i.e., independent of the program's inputs, and thus can be inferred from the code alone. Slightly more formally, it means that either assignments or uses of values that are not members of this type represent buggy behavior, or at best are pathological coding and irrelevant to correct behavior. In practice, this almost always means such assignments don't belong, and such uses will result in immediate crashes. There are a lot of pathological cases that would belie my claim, but very few that represent either correct and useful program behavior or sensible coding style. For more elaborate discussion of some such cases and even where they might occasionally be useful, see (I). This concept applies to object-oriented programming. The algorithmic static type of a variable is just a common supertype of the types the variable could take on. This needs to be high enough in the class hierarchy to encompass all the useful values, but not so high that it includes anything lacking a method that could be invoked on the variable. Rarely will this be the most-general type in the language. In a statically typed language, the programmer will declare the variable with a type equal to its algorithmic static type. I call this the variable's _linguistic static type_. Otherwise, a compile error will almost always result. In a dynamically typed language, nothing in the code gives the type explicitly, yet it is nevertheless a static property that is vital to a reader's understanding. Often, it will be hard work for a reader to infer. ------------------------------------------------------------------------ Rodney Bates From dabenavidesd at yahoo.es Sun Jul 10 19:27:24 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sun, 10 Jul 2011 18:27:24 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> Message-ID: <1310318844.47353.YahooMailClassic@web29710.mail.ird.yahoo.com> Hi all: I think you are correct, the semantics model of statically typed languages make them better for production code, but for the development, is up to the developer to be able to specify them clearly succinctly (such as by intention) or write them as a part of the program, in case a machine does infer them automatically it doesn't mean you won't run them untyped, since it has a typed representation, still it's untyped language, clearly the correct semantics are driven as you say algorithmically, which can be a onerous time you wouldn't want to pay for that only. As I said and from the context the problem is time (whether development, algorithm complexity), but for independent style point of view, you want to leave the most complicated parts not for the beginning or the last step in the development, just make it work for any idealization of work (like was Baby Modula-3), still may be interpreted and be too onerous, but in machine terms be a implementable option (i.e teaching programming), thus you can argue the time dependent feature is always something you may leave up also to the programmer. If you why I would pick such a language for teaching I would ask your learner why would he take the time to lead the system towards what you want, instead of what he wants to leave out as a programmer related task, the typing framework you may want to apply to solve a particular problem. In that sense there is obviously a need for the programmer to develop such quick constructs or to renounce them (type checking could be potentially semi definable or semi decidable) which leads to more restrictions than assumptions, which is bad in my ideal again independent point of view but good in legal time. So what to do, good question, towards that, I mean there shouldbe a typeful programming without ill-types burden and without the price of it. Modula-3 is closer to that little performance burden but still some price to pay, that's why Baby Modula-3 idea came from I believe, little burden in compile time, little price to pay. Such an idealization requires good work towards implementing Baby Modula-3+ 0,1,2, etc the type system to evolve from that idea to an actual implementation, many parted from there as departed too, but still the typing frameworks unrelated to them are too provocative for the simple point of view, what it remains to do though is to make the Baby Modula-3 be trustful for the typeful programming but in practical terms and economical terms a reality, again first TODO there would be give equational reasoning semantics for Baby Modula-3 in a subset of it or two growing it in the better fashion to be abstracted of such, to be able to define such sublanguage in terms of the decidable framework. Give some semantics for Modula-3 that define the exact solution to that problem and yet it could be hard to prove your systems is sound or safe and implementable (can't wait for this work to be done, but still how much it takes to be done and to be able to be doable in terms long compile time even harder), thus I can't see what is wrong with the typed or untyped Universe as soon there is such direct relation I don't see anything **wrong** here in doing so. To state this in better working implementation, there are two possibilities to either choose the best you can perform, or choose the best can be done. I prefer the later since it would mean you can type programs even beyond your expectations rapidly, which is to say somehow, your typing universe is infinite, rather than somehow a perspective could say is too restrictive (I'm not saying that of course, if I may say so). In that words, the best of both worlds, the unrealizable and the implementable. This is hard to say, we have Baby Modula-3, we would have such a growing kernel to type better anything else in this and even beyond the language (as SRC-RR-95 is about) If I may say so, the work done by Cardelly in Fsub was to perform the logical deduction of such rules in accordance to such semantics of an implementation of Modula-3, I believe one could say baby Modula-3, see: http://lucacardelli.name/Artifacts/Drawings/FSub/FSubCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/DynamicTypecheck/DynamicCartoon.pdf http://lucacardelli.name/Artifacts/Drawings/Typing/TypingCartoon.pdf If anyone wants to think more absurdly there are no proves that somebody cares that, or just think that's something undone, but not unrealizable, which is the proof we might want to solve: http://books.google.com/books?id=vJBQX7V8O3sC&lpg=RA1-PA158&ots=1ZJvSIsaeR&dq=fsub%20cardelli&pg=RA1-PA157#v=onepage&q&f=false Absurd doesn't mean unrealizable of course, just that it is undone. (I don't know but whose would call that honest programming, perhaps would ask Dr Greg Nelson) which is by itself a gift of God of the computer typing tasks I believe (not that I compared with Juno, but related better). Thanks in advance --- El dom, 10/7/11, Rodney M. Bates escribi?: > De: Rodney M. Bates > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: "m3devel" > Fecha: domingo, 10 de julio, 2011 08:32 > > On 07/05/2011 09:06 AM, Hendrik Boom wrote: > > If understand correctly, these results are about > figuring out what types > > the programmer meant if he failed to specify > any. My view is that the > > programmer probably knew full well what he meant, and > he might as well > > say so, in the interest of clarity if nothing > else. I find programs > > with secret types to be incomprehensible, even while > I'm writing them. > > > > And getting error messages if what I wrote doesn't > match what I > > intended, and getting better run-time, well, those are > wonderful > > consequences. > > > > -- hendrik > > > > Yes, well said! > > Here is a section of a draft of an article I have been > working on, regarding > why I think systematic dynamic typing in programming > languages is, for everyday > programming, a really bad idea. It's just one of > several arguments. > > ------------------------------------------------------------------------ > > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what > I call > _algorithmically statically typed_. By this, I mean, > informally, that > there is a natural type for the variable that can be > inferred from its > assignments and uses. Moreover, this is a static > property, i.e., > independent of the program's inputs, and thus can be > inferred from the > code alone. > > Slightly more formally, it means that either assignments or > uses of > values that are not members of this type represent buggy > behavior, or > at best are pathological coding and irrelevant to correct > behavior. > In practice, this almost always means such assignments > don't belong, > and such uses will result in immediate crashes. > > There are a lot of pathological cases that would belie my > claim, but > very few that represent either correct and useful program > behavior or > sensible coding style. For more elaborate discussion > of some such > cases and even where they might occasionally be useful, see > (I). > > This concept applies to object-oriented programming. > The algorithmic > static type of a variable is just a common supertype of the > types the > variable could take on. This needs to be high enough > in the class > hierarchy to encompass all the useful values, but not so > high that it > includes anything lacking a method that could be invoked on > the > variable. Rarely will this be the most-general type > in the language. > > In a statically typed language, the programmer will declare > the > variable with a type equal to its algorithmic static > type. I call > this the variable's _linguistic static type_. > Otherwise, a compile > error will almost always result. In a dynamically > typed language, > nothing in the code gives the type explicitly, yet it is > nevertheless > a static property that is vital to a reader's > understanding. Often, > it will be hard work for a reader to infer. > > ------------------------------------------------------------------------ > > Rodney Bates > From dabenavidesd at yahoo.es Tue Jul 12 00:13:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Mon, 11 Jul 2011 23:13:08 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <20110708201634.GB23370@topoi.pooq.com> Message-ID: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: perhaps somehow unrelated of the topic but anyway, there is a JIT compiler interpreter for for C, a subset and superset of it. It's based also in lcc front end, using BURS an have apparently good timings (I guess there is one of those C-- based on lcc as well to generate C, is that true?), see: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 There was also in DEC-SRC a ML, and Lisp implementations with Modula-2+ RT, there is one technical report (I can't find the reference anymore, later), and there is some material back from 1980s http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 http://mumble.net/~jar/tproject/ There should be copies of those reports for anyone of us I believe (Paul McJones is very helpful there, last time I wrote him he answered fast): http://www.softwarepreservation.org/projects/LISP/embedded/ In case it matters the probably best thing would be to compile JIT everything in Abadi-Cardelli calculus ZINC based machine, then compile it to M3CG (see first paragraph and previous web pages) to C-- to C and using the mentioned compiler run the code, I suppose M3CG has RT support doesn't it? I have one target of the C generated code, pretty open and compatible: http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML I have seen there at DEC worked hard to have good compiler infrastructure, the Vesta and Vulcan Development Environment bridge are pretty big pieces of work,, from the above the most interesting for a possible Baby Modula-3 compiler/interpreter is: http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz Maybe this is enough to build one of such if there is value (maybe it is with dynamic linker/optimizer mlcc and mld, a Modula-3 linker would help this much too, I'm not aware of one in existence, just http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html Which is a very similar so stack representation, compiler, interpreter, debugger, linker) Thanks in advance --- El vie, 8/7/11, Hendrik Boom escribi?: > De: Hendrik Boom > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com > Fecha: viernes, 8 de julio, 2011 15:16 > On Wed, Jul 06, 2011 at 04:53:31PM > -0400, Hendrik Boom wrote: > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik Boom > wrote: > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, Daniel > Alejandro Benavides D. wrote: > > > > C-- comes handy to this limited portability > tasks, I wonder why people > > > > don't use it. Maybe the same reason about > Modula-3 too. > > > > > > Perhaps because as far as I know the only code > generator for C-- > > > generates 32-bit Intel code. That doesn't > provide much in the way of > > > portability. > > Looking at the current source code for qc--, there appear > to be > filenames for code genreators for the alpha, sparc, ia64, > mips, x86. > How many of these are in working order I don't > know. There seem to be > subdirecotries of a test2 directory called ppc, sparc, > x86. These are > recognisable processor names, so maybe there's hope for > some of these. > I know the x86 works; I'm using it. Maybe I should > look into ia64 > sometime. > > Things might possibly not be as dismal as I thought. > > > > > > > There's rumours of other code genrators, but I > haven't seen them yet. > > > > Here's some info from the C-- site: > > > > Other C-- compilers > > > > : Fermin Reig's cmmc is implemented in Standard ML on > top of the MLRISC code generator. It emits assembly code for > the Alpha, Sparc, and X86. It implements an obsolete version > of C-- and is no longer maintained. > > > > : The Trampoline C-- Compiler by Sergei Egorov, which > seems to have disappeared from the Web. The Trampoline C-- > compiler implements the obsolete May, 1999 specification and > compiles to C. The author says: it is slow, requires too > much memory, and generates slow C code. But, from the other > hand, it implements almost all of original C-- specification > (including runtime interface), the generated code is > readable, portable, and hopefully correct. > > > > : The Oregon C-- compiler was the first prototype > implementation of C--, also on top of MLRISC. It has been > honorably retired. > > > > -- http://www.cminusminus.org/code.html > > > > Note that none of these are the rumoured ones I > mentioned. But > > that same web page mentions a system called OCamlBurg, > which > > seems to be a parser generator that parses trees > instead of > > strings. It can be used for instruction > selection in a code > > generator. Maybe it's time I looked into it. > > > > -- hendrik > > > > > > > > Well, there is a portable byte-code interpreter > written in C, but > > > that's very specifically not the point of C--. > > > > > > -- hendrik > > -- hendrik > > From dabenavidesd at yahoo.es Wed Jul 13 16:01:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 15:01:36 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310422388.99284.YahooMailClassic@web29720.mail.ird.yahoo.com> Message-ID: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Actually looking more carefully found an actual Gnu C implementation of Obliq (a calculus for it called 0jeblik/IAM, initials for In A Moment): http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf Also the specialty of the language developed further work: http://www.cs.aau.dk/~kleist/Research/reasoning.pdf Also amazingly we would have besides dead-lock free (ESC/Modula-3) and lock free and race conditions free programs using abstract interpretation: This is serious implemented work and well designed I believe, I think we can create a genealogy of ?-calculus for everything we want in Modula-3 too: An actor dedicated process calculus: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 The abstract interpretation for it: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf And for yet another actor calculus of Aspect-oriented programming: Besides that, there are formalization of ?-calculus in Coq: http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf And Isabelle/HOL (see last link in the current message) And the abstract interpretation of it: http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf And even more, the Abadi-Cardelli abstract machine revisited recently: http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf And aspect Oriented programming: http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf I hope this devise some more hard work in Modula-3 (and Obliq too). Thanks in advance --- El lun, 11/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: lunes, 11 de julio, 2011 17:13 > Hi all: > perhaps somehow unrelated of the topic but anyway, there is > a JIT compiler interpreter for for C, a subset and superset > of it. It's based also in lcc front end, using BURS an have > apparently good timings (I guess there is one of those C-- > based on lcc as well to generate C, is that true?), see: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > There was also in DEC-SRC a ML, and Lisp implementations > with Modula-2+ RT, there is one technical report (I can't > find the reference anymore, later), and there is some > material back from 1980s > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > http://mumble.net/~jar/tproject/ > > There should be copies of those reports for anyone of us I > believe (Paul McJones is very helpful there, last time I > wrote him he answered fast): > http://www.softwarepreservation.org/projects/LISP/embedded/ > > In case it matters the probably best thing would be to > compile JIT everything in Abadi-Cardelli calculus ZINC based > machine, then compile it to M3CG (see first paragraph and > previous web pages) to C-- to C and using the mentioned > compiler run the code, I suppose M3CG has RT support doesn't > it? I have one target of the C generated code, pretty open > and compatible: > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > I have seen there at DEC worked hard to have good compiler > infrastructure, the Vesta and Vulcan Development Environment > bridge are pretty big pieces of work,, from the above the > most interesting for a possible Baby Modula-3 > compiler/interpreter is: > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > Maybe this is enough to build one of such if there is value > (maybe it is with dynamic linker/optimizer mlcc and mld, a > Modula-3 linker would help this much too, I'm not aware of > one in existence, just > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > Which is a very similar so stack representation, compiler, > interpreter, debugger, linker) > > Thanks in advance > > --- El vie, 8/7/11, Hendrik Boom > escribi?: > > > De: Hendrik Boom > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com > > Fecha: viernes, 8 de julio, 2011 15:16 > > On Wed, Jul 06, 2011 at 04:53:31PM > > -0400, Hendrik Boom wrote: > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, Hendrik > Boom > > wrote: > > > > On Tue, Jul 05, 2011 at 08:10:15PM +0100, > Daniel > > Alejandro Benavides D. wrote: > > > > > C-- comes handy to this limited > portability > > tasks, I wonder why people > > > > > don't use it. Maybe the same reason > about > > Modula-3 too. > > > > > > > > Perhaps because as far as I know the only > code > > generator for C-- > > > > generates 32-bit Intel code. That > doesn't > > provide much in the way of > > > > portability. > > > > Looking at the current source code for qc--, there > appear > > to be > > filenames for code genreators for the alpha, sparc, > ia64, > > mips, x86. > > How many of these are in working order I don't > > know. There seem to be > > subdirecotries of a test2 directory called ppc, > sparc, > > x86. These are > > recognisable processor names, so maybe there's hope > for > > some of these. > > I know the x86 works; I'm using it. Maybe I > should > > look into ia64 > > sometime. > > > > Things might possibly not be as dismal as I thought. > > > > > > > > > > There's rumours of other code genrators, but > I > > haven't seen them yet. > > > > > > Here's some info from the C-- site: > > > > > > Other C-- compilers > > > > > > : Fermin Reig's cmmc is implemented in Standard > ML on > > top of the MLRISC code generator. It emits assembly > code for > > the Alpha, Sparc, and X86. It implements an obsolete > version > > of C-- and is no longer maintained. > > > > > > : The Trampoline C-- Compiler by Sergei Egorov, > which > > seems to have disappeared from the Web. The Trampoline > C-- > > compiler implements the obsolete May, 1999 > specification and > > compiles to C. The author says: it is slow, requires > too > > much memory, and generates slow C code. But, from the > other > > hand, it implements almost all of original C-- > specification > > (including runtime interface), the generated code is > > readable, portable, and hopefully correct. > > > > > > : The Oregon C-- compiler was the first > prototype > > implementation of C--, also on top of MLRISC. It has > been > > honorably retired. > > > > > > -- http://www.cminusminus.org/code.html > > > > > > Note that none of these are the rumoured ones I > > mentioned. But > > > that same web page mentions a system called > OCamlBurg, > > which > > > seems to be a parser generator that parses trees > > instead of > > > strings. It can be used for instruction > > selection in a code > > > generator. Maybe it's time I looked into > it. > > > > > > -- hendrik > > > > > > > > > > > Well, there is a portable byte-code > interpreter > > written in C, but > > > > that's very specifically not the point of > C--. > > > > > > > > -- hendrik > > > > -- hendrik > > > > > From dabenavidesd at yahoo.es Wed Jul 13 17:42:58 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Wed, 13 Jul 2011 16:42:58 +0100 (BST) Subject: [M3devel] C-- (was: general purpose C libraries (C Kernel)) In-Reply-To: <1310565696.27262.YahooMailClassic@web29708.mail.ird.yahoo.com> Message-ID: <1310571778.12594.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: I apologize because of I forgot the third link of abstract interpretation: http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf I suppose this is enough for an ESC in Obliq or network objects wide, somebody recall the network objects RT errors. Can anyone (they also developed the abstract machine for it): http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf And yet another ?-calculus for containment: http://people.cs.kuleuven.be/~dave.clarke/papers/thesis.ps.gz And eventually to som point the same for baby/Modula-3.: http://basics.sjtu.edu.cn/~yuehg/CONCUR/A%20calculus%20for%20concurrent%20objects%2096.pdf And abstract machines for distributed object calculus too: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.96.8767 Besides there are already some effect of Baby Modula-3 in the time has passed with BabyJ, similar but for the JavaScript type inference part. It is a generalization of Baby Modula-3 http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.25.3910 It has an implementation based on Rhino. Thanks in advance --- El mi?, 13/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] C-- (was: general purpose C libraries (C Kernel)) > Para: m3devel at elegosoft.com, "Hendrik Boom" > Fecha: mi?rcoles, 13 de julio, 2011 09:01 > Hi all: > Actually looking more carefully found an actual Gnu C > implementation of Obliq (a calculus for it called > 0jeblik/IAM, initials for In A Moment): > http://www.daimi.au.dk/~u040896/temp/Speciale/iam.pdf > > Also the specialty of the language developed further work: > > http://www.cs.aau.dk/~kleist/Research/reasoning.pdf > > Also amazingly we would have besides dead-lock free > (ESC/Modula-3) and lock free and race conditions free > programs using abstract interpretation: > > This is serious implemented work and well designed I > believe, I think we can create a genealogy of ?-calculus > for everything we want in Modula-3 too: > An actor dedicated process calculus: > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.4861 > > The abstract interpretation for it: > http://garoche.perso.enseeiht.fr/pub/phd_thesis_garoche.pdf > > http://www.academypublisher.com/jsw/vol02/no03/jsw02038798.pdf > > And for yet another actor calculus of Aspect-oriented > programming: > > Besides that, there are formalization of ?-calculus in > Coq: > http://hal.inria.fr/docs/00/07/33/82/PDF/RR-3307.pdf > > And Isabelle/HOL (see last link in the current message) > > And the abstract interpretation of it: > http://phd.di.unipi.it/Theses/PhDthesis_Cataudella.pdf > > And even more, the Abadi-Cardelli abstract machine > revisited recently: > http://www.brics.dk/RS/08/5/BRICS-RS-08-5.pdf > > And aspect Oriented programming: > http://opus.kobv.de/tuberlin/volltexte/2010/2691/pdf/sudhof_henry.pdf > > I hope this devise some more hard work in Modula-3 (and > Obliq too). > > Thanks in advance > > --- El lun, 11/7/11, Daniel Alejandro Benavides D. > escribi?: > > > De: Daniel Alejandro Benavides D. > > Asunto: Re: [M3devel] C-- (was: general purpose > C libraries (C Kernel)) > > Para: m3devel at elegosoft.com, > "Hendrik Boom" > > Fecha: lunes, 11 de julio, 2011 17:13 > > Hi all: > > perhaps somehow unrelated of the topic but anyway, > there is > > a JIT compiler interpreter for for C, a subset and > superset > > of it. It's based also in lcc front end, using BURS an > have > > apparently good timings (I guess there is one of those > C-- > > based on lcc as well to generate C, is that true?), > see: > > http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.9879 > > > > There was also in DEC-SRC a ML, and Lisp > implementations > > with Modula-2+ RT, there is one technical report (I > can't > > find the reference anymore, later), and there is some > > material back from 1980s > > http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.2417 > > > > http://mumble.net/~jar/tproject/ > > > > There should be copies of those reports for anyone of > us I > > believe (Paul McJones is very helpful there, last time > I > > wrote him he answered fast): > > http://www.softwarepreservation.org/projects/LISP/embedded/ > > > > In case it matters the probably best thing would be > to > > compile JIT everything in Abadi-Cardelli calculus ZINC > based > > machine, then compile it to M3CG (see first paragraph > and > > previous web pages) to C-- to C and using the > mentioned > > compiler run the code, I suppose M3CG has RT support > doesn't > > it? I have one target of the C generated code, pretty > open > > and compatible: > > http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/CORELIB.HTML > > > > I have seen there at DEC worked hard to have good > compiler > > infrastructure, the Vesta and Vulcan Development > Environment > > bridge are pretty big pieces of work,, from the above > the > > most interesting for a possible Baby Modula-3 > > compiler/interpreter is: > > http://mumble.net/~kelsey/papers/comp-by-prog-trans.ps.gz > > > > Maybe this is enough to build one of such if there is > value > > (maybe it is with dynamic linker/optimizer mlcc and > mld, a > > Modula-3 linker would help this much too, I'm not > aware of > > one in existence, just > > > > http://www.sts.tu-harburg.de/projects/Tycoon/p-quest.html > > > > Which is a very similar so stack representation, > compiler, > > interpreter, debugger, linker) > > > > Thanks in advance > > > > --- El vie, 8/7/11, Hendrik Boom > > escribi?: > > > > > De: Hendrik Boom > > > Asunto: Re: [M3devel] C-- (was: general > purpose > > C libraries (C Kernel)) > > > Para: m3devel at elegosoft.com > > > Fecha: viernes, 8 de julio, 2011 15:16 > > > On Wed, Jul 06, 2011 at 04:53:31PM > > > -0400, Hendrik Boom wrote: > > > > On Tue, Jul 05, 2011 at 09:53:43PM -0400, > Hendrik > > Boom > > > wrote: > > > > > On Tue, Jul 05, 2011 at 08:10:15PM > +0100, > > Daniel > > > Alejandro Benavides D. wrote: > > > > > > C-- comes handy to this limited > > portability > > > tasks, I wonder why people > > > > > > don't use it. Maybe the same > reason > > about > > > Modula-3 too. > > > > > > > > > > Perhaps because as far as I know the > only > > code > > > generator for C-- > > > > > generates 32-bit Intel code. > That > > doesn't > > > provide much in the way of > > > > > portability. > > > > > > Looking at the current source code for qc--, > there > > appear > > > to be > > > filenames for code genreators for the alpha, > sparc, > > ia64, > > > mips, x86. > > > How many of these are in working order I don't > > > know. There seem to be > > > subdirecotries of a test2 directory called ppc, > > sparc, > > > x86. These are > > > recognisable processor names, so maybe there's > hope > > for > > > some of these. > > > I know the x86 works; I'm using it. Maybe > I > > should > > > look into ia64 > > > sometime. > > > > > > Things might possibly not be as dismal as I > thought. > > > > > > > > > > > > > There's rumours of other code > genrators, but > > I > > > haven't seen them yet. > > > > > > > > Here's some info from the C-- site: > > > > > > > > Other C-- compilers > > > > > > > > : Fermin Reig's cmmc is implemented in > Standard > > ML on > > > top of the MLRISC code generator. It emits > assembly > > code for > > > the Alpha, Sparc, and X86. It implements an > obsolete > > version > > > of C-- and is no longer maintained. > > > > > > > > : The Trampoline C-- Compiler by Sergei > Egorov, > > which > > > seems to have disappeared from the Web. The > Trampoline > > C-- > > > compiler implements the obsolete May, 1999 > > specification and > > > compiles to C. The author says: it is slow, > requires > > too > > > much memory, and generates slow C code. But, from > the > > other > > > hand, it implements almost all of original C-- > > specification > > > (including runtime interface), the generated code > is > > > readable, portable, and hopefully correct. > > > > > > > > : The Oregon C-- compiler was the first > > prototype > > > implementation of C--, also on top of MLRISC. It > has > > been > > > honorably retired. > > > > > > > > -- http://www.cminusminus.org/code.html > > > > > > > > Note that none of these are the rumoured > ones I > > > mentioned. But > > > > that same web page mentions a system called > > OCamlBurg, > > > which > > > > seems to be a parser generator that parses > trees > > > instead of > > > > strings. It can be used for > instruction > > > selection in a code > > > > generator. Maybe it's time I looked > into > > it. > > > > > > > > -- hendrik > > > > > > > > > > > > > > Well, there is a portable byte-code > > interpreter > > > written in C, but > > > > > that's very specifically not the point > of > > C--. > > > > > > > > > > -- hendrik > > > > > > -- hendrik > > > > > > > > > From hosking at cs.purdue.edu Thu Jul 14 15:38:21 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Thu, 14 Jul 2011 09:38:21 -0400 Subject: [M3devel] Fwd: Output from "cron" command References: <201107141217.p6ECHMm1017803@niagara.cs.purdue.edu> Message-ID: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Issues with the server? Begin forwarded message: > From: Tony Hosking > Date: July 14, 2011 8:17:22 AM EDT > To: hosking at cs.purdue.edu > Subject: Output from "cron" command > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 18:41:40 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 17:41:40 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <4264834E-5D13-4FCE-9A36-29E93E5C7EB9@cs.purdue.edu> Message-ID: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 21:44:36 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 20:44:36 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> Message-ID: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Thu Jul 14 21:48:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 14:48:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > This is to say why threads behaved seamengly for so many years in that > fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and > if so how could one implement Unix API without using same NT thread support > or at most would get the same old behaviour if so) but ALPHA_OSF, which > John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. > Anyway, thus the only working-well behaved platform is that only and how > one could run someone else. Perhaps reworking the SPIN threads to target > everything else (if is enough layered we can somehow think that but would of > course need their sources support besides figuring out how to build them) > the other way would be Alphas hardware like for NIC, routers, etc (Jay's > collection might have some data on that). I know for something the virtual > terminals are in another business company, but all net-ware I don't where's > about wherever that is, although I remember something about Gigabit ATM > servers software that they used to run and develop algorithms of Charles > Tacker. > Thanks in advance > > > --- El *jue, 14/7/11, Daniel Alejandro Benavides D. >* escribi?: > > > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" , "Tony Hosking" < > hosking at cs.purdue.edu> > Fecha: jueves, 14 de julio, 2011 11:41 > > Hi all: > I don't know but I haven't tried the cvsup since I was hit by other > problems (such as recompiling DEC-SRC sources like user space threads but > was able before because are broken, meaning I can't afford the loosely > compatibility and don't want apply to lose the system so quickly). > I would like the path to an approach for solving this issues before going > forward. > > test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 > Name lookup failure for "modula3.elegosoft.com": Host name lookup failed > Will retry at 11:40:54 > > > --- El *jue, 14/7/11, Tony Hosking * escribi?: > > > De: Tony Hosking > Asunto: [M3devel] Fwd: Output from "cron" command > Para: "m3devel developers" > Fecha: jueves, 14 de julio, 2011 08:38 > > Issues with the server? > > Begin forwarded message: > > *From: *Tony Hosking > *Date: *July 14, 2011 8:17:22 AM EDT > *To: *hosking at cs.purdue.edu > *Subject: **Output from "cron" command* > > Your "cron" job on niagara.cs.purdue.edu > $HOME/cm3/scripts/regression/cron.sh > > produced the following output: > > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara release-build" > > creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.10 06:30:05 -- checkout in progress. > [start checkout 2011.07.10 06:30:08] > cd /tmp/build-cm3-20110710-063005-RRa4C1/build > cvs return value: 1 > [end checkout 2011.07.13 16:56:51] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > GMAKE=gmake > export GMAKE > TAR=gtar > export TAR > TESTHOSTNAME=niagara > WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 > LASTREL=5.8.6 > INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 > INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok > INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok > INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current > CM3_OSTYPE=POSIX > CM3_TARGET=SOLgnu > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSSERVER=birch.elegosoft.com > CM3CVSROOT=birch.elegosoft.com:/usr/cvs > BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz > BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz > CM3CVSUSER= > testing ssh birch.elegosoft.com... > ssh birch.elegosoft.com ok > Building cm3. > Tinderbox Tree: "cm3" > Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" > > creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt > > --- > > checkout, compile and test of cm3 ... > 2011.07.13 16:56:59 -- checkout in progress. > [start checkout 2011.07.13 16:57:02] > cd /tmp/build-cm3-20110713-165659-qeaGbN/build > cvs return value: 1 > [end checkout 2011.07.14 08:17:06] > CHECKOUT_RETURN = 1 > *** CHECKOUT FAILED > removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... > cleaning CM3 workspaces... > /homes/hosking/work/cm3-ws/niagara-* > cleanup_all_but_last_n > cleanup_all_but_last_n > /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 > > cleaning regression test log files... > /homes/hosking/tmp/cm3/niagara/cm3-rlog-* > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning m3test log files... > /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr > cleanup_all_but_last_n > cleanup_all_but_last_n > > /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning snapshot files... > /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz > cleanup_all_but_last_n > cleanup_all_but_last_n > > cleaning package reports... > /tmp/cm3-pkg-report-SOLgnu-*.html > cleanup_all_but_last_n > cleanup_all_but_last_n > > done with cleanup_all > > > -- 312-444-2124 Skype: f3l.headhunter Casa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 22:18:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 21:18:52 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310674732.82560.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Thu Jul 14 22:40:35 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 20:40:35 +0000 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com>, <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com>, Message-ID: I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. - Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:00:19 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:00:19 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677219.80729.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I think you are currently correct, still the missing feature would have mirror servers, but how if it doesn't help this (cvsup and dcvs are repository compatible but would need some extra work to install)? test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:51:18 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:10:05 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 12:44:57 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 14:01:22 Retrying Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 15:51:52 test at fbd-desktop:~/cm3$ vim cvsup.cm3 test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.org": Host name lookup failed Will retry at 15:54:17 I was going to give you one more Unix platform where CVsup works as expected but who else cares, if you don't I'm fine at every opinion (is not personal, anyway): http://folk.uio.no/griff/kde/cvsup.html There used to be a Unix for a virtual machine customized Unix (called the simos) for AIX, but still the hardware is needed (Jay did you find a lasting home, if so let me know, but anyway what is the status of that ports as today): http://en.wikipedia.org/wiki/SimOS#cite_note-1 --- El jue, 14/7/11, Jay K escribi?: De: Jay K Asunto: RE: [M3devel] Fwd: Output from "cron" command Para: felipevaldez at gmail.com, dabenavidesd at yahoo.es CC: "m3devel" Fecha: jueves, 14 de julio, 2011 15:40 I agree that the relationship is missing or tenuous. But I was going to be quiet and polite. OP implied question: is modula3.org up? Daniel: run cvsup against modula3.org to see if it is up. Daniel: Talk about cvsup and its unusual behavior wrt threads, and then other hardware and software systems... But I go off on tangents also. On the OP, though, there is very little information to go on. Just that the cron job failed, somehow. That has bugged me a few times. But, one can often go look at Tinderbox or Hudson, for more information, usually clear there. Which I haven't yet. But there have also been almost no changes lately, thus the conjecture as to the problem...and the tangent. Much talk. Little time for code. ?- Jay From: felipevaldez at gmail.com Date: Thu, 14 Jul 2011 14:48:28 -0500 To: dabenavidesd at yahoo.es CC: m3devel at elegosoft.com Subject: Re: [M3devel] Fwd: Output from "cron" command I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which? John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like? user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: ??"cm3" Buildname: ???????"SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:12:50 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:12:50 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: Message-ID: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Thu Jul 14 23:26:05 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 16:26:05 -0500 Subject: [M3devel] LONGINT problem? Message-ID: I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Thu Jul 14 23:58:08 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 14 Jul 2011 22:58:08 +0100 (BST) Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: <1310677970.90812.YahooMailClassic@web29706.mail.ird.yahoo.com> Message-ID: <1310680688.21058.YahooMailClassic@web29720.mail.ird.yahoo.com> Hi all: I will call the inspiration against the conspiracy: http://www.softwareconspiracy.com/ http://web.archive.org/web/20081224105205/http://www.cc.gatech.edu/gvu/people/Phd/Krishna/IWHD.html and the video of it is: http://www.ibiblio.org/openvideo/video/chi/chi95_07_m4.mp4 Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "felipe valdez" CC: m3devel at elegosoft.com Fecha: jueves, 14 de julio, 2011 16:12 Hi all: it is enough of you being helpful, the rest of the worlds needs to understand that's well: http://www.cs.cmu.edu/~rht/leaps/tvcom.html Computer TVboxes are out as well I believe but do we have strong technolgies as well as of that day to say that for today's tools? http://dollar.ecom.cmu.edu/poem/TelevisionComputerthibadeau93%5B1%5D.pdf I don't believe is the tool, again is the people who doesn't understand as well as others from your sides, but maybe some: http://discuss.joelonsoftware.com/default.asp?joel.3.580659.14 I liked the idea of TV internet as for we call edutaintment, but still what is best option for that I say is VisualObliq (whatever that visualization makes sense for the remote controllers). Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." Fecha: jueves, 14 de julio, 2011 15:27 small, delicate, so carefully crafted, your messages serve a purpose beyond making money. however, I recommend you start making money. On Thu, Jul 14, 2011 at 3:18 PM, Daniel Alejandro Benavides D. wrote: Hi all: Oh my mistake, forgot the link: http://archive.computerhistory.org/resources/access/text/Oral_History/102658126.05.01.acc.pdf It's a piece of history lost in the time of computing history (or whatever it became after that IMHO whatever it could became and also perhaps vice versa). There is value in that certainly, here at my school in late 70's and 80's had never the chance to use any Mini, just Micros, which supports the idea of Unix haters (or the best Win consumer of all the world last year) which explain that. Also this times are another history but certainly big influenced by that chance. The all point of it is that there was an OS with actual support for SMP and thread at system-level and I'm trustful its scheduler was enough good source of testing and certainly is better than that if anything else (if I may say so), but would still hang on it (if it doesn't matter anyone else, which I don't consider at this point). Big support of new machines could be strong influenced by that's as well I believe Thanks in advance --- El jue, 14/7/11, felipe valdez escribi?: De: felipe valdez Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "Daniel Alejandro Benavides D." CC: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 14:48 I'm not sure that the message posted by Daniel, is in any way related to the OP. perhaps I'm too dumb? On Thu, Jul 14, 2011 at 2:44 PM, Daniel Alejandro Benavides D. wrote: Hi all: This is to say why threads behaved seamengly for so many years in that fashion (apart of Win32, but as far as I know cygwin doesn't know cvsup, and if so how could one implement Unix API without using same NT thread support or at most would get the same old behaviour if so) but ALPHA_OSF, which John Polstra wrote needed the @M3nopreemption RTParams, I wonder why that's. Anyway, thus the only working-well behaved platform is that only and how one could run someone else. Perhaps reworking the SPIN threads to target everything else (if is enough layered we can somehow think that but would of course need their sources support besides figuring out how to build them) the other way would be Alphas hardware like for NIC, routers, etc (Jay's collection might have some data on that). I know for something the virtual terminals are in another business company, but all net-ware I don't where's about wherever that is, although I remember something about Gigabit ATM servers software that they used to run and develop algorithms of Charles Tacker. Thanks in advance --- El jue, 14/7/11, Daniel Alejandro Benavides D. escribi?: De: Daniel Alejandro Benavides D. Asunto: Re: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" , "Tony Hosking" Fecha: jueves, 14 de julio, 2011 11:41 Hi all: I don't know but I haven't tried the cvsup since I was hit by other problems (such as recompiling DEC-SRC sources like user space threads but was able before because are broken, meaning I can't afford the loosely compatibility and don't want apply to lose the system so quickly). I would like the path to an approach for solving this issues before going forward. test at fbd-desktop:~/cm3$ ../bin/cvsup cvsup.cm3 Name lookup failure for "modula3.elegosoft.com": Host name lookup failed Will retry at 11:40:54 --- El jue, 14/7/11, Tony Hosking escribi?: De: Tony Hosking Asunto: [M3devel] Fwd: Output from "cron" command Para: "m3devel developers" Fecha: jueves, 14 de julio, 2011 08:38 Issues with the server? Begin forwarded message: From: Tony Hosking Date: July 14, 2011 8:17:22 AM EDT To: hosking at cs.purdue.edu Subject: Output from "cron" command Your "cron" job on niagara.cs.purdue.edu $HOME/cm3/scripts/regression/cron.sh produced the following output: GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-10-10-30-03 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara release-build" creating log file /tmp/build-cm3-20110710-063005-RRa4C1/log.txt --- checkout, compile and test of cm3 ... 2011.07.10 06:30:05 -- checkout in progress. [start checkout 2011.07.10 06:30:08] cd /tmp/build-cm3-20110710-063005-RRa4C1/build cvs return value: 1 [end checkout 2011.07.13 16:56:51] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110710-063005-RRa4C1 ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all GMAKE=gmake export GMAKE TAR=gtar export TAR TESTHOSTNAME=niagara WS=/homes/hosking/work/cm3-ws/niagara-2011-07-13-20-56-57 LASTREL=5.8.6 INSTROOT_REL=/homes/hosking/work/cm3-inst/niagara/rel-5.8.6 INSTROOT_POK=/homes/hosking/work/cm3-inst/niagara/prev-ok INSTROOT_LOK=/homes/hosking/work/cm3-inst/niagara/last-ok INSTROOT_CUR=/homes/hosking/work/cm3-inst/niagara/current CM3_OSTYPE=POSIX CM3_TARGET=SOLgnu BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSSERVER=birch.elegosoft.com CM3CVSROOT=birch.elegosoft.com:/usr/cvs BINDISTMIN_NAME=cm3-bin-min-SOLgnu-5.8.6.tgz BINDISTMIN=/homes/hosking/work/cm3-bin-min-SOLgnu-5.8.6.tgz CM3CVSUSER= testing ssh birch.elegosoft.com... ssh birch.elegosoft.com ok Building cm3. Tinderbox Tree: "cm3" Buildname: "SOLgnu SunOS 5.10 niagara lastok-build" creating log file /tmp/build-cm3-20110713-165659-qeaGbN/log.txt --- checkout, compile and test of cm3 ... 2011.07.13 16:56:59 -- checkout in progress. [start checkout 2011.07.13 16:57:02] cd /tmp/build-cm3-20110713-165659-qeaGbN/build cvs return value: 1 [end checkout 2011.07.14 08:17:06] CHECKOUT_RETURN = 1 *** CHECKOUT FAILED removing build tree /tmp/build-cm3-20110713-165659-qeaGbN ... cleaning CM3 workspaces... /homes/hosking/work/cm3-ws/niagara-* cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/work/cm3-ws/niagara-2011-07-12-14-46-51 cleaning regression test log files... /homes/hosking/tmp/cm3/niagara/cm3-rlog-* cleanup_all_but_last_n cleanup_all_but_last_n cleaning m3test log files... /homes/hosking/tmp/cm3/niagara/m3tests-*.stdout cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr cleanup_all_but_last_n cleanup_all_but_last_n /homes/hosking/tmp/cm3/niagara/m3tests-*.stderr.extract cleanup_all_but_last_n cleanup_all_but_last_n cleaning snapshot files... /homes/hosking/tmp/cm3/niagara/cm3-min-POSIX-SOLgnu-*-*.tgz cleanup_all_but_last_n cleanup_all_but_last_n cleaning package reports... /tmp/cm3-pkg-report-SOLgnu-*.html cleanup_all_but_last_n cleanup_all_but_last_n done with cleanup_all -- 312-444-2124Skype: f3l.headhunter Casa: 8043901 -- 312-444-2124Skype: f3l.headhunterCasa: 8043901 -------------- next part -------------- An HTML attachment was scrubbed... URL: From felipevaldez at gmail.com Fri Jul 15 00:15:28 2011 From: felipevaldez at gmail.com (felipe valdez) Date: Thu, 14 Jul 2011 17:15:28 -0500 Subject: [M3devel] Fwd: Output from "cron" command In-Reply-To: References: <1310661700.75043.YahooMailClassic@web29703.mail.ird.yahoo.com> <1310672676.6989.YahooMailClassic@web29714.mail.ird.yahoo.com> Message-ID: On Thu, Jul 14, 2011 at 3:40 PM, Jay K wrote: > I agree that the relationship is missing or tenuous. But I was going to be > quiet and polite. > > I'm sorry if I was perceived as rude or impolite, this was not my intention. it's just sometimes m3devel discussion goes way over my head (knowledge-wise). I guess it's fair to asume a baseline knowledge for participants, but I feel mostly like an outsider. perhaps I should have posed my statement in the form of a question. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jay.krell at cornell.edu Fri Jul 15 00:17:27 2011 From: jay.krell at cornell.edu (Jay K) Date: Thu, 14 Jul 2011 22:17:27 +0000 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGINi := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L;UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kcdurocher at gmail.com Fri Jul 15 01:00:11 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Thu, 14 Jul 2011 18:00:11 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > > ------------------------------ > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 01:15:53 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Thu, 14 Jul 2011 19:15:53 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven't checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Fri Jul 15 03:30:49 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Fri, 15 Jul 2011 02:30:49 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ?On what platform (OS and CPU) are you building and running your Modula-3 program? ?Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ?I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ?Regards,Randy Coleburn ?From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ?Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ?I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ?#include #include #include ?/* should be 64-bit integers if going over 1 billion */typedef unsigned long xint;#define FMT "%lu"?xint total, prim, max_peri;xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3},??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3},??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}};?void new_tri(xint in[]){??????????? int i;??????????? xint t[3], p = in[0] + in[1] + in[2];???????????? if (p > max_peri) return;???????????? prim ++;???????????? /* for every primitive triangle, its multiples would be right-angled too;??????????? * count them up to the max perimeter */??????????? total += max_peri / p;???????????? /* recursively produce next tier by multiplying the matrices */??????????? for (i = 0; i < 3; i++) {??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2];??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2];??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2];??????????????????????? new_tri(t);??????????? }}?int main(){??????????? xint seed[3] = {3, 4, 5};???????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) {??????????????????????? total = prim = 0;??????????????????????? new_tri(seed);???????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n",??????????????????????????????????? max_peri, total, prim);??????????? }??????????? return 0;} ?The output from that code is: ?Up to 10: 0 triples, 0 primitives.Up to 100: 17 triples, 7 primitives.Up to 1000: 325 triples, 70 primitives.Up to 10000: 4858 triples, 703 primitives.Up to 100000: 64741 triples, 7026 primitives.Up to 1000000: 808950 triples, 70229 primitives.Up to 10000000: 9706567 triples, 702309 primitives.Up to 100000000: 113236940 triples, 7023027 primitives. ?Note this output corresponds with the INTEGER output. ?On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote:Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ?MODULE PyTriples EXPORTS Main; ?IMPORT IO, Fmt; ?VAR tcnt, pcnt, max, i: LONGINT; ?PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) =? VAR perim := a + b + c; ? ? ?? BEGIN? ? IF perim <= max THEN? ? ? pcount := pcount + 1L;? ? ? tcount := tcount + max DIV perim;? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount);? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount);? ? END;? END NewTriangle; ?BEGINi := 100L; ?REPEAT? max := i;? tcnt := 0L;? pcnt := 0L;? NewTriangle(3L, 4L, 5L, tcnt, pcnt);? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " &? ? Fmt.LongInt(pcnt) & " Primitives\n");? i := i * 10L;UNTIL i = 10000000L; ?END PyTriples. ?This outputs: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 0858 Triples, 703 Primitives100000: 40701 Triples, 7024 Primitives1000000: 808950 Triples, 70229 Primitives ?However, if I just use INTEGER on a 64 bit machine, I get the proper output: ?100: 17 Triples, 7 Primitives1000: 325 Triples, 70 Primitives10000: 4858 Triples, 703 Primitives100000: 64741 Triples, 7026 Primitives1000000: 808950 Triples, 70229 Primitives ?Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From wagner at elegosoft.com Fri Jul 15 13:22:41 2011 From: wagner at elegosoft.com (Olaf Wagner) Date: Fri, 15 Jul 2011 13:22:41 +0200 Subject: [M3devel] LONGINT problem? In-Reply-To: References: Message-ID: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Quoting Ken Durocher : [...] > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. As only some of the outputs are wrong, I'd guess that one of the output formatting procedures still has a problem with LONGINT. We need to fix that. Olaf -- Olaf Wagner -- elego Software Solutions GmbH Gustav-Meyer-Allee 25 / Geb?ude 12, 13355 Berlin, Germany phone: +49 30 23 45 86 96 mobile: +49 177 2345 869 fax: +49 30 23 45 86 95 http://www.elegosoft.com | Gesch?ftsf?hrer: Olaf Wagner | Sitz: Berlin Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194 From kcdurocher at gmail.com Fri Jul 15 23:53:36 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 16:53:36 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < dabenavidesd at yahoo.es> wrote: > Hi all: > the problem as I see is that your program isn't typed for any platform in > specific just to give you the best answer, then I would stick to the > original and track down the source of the problem (this is very point of > type checking, and e.g extended static checking if I may say so, the need to > verify your statements, the other approach is too cumbersome, i.e make it > believe it works when it doesn't). IMHO this a symptom of UNSAFE type > checking problem, rather of programming or programmer error. > I hope to be clarified about this, as far as I know LONGINT isn't INTEGER > but a bigger or equal type (a bigger INTEGER) which translates better to be > a super type, since it isn't I wonder why is that needed a different type > checker for that (we can transform INTEGER to be the true super type and > LONGINT to be a subtype), can't we make the same checking and just range > check everything else (so it doesn't bother to rewrite every platform code, > a bad symptom certainly, yet I approve the change in the language SPEC but > not its type checking). > Thanks in advance > > --- El *jue, 14/7/11, Coleburn, Randy * escribi?: > > > De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? > Para: "m3devel" , "Ken Durocher" < > kcdurocher at gmail.com> > Fecha: jueves, 14 de julio, 2011 18:15 > > > Ken: > > > > On what platform (OS and CPU) are you building and running your Modula-3 > program? > > > > Support for LONGINT is a relatively new addition to CM3, so it is possible > that something is broken. Perhaps your program can help us track it down. > > > > I haven?t checked thru your program yet, but the fact that it gives the > right answer using INTEGER, but not when using LONGINT, seems to point to > the LONGINT implementation as a potential problem source we should > investigate. > > > > Regards, > > Randy Coleburn > > > > *From:* Ken Durocher [mailto:kcdurocher at gmail.com] > *Sent:* Thursday, July 14, 2011 7:00 PM > *To:* Jay K > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > > > Sorry, to clarify, the LONGINT code does NOT give the correct output, but > the INTEGER code DOES. > > > > I did not write this C code, but it's output is the same as all the other > examples (there is a Java example too, if you want that): > > > > #include > > #include > > #include > > > > /* should be 64-bit integers if going over 1 billion */ > > typedef unsigned long xint; > > #define FMT "%lu" > > > > xint total, prim, max_peri; > > xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, > > { 1, 2, 2, 2, 1, 2, 2, 2, 3}, > > {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; > > > > void new_tri(xint in[]) > > { > > int i; > > xint t[3], p = in[0] + in[1] + in[2]; > > > > if (p > max_peri) return; > > > > prim ++; > > > > /* for every primitive triangle, its multiples would be > right-angled too; > > * count them up to the max perimeter */ > > total += max_peri / p; > > > > /* recursively produce next tier by multiplying the matrices > */ > > for (i = 0; i < 3; i++) { > > t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] > * in[2]; > > t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] > * in[2]; > > t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] > * in[2]; > > new_tri(t); > > } > > } > > > > int main() > > { > > xint seed[3] = {3, 4, 5}; > > > > for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { > > total = prim = 0; > > new_tri(seed); > > > > printf( "Up to "FMT": "FMT" triples, "FMT" > primitives.\n", > > max_peri, total, prim); > > } > > return 0; > > } > > > > The output from that code is: > > > > Up to 10: 0 triples, 0 primitives. > > Up to 100: 17 triples, 7 primitives. > > Up to 1000: 325 triples, 70 primitives. > > Up to 10000: 4858 triples, 703 primitives. > > Up to 100000: 64741 triples, 7026 primitives. > > Up to 1000000: 808950 triples, 70229 primitives. > > Up to 10000000: 9706567 triples, 702309 primitives. > > Up to 100000000: 113236940 triples, 7023027 primitives. > > > > Note this output corresponds with the INTEGER output. > > > > On Thu, Jul 14, 2011 at 5:17 PM, Jay K > > wrote: > > Can you isolate if the problem is the formating/printing, or if it is in > the computation? > i.e.: > > Use "unsafe" and print out a little hex dump of the integer/longint > variables? > > As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, > it might not. > Doesn't really matter. Let's focus on non-working 32bit machine with > LONGINT. > > Also, please confirm which is the right, i.e. by writing it in C. > Also, maybe just try to format as unsigned/hex using the safe interfaces? > Also, this will be good to add to our automated tests. Assuming it doesn't > run too slowly. > Assuming it reproduces for anyone else (sorry, a bit rude of me). > > Later, thank you, > - Jay > > ------------------------------ > > Date: Thu, 14 Jul 2011 16:26:05 -0500 > From: kcdurocher at gmail.com > To: m3devel at elegosoft.com > Subject: [M3devel] LONGINT problem? > > > > I was writing a program to calculate "Pythagorean triples" recursively, and > ran into a problem. Here's the program: > > > > MODULE PyTriples EXPORTS Main; > > > > IMPORT IO, Fmt; > > > > VAR tcnt, pcnt, max, i: LONGINT; > > > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > > VAR perim := a + b + c; > > BEGIN > > IF perim <= max THEN > > pcount := pcount + 1L; > > tcount := tcount + max DIV perim; > > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, > pcount); > > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, > pcount); > > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, > pcount); > > END; > > END NewTriangle; > > > > BEGIN > > i := 100L; > > > > REPEAT > > max := i; > > tcnt := 0L; > > pcnt := 0L; > > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > > Fmt.LongInt(pcnt) & " Primitives\n"); > > i := i * 10L; > > UNTIL i = 10000000L; > > > > END PyTriples. > > > > This outputs: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 0858 Triples, 703 Primitives > > 100000: 40701 Triples, 7024 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > However, if I just use INTEGER on a 64 bit machine, I get the proper > output: > > > > 100: 17 Triples, 7 Primitives > > 1000: 325 Triples, 70 Primitives > > 10000: 4858 Triples, 703 Primitives > > 100000: 64741 Triples, 7026 Primitives > > 1000000: 808950 Triples, 70229 Primitives > > > > Note how 10000 and 100000 are different. The code is literally exactly the > same, only with LONGINT replaced by INTEGER. > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Fri Jul 15 23:54:41 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 17:54:41 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, Message-ID: Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From rcolebur at SCIRES.COM Sat Jul 16 00:04:47 2011 From: rcolebur at SCIRES.COM (Coleburn, Randy) Date: Fri, 15 Jul 2011 18:04:47 -0400 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com>, , Message-ID: Ken: More info re the fix checked in by Rodney Bates: CVSROOT: /usr/cvs Changes by: rodney at birch. 11/07/15 21:17:09 Modified files: cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 Convert.m3 Log message: Fix a tiny typo in Convert.DigitsL that was causing digit 6 to display as '4' and 4 to display as '0'. Regards, Randy Coleburn ________________________________ From: Coleburn, Randy Sent: Friday, July 15, 2011 5:54 PM To: Ken Durocher Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again. It may solve your problem. Regards, Randy Coleburn ________________________________ From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. > wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy > escribi?: De: Coleburn, Randy > Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" >, "Ken Durocher" > Fecha: jueves, 14 de julio, 2011 18:15 Ken: On what platform (OS and CPU) are you building and running your Modula-3 program? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken. Perhaps your program can help us track it down. I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. Regards, Randy Coleburn From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): #include #include #include /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" xint total, prim, max_peri; xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, { 1, 2, 2, 2, 1, 2, 2, 2, 3}, {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; void new_tri(xint in[]) { int i; xint t[3], p = in[0] + in[1] + in[2]; if (p > max_peri) return; prim ++; /* for every primitive triangle, its multiples would be right-angled too; * count them up to the max perimeter */ total += max_peri / p; /* recursively produce next tier by multiplying the matrices */ for (i = 0; i < 3; i++) { t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; new_tri(t); } } int main() { xint seed[3] = {3, 4, 5}; for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { total = prim = 0; new_tri(seed); printf( "Up to "FMT": "FMT" triples, "FMT" primitives.\n", max_peri, total, prim); } return 0; } The output from that code is: Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. Note this output corresponds with the INTEGER output. On Thu, Jul 14, 2011 at 5:17 PM, Jay K > wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, - Jay ________________________________ Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: MODULE PyTriples EXPORTS Main; IMPORT IO, Fmt; VAR tcnt, pcnt, max, i: LONGINT; PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = VAR perim := a + b + c; BEGIN IF perim <= max THEN pcount := pcount + 1L; tcount := tcount + max DIV perim; NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); END; END NewTriangle; BEGIN i := 100L; REPEAT max := i; tcnt := 0L; pcnt := 0L; NewTriangle(3L, 4L, 5L, tcnt, pcnt); IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & Fmt.LongInt(pcnt) & " Primitives\n"); i := i * 10L; UNTIL i = 10000000L; END PyTriples. This outputs: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives However, if I just use INTEGER on a 64 bit machine, I get the proper output: 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. -------------- next part -------------- An HTML attachment was scrubbed... URL: From dabenavidesd at yahoo.es Sat Jul 16 01:31:16 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Sat, 16 Jul 2011 00:31:16 +0100 (BST) Subject: [M3devel] LONGINT problem? In-Reply-To: Message-ID: <1310772676.59827.YahooMailClassic@web29708.mail.ird.yahoo.com> Hi all: I hope sincerely it will, but without knowing that both platforms worked ill I think then the source of the problem yeah is on itself, not in its implicit implications which as far as I can see are not that much proved, but hopefully when we get to the specification of interfaces can make it test it better or plausible. I hope my understanding improves with this discussion going on. Thanks for that. Thanks? in advance. --- El vie, 15/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "Ken Durocher" CC: "m3devel" Fecha: viernes, 15 de julio, 2011 16:54 Ken: With all due respect, I don't think Daniel is on the right track. I note that one of our developers checked in a fix that may solve your problem. There seems to have been a problem in formatting the output where certain digits got messed up. Try updating your system with this new fix and run your program again.? It may solve your problem. Regards, Randy Coleburn ? From: Ken Durocher [kcdurocher at gmail.com] Sent: Friday, July 15, 2011 5:53 PM To: Daniel Alejandro Benavides D. Cc: m3devel; Coleburn, Randy Subject: Re: [M3devel] LONGINT problem? I just checekd, and I can confirm that the LONGINT version of the code produces INCORRECT results on a 32 bit system, as well as a 64 bit system. ?Both are running Linux, with cm3 5.8.6 On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. wrote: Hi all: the problem as I see is that your program isn't typed for any platform in specific just to give you the best answer, then I would stick to the original and track down the source of the problem (this is very point of type checking, and e.g extended static checking if I may say so, the need to verify your statements, the other approach is too cumbersome, i.e make it believe it works when it doesn't). IMHO this a symptom of UNSAFE type checking problem, rather of programming or programmer error. I hope to be clarified about this, as far as I know LONGINT isn't INTEGER but a bigger or equal type (a bigger INTEGER) which translates better to be a super type, since it isn't I wonder why is that needed a different type checker for that (we can transform INTEGER to be the true super type and LONGINT to be a subtype), can't we make the same checking and just range check everything else (so it doesn't bother to rewrite every platform code, a bad symptom certainly, yet I approve the change in the language SPEC but not its type checking). Thanks in advance --- El jue, 14/7/11, Coleburn, Randy escribi?: De: Coleburn, Randy Asunto: Re: [M3devel] LONGINT problem? Para: "m3devel" , "Ken Durocher" Fecha: jueves, 14 de julio, 2011 18:15 Ken: ? On what platform (OS and CPU) are you building and running your Modula-3 program? ? Support for LONGINT is a relatively new addition to CM3, so it is possible that something is broken.? Perhaps your program can help us track it down.? ? I haven?t checked thru your program yet, but the fact that it gives the right answer using INTEGER, but not when using LONGINT, seems to point to the LONGINT implementation as a potential problem source we should investigate. ? Regards, Randy Coleburn ? From: Ken Durocher [mailto:kcdurocher at gmail.com] Sent: Thursday, July 14, 2011 7:00 PM To: Jay K Cc: m3devel Subject: Re: [M3devel] LONGINT problem? ? Sorry, to clarify, the LONGINT code does NOT give the correct output, but the INTEGER code DOES. ? I did not write this C code, but it's output is the same as all the other examples (there is a Java example too, if you want that): ? #include #include #include ? /* should be 64-bit integers if going over 1 billion */ typedef unsigned long xint; #define FMT "%lu" ? xint total, prim, max_peri; xint U[][9] = ?{{ 1, -2, 2, ?2, -1, 2, ?2, -2, 3}, ??????????????????????? { 1, ?2, 2, ?2, ?1, 2, ?2, ?2, 3}, ??????????????????????? {-1, ?2, 2, -2, ?1, 2, -2, ?2, 3}}; ? void new_tri(xint in[]) { ??????????? int i; ??????????? xint t[3], p = in[0] + in[1] + in[2]; ? ??????????? if (p > max_peri) return; ? ??????????? prim ++; ? ??????????? /* for every primitive triangle, its multiples would be right-angled too; ??????????? * count them up to the max perimeter */ ??????????? total += max_peri / p; ? ??????????? /* recursively produce next tier by multiplying the matrices */ ??????????? for (i = 0; i < 3; i++) { ??????????????????????? t[0] = U[i][0] * in[0] + U[i][1] * in[1] + U[i][2] * in[2]; ??????????????????????? t[1] = U[i][3] * in[0] + U[i][4] * in[1] + U[i][5] * in[2]; ??????????????????????? t[2] = U[i][6] * in[0] + U[i][7] * in[1] + U[i][8] * in[2]; ??????????????????????? new_tri(t); ??????????? } } ? int main() { ??????????? xint seed[3] = {3, 4, 5}; ? ??????????? for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { ??????????????????????? total = prim = 0; ??????????????????????? new_tri(seed); ? ??????????????????????? printf(? "Up to "FMT": "FMT" triples, "FMT" primitives.\n", ??????????????????????????????????? max_peri, total, prim); ??????????? } ??????????? return 0; } ? The output from that code is: ? Up to 10: 0 triples, 0 primitives. Up to 100: 17 triples, 7 primitives. Up to 1000: 325 triples, 70 primitives. Up to 10000: 4858 triples, 703 primitives. Up to 100000: 64741 triples, 7026 primitives. Up to 1000000: 808950 triples, 70229 primitives. Up to 10000000: 9706567 triples, 702309 primitives. Up to 100000000: 113236940 triples, 7023027 primitives. ? Note this output corresponds with the INTEGER output. ? On Thu, Jul 14, 2011 at 5:17 PM, Jay K wrote: Can you isolate if the problem is the formating/printing, or if it is in the computation? i.e.: Use "unsafe" and print out a little hex dump of the integer/longint variables? As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, it might not. Doesn't really matter. Let's focus on non-working 32bit machine with LONGINT. Also, please confirm which is the right, i.e. by writing it in C. Also, maybe just try to format as unsigned/hex using the safe interfaces? Also, this will be good to add to our automated tests. Assuming it doesn't run too slowly. Assuming it reproduces for anyone else (sorry, a bit rude of me). Later, thank you, ?- Jay Date: Thu, 14 Jul 2011 16:26:05 -0500 From: kcdurocher at gmail.com To: m3devel at elegosoft.com Subject: [M3devel] LONGINT problem? I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. ?Here's the program: ? MODULE PyTriples EXPORTS Main; ? IMPORT IO, Fmt; ? VAR tcnt, pcnt, max, i: LONGINT; ? PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = ? VAR perim := a + b + c; ? ? ? ? BEGIN ? ? IF perim <= max THEN ? ? ? pcount := pcount + 1L; ? ? ? tcount := tcount + max DIV perim; ? ? ? NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); ? ? ? NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); ? ? END; ? END NewTriangle; ? BEGIN i := 100L; ? REPEAT ? max := i; ? tcnt := 0L; ? pcnt := 0L; ? NewTriangle(3L, 4L, 5L, tcnt, pcnt); ? IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & ? ? Fmt.LongInt(pcnt) & " Primitives\n"); ? i := i * 10L; UNTIL i = 10000000L; ? END PyTriples. ? This outputs: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 0858 Triples, 703 Primitives 100000: 40701 Triples, 7024 Primitives 1000000: 808950 Triples, 70229 Primitives ? However, if I just use INTEGER on a 64 bit machine, I get the proper output: ? 100: 17 Triples, 7 Primitives 1000: 325 Triples, 70 Primitives 10000: 4858 Triples, 703 Primitives 100000: 64741 Triples, 7026 Primitives 1000000: 808950 Triples, 70229 Primitives ? Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. ? ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Fri Jul 15 20:31:29 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Fri, 15 Jul 2011 13:31:29 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> References: <20110715132241.inqmd8n2o8kkcwco@mail.elegosoft.com> Message-ID: <4E208781.7050406@lcwb.coop> On 07/15/2011 06:22 AM, Olaf Wagner wrote: > Quoting Ken Durocher : > [...] >> This outputs: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 0858 Triples, 703 Primitives >> 100000: 40701 Triples, 7024 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper output: >> >> 100: 17 Triples, 7 Primitives >> 1000: 325 Triples, 70 Primitives >> 10000: 4858 Triples, 703 Primitives >> 100000: 64741 Triples, 7026 Primitives >> 1000000: 808950 Triples, 70229 Primitives >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. > > As only some of the outputs are wrong, I'd guess that one of the > output formatting procedures still has a problem with LONGINT. It's definitely in formatting. See this debug log: (m3gdb) p Fmt.LongInt(4858,10) $6 = (*16_0000000000a212d8*) "0858" (m3gdb) p Fmt.Int(4858,10) $7 = (*16_0000000000a21300*) "4858" (m3gdb) p Fmt.LongInt(64741,10) $8 = (*16_0000000000a21328*) "40701" (m3gdb) p Fmt.Int(64741,10) $9 = (*16_0000000000a21350*) "64741" (m3gdb) p Fmt.LongInt(7026,10) $10 = (*16_0000000000a21378*) "7024" (m3gdb) p Fmt.Int(7026,10) $11 = (*16_0000000000a213a0*) "7026" (m3gdb) p Fmt.LongInt(325,10) $12 = (*16_0000000000a213c8*) "325" (m3gdb) p Fmt.Int(325,10) $13 = (*16_0000000000a213f0*) "325" > > We need to fix that. > > Olaf From kcdurocher at gmail.com Sat Jul 16 03:02:01 2011 From: kcdurocher at gmail.com (Ken Durocher) Date: Fri, 15 Jul 2011 20:02:01 -0500 Subject: [M3devel] LONGINT problem? In-Reply-To: References: <1310693449.93896.YahooMailClassic@web29716.mail.ird.yahoo.com> Message-ID: Indeed, this seems to have been the exact problem. Thanks On Fri, Jul 15, 2011 at 5:04 PM, Coleburn, Randy wrote: > Ken: > > More info re the fix checked in by Rodney Bates: > > CVSROOT: /usr/cvs > Changes by: rodney at birch. 11/07/15 21:17:09 > > Modified files: > cm3/m3-libs/m3core/src/convert/: Tag: release_branch_cm3_5_8 > Convert.m3 > > Log message: > Fix a tiny typo in Convert.DigitsL that was causing > digit 6 to display as '4' and 4 to display as '0'. > > Regards, > Randy Coleburn > > ------------------------------ > *From:* Coleburn, Randy > *Sent:* Friday, July 15, 2011 5:54 PM > *To:* Ken Durocher > > *Cc:* m3devel > *Subject:* Re: [M3devel] LONGINT problem? > > Ken: > With all due respect, I don't think Daniel is on the right track. > I note that one of our developers checked in a fix that may solve your > problem. > There seems to have been a problem in formatting the output where certain > digits got messed up. > Try updating your system with this new fix and run your program again. It > may solve your problem. > Regards, > Randy Coleburn > > ------------------------------ > *From:* Ken Durocher [kcdurocher at gmail.com] > *Sent:* Friday, July 15, 2011 5:53 PM > *To:* Daniel Alejandro Benavides D. > *Cc:* m3devel; Coleburn, Randy > *Subject:* Re: [M3devel] LONGINT problem? > > I just checekd, and I can confirm that the LONGINT version of the code > produces INCORRECT results on a 32 bit system, as well as a 64 bit system. > Both are running Linux, with cm3 5.8.6 > > On Thu, Jul 14, 2011 at 8:30 PM, Daniel Alejandro Benavides D. < > dabenavidesd at yahoo.es> wrote: > >> Hi all: >> the problem as I see is that your program isn't typed for any platform in >> specific just to give you the best answer, then I would stick to the >> original and track down the source of the problem (this is very point of >> type checking, and e.g extended static checking if I may say so, the need to >> verify your statements, the other approach is too cumbersome, i.e make it >> believe it works when it doesn't). IMHO this a symptom of UNSAFE type >> checking problem, rather of programming or programmer error. >> I hope to be clarified about this, as far as I know LONGINT isn't INTEGER >> but a bigger or equal type (a bigger INTEGER) which translates better to be >> a super type, since it isn't I wonder why is that needed a different type >> checker for that (we can transform INTEGER to be the true super type and >> LONGINT to be a subtype), can't we make the same checking and just range >> check everything else (so it doesn't bother to rewrite every platform code, >> a bad symptom certainly, yet I approve the change in the language SPEC but >> not its type checking). >> Thanks in advance >> >> --- El *jue, 14/7/11, Coleburn, Randy * escribi?: >> >> >> De: Coleburn, Randy >> Asunto: Re: [M3devel] LONGINT problem? >> Para: "m3devel" , "Ken Durocher" < >> kcdurocher at gmail.com> >> Fecha: jueves, 14 de julio, 2011 18:15 >> >> >> Ken: >> >> >> >> On what platform (OS and CPU) are you building and running your Modula-3 >> program? >> >> >> >> Support for LONGINT is a relatively new addition to CM3, so it is possible >> that something is broken. Perhaps your program can help us track it down. >> >> >> >> I haven?t checked thru your program yet, but the fact that it gives the >> right answer using INTEGER, but not when using LONGINT, seems to point to >> the LONGINT implementation as a potential problem source we should >> investigate. >> >> >> >> Regards, >> >> Randy Coleburn >> >> >> >> *From:* Ken Durocher [mailto:kcdurocher at gmail.com] >> *Sent:* Thursday, July 14, 2011 7:00 PM >> *To:* Jay K >> *Cc:* m3devel >> *Subject:* Re: [M3devel] LONGINT problem? >> >> >> >> Sorry, to clarify, the LONGINT code does NOT give the correct output, but >> the INTEGER code DOES. >> >> >> >> I did not write this C code, but it's output is the same as all the other >> examples (there is a Java example too, if you want that): >> >> >> >> #include >> >> #include >> >> #include >> >> >> >> /* should be 64-bit integers if going over 1 billion */ >> >> typedef unsigned long xint; >> >> #define FMT "%lu" >> >> >> >> xint total, prim, max_peri; >> >> xint U[][9] = {{ 1, -2, 2, 2, -1, 2, 2, -2, 3}, >> >> { 1, 2, 2, 2, 1, 2, 2, 2, 3}, >> >> {-1, 2, 2, -2, 1, 2, -2, 2, 3}}; >> >> >> >> void new_tri(xint in[]) >> >> { >> >> int i; >> >> xint t[3], p = in[0] + in[1] + in[2]; >> >> >> >> if (p > max_peri) return; >> >> >> >> prim ++; >> >> >> >> /* for every primitive triangle, its multiples would be >> right-angled too; >> >> * count them up to the max perimeter */ >> >> total += max_peri / p; >> >> >> >> /* recursively produce next tier by multiplying the matrices >> */ >> >> for (i = 0; i < 3; i++) { >> >> t[0] = U[i][0] * in[0] + U[i][1] * in[1] + >> U[i][2] * in[2]; >> >> t[1] = U[i][3] * in[0] + U[i][4] * in[1] + >> U[i][5] * in[2]; >> >> t[2] = U[i][6] * in[0] + U[i][7] * in[1] + >> U[i][8] * in[2]; >> >> new_tri(t); >> >> } >> >> } >> >> >> >> int main() >> >> { >> >> xint seed[3] = {3, 4, 5}; >> >> >> >> for (max_peri = 10; max_peri <= 100000000; max_peri *= 10) { >> >> total = prim = 0; >> >> new_tri(seed); >> >> >> >> printf( "Up to "FMT": "FMT" triples, "FMT" >> primitives.\n", >> >> max_peri, total, prim); >> >> } >> >> return 0; >> >> } >> >> >> >> The output from that code is: >> >> >> >> Up to 10: 0 triples, 0 primitives. >> >> Up to 100: 17 triples, 7 primitives. >> >> Up to 1000: 325 triples, 70 primitives. >> >> Up to 10000: 4858 triples, 703 primitives. >> >> Up to 100000: 64741 triples, 7026 primitives. >> >> Up to 1000000: 808950 triples, 70229 primitives. >> >> Up to 10000000: 9706567 triples, 702309 primitives. >> >> Up to 100000000: 113236940 triples, 7023027 primitives. >> >> >> >> Note this output corresponds with the INTEGER output. >> >> >> >> On Thu, Jul 14, 2011 at 5:17 PM, Jay K > >> wrote: >> >> Can you isolate if the problem is the formating/printing, or if it is in >> the computation? >> i.e.: >> >> Use "unsafe" and print out a little hex dump of the integer/longint >> variables? >> >> As well, what does LONGINT on a 64bit machine do? Eh..well, it might work, >> it might not. >> Doesn't really matter. Let's focus on non-working 32bit machine with >> LONGINT. >> >> Also, please confirm which is the right, i.e. by writing it in C. >> Also, maybe just try to format as unsigned/hex using the safe interfaces? >> Also, this will be good to add to our automated tests. Assuming it doesn't >> run too slowly. >> Assuming it reproduces for anyone else (sorry, a bit rude of me). >> >> Later, thank you, >> - Jay >> >> ------------------------------ >> >> Date: Thu, 14 Jul 2011 16:26:05 -0500 >> From: kcdurocher at gmail.com >> To: m3devel at elegosoft.com >> Subject: [M3devel] LONGINT problem? >> >> >> >> I was writing a program to calculate "Pythagorean triples" recursively, >> and ran into a problem. Here's the program: >> >> >> >> MODULE PyTriples EXPORTS Main; >> >> >> >> IMPORT IO, Fmt; >> >> >> >> VAR tcnt, pcnt, max, i: LONGINT; >> >> >> >> PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = >> >> VAR perim := a + b + c; >> >> BEGIN >> >> IF perim <= max THEN >> >> pcount := pcount + 1L; >> >> tcount := tcount + max DIV perim; >> >> NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, >> pcount); >> >> NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, >> pcount); >> >> END; >> >> END NewTriangle; >> >> >> >> BEGIN >> >> i := 100L; >> >> >> >> REPEAT >> >> max := i; >> >> tcnt := 0L; >> >> pcnt := 0L; >> >> NewTriangle(3L, 4L, 5L, tcnt, pcnt); >> >> IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & >> >> Fmt.LongInt(pcnt) & " Primitives\n"); >> >> i := i * 10L; >> >> UNTIL i = 10000000L; >> >> >> >> END PyTriples. >> >> >> >> This outputs: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 0858 Triples, 703 Primitives >> >> 100000: 40701 Triples, 7024 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> However, if I just use INTEGER on a 64 bit machine, I get the proper >> output: >> >> >> >> 100: 17 Triples, 7 Primitives >> >> 1000: 325 Triples, 70 Primitives >> >> 10000: 4858 Triples, 703 Primitives >> >> 100000: 64741 Triples, 7026 Primitives >> >> 1000000: 808950 Triples, 70229 Primitives >> >> >> >> Note how 10000 and 100000 are different. The code is literally exactly the >> same, only with LONGINT replaced by INTEGER. >> >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rodney_bates at lcwb.coop Sat Jul 16 13:46:28 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Sat, 16 Jul 2011 06:46:28 -0500 Subject: [M3devel] Fwd: Re: Rd.GetText Question Message-ID: <4E217A14.6010009@lcwb.coop> Sorry for the delay. I sent this several days ago, but it disappeared into email space with neither a bounce nor showing up in the mailing list. I have had this problem intermittently. On 07/08/2011 09:44 PM, Ken Durocher wrote: > The Rd interface defines GetText as GetText(rd: T; len: CARDINAL): TEXT; > > I've noticed in different values for len in different places. Some use Rd.Length(rd) while others use LAST(CARDINAL). > > The latter would limit the text to about 2GB on a 32bit system, correct? Yes. AFAIK, all implementations of Text use variables of type CARDINAL or INTEGER internally for lengths of TEXT values, so the 2GB length limit exists anyway on a 32-bit machine, in lots of places besides just Rd.GetText. > But does Rd.Length() always know what the length will be? > > The interface for Rd states this for Rd.Length(): > "If len(rd) is unknown to the implementation of an intermittent reader, Length(rd) returns -1." > > So my question is, which should I use? Another option would be reading in some arbitrary amount and > then looping until EOF. Which method is best? > For a robust program, not just a quick throwaway, I would say you should always test the result of Rd.Length for -1 before passing it to Rd.GetText, unless you know your reader is non-intermittent and -1 can't happen. Perhaps this is the case in the examples you see that pass it directly to Rd.GetText. Or not. As long as you don't hit the 2GB limit, using LAST(CARDINAL) would always work and be a lot simpler than writing a loop. If you want handle > 2GB on 32-bit machines, the loop will have to handle the pieces some other way than just concatenating them, no doubt a lot more complicated. But LAST(CARDINAL) would still work. > Thanks. Rodney Bates From rodney_bates at lcwb.coop Mon Jul 18 17:42:16 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Mon, 18 Jul 2011 10:42:16 -0500 Subject: [M3devel] LONGINT problem? Message-ID: <4E245458.50308@lcwb.coop> I just checked in a fix to Convert.m3 for this into the release branch. It now gives the expected results for LONGINT. To rebuild, go into the scripts subdirectory and type "./do-cm3-min.sh buildship". This problem has already been fixed in the head in a different and more efficient way. On 07/14/2011 04:26 PM, Ken Durocher wrote: > I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem. Here's the program: > > MODULE PyTriples EXPORTS Main; > > IMPORT IO, Fmt; > > VAR tcnt, pcnt, max, i: LONGINT; > > PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) = > VAR perim := a + b + c; > BEGIN > IF perim <= max THEN > pcount := pcount + 1L; > tcount := tcount + max DIV perim; > NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount); > NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount); > NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount); > END; > END NewTriangle; > > BEGIN > i := 100L; > > REPEAT > max := i; > tcnt := 0L; > pcnt := 0L; > NewTriangle(3L, 4L, 5L, tcnt, pcnt); > IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " & > Fmt.LongInt(pcnt) & " Primitives\n"); > i := i * 10L; > UNTIL i = 10000000L; > > END PyTriples. > > This outputs: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 0858 Triples, 703 Primitives > 100000: 40701 Triples, 7024 Primitives > 1000000: 808950 Triples, 70229 Primitives > > However, if I just use INTEGER on a 64 bit machine, I get the proper output: > > 100: 17 Triples, 7 Primitives > 1000: 325 Triples, 70 Primitives > 10000: 4858 Triples, 703 Primitives > 100000: 64741 Triples, 7026 Primitives > 1000000: 808950 Triples, 70229 Primitives > > Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER. From hendrik at topoi.pooq.com Tue Jul 19 11:32:51 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 05:32:51 -0400 Subject: [M3devel] calling an overridden method Message-ID: <20110719093251.GA15176@topoi.pooq.com> I have a module containing a parent class, and another containing a child class. The parent class contains a method 'foo', which is to be overridden in the child class. But in implementing 'foo' in the child class I want to call the parent's method. Now with the method 'init' there's a trick where in the child's init, you WIDEN self to the parent's type and then call its init. This works because 'init' isn't overridden in an OVERRIDES clause, but is defined as a new method that happens to have the same name. Is there any way to do this with 'foo', where the whole point is that it be an overridden method and not a new one? Do I have to do something like covertly exporting the PROCEDURE that implements 'foo' in the parent's module so that it can be called directly? That would seem to be a violation of modular design. Or is violating modular design exactly what I'm really trying to do here? -- hendrik From mika at async.caltech.edu Tue Jul 19 16:02:55 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:02:55 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719093251.GA15176@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> Message-ID: <20110719140255.ADC4A1A2079@async.async.caltech.edu> TYPE A = OBJECT METHODS m(xxx) END; TYPE B = A OBJECT METHODS m(xxx) END; b := NEW(B); A.m(b,xxx) Mika Hendrik Boom writes: >I have a module containing a parent class, and another containing a >child class. > >The parent class contains a method 'foo', which is to be overridden in >the child class. > >But in implementing 'foo' in the child class I want to call the parent's >method. > >Now with the method 'init' there's a trick where in the child's init, >you WIDEN self to the parent's type and then call its init. >This works because 'init' isn't overridden in an OVERRIDES clause, >but is defined as a new method that happens to have the same name. > >Is there any way to do this with 'foo', where the whole point is that >it be an overridden method and not a new one? > >Do I have to do something like covertly exporting the PROCEDURE that >implements 'foo' in the parent's module so that it can be called >directly? That would seem to be a violation of modular design. Or is >violating modular design exactly what I'm really trying to do here? > >-- hendrik From mika at async.caltech.edu Tue Jul 19 16:11:05 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Tue, 19 Jul 2011 07:11:05 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719140255.ADC4A1A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> Message-ID: <20110719141105.A69011A2079@async.async.caltech.edu> Sorry I'm being confusing here. The code is right but I think your question is a bit confusing. With your init example I don't think you're talking about an overridden init method but a shadowed method. You can't call an overridden method through the widening trick, but you *can* call a shadowed method like that. Mika Mika Nystrom writes: > >TYPE A = OBJECT METHODS m(xxx) END; > >TYPE B = A OBJECT METHODS m(xxx) END; > >b := NEW(B); > >A.m(b,xxx) > > Mika > >Hendrik Boom writes: >>I have a module containing a parent class, and another containing a >>child class. >> >>The parent class contains a method 'foo', which is to be overridden in >>the child class. >> >>But in implementing 'foo' in the child class I want to call the parent's >>method. >> >>Now with the method 'init' there's a trick where in the child's init, >>you WIDEN self to the parent's type and then call its init. >>This works because 'init' isn't overridden in an OVERRIDES clause, >>but is defined as a new method that happens to have the same name. >> >>Is there any way to do this with 'foo', where the whole point is that >>it be an overridden method and not a new one? >> >>Do I have to do something like covertly exporting the PROCEDURE that >>implements 'foo' in the parent's module so that it can be called >>directly? That would seem to be a violation of modular design. Or is >>violating modular design exactly what I'm really trying to do here? >> >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:26:14 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:26:14 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719141105.A69011A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> Message-ID: <20110719172614.GA23492@topoi.pooq.com> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > Sorry I'm being confusing here. > > The code is right but I think your question is a bit confusing. > > With your init example I don't think you're talking about an overridden > init method but a shadowed method. A 'shadowed' method. Is that what you call what's essentially a new method that happens to have the same name? Just like the way a variable in a nested block that has the same name as one in an outer block would be a new variable (I'm not sure Modula 3 allows this, the way C and the Algols do; I find it leads to confusing code). Init is the one I've seen explained in documentation. It's not what I want, because that trick provides no inheritance. > You can't call an overridden method > through the widening trick, but you *can* call a shadowed method like > that. > > Mika > > Mika Nystrom writes: > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > >TYPE B = A OBJECT METHODS m(xxx) END; This is, if I understand the terminology, a declaratin of m as a shadowd method. It's not what I want, because I intend that under normal circumstances, if an B object is used in a context where its static type is known as A, I still want the normal overriding mechanism to ensure that B's m is the one called. I mean something like TYPE B = A OBJECT OVERRIDES m := ... END; > > > >b := NEW(B); > > > >A.m(b,xxx) So this is a way to specifically get the m that belongs with A? Will this work with the way I want to define B and m? as in TYPE A = OBJECT METHODS m(xxx) := bar END; TYPE B = A OBJECT OVERRIDES m := foo END; PROCEDURE foo(self : B, ....) = BEGIN ... ... A.m(self, ...) (* and this ends up calling bar? *) ... END foo; -- hendrik > > > > Mika > > > >Hendrik Boom writes: > >>I have a module containing a parent class, and another containing a > >>child class. > >> > >>The parent class contains a method 'foo', which is to be overridden in > >>the child class. > >> > >>But in implementing 'foo' in the child class I want to call the parent's > >>method. > >> > >>Now with the method 'init' there's a trick where in the child's init, > >>you WIDEN self to the parent's type and then call its init. > >>This works because 'init' isn't overridden in an OVERRIDES clause, > >>but is defined as a new method that happens to have the same name. > >> > >>Is there any way to do this with 'foo', where the whole point is that > >>it be an overridden method and not a new one? > >> > >>Do I have to do something like covertly exporting the PROCEDURE that > >>implements 'foo' in the parent's module so that it can be called > >>directly? That would seem to be a violation of modular design. Or is > >>violating modular design exactly what I'm really trying to do here? > >> > >>-- hendrik From hendrik at topoi.pooq.com Tue Jul 19 19:40:04 2011 From: hendrik at topoi.pooq.com (Hendrik Boom) Date: Tue, 19 Jul 2011 13:40:04 -0400 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719172614.GA23492@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> Message-ID: <20110719174004.GA23557@topoi.pooq.com> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: > On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: > > Sorry I'm being confusing here. > > > > The code is right but I think your question is a bit confusing. > > > > With your init example I don't think you're talking about an overridden > > init method but a shadowed method. > > A 'shadowed' method. Is that what you call what's essentially a new > method that happens to have the same name? Just like the way a variable > in a nested block that has the same name as one in an outer block would > be a new variable (I'm not sure Modula 3 allows this, the way C and the > Algols do; I find it leads to confusing code). > > Init is the one I've seen explained in documentation. It's not what I > want, because that trick provides no inheritance. > > > You can't call an overridden method > > through the widening trick, but you *can* call a shadowed method like > > that. > > > > Mika > > > > Mika Nystrom writes: > > > > > >TYPE A = OBJECT METHODS m(xxx) END; > > > > > >TYPE B = A OBJECT METHODS m(xxx) END; > > This is, if I understand the terminology, a declaratin of m as a shadowd > method. It's not what I want, because I intend that under normal > circumstances, if an B object is used in a context where its static type > is known as A, I still want the normal overriding mechanism to ensure > that B's m is the one called. > > I mean something like > > TYPE B = A OBJECT OVERRIDES m := ... END; > > > > > > >b := NEW(B); > > > > > >A.m(b,xxx) > > So this is a way to specifically get the m that belongs with A? Will > this work with the way I want to define B and m? > > as in > > TYPE A = OBJECT METHODS m(xxx) := bar END; > > TYPE B = A OBJECT OVERRIDES m := foo END; > > PROCEDURE foo(self : B, ....) = > BEGIN > ... > ... > A.m(self, ...) (* and this ends up calling bar? *) > ... > END foo; Well. I tried my version, and it works. Thanks for the advice. -- hendrik > > > > > > > Mika > > > > > >Hendrik Boom writes: > > >>I have a module containing a parent class, and another containing a > > >>child class. > > >> > > >>The parent class contains a method 'foo', which is to be overridden in > > >>the child class. > > >> > > >>But in implementing 'foo' in the child class I want to call the parent's > > >>method. > > >> > > >>Now with the method 'init' there's a trick where in the child's init, > > >>you WIDEN self to the parent's type and then call its init. > > >>This works because 'init' isn't overridden in an OVERRIDES clause, > > >>but is defined as a new method that happens to have the same name. > > >> > > >>Is there any way to do this with 'foo', where the whole point is that > > >>it be an overridden method and not a new one? > > >> > > >>Do I have to do something like covertly exporting the PROCEDURE that > > >>implements 'foo' in the parent's module so that it can be called > > >>directly? That would seem to be a violation of modular design. Or is > > >>violating modular design exactly what I'm really trying to do here? > > >> > > >>-- hendrik From mika at async.caltech.edu Wed Jul 20 09:44:14 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Wed, 20 Jul 2011 00:44:14 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: <20110719174004.GA23557@topoi.pooq.com> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> Message-ID: <20110720074414.6B8301A2079@async.async.caltech.edu> Right, a shadowed method is a new method of the same name, just like Algol block structure. An overridden method is a different binding for the same method. If you override a method, you can't call the old one without using the special A.T.m(a,...) syntax, since there's no binding for the old one within the type record for your object. The A.T.m(...) syntax works whether the method is shadowed or overridden. The widening only works for shadowed methods. The clever thing is that the method dispatch is based on the known type of the object within the context that the method is called, not where the object type is declared. This distinction between overriding and shadowing I think is one of the most brilliant aspects of Modula-3: it avoids the problem that you create an unwanted method override by adding a new method of the same name (whether in a supertype or a subtype). Mika Hendrik Boom writes: >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >> > Sorry I'm being confusing here. >> > >> > The code is right but I think your question is a bit confusing. >> > >> > With your init example I don't think you're talking about an overridden >> > init method but a shadowed method. >> >> A 'shadowed' method. Is that what you call what's essentially a new >> method that happens to have the same name? Just like the way a variable >> in a nested block that has the same name as one in an outer block would >> be a new variable (I'm not sure Modula 3 allows this, the way C and the >> Algols do; I find it leads to confusing code). >> >> Init is the one I've seen explained in documentation. It's not what I >> want, because that trick provides no inheritance. >> >> > You can't call an overridden method >> > through the widening trick, but you *can* call a shadowed method like >> > that. >> > >> > Mika >> > >> > Mika Nystrom writes: >> > > >> > >TYPE A = OBJECT METHODS m(xxx) END; >> > > >> > >TYPE B = A OBJECT METHODS m(xxx) END; >> >> This is, if I understand the terminology, a declaratin of m as a shadowd >> method. It's not what I want, because I intend that under normal >> circumstances, if an B object is used in a context where its static type >> is known as A, I still want the normal overriding mechanism to ensure >> that B's m is the one called. >> >> I mean something like >> >> TYPE B = A OBJECT OVERRIDES m := ... END; >> >> > > >> > >b := NEW(B); >> > > >> > >A.m(b,xxx) >> >> So this is a way to specifically get the m that belongs with A? Will >> this work with the way I want to define B and m? >> >> as in >> >> TYPE A = OBJECT METHODS m(xxx) := bar END; >> >> TYPE B = A OBJECT OVERRIDES m := foo END; >> >> PROCEDURE foo(self : B, ....) = >> BEGIN >> ... >> ... >> A.m(self, ...) (* and this ends up calling bar? *) >> ... >> END foo; > >Well. I tried my version, and it works. Thanks for the advice. > >-- hendrik > >> >> > > >> > > Mika >> > > >> > >Hendrik Boom writes: >> > >>I have a module containing a parent class, and another containing a >> > >>child class. >> > >> >> > >>The parent class contains a method 'foo', which is to be overridden in >> > >>the child class. >> > >> >> > >>But in implementing 'foo' in the child class I want to call the parent's > >> > >>method. >> > >> >> > >>Now with the method 'init' there's a trick where in the child's init, >> > >>you WIDEN self to the parent's type and then call its init. >> > >>This works because 'init' isn't overridden in an OVERRIDES clause, >> > >>but is defined as a new method that happens to have the same name. >> > >> >> > >>Is there any way to do this with 'foo', where the whole point is that >> > >>it be an overridden method and not a new one? >> > >> >> > >>Do I have to do something like covertly exporting the PROCEDURE that >> > >>implements 'foo' in the parent's module so that it can be called >> > >>directly? That would seem to be a violation of modular design. Or is >> > >>violating modular design exactly what I'm really trying to do here? >> > >> >> > >>-- hendrik From rodney_bates at lcwb.coop Wed Jul 20 18:18:37 2011 From: rodney_bates at lcwb.coop (Rodney M. Bates) Date: Wed, 20 Jul 2011 11:18:37 -0500 Subject: [M3devel] calling an overridden method In-Reply-To: <20110720074414.6B8301A2079@async.async.caltech.edu> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> Message-ID: <4E26FFDD.9060009@lcwb.coop> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > Right, a shadowed method is a new method of the same name, just like > Algol block structure. An overridden method is a different binding for > the same method. If you override a method, you can't call the old one > without using the special A.T.m(a,...) syntax, since there's no binding > for the old one within the type record for your object. The A.T.m(...) > syntax works whether the method is shadowed or overridden. The widening > only works for shadowed methods. > > The clever thing is that the method dispatch is based on the known type > of the object within the context that the method is called, not where the > object type is declared. > > This distinction between overriding and shadowing I think is one of the > most brilliant aspects of Modula-3: it avoids the problem that you > create an unwanted method override by adding a new method of the same name > (whether in a supertype or a subtype). This is probably my single favorite example of how C++ is badly designed for practical programming and, more generally, why syntactic explicitness is important. C++ has both overrides and new methods, but it is *very* hard for a programmer to see the difference. Syntactically, they look identical. For a member function declaration to be an override, you need: 1) It has the same simple name as the original. 2) It has an equivalent signature to the original. 3) The original is 'virtual', which in this context means overridable. Equivalence of signatures is complicated, as there are several rules about selected ways they can differ and still be equivalent. For example, int *p and int p[] are equivalent. There can be overloaded (same name, different signatures) original methods, from the same or different superclasses, to be considered. And then this allows what would, I suppose, be called "overloaded overrides", as well as a mix of overloaded new methods and overrides, all with the same name. 'virtual' has at least two very different meanings, one relevant here and one regarding repeated inheritance over multiple paths. The virtual property can come from anywhere in the inheritance hierarchy, and can change between the original method declaration and the subclass we are trying to read. Shadowing can also involve signature equivalence as well as name equality. AFAIK, you can't shadow with the same name and signature, if the relevant inherited method is virtual. But if not, a same-name, signature-equivalent member function is a shadow. Meanwhile, linking up to a precursor to be overridden involves looking at signatures of same-named methods from all superclasses, whereas overload resolution in calls considers only same-named candidates from the same class, before signatures are considered. The interactions with static member functions make things even more complicated. None of this is syntactically explicit. In contrast, Modula-3 says either "METHODS" or "OVERRIDES" explicitly. Moreover, even without these tags, new methods always have signatures, while overrides do not. In my experience, very few C++ programmers, outside of compiler writers and language committee members, understand these semantic rules. And they do predictably get surprised when something turns out to dispatch when they expected it not to or vice versa. When this happens, rather than figure the language out, they just make a note to self to use some coding convention that avoids getting anywhere close, e.g., never using the same name for different methods, only for overrides. (Well, OK, that's probably a good practice anyway, but you see my point, I think.) > > Mika > > > Hendrik Boom writes: >> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> Sorry I'm being confusing here. >>>> >>>> The code is right but I think your question is a bit confusing. >>>> >>>> With your init example I don't think you're talking about an overridden >>>> init method but a shadowed method. >>> >>> A 'shadowed' method. Is that what you call what's essentially a new >>> method that happens to have the same name? Just like the way a variable >>> in a nested block that has the same name as one in an outer block would >>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>> Algols do; I find it leads to confusing code). >>> >>> Init is the one I've seen explained in documentation. It's not what I >>> want, because that trick provides no inheritance. >>> >>>> You can't call an overridden method >>>> through the widening trick, but you *can* call a shadowed method like >>>> that. >>>> >>>> Mika >>>> >>>> Mika Nystrom writes: >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>> >>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>> >>> This is, if I understand the terminology, a declaratin of m as a shadowd >>> method. It's not what I want, because I intend that under normal >>> circumstances, if an B object is used in a context where its static type >>> is known as A, I still want the normal overriding mechanism to ensure >>> that B's m is the one called. >>> >>> I mean something like >>> >>> TYPE B = A OBJECT OVERRIDES m := ... END; >>> >>>>> >>>>> b := NEW(B); >>>>> >>>>> A.m(b,xxx) >>> >>> So this is a way to specifically get the m that belongs with A? Will >>> this work with the way I want to define B and m? >>> >>> as in >>> >>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>> >>> TYPE B = A OBJECT OVERRIDES m := foo END; >>> >>> PROCEDURE foo(self : B, ....) = >>> BEGIN >>> ... >>> ... >>> A.m(self, ...) (* and this ends up calling bar? *) >>> ... >>> END foo; >> >> Well. I tried my version, and it works. Thanks for the advice. >> >> -- hendrik >> >>> >>>>> >>>>> Mika >>>>> >>>>> Hendrik Boom writes: >>>>>> I have a module containing a parent class, and another containing a >>>>>> child class. >>>>>> >>>>>> The parent class contains a method 'foo', which is to be overridden in >>>>>> the child class. >>>>>> >>>>>> But in implementing 'foo' in the child class I want to call the parent's >> >>>>>> method. >>>>>> >>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>> you WIDEN self to the parent's type and then call its init. >>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>> but is defined as a new method that happens to have the same name. >>>>>> >>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>> it be an overridden method and not a new one? >>>>>> >>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>> implements 'foo' in the parent's module so that it can be called >>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>> violating modular design exactly what I'm really trying to do here? >>>>>> >>>>>> -- hendrik > From peter.mckinna at gmail.com Thu Jul 21 08:11:46 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Thu, 21 Jul 2011 16:11:46 +1000 Subject: [M3devel] calling an overridden method In-Reply-To: <4E26FFDD.9060009@lcwb.coop> References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: Forgive my ignorance, but where in the report does it allow A.m(b,xxx) where that A is a type I just compiled it and it works fine but its a syntactic subtlety that I have sadly been unaware. Regards Peter On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote: > > > On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> Right, a shadowed method is a new method of the same name, just like >> Algol block structure. An overridden method is a different binding for >> the same method. If you override a method, you can't call the old one >> without using the special A.T.m(a,...) syntax, since there's no binding >> for the old one within the type record for your object. The A.T.m(...) >> syntax works whether the method is shadowed or overridden. The widening >> only works for shadowed methods. >> >> The clever thing is that the method dispatch is based on the known type >> of the object within the context that the method is called, not where the >> object type is declared. >> >> This distinction between overriding and shadowing I think is one of the >> most brilliant aspects of Modula-3: it avoids the problem that you >> create an unwanted method override by adding a new method of the same name >> (whether in a supertype or a subtype). >> > > This is probably my single favorite example of how C++ is badly > designed for practical programming and, more generally, why syntactic > explicitness is important. > > C++ has both overrides and new methods, but it is *very* hard for a > programmer to see the difference. Syntactically, they look identical. > > For a member function declaration to be an override, you need: > 1) It has the same simple name as the original. > 2) It has an equivalent signature to the original. > 3) The original is 'virtual', which in this context means overridable. > > Equivalence of signatures is complicated, as there are several rules > about selected ways they can differ and still be equivalent. For > example, int *p and int p[] are equivalent. There can be overloaded > (same name, different signatures) original methods, from the same or > different superclasses, to be considered. And then this allows what > would, I suppose, be called "overloaded overrides", as well as a mix > of overloaded new methods and overrides, all with the same name. > > 'virtual' has at least two very different meanings, one relevant here > and one regarding repeated inheritance over multiple paths. The > virtual property can come from anywhere in the inheritance hierarchy, > and can change between the original method declaration and the > subclass we are trying to read. > > Shadowing can also involve signature equivalence as well as name > equality. AFAIK, you can't shadow with the same name and signature, > if the relevant inherited method is virtual. But if not, a same-name, > signature-equivalent member function is a shadow. > > Meanwhile, linking up to a precursor to be overridden involves looking > at signatures of same-named methods from all superclasses, whereas > overload resolution in calls considers only same-named candidates from > the same class, before signatures are considered. > > The interactions with static member functions make things even more > complicated. > > None of this is syntactically explicit. In contrast, Modula-3 says > either "METHODS" or "OVERRIDES" explicitly. Moreover, even without > these tags, new methods always have signatures, while overrides do > not. > > In my experience, very few C++ programmers, outside of compiler > writers and language committee members, understand these semantic > rules. And they do predictably get surprised when something turns out > to dispatch when they expected it not to or vice versa. When this > happens, rather than figure the language out, they just make a note to > self to use some coding convention that avoids getting anywhere close, > e.g., never using the same name for different methods, only for > overrides. (Well, OK, that's probably a good practice anyway, but you > see my point, I think.) > > > >> Mika >> >> >> Hendrik Boom writes: >> >>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>> >>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>> >>>>> Sorry I'm being confusing here. >>>>> >>>>> The code is right but I think your question is a bit confusing. >>>>> >>>>> With your init example I don't think you're talking about an overridden >>>>> init method but a shadowed method. >>>>> >>>> >>>> A 'shadowed' method. Is that what you call what's essentially a new >>>> method that happens to have the same name? Just like the way a variable >>>> in a nested block that has the same name as one in an outer block would >>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>> Algols do; I find it leads to confusing code). >>>> >>>> Init is the one I've seen explained in documentation. It's not what I >>>> want, because that trick provides no inheritance. >>>> >>>> You can't call an overridden method >>>>> through the widening trick, but you *can* call a shadowed method like >>>>> that. >>>>> >>>>> Mika >>>>> >>>>> Mika Nystrom writes: >>>>> >>>>>> >>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>> >>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>> >>>>> >>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>> method. It's not what I want, because I intend that under normal >>>> circumstances, if an B object is used in a context where its static type >>>> is known as A, I still want the normal overriding mechanism to ensure >>>> that B's m is the one called. >>>> >>>> I mean something like >>>> >>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>> >>>> >>>>>> b := NEW(B); >>>>>> >>>>>> A.m(b,xxx) >>>>>> >>>>> >>>> So this is a way to specifically get the m that belongs with A? Will >>>> this work with the way I want to define B and m? >>>> >>>> as in >>>> >>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>> >>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>> >>>> PROCEDURE foo(self : B, ....) = >>>> BEGIN >>>> ... >>>> ... >>>> A.m(self, ...) (* and this ends up calling bar? *) >>>> ... >>>> END foo; >>>> >>> >>> Well. I tried my version, and it works. Thanks for the advice. >>> >>> -- hendrik >>> >>> >>>> >>>>>> Mika >>>>>> >>>>>> Hendrik Boom writes: >>>>>> >>>>>>> I have a module containing a parent class, and another containing a >>>>>>> child class. >>>>>>> >>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>> in >>>>>>> the child class. >>>>>>> >>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>> parent's >>>>>>> >>>>>> >>> method. >>>>>>> >>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>> but is defined as a new method that happens to have the same name. >>>>>>> >>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>> it be an overridden method and not a new one? >>>>>>> >>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>> >>>>>>> -- hendrik >>>>>>> >>>>>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: From mika at async.caltech.edu Thu Jul 21 09:27:43 2011 From: mika at async.caltech.edu (Mika Nystrom) Date: Thu, 21 Jul 2011 00:27:43 -0700 Subject: [M3devel] calling an overridden method In-Reply-To: References: <20110719093251.GA15176@topoi.pooq.com> <20110719140255.ADC4A1A2079@async.async.caltech.edu> <20110719141105.A69011A2079@async.async.caltech.edu> <20110719172614.GA23492@topoi.pooq.com> <20110719174004.GA23557@topoi.pooq.com> <20110720074414.6B8301A2079@async.async.caltech.edu> <4E26FFDD.9060009@lcwb.coop> Message-ID: <20110721072743.5F5A31A2079@async.async.caltech.edu> Section 6, under "Designators". Mika Peter McKinna writes: >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/plain; charset=ISO-8859-1 > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx) >where that A is a type > >I just compiled it and it works fine but its a syntactic subtlety that I >have sadly been unaware. > >Regards Peter > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote >: > >> >> >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: >> >>> Right, a shadowed method is a new method of the same name, just like >>> Algol block structure. An overridden method is a different binding for >>> the same method. If you override a method, you can't call the old one >>> without using the special A.T.m(a,...) syntax, since there's no binding >>> for the old one within the type record for your object. The A.T.m(...) >>> syntax works whether the method is shadowed or overridden. The widening >>> only works for shadowed methods. >>> >>> The clever thing is that the method dispatch is based on the known type >>> of the object within the context that the method is called, not where the >>> object type is declared. >>> >>> This distinction between overriding and shadowing I think is one of the >>> most brilliant aspects of Modula-3: it avoids the problem that you >>> create an unwanted method override by adding a new method of the same name >>> (whether in a supertype or a subtype). >>> >> >> This is probably my single favorite example of how C++ is badly >> designed for practical programming and, more generally, why syntactic >> explicitness is important. >> >> C++ has both overrides and new methods, but it is *very* hard for a >> programmer to see the difference. Syntactically, they look identical. >> >> For a member function declaration to be an override, you need: >> 1) It has the same simple name as the original. >> 2) It has an equivalent signature to the original. >> 3) The original is 'virtual', which in this context means overridable. >> >> Equivalence of signatures is complicated, as there are several rules >> about selected ways they can differ and still be equivalent. For >> example, int *p and int p[] are equivalent. There can be overloaded >> (same name, different signatures) original methods, from the same or >> different superclasses, to be considered. And then this allows what >> would, I suppose, be called "overloaded overrides", as well as a mix >> of overloaded new methods and overrides, all with the same name. >> >> 'virtual' has at least two very different meanings, one relevant here >> and one regarding repeated inheritance over multiple paths. The >> virtual property can come from anywhere in the inheritance hierarchy, >> and can change between the original method declaration and the >> subclass we are trying to read. >> >> Shadowing can also involve signature equivalence as well as name >> equality. AFAIK, you can't shadow with the same name and signature, >> if the relevant inherited method is virtual. But if not, a same-name, >> signature-equivalent member function is a shadow. >> >> Meanwhile, linking up to a precursor to be overridden involves looking >> at signatures of same-named methods from all superclasses, whereas >> overload resolution in calls considers only same-named candidates from >> the same class, before signatures are considered. >> >> The interactions with static member functions make things even more >> complicated. >> >> None of this is syntactically explicit. In contrast, Modula-3 says >> either "METHODS" or "OVERRIDES" explicitly. Moreover, even without >> these tags, new methods always have signatures, while overrides do >> not. >> >> In my experience, very few C++ programmers, outside of compiler >> writers and language committee members, understand these semantic >> rules. And they do predictably get surprised when something turns out >> to dispatch when they expected it not to or vice versa. When this >> happens, rather than figure the language out, they just make a note to >> self to use some coding convention that avoids getting anywhere close, >> e.g., never using the same name for different methods, only for >> overrides. (Well, OK, that's probably a good practice anyway, but you >> see my point, I think.) >> >> >> >>> Mika >>> >>> >>> Hendrik Boom writes: >>> >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote: >>>> >>>>> On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote: >>>>> >>>>>> Sorry I'm being confusing here. >>>>>> >>>>>> The code is right but I think your question is a bit confusing. >>>>>> >>>>>> With your init example I don't think you're talking about an overridden >>>>>> init method but a shadowed method. >>>>>> >>>>> >>>>> A 'shadowed' method. Is that what you call what's essentially a new >>>>> method that happens to have the same name? Just like the way a variable >>>>> in a nested block that has the same name as one in an outer block would >>>>> be a new variable (I'm not sure Modula 3 allows this, the way C and the >>>>> Algols do; I find it leads to confusing code). >>>>> >>>>> Init is the one I've seen explained in documentation. It's not what I >>>>> want, because that trick provides no inheritance. >>>>> >>>>> You can't call an overridden method >>>>>> through the widening trick, but you *can* call a shadowed method like >>>>>> that. >>>>>> >>>>>> Mika >>>>>> >>>>>> Mika Nystrom writes: >>>>>> >>>>>>> >>>>>>> TYPE A = OBJECT METHODS m(xxx) END; >>>>>>> >>>>>>> TYPE B = A OBJECT METHODS m(xxx) END; >>>>>>> >>>>>> >>>>> This is, if I understand the terminology, a declaratin of m as a shadowd >>>>> method. It's not what I want, because I intend that under normal >>>>> circumstances, if an B object is used in a context where its static type >>>>> is known as A, I still want the normal overriding mechanism to ensure >>>>> that B's m is the one called. >>>>> >>>>> I mean something like >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := ... END; >>>>> >>>>> >>>>>>> b := NEW(B); >>>>>>> >>>>>>> A.m(b,xxx) >>>>>>> >>>>>> >>>>> So this is a way to specifically get the m that belongs with A? Will >>>>> this work with the way I want to define B and m? >>>>> >>>>> as in >>>>> >>>>> TYPE A = OBJECT METHODS m(xxx) := bar END; >>>>> >>>>> TYPE B = A OBJECT OVERRIDES m := foo END; >>>>> >>>>> PROCEDURE foo(self : B, ....) = >>>>> BEGIN >>>>> ... >>>>> ... >>>>> A.m(self, ...) (* and this ends up calling bar? *) >>>>> ... >>>>> END foo; >>>>> >>>> >>>> Well. I tried my version, and it works. Thanks for the advice. >>>> >>>> -- hendrik >>>> >>>> >>>>> >>>>>>> Mika >>>>>>> >>>>>>> Hendrik Boom writes: >>>>>>> >>>>>>>> I have a module containing a parent class, and another containing a >>>>>>>> child class. >>>>>>>> >>>>>>>> The parent class contains a method 'foo', which is to be overridden >>>>>>>> in >>>>>>>> the child class. >>>>>>>> >>>>>>>> But in implementing 'foo' in the child class I want to call the >>>>>>>> parent's >>>>>>>> >>>>>>> >>>> method. >>>>>>>> >>>>>>>> Now with the method 'init' there's a trick where in the child's init, >>>>>>>> you WIDEN self to the parent's type and then call its init. >>>>>>>> This works because 'init' isn't overridden in an OVERRIDES clause, >>>>>>>> but is defined as a new method that happens to have the same name. >>>>>>>> >>>>>>>> Is there any way to do this with 'foo', where the whole point is that >>>>>>>> it be an overridden method and not a new one? >>>>>>>> >>>>>>>> Do I have to do something like covertly exporting the PROCEDURE that >>>>>>>> implements 'foo' in the parent's module so that it can be called >>>>>>>> directly? That would seem to be a violation of modular design. Or is >>>>>>>> violating modular design exactly what I'm really trying to do here? >>>>>>>> >>>>>>>> -- hendrik >>>>>>>> >>>>>>> >>> > >--0015174c40fe49b5ad04a88e39c4 >Content-Type: text/html; charset=ISO-8859-1 >Content-Transfer-Encoding: quoted-printable > >Forgive my ignorance, but where in the report does it allow A.m(b,xxx)=A0 w= >here that A is a type

I just compiled it and it works fine but its a= > syntactic subtlety that I have sadly been unaware.

Regards Peter> >
On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. B= >ates <rodney= >_bates at lcwb.coop> wrote:
style=3D"border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.= >8ex; padding-left: 1ex;"> >
>
>On 07/20/2011 02:44 AM, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Right, a shadowed method is a new method of the same name, just like
>Algol block structure. =A0An overridden method is a different binding forr> >the same method. =A0If you override a method, you can't call the old on= >e
>without using the special A.T.m(a,...) syntax, since there's no binding= >
>for the old one within the type record for your object. =A0The A.T.m(...)r> >syntax works whether the method is shadowed or overridden. =A0The widening<= >br> >only works for shadowed methods.
>
>The clever thing is that the method dispatch is based on the known type
>of the object within the context that the method is called, not where ther> >object type is declared.
>
>This distinction between overriding and shadowing I think is one of the
>most brilliant aspects of Modula-3: it avoids the problem that you
>create an unwanted method override by adding a new method of the same name<= >br> >(whether in a supertype or a subtype).
>
>
>This is probably my single favorite example of how C++ is badly
>designed for practical programming and, more generally, why syntactic
>explicitness is important.
>
>C++ has both overrides and new methods, but it is *very* hard for a
>programmer to see the difference. =A0Syntactically, they look identical.> >
>For a member function declaration to be an override, you need:
>1) It has the same simple name as the original.
>2) It has an equivalent signature to the original.
>3) The original is 'virtual', which in this context means overridab= >le.
>
>Equivalence of signatures is complicated, as there are several rules
>about selected ways they can differ and still be equivalent. =A0For
>example, int *p and int p[] are equivalent. =A0There can be overloaded
>(same name, different signatures) original methods, from the same or
>different superclasses, to be considered. =A0And then this allows what
>would, I suppose, be called "overloaded overrides", as well as a = >mix
>of overloaded new methods and overrides, all with the same name.
>
>'virtual' has at least two very different meanings, one relevant he= >re
>and one regarding repeated inheritance over multiple paths. =A0The
>virtual property can come from anywhere in the inheritance hierarchy,
>and can change between the original method declaration and the
>subclass we are trying to read.
>
>Shadowing can also involve signature equivalence as well as name
>equality. =A0AFAIK, you can't shadow with the same name and signature,<= >br> >if the relevant inherited method is virtual. =A0But if not, a same-name,> >signature-equivalent member function is a shadow.
>
>Meanwhile, linking up to a precursor to be overridden involves looking
>at signatures of same-named methods from all superclasses, whereas
>overload resolution in calls considers only same-named candidates from
>the same class, before signatures are considered.
>
>The interactions with static member functions make things even more
>complicated.
>
>None of this is syntactically explicit. =A0In contrast, Modula-3 says
>either "METHODS" or "OVERRIDES" explicitly. =A0Moreover= >, even without
>these tags, new methods always have signatures, while overrides do
>not.
>
>In my experience, very few C++ programmers, outside of compiler
>writers and language committee members, understand these semantic
>rules. =A0And they do predictably get surprised when something turns out> >to dispatch when they expected it not to or vice versa. =A0When this
>happens, rather than figure the language out, they just make a note to
>self to use some coding convention that avoids getting anywhere close,
>e.g., never using the same name for different methods, only for
>overrides. (Well, OK, that's probably a good practice anyway, but your> >see my point, I think.)
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
> =A0 =A0 =A0Mika
>
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom wrote:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >Sorry I'm being confusing here.
>
>The code is right but I think your question is a bit confusing.
>
>With your init example I don't think you're talking about an overri= >dden
>init method but a shadowed method.
>
>
>A 'shadowed' method. =A0Is that what you call what's essentiall= >y a new
>method that happens to have the same name? =A0Just like the way a variable<= >br> >in a nested block that has the same name as one in an outer block would
>be a new variable (I'm not sure Modula 3 allows this, the way C and the= >
>Algols do; I find it leads to confusing code).
>
>Init is the one I've seen explained in documentation. =A0It's =A0no= >t what I
>want, because that trick provides no inheritance.
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >You can't call an overridden method
>through the widening trick, but you *can* call a shadowed method like
>that.
>
> =A0 =A0 =A0Mika
>
>Mika Nystrom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>TYPE A =3D OBJECT METHODS m(xxx) END;
>
>TYPE B =3D A OBJECT METHODS m(xxx) END;
>
>
>This is, if I understand the terminology, a declaratin of m as a shadowd> >method. =A0It's not what I want, because I =A0intend that under normal<= >br> >circumstances, if an B object is used in a context where its static type> >is known as A, I still want the normal overriding mechanism to ensure
>that B's m is the one called.
>
>I mean something like
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D ... END;
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
>b :=3D NEW(B);
>
>A.m(b,xxx)
>
>
>So this is a way to specifically get the m that belongs with A? =A0Will
>this work with the way I want to define B and m?
>
>as in
>
>TYPE A =3D OBJECT METHODS m(xxx) :=3D bar END;
>
>TYPE B =3D A OBJECT OVERRIDES m :=3D foo END;
>
>PROCEDURE foo(self : B, ....) =3D
>BEGIN
> =A0 ...
> =A0 ...
> =A0 =A0A.m(self, ...) =A0 (* and this ends up calling bar? *)
> =A0 ...
>END foo;
>
>
>Well. I tried my version, and it works. =A0Thanks for the advice.
>
>-- hendrik
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
> =A0 =A0 =A0Mika
>
>Hendrik Boom writes:
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >I have a module containing a parent class, and another containing a
>child class.
>
>The parent class contains a method 'foo', which is to be overridden= > in
>the child class.
>
>But in implementing 'foo' in the child class I want to call the par= >ent's
>
>
>
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> >
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin= >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >method.
>
>Now with the method 'init' there's a trick where in the child&#= >39;s init,
>you WIDEN self to the parent's type and then call its init.
>This works because 'init' isn't overridden in an OVERRIDES clau= >se,
>but is defined as a new method that happens to have the same name.
>
>Is there any way to do this with 'foo', where the whole point is th= >at
>it be an overridden method and not a new one?
>
>Do I have to do something like covertly exporting the PROCEDURE that
>implements 'foo' in the parent's module so that it can be calle= >d
>directly? That would seem to be a violation of modular design. =A0Or is
>violating modular design exactly what I'm really trying to do here?
>
>-- hendrik
>
>
>
>

> >--0015174c40fe49b5ad04a88e39c4-- From dabenavidesd at yahoo.es Thu Jul 21 18:14:52 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 17:14:52 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <20110721072743.5F5A31A2079@async.async.caltech.edu> Message-ID: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Hi all: I find this terminology of types and checks and inheritance big convoluted here (but would allow me this to say we need a baby toy to plataform independent Modula-3 language or sort of artifact, but not everything we would want since there seems to be pieces of work which are undecidable, how one can create some application of it, it seems odd to try those for me). Although it is better to start with something to do that and I fact I believe it's already started by a great computologist, Coenraad Bron with work on Pascal, Modular pascal at the University of Twente, The Netherlands and later in Oberon with Modula-3 reusability and typability, at University of Groningen, The Netherlands, after all, Coen Bron, worked hard for that. Indeed people there liked Modula-like languages a lot, which makes sense for yet another local Prof visit there. I don't know many or too much but I believe great computer scientist came from there as well but certainly is a good resource of efforts in tools and so for ourselves Thanks in advance --- El jue, 21/7/11, Mika Nystrom escribi?: > De: Mika Nystrom > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 02:27 > Section 6, under "Designators". > > Mika > > Peter McKinna writes: > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/plain; charset=ISO-8859-1 > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx) > >where that A is a type > > > >I just compiled it and it works fine but its a > syntactic subtlety that I > >have sadly been unaware. > > > >Regards Peter > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates wrote > >: > > > >> > >> > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > >> > >>> Right, a shadowed method is a new method of > the same name, just like > >>> Algol block structure. An overridden > method is a different binding for > >>> the same method. If you override a > method, you can't call the old one > >>> without using the special A.T.m(a,...) syntax, > since there's no binding > >>> for the old one within the type record for > your object. The A.T.m(...) > >>> syntax works whether the method is shadowed or > overridden. The widening > >>> only works for shadowed methods. > >>> > >>> The clever thing is that the method dispatch > is based on the known type > >>> of the object within the context that the > method is called, not where the > >>> object type is declared. > >>> > >>> This distinction between overriding and > shadowing I think is one of the > >>> most brilliant aspects of Modula-3: it avoids > the problem that you > >>> create an unwanted method override by adding a > new method of the same name > >>> (whether in a supertype or a subtype). > >>> > >> > >> This is probably my single favorite example of how > C++ is badly > >> designed for practical programming and, more > generally, why syntactic > >> explicitness is important. > >> > >> C++ has both overrides and new methods, but it is > *very* hard for a > >> programmer to see the difference. > Syntactically, they look identical. > >> > >> For a member function declaration to be an > override, you need: > >> 1) It has the same simple name as the original. > >> 2) It has an equivalent signature to the > original. > >> 3) The original is 'virtual', which in this > context means overridable. > >> > >> Equivalence of signatures is complicated, as there > are several rules > >> about selected ways they can differ and still be > equivalent. For > >> example, int *p and int p[] are equivalent. > There can be overloaded > >> (same name, different signatures) original > methods, from the same or > >> different superclasses, to be considered. > And then this allows what > >> would, I suppose, be called "overloaded > overrides", as well as a mix > >> of overloaded new methods and overrides, all with > the same name. > >> > >> 'virtual' has at least two very different > meanings, one relevant here > >> and one regarding repeated inheritance over > multiple paths. The > >> virtual property can come from anywhere in the > inheritance hierarchy, > >> and can change between the original method > declaration and the > >> subclass we are trying to read. > >> > >> Shadowing can also involve signature equivalence > as well as name > >> equality. AFAIK, you can't shadow with the > same name and signature, > >> if the relevant inherited method is virtual. > But if not, a same-name, > >> signature-equivalent member function is a shadow. > >> > >> Meanwhile, linking up to a precursor to be > overridden involves looking > >> at signatures of same-named methods from all > superclasses, whereas > >> overload resolution in calls considers only > same-named candidates from > >> the same class, before signatures are considered. > >> > >> The interactions with static member functions make > things even more > >> complicated. > >> > >> None of this is syntactically explicit. In > contrast, Modula-3 says > >> either "METHODS" or "OVERRIDES" explicitly. > Moreover, even without > >> these tags, new methods always have signatures, > while overrides do > >> not. > >> > >> In my experience, very few C++ programmers, > outside of compiler > >> writers and language committee members, understand > these semantic > >> rules. And they do predictably get surprised > when something turns out > >> to dispatch when they expected it not to or vice > versa. When this > >> happens, rather than figure the language out, they > just make a note to > >> self to use some coding convention that avoids > getting anywhere close, > >> e.g., never using the same name for different > methods, only for > >> overrides. (Well, OK, that's probably a good > practice anyway, but you > >> see my point, I think.) > >> > >> > >> > >>> Mika > >>> > >>> > >>> Hendrik Boom writes: > >>> > >>>> On Tue, Jul 19, 2011 at 01:26:14PM -0400, > Hendrik Boom wrote: > >>>> > >>>>> On Tue, Jul 19, 2011 at 07:11:05AM > -0700, Mika Nystrom wrote: > >>>>> > >>>>>> Sorry I'm being confusing here. > >>>>>> > >>>>>> The code is right but I think your > question is a bit confusing. > >>>>>> > >>>>>> With your init example I don't > think you're talking about an overridden > >>>>>> init method but a shadowed > method. > >>>>>> > >>>>> > >>>>> A 'shadowed' method. Is that > what you call what's essentially a new > >>>>> method that happens to have the same > name? Just like the way a variable > >>>>> in a nested block that has the same > name as one in an outer block would > >>>>> be a new variable (I'm not sure Modula > 3 allows this, the way C and the > >>>>> Algols do; I find it leads to > confusing code). > >>>>> > >>>>> Init is the one I've seen explained in > documentation. It's not what I > >>>>> want, because that trick provides no > inheritance. > >>>>> > >>>>> You can't call an overridden > method > >>>>>> through the widening trick, but > you *can* call a shadowed method like > >>>>>> that. > >>>>>> > >>>>>> Mika > >>>>>> > >>>>>> Mika Nystrom writes: > >>>>>> > >>>>>>> > >>>>>>> TYPE A = OBJECT METHODS m(xxx) > END; > >>>>>>> > >>>>>>> TYPE B = A OBJECT METHODS > m(xxx) END; > >>>>>>> > >>>>>> > >>>>> This is, if I understand the > terminology, a declaratin of m as a shadowd > >>>>> method. It's not what I want, > because I intend that under normal > >>>>> circumstances, if an B object is used > in a context where its static type > >>>>> is known as A, I still want the normal > overriding mechanism to ensure > >>>>> that B's m is the one called. > >>>>> > >>>>> I mean something like > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := ... > END; > >>>>> > >>>>> > >>>>>>> b := NEW(B); > >>>>>>> > >>>>>>> A.m(b,xxx) > >>>>>>> > >>>>>> > >>>>> So this is a way to specifically get > the m that belongs with A? Will > >>>>> this work with the way I want to > define B and m? > >>>>> > >>>>> as in > >>>>> > >>>>> TYPE A = OBJECT METHODS m(xxx) := bar > END; > >>>>> > >>>>> TYPE B = A OBJECT OVERRIDES m := foo > END; > >>>>> > >>>>> PROCEDURE foo(self : B, ....) = > >>>>> BEGIN > >>>>> ... > >>>>> ... > >>>>> A.m(self, > ...) (* and this ends up calling bar? *) > >>>>> ... > >>>>> END foo; > >>>>> > >>>> > >>>> Well. I tried my version, and it > works. Thanks for the advice. > >>>> > >>>> -- hendrik > >>>> > >>>> > >>>>> > >>>>>>> Mika > >>>>>>> > >>>>>>> Hendrik Boom writes: > >>>>>>> > >>>>>>>> I have a module containing > a parent class, and another containing a > >>>>>>>> child class. > >>>>>>>> > >>>>>>>> The parent class contains > a method 'foo', which is to be overridden > >>>>>>>> in > >>>>>>>> the child class. > >>>>>>>> > >>>>>>>> But in implementing 'foo' > in the child class I want to call the > >>>>>>>> parent's > >>>>>>>> > >>>>>>> > >>>> method. > >>>>>>>> > >>>>>>>> Now with the method 'init' > there's a trick where in the child's init, > >>>>>>>> you WIDEN self to the > parent's type and then call its init. > >>>>>>>> This works because 'init' > isn't overridden in an OVERRIDES clause, > >>>>>>>> but is defined as a new > method that happens to have the same name. > >>>>>>>> > >>>>>>>> Is there any way to do > this with 'foo', where the whole point is that > >>>>>>>> it be an overridden method > and not a new one? > >>>>>>>> > >>>>>>>> Do I have to do something > like covertly exporting the PROCEDURE that > >>>>>>>> implements 'foo' in the > parent's module so that it can be called > >>>>>>>> directly? That would seem > to be a violation of modular design. Or is > >>>>>>>> violating modular design > exactly what I'm really trying to do here? > >>>>>>>> > >>>>>>>> -- hendrik > >>>>>>>> > >>>>>>> > >>> > > > >--0015174c40fe49b5ad04a88e39c4 > >Content-Type: text/html; charset=ISO-8859-1 > >Content-Transfer-Encoding: quoted-printable > > > >Forgive my ignorance, but where in the report does it > allow A.m(b,xxx)=A0 w= > >here that A is a type

I just > compiled it and it works fine but its a= > > syntactic subtlety that I have sadly been > unaware.

Regards Peter >> > >
On Thu, Jul > 21, 2011 at 2:18 AM, Rodney M. B= > >ates < href=3D"mailto:rodney_bates at lcwb.coop">rodney= > >_bates at lcwb.coop> > wrote:
> style=3D"border-left: 1px solid rgb(204, 204, 204); > margin: 0pt 0pt 0pt 0.= > >8ex; padding-left: 1ex;"> > >
> >
> >On 07/20/2011 02:44 AM, Mika Nystrom wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Right, a shadowed method is a new method of the same > name, just like
> >Algol block structure. =A0An overridden method is a > different binding for >r> > >the same method. =A0If you override a method, you > can't call the old on= > >e
> >without using the special A.T.m(a,...) syntax, since > there's no binding= > >
> >for the old one within the type record for your object. > =A0The A.T.m(...) >r> > >syntax works whether the method is shadowed or > overridden. =A0The widening<= > >br> > >only works for shadowed methods.
> >
> >The clever thing is that the method dispatch is based > on the known type
> >of the object within the context that the method is > called, not where the >r> > >object type is declared.
> >
> >This distinction between overriding and shadowing I > think is one of the
> >most brilliant aspects of Modula-3: it avoids the > problem that you
> >create an unwanted method override by adding a new > method of the same name<= > >br> > >(whether in a supertype or a subtype).
> >
> >
> >This is probably my single favorite example of how C++ > is badly
> >designed for practical programming and, more generally, > why syntactic
> >explicitness is important.
> >
> >C++ has both overrides and new methods, but it is > *very* hard for a
> >programmer to see the difference. =A0Syntactically, > they look identical. >> > >
> >For a member function declaration to be an override, > you need:
> >1) It has the same simple name as the > original.
> >2) It has an equivalent signature to the > original.
> >3) The original is 'virtual', which in this > context means overridab= > >le.
> >
> >Equivalence of signatures is complicated, as there are > several rules
> >about selected ways they can differ and still be > equivalent. =A0For
> >example, int *p and int p[] are equivalent. =A0There > can be overloaded
> >(same name, different signatures) original methods, > from the same or
> >different superclasses, to be considered. =A0And then > this allows what
> >would, I suppose, be called "overloaded > overrides", as well as a = > >mix
> >of overloaded new methods and overrides, all with the > same name.
> >
> >'virtual' has at least two very different > meanings, one relevant he= > >re
> >and one regarding repeated inheritance over multiple > paths. =A0The
> >virtual property can come from anywhere in the > inheritance hierarchy,
> >and can change between the original method declaration > and the
> >subclass we are trying to read.
> >
> >Shadowing can also involve signature equivalence as > well as name
> >equality. =A0AFAIK, you can't shadow with the same > name and signature,<= > >br> > >if the relevant inherited method is virtual. =A0But if > not, a same-name, >> > >signature-equivalent member function is a > shadow.
> >
> >Meanwhile, linking up to a precursor to be overridden > involves looking
> >at signatures of same-named methods from all > superclasses, whereas
> >overload resolution in calls considers only same-named > candidates from
> >the same class, before signatures are > considered.
> >
> >The interactions with static member functions make > things even more
> >complicated.
> >
> >None of this is syntactically explicit. =A0In contrast, > Modula-3 says
> >either "METHODS" or > "OVERRIDES" explicitly. =A0Moreover= > >, even without
> >these tags, new methods always have signatures, while > overrides do
> >not.
> >
> >In my experience, very few C++ programmers, outside of > compiler
> >writers and language committee members, understand > these semantic
> >rules. =A0And they do predictably get surprised when > something turns out >> > >to dispatch when they expected it not to or vice versa. > =A0When this
> >happens, rather than figure the language out, they just > make a note to
> >self to use some coding convention that avoids getting > anywhere close,
> >e.g., never using the same name for different methods, > only for
> >overrides. (Well, OK, that's probably a good > practice anyway, but you >r> > >see my point, I think.)
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> > =A0 =A0 =A0Mika
> >
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik Boom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika Nystrom > wrote:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >Sorry I'm being confusing here.
> >
> >The code is right but I think your question is a bit > confusing.
> >
> >With your init example I don't think you're > talking about an overri= > >dden
> >init method but a shadowed method.
> >
> >
> >A 'shadowed' method. =A0Is that what you call > what's essentiall= > >y a new
> >method that happens to have the same name? =A0Just like > the way a variable<= > >br> > >in a nested block that has the same name as one in an > outer block would
> >be a new variable (I'm not sure Modula 3 allows > this, the way C and the= > >
> >Algols do; I find it leads to confusing > code).
> >
> >Init is the one I've seen explained in > documentation. =A0It's =A0no= > >t what I
> >want, because that trick provides no > inheritance.
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >You can't call an overridden method
> >through the widening trick, but you *can* call a > shadowed method like
> >that.
> >
> > =A0 =A0 =A0Mika
> >
> >Mika Nystrom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >TYPE A =3D OBJECT METHODS m(xxx) END;
> >
> >TYPE B =3D A OBJECT METHODS m(xxx) END;
> >
> >
> >This is, if I understand the terminology, a declaratin > of m as a shadowd >> > >method. =A0It's not what I want, because I > =A0intend that under normal<= > >br> > >circumstances, if an B object is used in a context > where its static type >> > >is known as A, I still want the normal overriding > mechanism to ensure
> >that B's m is the one called.
> >
> >I mean something like
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > END;
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> >b :=3D NEW(B);
> >
> >A.m(b,xxx)
> >
> >
> >So this is a way to specifically get the m that belongs > with A? =A0Will
> >this work with the way I want to define B and > m?
> >
> >as in
> >
> >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > END;
> >
> >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > END;
> >
> >PROCEDURE foo(self : B, ....) =3D
> >BEGIN
> > =A0 ...
> > =A0 ...
> > =A0 =A0A.m(self, ...) =A0 (* and this ends up calling > bar? *)
> > =A0 ...
> >END foo;
> >
> >
> >Well. I tried my version, and it works. =A0Thanks for > the advice.
> >
> >-- hendrik
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >
> > =A0 =A0 =A0Mika
> >
> >Hendrik Boom writes:
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;"> > >I have a module containing a parent class, and another > containing a
> >child class.
> >
> >The parent class contains a method 'foo', which > is to be overridden= > > in
> >the child class.
> >
> >But in implementing 'foo' in the child class I > want to call the par= > >ent's
> >
> >
> >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > >
style=3D"border-left: 1px solid rgb(204, = > >204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: > 1ex;">
>=3D"gmail_quote" style=3D"border-left: 1px solid > rgb(204, 204, 204); margin= > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > >method.
> >
> >Now with the method 'init' there's a trick > where in the child&#= > >39;s init,
> >you WIDEN self to the parent's type and then call > its init.
> >This works because 'init' isn't overridden > in an OVERRIDES clau= > >se,
> >but is defined as a new method that happens to have the > same name.
> >
> >Is there any way to do this with 'foo', where > the whole point is th= > >at
> >it be an overridden method and not a new > one?
> >
> >Do I have to do something like covertly exporting the > PROCEDURE that
> >implements 'foo' in the parent's module so > that it can be calle= > >d
> >directly? That would seem to be a violation of modular > design. =A0Or is
> >violating modular design exactly what I'm really > trying to do here?
> >
> >-- hendrik
> >
> >
> >
> >

> > > >--0015174c40fe49b5ad04a88e39c4-- > From dabenavidesd at yahoo.es Thu Jul 21 20:27:05 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 21 Jul 2011 19:27:05 +0100 (BST) Subject: [M3devel] calling an overridden method In-Reply-To: <1311264892.89028.YahooMailClassic@web29718.mail.ird.yahoo.com> Message-ID: <1311272825.36025.YahooMailClassic@web29717.mail.ird.yahoo.com> Hi all: as I see the fact is there is possibly a lot of people who loved Modula- but this is although unprovable or somehow you need to understand the ecology of this languages, the soundness, the everything to affirm that today as is claimed, there is evidence for that, certainly he might have it in it's time, that would explain the long work on oberon Compiler for Modula-3 re usability and polymorphic types support work: http://www.win.tue.nl/lotgevallen/em/bron1.pdf In fact the thesis on that proposed by himself of Groningen student was done in that route (but it was not like the Cardelli's taste, in typability and usability, perhaps the typing issue went too hard to prove by itself, but, nevertheless the type system is quite admirable as for one would expect from them) This is to say, there is quite hard work on that area for the better of the language, but need more investigation, or consolidation, or just proposal, probably based on: http://dissertations.ub.rug.nl/faculties/science/1995/b.laverman/ And other forms in Abadi-Cardelli plus Lampson-Burstall work, and that's a lot to consolidate in a proposal, still somehow doable...: http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/abstracts/src-rr-001.html Probably the best sources of that kind (theoretical not computable): http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-10.pdf http://portal.acm.org/citation.cfm?id=645683.758050&preflayout=flat http://www.cs.man.ac.uk/~david/categories/book/book.pdf I would suggest some machine learning program to match the same types, with a type system like that of Cardelli, if you can prove the later, then you have a point since it's on the same family of Calculus, yet they are quite computable or at least some correspondence where one can built yet another theory of Modula-3 calculi Thanks in advance --- El jue, 21/7/11, Daniel Alejandro Benavides D. escribi?: > De: Daniel Alejandro Benavides D. > Asunto: Re: [M3devel] calling an overridden method > Para: "Peter McKinna" , "Mika Nystrom" > CC: m3devel at elegosoft.com > Fecha: jueves, 21 de julio, 2011 11:14 > Hi all: > I find this terminology of types and checks and inheritance > big convoluted here (but would allow me this to say we need > a baby toy to plataform independent Modula-3 language or > sort of artifact, but not everything we would want since > there seems to be pieces of work which are undecidable, how > one can create some application of it, it seems odd to try > those for me). > > Although it is better to start with something to do that > and I fact I believe it's already started by a great > computologist, Coenraad Bron with work on Pascal, Modular > pascal at the University of Twente, The Netherlands and > later in Oberon with Modula-3 reusability and typability, at > University of Groningen, The Netherlands, after all, > Coen Bron, worked hard for that. Indeed people there liked > Modula-like languages a lot, which makes sense for yet > another local Prof visit there. > > I don't know many or too much but I believe great computer > scientist came from there as well but certainly is a good > resource of efforts in tools and so for ourselves > > Thanks in advance > > --- El jue, 21/7/11, Mika Nystrom > escribi?: > > > De: Mika Nystrom > > Asunto: Re: [M3devel] calling an overridden method > > Para: "Peter McKinna" > > CC: m3devel at elegosoft.com > > Fecha: jueves, 21 de julio, 2011 02:27 > > Section 6, under "Designators". > > > > Mika > > > > Peter McKinna writes: > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/plain; charset=ISO-8859-1 > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx) > > >where that A is a type > > > > > >I just compiled it and it works fine but its a > > syntactic subtlety that I > > >have sadly been unaware. > > > > > >Regards Peter > > > > > >On Thu, Jul 21, 2011 at 2:18 AM, Rodney M. Bates > wrote > > >: > > > > > >> > > >> > > >> On 07/20/2011 02:44 AM, Mika Nystrom wrote: > > >> > > >>> Right, a shadowed method is a new method > of > > the same name, just like > > >>> Algol block structure. An > overridden > > method is a different binding for > > >>> the same method. If you override a > > method, you can't call the old one > > >>> without using the special A.T.m(a,...) > syntax, > > since there's no binding > > >>> for the old one within the type record > for > > your object. The A.T.m(...) > > >>> syntax works whether the method is > shadowed or > > overridden. The widening > > >>> only works for shadowed methods. > > >>> > > >>> The clever thing is that the method > dispatch > > is based on the known type > > >>> of the object within the context that > the > > method is called, not where the > > >>> object type is declared. > > >>> > > >>> This distinction between overriding and > > shadowing I think is one of the > > >>> most brilliant aspects of Modula-3: it > avoids > > the problem that you > > >>> create an unwanted method override by > adding a > > new method of the same name > > >>> (whether in a supertype or a subtype). > > >>> > > >> > > >> This is probably my single favorite example > of how > > C++ is badly > > >> designed for practical programming and, more > > generally, why syntactic > > >> explicitness is important. > > >> > > >> C++ has both overrides and new methods, but > it is > > *very* hard for a > > >> programmer to see the difference. > > Syntactically, they look identical. > > >> > > >> For a member function declaration to be an > > override, you need: > > >> 1) It has the same simple name as the > original. > > >> 2) It has an equivalent signature to the > > original. > > >> 3) The original is 'virtual', which in this > > context means overridable. > > >> > > >> Equivalence of signatures is complicated, as > there > > are several rules > > >> about selected ways they can differ and still > be > > equivalent. For > > >> example, int *p and int p[] are equivalent. > > There can be overloaded > > >> (same name, different signatures) original > > methods, from the same or > > >> different superclasses, to be considered. > > And then this allows what > > >> would, I suppose, be called "overloaded > > overrides", as well as a mix > > >> of overloaded new methods and overrides, all > with > > the same name. > > >> > > >> 'virtual' has at least two very different > > meanings, one relevant here > > >> and one regarding repeated inheritance over > > multiple paths. The > > >> virtual property can come from anywhere in > the > > inheritance hierarchy, > > >> and can change between the original method > > declaration and the > > >> subclass we are trying to read. > > >> > > >> Shadowing can also involve signature > equivalence > > as well as name > > >> equality. AFAIK, you can't shadow with > the > > same name and signature, > > >> if the relevant inherited method is virtual. > > > But if not, a same-name, > > >> signature-equivalent member function is a > shadow. > > >> > > >> Meanwhile, linking up to a precursor to be > > overridden involves looking > > >> at signatures of same-named methods from all > > superclasses, whereas > > >> overload resolution in calls considers only > > same-named candidates from > > >> the same class, before signatures are > considered. > > >> > > >> The interactions with static member functions > make > > things even more > > >> complicated. > > >> > > >> None of this is syntactically explicit. > In > > contrast, Modula-3 says > > >> either "METHODS" or "OVERRIDES" explicitly. > > Moreover, even without > > >> these tags, new methods always have > signatures, > > while overrides do > > >> not. > > >> > > >> In my experience, very few C++ programmers, > > outside of compiler > > >> writers and language committee members, > understand > > these semantic > > >> rules. And they do predictably get > surprised > > when something turns out > > >> to dispatch when they expected it not to or > vice > > versa. When this > > >> happens, rather than figure the language out, > they > > just make a note to > > >> self to use some coding convention that > avoids > > getting anywhere close, > > >> e.g., never using the same name for > different > > methods, only for > > >> overrides. (Well, OK, that's probably a good > > practice anyway, but you > > >> see my point, I think.) > > >> > > >> > > >> > > >>> Mika > > >>> > > >>> > > >>> Hendrik Boom writes: > > >>> > > >>>> On Tue, Jul 19, 2011 at 01:26:14PM > -0400, > > Hendrik Boom wrote: > > >>>> > > >>>>> On Tue, Jul 19, 2011 at > 07:11:05AM > > -0700, Mika Nystrom wrote: > > >>>>> > > >>>>>> Sorry I'm being confusing > here. > > >>>>>> > > >>>>>> The code is right but I think > your > > question is a bit confusing. > > >>>>>> > > >>>>>> With your init example I > don't > > think you're talking about an overridden > > >>>>>> init method but a shadowed > > method. > > >>>>>> > > >>>>> > > >>>>> A 'shadowed' method. Is > that > > what you call what's essentially a new > > >>>>> method that happens to have the > same > > name? Just like the way a variable > > >>>>> in a nested block that has the > same > > name as one in an outer block would > > >>>>> be a new variable (I'm not sure > Modula > > 3 allows this, the way C and the > > >>>>> Algols do; I find it leads to > > confusing code). > > >>>>> > > >>>>> Init is the one I've seen > explained in > > documentation. It's not what I > > >>>>> want, because that trick provides > no > > inheritance. > > >>>>> > > >>>>> You can't call an > overridden > > method > > >>>>>> through the widening trick, > but > > you *can* call a shadowed method like > > >>>>>> that. > > >>>>>> > > >>>>>> Mika > > >>>>>> > > >>>>>> Mika Nystrom writes: > > >>>>>> > > >>>>>>> > > >>>>>>> TYPE A = OBJECT METHODS > m(xxx) > > END; > > >>>>>>> > > >>>>>>> TYPE B = A OBJECT > METHODS > > m(xxx) END; > > >>>>>>> > > >>>>>> > > >>>>> This is, if I understand the > > terminology, a declaratin of m as a shadowd > > >>>>> method. It's not what I > want, > > because I intend that under normal > > >>>>> circumstances, if an B object is > used > > in a context where its static type > > >>>>> is known as A, I still want the > normal > > overriding mechanism to ensure > > >>>>> that B's m is the one called. > > >>>>> > > >>>>> I mean something like > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > ... > > END; > > >>>>> > > >>>>> > > >>>>>>> b := NEW(B); > > >>>>>>> > > >>>>>>> A.m(b,xxx) > > >>>>>>> > > >>>>>> > > >>>>> So this is a way to specifically > get > > the m that belongs with A? Will > > >>>>> this work with the way I want to > > define B and m? > > >>>>> > > >>>>> as in > > >>>>> > > >>>>> TYPE A = OBJECT METHODS m(xxx) := > bar > > END; > > >>>>> > > >>>>> TYPE B = A OBJECT OVERRIDES m := > foo > > END; > > >>>>> > > >>>>> PROCEDURE foo(self : B, ....) = > > >>>>> BEGIN > > >>>>> ... > > >>>>> ... > > >>>>> A.m(self, > > ...) (* and this ends up calling bar? > *) > > >>>>> ... > > >>>>> END foo; > > >>>>> > > >>>> > > >>>> Well. I tried my version, and it > > works. Thanks for the advice. > > >>>> > > >>>> -- hendrik > > >>>> > > >>>> > > >>>>> > > >>>>>>> Mika > > >>>>>>> > > >>>>>>> Hendrik Boom writes: > > >>>>>>> > > >>>>>>>> I have a module > containing > > a parent class, and another containing a > > >>>>>>>> child class. > > >>>>>>>> > > >>>>>>>> The parent class > contains > > a method 'foo', which is to be overridden > > >>>>>>>> in > > >>>>>>>> the child class. > > >>>>>>>> > > >>>>>>>> But in implementing > 'foo' > > in the child class I want to call the > > >>>>>>>> parent's > > >>>>>>>> > > >>>>>>> > > >>>> method. > > >>>>>>>> > > >>>>>>>> Now with the method > 'init' > > there's a trick where in the child's init, > > >>>>>>>> you WIDEN self to > the > > parent's type and then call its init. > > >>>>>>>> This works because > 'init' > > isn't overridden in an OVERRIDES clause, > > >>>>>>>> but is defined as a > new > > method that happens to have the same name. > > >>>>>>>> > > >>>>>>>> Is there any way to > do > > this with 'foo', where the whole point is that > > >>>>>>>> it be an overridden > method > > and not a new one? > > >>>>>>>> > > >>>>>>>> Do I have to do > something > > like covertly exporting the PROCEDURE that > > >>>>>>>> implements 'foo' in > the > > parent's module so that it can be called > > >>>>>>>> directly? That would > seem > > to be a violation of modular design. Or is > > >>>>>>>> violating modular > design > > exactly what I'm really trying to do here? > > >>>>>>>> > > >>>>>>>> -- hendrik > > >>>>>>>> > > >>>>>>> > > >>> > > > > > >--0015174c40fe49b5ad04a88e39c4 > > >Content-Type: text/html; charset=ISO-8859-1 > > >Content-Transfer-Encoding: quoted-printable > > > > > >Forgive my ignorance, but where in the report does > it > > allow A.m(b,xxx)=A0 w= > > >here that A is a type

I just > > compiled it and it works fine but its a= > > > syntactic subtlety that I have sadly been > > unaware.

Regards Peter > >> > > >
On Thu, > Jul > > 21, 2011 at 2:18 AM, Rodney M. B= > > >ates < > href=3D"mailto:rodney_bates at lcwb.coop">rodney= > > >_bates at lcwb.coop> > > wrote:
> > style=3D"border-left: 1px solid rgb(204, 204, > 204); > > margin: 0pt 0pt 0pt 0.= > > >8ex; padding-left: 1ex;"> > > >
> > >
> > >On 07/20/2011 02:44 AM, Mika Nystrom > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Right, a shadowed method is a new method of the > same > > name, just like
> > >Algol block structure. =A0An overridden method is > a > > different binding for > >r> > > >the same method. =A0If you override a method, you > > can't call the old on= > > >e
> > >without using the special A.T.m(a,...) syntax, > since > > there's no binding= > > >
> > >for the old one within the type record for your > object. > > =A0The A.T.m(...) > >r> > > >syntax works whether the method is shadowed or > > overridden. =A0The widening<= > > >br> > > >only works for shadowed methods.
> > >
> > >The clever thing is that the method dispatch is > based > > on the known type
> > >of the object within the context that the method > is > > called, not where the > >r> > > >object type is declared.
> > >
> > >This distinction between overriding and shadowing > I > > think is one of the
> > >most brilliant aspects of Modula-3: it avoids the > > problem that you
> > >create an unwanted method override by adding a > new > > method of the same name<= > > >br> > > >(whether in a supertype or a subtype).
> > >
> > >
> > >This is probably my single favorite example of how > C++ > > is badly
> > >designed for practical programming and, more > generally, > > why syntactic
> > >explicitness is important.
> > >
> > >C++ has both overrides and new methods, but it is > > *very* hard for a
> > >programmer to see the difference. > =A0Syntactically, > > they look identical. > >> > > >
> > >For a member function declaration to be an > override, > > you need:
> > >1) It has the same simple name as the > > original.
> > >2) It has an equivalent signature to the > > original.
> > >3) The original is 'virtual', which in this > > context means overridab= > > >le.
> > >
> > >Equivalence of signatures is complicated, as there > are > > several rules
> > >about selected ways they can differ and still be > > equivalent. =A0For
> > >example, int *p and int p[] are equivalent. > =A0There > > can be overloaded
> > >(same name, different signatures) original > methods, > > from the same or
> > >different superclasses, to be considered. =A0And > then > > this allows what
> > >would, I suppose, be called "overloaded > > overrides", as well as a = > > >mix
> > >of overloaded new methods and overrides, all with > the > > same name.
> > >
> > >'virtual' has at least two very different > > meanings, one relevant he= > > >re
> > >and one regarding repeated inheritance over > multiple > > paths. =A0The
> > >virtual property can come from anywhere in the > > inheritance hierarchy,
> > >and can change between the original method > declaration > > and the
> > >subclass we are trying to read.
> > >
> > >Shadowing can also involve signature equivalence > as > > well as name
> > >equality. =A0AFAIK, you can't shadow with the > same > > name and signature,<= > > >br> > > >if the relevant inherited method is virtual. > =A0But if > > not, a same-name, > >> > > >signature-equivalent member function is a > > shadow.
> > >
> > >Meanwhile, linking up to a precursor to be > overridden > > involves looking
> > >at signatures of same-named methods from all > > superclasses, whereas
> > >overload resolution in calls considers only > same-named > > candidates from
> > >the same class, before signatures are > > considered.
> > >
> > >The interactions with static member functions > make > > things even more
> > >complicated.
> > >
> > >None of this is syntactically explicit. =A0In > contrast, > > Modula-3 says
> > >either "METHODS" or > > "OVERRIDES" explicitly. > =A0Moreover= > > >, even without
> > >these tags, new methods always have signatures, > while > > overrides do
> > >not.
> > >
> > >In my experience, very few C++ programmers, > outside of > > compiler
> > >writers and language committee members, > understand > > these semantic
> > >rules. =A0And they do predictably get surprised > when > > something turns out > >> > > >to dispatch when they expected it not to or vice > versa. > > =A0When this
> > >happens, rather than figure the language out, they > just > > make a note to
> > >self to use some coding convention that avoids > getting > > anywhere close,
> > >e.g., never using the same name for different > methods, > > only for
> > >overrides. (Well, OK, that's probably a good > > practice anyway, but you > >r> > > >see my point, I think.)
> > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > > =A0 =A0 =A0Mika
> > >
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 01:26:14PM -0400, Hendrik > Boom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >On Tue, Jul 19, 2011 at 07:11:05AM -0700, Mika > Nystrom > > wrote:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >Sorry I'm being confusing here.
> > >
> > >The code is right but I think your question is a > bit > > confusing.
> > >
> > >With your init example I don't think you're > > talking about an overri= > > >dden
> > >init method but a shadowed method.
> > >
> > >
> > >A 'shadowed' method. =A0Is that what you call > > what's essentiall= > > >y a new
> > >method that happens to have the same name? =A0Just > like > > the way a variable<= > > >br> > > >in a nested block that has the same name as one in > an > > outer block would
> > >be a new variable (I'm not sure Modula 3 allows > > this, the way C and the= > > >
> > >Algols do; I find it leads to confusing > > code).
> > >
> > >Init is the one I've seen explained in > > documentation. =A0It's =A0no= > > >t what I
> > >want, because that trick provides no > > inheritance.
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >You can't call an overridden method
> > >through the widening trick, but you *can* call a > > shadowed method like
> > >that.
> > >
> > > =A0 =A0 =A0Mika
> > >
> > >Mika Nystrom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >TYPE A =3D OBJECT METHODS m(xxx) END;
> > >
> > >TYPE B =3D A OBJECT METHODS m(xxx) END;
> > >
> > >
> > >This is, if I understand the terminology, a > declaratin > > of m as a shadowd > >> > > >method. =A0It's not what I want, because I > > =A0intend that under normal<= > > >br> > > >circumstances, if an B object is used in a > context > > where its static type > >> > > >is known as A, I still want the normal overriding > > mechanism to ensure
> > >that B's m is the one called.
> > >
> > >I mean something like
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D ... > > END;
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > >b :=3D NEW(B);
> > >
> > >A.m(b,xxx)
> > >
> > >
> > >So this is a way to specifically get the m that > belongs > > with A? =A0Will
> > >this work with the way I want to define B and > > m?
> > >
> > >as in
> > >
> > >TYPE A =3D OBJECT METHODS m(xxx) :=3D bar > > END;
> > >
> > >TYPE B =3D A OBJECT OVERRIDES m :=3D foo > > END;
> > >
> > >PROCEDURE foo(self : B, ....) =3D
> > >BEGIN
> > > =A0 ...
> > > =A0 ...
> > > =A0 =A0A.m(self, ...) =A0 (* and this ends up > calling > > bar? *)
> > > =A0 ...
> > >END foo;
> > >
> > >
> > >Well. I tried my version, and it works. =A0Thanks > for > > the advice.
> > >
> > >-- hendrik
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >
> > > =A0 =A0 =A0Mika
> > >
> > >Hendrik Boom writes:
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;"> > > >I have a module containing a parent class, and > another > > containing a
> > >child class.
> > >
> > >The parent class contains a method 'foo', which > > is to be overridden= > > > in
> > >the child class.
> > >
> > >But in implementing 'foo' in the child class I > > want to call the par= > > >ent's
> > > >
> > >
> > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > >
> style=3D"border-left: 1px solid rgb(204, = > > >204, 204); margin: 0pt 0pt 0pt 0.8ex; > padding-left: > > 1ex;">
> >=3D"gmail_quote" style=3D"border-left: 1px solid > > rgb(204, 204, 204); margin= > > >: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> > > > > > >method.
> > >
> > >Now with the method 'init' there's a trick > > where in the child&#= > > >39;s init,
> > >you WIDEN self to the parent's type and then call > > its init.
> > >This works because 'init' isn't overridden > > in an OVERRIDES clau= > > >se,
> > >but is defined as a new method that happens to > have the > > same name.
> > >
> > >Is there any way to do this with 'foo', where > > the whole point is th= > > >at
> > >it be an overridden method and not a new > > one?
> > >
> > >Do I have to do something like covertly exporting > the > > PROCEDURE that
> > >implements 'foo' in the parent's module so > > that it can be calle= > > >d
> > >directly? That would seem to be a violation of > modular > > design. =A0Or is
> > >violating modular design exactly what I'm really > > trying to do here?
> > >
> > >-- hendrik
> > > >
> > >
> > >
> > >

> > > > > >--0015174c40fe49b5ad04a88e39c4-- > > > From schlepptop at henning-thielemann.de Sun Jul 24 20:51:17 2011 From: schlepptop at henning-thielemann.de (Henning Thielemann) Date: Sun, 24 Jul 2011 20:51:17 +0200 Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E19AA04.1060207@lcwb.coop> References: <4E19AA04.1060207@lcwb.coop> Message-ID: <4E2C69A5.9020607@henning-thielemann.de> On 10.07.2011 15:32, Rodney M. Bates wrote: > 1) Dynamic typing is seldom either needed or used. > > The majority of variables (1) in sensible programs are what I call > _algorithmically statically typed_. By this, I mean, informally, that > there is a natural type for the variable that can be inferred from its > assignments and uses. Moreover, this is a static property, i.e., > independent of the program's inputs, and thus can be inferred from the > code alone. By the way, I remember the HiSoft Basic compiler on ZX spectrum that allowed you to run BASIC programs in a test mode, where the types of the variables were determined. In a sense (ZX Spectrum) BASIC is statically typed, since names of string variables must end with '$' and all alphanumeric variable names denote floating point numbers. The HiSoft Basic compiler had a richer set of numeric types: signed and unsigned 8-bit and 16-bit numbers and floating point numbers. In the test run the compiler determined for every variable the most restrictive type that covers all numbers seen during the program execution. From peter.mckinna at gmail.com Mon Jul 25 01:30:23 2011 From: peter.mckinna at gmail.com (Peter McKinna) Date: Mon, 25 Jul 2011 09:30:23 +1000 Subject: [M3devel] Coverage option Message-ID: How do you get the -Z option to work? It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. Regards Peter. -------------- next part -------------- An HTML attachment was scrubbed... URL: From hosking at cs.purdue.edu Mon Jul 25 01:42:12 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:42:12 -0400 Subject: [M3devel] Coverage option In-Reply-To: References: Message-ID: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > How do you get the -Z option to work? > > It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. > > Regards Peter. From hosking at cs.purdue.edu Mon Jul 25 01:44:42 2011 From: hosking at cs.purdue.edu (Tony Hosking) Date: Sun, 24 Jul 2011 19:44:42 -0400 Subject: [M3devel] Coverage option In-Reply-To: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> References: <9AD3B37B-5E74-4C9E-8A57-5B383E0FCEBF@cs.purdue.edu> Message-ID: <33D960BB-DB9F-42DD-A2C3-7E62A0D682CF@cs.purdue.edu> On second thought, perhaps I mis-spoke. I was thinking of profiling. I'm not sure when coverage instrumentation last worked. On Jul 24, 2011, at 7:42 PM, Tony Hosking wrote: > It used to work and was part of the config scripts. But I am concerned that Jay may have removed that option in the latest config scripts. > > On Jul 24, 2011, at 7:30 PM, Peter McKinna wrote: > >> How do you get the -Z option to work? >> >> It doesnt seem to get through to the front end to get the coverage instrumentation to be invoked. >> >> Regards Peter. > From dabenavidesd at yahoo.es Thu Jul 28 01:50:29 2011 From: dabenavidesd at yahoo.es (Daniel Alejandro Benavides D.) Date: Thu, 28 Jul 2011 00:50:29 +0100 (BST) Subject: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] In-Reply-To: <4E2C69A5.9020607@henning-thielemann.de> Message-ID: <1311810629.86820.YahooMailClassic@web29704.mail.ird.yahoo.com> Hi all: Thinking about this specific issues, it is somehow related to the idea of REPL (not simple CLI). http://en.wikipedia.org/wiki/REPL http://www.informatik-forum.at/archive/index.php/t-76842.html BTW there I know of a Basic-like interpreter in Modula-3 but not sure what it conditions is (for managing or graphic items in a screen). The most related thing I have heard of is of the way the programmer hint the compiler in Fortran (as M3 old friend told me, sorry buit I refuse to translate just for that in spanish about type inference: "... en fortran se hac?a por la letra inicial. luego declarando explicitamente el tipo. luego de acuerdo a las expresiones en que se usan las variables, considerando los diferentes operadores. otros ? ..."), it basically explains the fortran accepted initial letter variable names and types for it's expressions, e.g records and then accordingly to its operators. though typing in type finite number language is somehow easier (sic), certainly you can write a compiler for a language with dynamic types I believe or at least bootstrap from it (or anyone else). Thus is possible to believe you can write some sort of compiler a.k.a baby Modula-3 sort of evaluator in it self (still functional there should be somehow a way to proceed to be imperative at later stage) or at least express it's type checker in an untyped one, such core could later expressed for the rest of the language, such an imperative one given its denotational semantics is the one of the "Core" language which there are evaluators one of them Athena which is metatheory tool ftp://www.ai.mit.edu/pub/koud/athena.ps for defining such systems and check in terms of its denotational semantics its soundness, and what it makes to modular programming languages, which I believe the most complex part but in terms of functional languages doable at most of it, its type checker and if so compose algebraically it's definitions like a computer symbolic algebra system such as Maple, or that sort). This result is what I would call Modula-3 calculi and derive other calculus such as Abadi-Cardelli "A Theory of Objects", such a system to evolve naturally or artificially the language without putting at risk it's most complex abilities checked, theorems, etc, harder properties of it (for instance construct or compact the valid idiom of ESC/M3, etc). Such a system would allows us to define the type system and its "corresponding" algebraic symbolic system (some work is already done), similar experiences Compuserve had whit a Modula-like algebraic symbolic system called AML for Algebraic Manipulation Language (I wouldn't be surprised if its type system is the one of Modula-3 Module system, given that it's is one of the most important for algebraic symbolic systems, according to Dr. Cardelli Modula-3's one is vastly superior of what it most of them do currently, yet it's hard to type check at compile time like Generics or). Athenas's author argues some of the unsoundness in the Simplify Theorem prover came from the fact the first order logic (predicate calculus) is undecidable, and that may become a certain amount of time to check a given procedure, but with other logics, it might be less undecidable (if you can prove somehow that can switch it's decidable space to be equally or near e.g enough typable for that matters which is hard but AFAIK is not proved but what many somehow try to do manually and do some relatively good work at least of some complexity, but certainly they are not interested in unsound or undecidable cases as most of them are, whatever is worse, as Dr. Greg Nelson said "P-Space" hard to reason about it (certainly not the case for his data abstraction and information hiding valid module idiom), but nevertheless quite advanced work for such a system. Thanks in advance --- El dom, 24/7/11, Henning Thielemann escribi?: > De: Henning Thielemann > Asunto: Re: [M3devel] static typing [WAS: JIT, WAS: Google Benchmark - anyone interested in an Modula 3 version?] > Para: m3devel at elegosoft.com > Fecha: domingo, 24 de julio, 2011 13:51 > On 10.07.2011 15:32, Rodney M. Bates > wrote: > > > 1) Dynamic typing is seldom either needed or used. > > > > The majority of variables (1) in sensible programs are > what I call > > _algorithmically statically typed_. By this, I mean, > informally, that > > there is a natural type for the variable that can be > inferred from its > > assignments and uses. Moreover, this is a static > property, i.e., > > independent of the program's inputs, and thus can be > inferred from the > > code alone. > > By the way, I remember the HiSoft Basic compiler on ZX > spectrum that allowed you to run BASIC programs in a test > mode, where the types of the variables were determined. In a > sense (ZX Spectrum) BASIC is statically typed, since names > of string variables must end with '$' and all alphanumeric > variable names denote floating point numbers. The HiSoft > Basic compiler had a richer set of numeric types: signed and > unsigned 8-bit and 16-bit numbers and floating point > numbers. In the test run the compiler determined for every > variable the most restrictive type that covers all numbers > seen during the program execution. >