From: Christian Date: 2001-01-16T09:53:11+09:00 Subject: [ruby-talk:9352] Re: 101 Misconceptions About Dynamic Languages This is largely off-topic. Even so, this is a mailing list regarding an interpreted language, and the notion of C++ as an interpreted language is probably of interest to many on this list. That said, if this thread is to continue it should be moved to private email or another list (suggestions?). > [ C++ is not type safe because ] it is possible to > accidentally dereference invalid objects and write > to invalid memory addresses. I haven't done that in a long time. Maybe it's because I'm an 'expert'. More likely it is because I very rarely need pointers (I use containers), I dont use delete (I use smart pointers), and I dont dereference invalid objects (I pass arguments by value or reference). And I definitely dont use explicit_casts. But it's nice to know that I can when I need to. [skip rant about access to a parser that can be supplied as a library, or by using ANTLR] > Christian> What is the practical difference between Managed C++ embedded in XML and > >Ruby? > > Josh> Managed C++ is apparently a new choice for the interpreted domain; a > choice which looks quite similar to C++. So it can be evaluated > relative to usual set of criteria: > > a) is it cross platform > b) is it open source > c) it is fast > d) is it flexible > e) is it easy to write wrappers for calling compiled code > d) is it easy to embed > > I don't know the answers to these questions. Perhaps you > would like to fill in? I am no expert on .NET. a) No, but it is straight forward to make it so. All you need is a virtual machine that understands IL (intermediate language). A worthy cause for all the Penguin hax0rs. b) No, but see a). c) I haven't done any tests yet, but I've dissasembled M-C++ and looked at the resultant IL. The JIT compiler produces native code from this IL, and the IL looks a lot like a generic assembly language with class extensions and type information. I intend to run some real-world performance analysis. d) Of course it is flexible -- it is C++ with transparent access to classes, methods and data defined in other languages, even across process and machine boundaries. e) You don't need to 'write a wrapper for calling compiled code'. You just call it. All of the IL files contain meta-data that describes the interface to what is in it. You don't need any form of seperate IDL or manual marshalling. f) Yes, that's the point. With .NET you can embed C++ into XML. And XML is (or will be) ubiquitous. > Templates are cool, but C++ doesn't natively provide much support > for meta-programming. Compare C++ with Ruby or Common Lisp > for the project of listing and/or serializing and later restoring all > current system objects. There is no direct connection between meta-programming (describing types programmatically rather than explicitly) and persistence (object serialisation). C++ does provide native support for meta-programming -- it's called partial specialisation. Partial specialisation allows you to do some quite remarkable things. I'd love to elaborate but I feel that I have already veered enough from Ruby to justifiably invoke the wrath of many on this list. Christian