In the post Why Do We Use C++, I made the following statement.
Another, often forgotten strength of C++ and of many traditional modular and modular-turned-OO languages is linking, or more generally, we might say 'package management'. C++ innately offers build-time linking and runtime 'linking' is also usually available (i.e., DLLs). This allows graceful scaling. Tool support for this in C++ is strong and reasonably robust because C++ is so frequently used to build enormous projects. It's possible to build massive projects in pieces in ways that are awkward or impossible in many functional or logic languages.
Simon wrote,
C++ good at linking and package management??? That's the most ridiculous thing I've heard all week. This is one of the weakest aspects of C++. Where to start:
* no standard ABI for compiled code. ("Don't mix compilers")
* no standard for managing namespaces and packages like in Java.
* Very hard to evolve a class and keep binary compatibility. Lots of obscure compiler depend rules need to be followed to do this. ("Change a .h file, rebuild everything that uses it")
* dynamically loading code modules has to be done manually. Java, Python and other languages load classes on demand.
* C++ code can call C code, but any other kind of mixed language development is a nightmare.
* easy to break features like dynamic_cast when loading share libraries. (My fun debugging adventure this last week...)
I think Simon makes some excellent points here. So I'd like to ask the community.
What is the best language (and what are the best language features) for linking/loading and package and library management?
Friday, April 11, 2008
Which Languages Handle Packages and Libraries Best?
Labels:
Code and Software Development,
Senzee
Subscribe to:
Post Comments (Atom)
4 comments:
I always liked ML's Functors (see, e.g., Designing a Generic Graph Library using ML Functors), however, I haven't done anything with it that really stretches it to the limits.
My company is in the process of taking a c++ codebase and making it available as a library. c++ does have some serious issues when being used as a library, since iostream implementations are generally not binary compatible, and the runtime compiled against matters in other various ways.
Some of our library users have suggested providing C bindings, because it would alleviate a lot of the problems.
Other than C, languages that are interpreted all seem to do pretty well. But if you give the c++ source, you can also get very good compatibility, so that's not really apples to apples. Java has paid a lot of attention to the problem, and do well.
The best I've seen is a dependency resolution system such as perl's CPAN. This isn't a language feature per se, but greatly enhances the usability of libraries, even the compiled modules.
Aside from the complex physical connections that make up its infrastructure, the Internet is facilitated by bi- or multi-lateral commercial contracts (e.g., peering agreements), and by technical specifications or protocols that describe how to exchange data over the network. Indeed, the Internet is essentially defined by its interconnections and routing policies.
As of December 30, 2007, 1.319 billion people use the Internet according to Internet World Stats. Writing in the Harvard International Review, philosopher N.J. Slabbert, a writer on policy issues for the Washington, D.C.–based Urban Land Institute, has asserted that the Internet is fast becoming a basic feature of global civilization, so that what has traditionally been called "civil society" is now becoming identical with information technology society as defined by Internet use. - web design company, web designer, web design india
C#. (<-- period)
You don't ever have to think about moving things out in separate dlls, and it's very easy to add links to e.g. c-dlls.
And via reflection you can access any dll you'd like. It's heaven ;)
Post a Comment