horstman@mathcs.sjsu.edu (Cay Horstmann) (06/27/91)
I just attended a product presentation by a Borland guy on their class
library for Microsoft Windows called ObjectVision. I was somewhat distressed
to see an odd construct
class MyWindow : public TWindow
{ // ...
public::
virtual void paint() = [ WM_START + WM_PAINT ];
// ...
};
(I am quoting from memory, so the details may not be correct 100%). The idea
is that the paint() function would be selected when the WM_PAINT message is
sent from MS Windows.
They have a fancy name for this, dynamic message dispatching.
Did anyone see this before? Supposedly it is supported in BCC 2.0. Is the
mechanism really tied to MS Windows, or does it something useful in a
general construct?
The speaker (I believe the project head for ObjectVision--can't remember
his name) insisted that this did not violate any C++ standard, being "merely"
an extension. To me, this sounds like utter nonsense. Assuming for the moment
that the feature is indeed closely tied to Windows (or maybe other event-
driven UI that use small integers as message ID's), one of two things will
happen:
Nobody else will support it, and Borland C++ (otherwise an admirable
product) will be on the route that killed Pascal, with proprietary
extensions in every implementation.
Every DOS vendor must support it to stay compatible, and Borland manages
to place a true wart into the de facto language without even bothering
to go through the ANSI committee.
Maybe other netters have more info on this. My impression that the speaker
was an evil person was amplified when, upon his question what Borland could
do for us, I told him "Improve the Usenet support", and he answered "The
what?".
Cay
barmar@think.com (Barry Margolin) (06/28/91)
In article <1991Jun27.130247.5107@mathcs.sjsu.edu> horstman@mathcs.sjsu.edu (Cay Horstmann) writes: >The speaker (I believe the project head for ObjectVision--can't remember >his name) insisted that this did not violate any C++ standard, being "merely" >an extension. To me, this sounds like utter nonsense. Assuming for the moment >that the feature is indeed closely tied to Windows (or maybe other event- >driven UI that use small integers as message ID's), one of two things will >happen: > Nobody else will support it, and Borland C++ (otherwise an admirable > product) will be on the route that killed Pascal, with proprietary > extensions in every implementation. > > Every DOS vendor must support it to stay compatible, and Borland manages > to place a true wart into the de facto language without even bothering > to go through the ANSI committee. How do you think new features get added to languages? Almost all good features start out life as someone's private extension. If the extension becomes popular then it turns into a de facto standard, and may later find its way into an official standard. Features that are invented by the standards committee frequently turn out to be bad ideas, because they are adopted before there has been much experience with them. C++ itself was once someone's extensions to C. -- Barry Margolin, Thinking Machines Corp. barmar@think.com {uunet,harvard}!think!barmar
horstman@mathcs.sjsu.edu (Cay Horstmann) (06/28/91)
In article <1991Jun27.210518.19589@Think.COM> barmar@think.com writes: >In article <1991Jun27.130247.5107@mathcs.sjsu.edu> horstman@mathcs.sjsu.edu (Cay Horstmann) writes: [my tedious explanation of a nonstandard scheme in BC++ deleted...] > >How do you think new features get added to languages? Almost all good >features start out life as someone's private extension. If the extension >becomes popular then it turns into a de facto standard, and may later find >its way into an official standard. > >Features that are invented by the standards committee frequently turn out >to be bad ideas, because they are adopted before there has been much >experience with them. > >C++ itself was once someone's extensions to C. > All this is true enough. I guess there are three things that bother me about this. (1) Borland is trying very heavily to get the OMG to buy into their scheme. Now if anyone is ill-equipped to make any judgment on the side effect this would have on the C++ language, it is that body. [Maybe I am over- reacting here; I have not actually seen what their OMG proposal encom- passes.] Anyway, they shouldn't propose a library as a standard to the OMG which is based on a non-standard language extension. (2) As far as I can tell, this particular feature is extraordinarily poorly thought out. There almost certainly are better ways of doing this that don't require breaking the language. [I might be wrong; maybe the feature is much more general and useful than it appeared. Does anyone know?] (3) There generally are several phases in the design of any language. With C++, it seemed to be the feeling of the standards committee that the experimental phase is largely over (except, I guess, with templates and exception handling, the latter of which they have no business standar- dizing on, if you ask me), and to a degree I concur with that feeling. [I realize that I have in the past argued the other way around, but that was only with features I invented, hence truly great and necessary ones.] Really, I am hoping that someone who has actually used this feature can set me straight on its semantics and usefulness. Cay
blake@nthropy.uucp (Blake Freeburg) (06/28/91)
About this Borland Extension, What I really can't understand is how I would use it in a program. Can I also have a class that responds to messages, or is it something that must come out in order to support MS Win X.XX and all their yoga programming practices. I really don't know, but if I can use it as some sort of message based polymorphism (ie. it could go to all objects responding to the message), then as a global siren it would make a good idea. Like all things , we (people) are most often resistant to change. (Too bad there isn't a way to harness the friction a new idea creates - lots of energy there). Blake #include<disclaimer: This has nothing to do with the company I work for>
gary@neptune.uucp (Gary Bisaga x4219) (06/29/91)
In article <1991Jun28.141744.2323@nthropy.uucp> blake@nthropy.UUCP (Blake Freeburg) writes: >About this Borland Extension, > What I really can't understand is how I would use it in a program. Can >I also have a class that responds to messages, or is it something that must >come out in order to support MS Win X.XX and all their yoga programming >practices. ... Before we all get TOO worked up about this, is there a person from Borland who can explain what is really going on? Personally, the idea I got from the original poster was that the person who told HIM about the alleged extension (i.e., not the poster, but the poster's source) didn't necessarily know what he was talking about -- he was a marketing manager or something, wasn't he? Anyway, I can't imagine how such a thing could be added to C++ itself. Maybe he was describing a front-end to C++ that assists with writing Windows code? It wouldn't be the first time such a thing was done.
koussari@dorsai.com (Vahid Koussari) (06/29/91)
horstman@mathcs.sjsu.edu (Cay Horstmann) writes: > I just attended a product presentation by a Borland guy on their class > library for Microsoft Windows called ObjectVision. I was somewhat distressed > to see an odd construct > > class MyWindow : public TWindow > { // ... > public:: > virtual void paint() = [ WM_START + WM_PAINT ]; > // ... > }; > > (I am quoting from memory, so the details may not be correct 100%). The idea > is that the paint() function would be selected when the WM_PAINT message is > sent from MS Windows. > > They have a fancy name for this, dynamic message dispatching. > > Did anyone see this before? Supposedly it is supported in BCC 2.0. Is the > mechanism really tied to MS Windows, or does it something useful in a > general construct? > > The speaker (I believe the project head for ObjectVision--can't remember > his name) insisted that this did not violate any C++ standard, being "merely" > an extension. To me, this sounds like utter nonsense. Assuming for the moment > that the feature is indeed closely tied to Windows (or maybe other event- > driven UI that use small integers as message ID's), one of two things will > happen: > Nobody else will support it, and Borland C++ (otherwise an admirable > product) will be on the route that killed Pascal, with proprietary > extensions in every implementation. > > Every DOS vendor must support it to stay compatible, and Borland manages > to place a true wart into the de facto language without even bothering > to go through the ANSI committee. > > Maybe other netters have more info on this. My impression that the speaker > was an evil person was amplified when, upon his question what Borland could > do for us, I told him "Improve the Usenet support", and he answered "The > what?". > > Cay Could you explain the purpose of that funtion? This is the first time that I have seen this? Thank you.
kevin@msa3b.UUCP (Kevin P. Kleinfelter) (06/29/91)
horstman@mathcs.sjsu.edu (Cay Horstmann) writes: >In article <1991Jun27.210518.19589@Think.COM> barmar@think.com writes: >>In article <1991Jun27.130247.5107@mathcs.sjsu.edu> horstman@mathcs.sjsu.edu (Cay Horstmann) writes: >[my tedious explanation of a nonstandard scheme in BC++ deleted...] >> [Description of poor speaker also omitted.] There were two speakers in the presentation on OjbectWindows and BC++. One was pretty good, and the other should not be permitted to speak in front of gatherings of more that 2 people! :-) >(2) As far as I can tell, this particular feature is extraordinarily poorly > thought out. There almost certainly are better ways of doing this that > don't require breaking the language. [I might be wrong; maybe the feature > is much more general and useful than it appeared. Does anyone know?] The feature changes the way the VTAB is created. When you have a derived class, which overrides only a few virtual methods from a base class with many virtual methods, BC++ normally gives you a whole new VTAB. When you use dynamically dispatched messages, the new VTAB is some kind of linked-list with a "cache." Thus you end up with a smaller VTAB at the expense of speed. In the case of windows (which may have MANY virtual methods), this seems like worthwhile tradeoff (IMHO). However, it appears that this feature is only useful if you purchase ObjectWindows. You cannot use the normal language syntax to call a function (aka "message") which has been declared in this maner. If anyone knows how to call a function declared in this manner, I'd be interested to know how. The feature may be useful beyond Windows. It would seem to be useful in any case where you have a base class with a large VTAB, and your derived class overrides only a few virtual methods. Unfortunately, if you can't call the method, only AbjectWindows will be able to use this extension. -- Kevin Kleinfelter @ DBS, Inc (404) 239-2347 ...gatech!nanoVX!msa3b!kevin Dun&Bradstreet Software, 3445 Peachtree Rd, NE, Atlanta GA 30326-1276
caspers@fwi.uva.nl (B.M. Caspers (I)) (06/30/91)
About the extension of C++: this is something that is also available with Turbo Pascal for Windows: procedure A; VIRTUAL; = WM_XXXX + WM_YYYY; // or something like this.. Borland *could* do this with Pascal, since they set their own "standard" with TP. As soon as OWL for TPW came out, I have been wondering how they would do this in C++.. They wouldn't change the language! Now I know: they did, although tried to. Because this extension makes only sense in a event-driven env'mt (correct me if I'm wrong), I don't think it would make sense to include it in C++ itself. Another question: why did they do it in this way? There are several Windows class libs around which do work wqith regular c++. -- John
mwb@ulysses.att.com (Michael W. Balk) (07/01/91)
I was thinking of buying Borland C++, but if Borland is really going to install non-ANSI approved syntax into their product I will probably reconsider the purchase. Does anyone know of any other C++ vendors who might be doing or considering doing the same sort of thing with their C++ compilers? Mike Balk AT&T Bell Laboratories 600 Mountain Avenue Murray Hill, NJ 07974 mwb@ulysses.att.com
mike@taumet.com (Michael S. Ball) (07/01/91)
In article <15072@ulysses.att.com> mwb@ulysses.att.com (Michael W. Balk) writes: > > >I was thinking of buying Borland C++, but if Borland is really going to install >non-ANSI approved syntax into their product I will probably reconsider the >purchase. Since there is no such thing as ANSI-approved syntax, this is going to cause you no end of difficulties. > Does anyone know of any other C++ vendors who might be doing or >considering doing the same sort of thing with their C++ compilers? All MS-DOS native compilers include extensions to deal with the strange requirements of the environment. Consider, for example "near", "far", "pascal", "cdecl" and a variety of other wierd and wonderful extensions. Vendors include them because their customers feel they need them. One may presume that this is the exact reason that Borland chose to include this syntax. In this case it sounds as though one library vendor had enough clout to get the feature into the product. In other cases, many programmers request features and get them into the product. In no case is anyone required to use them. Since this feature is aimed at MS-Windows programs, which are inherently non-portable, it's hard to care a lot. -- Michael S. Ball mike@taumet.com TauMetric Corporation (619)697-7607
catfood@NCoast.ORG (Mark W. Schumann) (07/01/91)
mwb@ulysses.att.com (Michael W. Balk) writes: >I was thinking of buying Borland C++, but if Borland is really going to install >non-ANSI approved syntax into their product I will probably reconsider the >purchase. Does anyone know of any other C++ vendors who might be doing or >considering doing the same sort of thing with their C++ compilers? Or just don't use the extensions and invoke the compiler flags for "Standard C++" and ignore 'em. -- Mark W. Schumann 3111 Mapledale Avenue, Cleveland 44109 USA Domain: catfood@ncoast.org UUCP: ...!mailrus!usenet.ins.cwru.edu!ncoast!catfood "A union can't participate in a class hierarchy. It can't