Forgot your password?
Programming IT Technology

What Makes a Powerful Programming Language? 1332

Posted by Cliff
from the blueprints-for-next-generation-computing dept.
A not-so Anonymous Coward queries: "My company is about to start development on a new project, and I have to decide on a language and development environment. My boss gave me a set of criteria which needs to be filled: intuitive and easy to use IDE; simplified GUI design and event handling; advanced error handling; advanced object oriented design including multiple inheritance, abstract classes, and garbage collection; full support for operator and function overloading; and portable (at compile-time) across various platforms. I have already looked at C++, Java, C++, C#, Eiffel, and even; I may be missing something but as far as I can tell all of these languages are missing something from this list. Is there a language available that has all of these features? I thought that someone from Slashdot would be able to point me in the right direction?" If you were to design a language from the ground up, what features would you include and why?
This discussion has been archived. No new comments can be posted.

What Makes a Powerful Programming Language?

Comments Filter:
  • Re:Why doesn't... (Score:3, Informative)

    by Gkeeper80 (71079) on Monday February 11, 2002 @05:34PM (#2989501)
    no operator overloading
  • Re:Why doesn't... (Score:3, Informative)

    by Scaba (183684) <joe.joefrancia@com> on Monday February 11, 2002 @05:35PM (#2989512)
    No multiple inheritance. No operator overloading.
  • by BitwizeGHC (145393) on Monday February 11, 2002 @05:37PM (#2989554) Homepage
    ... is Smalltalk. In its standard form it's missing multiple inheritance, but is powerful enough to tackle just about any OOP task, even without MI. What the IDE is like depends on the environment you get; but I hear great things about VisualAge.
  • Ruby (Score:5, Informative)

    by JamesOfTheDesert (188356) on Monday February 11, 2002 @05:38PM (#2989562) Journal
    Don't know of a GUI as nice as, say,, but here are few in the works that look quite promising. Other than that, Ruby [] fits your needs quite well.
  • It all depends... (Score:2, Informative)

    by DrPepper (23664) on Monday February 11, 2002 @05:40PM (#2989584)
    ...on what you are writing. I use Java for a lot of work, but I wouldn't use it for anything that needed a *lot* of speed, or low level hardware access. However, Java does have a rich API and good portability.

    The best solution is ultimately probably using two languages - perhaps Java for interface work / portability, but also C for anything that needs to interface to hardware, or needs the performance. I'm only using Java and C as examples - but other languages are the same.

    Most languages can't do everything. Pick the best for the task required and the skills available.
  • by Anonymous Brave Guy (457657) on Monday February 11, 2002 @05:41PM (#2989600)

    I don't get it; what's wrong with good ol' C++, according to that list?

    I can only see two possible deficiencies according to your requirements. The first is the lack of a truly portable GUI library (though you can get libraries like Qt that are reasonably cross-platform in some cases). The second is the garbage collection, but (a) you can use a garbage collector for C++ (if you must...) and (b) using the right basic tools and techniques, garbage collection is largely unnecessary in a C++ program anyway.

    The biggest problem with C++ is getting people who program it, as opposed to C-with-bolted-on-classes-here-and-there. But if you've got a half-decent team and someone with smarts in charge, all of your concerns should be non-issues.

  • Ada (Score:1, Informative)

    by Anonymous Coward on Monday February 11, 2002 @05:46PM (#2989700)
    Ada has all these qualifications except multiple inheritance, but considering Ada's powerful generic facility, you probably won't need it. Ada is perhaps the best available language for software engineering. It is fast, high level, yet easily allows low-level bit-twiddling if need be. GNU GNAT is the without a doubt the highest quality compiler in the GNU family of compilers. It is ISO certified, and must pass over 6500 regression tests before it is shipped. Several studies have shown that projects written in Ada lead the pack in fewest defects per 1000 lines of code, besting all comers.

    Here are some Ada links:

  • by Jered (32096) on Monday February 11, 2002 @05:47PM (#2989704) Homepage
    Ask your boss what the project is going to do, and what it really needs out of a development environment, instead of just giving you a long list of buzzwords.

    The list of requirements he's given you reads like a job description that's been through the HR department. The first thing you do when responding to a job ad stating "Position requires at least 5 years C/C++, Java, Perl, and SQL experience on multiple platforms," is ask "What do you really want?" The same applies here.
  • SpecTCL (Score:2, Informative)

    by bandix (184495) <bandix AT geekpunk DOT net> on Monday February 11, 2002 @05:47PM (#2989711) Homepage
    If you're looking for good, portable, cross platform GUI development it's hard to go wrong with SpecTCL []. It is a Tcl/Tk visual development environment which can generate code in Tcl, Perl, Python, Ruby, and Java. There are versions of SpecTCL available on Windows, Mac, UNIX and any other platform on which you can get a working Tcl/Tk environment. There is a related project SpecTix which appears to provide a more complete IDE, but I've not used it. I'm also really (really!) impressed with Apple's new IDE, Project Builder. If you've not seen a demo, you need to ask someone with a Mac running OS X to pop in the developer CD and try it for yourself. It allows you to do rapid application development to the Cocoa APIs in C, C++, Objective C and Java. What's cool about writing to the Cocoa APIs is that they're not only available on OS X, they're available on most UNIXes via the GNUstep implementation. I'd really love to get some time to find out just how portable Project Builder's resulting code is to other OpenStep implementations.
  • C++ (Score:5, Informative)

    by yamla (136560) <> on Monday February 11, 2002 @05:52PM (#2989812)
    intuitive and easy to use IDE; simplified GUI design and event handling; advanced error handling; advanced object oriented design including multiple inheritance, abstract classes, and garbage collection; full support for operator and function overloading; and portable (at compile-time) across various platforms. I have already looked at C++, Java, C++, C#, Eiffel, and even;

    Let us take a look at how C++ compares.

    Intuitive, easy-to-use UI, check. This is a stupid requirement for a language, though, as any reasonable language should allow your choice of UIs. I've used Visual Studio for C++ as well as emacs and, currently, KDevelop [], which I like quite a lot.

    Simplified GUI design and event handling. C++ does not determine how GUIs are handled but we use Qt [] which works very well for what we want. Visual Studio lets you do GUI design inside of it, as does Borland C++ Builder.

    Advanced Error Handling. Define advanced. C++ gives you try-catch, etc. and provided you put a big of work into it, can be pretty good at error handling.

    Advanced object oriented design including multiple inheritance, abstract classes, and garbage collection. Well, C++ is the language most people think of when someone says OO. That said, C++ does not have any built-in garbage collection which is in my opinion a shame. Still, you can plug in garbage collection if you want, though the URLs escape me. In my experience, this has slowed down the execution of my C++ applications considerably but that said, my applications tend to allocate and deallocate memory quite frequently.

    Full support for operator and function overloading. Yes, C++ provides this.

    Portable (at compile-time) across various platforms. Well, C++ is NOT, in my experience, as portable as Java is. That said, if you use a platform independent GUI library such as Qt and you are smart in how you code, you shouldn't have any great problems. Gnu Autoconf, Automake, and Libtool, published by New Riders, will help you out here.

    So is C++ the language for you? That is impossible for me to say. The two major things it is missing is a GUI library (though Qt is excellent for this) and garbage collection (though this may not be a big issue). Personally, I find it easier to code in Java, mostly because Java does not allow things like multiple inheritence or operator overloading. Don't get me wrong, there is good reason to use these (and my C++ code occasionally does) but on the other hand, it can lead to much hassles. Very few projects really need multiple inheritence, for example, and MI can lead to all kinds of nasty problems. Do you really want to sink to the level of virtual inheritence, for example?

    Really, though, we cannot help you out all that much more without knowing what kind of project you are working on. Your requirements seem to indicate this is not a small project. As a result, I'd advise against VB.Net, having spent a year working in VB on a project about a third of a million lines of code long. C# has potential (it is a blunted-scissors version of C++) but really isn't mature enough at the moment. Eiffel I have no experience with. Java is great in SOME circumstances but I'd hesitate to recommend it to you without more information. And then there's C++, which I have spoken about in great length here. But C++ is a tricky language to use correctly.

  • Re:Python (Score:3, Informative)

    by DeadVulcan (182139) <(dead.vulcan) (at) (> on Monday February 11, 2002 @05:53PM (#2989814)

    I'm working at a software firm where we're using Python and Tk for our GUI development.

    The only big complaint I have about Python is that I would really like to be able to enforce static typing. In python, you can get some "thing" as a parameter and perform operations on it, call methods on it, return it back, without having any idea what it is you're working on until run-time, when your program barfs on the thing it got.

    Of course, the dynamic typing allows fast development, but the maintenance afterwards (especially when the code has changed hands) can be a bit of a chore sometimes.

    Overall, however, I think Python is extremely cool.

  • by pb (1020) on Monday February 11, 2002 @05:53PM (#2989815)
    Actually, Java ITSELF overloads the '+' operator; therefore, it's obviously a good thing just so long as no one ELSE can do it.

    That's one thing I dislike about Java; it intentionally cripples the features available to the user whilst using similar features in the design of the language. For example, you wouldn't want to write Java in Java, because it just isn't functional enough to do a decent job.
  • by igomaniac (409731) on Monday February 11, 2002 @06:00PM (#2989910)
    Operator overloading would be a good idea if it was implemented correctly. C++'s implementation of operator overloading is not very good because:
    • It generates temporary objects that are created and deleted behind the scenes. This means something as simple as A = B + C will turn into a creation of a temporary to hold the result of B+C and then a call to the copy constructor or operator= for the assignment, and then deleting the temporary.
    • operators cannot be made virtual, so the static linking nature of C++ sometimes give you other results than you expect. For example, overloading << for ofstream, you can write other classes to ofstream than before -- BUT if you write a string to the ofstream first, it returns a reference to an ostream (even if it's the same ofstream as before) and your fancy output is not called because it's not defined for ostream..

  • by Eccles (932) on Monday February 11, 2002 @06:10PM (#2990021) Journal
    It generates temporary objects that are created and deleted behind the scenes.

    Note that if your operator is inlined and the compiler is reasonably smart, these temporaries are often optimized away. Usually when they aren't, the cost of the copy is low compared to the overall cost of the operation.
  • Re:Why doesn't... (Score:1, Informative)

    by Anonymous Coward on Monday February 11, 2002 @06:11PM (#2990027)
    Imagine utility classes. I could very easily have:

    class MyClass : public Queue, public Session, public Thread

    Easy to maintain... as a matter of fact, I haven't touched those three base classes in a year and the ability to use their features like like that is wonderful! No reference passing, no single-inheritence "chains", no pointers to maintain. It's all handled on the "inside"

    One base class is a custom, thread-safe queue. Another is an ORACLE OCI session. And yet another is a Thread.

    Very useful!

    Best Regards!
  • Re:Python (Score:1, Informative)

    by Anonymous Coward on Monday February 11, 2002 @06:16PM (#2990087)
    There's a bunch of commercial IDE's available!

    As far as GUIs go, Python has excellent bindings for EVERY major GUI toolkit. My personal favorite is wxPython. Check it out!
  • by paulschreiber (113681) on Monday February 11, 2002 @06:22PM (#2990135) Homepage
    really, it does [].

  • by lkaos (187507) <anthony AT codemonkey DOT ws> on Monday February 11, 2002 @06:36PM (#2990292) Homepage Journal
    To me, the obvious solution seems to write the backend stuff in C++ and the GUI stuff in Java. Java has a great GUI library and while it can't provide all the requirements, C++ can satisify the rest of the requirements. I imagine you are not looking to use MI in a GUI... That would be quite strange... I also imagine you are not looking to use operator overloading in a GUI either (although sadly enough I've seen it done).

    So, here's my list :)
    1. intuitive and easy to use IDE
      Does such a thing exist??? Every language has an IDE. Visual Studios, JBuilder, Emacs, KDevelopers, etc.

    2. simplified GUI design and event handling
      Well, this really depends on the operating system. Java's the good place to go here. If that can't be done, GTK and Qt are good libraries and they use the standard X style callback mechanism which is so much nicer than message based systems. What your really looking though is for a WYSIWYG GUI designer so I'd recommend Glade or whatever comes with the IDE you go with.

    3. advanced error handling
      Such a buzz word... Java and C++ both use exceptions. Good error handling has more to do with a projects design though and not really the particular language...

    4. advanced object oriented design including multiple inheritance, abstract classes, and garbage collection
      Lets get our terminology right :) GC is not an OO feature. GC is a generic programming concept and it is by no way the only way to avoid memory leaks. In C++, reference counting is much preferred over GC and it's probably the better choice since C++ programs tend to not use enough memory for GC to really be effective. Check out boost [] for some good reference counting classes.

      IMHO, MI is necessary for advanced projects but Java interfaces _almost_ make MI unnecessary. You may do well to evaluate whether you truly need MI. What really matters, is how good your development team is.

    5. full support for operator and function overloading
      This really should be in Java if you ask me but it isn't. You really don't need it. You could use interfaces instead. Of course, C++ support for operator overloading is great. Again though, you should really evaluate if you truly need such an advanced feature. If you just going to use it to concat strings then you don't need it.

    6. and portable (at compile-time) across various platforms
      Java or GCC. C++ is portable as long as it's GCC on both platforms :) Don't expect C++ to be very portable across different compilers though...

    I think I'd have to agree with the general sentiment that you really need to evaluate your requirements because they are extremely unjustified and appear to be either (1) a bad manager, (2) pressure from employees to obtain "resume builder" skills, or (3) a very complicated project which you are not providing very much required information for :)

    No language can satisify all your requirements perfectly. C++ comes closest. A combiniation of C++ and Java would do the job nicely.
  • by Glock27 (446276) on Monday February 11, 2002 @06:41PM (#2990345)
    I've seen lots of posts claiming that "Java doesn't have operator overloading, so it doesn't qualify" (I'll ignore MI, since I think interfaces are a reasonable substitute).

    However, operator overloading is simply syntactic sugar and can be supplied either through an advanced IDE (I may look at jEdit to see how hard it would be to implement there) or through a preprocessor (jpp is one such preprocessor, though it seems hard to find on the net these days).

    When doing operator overloading, it would be good to eliminate temporaries if possible. If a 'c' array object already exists before the assignment, it would be nice if "c = a + b" generated "c.assign(" rather than the naive "c = new Array(", which causes heap thrashing and unnecessary overhead. My guess is that this kind of optimization would be easier with an IDE type approach. (I hope that made sense!)

    299,792,458 m/s...not just a good idea, its the law!

  • Re:Ruby (Score:2, Informative)

    by chrylis (262281) on Monday February 11, 2002 @06:48PM (#2990412)
    New language? The interpreter's on version 1.6.5, and the language has been evolving in Japan for several years. Now as far as being compiled, you're right--it's not. But the Ruby people claim that they've managed to implement parts of a WM in it, and until KDE, that was generally considered too speed-critical for even C++. I don't personally see what benefit a compiled language has over an interpreted one besides, of course, speed. As far as training... It just *works*! Really!
  • by markj02 (544487) on Monday February 11, 2002 @06:58PM (#2990511)
    You want a very expressive object system? Great, but you don't get static type checking anymore. You want overloading? Great, but type inference goes out the window. You want fast executables? Sure, but expect to have to tell the compiler in excrutiating detail what you are doing and how you are doing it.

    Still, given your feature list, CommonLisp may be your best bet (the CMU CommonLisp implementation for Linux is pretty good). It's a very expressive language and compiles into reasonably good code, although it doesn't have much static type checking, the language definition is messy, C-like performance can be hard to achieve, its C interface is a bit cumbersome, its libraries are less than stellar, and its user community is tiny. Bigloo, a compiler for Scheme, interfaces more nicely with the rest of the world and generates reasonably good code, but lacks threads and has a less expressive object system.

    If you want something statically typed, O'Caml is a great language, combining object oriented and functional programming. It generates good code and interfaces reasonably well with C. However, you don't get overloading.

    For great libraries, reasonable performance, and good standardization, Java can't be beat, but the language itself can be a little tedious. C# fixes some of the tedium of Java, but its libraries and performance are nowhere near as good yet, and it's pretty much Microsoft-only for now.

    And don't forget about C++. For complicated numerical algorithms that need to run fast, there is nothing better than C++. For complicated GUIs, and interactive applications there is almost nothing worse, however.

    So, overall, there just isn't a single answer. Every language is an engineering tradeoff. Learn many of them, and you will benefit both from the experience and the choices you have.

  • by leonbrooks (8043) <SentByMSBlast-No ...> on Monday February 11, 2002 @07:00PM (#2990527) Homepage

    All of the above in sensible doses. Plus it's more fun. And a prettier colour. (-:

    BTW, XP isn't a cheap ripoff, just a clumsy one. I suspect that the TCO will work out noticeably worse than WinME. Windows started life without scaleable elevators (to pick a known example) because one William Henry Gates III told the developers to take them out again so that it looked more Mac-like. Dilbert of a few days ago [] is fitting commentary.

    Dons asbestos undies, prepares to duck...
  • by Anonymous Coward on Monday February 11, 2002 @07:26PM (#2990749)
    Well, operator overloading is easy in Python. You just have to implement special methods (eg. __add__) in your classes. Function overloading is not possible due to dynamic typing.

    You are wrong with abstract classes. Certainly there is no special keyword (eg. abstract) but you can write classes with unimplemented methods .
  • by eric2hill (33085) <> on Monday February 11, 2002 @07:49PM (#2990893) Homepage
    As others have stated, look at Delphi/Kylix.

    I work with Delphi on a daily basis. Delphi supports (fully) all of the following:
    • The GUI is simply fabulous. There are also productivity add-ons to make development even faster.
    • Full exception model included, and support for write-your-own exception model.
    • Complete OO design model, however it doesn't support multiple inheritance. Instead, interfaces are fully supported. Abstract classes and interfaces accomplish 99% of what MI supports. I would vote for MI in the next release of Delphi, simply to complete the object model, but I haven't run across a problem yet that can't be easily solved using classes and interfaces.
    • Garbage collection is automatically performed for strings and interfaces, but anything you allocate memory for you need to free.
    • Full support for object inheritance and function overloading. There is no operator overloading.
    • Portable from Win32 to Linux (using QT...)
  • by Jon Howard (247978) <<moc.liamg> <ta> <noj.drawoh>> on Monday February 11, 2002 @08:02PM (#2990985) Journal

    Here's a categorized list of companies successfully using Allegro Common Lisp [], along with a couple examples from each; follow the links for more companies and more information:

    • Animation & Graphics [] (including Square USA and Naughty Dog Software)
    • Artificial Intelligence [] (including Kurzweil and Microsoft Research)
    • BioInformatics [] (including MDL Information Systems)
    • B2B & E-Commerce [] (including ITA Software [powers Orbitz])
    • Data Integ. & Mining [] (including Cadabra/GoTo Shopping)
    • EDA/Semiconductor [] (including AMD and American Microsystems, Inc.)
    • Expert Systems [] (including Univ. of Chicago Infolab and Signal Insurance)
    • Finance [] (including Price Waterhouse Coopers and Cognition Corporation)
    • Intelligent Agents [] (including Fujitsu Limited)
    • Knowledge Mgmt [] (including Design Power, Inc.)
    • Mechanical CAD [] (including Parametric Technologies Corp.)
    • Modeling & Simulation [] (including Boeing and Johnson Engineering)
    • Natural Lang. Proc. [] (including Sony CSL and Stanford University)
    • Optimization [] (including NASA and Space Telescope Institute)
    • Research [] (including Univ. of Southern California and University of Wyoming Applied AI Lab)
    • Risk Analysis [] (including Arthur D. Little, Inc.)
    • Scheduling [] (including Northwest Airlines and Ascent Technology, Inc.)
    • Telecom [] (including France Telecom R&D and British Telecom Labs)
    • Web Authoring [] (including The Performing Graphics Company and Schema GmbH)
  • by Colonel Panic (15235) on Monday February 11, 2002 @08:21PM (#2991130)
    True, Ruby doesn't have multiple inheritance. But as you point out using Ruby's mixin feature (allows you to mix a module into a class thereby adding a module's behavior to a class) can often be used in place of MI.

    Using MI tends to get messy anyway, especially when you end up with some kind of diamond inheritance tree. I personally tend to avoid MI even in languages that allow me to do it. I have to say that I much prefer Ruby's approach of using Mixins.
  • Re:Java Interfaces (Score:3, Informative)

    by Tattva (53901) on Monday February 11, 2002 @08:41PM (#2991243) Homepage Journal
    The whole idea of interfaces, to me, seems to be due to the fact that you don't have callbacks in Java. This, of course, is stupid: Why can't I say "OK, you performed an action, so call this function" instead of "OK, if you insist on it, I will call my method 'actionPerformed'"?

    Several other people have addressed the issue of callbacks, but I am interested in talking about your assertion that interfaces are only for callbacks. Interfaces are contracts that are at the heart of polymophism, a client doesn't care "what" your object is as long as it provides the services you need.

    Others may disagree, but in my opinion, multiple inheritance in C++ is the result of confusion between polymorphism and reuse on the part of the language developers. If you want to reuse multiple objects and also provide similar services to two or more of those objects it is much clearer to the observer of your code if those parent classes implement interfaces describing their services and you include instances of the classes you need as private member variables and you delegate to those private member instances in your implementation of the interface methods that you need to provide.

    I think this is much better than having tons of confusion over similar method names with grossly different semantics, figuring out which parent class a virtual method is tied to, dealing with virtual vs non-virtual inheritance, and the tons of other things that make deciding through inspection who exactly implements the bar() method on your class foo next to impossible without having 4 monitors.

  • by Jerf (17166) on Monday February 11, 2002 @09:58PM (#2991750) Journal
    But if you want to stick a trivial loop on 1 line, you can't.


    >>> for i in range(0,4): print i

    >>> for i in range(0,25): print filter(lambda a: a % 2, range(0,i))

    Works in Python. You'll have to try harder to find some other reason to hate it. ;-)
  • by pclminion (145572) on Monday February 11, 2002 @10:17PM (#2991850)
    I can definitely speak for the elegance of Python; I've used it to build some pretty large-scale AI projects, among about a zillion other things.

    If you're looking for the weirder OO features like operator overloading, you'll find them in Python, but the calisthenics you have to go through to do it might make you think twice about using it.

    The only real drawback to Python is the execution speed. One of the AI projects I previously mentioned worked great (and I completed it probably 10 times faster than I would have had I been using C/C++), but it ran very very slowly. The cause of the problem is clear -- no static typing, reference-count garbage collection, a stack-based VM (I ain't knockin' it! It's just hard to optimize)...

    If you are planning to do anything compute-intensive, maybe Python is not the right choice. It's always possible to break out to C/C++ with the Python API (to do your compute-intensive tasks), but there are drawbacks: over time, the Python C-API will probably drift, and you'll have to keep tweaking your native code to keep it working. Also, the inner workings of Python, especially refcounts, can be boggling and the source of bugs and memory leaks that can be fantastically hard to track down.

    If you consider Python, then great. Just keep these points in mind.

  • by Anonymous Coward on Monday February 11, 2002 @10:47PM (#2991961)

    I can't tell whether you're being sarcastic or whether you really don't know about Common Lisp []. Dynamic, strong typing, compilers and interpreters, great IDEs and debuggers, easy runtime modification and incremental compilation, flexible and powerful object system (including multiple-inheritance, multiple-dispatch, method combination... and the ability to modify its behavior), macros that have the full power of the language, etc...

    Also see CLiki [] and The Common Lisp Hyper Spec []

  • by cduffy (652) <> on Monday February 11, 2002 @11:12PM (#2992045)
    You CAN stick extra indentation in in python (unless you do it such a way as to make your code read ambiguously or otherwise not Look Right to the observer), and similarly, if you want to "cheat" and start only indenting two spaces instead of a full tab partway through, you can do that too.

    What you can't do in python is make your code's actual block structure inconsistant with your code's apparent block structure -- and thank Guido for that!

    And as another poster mentioned, you *can* stick the trivial loops on line 1. Python's a bit smarter than most folks who don't know it assume it to be.
  • Borland Delphi? (Score:2, Informative)

    by treierts (554955) on Tuesday February 12, 2002 @01:02AM (#2992480)
    Why not try Borland Delphi? It meets all your requirements except Multiple Inheritance (can be emulated) and real platform portability (but so does C# and VB.Net). Atleast now you can develop Windows/Linux solutions using Delphi/Kylix. When it comes to good IDE's and easy GUI development Delphi is right on, you'll never look back. Tom.
  • Try Ada-95 (Score:3, Informative)

    by aebrain (184502) <> on Tuesday February 12, 2002 @02:15AM (#2992700) Homepage Journal

    URLs To backup my bald assertions below. Browse the sites and you'll see studies and numbers. Facts not Religious opinion. Adapower [] is a good start. Or the Ada Information Clearinghouse []

    "intuitive and easy to use IDE; simplified GUI design and event handling; advanced error handling; advanced object oriented design including multiple inheritance, abstract classes, and garbage collection; full support for operator and function overloading; and portable (at compile-time) across various platforms."

    IDE - there's a variety of freeware ones.

    Simplified GUI - there's a variety of bindings to various APIs, from X-windows to SWING to W32. Plus many other simplified freeware ones, some thin, some thick. Pick which one is most appropriate. Ada (the language) doesn't have anything more advanced than stdio - but then again, neither does Java, it relies on the awt and swing libraries *shrug*

    Advanced Error Handling - Java's exceptions contain more info than Ada's. Ada ones are more simple, easy to use, but I think Java's are better in most ways. They should be - both C++ and Java copied their exception handling from Ada's 1983 incarnation. OTOH most of the time all Java programmers (like me) do is make an exception without using any of the internal data, so YMMV.

    Advanced OOD including multiple inheritance and abstract classes - As regards OOD. Ada's the most flexible of the lot. You can do strict OO, but don't have to. Methods are properties of Classes(actually packages) rather than objects, so you can say Wooden.paint(a_wooden_door) or Door.paint(a_wooden_door) rather than a_wooden_door.paint(). So you get all the advantages of multiple inheritance, without the horrendous penalties (which method are you inheriting, the paint for wooden things or the paint for doors?). Abstract classes are used all the time.

    Garbage Collection - Ada doesn't produce garbage in general. You can do most things using statically allocated memory, or dynamic allocation within a statically-defined garbage-collected area. When you want dynamic allocation, you can choose to rely on the compiler's garbage collection, if it exists, but you're also given tools for explicit disposal of garbage. Note that Java has true garbage collection, but even Sun says that you can't rely on it, you should use explicit disposal. This is true not just for Java, but in general.

    Operator/Function Overloading Ada has had this since 1983. Often copied, never bettered

    Portable Stories abound of million- and 100,000-line Ada programs that require a dozen lines changed to make em work on different systems. My own personal war story is of a 20,000 liner developed on a 386 on an Irvine compiler, ported with 3 lines changed to a MicroVax using a DEC compiler, thence to a Vax using another DEC compiler, then to an embedded system using a DDC-I compiler. Was an AI to do anti-missile defence, people's lives depended on it. It's been in service since 1995. Cost less to make than the 7,000 lines of C in its test bed too. I've just help finish a 20,000 line piece of spaceflight avionics that makes not one Operating System call, even though it has 60+ simultaneous threads of execution. Oh yes, there's a shareware (or GNU licence? I forget) Ada compiler that produces Java bytecode, so will run on any Sun JVM.

    So why isn't Ada-95 used by anyone? Because everyone knows it's too big (nearly as many keywords as C++,), needs a huge machine to run (bigger than a 286 running at 4 MHz - which was big in 1983 when Ada-83 was invented), it's designed by a committee (like Linux - one really good designer Jean Ichbiah, then peer review), and it's a product of the US Military (like Unix, and the Web - designed for not by). Oh yes, and expensive (GNAT is open source...) and uses a lot of risky concepts ( to wit, Operator Overloading, Object Oriented Design, Exceptions, all risky and untried in 1983 ). It's also obsolete, (the Ada-95 version being a little younger than C++). And it is used, for Avionics of all modern airliners ( Illyushin, Boeing, Lockheed, Airbus) and many satellites, railway- and air- traffic control systems, where quality is vital. It's not used much elsewhere, as there's a vested interest for software developers and programmers to keep software buggy (so they have job security) and quick to market (it takes a long time to develop reliable software).

    So Ada's perfect, right? Wrong. It's just better than most general-purpose languages for many purposes. BUT It's not language of the month ( C# this month? ) so getting Ada programmers is very difficult. Though it's easy to learn, based like the similar Eiffel, Delphi, Object Pascal and Modula-2/3 on Pascal. If you've programmed hardware design in VDML, or used Oracle's access language, you've used Ada without knowing it.

  • Re:Try Ada-95 (Score:3, Informative)

    by Black Parrot (19622) on Tuesday February 12, 2002 @04:22AM (#2992930)

    > Simplified GUI - there's a variety of bindings to various APIs, from X-windows to SWING to W32.

    Increasingly popular for Ada is GtkAda [], a thick, well-documented, OO binding for Gtk+. It is portable between *n*x and Windows.

    > Garbage Collection ... When you want dynamic allocation, you can choose to rely on the compiler's garbage collection, if it exists, but you're also given tools for explicit disposal of garbage.

    IIRC, the language spec makes garbage collection optional, and almost no one implements it.

    > So why isn't Ada-95 used by anyone? Because ... it's designed by a committee (like Linux - one really good designer Jean Ichbiah, then peer review) ...

    "Designed by committed" is the sort of argument prejudice evokes when there aren't any real arguments. People use stuff designed by committee all the time withoug whingeing about it. The argument ought to be about the design, not about the designer(s).

  • Ada95 (Score:1, Informative)

    by Anonymous Coward on Tuesday February 12, 2002 @09:04AM (#2993439)
    Actually, Ada fit the bill, except for multiple heritance. Although that could be emulated through generics and Ada's package feature.

    I know, people start throwing things at you when you mention Ada. But how many of those people have actually used Ada95 and not the old obsolete standard...

    Also compilers for Ada aren't that expensive nowadays, they even come for free (speech). Soon a part of the gcc 3.0 branch (keep up the good work GNAT!).

    Au revoir
  • by Anonymous Coward on Tuesday February 12, 2002 @10:08AM (#2993711)

    So what does your base-object provide ? A type-info field ? So that you can write glorious switch-on-type code ?

    Fact is, it doesnt buy you anything. If you need type-info in your classes, chances are you got somehting seriously wrong. Most small projects get around that, but in medium or big - sized ones youre fucked.

    The only chance for survival is decoupling, decoupling, decoupling. Common base objecst dont let you do that.

  • by pfdietz (33112) on Tuesday February 12, 2002 @11:29AM (#2994098)
    I'm not going to lie, I don't really know Lisp, I kinda of understand the basics of the syntax and that's about it. I'm assuming it's based on reverse polish notation or something. Is there a reason for this?

    The reason is that Lisp programs are Lisp data structures. This is the foundation on which Lisp's incredibly cool macro system is based -- macros in Lisp can perform arbitrary computations on the program tree, not just do simple and/or awkward textual substitutions. It's also not any harder to type or understand than more conventional syntax, once you get used to it. Don't let the shock of the unusual turn you off.

  • by n1vux (452650) on Tuesday February 12, 2002 @06:07PM (#2996567) Homepage
    Firstly, comparing the core standard of one language with the latest extensions of another is a very old troll, and older than the USENET; probably dates to the DARPA lists, if not before in the IEEE and ACM paper journals. (I was using this troll back when PL/I was cool.) Nothing, not even Perl or or it's blood-brother PL/I, can be all things to all people. I hope the list of needed features actually addresses the next project's needs, we can't judge that from here.

    Secondly, Perl OO is conforming with Perl's TIMTOWTDI (There Is More Than One Way To Do It) design goal. While native Perl OO is pretty casual in its encapsulation, if you want Bondage-And-Discipline OO, you can use one of Damian's Class::Classes, with Contract programming or Data hiding enforcement or ... there are at least 6 choices. At least one should have multiple inheritance grafted on, although I can't recommend actually using multiple inheritance of implementation (except maybe in CLOS); multiple inheritance of interface (like in Java or COM) seems safe enough.

    Likewise, anything else Perl is missing can be added via other modules -- many of which probably already exist, but can be custom crafted on demand. This includes Operator Overloading, which can be added, for whatever cases are required, using Inline::Filter -- using the full power of Perl as a macro-language for Perl, to enhance the syntax as desired. Not for the faint of heart, but a good Perl consultant can whip it up for you.

    GUI's -- Yes, it is true development of GUI's isn't built into Perl, unless you count the TCL modules as "built in". Ability to do GUIs does seem to run counter to portability (at compile time, whenever that is); this requirement may force your choice on Java. Perl has Gnome, TK/GTK, and Curses interfaces already. See CPAN []

    Thirdly, Perl6 will likely be mostly functional before .NET this summer, and _will_ be all things to all people, thanks to the modular bolt-on accessories. (Operator overloading will apparently be a part of the PARROT runtime for Perl 6, as well as in Perl6.)

    Fourthly, Reality Context: Did The Boss specify that you had to be able to hire programmers in this language? Cheap or expensive? With lots of experience or not? Here or offshore? Eiffel's a great language, if you don't mind all your staff speaking French.

    Regarding the evils of Lisp ... see the story of Yahoo!Stores Paul Graham: Beating the Averages [] or /. #1539239 [] for a real world $ucce$$ story with Lisp and why; amusingly, he turned up just last week /. #1917202 [].

    -- Bill

    I had a sigfile ... back when sigfiles were cool
  • ADA is the best (Score:2, Informative)

    by sireenmalik (309584) on Wednesday February 13, 2002 @06:00AM (#2999148) Homepage Journal
    ADA is the best language there is. I regularly use JAVA and C++ and i know ADA beats the competition my miles.

    Every new feature that you see in the modern languages today was in ADA years ago.

    * better concurreny (protected types)
    * better realtime systems( tasks)
    * better exception handling(fail-safe systems)
    * is a strongly typed language.
    * better interrupt handling
    * very early on introduced the philosophy of reusable code.
    * had intefaces when java was still in its infancy
    and is used in: financial services, avionics, aeronautics, air traffic control, telecommunications, medical devices, power plants, railroads, astrophysics, satellites, and defense, to name a few.

    If you are going to develop a realtime system forget about everything else... use ADA.
    my two cents

"Maintain an awareness for contribution -- to your schedule, your project, our company." -- A Group of Employees